From a5f5f4aede130e73b9654cd05937182cf60737fb Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Wed, 5 Jun 2024 09:48:56 +0200 Subject: [PATCH] reimplemented module artikeltexte --- phpwf/plugins/class.yui.php | 11 +- www/lib/class.erpapi.php | 27 ++- www/lib/class.remote.php | 21 +- www/pages/artikel.php | 6 +- www/pages/artikeltexte.php | 270 ++++++++++++++++++++++++ www/pages/content/artikeltexte_edit.tpl | 144 +++++++++++++ www/pages/content/artikeltexte_list.tpl | 10 + www/pages/importvorlage.php | 4 +- www/widgets/templates/_gen/artikel.tpl | 6 +- 9 files changed, 465 insertions(+), 34 deletions(-) create mode 100644 www/pages/artikeltexte.php create mode 100644 www/pages/content/artikeltexte_edit.tpl create mode 100644 www/pages/content/artikeltexte_list.tpl diff --git a/phpwf/plugins/class.yui.php b/phpwf/plugins/class.yui.php index d78eb336..c2d2398e 100644 --- a/phpwf/plugins/class.yui.php +++ b/phpwf/plugins/class.yui.php @@ -1921,8 +1921,17 @@ class YUI { } } - $this->app->erp->RunHook('AARLGPositionenSprache', 6, $module, $id, $artikel_id, $sprache, $bezeichnung, $beschreibung); + + // OpenXE artikel_texte + $language = $this->app->erp->GetSpracheBeleg($module,$id); + $sql = "SELECT * FROM artikel_texte WHERE artikel = '".$artikel_id."' AND sprache = '".$language."'"; + $uebersetzung = $this->app->DB->SelectRow($sql); + if ($uebersetzung) { + $bezeichnung = $uebersetzung['name']; + $beschreibung = $uebersetzung['beschreibung']; + } + $bezeichnung = $this->app->DB->real_escape_string($bezeichnung); $beschreibung = $this->app->DB->real_escape_string($beschreibung); diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php index b855b0f3..9ec83a60 100644 --- a/www/lib/class.erpapi.php +++ b/www/lib/class.erpapi.php @@ -31396,15 +31396,15 @@ function Firmendaten($field,$projekt="") $variante_von = $this->app->DB->Select("SELECT variante_von FROM artikel WHERE id = '$artikel' LIMIT 1"); if($variante_von)$beschreibung = $this->app->DB->real_escape_string($this->app->DB->Select("SELECT anabregs_text FROM artikel WHERE id='$variante_von' LIMIT 1")); } - if($this->ModulVorhanden('artikel_texte')){ - if(array_key_exists($belegsprache,$adresssprachen)){ + + if(array_key_exists($belegsprache,$adresssprachen)){ $belegsprache = $adresssprachen[$belegsprache]; - } - $artikelbeschreibung = $this->app->DB->Select("SELECT beschreibung FROM artikel_texte WHERE artikel=$artikel AND sprache='$belegsprache'"); - if($artikelbeschreibung){ - $beschreibung = $artikelbeschreibung; - } } + $artikelbeschreibung = $this->app->DB->Select("SELECT beschreibung FROM artikel_texte WHERE artikel=$artikel AND sprache='$belegsprache'"); + if($artikelbeschreibung){ + $beschreibung = $artikelbeschreibung; + } + } //$vpe = $this->app->DB->Select("SELECT vpe FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); $sort = $this->app->DB->Select("SELECT MAX(sort) FROM ".$typ."_position WHERE $typ='$id' LIMIT 1"); @@ -31419,20 +31419,19 @@ function Firmendaten($field,$projekt="") if($this->app->DB->Select("SELECT adr.id FROM auftrag auf INNER JOIN adresse adr ON auf.adresse = adr.id AND adr.sprache = 'englisch' WHERE auf.id = '$id' LIMIT 1")) $name = $this->app->DB->Select("SELECT name_en FROM artikel WHERE id = '$artikel'"); if($name === '')$name = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel'"); - if($this->ModulVorhanden('artikel_texte')){ - if(array_key_exists($belegsprache,$adresssprachen)){ + + if(array_key_exists($belegsprache,$adresssprachen)){ $belegsprache = $adresssprachen[$belegsprache]; - } - $artikelbezeichnung = $this->app->DB->Select( + } + $artikelbezeichnung = $this->app->DB->Select( "SELECT name FROM artikel_texte WHERE artikel=$artikel AND sprache='$belegsprache' ORDER BY name <> '' DESC LIMIT 1" - ); - if($artikelbezeichnung){ + ); + if($artikelbezeichnung){ $name = $artikelbezeichnung; - } } } diff --git a/www/lib/class.remote.php b/www/lib/class.remote.php index 0eb67ede..3880b024 100644 --- a/www/lib/class.remote.php +++ b/www/lib/class.remote.php @@ -1177,11 +1177,7 @@ class Remote } $shopexportarr = $this->app->DB->SelectRow("SELECT * FROM shopexport WHERE id='$id' LIMIT 1"); $artikelexport = $shopexportarr['artikelexport']; - $translationpossible = false; - if($this->app->erp->ModulVorhanden('artikel_texte')) - { - $translationpossible = true; - } + $loadElements = [ 'foreign_numbers' => true, 'article_descriptions' => true, @@ -1811,7 +1807,7 @@ class Remote foreach ($db->yieldAll($query) as $matrixdaten) { $data[$i]['matrix_varianten']['gruppen'][$matrixdaten['gruppe']][$matrixdaten['wert']] = true; - if ($translationpossible && !empty($loadElements['translations'])) { + if (!empty($loadElements['translations'])) { if (empty($gruppenuebersetzung[$matrixdaten['gruppe']])) { $gruppennamen = $this->app->DB->SelectArr("SELECT IF(name_external_from<>'',name_external_from,name_from) AS name_from, @@ -2092,17 +2088,16 @@ class Remote $variantennettopreis = $this->app->erp->GetVerkaufspreis($v['id'], 1, 0); } } - if(!empty($loadElements['translations']) && $this->app->erp->ModulVorhanden('artikel_texte')){ - $sprachen = ['de','en']; - foreach ($sprachen as $sprache){ + $sprachen = ['de','en']; + foreach ($sprachen as $sprache){ $query = sprintf("SELECT * FROM artikel_texte WHERE shop=%d AND sprache='%s' AND artikel=%d AND aktiv=1 LIMIT 1", - $id,strtoupper($sprache),$v['id']); + $id,strtoupper($sprache),$v['id']); $ersetzeStandardbeschreibung = $this->app->DB->SelectRow($query); - if(!empty($ersetzeStandardbeschreibung)){ - $v['name_'.$sprache] = $ersetzeStandardbeschreibung['name']; + if(!empty($ersetzeStandardbeschreibung)) { + $v['name_'.$sprache] = $ersetzeStandardbeschreibung['name']; } - } } + $this->app->erp->RunHook('remote_send_article_list_pseudostorage', 3, $id, $v['id'], $v['pseudolager']); if(is_numeric($v['pseudolager']) && $v['pseudolager'] < 0) { $v['pseudolager'] = 0; diff --git a/www/pages/artikel.php b/www/pages/artikel.php index 34af81c7..4412e536 100644 --- a/www/pages/artikel.php +++ b/www/pages/artikel.php @@ -7333,6 +7333,10 @@ class Artikel extends GenArtikel { $this->app->erp->MenuEintrag('index.php?module=artikel&action=eigenschaften&id='.$id, 'Eigenschaften'); } + $this->app->erp->MenuEintrag("index.php?module=artikeltexte&action=list&artikel=$id",'Übersetzung'); + + $this->app->erp->MenuEintrag("index.php?module=artikel&action=baum&id=$id",'Artikelbaum'); + if($rabatt!='1'){ $this->app->erp->MenuEintrag("index.php?module=artikel&action=einkauf&id=$id",'Einkauf'); if($this->app->erp->RechteVorhanden('einkaufabgleich','einkaufapi')) @@ -7393,7 +7397,7 @@ class Artikel extends GenArtikel { } $this->app->erp->MenuEintrag('index.php?module=artikel&action=list','Zurück zur Übersicht'); - $this->app->erp->InsertMenuAfter("index.php?module=artikel&action=baum&id=$id",'Artikelbaum','artikel','eigenschaften'); + } } $this->app->erp->MenuEintrag('index.php?module=artikel&action=create','Neuen Artikel anlegen'); diff --git a/www/pages/artikeltexte.php b/www/pages/artikeltexte.php new file mode 100644 index 00000000..adc4f311 --- /dev/null +++ b/www/pages/artikeltexte.php @@ -0,0 +1,270 @@ +app = $app; + if ($intern) + return; + + $this->app->ActionHandlerInit($this); + $this->app->ActionHandler("list", "artikel_texte_list"); + $this->app->ActionHandler("create", "artikel_texte_edit"); // This automatically adds a "New" button + $this->app->ActionHandler("edit", "artikel_texte_edit"); + $this->app->ActionHandler("delete", "artikel_texte_delete"); + $this->app->DefaultActionHandler("list"); + $this->app->ActionHandlerListen($app); + } + + public function Install() { + /* Fill out manually later */ + } + + static function TableSearch(&$app, $name, $erlaubtevars) { + switch ($name) { + case "artikel_texte_list": + $allowed['artikel_texte_list'] = array('list'); + $heading = array('','','Nummer','Artikel','Sprache', 'Name', 'Kurztext', 'Beschreibung', 'Beschreibung_online', 'Meta title', 'Meta description', 'Meta keywords', 'Katalogartikel', 'Katalogbezeichnung', 'Katalogtext', 'Shop', 'Aktiv', 'Menü'); + $width = array('1%','1%','1%'); // Fill out manually later + + $artikel = $app->User->GetParameter('artikeltexte_artikel'); + + // columns that are aligned right (numbers etc) + // $alignright = array(4,5,6,7,8); + + $findcols = array('a.id','a.id','art.nummer', 'art.name_de', 'a.sprache', 'a.name', 'a.kurztext', 'a.beschreibung', 'a.beschreibung_online', 'a.meta_title', 'a.meta_description', 'a.meta_keywords', 'a.katalogartikel', 'a.katalog_bezeichnung', 'a.katalog_text', 'a.shop', 'a.aktiv'); + $searchsql = array('a.artikel', 'a.sprache', 'a.name', 'a.kurztext', 'a.beschreibung', 'a.beschreibung_online', 'a.meta_title', 'a.meta_description', 'a.meta_keywords', 'a.katalogartikel', 'a.katalog_bezeichnung', 'a.katalog_text', 'a.shop', 'a.aktiv'); + + $defaultorder = 1; + $defaultorderdesc = 0; + $aligncenter = array(); + $alignright = array(); + $numbercols = array(); + $sumcol = array(); + + $dropnbox = "'' AS `open`, CONCAT('') AS `auswahl`"; + +// $moreinfo = true; // Allow drop down details +// $moreinfoaction = "lieferschein"; // specify suffix for minidetail-URL to allow different minidetails +// $mencol = 11; // Set id col for moredata/menu + + $menu = "
" . "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> " . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . "
"; + + $sql = " + SELECT SQL_CALC_FOUND_ROWS a.id, $dropnbox, + art.nummer, + art.name_de, + a.sprache, + a.name, + a.kurztext, + a.beschreibung, + a.beschreibung_online, + a.meta_title, + a.meta_description, + a.meta_keywords, + a.katalogartikel, + a.katalog_bezeichnung, + a.katalog_text, + a.shop, + a.aktiv, + a.id FROM artikel_texte a + INNER JOIN artikel art ON art.id = a.artikel + "; + + $where = "1"; + + if ($artikel) { + // $where .= " AND a.artikel = '".$artikel."'"; + } + + $count = "SELECT count(DISTINCT id) FROM artikel_texte a WHERE $where"; +// $groupby = ""; + + break; + } + + $erg = false; + + foreach ($erlaubtevars as $k => $v) { + if (isset($$v)) { + $erg[$v] = $$v; + } + } + return $erg; + } + + function artikel_texte_list() { + + $this->app->erp->MenuEintrag("index.php?module=artikeltexte&action=list", "Übersicht"); + $this->app->erp->MenuEintrag("index.php?module=artikeltexte&action=create", "Neu anlegen"); + + $this->app->erp->MenuEintrag("index.php", "Zurück"); + + $artikel = $this->app->Secure->GetGET('artikel'); + $this->app->User->SetParameter('artikeltexte_artikel', $artikel); + + $this->app->YUI->TableSearch('TAB1', 'artikel_texte_list', "show", "", "", basename(__FILE__), __CLASS__); + $this->app->Tpl->Parse('PAGE', "artikeltexte_list.tpl"); + } + + public function artikel_texte_delete() { + $id = (int) $this->app->Secure->GetGET('id'); + $this->app->DB->Delete("DELETE FROM `artikel_texte` WHERE `id` = '{$id}'"); + $this->app->Tpl->addMessage('error', 'Der Eintrag wurde gelöscht'); + $this->artikel_texte_list(); + } + + /* + * Edit artikel_texte item + * If id is empty, create a new one + */ + + function artikel_texte_edit() { + $id = $this->app->Secure->GetGET('id'); + // Check if other users are editing this id +/* if($this->app->erp->DisableModul('artikel_texte',$id)) + { + return; + } */ + + $this->app->Tpl->Set('ID', $id); + + $this->app->erp->MenuEintrag("index.php?module=artikeltexte&action=edit&id=$id", "Details"); + $this->app->erp->MenuEintrag("index.php?module=artikeltexte&action=list", "Zurück zur Übersicht"); + $id = $this->app->Secure->GetGET('id'); + $input = $this->GetInput(); + $submit = $this->app->Secure->GetPOST('submit'); + + if (empty($id)) { + // New item + $id = 'NULL'; + } + + if ($submit != '') + { + + // Write to database + + // Add checks here + + // $input['projekt'] = $this->app->erp->ReplaceProjekt(true,$input['projekt'],true); // Parameters: Target db?, value, from form? + + $columns = "id, "; + $values = "$id, "; + $update = ""; + + $fix = ""; + + foreach ($input as $key => $value) { + $columns = $columns.$fix.$key; + $values = $values.$fix."'".$value."'"; + $update = $update.$fix.$key." = '$value'"; + + $fix = ", "; + } + +// echo($columns."
"); +// echo($values."
"); +// echo($update."
"); + + $sql = "INSERT INTO artikel_texte (".$columns.") VALUES (".$values.") ON DUPLICATE KEY UPDATE ".$update; + +// echo($sql); + + $this->app->DB->Update($sql); + + if ($id == 'NULL') { + $msg = $this->app->erp->base64_url_encode("
Das Element wurde erfolgreich angelegt.
"); + header("Location: index.php?module=artikeltexte&action=list&msg=$msg"); + } else { + $this->app->Tpl->addMessage('success', 'Die Einstellungen wurden erfolgreich übernommen.'); + } + } + + + // Load values again from database + if ($id != 'NULL') { + + $dropnbox = "'' AS `open`, CONCAT('') AS `auswahl`"; + $result = $this->app->DB->SelectArr(" + SELECT SQL_CALC_FOUND_ROWS + a.id, + $dropnbox, + art.name_de, + a.sprache, + a.name, + a.kurztext, + a.beschreibung, + a.beschreibung_online, + a.meta_title, + a.meta_description, + a.meta_keywords, + a.katalogartikel, + a.katalog_bezeichnung, + a.katalog_text, + a.shop, + a.aktiv, + a.id + FROM + artikel_texte a + INNER JOIN artikel art ON a.artikel = art.id + WHERE a.id=$id + "); + + + foreach ($result[0] as $key => $value) { + $this->app->Tpl->Set(strtoupper($key), $value); + } + + if (!empty($result)) { + $artikel_texte_from_db = $result[0]; + } else { + return; + } + } + + /* + * Add displayed items later + * + $this->app->Tpl->Add('EMAIL', $email); + $this->app->Tpl->Add('ANGEZEIGTERNAME', $angezeigtername); + + $this->app->YUI->AutoComplete("artikel", "artikelnummer"); + + */ + + $sprachenOptions = $this->app->erp->GetSprachenSelect(); + $this->app->Tpl->Set('SPRACHE', $this->app->erp->GetSelectAsso($sprachenOptions, $artikel_texte_from_db['sprache'])); + $this->app->Tpl->Parse('PAGE', "artikeltexte_edit.tpl"); + } + + /** + * Get all paramters from html form and save into $input + */ + public function GetInput(): array { + $input = array(); + //$input['EMAIL'] = $this->app->Secure->GetPOST('email'); + + $input['sprache'] = $this->app->Secure->GetPOST('sprache'); + $input['name'] = $this->app->Secure->GetPOST('name'); + $input['kurztext'] = $this->app->Secure->GetPOST('kurztext'); + $input['beschreibung'] = $this->app->Secure->GetPOST('beschreibung'); + $input['beschreibung_online'] = $this->app->Secure->GetPOST('beschreibung_online'); + $input['meta_title'] = $this->app->Secure->GetPOST('meta_title'); + $input['meta_description'] = $this->app->Secure->GetPOST('meta_description'); + $input['meta_keywords'] = $this->app->Secure->GetPOST('meta_keywords'); + $input['katalogartikel'] = $this->app->Secure->GetPOST('katalogartikel'); + $input['katalog_bezeichnung'] = $this->app->Secure->GetPOST('katalog_bezeichnung'); + $input['katalog_text'] = $this->app->Secure->GetPOST('katalog_text'); + $input['shop'] = $this->app->Secure->GetPOST('shop'); + $input['aktiv'] = $this->app->Secure->GetPOST('aktiv')?'1':'0'; + + return $input; + } + } diff --git a/www/pages/content/artikeltexte_edit.tpl b/www/pages/content/artikeltexte_edit.tpl new file mode 100644 index 00000000..9e784335 --- /dev/null +++ b/www/pages/content/artikeltexte_edit.tpl @@ -0,0 +1,144 @@ +
+ + +
+ [MESSAGE] +
+ [FORMHANDLEREVENT] +
+
+
+
+
+ {|Artikeltexte (Übersetzung)|} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ {|Artikel|}: + + +
+ {|Sprache|}: + + +
+ {|Name|}: + + +
+ {|Kurztext|}: + + +
+ {|Beschreibung|}: + + +
+ {|Beschreibung online|}: + + +
+ {|Meta title|}: + + +
+ {|Meta description|}: + + +
+ {|Meta keywords|}: + + +
+ {|Katalogartikel|}: + + +
+ {|Katalogbezeichnung|}: + + +
+ {|Katalogtext|}: + + +
+ {|Shop|}: + + +
+ {|Aktiv|}: + + +
+
+
+
+
+
+ +
+
+
+ diff --git a/www/pages/content/artikeltexte_list.tpl b/www/pages/content/artikeltexte_list.tpl new file mode 100644 index 00000000..394c103a --- /dev/null +++ b/www/pages/content/artikeltexte_list.tpl @@ -0,0 +1,10 @@ +
+ +
+ [MESSAGE] + [TAB1] + [TAB1NEXT] +
+
diff --git a/www/pages/importvorlage.php b/www/pages/importvorlage.php index a096fb1d..ea9be2ee 100644 --- a/www/pages/importvorlage.php +++ b/www/pages/importvorlage.php @@ -3990,7 +3990,6 @@ class Importvorlage extends GenImportvorlage { if($this->app->DB->Select("SELECT id FROM artikel WHERE id ='$artikelid' LIMIT 1")){ //Sprachen - if($this->app->erp->ModulVorhanden('artikel_texte')){ $erlaubtefelder= array('name','kurztext','beschreibung','beschreibung_online','meta_title', 'meta_description','meta_keywords','katalog_bezeichnung','katalog_text','katalogartikel','shop','aktiv'); $zuImportierendeSprachen = []; @@ -4066,8 +4065,7 @@ class Importvorlage extends GenImportvorlage { } } } - } - } + } // Sprachen //freifelduebersetzungen foreach ($tmp as $feldname => $feldwerte) { diff --git a/www/widgets/templates/_gen/artikel.tpl b/www/widgets/templates/_gen/artikel.tpl index a7cc327e..3230ce71 100644 --- a/www/widgets/templates/_gen/artikel.tpl +++ b/www/widgets/templates/_gen/artikel.tpl @@ -566,11 +566,13 @@
-
 {|Beschreibung|}  +
+  {|Beschreibung|}  - + +
{|Artikel (DE) (Bitte im ersten Tab bearbeiten)|}:
[ARTIKEL_DE_ANZEIGE]
{|Artikel (EN)|}:
[NAME_EN][MSGNAME_EN]
{|Artikel (EN)|}:
[NAME_EN][MSGNAME_EN]
{|Kurztext (DE) (Bitte im ersten Tab bearbeiten)|}:
[KURZTEXT_DE_ANZEIGE]