From d846a251ca018f1f9ff84343ed412a1196f2e267 Mon Sep 17 00:00:00 2001
From: OpenXE <>
Date: Fri, 17 Feb 2023 13:41:04 +0100
Subject: [PATCH 01/12] Angebot added column Bearbeiter
---
phpwf/plugins/class.yui.php | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/phpwf/plugins/class.yui.php b/phpwf/plugins/class.yui.php
index fa11f790..47a31003 100644
--- a/phpwf/plugins/class.yui.php
+++ b/phpwf/plugins/class.yui.php
@@ -7868,10 +7868,10 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
// headings
- $heading = array('', '', 'Angebot', 'Vom', 'Kd-Nr.', 'Kunde', 'Land', 'Projekt', 'Zahlung', 'Betrag (brutto)', 'Status', 'Menü');
+ $heading = array('', '', 'Angebot', 'Vom', 'Kd-Nr.', 'Kunde', 'Land', 'Projekt', 'Zahlung', 'Betrag (brutto)', 'Status','Bearbeiter', 'Menü');
$width = array('1%', '1%', '1%', '10%', '10%', '40%', '5%', '1%', '1%', '1%', '1%', '1%', '1%', '1%');
- $findcols = array('open', 'a.belegnr', 'a.belegnr', 'a.datum', 'adr.kundennummer', 'a.name', 'a.land', 'p.abkuerzung', 'a.zahlungsweise', 'a.gesamtsumme', 'a.status', 'id');
- $searchsql = array('DATE_FORMAT(a.datum,\'%d.%m.%Y\')', 'a.anfrage','a.belegnr', 'adr.kundennummer', 'a.name', 'a.land', 'p.abkuerzung', 'a.zahlungsweise', 'a.status', "FORMAT(a.gesamtsumme,2{$extended_mysql55})", 'a.status', 'adr.freifeld1','a.internebezeichnung');
+ $findcols = array('open', 'a.belegnr', 'a.belegnr', 'a.datum', 'adr.kundennummer', 'a.name', 'a.land', 'p.abkuerzung', 'a.zahlungsweise', 'a.gesamtsumme', 'a.status','a.bearbeiter', 'id');
+ $searchsql = array('DATE_FORMAT(a.datum,\'%d.%m.%Y\')', 'a.anfrage','a.belegnr', 'adr.kundennummer', 'a.name', 'a.land', 'p.abkuerzung', 'a.zahlungsweise', 'a.status', "FORMAT(a.gesamtsumme,2{$extended_mysql55})", 'a.status','a.bearbeiter', 'adr.freifeld1','a.internebezeichnung');
$defaultorder = 12; //Optional wenn andere Reihenfolge gewuenscht
$defaultorderdesc = 1;
@@ -7904,7 +7904,7 @@ a.land as land, p.abkuerzung as projekt, a.zahlungsweise as zahlungsweise,
."
-
-
-
-
-
- {|Kontorahmen|}
-
-
-
-
-
+
-
+
-
-
-
-
-
-
-
-
diff --git a/www/pages/importvorlage.php b/www/pages/importvorlage.php
index fdc370aa..eac2209f 100644
--- a/www/pages/importvorlage.php
+++ b/www/pages/importvorlage.php
@@ -1418,7 +1418,7 @@ class Importvorlage extends GenImportvorlage {
$ersterdatensatz = 1;
$zeitstempel = time();
- $number_of_rows = count($tmp['cmd']);
+ $number_of_rows = empty($tmp['cmd'])?0:count($tmp['cmd']);
$number_of_rows = $number_of_rows + 2;
if($isCronjob) {
@@ -1553,6 +1553,13 @@ class Importvorlage extends GenImportvorlage {
}
}
+ // HERE START OF PROCESSING OF THE ROWS
+ // INSIDE FOR LOOP
+ // $i -> loop counter row number starting with 1
+ // $number_of_rows
+ // access data -> $tmp['column_name'][$i]
+ // $tmp['cmd'] -> create or update
+ // $tmp['checked'] -> 0 or 1
switch($ziel)
{
@@ -5021,7 +5028,61 @@ class Importvorlage extends GenImportvorlage {
}
}
break;
- }
+ case 'kontorahmen':
+
+ // Create a row dataset (without checked and cmd)
+ $update_sql = "";
+ $row = array();
+ $comma = "";
+ foreach ($tmp as $key => $value) {
+ if ($key != 'cmd' && $key != 'checked') {
+ $row[$key] = $value[$i];
+ $comma = ", ";
+ }
+ }
+
+ if (empty($row['sachkonto'])) {
+ break;
+ }
+
+
+ $art_array = array(
+ '1' => 'Aufwendungen',
+ '2' => 'Erlöse',
+ '3' => 'Geldtransit',
+ '9' => 'Saldo'
+ );
+
+ $row['art'] = array_search($row['art'], $art_array);
+ $row['projekt'] = $this->app->erp->ReplaceProjekt(true,$row['projekt'],true); // Parameters: Target db?, value, from form?
+
+ $sql = "SELECT * FROM kontorahmen WHERE sachkonto = '".$row['sachkonto']."'";
+ $result = $this->app->DB->SelectArr($sql);
+
+ if (!empty($result)) {
+
+ $comma = "";
+ foreach ($row as $key => $value) {
+ $update_sql .= $comma."`".$key."` = '".$value."'";
+ $comma = ", ";
+ }
+
+ $sql = "UPDATE kontorahmen SET ".$update_sql." WHERE `sachkonto` = '".$row['sachkonto']."'";
+ $result = $this->app->DB->Update($sql);
+ } else {
+ $sql = "INSERT INTO kontorahmen (".
+ implode(", ",array_keys($row)).
+ ") VALUES ('".
+ implode("', '",array_values($row)).
+ "')";
+ $result = $this->app->DB->Update($sql);
+ }
+
+ break;
+ }
+
+ // HERE END OF PROCESSING THE ROWS switch($ziel);
+
if($isCronjob) {
$this->app->DB->Update(
sprintf(
diff --git a/www/widgets/_gen/widget.gen.importvorlage.php b/www/widgets/_gen/widget.gen.importvorlage.php
index 7b8fea06..ead82519 100644
--- a/www/widgets/_gen/widget.gen.importvorlage.php
+++ b/www/widgets/_gen/widget.gen.importvorlage.php
@@ -1,113 +1,114 @@
-app = $app;
- $this->parsetarget = $parsetarget;
- $this->Form();
- }
-
- public function importvorlageDelete()
- {
-
- $this->form->Execute("importvorlage","delete");
-
- $this->importvorlageList();
- }
-
- function Edit()
- {
- $this->form->Edit();
- }
-
- function Copy()
- {
- $this->form->Copy();
- }
-
- public function Create()
- {
- $this->form->Create();
- }
-
- public function Search()
- {
- $this->app->Tpl->Set($this->parsetarget,"SUUUCHEEE");
- }
-
- public function Summary()
- {
- $this->app->Tpl->Set($this->parsetarget,"grosse Tabelle");
- }
-
- function Form()
- {
- $this->form = $this->app->FormHandler->CreateNew("importvorlage");
- $this->form->UseTable("importvorlage");
- $this->form->UseTemplate("importvorlage.tpl",$this->parsetarget);
-
- $field = new HTMLInput("bezeichnung","text","","50","","","","","","","","0","2","");
- $this->form->NewField($field);
- $this->form->AddMandatory("bezeichnung","notempty","Pflichfeld!","MSGBEZEICHNUNG");
-
- $field = new HTMLSelect("ziel",0,"ziel","","","0");
- $field->AddOption('Adresse (min. Angabe: name)','adresse');
- $field->AddOption('Artikel (min. Angabe: nummer oder name_de)','artikel');
- $field->AddOption('Einkaufspreise (min. Angabe: lieferantennummer und herstellernummer oder herstellernummer )','einkauf');
- $field->AddOption('Zeiterfassung (min. Angabe datum_von,zeit_von,datum_bis,zeit_bis,kundennummer,taetigkeit)','zeiterfassung');
- $field->AddOption('Wiedervorlagen (min. Angabe datum_faellig, kundennummer,mitarbeiternummer,betreff)','wiedervorlagen');
- $field->AddOption('Notizen (min. Angabe datum,kundennummer,mitarbeiternummer,betreff)','notizen');
- $this->form->NewField($field);
-
- $field = new HTMLInput("importerstezeilenummer","text","","15","","","","","","","","0","","");
- $this->form->NewField($field);
-
- $field = new HTMLSelect("importtrennzeichen",0,"importtrennzeichen","","","0");
- $field->AddOption(';','semikolon');
- $field->AddOption(',','komma');
- $this->form->NewField($field);
-
- $field = new HTMLSelect("importdatenmaskierung",0,"importdatenmaskierung","","","0");
- $field->AddOption('keine','keine');
- $field->AddOption('"','gaensefuesschen');
- $this->form->NewField($field);
-
- $field = new HTMLInput("charset","text","","","","","","","","","","0","","");
- $this->form->NewField($field);
-
- $field = new HTMLCheckbox("utf8decode","","","1","0","0");
- $this->form->NewField($field);
-
- $field = new HTMLTextarea("fields",15,60,"","","","","0");
- $this->form->NewField($field);
-
- $field = new HTMLTextarea("internebemerkung",5,50,"","","","","0");
- $this->form->NewField($field);
-
-
- }
-
-}
-
-?>
\ No newline at end of file
+app = $app;
+ $this->parsetarget = $parsetarget;
+ $this->Form();
+ }
+
+ public function importvorlageDelete()
+ {
+
+ $this->form->Execute("importvorlage","delete");
+
+ $this->importvorlageList();
+ }
+
+ function Edit()
+ {
+ $this->form->Edit();
+ }
+
+ function Copy()
+ {
+ $this->form->Copy();
+ }
+
+ public function Create()
+ {
+ $this->form->Create();
+ }
+
+ public function Search()
+ {
+ $this->app->Tpl->Set($this->parsetarget,"SUUUCHEEE");
+ }
+
+ public function Summary()
+ {
+ $this->app->Tpl->Set($this->parsetarget,"grosse Tabelle");
+ }
+
+ function Form()
+ {
+ $this->form = $this->app->FormHandler->CreateNew("importvorlage");
+ $this->form->UseTable("importvorlage");
+ $this->form->UseTemplate("importvorlage.tpl",$this->parsetarget);
+
+ $field = new HTMLInput("bezeichnung","text","","50","","","","","","","","0","2","");
+ $this->form->NewField($field);
+ $this->form->AddMandatory("bezeichnung","notempty","Pflichfeld!","MSGBEZEICHNUNG");
+
+ $field = new HTMLSelect("ziel",0,"ziel","","","0");
+ $field->AddOption('Adresse (min. Angabe: name)','adresse');
+ $field->AddOption('Artikel (min. Angabe: nummer oder name_de)','artikel');
+ $field->AddOption('Einkaufspreise (min. Angabe: lieferantennummer und herstellernummer oder herstellernummer )','einkauf');
+ $field->AddOption('Zeiterfassung (min. Angabe: datum_von,zeit_von,datum_bis,zeit_bis,kundennummer,taetigkeit)','zeiterfassung');
+ $field->AddOption('Wiedervorlagen (min. Angabe: datum_faellig, kundennummer,mitarbeiternummer,betreff)','wiedervorlagen');
+ $field->AddOption('Notizen (min. Angabe: datum,kundennummer,mitarbeiternummer,betreff)','notizen');
+ $field->AddOption('Kontenrahmen (min. Angabe: sachkonto,beschriftung,art)','kontorahmen');
+ $this->form->NewField($field);
+
+ $field = new HTMLInput("importerstezeilenummer","text","","15","","","","","","","","0","","");
+ $this->form->NewField($field);
+
+ $field = new HTMLSelect("importtrennzeichen",0,"importtrennzeichen","","","0");
+ $field->AddOption(';','semikolon');
+ $field->AddOption(',','komma');
+ $this->form->NewField($field);
+
+ $field = new HTMLSelect("importdatenmaskierung",0,"importdatenmaskierung","","","0");
+ $field->AddOption('keine','keine');
+ $field->AddOption('"','gaensefuesschen');
+ $this->form->NewField($field);
+
+ $field = new HTMLInput("charset","text","","","","","","","","","","0","","");
+ $this->form->NewField($field);
+
+ $field = new HTMLCheckbox("utf8decode","","","1","0","0");
+ $this->form->NewField($field);
+
+ $field = new HTMLTextarea("fields",15,60,"","","","","0");
+ $this->form->NewField($field);
+
+ $field = new HTMLTextarea("internebemerkung",5,50,"","","","","0");
+ $this->form->NewField($field);
+
+
+ }
+
+}
+
+?>
From cb8b2487d744eade8dfa2a3b19998944f8bbe597 Mon Sep 17 00:00:00 2001
From: OpenXE <>
Date: Thu, 2 Mar 2023 09:52:36 +0100
Subject: [PATCH 04/12] module_creator improvement on column headers and
findcols
---
tools/module_creator/module_creator.php | 5 +++++
tools/module_creator/module_creator_php_template.txt | 4 ++--
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/tools/module_creator/module_creator.php b/tools/module_creator/module_creator.php
index c015c7cf..82265d96 100644
--- a/tools/module_creator/module_creator.php
+++ b/tools/module_creator/module_creator.php
@@ -17,6 +17,8 @@
* PLACEHOLDER_GET_INPUT
* PLACEHOLDER_SET_INPUT
* PLACEHOLDER_COLUMNS
+ * PLACEHOLDER_ID_COLUMN
+ * PLACEHOLDER_HEADERS
* PLACEHOLDER_SET_TPL
*/
@@ -164,6 +166,7 @@ if ($argc >= 2) {
// Create php file
$list_of_columns = implode(', ', $columns);
+ $list_of_columns_headers_in_quotes = "'" . implode('\', \'', array_map('ucfirst',$columns)) . "'";
$list_of_columns_in_quotes = "'" . implode('\', \'', $columns) . "'";
$sql_list_of_columns = implode(', ', $sql_columns);
$sql_list_of_columns_in_quotes = "'" . implode('\', \'', $sql_columns) . "'";
@@ -194,6 +197,8 @@ if ($argc >= 2) {
$php_file_contents = str_replace('PLACEHOLDER_GET_INPUT', $get_input, $php_file_contents);
$php_file_contents = str_replace('PLACEHOLDER_SET_INPUT', $set_input, $php_file_contents);
$php_file_contents = str_replace('PLACEHOLDER_COLUMNS', $list_of_columns_in_quotes, $php_file_contents);
+ $php_file_contents = str_replace('PLACEHOLDER_ID_COLUMN', $table_short_name.".id", $php_file_contents);
+ $php_file_contents = str_replace('PLACEHOLDER_HEADERS', $list_of_columns_headers_in_quotes, $php_file_contents);
$php_file_contents = str_replace('PLACEHOLDER_SQL_COLUMNS', $sql_list_of_columns_in_quotes, $php_file_contents);
$php_file = fopen($target_php_folder . $php_file_name, "w");
diff --git a/tools/module_creator/module_creator_php_template.txt b/tools/module_creator/module_creator_php_template.txt
index d3af660d..4aad87da 100644
--- a/tools/module_creator/module_creator_php_template.txt
+++ b/tools/module_creator/module_creator_php_template.txt
@@ -30,13 +30,13 @@ class PLACEHOLDER_MODULECLASSNAME {
switch ($name) {
case "PLACEHOLDER_LIST":
$allowed['PLACEHOLDER_LIST'] = array('list');
- $heading = array('','',PLACEHOLDER_COLUMNS, 'Menü');
+ $heading = array('','',PLACEHOLDER_HEADERS, 'Menü');
$width = array('1%','1%','10%'); // Fill out manually later
// columns that are aligned right (numbers etc)
// $alignright = array(4,5,6,7,8);
- $findcols = array(PLACEHOLDER_SQL_COLUMNS);
+ $findcols = array('PLACEHOLDER_ID_COLUMN','PLACEHOLDER_ID_COLUMN',PLACEHOLDER_SQL_COLUMNS);
$searchsql = array(PLACEHOLDER_SQL_COLUMNS);
$defaultorder = 1;
From 61047af4400691e3da75c05b507c41b24c719954 Mon Sep 17 00:00:00 2001
From: OpenXE <>
Date: Thu, 2 Mar 2023 10:19:04 +0100
Subject: [PATCH 05/12] Zolltarifnummer module restored
---
www/pages/content/zolltarifnummer_edit.tpl | 77 ++++++++
www/pages/content/zolltarifnummer_list.tpl | 10 +
www/pages/zolltarifnummer.php | 202 +++++++++++++++++++++
3 files changed, 289 insertions(+)
create mode 100644 www/pages/content/zolltarifnummer_edit.tpl
create mode 100644 www/pages/content/zolltarifnummer_list.tpl
create mode 100644 www/pages/zolltarifnummer.php
diff --git a/www/pages/content/zolltarifnummer_edit.tpl b/www/pages/content/zolltarifnummer_edit.tpl
new file mode 100644
index 00000000..13539208
--- /dev/null
+++ b/www/pages/content/zolltarifnummer_edit.tpl
@@ -0,0 +1,77 @@
+
+
diff --git a/www/pages/content/zolltarifnummer_list.tpl b/www/pages/content/zolltarifnummer_list.tpl
new file mode 100644
index 00000000..394c103a
--- /dev/null
+++ b/www/pages/content/zolltarifnummer_list.tpl
@@ -0,0 +1,10 @@
+
+
+
+ [MESSAGE]
+ [TAB1]
+ [TAB1NEXT]
+
+
diff --git a/www/pages/zolltarifnummer.php b/www/pages/zolltarifnummer.php
new file mode 100644
index 00000000..39e0b7c2
--- /dev/null
+++ b/www/pages/zolltarifnummer.php
@@ -0,0 +1,202 @@
+app = $app;
+ if ($intern)
+ return;
+
+ $this->app->ActionHandlerInit($this);
+ $this->app->ActionHandler("list", "zolltarifnummer_list");
+ $this->app->ActionHandler("create", "zolltarifnummer_edit"); // This automatically adds a "New" button
+ $this->app->ActionHandler("edit", "zolltarifnummer_edit");
+ $this->app->ActionHandler("delete", "zolltarifnummer_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 "zolltarifnummer_list":
+ $allowed['zolltarifnummer_list'] = array('list');
+ $heading = array('','','Nummer', 'Beschreibung', 'Interne Bemerkung', 'Menü');
+ $width = array('1%','1%','30%','30%','30%','1%'); // Fill out manually later
+
+ // columns that are aligned right (numbers etc)
+ // $alignright = array(4,5,6,7,8);
+
+ $findcols = array('z.id','z.id','z.nummer', 'z.beschreibung', 'z.internebemerkung');
+ $searchsql = array('z.nummer', 'z.beschreibung', 'z.internebemerkung');
+
+ $defaultorder = 1;
+ $defaultorderdesc = 0;
+
+ $dropnbox = "'
' AS `open`, CONCAT('
') AS `auswahl`";
+
+ $menu = "
";
+
+ $sql = "SELECT SQL_CALC_FOUND_ROWS z.id, $dropnbox, z.nummer, z.beschreibung, z.internebemerkung, z.id FROM zolltarifnummer z";
+
+ $where = "1";
+ $count = "SELECT count(DISTINCT id) FROM zolltarifnummer WHERE $where";
+// $groupby = "";
+
+ break;
+ }
+
+ $erg = false;
+
+ foreach ($erlaubtevars as $k => $v) {
+ if (isset($$v)) {
+ $erg[$v] = $$v;
+ }
+ }
+ return $erg;
+ }
+
+ function zolltarifnummer_list() {
+ $this->app->erp->MenuEintrag("index.php?module=zolltarifnummer&action=list", "Übersicht");
+ $this->app->erp->MenuEintrag("index.php?module=zolltarifnummer&action=create", "Neu anlegen");
+
+ $this->app->erp->MenuEintrag("index.php", "Zurück");
+
+ $this->app->YUI->TableSearch('TAB1', 'zolltarifnummer_list', "show", "", "", basename(__FILE__), __CLASS__);
+ $this->app->Tpl->Parse('PAGE', "zolltarifnummer_list.tpl");
+ }
+
+ public function zolltarifnummer_delete() {
+ $id = (int) $this->app->Secure->GetGET('id');
+
+ $this->app->DB->Delete("DELETE FROM `zolltarifnummer` WHERE `id` = '{$id}'");
+ $this->app->Tpl->Set('MESSAGE', "
Der Eintrag wurde gelöscht.
");
+
+ $this->zolltarifnummer_list();
+ }
+
+ /*
+ * Edit zolltarifnummer item
+ * If id is empty, create a new one
+ */
+
+ function zolltarifnummer_edit() {
+ $id = $this->app->Secure->GetGET('id');
+
+ // Check if other users are editing this id
+ if($this->app->erp->DisableModul('artikel',$id))
+ {
+ return;
+ }
+
+ $this->app->Tpl->Set('ID', $id);
+
+ $this->app->erp->MenuEintrag("index.php?module=zolltarifnummer&action=edit&id=$id", "Details");
+ $this->app->erp->MenuEintrag("index.php?module=zolltarifnummer&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
+
+ $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 zolltarifnummer (".$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=zolltarifnummer&action=list&msg=$msg");
+ } else {
+ $this->app->Tpl->Set('MESSAGE', "
Die Einstellungen wurden erfolgreich übernommen.
");
+ }
+ }
+
+
+ // Load values again from database
+ $dropnbox = "'
' AS `open`, CONCAT('
') AS `auswahl`";
+ $result = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS z.id, $dropnbox, z.nummer, z.beschreibung, z.internebemerkung, z.id FROM zolltarifnummer z"." WHERE id=$id");
+
+ foreach ($result[0] as $key => $value) {
+ $this->app->Tpl->Set(strtoupper($key), $value);
+ }
+
+ /*
+ * Add displayed items later
+ *
+
+ $this->app->Tpl->Add('KURZUEBERSCHRIFT2', $email);
+ $this->app->Tpl->Add('EMAIL', $email);
+ $this->app->Tpl->Add('ANGEZEIGTERNAME', $angezeigtername);
+ */
+
+// $this->SetInput($input);
+ $this->app->Tpl->Parse('PAGE', "zolltarifnummer_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['nummer'] = $this->app->Secure->GetPOST('nummer');
+ $input['beschreibung'] = $this->app->Secure->GetPOST('beschreibung');
+ $input['internebemerkung'] = $this->app->Secure->GetPOST('internebemerkung');
+
+
+ return $input;
+ }
+
+ /*
+ * Set all fields in the page corresponding to $input
+ */
+ function SetInput($input) {
+ // $this->app->Tpl->Set('EMAIL', $input['email']);
+
+ $this->app->Tpl->Set('NUMMER', $input['nummer']);
+ $this->app->Tpl->Set('BESCHREIBUNG', $input['beschreibung']);
+ $this->app->Tpl->Set('INTERNEBEMERKUNG', $input['internebemerkung']);
+
+ }
+
+}
From 49c934ede4f1dc18268f4d8068f89420878b7ec2 Mon Sep 17 00:00:00 2001
From: OpenXE <>
Date: Thu, 2 Mar 2023 10:19:31 +0100
Subject: [PATCH 06/12] Kontenrahmen missing files added
---
www/pages/content/kontorahmen_edit.tpl | 32 +++
www/pages/kontorahmen.php | 257 +++++++++++++++++++++++++
2 files changed, 289 insertions(+)
create mode 100644 www/pages/content/kontorahmen_edit.tpl
create mode 100644 www/pages/kontorahmen.php
diff --git a/www/pages/content/kontorahmen_edit.tpl b/www/pages/content/kontorahmen_edit.tpl
new file mode 100644
index 00000000..2bdd84bb
--- /dev/null
+++ b/www/pages/content/kontorahmen_edit.tpl
@@ -0,0 +1,32 @@
+
+
diff --git a/www/pages/kontorahmen.php b/www/pages/kontorahmen.php
new file mode 100644
index 00000000..8fd5f400
--- /dev/null
+++ b/www/pages/kontorahmen.php
@@ -0,0 +1,257 @@
+app = $app;
+ if ($intern)
+ return;
+
+ $this->app->ActionHandlerInit($this);
+ $this->app->ActionHandler("list", "kontorahmen_list");
+ $this->app->ActionHandler("create", "kontorahmen_edit"); // This automatically adds a "New" button
+ $this->app->ActionHandler("edit", "kontorahmen_edit");
+ $this->app->ActionHandler("delete", "kontorahmen_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 "kontorahmen_list":
+ $allowed['kontorahmen_list'] = array('list');
+ $heading = array('', 'Sachkonto', 'Beschriftung', 'Art', 'Bemerkung', 'Projekt', 'Ausblenden', 'Menü');
+ $width = array( '1%','2%' , '10%', '2%', '10%', '2%', '1%', '1%'); // Fill out manually later
+
+ // columns that are aligned right (numbers etc)
+ // $alignright = array(4,5,6,7,8);
+
+ $art = "CASE
+ WHEN k.art = 1 THEN 'Aufwendungen'
+ WHEN k.art = 2 THEN 'Erlöse'
+ WHEN k.art = 3 THEN 'Geldtransit'
+ WHEN k.art = 9 THEN 'Saldo'
+ ELSE ''
+ END";
+
+ $findcols = array('','k.sachkonto', 'k.beschriftung', "($art)",'k.bemerkung', '(SELECT abkuerzung FROM projekt WHERE projekt.id = k.projekt LIMIT 1)', 'k.ausblenden');
+ $searchsql = array('k.sachkonto', 'k.beschriftung', 'k.bemerkung', 'k.art', 'k.projekt');
+
+ $defaultorder = 1;
+ $defaultorderdesc = 0;
+
+ $dropnbox = "CONCAT('
') AS `auswahl`";
+
+ $menu = "
";
+
+ $sql = "SELECT SQL_CALC_FOUND_ROWS
+ k.id,
+ $dropnbox,
+ if(k.ausblenden,CONCAT('
', k.sachkonto,' '),k.sachkonto) AS sachkonto,
+ k.beschriftung,
+ $art
+ AS art,
+ k.bemerkung,
+ (SELECT abkuerzung FROM projekt WHERE projekt.id = k.projekt LIMIT 1),
+ k.ausblenden,
+ k.id
+ FROM kontorahmen k";
+
+ $where = "1";
+ $count = "SELECT count(DISTINCT id) FROM kontorahmen WHERE $where";
+// $groupby = "";
+
+ break;
+ }
+
+ $erg = false;
+
+ foreach ($erlaubtevars as $k => $v) {
+ if (isset($$v)) {
+ $erg[$v] = $$v;
+ }
+ }
+ return $erg;
+ }
+
+ function kontorahmen_list() {
+
+ // Process multi action
+ $auswahl = $this->app->Secure->GetPOST('auswahl');
+ $selectedIds = [];
+ if(!empty($auswahl)) {
+ foreach($auswahl as $selectedId) {
+ $selectedId = (int)$selectedId;
+ if($selectedId > 0) {
+ $selectedIds[] = $selectedId;
+ }
+ }
+
+ $sql = "DELETE FROM kontorahmen";
+ $sql .= " WHERE id IN (".implode(",",$selectedIds).")";
+ $this->app->DB->Update($sql);
+ }
+
+ $this->app->erp->MenuEintrag("index.php?module=kontorahmen&action=list", "Übersicht");
+ $this->app->erp->MenuEintrag("index.php?module=kontorahmen&action=create", "Neu anlegen");
+
+ $this->app->erp->MenuEintrag("index.php", "Zurück");
+
+ $this->app->YUI->TableSearch('TAB1', 'kontorahmen_list', "show", "", "", basename(__FILE__), __CLASS__);
+ $this->app->Tpl->Parse('PAGE', "kontorahmen_list.tpl");
+ }
+
+ public function kontorahmen_delete() {
+ $id = (int) $this->app->Secure->GetGET('id');
+
+ $this->app->DB->Delete("DELETE FROM `kontorahmen` WHERE `id` = '{$id}'");
+ $this->app->Tpl->Set('MESSAGE', "
Der Eintrag wurde gelöscht.
");
+
+ $this->kontorahmen_list();
+ }
+
+ /*
+ * Edit kontorahmen item
+ * If id is empty, create a new one
+ */
+
+ function kontorahmen_edit() {
+ $id = $this->app->Secure->GetGET('id');
+
+ // Check if other users are editing this id
+ if($this->app->erp->DisableModul('artikel',$id))
+ {
+ return;
+ }
+
+ $this->app->Tpl->Set('ID', $id);
+
+ $this->app->erp->MenuEintrag("index.php?module=kontorahmen&action=edit&id=$id", "Details");
+ $this->app->erp->MenuEintrag("index.php?module=kontorahmen&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 kontorahmen (".$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=kontorahmen&action=list&msg=$msg");
+ } else {
+ $this->app->Tpl->Set('MESSAGE', "
Die Einstellungen wurden erfolgreich übernommen.
");
+ }
+ }
+
+ // Load values again from database
+ $dropnbox = "'
' AS `open`, CONCAT('
') AS `auswahl`";
+ $result = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS k.id, $dropnbox, k.sachkonto, k.beschriftung, k.bemerkung, k.ausblenden, k.art, k.projekt, k.id FROM kontorahmen k"." WHERE id=$id");
+
+ $result[0]['projekt'] = $this->app->erp->ReplaceProjekt(false,$result[0]['projekt'],false); // Parameters: Target db?, value, from form?
+
+ foreach ($result[0] as $key => $value) {
+ $this->app->Tpl->Set(strtoupper($key), $value);
+ }
+
+ /*
+ * Add displayed items later
+ *
+
+ $this->app->Tpl->Add('KURZUEBERSCHRIFT2', $email);
+ $this->app->Tpl->Add('EMAIL', $email);
+ $this->app->Tpl->Add('ANGEZEIGTERNAME', $angezeigtername);
+ */
+
+
+ $this->app->Tpl->Set('AUSBLENDEN', $result[0]['ausblenden']==1?"checked":"");
+ $this->app->YUI->AutoComplete("projekt","projektname",1);
+
+ $art_array = array(
+ '1' => 'Aufwendungen',
+ '2' => 'Erlöse',
+ '3' => 'Geldtransit',
+ '9' => 'Saldo'
+ );
+ $this->app->Tpl->Set('ART', $this->app->erp->GetSelectAsso($art_array,$result[0]['art']));
+
+// $this->SetInput($input);
+ $this->app->Tpl->Parse('PAGE', "kontorahmen_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['sachkonto'] = $this->app->Secure->GetPOST('sachkonto');
+ $input['beschriftung'] = $this->app->Secure->GetPOST('beschriftung');
+ $input['bemerkung'] = $this->app->Secure->GetPOST('bemerkung');
+ $input['ausblenden'] = !empty($this->app->Secure->GetPOST('ausblenden'))?"1":"0";
+ $input['art'] = $this->app->Secure->GetPOST('art');
+ $input['projekt'] = $this->app->Secure->GetPOST('projekt');
+
+ return $input;
+ }
+
+ /*
+ * Set all fields in the page corresponding to $input
+ */
+ function SetInput($input) {
+ // $this->app->Tpl->Set('EMAIL', $input['email']);
+
+ $this->app->Tpl->Set('SACHKONTO', $input['sachkonto']);
+ $this->app->Tpl->Set('BESCHRIFTUNG', $input['beschriftung']);
+ $this->app->Tpl->Set('BEMERKUNG', $input['bemerkung']);
+ $this->app->Tpl->Set('AUSBLENDEN', $input['ausblenden']);
+ $this->app->Tpl->Set('ART', $input['art']);
+ $this->app->Tpl->Set('PROJEKT', $input['projekt']);
+
+ }
+
+}
From e2fc1e15e8151ef63055553b4a8d8bc4226cc06f Mon Sep 17 00:00:00 2001
From: OpenXE <>
Date: Sat, 4 Mar 2023 13:37:01 +0100
Subject: [PATCH 07/12] lagerzahlen added log information
---
cronjobs/lagerzahlen.php | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/cronjobs/lagerzahlen.php b/cronjobs/lagerzahlen.php
index 59ee513a..8c40a26b 100644
--- a/cronjobs/lagerzahlen.php
+++ b/cronjobs/lagerzahlen.php
@@ -34,7 +34,7 @@ if(empty($app->remote)) {
$app->remote = new Remote($app);
}
}
-$app->erp->LogFile("Starte Synchronisation");
+$app->erp->LogFile("Lagerzahlen-Synchronisation Start");
//$app->DB->Update("UPDATE artikel SET cache_lagerplatzinhaltmenge='999'");
@@ -53,6 +53,9 @@ $firmendatenid = $app->DB->Select("SELECT MAX(id) FROM firmendaten LIMIT 1");
$shops = $app->DB->SelectArr('SELECT * FROM `shopexport` WHERE `aktiv` = 1');
if(empty($shops)) {
+
+ $app->erp->LogFile("Lagerzahlen-Synchronisation Ende: Keine aktiven Shops");
+
return;
}
$shopByIds = [];
@@ -97,6 +100,9 @@ $firmendatenid = $app->DB->Select("SELECT MAX(id) FROM firmendaten LIMIT 1");
);
if(empty($lagerartikel)) {
+
+ $app->erp->LogFile("Lagerzahlen-Synchronisation Ende: Keine fälligen Artikel");
+
return;
}
@@ -110,7 +116,7 @@ $firmendatenid = $app->DB->Select("SELECT MAX(id) FROM firmendaten LIMIT 1");
}
$clagerartikel = $lagerartikel?count($lagerartikel):0;
- $app->erp->LogFile('Artikel Gesamt fuer Synchronisation: '.$clagerartikel);
+ $app->erp->LogFile('Lagerzahlen-Synchronisation, Artikel gesamt: '.$clagerartikel);
foreach($lagerartikel as $ij => $articleId) {
$app->DB->Update(
"UPDATE `prozessstarter`
@@ -172,9 +178,10 @@ $firmendatenid = $app->DB->Select("SELECT MAX(id) FROM firmendaten LIMIT 1");
}
}
catch (Exception $exception) {
- $app->erp->LogFile($app->DB->real_escape_string($exception->getMessage()));
+ $app->erp->LogFile("Lagerzahlen-Synchronisation Exception:".$app->DB->real_escape_string($exception->getMessage()));
}
}
- $app->erp->LogFile('Ende Synchronisation');
+ $app->erp->LogFile("Lagerzahlen-Synchronisation Ende");
+
From 245e2d1545c184368db0e68f9a07c99d4907b2af Mon Sep 17 00:00:00 2001
From: OpenXE <>
Date: Sat, 4 Mar 2023 15:08:57 +0100
Subject: [PATCH 08/12] onlineshops added tab artikelliste
---
www/pages/content/shopexport_artikellist.tpl | 51 +
.../shopexport_artikeluebertragung.tpl | 4 +-
www/pages/onlineshops.php | 9881 +++++++++--------
www/pages/shopexport.php | 2256 ++--
4 files changed, 6169 insertions(+), 6023 deletions(-)
create mode 100644 www/pages/content/shopexport_artikellist.tpl
diff --git a/www/pages/content/shopexport_artikellist.tpl b/www/pages/content/shopexport_artikellist.tpl
new file mode 100644
index 00000000..f145350f
--- /dev/null
+++ b/www/pages/content/shopexport_artikellist.tpl
@@ -0,0 +1,51 @@
+
+
+
+
diff --git a/www/pages/content/shopexport_artikeluebertragung.tpl b/www/pages/content/shopexport_artikeluebertragung.tpl
index 039ab5c0..4c975366 100644
--- a/www/pages/content/shopexport_artikeluebertragung.tpl
+++ b/www/pages/content/shopexport_artikeluebertragung.tpl
@@ -40,8 +40,8 @@
{|Aktionen|}
-
-
+
+
diff --git a/www/pages/onlineshops.php b/www/pages/onlineshops.php
index 68556f6f..6d78dd55 100644
--- a/www/pages/onlineshops.php
+++ b/www/pages/onlineshops.php
@@ -1,4901 +1,4986 @@
-Secure->GetGET('id');
- $nurfehler = $app->YUI->TableSearchFilter($name, 10, 'nurfehler', 0,0,'checkbox');
- $auftraege = $app->YUI->TableSearchFilter($name, 22, 'auftraege', 0,0,'checkbox');
- $aenderungen = $app->YUI->TableSearchFilter($name, 28, 'aenderungen', 0,0,'checkbox');
- $allowed['onlineshops'] = array('edit');
- $heading = array('','Datum','Typ','Wert','Wert 2','Bearbeiter','');
- $width = array('1%','20%','10%','20%','20%','15%','1%');
- $findcols = array('open', 'sl.zeitstempel','sl.typ','sl.parameter1','sl.parameter2','sl.bearbeiter', 'sl.tid');
- $searchsql = array('sl.zeitstempel','sl.typ','sl.parameter1','sl.parameter2','sl.bearbeiter');
-
- $defaultorder = 2; //Optional wenn andere Reihenfolge gewuenscht
-
- $defaultorderdesc = 1;
-
- if($auftraege)
- {
- $arr[]="(SELECT id,logdatei as zeitstempel, 'Auftrag' as typ,extid as parameter1,bestellnummer as parameter2,bearbeiter, concat('2-',id) as tid FROM shopimport_auftraege WHERE shopid = '$id')";
- }else{
- $arr[] = "(SELECT id, zeitstempel, typ, parameter1,parameter2,bearbeiter, concat('1-',id) as tid FROM shopexport_log WHERE shopid = '$id')";
- }
-
- if($aenderungen){
- $arr[] = "(SELECT id, creation_timestamp, 'Einstellungsänderung',message, plaindiff,username, concat('3-',id) as tid FROM shopexport_change_log WHERE shop_id = '$id')";
- }
-
- $sql = "SELECT SQL_CALC_FOUND_ROWS sl.id, ' Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' as open, sl.zeitstempel, sl.typ, substring(sl.parameter1,1,50), sl.parameter2,sl.bearbeiter, sl.tid
- FROM
- (
- ".implode(" UNION ALL ", $arr)."
- )
- sl
- ";
- $menucol = 6;
- $moreinfo = true;
- $doppelteids = true;
- //$where = "shopid = '$id'";
- $where = " 1 ";
- $menu = "id=%value% ";
- if($nurfehler)$where .= " AND sl.typ like 'fehler' ";
-
- break;
- case "shopexport_sprachen":
- $id = $app->Secure->GetGET('id');
- $allowed['onlineshops'] = array('edit');
- $heading = array('Land','Projekt','Sprache','Aktiv','Menü');
- $width = array('10%','20%','20%','5%','1%');
- $findcols = array('s.land', 'p.abkuerzung','s.sprache','s.aktiv','s.id');
- $searchsql = array('s.land', 'p.abkuerzung','s.sprache','s.aktiv');
-
- $defaultorder = 1; //Optional wenn andere Reihenfolge gewuenscht
- $defaultorderdesc = 0;
-
- $sql = "SELECT SQL_CALC_FOUND_ROWS s.id, s.land, p.abkuerzung, s.sprache, if(s.aktiv = 1, 'ja','-'), s.id
- FROM
- shopexport_sprachen s LEFT JOIN projekt p ON s.projekt = p.id
- ";
- $where = " s.shop = '$id'";
- $menu = "";
- break;
- case "shopexport_kundengruppen":
- $id = $app->Secure->GetGET('id');
- $allowed['onlineshops'] = array('edit');
- $heading = array('Kennziffer','Kundengruppe','Bezeichnung Shop','Projekt','Rolle','Neukunden zuweisen','Aktiv','Menü');
- $width = array('5%','40%','30%','10%','5%','%5','4%','1%');
- $findcols = array('g.name', 'g.kennziffer','s.extgruppename','s.projekt','s.type',"if(s.apply_to_new_customers = 1, 'ja','-')","if(s.aktiv = 1, 'ja','-')",'s.id');
- $searchsql = array('g.name', 'g.kennziffer','s.extgruppename','s.projekt','s.type',"if(s.apply_to_new_customers = 1, 'ja','-')","if(s.aktiv = 1, 'ja','-')");
-
- $defaultorder = 1; //Optional wenn andere Reihenfolge gewuenscht
- $defaultorderdesc = 0;
-
- $sql = "SELECT SQL_CALC_FOUND_ROWS
- s.id,
- g.kennziffer,
- g.name,
- s.extgruppename,
- IF(s.projekt='','',p.name),
- s.type,
- IF(s.apply_to_new_customers=1,'ja','-'),
- IF(s.aktiv = 1, 'ja','-'),
- s.id
- FROM shopexport_kundengruppen s
- LEFT JOIN projekt p ON s.projekt = p.id
- LEFT JOIN gruppen g ON s.gruppeid = g.id
- ";
- $where = " s.shopid = '$id' AND g.aktiv = 1";
- $menu = "";
- break;
- }
-
- $erg = [];
-
- foreach($erlaubtevars as $k => $v) {
- if(isset($$v)) {
- $erg[$v] = $$v;
- }
- }
-
- return $erg;
- }
-
- /**
- * Onlineshops constructor.
- *
- * @param Application $app
- * @param bool $intern
- */
- public function __construct($app, $intern = false) {
- //parent::GenShopexport($app);
- $this->app=$app;
- if($intern) {
- return;
- }
- $this->tmpl = $this->app->Container->get('Template');
- $this->tmpl->setDefaultNamespace('Modules/Onlineshop');
-
- $this->app->ActionHandlerInit($this);
-
- $this->app->ActionHandler("create","ShopexportCreate");
- $this->app->ActionHandler("edit","ShopexportEdit");
- $this->app->ActionHandler("list","ShopexportList");
- $this->app->ActionHandler("delete","ShopexportDelete");
- $this->app->ActionHandler("zahlweisedelete","ShopexportZahlweisedelete");
- $this->app->ActionHandler("versandartdelete","ShopexportVersandartdelete");
- $this->app->ActionHandler("freifelddelete","ShopexportFreifelddelete");
- $this->app->ActionHandler("subshopdelete","ShopexportSubshopdelete");
- $this->app->ActionHandler("sprachendelete","ShopexportSprachendelete");
- $this->app->ActionHandler("zahlweiseget","ShopexportZahlweiseget");
- $this->app->ActionHandler("zahlweisesave","ShopexportZahlweisesave");
- $this->app->ActionHandler("sprachenget","ShopexportSprachenget");
- $this->app->ActionHandler("sprachensave","ShopexportSprachensave");
- $this->app->ActionHandler("kundengruppenget","ShopexportKundengruppenget");
- $this->app->ActionHandler("kundengruppensave","ShopexportKundengruppensave");
- $this->app->ActionHandler("kundengruppeneditsave","ShopexportKundengruppensave");
- $this->app->ActionHandler("kundengruppendelete","ShopexportKundengruppendelete");
- $this->app->ActionHandler("zahlweiseeditsave","ShopexportZahlweiseeditsave");
- $this->app->ActionHandler("exportartikelbaum","ShopexportArtikelbaumexport");
- $this->app->ActionHandler("freifeldersave","ShopexportFreifeldsave");
- $this->app->ActionHandler("subshopsave","ShopexportSubshopsave");
-
- $this->app->ActionHandler("versandartget","ShopexportVersandartget");
- $this->app->ActionHandler("freifeldget","ShopexportFreifeldget");
- $this->app->ActionHandler("subshopget","ShopexportSubshopget");
- $this->app->ActionHandler("versandartsave","ShopexportVersandartsave");
- $this->app->ActionHandler("versandarteditsave","ShopexportVersandarteditsave");
- $this->app->ActionHandler("freifeldereditsave","ShopexportFreifeldereditsave");
- $this->app->ActionHandler("spracheneditsave","ShopexportSpracheneditsave");
-
- $this->app->ActionHandler("subshopeditsave","ShopexportSubshopeditsave");
- $this->app->ActionHandler("minidetail","ShopexportMinidetail");
- $this->app->ActionHandler("features","ShopexportFeatures");
-
- $this->app->ActionHandler('appnew', 'ShopexportAppNew');
- $this->app->ActionHandler('getapi', 'ShopexportGetApi');
- $this->app->ActionHandler('itemlink', 'ShopexportItemlink');
- $this->app->ActionHandler('orderlink', 'ShopexportOrderlink');
-
- $this->app->erp->Headlines('Shopexport');
- $this->app->ActionHandlerListen($app);
- }
-
- public function InstallResouces()
- {
- $resourcesDir = dirname(__DIR__, 2).'/classes/Modules/Onlineshop/resources';
- $cacheDir = dirname(__DIR__).'/cache/Onlineshop/resources';
- $resourcesSubDirs = ['usecasesSvgDe', 'usecasesSvgEn',];
- if(!is_dir($resourcesDir)) {
- return;
- }
- if(!is_dir($cacheDir) && !mkdir($cacheDir,0777, true) && !is_dir($cacheDir)) {
- return;
- }
- foreach($resourcesSubDirs as $subDir) {
- if(!is_dir($resourcesDir.'/'.$subDir)) {
- continue;
- }
- if(!is_dir($cacheDir.'/'.$subDir) && !mkdir($cacheDir.'/'.$subDir,0777, true) && !is_dir($cacheDir.'/'.$subDir)) {
- continue;
- }
- $handle = opendir($resourcesDir.'/'.$subDir);
- if(empty($handle)) {
- continue;
- }
- while($entry = readdir($handle)) {
- if(substr($entry, -4) === '.svg' && is_file($resourcesDir.'/'.$subDir.'/'.$entry)) {
- if(!is_file($cacheDir.'/'.$subDir.'/'.$entry)) {
- copy($resourcesDir.'/'.$subDir.'/'.$entry, $cacheDir.'/'.$subDir.'/'.$entry);
- }
- }
- }
- closedir($handle);
- }
- }
-
- /**
- * @param int $shopId
- *
- * @return array
- */
- public function genearteApiAccount($shopId)
- {
- $shop = $this->app->DB->SelectRow(
- sprintf(
- 'SELECT se.`id`, se.`api_account_id`, ac.id AS `api_id`, `se`.bezeichnung
- FROM `shopexport` AS `se`
- LEFT JOIN `api_account` AS `ac` ON se.api_account_id = ac.id
- WHERE se.`id` = %d',
- $shopId
- )
- );
- if(empty($shop)) {
- return ['success' => false, 'error' => 'Shop nicht gefunden'];
- }
- if(!empty($shop['api_id'])) {
- return ['success' => false, 'error' => 'Api Account existiert bereits', 'api_id' => $shop['api_id']];
- }
-
- $remoteDomain = $shop['bezeichnung'];
- $firstRemoteDomain = $remoteDomain;
- $apiName = $shop['bezeichnung'];
- $firstApiName = $apiName;
- $remoteIndex = 0;
- $key = sha1(uniqid('shopexport', true));
- while(
- !empty(
- $this->app->DB->Select(
- sprintf(
- "SELECT `id` FROM `api_account` WHERE `remotedomain` = '%s' OR `bezeichnung` = '%s' LIMIT 1",
- $this->app->DB->real_escape_string($remoteDomain),
- $this->app->DB->real_escape_string($apiName)
- )
- )
- )
- ) {
- $remoteIndex++;
- $remoteDomain = $firstRemoteDomain.'_'.$remoteIndex;
- $apiName = $firstApiName.' '.$remoteIndex;
- }
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO `api_account`
- (`bezeichnung`, `initkey`, `importwarteschlange_name`, `event_url`, `remotedomain`, `aktiv`,
- `importwarteschlange`, `cleanutf8`, `uebertragung_account`, `projekt`, `permissions`)
- VALUES ('%s', '%s', '', '', '%s', 1,
- 0, 0, 0, 0, '%s')",
- $this->app->DB->real_escape_string($apiName),
- $this->app->DB->real_escape_string($key), $this->app->DB->real_escape_string($remoteDomain),
- $this->app->DB->real_escape_string('["communicate_with_shop"]')
- )
- );
- $apiId = $this->app->DB->GetInsertID();
- $this->app->DB->Update(
- sprintf(
- 'UPDATE `shopexport` SET `api_account_id` = %d WHERE `id` = %d',
- $apiId, $shopId
- )
- );
-
- return ['success' => true, 'api_id' => $apiId];
- }
-
- public function ShopexportItemlink()
- {
- $id = (int)$this->app->Secure->GetGET('id');
- $shop = $this->app->DB->Select(sprintf('SELECT `id` FROM `shopexport` WHERE `id` = %d', $id));
- if(empty($shop)) {
- $this->app->Location->execute(
- 'index.php?module=onlineshops&action=list&msg='.
- $this->app->erp->base64_url_encode('Shop nicht gefunden
')
- );
- }
- $sid = base64_decode($this->app->Secure->GetGET('sid'));
- if(empty($sid)) {
- $this->app->Location->execute(
- 'index.php?module=onlineshops&action=list&msg='.
- $this->app->erp->base64_url_encode('Artikel nicht angegeben
')
- );
- }
- $article = $this->app->DB->SelectRow(
- sprintf(
- "SELECT art.id, art.projekt FROM `artikel` AS art
- LEFT JOIN `artikelnummer_fremdnummern` AS af on art.id = af.artikel AND af.aktiv = 1 AND af.shopid = %d
- WHERE (art.nummer = '%s' OR af.nummer = '%s') AND (art.geloescht = 0 OR art.geloescht IS NULL)
- ORDER BY af.id DESC
- LIMIT 1",
- $shop, $this->app->DB->real_escape_string($sid), $this->app->DB->real_escape_string($sid)
- )
- );
- if(empty($article)) {
- $this->app->Location->execute(
- 'index.php?module=onlineshops&action=list&msg='.
- $this->app->erp->base64_url_encode(sprintf('Artikel %s nicht gefunden
', $sid))
- );
- }
- if(empty($article['projekt']) || $this->app->User->projectOk($article['projekt'])){
- $this->app->Location->execute('index.php?module=artikel&action=edit&id=' . $article['id']);
- }
- $this->app->Location->execute(
- 'index.php?module=onlineshops&action=list&msg='.
- $this->app->erp->base64_url_encode(
- sprintf(
- 'Sie haben keine Rechte den Artikel %s aufzurufen
',
- $sid
- )
- )
- );
- }
-
- /**
- * @param string $server
- *
- * @return string[][]
- */
- public function getUserCases($server)
- {
- return [
- 'batchpicking' => [
- 'title_de' => 'Batch Kommissionierung',
- 'title_en' => 'Batch Picking',
- 'svg_de' => 'usecasesSvgDe/Batch_Kommissionierung@1x.svg',
- 'svg_en' => 'usecasesSvgEn/Batch_picking@1x.svg',
- 'link' => $server .'/index.php?module=batchpicking&action=list',
- 'link_alt' => 'https://xentral.com/helpdesk/kurzanleitung-batches-picklisten',
- ],
- 'buchhaltungsexport' => [
- 'title_de' => 'Datev Export',
- 'title_en' => 'Data export',
- 'svg_de' => 'usecasesSvgDe/Datev_Export@1x.svg',
- 'svg_en' => 'usecasesSvgEn/Data_export@1x.svg',
- 'link' => $server .'/index.php?module=buchhaltungexport&action=list',
- 'link_alt' => 'https://xentral.com/helpdesk/kurzanleitung-export-fuer-die-buchhaltung',
- ],
- 'dropshipping' => [
- 'title_de' => 'Dropshipping',
- 'title_en' => 'Dropshipping',
- 'svg_de' => 'usecasesSvgDe/Dropshipping@1x.svg',
- 'svg_en' => 'usecasesSvgEn/Dropshipping@1x.svg',
- 'link' => $server .'/index.php?module=dropshipping&action=list',
- 'link_alt' => 'https://xentral.com/helpdesk/dropshipping',
- ],
- 'kommissionierlauf' => [
- 'title_de' => 'Einfache Pickliste',
- 'title_en' => 'Simple pick list',
- 'svg_de' => 'usecasesSvgDe/Einfache_Pickliste@1x.svg',
- 'svg_en' => 'usecasesSvgEn/Simple_pick_list@1x.svg',
- 'link' => $server .'/index.php?module=kommissionierlauf&action=list',
- 'link_alt' => 'https://xentral.com/helpdesk/kurzanleitung-logistikprozesse',
- ],
- 'mahnwesen' => [
- 'title_de' => 'Mahnwesen',
- 'title_en' => 'Dunning',
- 'svg_de' => 'usecasesSvgDe/Mahnwesen@1x.svg',
- 'svg_en' => 'usecasesSvgEn/Dunning@1x.svg',
- 'link' => $server .'/index.php?module=mahnwesen&action=list',
- 'link_alt' => 'https://xentral.com/helpdesk/kurzanleitung-mahnwesen',
- ],
- 'versandarten' => [
- 'title_de' => 'Paketmarken',
- 'title_en' => 'Parcel stamps',
- 'svg_de' => 'usecasesSvgDe/Paketmarken@1x.svg',
- 'svg_en' => 'usecasesSvgEn/Parcel_stamps@1x.svg',
- 'link' => $server .'/index.php?module=versandarten&action=list',
- 'link_alt' => 'https://xentral.com/helpdesk/kurzanleitung-versandarten',
- ],
- 'pos' => [
- 'title_de' => 'POS Anbinden',
- 'title_en' => 'Connect POS',
- 'svg_de' => 'usecasesSvgDe/POS_Anbinden@1x.svg',
- 'svg_en' => 'usecasesSvgEn/Connect_POS@1x.svg',
- 'link' => $server .'/index.php?module=pos&action=list',
- 'link_alt' => 'https://xentral.com/helpdesk/kurzanleitung-arbeiten-mit-der-pos-kasse',
- ],
- 'retoure' => [
- 'title_de' => 'Retouren',
- 'title_en' => 'Returns',
- 'svg_de' => 'usecasesSvgDe/Retouren@1x.svg',
- 'svg_en' => 'usecasesSvgEn/Returns@1x.svg',
- 'link' => $server .'/index.php?module=retoure&action=list',
- 'link_alt' => 'https://xentral.com/helpdesk/kurzanleitung-rma',
- ],
- 'wareneingang' => [
- 'title_de' => 'Wareneingang',
- 'title_en' => 'Goods Receipt',
- 'svg_de' => 'usecasesSvgDe/Wareneingang@1x.svg',
- 'svg_en' => 'usecasesSvgEn/Goods_Receipt@1x.svg',
- 'link' => $server .'/index.php?module=warneingang&action=paketannahme',
- 'link_alt' => 'https://xentral.com/helpdesk/kurzanleitung-zentraler-wareneingang',
- ],
-
- ];
- }
-
- /**
- * @param int $shopId
- *
- * @return array
- */
- public function getModulelinks($shopId = 0)
- {
- $server = $this->app->Location->getServer();
- $pos1 = strpos($server, 'api/index.php');
- if((int)$pos1 > 0) {
- $server = substr($server, 0, (int)$pos1);
- }
- elseif((int)($pos1 = strpos($server, 'index.php')) > 0) {
- $server = substr($server, 0, (int)$pos1);
- }
- elseif((int)($pos1 = strpos($server, '/api/shopimport/modulelinks')) > 0) {
- $server = substr($server, 0, (int)$pos1);
- }
- $server = rtrim($server,'/');
- /** @var Appstore $appstore */
- $appstore = $this->app->loadModule('appstore');
- $apps = $appstore->getAppsList();
-
- $ret = $this->getUserCases($server);
- if(!empty($apps['kauf'])){
- foreach ($ret as $module => $box) {
- if($this->app->erp->ModulVorhanden($module)){
- continue;
- }
- foreach ($apps['kauf'] as $app) {
- if($app['key'] !== $module) {
- continue;
- }
- $ret[$module]['link'] = $server
- .'/index.php?module=appstore&action=list&cmd=detail&app='.$app['key'];
- break;
- }
- }
- }
- $cacheDir = dirname(__DIR__).'/cache/Onlineshop/resources';
- foreach($ret as $key => $val) {
- if(!empty($val['svg_en'])) {
- $file = $cacheDir.'/'.$val['svg_en'];
- if(!is_file($cacheDir.'/'.$val['svg_en'])) {
- $this->InstallResouces();
- break;
- }
- }
- if(!empty($val['svg_de'])) {
- if(!is_file($cacheDir.'/'.$val['svg_de'])) {
- $this->InstallResouces();
- break;
- }
- }
- }
- foreach($ret as $key => $val) {
- if(!empty($val['svg_en'])) {
- $ret[$key]['svg_en'] = $server.'/cache/Onlineshop/resources/'. $val['svg_en'];
- }
- if(!empty($val['svg_de'])) {
- $ret[$key]['svg_de'] = $server.'/cache/Onlineshop/resources/'. $val['svg_de'];
- }
- }
-
- return $ret;
- }
-
- public function ShopexportOrderlink()
- {
- $id = (int)$this->app->Secure->GetGET('id');
- $shop = $this->app->DB->Select(sprintf('SELECT `id` FROM `shopexport` WHERE `id` = %d', $id));
- if(empty($shop)) {
- $this->app->Location->execute(
- 'index.php?module=onlineshops&action=list&msg='.
- $this->app->erp->base64_url_encode('Shop nicht gefunden
')
- );
- }
- $sid = base64_decode($this->app->Secure->GetGET('sid'));
- if(empty($sid)) {
- $this->app->Location->execute(
- 'index.php?module=onlineshops&action=list&msg='.
- $this->app->erp->base64_url_encode('Auftrag nicht angegeben
')
- );
- }
- $order = $this->app->DB->SelectRow(
- sprintf(
- "SELECT `id`, `projekt`
- FROM `auftrag`
- WHERE (`internet`= '%s' OR `shopextid` = '%s') AND `shop` = %d
- ORDER BY `status` = 'storniert'
- LIMIT 1",
- $this->app->DB->real_escape_string($sid), $this->app->DB->real_escape_string($sid), $id
- )
- );
- if(empty($order)) {
- $this->app->Location->execute(
- 'index.php?module=onlineshops&action=list&msg='.
- $this->app->erp->base64_url_encode(sprintf('Auftrag %s nicht gefunden
', $sid))
- );
- }
- if(empty($order['projekt']) || $this->app->User->projectOk($order['projekt'])){
- $this->app->Location->execute('index.php?module=auftrag&action=edit&id=' . $order['id']);
- }
- $this->app->Location->execute(
- 'index.php?module=onlineshops&action=list&msg='.
- $this->app->erp->base64_url_encode(
- sprintf(
- 'Sie haben keine Rechte den Auftrag %s aufzurufen
',
- $sid
- )
- )
- );
- }
-
- /**
- * @param string $data
- *
- * @return array
- */
- public function checkAppData($data)
- {
- $data = json_decode($data, true);
- if(empty($data['shoptype'])) {
- return ['success'=>false,'error' => 'no shoptype given'];
- }
- if(empty($data['token'])) {
- return ['success'=>false,'error' => 'no token given'];
- }
-
- if(strpos($data['shoptype'],'shopimporter_') !== 0) {
- return ['success'=>false,'error' => sprintf('Shopmodule %s not valid', $data['shoptype'])];
- }
-
- if(!$this->app->erp->ModulVorhanden($data['shoptype'])) {
- return ['success'=>false,'error' => sprintf('Shopmodule %s not found', $data['shoptype'])];
- }
-
- /** @var ShopimporterBase $shop */
- $shop = $this->app->loadModule($data['shoptype']);
- if(!method_exists($shop, 'checkApiApp')) {
- return ['success'=>false,'error' => sprintf('Shopmodule %s provide no api', $data['shoptype'])];
- }
- $info = null;
- $check = $shop->checkApiApp($data);
- if(!empty($check['error'])) {
- return $check;
- }
- if(!empty($check['info'])) {
- $info = $check['info'];
- }
-
- return ['success'=>true, 'data' => $data, 'info' => $info];
- }
-
- /**
- * @return JsonResponse|void
- */
- public function ShopexportAppNew()
- {
- $cmd = $this->app->Secure->GetGET('cmd');
- $fromAjax = $cmd === 'createdata';
- $fromCreateButton = $this->app->Secure->GetPOST('create');
- if($fromAjax || $fromCreateButton) {
- $data = $this->app->Secure->GetPOST('data','','',true);
- $step = (int)$this->app->Secure->GetPOST('step');
- $shopId = (int)$this->app->Secure->GetPOST('shopId');
- if($step === 2 && $shopId > 0 && !empty($data)) {
- return $this->getVueShopexportAppNewSuccessPageYt($shopId, $data);
- }
- $check = $this->checkAppData($data);
- $shopId = $shopId <= 0?0:(int)$this->app->DB->Select(
- sprintf(
- "SELECT `id` FROM `shopexport` WHERE `geloescht` = 0 AND `aktiv` = 1 AND `id` = %d AND `modulename` = '%s'",
- $shopId, $this->app->DB->real_escape_string($check['data']['shoptype'])
- )
- );
- if(!empty($check['error'])) {
- if(!$fromCreateButton) {
- return new JsonResponse(
- ['error'=>''.$check['error'].'
'],
- JsonResponse::HTTP_INTERNAL_SERVER_ERROR
- );
- }
- $this->app->Location->execute(
- 'index.php?module=onlineshops&action=appnew&msg='
- .$this->app->erp->base64_url_encode(''.$check['error'].'
')
- );
- }
- if($shopId > 0) {
- $shop = ['id' => $shopId,];
- }
- else {
- $shop = $this->createInternShop($check['data']['shoptype']);
- }
- if(!empty($shop['error'])) {
- if(!$fromCreateButton) {
- return new JsonResponse(
- ['error'=>''.$shop['error'].'
'],
- JsonResponse::HTTP_INTERNAL_SERVER_ERROR
- );
- }
- $this->app->Location->execute(
- 'index.php?module=onlineshops&action=appnew&msg='
- .$this->app->erp->base64_url_encode(''.$shop['error'].'
')
- );
- }
- $apiAccount = $this->genearteApiAccount($shop['id']);
- if(!empty($apiAccount['api_id'])) {
- $json = $this->app->DB->Select(
- sprintf(
- 'SELECT `einstellungen_json` FROM `shopexport` WHERE `id` = %d',
- $shop['id']
- )
- );
- $json = json_decode($json, true);
- if(!is_array($json)) {
- $json = [];
- }
- if(empty($json['felder'])) {
- $json['felder'] = [];
- }
- if(!empty($check['data']['data'])) {
- foreach($check['data']['data'] as $fieldKey => $fieldValue) {
- $json['felder'][$fieldKey] = $fieldValue;
- }
- }
- $json = json_encode($json);
- $this->app->DB->Update(
- sprintf(
- "UPDATE `shopexport`
- SET `einstellungen_json` = '%s',
- `api_account_token` = '%s',
- `demomodus` = 0,
- `cronjobaktiv` = 1,
- `lagerexport` = 1
- WHERE `id` = %d",
- $this->app->DB->real_escape_string($json),
- $this->app->DB->real_escape_string($check['data']['token']),
- $shop['id']
- )
- );
- if(!$fromCreateButton) {
- return $this->getVueShopexportAppNewSuccessPage($shop['id'], $data);
- }
- $this->app->Location->execute(
- 'index.php?module=onlineshops&action=appnew&shopid='.$shop['id']
- .'&url='.urlencode($check['data']['url'])
- );
- }
- }
-
- if($cmd === 'checkdata') {
- $data = $this->app->Secure->GetPOST('data','','',true);
- $check = $this->checkAppData($data);
- if(!empty($check['error'])) {
- return new JsonResponse($check, JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
- }
- return new JsonResponse(['html'=>'Shoptyp: '.$check['data']['shoptype'].'
']);
- }
- $shopdata = $this->app->Secure->GetGET('shopdata');
- if(!empty($shopdata)) {
- $shopdata = base64_decode($shopdata);
- $this->app->User->SetParameter('onlineshops_appnew', $shopdata);
- $this->app->User->SetParameter('onlineshops_appnew_time', date('Y-m-d H:i:s'));
- $this->app->erp->RegisterHook('welcome_start', 'onlineshops', 'OnlineShopsWelcomeStart');
- $this->app->Location->execute('index.php?module=welcome&action=start');
- }
-
- $this->app->erp->MenuEintrag('index.php?module=onlineshops&action=appnew', 'Shop mit API anlegen');
- $shopId = $this->app->Secure->GetGET('shopid');
- $url = $this->app->Secure->GetGET('url');
- if(!empty($shopId)) {
- if(!empty($url)) {
- $this->app->Tpl->Add(
- 'MESSAGE',
- ''
- );
- }
- else {
- $this->app->Tpl->Add(
- 'MESSAGE',
- 'Es wurde ein neuer
Shop angelegt.
'
- );
- }
- }
-
- $this->app->Tpl->Parse('PAGE', 'onlineshop_appnew.tpl');
- }
-
- /**
- * @param Welcome $welcomeObj
- */
- public function OnlineShopsWelcomeStart($welcomeObj)
- {
- $appnew = $this->app->User->GetParameter('onlineshops_appnew');
- if(empty($appnew)) {
- return;
- }
- $appnewTime = $this->app->User->GetParameter('onlineshops_appnew_time');
- if(empty($appnewTime)) {
- return;
- }
- try {
- $lastDay = new DateTime(date('Y-m-d H:i:s'));
- $lastDay->sub(new DateInterval('P1D'));
- $appnewTime = new DateTime($appnewTime);
- if($appnewTime < $lastDay) {
- return;
- }
- }
- catch (Exception $e) {
- return;
- }
- $this->app->ModuleScriptCache->IncludeJavascriptFiles(
- 'onlineshops', ['./classes/Modules/Onlineshop/www/js/onlineshop_appnew.js']
- );
- $this->app->User->SetParameter('onlineshops_appnew', '');
- $this->app->User->SetParameter('onlineshops_appnew_time', '');
- $check = $this->checkAppData($appnew);
- if(!empty($check['success'])) {
- $shopModule = $check['data']['shoptype'];
- $shopModules = [['value' => '-1', 'text'=> 'Neu anlegen',],];
- $shopModulesPair = $this->app->DB->SelectArr(
- sprintf(
- "SELECT `id` AS `value`, `bezeichnung` AS `text`
- FROM `shopexport`
- WHERE `geloescht` = 0 AND `modulename` = '%s' AND `aktiv` = 1
- ORDER BY `bezeichnung`",
- $this->app->DB->real_escape_string($shopModule)
- )
- );
- if(!empty($shopModulesPair)) {
- $shopModules = array_merge(
- [['value'=>'', 'text'=> '']],
- $shopModulesPair,$shopModules
- );
- }
- else {
- $shopModules = array_merge(
- [['value'=>'', 'text'=> '']],
- $shopModules
- );
- }
-
- $this->app->Tpl->Set('APPNEWJSON', json_encode($shopModules));
-
- $this->app->Tpl->Set('APPNEWDATA', htmlspecialchars($appnew));
-
- $this->app->Tpl->Set('APPNEWINFO', empty($check['info']['info'])?'':$check['info']['info']);
- $this->app->Tpl->Set('APPNEWFIELDSET', empty($check['info']['Shop'])?'':$check['info']['Shop']);
-
-
- $this->app->Tpl->Parse('AUFGABENPOPUP','onlineshops_appnewpopup.tpl');
- }
- else {
- $error =!empty($check['error'])?$check['error']:'Request ungültig';
- $this->app->Tpl->Set('ERRORMSG', $error);
- $this->app->Tpl->Parse('AUFGABENPOPUP','onlineshops_appnewerrorpopup.tpl');
- }
-
- $this->app->ModuleScriptCache->IncludeWidgetNew('ClickByClickAssistant');
- }
-
- /**
- * @return JsonResponse
- */
- public function ShopexportGetApi()
- {
- $token = $this->app->Secure->GetGET('token');
- $cmd = $this->app->Secure->GetGET('cmd');
- if($cmd === 'getusecases') {
- $data = $this->getModulelinks();
- return new JsonResponse($data);
- }
- if(empty($token)) {
- $data = ['success' => false, 'error' => 'no Token given'];
- return new JsonResponse($data, JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
- }
-
- $shopId = $this->app->DB->SelectRow(
- sprintf(
- "SELECT `id`, `api_account_id` FROM `shopexport` WHERE `api_account_token` = '%s' LIMIT 1",
- $token
- )
- );
-
- if(empty($shopId)) {
- $data = ['success' => false, 'error' => 'Token is invalid'];
- return new JsonResponse($data, JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
- }
-
- $apiAccount = $this->app->DB->SelectRow(
- sprintf(
- 'SELECT `id`, `initkey`, `remotedomain` FROM `api_account` WHERE `id` = %d LIMIT 1',
- $shopId['api_account_id']
- )
- );
-
- $data = ['success' => true];
- $data['shopid'] = $shopId['id'];
- $data['api_account_id'] = $shopId['api_account_id'];
- $data['apiname'] = $apiAccount['remotedomain'];
- $data['apikey'] = $apiAccount['initkey'];
- $data['server'] = rtrim(str_replace('index.php','',$this->app->Location->getServer()),'/');
- $data['api_auth'] = $data['server'].'/api/shopimport/auth';
- $data['api_syncstorage'] = $data['server'].'/api/shopimport/syncstorage/{articlenumber_base64}';
- $data['api_articletoxentral'] = $data['server'].'/api/shopimport/articletoxentral/{articlenumber_base64}';
- $data['api_articletoshop'] = $data['server'].'/api/shopimport/articletoshop/{articlenumber_base64}';
- $data['api_ordertoxentral'] = $data['server'].'/api/shopimport/ordertoxentral/{ordernumber_base64}';
- $data['api_statistics'] = $data['server'].'/api/shopimport/statistics';
- $data['api_modulelinks'] = $data['server'].'/api/shopimport/articletoshop/modulelinks';
- $data['api_status'] = $data['server'].'/api/shopimport/articletoshop/status';
- $data['api_disconnect'] = $data['server'].'/api/shopimport/articletoshop/disconnect';
- $data['api_reconnect'] = $data['server'].'/api/shopimport/articletoshop/reconnect';
- $data['item_link'] = $data['server']
- .'/index.php?module=onlineshops&action=itemlink&id='.$shopId['id'].'&sid={articlenumber_base64}';
- $data['order_link'] = $data['server']
- .'/index.php?module=onlineshops&action=orderlink&id='.$shopId['id'].'&sid={ordernumber_base64}';
-
- return new JsonResponse($data);
- }
-
- public function ShopexportMinidetail()
- {
- $ida = explode('-',$this->app->Secure->GetGET('id'));
- if((!empty($ida)?count($ida):0) < 2)
- {
- $this->app->ExitXentral();
- }
- $id = $ida[1];
- if($ida[0] == 1) {
- $wert = $this->app->DB->Select("SELECT parameter1 FROM shopexport_log WHERE id = '$id' LIMIT 1");
- echo '';
- echo htmlspecialchars($wert);
- echo ' ';
- }elseif($ida[0]==3){
- $query = sprintf('SELECT shop_id FROM shopexport_change_log WHERE id=%d',$id);
- $shopId = $this->app->DB->Select($query);
- $query = sprintf('SELECT diff FROM shopexport_change_log WHERE shop_id=%d AND id<%d ORDER BY id ASC',
- $shopId,$id);
- $changeLogEntries = $this->app->DB->SelectArr($query);
- $fieldsToCompareTo = [];
- foreach ($changeLogEntries as $changeLogEntry){
- $existingFields = json_decode($changeLogEntry['diff'],true);
- $fieldsToCompareTo = array_merge($fieldsToCompareTo,$existingFields);
- }
- $query = sprintf('SELECT diff FROM shopexport_change_log WHERE id=%d', $id);
- $lastChanges = json_decode($this->app->DB->Select($query),true);
-
- $message = 'Feldname Ursprünglicher Wert Aktualisierter Wert ';
- foreach ($lastChanges as $lastChangeFieldName => $lastChangeFieldValue){
- $message .= ''.$lastChangeFieldName.' '.$fieldsToCompareTo[$lastChangeFieldName].' '.$lastChangeFieldValue.' ';
- }
- $message .='
';
- echo $message;
- }else{
- $shopimportCartRow = $this->app->DB->SelectRow(
- sprintf(
- 'SELECT * FROM `shopimport_auftraege` WHERE `id` = %d',
- $id
- )
- );
- if(!empty($shopimportCartRow['jsonencoded'])) {
- $warenkorb = json_decode(base64_decode($shopimportCartRow['warenkorb']), true);
- }else{
- $warenkorb = unserialize(base64_decode($shopimportCartRow['warenkorb']));
- }
- echo '';
- echo print_r($warenkorb,true);
- echo ' ';
- $cartInfos = $this->app->DB->SelectArr(
- sprintf(
- "SELECT * FROM `onlineshop_transfer_cart` WHERE `shop_id` = %d AND `extid` = '%s'",
- $shopimportCartRow['shopid'], $this->app->DB->real_escape_string($shopimportCartRow['extid'])
- )
- );
- if(!empty($cartInfos)) {
- $table = new EasyTable($this->app);
- $table->Query("SELECT '' AS `Datum`, '' AS `status`, '' AS `Template`, '' AS `Transformiert`");
- $table->datasets = [];
- foreach($cartInfos as $cartInfo) {
- $cart = empty($cartInfo['cart_transfer'])?''
- :print_r(json_decode(base64_decode($cartInfo['cart_transfer'], true)));
- $template = empty($cartInfo['template'])?'':$cartInfo['template'];
- $table->datasets[] = [
- 'Datum' => $cartInfo['created_at'],
- 'status' => $cartInfo['status'],
- 'Template' =>nl2br(htmlspecialchars($template)),
- 'Transformiert' => nl2br(htmlspecialchars($cart)),
- ];
- }
- echo $table->DisplayNew('return','Transformiert','noAction');
- }
- }
- $this->app->ExitXentral();
- }
-
- public function ShopexportKundengruppensave()
- {
- $id = (int)$this->app->Secure->GetPOST('id');
- $aktiv = (int)$this->app->Secure->GetPOST('aktiv');
- $neukundenzuweisen = (int)$this->app->Secure->GetPOST('kundengruppeneukundenzuweisen');
- $rolle = $this->app->Secure->GetPOST('zuweisungrolle');
- $shopId = (int)$this->app->Secure->GetPOST('shop');
- $kundengruppeIdAusXentral = $this->app->Secure->GetPOST('kundengruppexentral');
- $kundengruppeBezeichnungAusShop = $this->app->Secure->GetPOST('kundengruppeshop');
- $projektAbkuerzung = $this->app->Secure->GetPOST('projekt');
- $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '$projektAbkuerzung' AND abkuerzung <> '' AND ifnull(geloescht,0) = 0 LIMIT 1");
- if(!$projekt){
- $projekt = '0';
- }
- $antwort = array(
- 'status' => 1,
- 'statusText' => 'Gespeichert.'
- );
-
- if(!$shopId){
- $antwort['status'] = 0;
- $antwort['statusText'] = 'Shopzuordnung kann nicht gefunden werden.';
- }
-
- $eintragBereitsvorhanden = $this->app->DB->Select("SELECT id FROM shopexport_kundengruppen WHERE projekt='$projekt' AND shopid='$shopId' AND gruppeid='$kundengruppeIdAusXentral' AND extgruppename='$kundengruppeBezeichnungAusShop' AND id<>'$id'LIMIT 1");
- if($eintragBereitsvorhanden){
- $antwort['status'] = 0;
- $antwort['statusText'] = 'Identischer Eintrag bereits vorhanden.';
- }
-
- if ($antwort['status']){
- $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
- if($id){
- $sql = "UPDATE shopexport_kundengruppen SET type='$rolle',gruppeid='$kundengruppeIdAusXentral',extgruppename='$kundengruppeBezeichnungAusShop', aktiv='$aktiv', apply_to_new_customers='$neukundenzuweisen',projekt = '$projekt', updated=NOW(),updatedby='$bearbeiter' WHERE id='$id'";
- $this->app->DB->Update($sql);
- }else{
- $aktiv = '1';
- $sql = "INSERT INTO shopexport_kundengruppen (shopid, gruppeid, extgruppename, aktiv, apply_to_new_customers,type, projekt, updated, updatedby) VALUES
- ('$shopId','$kundengruppeIdAusXentral','$kundengruppeBezeichnungAusShop','$aktiv','$neukundenzuweisen','$rolle','$projekt',NOW(),'$bearbeiter')";
- $this->app->DB->Insert($sql);
- }
- }
-
- echo json_encode($antwort);
- $this->app->ExitXentral();
- }
-
- public function ShopexportSprachensave()
- {
- $id = (int)$this->app->Secure->GetGET('id');
-
- $shop = (int)$this->app->Secure->GetPOST('shop');
- $land = $this->app->Secure->GetPOST('land');
- $sprache = $this->app->Secure->GetPOST('sprache');
- $projekt = explode(' ',$this->app->Secure->GetPOST('projekt'));
- $projekt = reset($projekt);
- $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '$projekt' AND abkuerzung <> '' AND ifnull(geloescht,0) = 0 LIMIT 1");
- /*$aktiv = $this->app->Secure->GetPOST('aktiv');
- if($aktiv!="1")
- {
- $aktiv=0;
- }*/
-
- $aktiv = 1;
-
- if ($shop) {
- $this->app->DB->Insert("INSERT INTO shopexport_sprachen (id,shop,land,projekt, aktiv, sprache) VALUES
- ('','$shop','$land','$projekt','$aktiv','$sprache')");
- $insid = $this->app->DB->GetInsertID();
- $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
- $this->app->DB->Update("UPDATE shopexport_sprachen SET updatedby = '$bearbeiter' WHERE id = '$insid' LIMIT 1");
- }
-
- echo json_encode(array(
- 'status' => 1,
- 'statusText' => 'Gespeichert.'
- ));
- $this->app->ExitXentral();
- }
-
- public function ShopexportZahlweisesave()
- {
- $id = (int)$this->app->Secure->GetGET('id');
-
- $shop = (int)$this->app->Secure->GetPOST('shop');
- $zahlweise_shop = $this->app->Secure->GetPOST('zahlweise_shop');
- $zahlweise_wawision = $this->app->Secure->GetPOST('zahlweise_wawision');
- $vorabbezahltmarkieren = $this->app->Secure->GetPOST('vorabbezahltmarkieren');
- $autoversand = $this->app->Secure->GetPOST('autoversand');
- $keinerechnung = $this->app->Secure->GetPOST('keinerechnung');
- $fastlane = (int)$this->app->Secure->GetPOST('fastlane');
- if($keinerechnung!="1")
- {
- $keinerechnung=0;
- }
- if($vorabbezahltmarkieren!="1")
- {
- $vorabbezahltmarkieren=0;
- }
- if($autoversand!="1")
- {
- $autoversand=0;
- }
- if($fastlane!==1)
- {
- $fastlane=0;
- }
- $aktiv = 1;
-
- if ($shop) {
- $this->app->DB->Insert("INSERT INTO shopexport_zahlweisen (id,shop,zahlweise_shop,zahlweise_wawision,vorabbezahltmarkieren,aktiv,autoversand,keinerechnung,fastlane) VALUES
- ('','$shop','$zahlweise_shop','$zahlweise_wawision','$vorabbezahltmarkieren','$aktiv','$autoversand','$keinerechnung',$fastlane)");
- $insid = $this->app->DB->GetInsertID();
- $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
- $this->app->DB->Update("UPDATE shopexport_zahlweisen SET updatedby = '$bearbeiter' WHERE id = '$insid' LIMIT 1");
- }
-
- echo json_encode(array(
- 'status' => 1,
- 'statusText' => 'Gespeichert.'
- ));
- $this->app->ExitXentral();
- }
-
- public function ShopexportSubshopsave()
- {
- $id = (int)$this->app->Secure->GetPOST('id');
- $shop = (int)$this->app->Secure->GetPOST('shop');
- $subshopkennung = $this->app->Secure->GetPOST('subshopkennung');
- $projekt = $this->app->Secure->GetPOST('projekt');
- $sprache = $this->app->Secure->GetPOST('sprache');
- $aktiv = 1;
-
- $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' AND abkuerzung!='' LIMIT 1");
-
- if ($shop && $subshopkennung && $projekt) {
- $this->app->DB->Insert("INSERT INTO shopexport_subshop (id,shop,subshopkennung,projekt,sprache, aktiv) VALUES ('','$shop','$subshopkennung','$projekt','$sprache','$aktiv')");
- $insid = $this->app->DB->GetInsertID();
- $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
- $this->app->DB->Update("UPDATE shopexport_subshop SET updatedby = '$bearbeiter' WHERE id = '$insid' LIMIT 1");
-
- echo json_encode(array(
- 'status' => 1,
- 'statusText' => 'Gespeichert.'
- ));
- }
- else {
- echo json_encode(array(
- 'status' => 0,
- 'statusText' => 'Bitte alle Felder eingeben'
- ));
-
- }
-
-
- $this->app->ExitXentral();
- }
-
- public function ShopexportFreifeldsave()
- {
- $id = (int)$this->app->Secure->GetPOST('id');
- $shop = (int)$this->app->Secure->GetPOST('shop');
- $freifeld_shop = $this->app->Secure->GetPOST('freifeld_shop');
- $freifeld_wawi = $this->app->Secure->GetPOST('freifeld_wawi');
- $aktiv = 1;
-
- if ($shop && $freifeld_shop) {
- $this->app->DB->Insert("INSERT INTO shopexport_freifelder (id,shop,freifeld_shop,freifeld_wawi,aktiv) VALUES
- ('','$shop','$freifeld_shop','$freifeld_wawi','$aktiv')");
- $insid = $this->app->DB->GetInsertID();
- $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
- $this->app->DB->Update("UPDATE shopexport_freifelder SET updatedby = '$bearbeiter' WHERE id = '$insid' LIMIT 1");
- echo json_encode(array(
- 'status' => 1,
- 'statusText' => 'Gespeichert.'
- ));
- }
- else {
- echo json_encode(array(
- 'status' => 0,
- 'statusText' => 'Bitte Freifeld eingeben'
- ));
-
- }
-
- $this->app->ExitXentral();
- }
-
- /**
- * @throws Exception
- */
- public function ShopexportArtikelbaumexport(){
- $shopid = (int)$this->app->Secure->GetPOST('id');
- if($this->app->DB->Select(sprintf("SELECT id FROM prozessstarter WHERE parameter = 'onlineshops_tasks' AND aktiv = 1 LIMIT 1"))){
- $command = 'sendartikelbaum';
- $task = $this->app->DB->SelectRow('SELECT * FROM onlineshops_tasks WHERE shop_id=\'' . $shopid . '\' AND command=\'' . $command . '\'');
- if(!empty($task['id'])){
- if($task['status'] !== 'running'){
- $this->app->DB->Update('UPDATE onlineshop_tasks SET status=\'inactive\',counter=0 WHERE id=' . $task['id']);
- }
- }
- else{
- $this->app->DB->Insert('INSERT INTO onlineshops_tasks (shop_id, command) VALUES (' . $shopid . ',\'' . $command . '\')');
- }
- echo json_encode(
- array(
- 'status' => 1,
- 'statusText' => 'Aufgabe wurde zu Shoptasks hinzugefügt und wird im Hintergrund ausgeführt.'
- ));
- $this->app->ExitXentral();
- }
-
- $shopinfo = $this->app->DB->SelectRow("SELECT * FROM shopexport WHERE id ='$shopid'");
- if($shopinfo['shoptyp'] === 'intern' && $this->app->erp->ModulVorhanden($shopinfo['modulename'])){
-
- $obj = $this->app->erp->LoadModul($shopinfo['modulename']);
-
- if($obj->canExportArticleTree()){
-
- $kategorienbaum = null;
-
- $this->app->erp->GetKategorienbaum($kategorienbaum, 0, 0, $shopid);
-
- $this->app->remote->RemoteCommand($shopid, 'sendartikelbaum', $kategorienbaum);
- }
- }
- echo json_encode(array(
- 'status' => 1,
- 'statusText' => 'Übertragung abgeschlossen.'
- ));
- $this->app->ExitXentral();
- }
-
- public function ShopexportZahlweiseeditsave()
- {
- $id = (int)$this->app->Secure->GetPOST('id');
- $zahlweise_shop = $this->app->Secure->GetPOST('zahlweise_shop');
- $zahlweise_wawision = $this->app->Secure->GetPOST('zahlweise_wawision');
- $vorabbezahltmarkieren = $this->app->Secure->GetPOST('vorabbezahltmarkieren');
- $autoversand = $this->app->Secure->GetPOST('autoversand');
- $aktiv = $this->app->Secure->GetPOST('aktiv');
- $keinerechnung = $this->app->Secure->GetPOST('keinerechnung');
- $fastlane = (int)$this->app->Secure->GetPOST('fastlane');
-
- if($vorabbezahltmarkieren!="1") {
- $vorabbezahltmarkieren=0;
- }
- if($keinerechnung!="1")
- {
- $keinerechnung=0;
- }
- if($autoversand!="1")
- {
- $autoversand=0;
- }
- if($aktiv!="1")
- {
- $aktiv=0;
- }
- if($fastlane!==1)
- {
- $fastlane=0;
- }
-
- if ($id) {
- $this->app->DB->Update("UPDATE shopexport_zahlweisen SET keinerechnung = '$keinerechnung', zahlweise_shop='$zahlweise_shop',zahlweise_wawision='$zahlweise_wawision',vorabbezahltmarkieren='$vorabbezahltmarkieren',autoversand='$autoversand',aktiv='$aktiv',fastlane = $fastlane WHERE id = '$id'");
- $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
- $this->app->DB->Update("UPDATE shopexport_zahlweisen SET updatedby = '$bearbeiter', updated = now() WHERE id = '$id'");
- }
-
- echo json_encode(array(
- 'status' => 1,
- 'statusText' => 'Gespeichert.'
- ));
- $this->app->ExitXentral();
-
- }
-
- public function ShopexportSprachenget()
- {
- $id = $this->app->Secure->GetPOST('id');
- $row = $this->app->DB->SelectRow('
- SELECT
- s.id,
- s.sprache,
- s.land,
- s.aktiv,
- p.abkuerzung as projekt
- FROM
- shopexport_sprachen s LEFT JOIN projekt p ON s.projekt = p.id
- WHERE
- s.id = "' . $id . '"
- ');
- echo json_encode($row);
- $this->app->ExitXentral();
- }
-
- public function ShopexportZahlweiseget() {
- $id = $this->app->Secure->GetPOST('id');
- $row = $this->app->DB->SelectRow('
- SELECT
- id,
- zahlweise_shop,
- zahlweise_wawision,
- vorabbezahltmarkieren,
- autoversand,
- aktiv,
- keinerechnung,
- fastlane
- FROM
- shopexport_zahlweisen
- WHERE
- id = "' . $id . '"
- ');
-
- echo json_encode($row);
- $this->app->ExitXentral();
- }
-
- public function ShopexportZahlweisedelete()
- {
- $id = (int)$this->app->Secure->GetGET("id");
- $sid = $this->app->DB->Select("SELECT shop FROM shopexport_zahlweisen WHERE id='$id' LIMIT 1");
-
- if($id > 0) {
- $this->app->DB->Delete("DELETE FROM shopexport_zahlweisen WHERE id='$id' LIMIT 1");
- $msg = $this->app->erp->base64_url_encode("Der Eintrag wurde entfernt!
");
- $this->app->Location->execute("index.php?module=onlineshops&action=edit&id=$sid&msg=$msg#tabs-3");
- }
- }
-
-
- public function ShopexportVersandartsave()
- {
- $id = (int)$this->app->Secure->GetGET('id');
- $shop = (int)$this->app->Secure->GetPOST('shop');
- $versandart_shop = $this->app->Secure->GetPOST('versandart_shop');
- $versandart_wawision = $this->app->Secure->GetPOST('versandart_wawision');
- $versandart_ausgehend = $this->app->Secure->GetPOST('versandart_ausgehend');
- $produkt_ausgehend = $this->app->Secure->GetPOST('produkt_ausgehend');
- $land = $this->app->Secure->GetPOST('land');
- $autoversand = $this->app->Secure->GetPOST('autoversand');
- $fastlane = (int)$this->app->Secure->GetPOST('fastlane');
- if($fastlane !== 1)
- {
- $fastlane = 0;
- }
-
- if($autoversand!="1") $autoversand=0;
-
- $aktiv = 1;
-
- if ($shop) {
- $this->app->DB->Update("INSERT INTO shopexport_versandarten (id,shop,versandart_shop,versandart_wawision,produkt_ausgehend,versandart_ausgehend,aktiv,autoversand,land,fastlane) VALUES
- ('','$shop','$versandart_shop','$versandart_wawision','{$produkt_ausgehend}','$versandart_ausgehend','$aktiv','$autoversand','$land',$fastlane)");
- }
-
- echo json_encode(array(
- 'status' => 1,
- 'statusText' => 'Gespeichert.'
- ));
- $this->app->ExitXentral();
-
- }
-
- public function ShopexportSpracheneditsave()
- {
- $id = (int)$this->app->Secure->GetPOST('id');
- $sprache = $this->app->Secure->GetPOST('sprache');
- $land = $this->app->Secure->GetPOST('land');
- $projekt = explode (' ',$this->app->Secure->GetPOST('projekt'));
- $projekt = reset($projekt);
- if($projekt) {
- $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '$projekt' AND abkuerzung <> '' AND geloescht = 0 LIMIT 1");
- }
- $aktiv = $this->app->Secure->GetPOST('aktiv');
- if($aktiv!="1") {
- $aktiv=0;
- }
-
- if ($id) {
- $this->app->DB->Update("UPDATE shopexport_sprachen SET land='$land',sprache='$sprache',projekt='$projekt',land='$land',
- aktiv='$aktiv' WHERE id = '$id'");
-
- $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
- $this->app->DB->Update("UPDATE shopexport_sprachen SET updatedby = '$bearbeiter', updated = now() WHERE id = '$id'");
- }
-
- echo json_encode(array(
- 'status' => 1,
- 'statusText' => 'Gespeichert.'
- ));
- $this->app->ExitXentral();
- }
-
- public function ShopexportVersandarteditsave()
- {
- $id = (int)$this->app->Secure->GetPOST('id');
- $versandart_shop = $this->app->Secure->GetPOST('versandart_shop');
- $versandart_wawision = $this->app->Secure->GetPOST('versandart_wawision');
- $versandart_ausgehend = $this->app->Secure->GetPOST('versandart_ausgehend');
- $produkt_ausgehend = $this->app->Secure->GetPOST('produkt_ausgehend');
- $autoversand = $this->app->Secure->GetPOST('autoversand');
- $land = $this->app->Secure->GetPOST('land');
- $aktiv = $this->app->Secure->GetPOST('aktiv');
- $fastlane = (int)$this->app->Secure->GetPOST('fastlane');
- if($fastlane !== 1)
- {
- $fastlane = 0;
- }
-
- if($aktiv!='1')
- {
- $aktiv=0;
- }
-
- if ($id) {
- $this->app->DB->Update("UPDATE shopexport_versandarten SET versandart_shop='$versandart_shop',versandart_wawision='$versandart_wawision',versandart_ausgehend='$versandart_ausgehend',produkt_ausgehend='$produkt_ausgehend',autoversand='$autoversand',land='$land',
- aktiv='$aktiv',fastlane= $fastlane WHERE id = '$id'");
- $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
- $this->app->DB->Update("UPDATE shopexport_versandarten SET updatedby = '$bearbeiter', updated = now() WHERE id = '$id'");
- }
-
- echo json_encode(array(
- 'status' => 1,
- 'statusText' => 'Gespeichert.'
- ));
- $this->app->ExitXentral();
-
- }
-
- public function ShopexportSubshopeditsave()
- {
- $id = (int)$this->app->Secure->GetPOST('id');
- $subshopkennung = $this->app->Secure->GetPOST('subshopkennung');
- $projekt = $this->app->Secure->GetPOST('projekt');
- $aktiv = $this->app->Secure->GetPOST('aktiv');
- $sprache = $this->app->Secure->GetPOST('sprache');
-
- if($aktiv!='1') {
- $aktiv=0;
- }
-
- $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' AND abkuerzung!='' LIMIT 1");
-
- if ($id && $projekt > 0) {
- $this->app->DB->Update("UPDATE shopexport_subshop SET subshopkennung='$subshopkennung',projekt='$projekt',sprache = '$sprache',
- aktiv='$aktiv' WHERE id = '$id'");
- $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
- $this->app->DB->Update("UPDATE shopexport_subshop SET updatedby = '$bearbeiter', updated = now() WHERE id = '$id'");
- echo json_encode(array(
- 'status' => 1,
- 'statusText' => 'Gespeichert.'
- ));
- }
- else {
- echo json_encode(array(
- 'status' => 0,
- 'statusText' => 'Projekt nicht vorhanden'
- ));
- }
-
- $this->app->ExitXentral();
-
- }
-
-
- public function ShopexportFreifeldereditsave()
- {
- $id = (int)$this->app->Secure->GetPOST('id');
- $freifeld_shop = $this->app->Secure->GetPOST('freifeld_shop');
- $freifeld_wawi = $this->app->Secure->GetPOST('freifeld_wawi');
- $aktiv = $this->app->Secure->GetPOST('aktiv');
-
- if($aktiv!='1') {
- $aktiv=0;
- }
-
- if ($id) {
- $this->app->DB->Update("UPDATE shopexport_freifelder SET freifeld_wawi='$freifeld_wawi',freifeld_shop='$freifeld_shop',
- aktiv='$aktiv' WHERE id = '$id'");
- $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
- $this->app->DB->Update("UPDATE shopexport_freifelder SET updatedby = '$bearbeiter', updated = now() WHERE id = '$id'");
- }
-
- echo json_encode(array(
- 'status' => 1,
- 'statusText' => 'Gespeichert.'
- ));
- $this->app->ExitXentral();
-
- }
-
- public function ShopexportVersandartget() {
- $id = $this->app->Secure->GetPOST('id');
- $row = $this->app->DB->SelectRow('
- SELECT
- id,
- versandart_shop,
- versandart_wawision,
- produkt_ausgehend,
- versandart_ausgehend,
- autoversand,
- land,
- aktiv,
- fastlane
- FROM
- shopexport_versandarten
- WHERE
- id = "' . $id . '"
- ');
-
- echo json_encode($row);
- $this->app->ExitXentral();
- }
-
- public function ShopexportKundengruppenget() {
- $id = $this->app->Secure->GetPOST('id');
- $row = $this->app->DB->SelectRow("SELECT s.id, s.gruppeid, s.extgruppename, s.aktiv, s.apply_to_new_customers AS neukundengruppezuweisen, s.type, IF(s.projekt=0,'',p.abkuerzung) AS projekt, s.shopid
- FROM shopexport_kundengruppen s LEFT JOIN projekt p ON s.projekt = p.id WHERE s.id='$id'");
- echo json_encode($row);
- $this->app->ExitXentral();
- }
-
- public function ShopexportSubshopget()
- {
- $id = $this->app->Secure->GetPOST('id');
- $row = $this->app->DB->SelectRow('
- SELECT
- s.id,
- s.subshopkennung,
- p.abkuerzung as projekt,
- s.sprache,
- s.aktiv
- FROM
- shopexport_subshop s LEFT JOIN projekt p ON p.id=s.projekt
- WHERE
- s.id = "' . $id . '"
- ');
-
- echo json_encode($row);
- $this->app->ExitXentral();
- }
-
-
- public function ShopexportFreifeldget()
- {
- $id = $this->app->Secure->GetPOST('id');
- $row = $this->app->DB->SelectRow('
- SELECT
- id,
- freifeld_shop,
- freifeld_wawi,
- aktiv
- FROM
- shopexport_freifelder
- WHERE
- id = "' . $id . '"
- ');
-
- echo json_encode($row);
- $this->app->ExitXentral();
- }
-
-
- public function ShopexportVersandartdelete()
- {
- $id = (int)$this->app->Secure->GetGET('id');
- $sid = $this->app->DB->Select("SELECT shop FROM shopexport_versandarten WHERE id='$id' LIMIT 1");
- if($id > 0) {
- $this->app->DB->Delete("DELETE FROM shopexport_versandarten WHERE id='$id' LIMIT 1");
-
- $msg = $this->app->erp->base64_url_encode("Der Eintrag wurde entfernt!
");
- $this->app->Location->execute("index.php?module=onlineshops&action=edit&id=$sid&msg=$msg#tabs-4");
- }
- }
-
- public function ShopexportKundengruppendelete()
- {
- $id = (int)$this->app->Secure->GetGET('id');
- $sid = $this->app->DB->Select("SELECT shopid FROM shopexport_kundengruppen WHERE id='$id' LIMIT 1");
- if($id > 0 ) {
- $this->app->DB->Delete("DELETE FROM shopexport_kundengruppen WHERE id='$id' LIMIT 1");
-
- $msg = $this->app->erp->base64_url_encode("Der Eintrag wurde entfernt!
");
- $this->app->Location->execute("index.php?module=onlineshops&action=edit&id=$sid&msg=$msg#tabs-8");
- }
-}
-
- public function ShopexportSprachendelete()
- {
- $id = (int)$this->app->Secure->GetGET('id');
- $sid = $this->app->DB->Select("SELECT shop FROM shopexport_sprachen WHERE id='$id' LIMIT 1");
- if($id > 0) {
- $this->app->DB->Delete("DELETE FROM shopexport_sprachen WHERE id='$id' LIMIT 1");
-
- $msg = $this->app->erp->base64_url_encode("Der Eintrag wurde entfernt!
");
- $this->app->Location->execute("index.php?module=onlineshops&action=edit&id=$sid&msg=$msg#tabs-7");
- }
- }
-
- public function ShopexportSubshopdelete()
- {
- $id = (int)$this->app->Secure->GetGET('id');
- $sid = $this->app->DB->Select("SELECT shop FROM shopexport_subshop WHERE id='$id' LIMIT 1");
- if($id > 0) {
- $this->app->DB->Delete("DELETE FROM shopexport_subshop WHERE id='$id' LIMIT 1");
-
- $msg = $this->app->erp->base64_url_encode("Der Eintrag wurde entfernt!
");
- $this->app->Location->execute("index.php?module=onlineshops&action=edit&id=$sid&msg=$msg#tabs-6");
- }
- }
-
- public function ShopexportFreifelddelete()
- {
- $id = (int)$this->app->Secure->GetGET('id');
- $sid = $this->app->DB->Select("SELECT shop FROM shopexport_freifelder WHERE id='$id' LIMIT 1");
- if($id > 0) {
- $this->app->DB->Delete("DELETE FROM shopexport_freifelder WHERE id='$id' LIMIT 1");
-
- $msg = $this->app->erp->base64_url_encode("Der Eintrag wurde entfernt!
");
- $this->app->Location->execute("index.php?module=onlineshops&action=edit&id=$sid&msg=$msg#tabs-5");
- }
- }
-
- protected function match($haystack, $needle)
- {
- $needle = strtolower($this->app->erp->UmlauteEntfernen($needle));
- $haystack = strtolower($this->app->erp->UmlauteEntfernen($haystack));
- $needlaa = explode(' ',$needle);
- foreach($needlaa as $v) {
- if($v &&strpos($haystack, $v) === false) {
- return false;
- }
- }
- return true;
- }
-
- public function getApps($val = '')
- {
- $val = (String)$val;
- $module = $this->app->erp->getApps();
- if($module)
- {
- if(isset($module['installiert']))
- {
- foreach($module['installiert'] as $k => $v)
- {
- $module['installiert'][$k]['match'] = $this->match($v['Bezeichnung'], $val);
- $module['installiert'][$k]['md5'] = md5($v['Bezeichnung']);
- }
- }
- if(isset($module['kauf']))
- {
- foreach($module['kauf'] as $k => $v)
- {
- $module['kauf'][$k]['match'] = $this->match($v['Bezeichnung'], $val);
- $module['kauf'][$k]['md5'] = md5($v['Bezeichnung']);
- }
- }
- }
- return $module;
- }
-
- /**
- * @param int $shopId
- *
- * @return int|null
- */
- public function createShippingArticleByShopId($shopId): ?int
- {
- $shop = $this->app->DB->SelectRow(
- sprintf(
- "SELECT `s`.`projekt`, `art`.`id`
- FROM `shopexport` AS `s`
- LEFT JOIN `artikel` AS `art` ON `s`.`artikelporto` = art.id
- AND (`art`.`geloescht` = 0 OR `art`.`geloescht` IS NULL)
- AND (`art`.`intern_gesperrt` = 0 OR `art`.`intern_gesperrt` IS NULL)
- WHERE `s`.`id` = %d ",
-
- $shopId
- )
- );
- if (empty($shop) || !empty($shop['id'])) {
- return null;
- }
- $firstShippingArticle = $this->app->DB->SelectRow(
- 'SELECT `art`.`id`
- FROM `artikel` AS `art`
- LEFT JOIN `projekt` AS `p` ON `art`.projekt = p.id
- WHERE `art`.`porto` = 1
- AND (`art`.`geloescht` IS NOT NULL OR `art`.geloescht = 0)
- AND (`art`.`intern_gesperrt` = 0 OR `art`.`intern_gesperrt` IS NULL)
- AND (`p`.`id` IS NULL OR p.`oeffentlich` = 1)
- '
- );
- if (!empty($firstShippingArticle)) {
- $this->app->DB->Update(
- sprintf('UPDATE `shopexport` SET `artikelporto` = %d WHERE `id` = %d ',
- (int)$firstShippingArticle['id'], $shopId
- )
- );
-
- return (int)$firstShippingArticle['id'];
- }
- $shippingArticle = ['projekt' => $shop['projekt'], 'name_de' => 'Porto', 'proto' => 1];
- $shippingArticle['nummer'] = $this->app->erp->GetNextArtikelnummer('', '1', $shop['projekt']);
- $shippingArticleId = (int)$this->app->erp->InsertUpdateArtikel($shippingArticle);
- if ($shippingArticleId <= 0) {
- return null;
- }
- $this->app->DB->Update(
- sprintf(
- 'UPDATE `shopexport` SET `artikelporto` = %d WHERE `id` = %d ',
- $shippingArticleId, $shopId
- )
- );
-
- return $shippingArticleId;
- }
-
- /**
- * @param int $shopId
- *
- * @return int|null
- */
- public function createDiscountArticleForShop($shopId): ?int
- {
- $shop = $this->app->DB->SelectRow(
- sprintf(
- 'SELECT `s`.`projekt`, `art`.`id`
- FROM `shopexport` AS `s`
- LEFT JOIN `artikel` AS `art` ON `s`.`artikelrabatt` = art.id
- AND (`art`.`geloescht` = 0 OR `art`.`geloescht` IS NULL)
- AND (`art`.`intern_gesperrt` = 0 OR `art`.`intern_gesperrt` IS NULL)
- WHERE `s`.`id` = %d',
- $shopId
- )
- );
- if (empty($shop) || !empty($shop['id'])) {
- return null;
- }
- $discountArticle = [
- 'projekt' => $shop['projekt'],
- 'name_de' => 'Rabatt',
- 'name_en' => 'Discount',
- 'lagerartikel' => 0,
- ];
- $discountArticle['nummer'] = $this->app->erp->GetNextArtikelnummer('', '1', $shop['projekt']);
- $discountArticleId = (int)$this->app->erp->InsertUpdateArtikel($discountArticle);
- if ($discountArticleId <= 0) {
- return null;
- }
- $this->app->DB->Update(
- sprintf(
- 'UPDATE `shopexport` SET `artikelrabatt` = %d WHERE `id` = %d ',
- $discountArticleId, $shopId
- )
- );
-
- return $discountArticleId;
- }
-
- /**
- * @param string $auswahlmodul
- *
- * @return array
- */
- public function createInternShop($auswahlmodul)
- {
- if($fehler = $this->app->erp->OnlineshopsLizenzFehler($auswahlmodul)) {
- return ['success'=>false,'error'=>$fehler['Error']];
- }
- $bezeichnung = ucfirst(str_replace('shopimporter_','',$auswahlmodul));
- $i = 1;
- while($this->app->DB->Select("SELECT id FROM shopexport WHERE bezeichnung = '$bezeichnung' LIMIT 1")) {
- $i++;
- $bezeichnung = ucfirst(str_replace('shopimporter_','',$auswahlmodul)).' '.$i;
- }
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO `shopexport`
- (`shoptyp`, `modulename`,`artikelimport`,`demomodus`,`bezeichnung`,`artikeltexteuebernehmen`,
- `versandartenmapping`,
- `zahlungsweisenmapping`,`lagerexport`,`artikelexport`,`datumvon`,`auftragabgleich`,`portoartikelanlegen`,
- `steuerfreilieferlandexport`,`multiprojekt`,`direktimport`,`rabatteportofestschreiben`)
- VALUES ('intern','%s',1,1,'%s',1,1,1,0,0,now(),1,1,1,1,1,1)",
- $auswahlmodul, $bezeichnung
- )
- );
- $id = $this->app->DB->GetInsertID();
- $obj = $this->app->erp->LoadModul($auswahlmodul);
- if($obj && method_exists($obj, 'EinstellungenStruktur')) {
- $struktur = $obj->EinstellungenStruktur();
- if(isset($struktur['defaultoncreate']) && is_array($struktur['defaultoncreate'])) {
- $this->app->DB->UpdateArr('shopexport',$id,'id',$struktur['defaultoncreate'],true);
- }
- }
- $this->app->erp->InstallModul($auswahlmodul);
- $this->app->erp->RunHook('shopexport_create', 1, $id);
-
- return ['id'=>$id];
- }
-
- /**
- * @param int $shopId
- * @param null|array $post
- */
- public function saveCreateData($shopId, $post = null)
- {
- $shop = $this->app->DB->SelectRow(
- sprintf('SELECT * FROM `shopexport` WHERE `id` = %d', $shopId)
- );
- $obj = $this->app->loadModule($shop['modulename']);
- if($obj === null) {
- return;
- }
- $form = $obj->getCreateForm();
- $data = json_decode($shop['einstellungen_json'], true);
- if(empty($data) || !is_array($data)) {
- $data = ['felder'=>[]];
- }
- if(empty($data['felder']) || !is_array($data['felder'])) {
- $data['felder'] = [];
- }
- if($post === null) {
- foreach($form as $row) {
- if(empty($row['inputs'])) {
- continue;
- }
- foreach($row['inputs'] as $input) {
- if(!empty($input['name'])){
- $post[$input['name']] = !isset($this->app->Secure->POST[$input['name']])
- ?null:$this->app->Secure->POST[$input['name']];
- }
- }
- }
- }
- if(empty($post)) {
- return;
- }
- foreach($post as $key => $value) {
- $data['felder'][$key] = $value;
- }
- $this->app->DB->Update(
- sprintf(
- "UPDATE `shopexport` SET `einstellungen_json` = '%s' WHERE `id` = %d",
- $this->app->DB->real_escape_string(json_encode($data)), $shopId
- )
- );
- }
-
- /**
- * @var int ShopId
- *
- * @return JsonResponse
- */
- public function getVueShopexportSuccessPage($shopId)
- {
- $succespage = [
- 'type' => 'defaultPage',
- 'icon' => 'add-person-icon',
- 'headline'=> 'Shop angelegt',
- 'subHeadline'=> 'Der Shop wurde angelegt',
- 'ctaButtons' => [
- [
- 'title' => 'Klasse',
- 'action' => 'close',
- 'link' => 'index.php?module=onlineshops&action=edit&id='.$shopId
- ]
- ]
- ];
-
- return new JsonResponse(
- ['page'=>$succespage]
- );
- }
-
- /**
- * @param $shopId
- * @param $data
- *
- * @return JsonResponse
- */
- public function getVueShopexportAppNewSuccessPageYt($shopId, $data): JsonResponse
- {
- $youtubeLink = 'https://www.youtube.com/embed/49PICIq3XP8';
- $shopType = $this->app->DB->Select(
- sprintf(
- 'SELECT `modulename` FROM `shopexport` WHERE `id` = %d',
- $shopId
- )
- );
- if(!empty($shopType)
- && ($shopModule = $this->app->loadModule($shopType)) !== null
- && method_exists($shopModule, 'getYoutubeLink')
- ) {
- $youtubeLink = $shopModule->getYoutubeLink();
- }
-
- $buttons = [];
- $data = json_decode($data, true);
- if(!empty($data['url'])) {
- $buttons[] =
- [
- 'title' => 'Zum Shop',
- 'action' => 'close',
- 'link' => $data['url'],
- ];
- }
- $buttons[] =
- [
- 'title' => 'In Xentral bleiben',
- 'action' => 'close',
- 'link' => 'index.php?module=onlineshops&action=edit&id='.$shopId,
- ];
- $succespage = [
- 'type' => 'defaultPage',
- 'icon' => 'add-person-icon',
- 'headline'=> 'Shop wurde verknüpft',
- 'subHeadline'=> '',
- 'headerMedia' => [
- 'type' => 'video',
- 'link' => $youtubeLink
- ],
-
- 'ctaButtons' => $buttons,
- ];
-
- return new JsonResponse(
- [
- 'page'=>$succespage,
- ]
- );
- }
-
- /**
- * @var int $shopId
- *
- * @return JsonResponse
- */
- public function getVueShopexportAppNewSuccessPage($shopId, $data): JsonResponse
- {
- $succespage = [
- 'type' => 'form',
- 'submitType' => 'submit',
- 'icon' => 'add-person-icon',
- 'headline'=> 'Shop wurde verknüpft',
- 'submitUrl' => 'index.php?module=onlineshops&action=appnew&cmd=createdata',
- 'form' => [
- 'id' => 0,
- 'name' => 'createPriceGroupHead',
- 'inputs' => [],
- ],
- 'subHeadline'=> '',
- 'ctaButtons' => [
- [
- 'title' => 'Weiter',
- 'type' => 'submit',
- 'action' => 'submit',
- ]
- ]
- ];
-
- return new JsonResponse(
- [
- 'page'=>$succespage,
- 'dataRequiredForSubmit' => [
- 'step' => 2,
- 'shopId' => $shopId,
- 'data' => $data,
- ]
- ]
- );
- }
-
- /**
- * @return array[]
- */
- public function getPriceGroupForm(): array
- {
- $ret = [
- [
- 'id' => 0,
- 'name' => 'createPriceGroupHead',
- 'inputs' => [
- [
- 'label' => 'Neue Preisgruppe erstellen',
- 'type' => 'checkbox',
- 'name' => 'createPriceGroup',
- 'validation' => false,
- ],
- ],
- ],
- [
- 'id' => 1,
- 'name' => 'usePriceGroupHead',
- 'inputs' => [
- [
- 'label' => 'Bestehende Preisgruppe verwenden',
- 'type' => 'select',
- 'name' => 'usePriceGroup',
- 'validation' => false,
- 'options' => $this->getVuePriceGroups(),
- ]
- ],
- ]
- ];
-
- return $ret;
- }
-
- /**
- * @return array
- */
- public function getVuePriceGroups(): array
- {
- $priceGroups = array_merge(
- [''=>''],
- $this->app->DB->SelectPairs(
- sprintf(
- "SELECT g.kennziffer, g.name
- FROM `gruppen` AS `g`
- WHERE g.aktiv = 1 AND g.art = 'preisgruppe' %s
- ORDER BY g.name",
- $this->app->erp->ProjektRechte('g.projekt')
- )
- )
- );
-
- return $this->convertArrayToVueOptions($priceGroups);
- }
-
- /**
- * @param array $array
- *
- * @return array
- */
- public function convertArrayToVueOptions($array)
- {
- if(empty($array) || !is_array($array)) {
- return [];
- }
- $ret = [];
- foreach($array as $value => $text) {
- $ret[] = [
- 'value' => $value,
- 'text' => $text,
- ];
- }
-
- return $ret;
- }
-
- /**
- * @var null|array $options
- *
- * @return array[]
- */
- public function getFeatureForm($options = null): array
- {
- $ret = [];
- if(!empty($options['canExportArticle'])) {
- $ret[] = [
- 'id' => 0,
- 'name' => 'exportArticlesGroup',
- 'inputs' => [
- [
- 'label' => 'Artikel übertragen',
- 'type' => 'checkbox',
- 'name' => 'export_articles',
- 'validation' => false,
- ],
-
- ],
- ];
- }
- if(!empty($options['canSyncArticles'])) {
- $ret[] = [
- 'id' => 1,
- 'name' => 'syncArticlesGroup',
- 'inputs' => [
- [
- 'label' => 'Lagerbestände synchronisieren',
- 'type' => 'checkbox',
- 'name' => 'sync_articles',
- 'validation' => false,
- ],
-
- ],
- ];
- }
- $ret[] = [
- 'id' => 2,
- 'name' => 'autoOrderGroup',
- 'inputs' => [
- [
- 'label' => 'Neue Aufträge automatisch abholen',
- 'type' => 'checkbox',
- 'name' => 'auto_order',
- 'validation' => false,
- ],
-
- ],
- ];
-
- return $ret;
- }
-
- /**
- * @var string $moduleName
- * @var string $shopName
- * @var null|array $requiredForSubmit
- * @var null|array $options
- *
- * @return JsonResponse
- */
- public function getPriceGroupPage($moduleName, $shopName, $requiredForSubmit = null, $options = null)
- {
- if($requiredForSubmit === null) {
- $requiredForSubmit = $this->app->Secure->POST;
- $requiredForSubmit['step'] = 10;
- }
-
- $page = [
- 'type' => 'form',
-
- 'submitType' => 'submit',
- 'icon'=> 'password-icon',
- 'headline' => $shopName,
- 'subHeadline' => sprintf('Möchtest Du eine Preisgruppe für %s verwenden?', $shopName),
- 'submitUrl' => 'index.php?module=onlineshops&action=create&cmd=saveassistent&shopmodule='.$moduleName,
- 'form' => $this->getPriceGroupForm(),
- 'ctaButtons' => [
- [
- 'title' => 'Weiter',
- 'type' => 'submit',
- 'action' => 'submit',
- ],
- ]
- ];
-
- return new JsonResponse(
- [
- 'page' => $page,
- 'dataRequiredForSubmit' => $requiredForSubmit,
- ]
- );
- }
-
- /**
- * @var string $moduleName
- * @var string $shopName
- * @var null|array $requiredForSubmit
- * @var null|array $options
- *
- * @return JsonResponse
- */
- public function getStep2Page($moduleName, $shopName, $requiredForSubmit = null, $options = null)
- {
- if($requiredForSubmit === null) {
- $requiredForSubmit = $this->app->Secure->POST;
- $requiredForSubmit['step'] = 2;
- }
- $page = [
- 'type' => 'form',
-
- 'submitType' => 'submit',
- 'icon'=> 'password-icon',
- 'headline' => $shopName,
- 'subHeadline' => 'Welche Features möchtest du nutzen?',
- 'submitUrl' => 'index.php?module=onlineshops&action=create&cmd=saveassistent&shopmodule='.$moduleName,
- 'form' => $this->getFeatureForm($options),
- 'ctaButtons' => [
- [
- 'title' => 'Weiter',
- 'type' => 'submit',
- 'action' => 'submit',
- ],
- ]
- ];
-
- return new JsonResponse(
- [
- 'page' => $page,
- 'dataRequiredForSubmit' => $requiredForSubmit,
- ]
- );
- }
-
- /**
- * @param string $moduleName
- * @param string $shopName
- * @param null|array $requiredForSubmit
- * @param null|array $options
- *
- * @return JsonResponse
- */
- public function getExportArticlePage($moduleName, $shopName, $requiredForSubmit = null, $options = null)
- {
- if($requiredForSubmit === null) {
- $requiredForSubmit = $this->app->Secure->POST;
- $requiredForSubmit['step'] = 3;
- }
-
- $capabilites = ShopimporterBase::shopCapabilities();
- $capabilites = empty($capabilites[$moduleName])?[]:$capabilites[$moduleName];
- $pictures = !empty($capabilites['bilder'])
- && $capabilites['bilder']['createarticle'] === ShopimporterBase::CAN;
- $attributes = !empty($capabilites['eigenschaften'])
- && $capabilites['eigenschaften']['createarticle'] === ShopimporterBase::CAN;
- $categories= !empty($capabilites['kategorie'])
- && $capabilites['kategorie']['createarticle'] === ShopimporterBase::CAN;
- $variants = !empty($capabilites['varianten'])
- && $capabilites['varianten']['createarticle'] === ShopimporterBase::CAN;
- $crossselling = !empty($capabilites['crossselling'])
- && $capabilites['crossselling']['createarticle'] === ShopimporterBase::CAN;
- $bulkPrices = !empty($capabilites['staffelpreise'])
- && $capabilites['staffelpreise']['createarticle'] === ShopimporterBase::CAN;
-
-
- $exportOptions = [
- [
- 'text' => '',
- 'value' => '',
- ]
- ];
- if(!empty($options['canExportArticle'])){
- $exportOptions[] = [
- 'text' => 'xentral zum Shop',
- 'value' => 'x2s',
- ];
- }
- if(!empty($options['canImportArticle'])) {
- $exportOptions[] = [
- 'text' => 'Shop zu xentral',
- 'value' => 's2x',
- ];
- }
-
- $forms = [
- [
- 'id' => 0,
- 'name' => 'exportFromGroup',
- 'inputs' => [
- [
- 'label' => 'Richtung',
- 'type' => 'select',
- 'name' => 'exportFrom',
- 'validation' => false,
- 'options' => $exportOptions,
- ],
- ],
- ],
- ];
- if($pictures) {
- $forms[] = [
- 'id' => 1,
- 'name' => 'syncPicturesGroup',
- 'inputs' => [
- [
- 'label' => 'Bilder mit übertragen',
- 'type' => 'checkbox',
- 'name' => 'sync_picture',
- 'validation' => false,
- ],
-
- ],
- ];
- }
- if($attributes) {
- $forms[] = [
- 'id' => 2,
- 'name' => 'syncAttributesGroup',
- 'inputs' => [
- [
- 'label' => 'Eigenschaften mit übertragen',
- 'type' => 'checkbox',
- 'name' => 'sync_attributes',
- 'validation' => false,
- ],
- ],
- ];
- }
- if($categories) {
- $forms[] = [
- 'id' => 3,
- 'name' => 'syncCategoriesGroup',
- 'inputs' => [
- [
- 'label' => 'Kategorien mit übertragen',
- 'type' => 'checkbox',
- 'name' => 'sync_categories',
- 'validation' => false,
- ],
- ],
- ];
- }
- if($variants) {
- $forms[] = [
- 'id' => 4,
- 'name' => 'syncVariantsGroup',
- 'inputs' => [
- [
- 'label' => 'Varianten mit übertragen',
- 'type' => 'checkbox',
- 'name' => 'sync_variants',
- 'validation' => false,
- ],
- ],
- ];
- }
- if($crossselling) {
- $forms[] = [
- 'id' => 5,
- 'name' => 'syncCrosssellingGroup',
- 'inputs' => [
- [
- 'label' => 'Crossselling mit übertragen',
- 'type' => 'checkbox',
- 'name' => 'sync_crossselling',
- 'validation' => false,
- ],
- ],
- ];
- }
- if($bulkPrices) {
- $forms[] = [
- 'id' => 6,
- 'name' => 'syncBulkpricesGroup',
- 'inputs' => [
- [
- 'label' => 'Staffelpreise mit übertragen',
- 'type' => 'checkbox',
- 'name' => 'sync_bulkprices',
- 'validation' => false,
- ],
- ],
- ];
- }
-
- $page = [
- 'type' => 'form',
- 'submitType' => 'submit',
- 'icon'=> 'password-icon',
- 'headline' => $shopName,
- 'subHeadline' => 'Welche Artikeldaten sollen übertragen werden?',
- 'submitUrl' => 'index.php?module=onlineshops&action=create&cmd=saveassistent&shopmodule='.$moduleName,
- 'form' => $forms,
- 'ctaButtons' => [
- [
- 'title' => 'Weiter',
- 'type' => 'submit',
- 'action' => 'submit',
- ],
- ]
- ];
-
- return new JsonResponse(
- [
- 'page' => $page,
- 'dataRequiredForSubmit' => $requiredForSubmit,
- ]
- );
- }
-
- /**
- * @param string $module
- *
- * @return JsonResponse
- */
- public function getBoosterVue($module)
- {
- /** @var Appstore $appstore */
- $appstore = $this->app->loadModule('appstore');
- $moduleName = $appstore->getAppNameByKey($module);
- $shopModule = $this->app->loadModule($module);
- if($moduleName === null) {
- $moduleName = ucfirst(substr($module, 13));
- }
- $headLine = $moduleName;
- $subHeadline = 'Bitte gehe auf '.$moduleName.' und verbinden Dich mit dienem Xentral';
- if($shopModule !== null && method_exists($shopModule, 'getBoosterSubHeadline')) {
- $subHeadline = $shopModule->getBoosterSubHeadline();
- }
- if($shopModule !== null && method_exists($shopModule, 'getBoosterHeadline')) {
- $headLine = $shopModule->getBoosterHeadline();
- }
- $page = [
- 'type' => 'defaultPage',
- 'icon'=> 'password-icon',
- 'headline' => $headLine,
- 'subHeadline' => $subHeadline,
- 'ctaButtons' => [
- [
- 'title' => 'OK',
- 'type' => 'close',
- 'action' => 'close',
- ],
- ]
- ];
-
- $ret = [
- 'pages'=>
- [
- $page
- ],
- ];
-
- return new JsonResponse($ret);
- }
-
- public function ShopexportCreate()
- {
- $cmd = $this->app->Secure->GetGET('cmd');
- $auswahlmodul = (string)$this->app->Secure->GetPOST('auswahl');
- if(empty($auswahlmodul)) {
- $auswahlmodul = (string)$this->app->Secure->GetGET('auswahl');
- }
- if(empty($auswahlmodul)) {
- $auswahlmodul = (string)$this->app->Secure->GetPOST('shopmodule');
- }
- if(strpos($auswahlmodul, 'shopimporter_') === 0 && substr($auswahlmodul, -7) === 'booster') {
- $module = substr($auswahlmodul, 0, -7);
- if($cmd === 'getassistant') {
- return $this->getBoosterVue($module);
- }
- $this->app->Location->execute('index.php?module=onlineshops&action=create&cmd='.$module.'&sid=booster');
- }
- if(strpos($cmd, 'shopimporter_') === 0) {
- $sid = $this->app->Secure->GetGET('sid');
- if($sid === 'booster') {
- $this->app->Tpl->Add(
- 'TAB1',
- ''
- );
- }
- else{
- /** @var ShopimporterBase $obj */
- $obj = $this->app->loadModule($cmd);
- if($obj !== null && method_exists($obj, 'AuthByAssistent')){
- $this->app->Tpl->Add(
- 'TAB1',
- ''
- );
- }
- }
- }
- if($cmd === 'saveassistent') {
- $shopId = $this->app->Secure->GetPOST('id','','',true);
- $shopModule = $this->app->Secure->GetPOST('shopmodule');
- $syncArticles = !empty($this->app->Secure->GetPOST('sync_articles'));
- $autoOrder = !empty($this->app->Secure->GetPOST('auto_order'));
- $syncPicture = !empty($this->app->Secure->GetPOST('sync_picture'));
- $syncCategories = !empty($this->app->Secure->GetPOST('sync_categories'));
- $syncAttributes = !empty($this->app->Secure->GetPOST('sync_attributes'));
- $syncVariants = !empty($this->app->Secure->GetPOST('sync_variants'));
- $syncCrossselling = !empty($this->app->Secure->GetPOST('sync_crossselling'));
- $syncBulkprices = !empty($this->app->Secure->GetPOST('sync_bulkprices'));
- $exportFrom = $this->app->Secure->GetPOST('exportFrom');
- $step = (int)$this->app->Secure->GetPOST('step');
- $exportArticles = !empty($this->app->Secure->GetPOST('export_articles'));
- $usePriceGroup = (string)$this->app->Secure->GetPOST('usePriceGroup');
- $createPriceGroup = !empty($this->app->Secure->GetPOST('createPriceGroup'));
- if($shopId === 'NEW'){
- $postData = $this->app->Secure->POST;
- /** @var ShopimporterBase $obj */
- $obj = $this->app->loadModule($shopModule);
- $canImportArticle = false;
- if($obj !== null && method_exists($obj, 'AuthByAssistent')) {
- $json = $obj->AuthByAssistent();
- if($json instanceof JsonResponse) {
- return $json;
- }
- if(method_exists($obj,'ImportGetArticleList')) {
- $canImportArticle = true;
- }
- }
-
- if($obj !== null && method_exists($obj, 'updatePostDataForAssistent')) {
- $postData = $obj->updatePostDataForAssistent($postData);
- }
- $options = [
- 'canImportArticle' => $canImportArticle,
- 'canExportArticle' => true,
- 'canSyncArticles' => true,
- 'canExportPrice' => true,
- ];
- if($obj !== null && method_exists($obj, 'getExportArticleOptions')) {
- $options = $obj->getExportArticleOptions($options);
- }
- if($step < 2) {
- $postData['step'] = 2;
-
- return $this->getStep2Page($shopModule, ucfirst(substr($shopModule, 13)), $postData, $options);
- }
- if($step === 2 && $exportArticles) {
- $postData['step'] = 3;
- return $this->getExportArticlePage(
- $shopModule,
- ucfirst(substr($shopModule, 13)),
- $postData,
- $options
- );
- }
- if($step >= 2 && $step < 10 && !empty($options['canExportPrice'])) {
- $postData['step'] = 10;
- return $this->getPriceGroupPage($shopModule, ucfirst(substr($shopModule, 13)), $postData, $options);
- }
-
- $check = $this->createInternShop($shopModule);
- if(!empty($check['error'])){
- $data = ['error' => $check['error']];
- return new JsonResponse($data, JsonResponse::HTTP_BAD_REQUEST);
- }
- if(!empty($check['id'])){
- $shopId = $check['id'];
- $this->createShippingArticleByShopId($shopId);
- $this->createDiscountArticleForShop($shopId);
- if(method_exists($obj, 'getStructureDataForClickByClickSave')) {
- $structureData = $obj->getStructureDataForClickByClickSave();
- if(!empty($structureData)) {
- $this->saveCreateData($shopId, $structureData);
- }
- }
- if(method_exists($obj, 'afterCreateClickByClick')) {
- $obj->afterCreateClickByClick($shopId);
- }
- }
- }
- if($shopId > 0) {
- $this->saveCreateData($shopId);
- $shopArr = [];
- if($exportFrom === 'x2s') {
- $shopArr['autosendarticle'] = 1;
- $shopArr['artikelexport'] = 1;
- }
- if($syncPicture) {
- $shopArr['shopbilderuebertragen'] = 1;
- }
- if($syncCategories) {
- $shopArr['kategorienuebertragen'] = 1;
- }
- if($syncAttributes) {
- $shopArr['eigenschaftenuebertragen'] = 1;
- }
- if($syncVariants) {
- $shopArr['variantenuebertragen'] = 1;
- }
- if($syncCrossselling) {
- $shopArr['crosssellingartikeluebertragen'] = 1;
- }
- if($syncBulkprices) {
- $shopArr['staffelpreiseuebertragen'] = 1;
- }
- if($syncArticles) {
- $shopArr['lagerexport'] = 1;
- }
- if($autoOrder) {
- $shopArr['cronjobaktiv'] = 1;
- $shopArr['demomodus'] = 0;
- }
- if($obj !== null && method_exists($obj, 'updateShopexportArr')) {
- $shopArr = $obj->updateShopexportArr($shopArr, $postData);
- }
- if(empty($shopArr['preisgruppe'])){
- if($usePriceGroup !== '') {
- $shopArr['preisgruppe'] = $this->getPriceGroupIdFromCode($usePriceGroup);
- }
- elseif($createPriceGroup){
- $shopArr['preisgruppe'] = $this->createPriceGroupByShopId($shopId);
- }
- }
- if(!empty($shopArr)) {
- $this->app->DB->UpdateArr('shopexport', $shopId, 'id', $shopArr, true);
- }
-
- if($autoOrder && method_exists($obj, 'EinstellungenStruktur')) {
- $stucture = $obj->EinstellungenStruktur();
- if(empty($stucture['ausblenden']) || !in_array('zeitraum',$stucture['ausblenden'])) {
- $shopArr = [
- 'anzgleichzeitig' => 50,
- 'datumvon' => date('Y-m-d H:i:s'),
- ];
- $this->app->DB->UpdateArr('shopexport', $shopId, 'id', $shopArr, true);
- }
- }
-
- if($exportFrom === 's2x') {
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO `onlineshops_tasks`
- (`shop_id`, `command`, `status`, `counter`, `created`, `lastupdate`)
- VALUES (%d, 'GetArticleList', 'created', 0, NOW(), NOW())",
- $shopId
- )
- );
- }
- return $this->getVueShopexportSuccessPage($shopId);
- }
- $data = ['error' => 'Unknown error'];
-
- return new JsonResponse($data, JsonResponse::HTTP_BAD_REQUEST);
- }
-
- if($cmd === 'getbooster') {
- $module = $this->app->Secure->GetPOST('shopmodule');
- return $this->getBoosterVue($module);
- }
-
- if($cmd === 'getassistant') {
- $module = $this->app->Secure->GetPOST('shopmodule');
- $isBooster = substr($module, -7) === 'booster';
- $obj = $this->app->loadModule($module);
- if($obj === null && $isBooster) {
- $module = substr($module, 0, -7);
- return $this->getBoosterVue($module);
- }
- if(!method_exists($obj, 'getCreateForm')) {
- return new JsonResponse(['location' => 'index.php?module=onlineshops&action=create&auswahl='.$module]);
- }
- $form = $obj->getCreateForm();
- if(!empty($form)) {
- $form[(!empty($form)?count($form):0) - 1]['link'] = [
- 'link' => 'index.php?module=onlineshops&action=create&auswahl=' . $module,
- 'title' => 'Expertenmodus',
- ];
- }
- $page = [
- 'type' => 'form',
- 'dataRequiredForSubmit' =>
- [
- 'shopmodule' => $module,
- 'id' => 'NEW',
- ],
- 'submitType' => 'submit',
- 'icon'=> 'password-icon',
- 'headline' => ucfirst(substr($module, 13)),
- 'subHeadline' => method_exists($obj, 'getClickByClickHeadline')?$obj->getClickByClickHeadline():'Bitte Zugangsdaten eingeben',
- 'submitUrl' => 'index.php?module=onlineshops&action=create&cmd=saveassistent&shopmodule='.$module,
- 'form' => $form,
- 'ctaButtons' => [
- [
- 'title' => 'Weiter',
- 'type' => 'submit',
- 'action' => 'submit',
- ],
- ]
- ];
-
- $ret = [
- 'pages'=>
- [
- $page
- ],
- ];
-
- return new JsonResponse($ret);
- }
-
- $module = $this->getApps($this->app->Secure->GetPOST('val'));
-
- if($cmd === 'suche') {
- $anzeigen = '';
- $ausblenden = '';
- if($module) {
- if(isset($module['installiert'])) {
- foreach($module['installiert'] as $k => $v) {
- if($v['match']){
- if($anzeigen != '') {
- $anzeigen .= ';';
- }
- $anzeigen .= 'm'.md5($v['Bezeichnung']);
- }
- else {
- if($ausblenden != '') {
- $ausblenden .= ';';
- }
- $ausblenden .= 'm'.md5($v['Bezeichnung']);
- }
- }
- }
- if(isset($module['kauf'])) {
- foreach($module['kauf'] as $k => $v) {
- if($v['match']) {
- if($anzeigen != '') {
- $anzeigen .= ';';
- }
- $anzeigen .= 'm'.md5($v['Bezeichnung']);
- }
- else {
- if($ausblenden != '') {
- $ausblenden .= ';';
- }
- $ausblenden .= 'm'.md5($v['Bezeichnung']);
- }
- }
- }
- }
- echo json_encode(array('anzeigen'=>$anzeigen,'ausblenden'=>$ausblenden));
- $this->app->ExitXentral();
- }
-
- if($this->app->Secure->GetGET('auswahl')) {
- //$bezeichnung = $this->app->Secure->GetPOST('bezeichnung');
- $auswahlmodul = $this->app->Secure->GetGET('auswahl');
- if($auswahlmodul === 'extern') {
- $bezeichnung = 'Onlineshop';
- $i = 1;
- while($this->app->DB->Select(
- sprintf("SELECT `id` FROM `shopexport` WHERE `bezeichnung` = '%s' LIMIT 1", $bezeichnung))) {
- $i++;
- $bezeichnung = 'Onlineshop '.$i;
- }
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO `shopexport`
- (
- `artikelimport`,`demomodus`,`bezeichnung`,`artikeltexteuebernehmen`,`versandartenmapping`,
- `zahlungsweisenmapping`, `lagerexport`,`artikelexport`,`datumvon`,`auftragabgleich`,
- `portoartikelanlegen`,`steuerfreilieferlandexport`,`multiprojekt`
- )
- VALUES (1,1,'%s',1,1,1,0,0,now(),1,1,1,1)",
- $bezeichnung
- )
- );
- $id = $this->app->DB->GetInsertID();
- $this->app->erp->RunHook('shopexport_create', 1, $id);
- $this->app->Location->execute('index.php?module=onlineshops&action=edit&id='.$id.'#tabs-2');
- }
- if($this->app->erp->ModulVorhanden($auswahlmodul)) {
- $check = $this->createInternShop($auswahlmodul);
- if(!empty($check['error'])) {
- $msg = $this->app->erp->base64_url_encode(''.$check['Error'].'
');
- $this->app->Location->execute('index.php?module=onlineshops&action=list&msg='.$msg);
- }
- $this->app->Location->execute('index.php?module=onlineshops&action=edit&id='.$check['id']);
- }
- }
-
- /** @var Appstore $appstore */
- $appstore = $this->app->erp->LoadModul('appstore');
- $modullist = $this->app->erp->getApps();
- $appstore->AddModuleHtml(
- $modullist, 'shopimporter_', 'index.php?module=onlineshops&action=create&get=',
- [
- 'title' => 'Extern',
- 'link' => 'index.php?module=onlineshops&action=create&auswahl=extern',
- ]
- );
-
- $this->ShopexportMenu();
- $this->app->ModuleScriptCache->IncludeWidgetNew('ClickByClickAssistant');
- $this->app->Tpl->Parse('PAGE', 'shopexport_neu.tpl');
- }
-
- /**
- * @param int $shopId
- *
- * @return int|null
- */
- public function createPriceGroupByShopId($shopId): ?int
- {
- $shopName = $this->app->DB->Select(sprintf('SELECT `bezeichnung` FROM `shopexport` WHERE `id` = %d', $shopId));
- $startCode = preg_replace('/[^A-Z0-9]/','',str_replace(' ', '', strtoupper($shopName)));
- $code = $startCode;
- $startName = $shopName;
- $name = $startName;
- $counter = 0;
- while(
- (int)$this->app->DB->Select(
- sprintf(
- "SELECT COUNT(`id`) FROM `gruppen` WHERE `kennziffer` = '%s' OR `name` = '%s'",
- $this->app->DB->real_escape_string($code), $this->app->DB->real_escape_string($name)
- )
- ) > 0
- ) {
- $counter++;
- $code = $startCode.$counter;
- $name = $startName.' '.$counter;
- }
-
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO `gruppen` (`name`, `art`, `kennziffer`, `aktiv`, `webid`)
- VALUES ('%s', 'preisgruppe', '%s', 1, '') ",
- $this->app->DB->real_escape_string($name), $this->app->DB->real_escape_string($code)
- )
- );
- $groupId = (int)$this->app->DB->GetInsertID();
- if($groupId <= 0) {
- return null;
- }
-
- return $groupId;
- }
-
- /**
- * @param string $code
- *
- * @return int|null
- */
- public function getPriceGroupIdFromCode($code): ?int
- {
- $groupId = $this->app->DB->Select(
- sprintf(
- "SELECT g.id
- FROM `gruppen` AS `g`
- WHERE g.aktiv = 1 AND g.art = 'preisgruppe' AND g.kennziffer = '%s' %s
- ORDER BY g.name
- LIMIT 1",
- $this->app->DB->real_escape_string($code), $this->app->erp->ProjektRechte('g.projekt')
- )
- );
- if(empty($groupId)) {
- return null;
- }
-
- return (int)$groupId;
- }
-
- public function ShopexportList()
- {
- $this->ShopexportMenu();
-
- if($this->app->DB->Select("SELECT id FROM shopexport WHERE aktiv = 1 AND cronjobaktiv LIMIT 1"))
- {
- if(!$this->app->DB->Select("SELECT id FROM prozessstarter WHERE parameter = 'shopimport' AND aktiv = 1 AND art = 'periodisch' LIMIT 1"))
- {
- if($this->app->DB->Select("SELECT id FROM prozessstarter WHERE parameter = 'shopimport' AND aktiv = 1 AND art <> 'periodisch' LIMIT 1"))
- {
- $this->app->Tpl->Add('MESSAGE', '{|Der Prozessstarter "shopimport" ist auf "Uhrzeit" eingestellt. Es werden die Einstellungen "periodisch" mit der Periode 5 empfohlen|}
');
- }
- }
- }
-
- parent::ShopexportList();
- }
-
- /**
- * @param array $importerCapabilities
- * @param array $featureKeys
- * @param array $shopNames
- * @param array $sequence
- *
- * @return array
- */
- protected function getShopFeaturesSorted($importerCapabilities, $featureKeys, $shopNames, $sequence): array
- {
- $data = [];
-
- $sequence = array_intersect($sequence, array_keys($importerCapabilities));
-
- $cShops = (!empty($sequence)?count($sequence):0);
- $cTables = (int)ceil($cShops / 10);
- $cTablesPerRow = (int)ceil($cShops / $cTables);
-
- for($iTable = 0; $iTable < $cTables; $iTable++) {
- $data[$iTable]['tabheader']['tabdescription'] = '';
- }
- foreach($sequence as $shopKey => $shop) {
- $iTable = (int)floor($shopKey / $cTablesPerRow);
- $data[$iTable]['tabheader'][$shop] = $shopNames[$shop];
- }
- foreach($featureKeys as $featureKey) {
- $name = !empty($baseImporterCapabilities[$featureKey]['name'])?$baseImporterCapabilities[$featureKey]['name']:$featureKey;
- for($iTable = 0; $iTable < $cTables; $iTable++) {
- $data[$iTable][$featureKey]['tabdescription'] = html_entity_decode($name);
- }
- foreach($sequence as $shopKey => $shop) {
- $iTable = (int)floor($shopKey / $cTablesPerRow);
- $data[$iTable][$featureKey][$shop] = [
- 'export' => !empty($importerCapabilities[$shop][$featureKey]['createarticle'])?$importerCapabilities[$shop][$featureKey]['createarticle']:null,
- 'import' => !empty($importerCapabilities[$shop][$featureKey]['importarticle'])?$importerCapabilities[$shop][$featureKey]['importarticle']:null];
- }
- }
-
- return $data;
- }
-
- public function ShopexportFeatures()
- {
- $this->ShopexportMenu();
- /** @var ShopimporterBase $obj */
- $obj = new ShopimporterBase();
- $baseImporterCapabilities = $obj->importerCapability();
- $featureKeys = [array_keys($baseImporterCapabilities)];
- $module = $this->getApps();
- $importerCapabilities = [];
- $shopNames = [];
-
- $shopCapabilities = ShopimporterBase::shopCapabilities();
- foreach ($shopCapabilities as $shopModule => $capabilities){
- $importerCapabilities[$shopModule] = $capabilities;
- $featureKeys[] = array_keys($capabilities);
- $shopNames[$shopModule] = ucfirst(str_replace('shopimporter_','',$shopModule));
- }
-
- $featureKeys = array_merge(...$featureKeys);
- $featureKeys = array_unique($featureKeys);
-
- //fuer marketing auftrag immer importierbar zeigen
- foreach ($importerCapabilities as &$item) {
- if ($item['auftrag']['importarticle'] === 4) {
- $item['auftrag']['importarticle'] = 3;
- }
- }
- unset($item);
-
- $sequenceShop = [
- 'shopimporter_shopware',
- 'shopimporter_shopware6',
- 'shopimporter_shopify',
- 'shopimporter_magento',
- 'shopimporter_magento2',
- 'shopimporter_woocommerce',
- 'shopimporter_gambio',
- 'shopimporter_oxid',
- 'shopimporter_presta',
- 'shopimporter_getcore',
- 'shopimporter_epages',
- 'shopimporter_spryker',
- 'shopimporter_hhg',
- 'shopimporter_modified',
- ];
- $sequenceMarket = [
- 'shopimporter_amazon',
- 'shopimporter_ebay',
- 'shopimporter_real',
- 'shopimporter_hood',
- 'shopimporter_rakuten',
- 'shopimporter_manomano',
- 'shopimporter_etsy',
- 'shopimporter_cdiscount',
- ];
- $sequenceMisc = [
- 'shopimporter_tillhub',
- 'shopimporter_billbee',
- ];
-
- $additionalMisc = array_diff(array_keys($importerCapabilities), $sequenceMarket, $sequenceShop, $sequenceMisc);
- $sequenceMisc = array_merge($sequenceMisc, $additionalMisc);
- $features = [];
- $features['shop'] = $this->getShopFeaturesSorted(
- $importerCapabilities,
- $featureKeys,
- $shopNames,
- $sequenceShop
- );
- $features['market'] = $this->getShopFeaturesSorted(
- $importerCapabilities,
- $featureKeys,
- $shopNames,
- $sequenceMarket
- );
- $features['misc'] = $this->getShopFeaturesSorted(
- $importerCapabilities,
- $featureKeys,
- $shopNames,
- $sequenceMisc
- );
-
- /** @var \Xentral\Components\Template\Template $tmp */
- $tmp = $this->app->Container->get('Template');
- $tmp->setDefaultNamespace('Modules/Onlineshop');
- $tmp->assign('features', $features);
- $table = $tmp->fetch('feature.tpl');
- //$html
- $this->app->Tpl->Add('SHOPTABS', $table);
- //$this->app->Tpl->Add('TAB1',''.print_r($featureKeys,true).' ');
-
- $this->app->Tpl->Parse('PAGE','onlineshops_features.tpl');
- }
-
- public function ShopexportMenu()
- {
- $id = $this->app->Secure->GetGET('id');
- $this->app->erp->MenuEintrag('index.php?module=onlineshops&action=create','Neu');
- $action = $this->app->Secure->GetGET('action');
- if(($action==='list' || $action === 'features') && $id <= 0) {
- $this->app->erp->Headlines('Shops und Marktplätze');
- $this->app->erp->MenuEintrag('index.php?module=onlineshops&action=list','Übersicht');
- $this->app->erp->MenuEintrag('index.php?module=onlineshops&action=features','Shopfunktionen');
- }
-
- if($id > 0) {
- $name = $this->app->DB->Select("SELECT bezeichnung FROM shopexport WHERE id='$id' LIMIT 1");
- $this->app->erp->Headlines('', $name);
- //$this->app->Tpl->Add('KURZUEBERSCHRIFT2',$name);
- $this->app->erp->MenuEintrag('index.php?module=onlineshops&action=edit&id='.$id,'Details');
- //$this->app->erp->MenuEintrag("index.php?module=shopexport&action=export&id=$id","Export");
- $this->app->erp->MenuEintrag('index.php?module=shopexport&action=artikeluebertragung&id='.$id,'Artikel Übertragung');
- if($this->app->DB->Select("SELECT modulename FROM shopexport WHERE id = '$id'") === 'shopimporter_shopware'){
- //Soll nur in Shopware angezeigt werden, da nur in Shopware unterstüzt
- $this->app->erp->MenuEintrag('index.php?module=shopexport&action=adressuebertragung&id='.$id,'Adressen Übertragung');
- }
- }
-
-
- $typ = $this->app->DB->Select("SELECT typ FROM shopexport WHERE id='$id' LIMIT 1");
- if($typ==='wawision') {
- $this->app->erp->MenuEintrag("index.php?module=shopexport&action=navigationtab&id=$id","Navigation");
- $this->app->erp->MenuEintrag("index.php?module=shopexport&action=artikelgruppen&id=$id","Artikelgruppen");
- $this->app->erp->MenuEintrag("index.php?module=shopexport&action=live&id=$id","Live-Status");
- $this->app->erp->MenuEintrag("index.php?module=inhalt&action=listshop&id=$id","Inhalte / E-Mailvorlagen");
- }
-
- if($this->app->Secure->GetGET('action') !== 'list'){
- $this->app->erp->MenuEintrag('index.php?module=onlineshops&action=list', 'Zurück zur Übersicht');
- }
- $this->app->erp->RunMenuHook('onlineshops');
- }
-
- public function ShopexportDelete()
- {
- $id = $this->app->Secure->GetGET('id');
- if(is_numeric($id)) {
- $this->app->erp->RunHook('shopexportdelete', 1, $id);
- $this->app->DB->Delete("DELETE FROM shopexport WHERE id='$id' LIMIT 1");
- }
- $this->app->Location->execute('index.php?module=onlineshops&action=list');
- }
-
- /**
- * @return JsonResponse
- */
- public function HandleUncheckTreeNodeAjaxAction()
- {
- $shopId = (int)$this->app->Secure->GetGET('shopId');
- $id = (int)$this->app->Secure->GetGET('id');
- $this->setJsonSettings($shopId, 'category_root_id', 0);
- $data = ['id' => $id,];
-
- return new JsonResponse($data);
- }
-
- /**
- * @return JsonResponse
- */
- public function HandleCheckTreeNodeAjaxAction()
- {
- $shopId = (int)$this->app->Secure->GetGET('shopId');
- $id = (int)$this->app->Secure->GetGET('id');
- $this->setJsonSettings($shopId, 'category_root_id', $id);
- $data = ['id' => $id,];
-
- return new JsonResponse($data);
- }
- /**
- * @return JsonResponse
- */
- public function HandleLoadDefaultTemplateAjaxAction()
- {
- $template = '';
- $shopId = (int)$this->app->Secure->GetPOST('shopid');
- $isJson = $this->app->Secure->GetPOST('format') === 'json';
- $shopModule = $this->app->DB->Select(sprintf('SELECT `modulename` FROM `shopexport` WHERE `id` = %d', $shopId));
- $file = dirname(dirname(__DIR__)).'/classes/Modules/Onlineshop/resources/smarty_templates/'.$shopModule.'_'
- .($isJson?'json':'xml').'.tpl';
- if(is_file($file)) {
- $template = file_get_contents($file);
- }
-
- return new JsonResponse(
- [
- 'success' => true,
- 'template' => $template
- ]
- );
- }
-
- public function ShopexportEdit()
- {
- $cmd = $this->app->Secure->GetGET('cmd');
- if($cmd === 'loadDefaultTemplate') {
- return $this->HandleLoadDefaultTemplateAjaxAction();
- }
- if($cmd === 'loadTree') {
- return $this->HandleLoadTreeAjaxAction();
- }
- if($cmd === 'uncheckTreeNode') {
- return $this->HandleUncheckTreeNodeAjaxAction();
- }
- if($cmd === 'checkTreeNode') {
- return $this->HandleCheckTreeNodeAjaxAction();
- }
- if($cmd === 'loadCart') {
- return $this->HandleLoadCartAjaxAction();
- }
- if($cmd === 'runincomming') {
- return $this->HandleRunSmartyIncommingAjaxAction();
- }
- if($cmd === 'savesmartyincomming') {
- return $this->HandleSaveSmartyIncommingAjaxAction();
- }
- if($cmd === 'getnotimortedorders'){
- $id = (int)$this->app->Secure->GetPOST('id');
- $notImortedOrders = $this->app->DB->Select(sprintf('SELECT COUNT(id) FROM shopimport_auftraege WHERE shopid = %d AND imported = 0 AND trash = 0', $id));
- echo json_encode(['count'=>$notImortedOrders]);
- $this->app->erp->ExitWawi();
- }
-
- $id = (int)$this->app->Secure->GetGET('id');
- if(!empty($id) && $this->app->Secure->GetPOST('speichern') === 'Speichern'){
- $fieldsToSave = $_POST;
- unset($fieldsToSave['nurfehler'],$fieldsToSave['auftraege'],$fieldsToSave['aenderungen'],$fieldsToSave['shopexport_log_length']);
-
- $moduleName = $this->app->DB->Select("SELECT modulename FROM shopexport WHERE id = '$id' LIMIT 1");
- try {
- $obj = $this->app->erp->LoadModul($moduleName);
- if(method_exists($obj,'EinstellungenStruktur')){
- $struktur = $obj->EinstellungenStruktur($id);
- foreach ($struktur['felder'] as $fieldname => $fieldData){
- if($fieldData['typ'] === 'password'){
- if($fieldsToSave[$fieldname] === '***************') {
- $oldData = json_decode($this->app->DB->Select('SELECT einstellungen_json FROM shopexport WHERE id=' . $id), true);
- $fieldsToSave[$fieldname] = $oldData['felder'][$fieldname];
- }
- $fieldsToSave[$fieldname] = substr(md5($fieldsToSave[$fieldname]),0,15);
- }
- }
- }
- }catch(Exception $ex){
- $this->app->erp->LogFile('Fehlerhafter Aufruf in Modul: '.$moduleName);
- }
-
- $username = $this->app->DB->real_escape_string($this->app->User->GetUsername());
-
- $query = sprintf('SELECT id FROM shopexport_change_log WHERE shop_id=%d',$id);
- $changeLogEntryExists = $this->app->DB->Select($query);
-
- if($changeLogEntryExists){
- $query = sprintf('SELECT diff FROM shopexport_change_log WHERE shop_id=%d ORDER BY id ASC',$id);
- $existingChangeLogEntries = $this->app->DB->SelectArr($query);
- $fieldsToCompareTo = [];
- foreach ($existingChangeLogEntries as $existingChangeLogEntry){
- $existingFields = json_decode($existingChangeLogEntry['diff'],true);
- $fieldsToCompareTo = array_merge($fieldsToCompareTo,$existingFields);
- }
-
- $differenceInValues = [];
- foreach ($fieldsToSave as $fieldToSaveName => $fieldToSaveValue){
- if($fieldsToSave[$fieldToSaveName] !== $fieldsToCompareTo[$fieldToSaveName]){
- $differenceInValues[$fieldToSaveName] = $fieldsToSave[$fieldToSaveName];
- }
- unset($fieldsToCompareTo[$fieldToSaveName]);
- }
- foreach ($fieldsToCompareTo as $fieldToCompareToName => $fieldToCompareToValue){
- if(!empty($fieldToCompareToValue)){
- $differenceInValues[$fieldToCompareToName] = '';
- }
- }
-
- $message = 'Geänderte Felder: '.(!empty($differenceInValues)?count($differenceInValues):0);
- if(empty($differenceInValues)){
- $message = 'Keine Änderung';
- }
- $plaindiff = implode(', ',array_keys($differenceInValues));
- if(strlen($plaindiff)>100){
- $plaindiff = substr($plaindiff,0,97).'...';
- }
- $query = sprintf("INSERT INTO shopexport_change_log (shop_id,diff,message,username,plaindiff) VALUES (%d,'%s','%s','%s','%s')",
- $id, $this->app->DB->real_escape_string(json_encode($differenceInValues)),$message,$username,$plaindiff);
- $this->app->DB->Insert($query);
- }else{
- $query = sprintf("INSERT INTO shopexport_change_log (shop_id,diff,message,username,plaindiff) VALUES (%d,'%s','%s','%s','')",
- $id, $this->app->DB->real_escape_string(json_encode($fieldsToSave)),'Initiale Speicherung',$username);
- $this->app->DB->Insert($query);
- }
- }
-
-
- if($id && $cmd === 'archivspeichern')
- {
- //Prüfen ob Cronjob existiert, wenn nicht inaktiv anlegen
- $cronjobid = $this->app->DB->Select("SELECT id FROM prozessstarter WHERE parameter = 'shopimport_auftragarchiv' LIMIT 1");
- if(!$cronjobid){
- $this->app->DB->Insert("INSERT INTO prozessstarter (bezeichnung, bedingung, art, startzeit, letzteausfuerhung, periode, typ, parameter, aktiv) VALUES ('Shopimport Auftragsarchiv','','periodisch', NOW(), '0000-00-00 00:00:00', 10080,'cronjob', 'shopimport_auftragarchiv', 0)");
- $cronjobid = $this->app->DB->GetInsertID();
- }else {
- $this->app->DB->Update(
- sprintf(
- 'UPDATE prozessstarter
- SET letzteausfuerhung = DATE_SUB(NOW(), INTERVAL 10080 MINUTE)
- WHERE id = %d AND mutex = 0 AND aktiv = 1 AND letzteausfuerhung > DATE_SUB(NOW(), INTERVAL 10080 MINUTE)',
- $cronjobid
- )
- );
- }
- $this->app->DB->Update("UPDATE prozessstarter SET aktiv = 1 WHERE id = '$cronjobid'");
-
- $check = $this->app->DB->Select("SELECT id FROM shopexport_archiv WHERE shop = '$id' LIMIT 1");
- if(!$check)
- {
- $this->app->DB->Insert("INSERT INTO shopexport_archiv (shop) VALUES ('$id')");
- $check = $this->app->DB->GetInsertID();
- }
- if($check)
- {
- $this->app->DB->Update("UPDATE shopexport_archiv SET status = 'aktiv' WHERE id = '$check' LIMIT 1");
- $typ = $this->app->Secure->GetPOST('typ');
- $von = $this->app->Secure->GetPOST('von');
- $bis = $this->app->Secure->GetPOST('bis');
- $zeitvon = $this->app->Secure->GetPOST('zeitvon');
- $zeitbis = $this->app->Secure->GetPOST('zeitbis');
- $abschliessen = (int)$this->app->Secure->GetPOST('auftrag_abschliessen');
- $rechnung_erzeugen = (int)$this->app->Secure->GetPOST('rechnung_erzeugen');
- $rechnung_bezahlt = (int)$this->app->Secure->GetPOST('rechnung_bezahlt');
- $stornierteabholen = (int)$this->app->Secure->GetPOST('stornierte_abholen');
- $donotimport = (int)$this->app->Secure->GetPOST('donotimport');
- $datumvon = '';
- $datumbis = '';
- $nummervon = '';
- $nummerbis = '';
- if($typ === 'zeitraum')
- {
- if($von != '')
- {
- $datumvon = $this->app->String->Convert($von, '%1.%2.%3', '%3-%2-%1').' '.$zeitvon;
- }
- if($bis != '')
- {
- $datumbis = $this->app->String->Convert($bis, '%1.%2.%3', '%3-%2-%1').' '.$zeitbis;
- }
- }else{
- $nummervon = $von;
- $nummerbis = $bis;
- }
- if(($nummervon !='' && $nummerbis !='') || ($datumvon !='' && $datumbis !='')){
- $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
- $this->app->DB->Update("UPDATE shopexport_archiv
- SET anzahl=0, erfolgreich=0,`type` = '$typ',bearbeiter = '$bearbeiter',abschliessen = '$abschliessen',
- rechnung_erzeugen = '$rechnung_erzeugen',rechnung_bezahlt = '$rechnung_bezahlt',
- nummervon = '$nummervon', nummerbis = '$nummerbis',datumvon = '$datumvon',
- datumbis = '$datumbis', stornierteabholen='$stornierteabholen' ,
- donotimport = '$donotimport', letzteabgeholtenummer = 0
- WHERE id = '$check' LIMIT 1");
- $this->app->DB->LogIfError();
- echo json_encode(array('status'=>1));
- }
- else {
- echo json_encode(array('status'=>0));
- }
- }
- $this->app->ExitXentral();
- }
- if($cmd === 'changeaktiv') {
- $data = $this->app->DB->SelectRow("SELECT * FROM shopexport WHERE id = '$id' LIMIT 1");
- if($data) {
- if($data['aktiv']) {
- $this->app->DB->Update("UPDATE shopexport SET aktiv = 0 WHERE id = '$id' LIMIT 1");
- }
- else {
- if($data['shoptyp'] === 'custom' && $data['modulename'] !== '')
- {
- $data['modulename'] = trim($data['modulename'],'.');
- $file = dirname(__DIR__) .'/plugins/external/shopimporter/'.$data['modulename'];
- if(is_file($file)) {
- include_once $file;
- }
- else {
- echo json_encode(array('aktiv'=> $data['aktiv']));
- $this->app->ExitXentral();
- }
- }
- else {
- $this->app->DB->Update("UPDATE shopexport SET aktiv = 1 WHERE id = '$id' LIMIT 1");
- }
- }
- echo json_encode(array('aktiv'=> 1 - $data['aktiv']));
- }
- $this->app->ExitXentral();
- }
- if($cmd === 'testcustomfile') {
- $status = 0;
- $fehler = '';
- if($data = $this->app->DB->SelectRow("SELECT * FROM shopexport WHERE id = '$id' AND shoptyp = 'custom' AND modulename <> '' LIMIT 1")) {
- $data['modulename'] = trim($data['modulename'],'.');
- $file = dirname(__DIR__) .'/plugins/external/shopimporter/'.$data['modulename'];
-
- if(is_file($file)) {
- include_once $file;
- $status = 1;
- }
- else {
- $fehler = 'Datei nicht gefunden';
- }
- }
- echo json_encode(array('status'=>$status,'fehler'=>$fehler));
- $this->app->ExitXentral();
- }
- if($this->app->Secure->GetPOST('savefile')) {
- if($data = $this->app->DB->SelectRow("SELECT * FROM shopexport WHERE id = '$id' AND shoptyp = 'custom' AND modulename <> '' LIMIT 1")) {
- $file = dirname(__DIR__) .'/plugins/external/shopimporter/'.$data['modulename'];
-
- if(is_file($file)) {
- $text = htmlspecialchars_decode($_POST['customdatei']);
- file_put_contents($file, $text);
- }
- }
- }
-
- if($this->app->Secure->GetPOST('pruefen')) {
-
- $className = 'Remote';
- $methodName = 'RemoteConnection';
- $r = new ReflectionMethod($className, $methodName);
- $params = $r->getParameters();
- $anzargs = (!empty($params)?count($params):0);
- try {
- if($anzargs > 1){
- $pageContents = $this->app->remote->RemoteConnection($id, true);
- }
- else {
- $pageContents = $this->app->remote->RemoteConnection($id);
- }
- }
- catch(Exception $e) {
- $pageContents = $e->getMessage();
- }
- if(strpos($pageContents, 'success') === 0){
- if($anzargs > 1) {
- $pageContents2 = $this->app->remote->RemoteConnection($id, 'info');
- }
-
- if($anzargs > 1 && is_array($pageContents2)) {
- $json = $this->app->DB->Select("SELECT json FROM shopexport WHERE id = '$id' LIMIT 1");
- if($json) {
- $json = array_merge(json_decode($json, true), $pageContents2);
- }
- else {
- $json = $pageContents2;
- }
- $this->app->DB->Update("UPDATE shopexport set json = '".$this->app->DB->real_escape_string(json_encode($json))."' WHERE id = '$id' LIMIT 1");
- unset($json);
- $this->app->Tpl->Set('MESSAGE','');
- if(isset($pageContents2['subshops'])) {
- $this->app->Tpl->Add('MESSAGE','Subshops:
-
Id Name Aktiv
- ');
- foreach($pageContents2['subshops'] as $subshop) {
- $this->app->Tpl->Add('MESSAGE',''.$subshop['id'].' '.$subshop['name']." ".($subshop['aktiv']?'ja':'nein')." ");
- }
- $this->app->Tpl->Add('MESSAGE','
');
- }
- else {
- $this->app->Tpl->Add('MESSAGE','Verbindung: success');
- }
- $this->app->Tpl->Add('MESSAGE','
');
- }
- else {
- $this->app->Tpl->Set('MESSAGE',"Verbindung: $pageContents
");
- }
- }
- else {
- $this->app->Tpl->Set('MESSAGE',"Verbindungsproblem: Eventuell falsche Schlüssel! ($pageContents)
");
- }
-
- }
-
- if($this->app->Secure->GetPOST('auftragabholen')) {
- /** @var Shopimport $obj */
- $obj = $this->app->erp->LoadModul('shopimport');
- if(!empty($obj)) {
- @ignore_user_abort(true);
- $anz = $obj->ShopimportImport($id, 0, true);
- }
- if($anz) {
- $this->app->Location->execute('index.php?module=shopimport&action=import');
- }
- if($obj && !empty($obj->error)) {
- $this->app->Tpl->Add('MESSAGE', $obj->error);
- }
- else{
- $this->app->Tpl->Add('MESSAGE', 'Aktuell sind keine Aufträge in den Online-Shops vorhanden!
');
- }
- }
-
- $this->app->YUI->TableSearch('LOGTABELLE', 'shopexport_log', 'show','','',basename(__FILE__), __CLASS__);
-
- $this->app->YUI->TableSearch('TAB3','shopexport_zahlweisen');
- $this->app->YUI->TableSearch('TAB4','shopexport_versandarten');
- $this->app->YUI->TableSearch('TAB5','shopexport_freifelder');
- $this->app->YUI->TableSearch('TAB6','shopexport_subshop');
- $this->app->YUI->TableSearch('TAB7', 'shopexport_sprachen', 'show','','',basename(__FILE__), __CLASS__);
- $this->app->YUI->TableSearch('TAB8', 'shopexport_kundengruppen', 'show','','',basename(__FILE__), __CLASS__);
- $this->app->YUI->AutoComplete('b_projekt','projektname',1);
- $this->app->YUI->AutoComplete('sprachenprojekt', 'projektname' , 1);
- $this->app->YUI->AutoComplete('kundengruppeprojekt', 'projektname' , 1);
- $this->app->YUI->AutoComplete('k_projekt', 'projektname' , 1);
- $this->app->YUI->AutoComplete('d_projekt', 'projektname' , 1);
-
- $this->app->Tpl->Add('FREIFELDEROPTIONEN',' ');
- for($i = 1; $i <= 40; $i++) {
- $freifeldname = $this->app->erp->Firmendaten('freifeld'.$i);
- if(!$freifeldname) {
- $freifeldname = 'Freifeld '.$i;
- }
- $freifeldname = explode('|',$freifeldname);
- $this->app->Tpl->Add('FREIFELDEROPTIONEN',''.$freifeldname[0].' ');
- }
-
-/*
- $this->CheckColumn("id","int(11)","shopexport_log","NOT NULL AUTO_INCREMENT");
- $this->CheckColumn("shopid","int(11)","shopexport_log","DEFAULT '0' NOT NULL");
- $this->CheckColumn("typ", "varchar(64)", "shopexport_log","DEFAULT '' NOT NULL");
- $this->CheckColumn("parameter1", "varchar(64)", "shopexport_log","DEFAULT '' NOT NULL");
- $this->CheckColumn("parameter2", "varchar(64)", "shopexport_log","DEFAULT '' NOT NULL");
- $this->CheckColumn("bearbeiter", "varchar(64)", "shopexport_log","DEFAULT '' NOT NULL");
- $this->CheckColumn("zeitstempel","timestamp","shopexport_log","DEFAULT CURRENT_TIMESTAMP");
-*/
- $sprachenopt = $this->app->erp->GetSprachenSelect();
- $sprachensel = '';
- if($sprachenopt) {
- foreach($sprachenopt as $k => $v) {
- $sprachensel .= '{|'.$v.'|} ';
- }
- }
-
- $projektId = $this->app->DB->Select("SELECT projekt FROM shopexport WHERE id = '$id' LIMIT 1");
- $selversandarten = ' ';
- $selzahlungsweisen = ' ';
- $zahlungsweisen = $this->app->erp->GetZahlungsweise(null,null,$projektId);
- if(!empty($zahlungsweisen)){
- foreach ($zahlungsweisen as $k => $v) {
- $selzahlungsweisen .= '' . $v . ' ';
- }
- }
-
- $versandartenarr = $this->app->DB->SelectArr("SELECT type,bezeichnung FROM versandarten WHERE aktiv = 1 AND (projekt=0 OR projekt='' OR projekt='$projektId')ORDER BY bezeichnung");
- if(!empty($versandartenarr)) {
- $versandarten = [];
- foreach($versandartenarr as $v) {
- $versandarten[$v['type']] = $v['bezeichnung'];
- }
-
- foreach ($versandarten as $k => $v) {
- $selversandarten .= '' . $v . ' ';
- }
- }
-
- $this->app->Tpl->Set('FORMULAR','');
-
- $this->app->Tpl->Add('FORMULAR','');
-
-
- $alleKundengruppenAusXentral = $this->app->DB->SelectArr("SELECT id,name FROM gruppen WHERE (art='gruppe' OR art='preisgruppe') AND (projekt='' OR projekt=0 OR projekt='$projektId') AND aktiv='1'");
- $kundengruppenSelect ='';
- foreach ($alleKundengruppenAusXentral as $kundengruppe) {
- $kundengruppenSelect .= ''.$kundengruppe['name'].' ';
- }
- $this->app->Tpl->Add('FORMULAR','');
-
- $this->app->Tpl->Add('FORMULAR','');
-
-
- $this->app->Tpl->Add('FORMULAR','');
- $this->app->Tpl->Add('FORMULAR','');
-
- $this->app->Tpl->Set('NEUTAB3','
-
- {|Anlegen|}
-
- ');
-
-
- $this->app->Tpl->Set('NEUTAB4','
-
- {|Anlegen|}
-
- ');
-
- $this->app->Tpl->Set('NEUTAB5','
-
- {|Anlegen|}
-
- ');
-
- $this->app->Tpl->Set('NEUTAB6','
-
- {|Anlegen|}
-
- ');
-
- $this->app->Tpl->Set('NEUTAB7','
-
- {|Anlegen|}
-
- ');
-
- $this->app->Tpl->Set('NEUTAB8','
-
- {|Anlegen|}
-
- ');
-
- if($this->app->DB->Select("SELECT id FROM shopexport WHERE aktiv = 1 AND cronjobaktiv AND id = '$id' LIMIT 1"))
- {
- if(!$this->app->DB->Select("SELECT id FROM prozessstarter WHERE parameter = 'shopimport' AND aktiv = 1 AND art = 'periodisch' LIMIT 1"))
- {
- if($this->app->DB->Select("SELECT id FROM prozessstarter WHERE parameter = 'shopimport' AND aktiv = 1 AND art <> 'periodisch' LIMIT 1"))
- {
- $this->app->Tpl->Add('MESSAGE', '{|Der Prozessstarter "shopimport" ist auf "Uhrzeit" eingestellt. Es werden die Einstellungen "periodisch" mit der Periode 5 empfohlen|}
');
- }
- }
- }
- $this->ShopexportMenu();
- if($id > 0) {
- $this->showBetaMessage($id);
- }
- parent::ShopexportEdit();
- }
-
- /**
- * @param int $shopId
- */
- public function showBetaMessage($shopId)
- {
- if(empty($shopId)) {
- return;
- }
- $module = $this->app->DB->SelectRow(
- sprintf(
- "SELECT `modulename`, `bezeichnung`
- FROM `shopexport`
- WHERE `id` = %d AND `shoptyp` = 'intern'
- LIMIT 1",
- $shopId
- )
- );
- if(empty($module)) {
- return;
- }
- /** @var Appstore $appstore */
- $appstore = $this->app->erp->LoadModul('appstore');
- if($appstore === null || !method_exists($appstore, 'isBeta')) {
- return;
- }
- if($appstore->isBeta($module['modulename'])) {
- $this->app->Tpl->Add(
- 'MESSAGE',
- 'Dieses Modul ist noch im Beta Stadium.
'
- );
- $appstore->addBetaToHeadline();
- }
- }
-
- /**
- * @param $json
- *
- * @return mixed
- */
- public function SmartyJsonDecode($json)
- {
- return is_string($json)?json_decode($json):$json;
- }
-
- /**
- * @param mixed $data
- *
- * @return false|string
- */
- public function SmartyJsonEncode($data) {
- return json_encode($data);
- }
-
- /**
- * @param $var
- *
- * @return string
- */
- public function SmartyPrintR($var)
- {
- return print_r($var, true);
- }
-
- /**
- * @param array $array
- *
- * @return string
- */
- public function SmartyArrayToList($array)
- {
- if(is_string($array)) {
- return $array;
- }
- if(!is_array($array)) {
- $array = json_decode(json_encode($array), true);
- }
- if(is_string($array)) {
- return $array;
- }
- if(!is_array($array)) {
- return '';
- }
-
- foreach($array as $key => $val) {
- if(is_array($val)) {
- $array[$key] = json_encode($val);
- }
- }
- return implode(' ', $array);
- }
-
- /**
- * @param array|SimpleXMLElement $attributes
- *
- * @return string
- */
- protected function attributeKey($attributes) {
- $ret = '';
- if(empty($attributes)) {
- return $ret;
- }
- foreach($attributes as $key => $attribute) {
- if((is_array($attribute) || is_object($attribute)) && (!empty($attribute)?count($attribute):0) === 1) {
- $ret .= ' '.$key.'="'.reset($attribute).'"';
- continue;
- }
- $ret .= ' '.$key.'="'.$attribute.'"';
- }
- return $ret;
- }
-
- /**
- * Kovertiert einen XML-String in ein Array
- *
- * @param string $xml
- * @param bool $wrap
- *
- * @return array
- *
- * @throws \RuntimeException
- */
- public function convertXmlStringToArray($xml)
- {
- $namespaces = [];
- $simplexml = simplexml_load_string($xml, null, LIBXML_NOCDATA);
- if(is_object($simplexml)) {
- $namespaces = $simplexml->getNamespaces();
- }
- if ($simplexml === false) {
- return [];
- }
-
- return $this->convertSimpleXmlToArray($simplexml, $namespaces);
- }
-
- /**
- * @param SimpleXMLElement $object
- * @param array|null $namespaces
- * @param bool $removeItemKey
- *
- * @return array|string
- */
- public function convertSimpleXmlToArray($object, $namespaces = null, $removeItemKey = true)
- {
- $array = [];
- $isObject = is_object($object);
- $cobject = $isObject?count($object):0;
- if($isObject && $cobject === 0) {
- $name = $object->getName();
- $attributes = $object->attributes();
- $attributeKey = $this->attributeKey($attributes);
- $array[$name.$attributeKey] = (string)$object;
-
- return $array;
- }
- $arr = (array)$object;
- if(isset($arr['@attributes'])) {
- unset($arr['@attributes']);
- }
- $keys = array_keys($arr);
- $count = (!empty($keys)?count($keys):0);
- if($isObject && !empty($arr)) {
- foreach($object as $key => $value) {
- if($key === '@attributes') {
- continue;
- }
- if($key === 0 && $count === 1) {
- return $value;
- }
- $valueArr = (array)$value;
- if(isset($valueArr['@attributes'])) {
- unset($valueArr['@attributes']);
- }
- if(is_object($value) && !empty($valueArr)) {
- $cValue = (!empty($value)?count($value):0);
- $cValueArr = (!empty($valueArr)?count($valueArr):0);
- $attributes = $value->attributes();
- $attributeKey = $this->attributeKey($attributes);
- if(isset($array[$key.$attributeKey])) {
- if(!isset($array[$key.$attributeKey][0])) {
- $array[$key.$attributeKey] = [$array[$key.$attributeKey]];
- }
- if($cValue === 0 || ($cValue <= 1 && $cValueArr === 1)) {
- $valueReset = reset($valueArr);
- if(is_array($valueArr)) {
- $keys = array_keys($valueArr);
- if(reset($keys) === 0) {
- $array[$key.$attributeKey] = $valueReset;
- continue;
- }
- }
- /*
- if(!is_object($valueReset) && !is_array($valueReset)) {
- $array[$key.$attributeKey][] = $valueReset;
- continue;
- }*/
- }
-
- $array[$key.$attributeKey][] = $this->convertSimpleXmlToArray($value, $namespaces, $removeItemKey);
- continue;
- }
- if($cValue === 0 || ($cValue <= 1 && $cValueArr === 1)) {
- $valueReset = reset($valueArr);
- if(is_array($valueArr)) {
- $keys = array_keys($valueArr);
- if(reset($keys) === 0) {
- $array[$key.$attributeKey] = $valueReset;
- continue;
- }
- }
- /*
- if (!is_object($valueReset) && !is_array($valueReset)) {
- $array[$key.$attributeKey] = $valueReset;
- continue;
- }*/
- }
-
- if($removeItemKey && $attributeKey === '' && strpos($key,'item') === 0 && is_numeric(substr($key,4))) {
- $array[(int)substr($key,4)] = $this->convertSimpleXmlToArray($value, $namespaces, $removeItemKey);
- }
- else{
- $array[$key . $attributeKey] = $this->convertSimpleXmlToArray($value, $namespaces, $removeItemKey);
- }
- }
- else {
- $array[$key] = (string)$value;
- }
- }
- return $array;
- }
-
- return (string)$object;
- }
-
-
- /**
- * @param array $cartArr
- *
- * @return array|null
- */
- public function getArrayFromCart($cartArr)
- {
- if(empty($cartArr)) {
- return null;
- }
- $jsonEncoded = !empty($cartArr['jsonencoded']);
- $cart = base64_decode($cartArr['warenkorb']);
- if($jsonEncoded){
- $cart = json_decode($cart, true);
- }else {
- $cart = unserialize($cart);
- }
- if(!is_array($cart)) {
- return [];
- }
-
- return $cart;
- }
-
- /**
- * @param int $categoryId
- * @param array $categories
- *
- * @return bool
- */
- public function isIdInCategories($categoryId, $categories)
- {
- if(empty($categories)) {
- return false;
- }
- foreach($categories as $category) {
- if((int)$category['id'] === (int)$categoryId) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * @param int $shopId
- * @param string $name
- *
- * @return mixed|null
- */
- public function getJsonSettings($shopId, $name)
- {
- $json = $this->app->DB->Select(sprintf('SELECT `einstellungen_json` FROM `shopexport` WHERE `id` = %d', $shopId));
- if(empty($json)) {
- return null;
- }
-
- $json = json_decode($json, true);
- if(empty($json['felder'])) {
- return null;
- }
- if(!isset($json['felder'][$name])) {
- return null;
- }
- return $json['felder'][$name];
- }
-
- /**
- * @param int $shopId
- * @param string $name
- * @param mixed $value
- */
- public function setJsonSettings($shopId, $name, $value)
- {
- $json = $this->app->DB->Select(sprintf('SELECT `einstellungen_json` FROM `shopexport` WHERE `id` = %d', $shopId));
- if(!empty($json)){
- $json = json_decode($json, true);
- }
- if(!is_array($json)) {
- $json = ['felder' => []];
- }
- if(!isset($json['felder']) || !is_array($json['felder'])) {
- $json['felder'] = [];
- }
- $json['felder'][$name] = $value;
- $json = json_encode($json);
- $this->app->DB->Update(
- sprintf(
- "UPDATE `shopexport` SET `einstellungen_json` = '%s' WHERE `id` = %d",
- $this->app->DB->real_escape_string($json), $shopId
- )
- );
- }
-
- /**
- * @return JsonResponse
- */
- public function HandleLoadTreeAjaxAction()
- {
- $shopId = (int)$this->app->Secure->GetGET('id');
- $checkedId = (int)$this->getJsonSettings($shopId, 'category_root_id');
- /** @var Artikelbaum $treeObject */
- $treeObject = $this->app->loadModule('artikelbaum');
- $categories = [['id'=> 0, 'bezeichnung'=>'root', 'parent' => 0,],];
- $treeObject->getKategorien($categories, 0);
- if((!empty($categories)?count($categories):0) > 1) {
- if((string)$categories[(!empty($categories)?count($categories):0) -1]['id'] === '0'){
- unset($categories[(!empty($categories)?count($categories):0) - 1]);
- }
- }
- if($checkedId > 0 && !$this->isIdInCategories($checkedId, $categories)) {
- $checkedId = 0;
- }
-
- $data = $treeObject->getTreeData(
- $categories,
- [
- 'checkbox' => true,
- 'checked_ids' => [
- $checkedId
- ],
- ]
- );
-
- return new JsonResponse($data);
- }
-
- /**
- * @return JsonResponse
- */
- public function HandleLoadCartAjaxAction()
- {
- $shopId = (int)$this->app->Secure->GetPOST('shopid');
- $extid = $this->app->Secure->GetPOST('extid');
- $useJson = $this->app->Secure->GetPOST('format') === 'json';
- $merge = !(bool)(int)$this->app->Secure->GetPOST('replacecart');
- $content = empty($this->app->Secure->POST['content'])?'':trim($this->app->Secure->POST['content']);
-
- $cart = $this->app->DB->SelectRow(
- sprintf(
- "SELECT `jsonencoded`, `warenkorb`
- FROM `shopimport_auftraege`
- WHERE `shopid` = %d AND `extid` = '%s'
- ORDER BY `id` DESC
- LIMIT 1",
- $shopId, $extid
- )
- );
- if(empty($cart)) {
- return new JsonResponse(['success' => false, 'error' => 'Warenkorb nicht gefunden']);
- }
-
- $cart = $this->getArrayFromCart($cart);
- $cart2 = $cart;
- if($useJson) {
- $xml_data = null;
- }
- else {
- $xml_data = $this->convertArrayToSimpleXml($cart);
- $xml_data = $this->formatXmlForOutput($xml_data->asXML());
- }
-
- if($content === '') {
- return new JsonResponse(
- [
- 'success' => true,
- 'input' => !$useJson?$xml_data:json_encode($cart),
- 'object' => ''.print_r($cart,true).' ',
- 'preview' => '',
- ]
- );
- }
-
- try {
- $cart2 = $this->addCartInfo($cart2, $shopId, $useJson, $merge, $content);
- }
- catch(Exception $e) {
- return new JsonResponse(
- [
- 'success' => true,
- 'input' => !$useJson?$xml_data:json_encode($cart),
- 'object' => ''.print_r($cart,true).' ',
- 'preview' => print_r($e->getMessage(),true),
- ]
- );
- }
- $xmlDataPreview = '';
- if(!$useJson) {
- try {
- $xmlDataPreview = $this->convertArrayToSimpleXml($cart2);
- $xmlDataPreview = $this->formatXmlForOutput($xmlDataPreview->asXML());
- }
- catch(Exception $e) {
- $xmlDataPreview = '';
- }
- }
-
- return new JsonResponse(
- [
- 'success' => true,
- 'input' => !$useJson?$xml_data:json_encode($cart),
- 'object' => ''.print_r($cart,true).' ',
- 'preview' => !$useJson?$xmlDataPreview:json_encode($cart),
- ]
- );
- }
-
-
- /**
- * @param string $xmlstring
- *
- * @return string
- */
- protected function formatXmlForOutput($xmlstring)
- {
- $ret = '';
- $startpos = 0;
- $lvl = 1;
- $xmlstring = trim($xmlstring);
- while(($pos = strpos($xmlstring,'<',$startpos)) !== false) {
- $isOpening = true;
- $isClosing = false;
- $pos1 = strpos($xmlstring,' ', $pos+1);
- $pos2 = strpos($xmlstring,'>', $pos+1);
- if($pos1 !== false && $pos2 !== false) {
- if ($xmlstring[$pos + 1] === '/') {
- $isClosing = true;
- $isOpening = false;
- }
- elseif($xmlstring[$pos2 - 1] === '/') {
- $isClosing = true;
- $isOpening = true;
- }
- }
- elseif($pos2 !== false) {
- if ($xmlstring[$pos + 1] === '/') {
- $isClosing = true;
- $isOpening = false;
- }
- elseif($xmlstring[$pos2 - 1] === '/') {
- $isClosing = true;
- $isOpening = true;
- }
- }
- else {
- $pos2 = $pos;
- }
-
- $prev = trim(substr($xmlstring, $startpos, $pos-$startpos));
-
- if($isClosing) {
- $lvl--;
- }
-
- $xmlPart = str_repeat(' ', $lvl).trim(substr($xmlstring, $pos, $pos2 - $pos + 1)). "\n";
-
- if($isOpening) {
- $lvl++;
- }
-
- if($lvl < 1) {
- $lvl = 1;
- }
- if($prev !== '') {
- $ret = trim($ret).$prev.ltrim($xmlPart);
- }
- else{
- $ret .= $prev . $xmlPart;
- }
- $startpos = $pos2 + 1;
- }
- $ret .= str_repeat(' ',$lvl).trim(substr($xmlstring, $startpos + 1));
-
- return $ret;
- }
-
- /**
- * @param int $shopId
- *
- * @return mixed|null
- */
- public function getSettingFields($shopId)
- {
- if(empty($shopId)) {
- return null;
- }
-
- $json = $this->app->DB->Select(sprintf('SELECT `einstellungen_json` FROM `shopexport` WHERE `id` = %d', $shopId));
- if(empty($json)) {
- return null;
- }
-
- $json = json_decode($json, true);
- if(empty($json['felder'])) {
- return null;
- }
-
- return $json['felder'];
- }
-
- /**
- * @param int $shopId
- *
- * @return string|null
- */
- protected function getTemplateFromShop($shopId)
- {
- $fields = $this->getSettingFields($shopId);
- if(empty($fields) || empty($fields['transform_cart_active']) || empty($fields['transform_cart'])) {
- return null;
- }
-
- return $fields['transform_cart'];
- }
-
- /**
- * @param int $addressId
- * @param array $cart
- * @param int $projekt
- * @param int $shopId
- */
- public function ImportAuftragBeforeHook($addressId, &$cart, $projekt, $shopId)
- {
- try {
- $fields = $this->getSettingFields($shopId);
- if(empty($fields) || empty($fields['transform_cart_active']) || empty($fields['transform_cart'])) {
- return;
- }
- $content = $fields['transform_cart'];
- if(empty($content)){
- return;
- }
- $isJson = !empty($fields['transform_cart_format']) && $fields['transform_cart_format'] === 'json';
- $merge = empty($fields['transform_cart_replace']);
- if(!$isJson) {
- $xml = $this->convertArrayToSimpleXml($cart);
- $xmlString = $xml->asXML();
- if(empty($xmlString)){
- return;
- }
- }
- $extId = empty($cart['auftrag'])?'':$cart['auftrag'];
- $internet = empty($cart['onlinebestellnummer'])?'':$cart['onlinebestellnummer'];
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO `onlineshop_transfer_cart`
- (`shop_id`, `template`, `cart_original`, `extid`, `internet`, `status`)
- VALUES (%d, '%s', '%s', '%s', '%s', 'error') ",
- $shopId, $this->app->DB->real_escape_string($content),
- $this->app->DB->real_escape_string(base64_encode(json_encode($cart))),
- $this->app->DB->real_escape_string($extId),
- $this->app->DB->real_escape_string($internet)
- )
- );
- $transferId = (int)$this->app->DB->GetInsertID();
- $cartWithItem = $this->convertSimpleXmlToArray($xml, null, false);
-
- $this->loadSmarty($shopId);
- if($isJson) {
- $newCart = $this->createCartObjectFromTemplateJson($cart, $content,$shopId, $merge);
- }
- else{
- $newCarts = $this->createCartObjectFromTemplate($cart, $cartWithItem, $content, $shopId, $merge);
- $newCart = $newCarts[0];
- }
- if(!empty($newCart)){
- if($transferId > 0) {
- $this->app->DB->Update(
- sprintf(
- "UPDATE `onlineshop_transfer_cart`
- SET `cart_transfer` = '%s', `status` = 'transferred'
- WHERE `id` = %d",
- $this->app->DB->real_escape_string(base64_encode(json_encode($newCart))),
- $transferId
- )
- );
- }
- $cart = $newCart;
- }
- }
- catch (Exception $e) {
-
- }
- }
-
- /**
- * @param array $cart
- * @param int $shopId
- * @param bool $useJson
- * @param bool $merge
- * @param string|null $content
- *
- * @return array
- */
- public function addCartInfo($cart, $shopId, $useJson = false, $merge = true, $content = null)
- {
- if($content === null) {
- $content = $this->getTemplateFromShop($shopId);
- }
- if(empty($content)) {
- if(!$merge) {
- return null;
- }
- return $cart;
- }
-
- if($useJson){
- $this->loadSmarty($shopId);
-
- return $this->createCartObjectFromTemplateJson($cart, $content, $shopId, $merge);
- }
-
- $xml = $this->convertArrayToSimpleXml($cart);
- $xmlString = $xml->asXML();
- if(empty($xmlString)) {
- if(!$merge) {
- return null;
- }
- return $cart;
- }
- $cartWithItem = $this->convertSimpleXmlToArray($xml, null, false);
-
- $this->loadSmarty($shopId);
- $newCarts = $this->createCartObjectFromTemplate($cart, $cartWithItem, $content, $shopId, $merge);
- $newCart = $newCarts[0];
- if(!empty($newCart)) {
- return $newCart;
- }
- if(!$merge) {
- return null;
- }
- return $cart;
- }
-
- /**
- * @return JsonResponse
- */
- public function HandleRunSmartyIncommingAjaxAction()
- {
- $shopId = (int)$this->app->Secure->GetPOST('shopid');
- $input = !isset($this->app->Secure->POST['input'])?null:$this->app->Secure->POST['input'];
- $content = !isset($this->app->Secure->POST['content'])?null:$this->app->Secure->POST['content'];
- $isJson = $this->app->Secure->GetPOST('format') === 'json';
- $replaceCart = (bool)(int)$this->app->Secure->GetPOST('replacecart');
- $xml = null;
- $cart = null;
- $cartWithItem = null;
- if(is_string($input)) {
- $input = trim($input);
- }
- if(is_string($content)) {
- $content = trim($content);
- }
- try {
- if($isJson){
- $cart = json_decode($input, true);
- }
- else {
- $xml = new SimpleXMLElement($input);
- $cart = $this->convertSimpleXmlToArray($xml, null, true);
- $cartWithItem = $this->convertSimpleXmlToArray($xml, null, false);
- }
- }
- catch (Exception $e) {
- $xml = null;
- $cart = null;
- $cartWithItem = null;
- }
- $this->loadSmarty($shopId);
- try {
- if($isJson) {
- $newCart = $this->createCartObjectFromTemplateJson($cart, $content, $shopId, !$replaceCart);
- }
- else{
- $newCarts = $this->createCartObjectFromTemplate($cart, $cartWithItem, $content, $shopId, !$replaceCart);
- $newCart = $newCarts[0];
- }
- }
- catch(Exception $e) {
- return new JsonResponse(
- [
- 'success' => true,
- 'preview' => print_r($e->getMessage(), true),
- 'object' => ''.print_r($cart, true).' ',
- ]
- );
- }
- try{
- if($isJson) {
- $xmlData = json_encode($newCart);
- }
- else {
- $xmlData = $this->convertArrayToSimpleXml($newCart);
- $xmlData = $this->formatXmlForOutput($xmlData->asXML());
- }
- }
- catch(Exception $e) {
-
- }
-
- return new JsonResponse(
- [
- 'success' => true,
- 'preview' => $xmlData,
- 'object' => ''.print_r($cart, true).' ',
- ]
- );
- }
-
- /**
- * @return JsonResponse
- */
- public function HandleSaveSmartyIncommingAjaxAction()
- {
- $shopId = (int)$this->app->Secure->GetPOST('shopid');
- $input = !isset($this->app->Secure->POST['input'])?null:$this->app->Secure->POST['input'];
- $content = !isset($this->app->Secure->POST['content'])?null:$this->app->Secure->POST['content'];
- $format = $this->app->Secure->GetPOST('format');
- $replaceCart = (int)$this->app->Secure->GetPOST('replacecart');
- $active = (int)$this->app->Secure->GetPOST('active');
-
- $shopArr = $this->app->DB->SelectRow(
- sprintf(
- 'SELECT `einstellungen_json` FROM `shopexport` WHERE `id` = %d',
- $shopId
- )
- );
- if(!empty($shopArr)) {
- $json = json_decode($shopArr['einstellungen_json'], true);
- if(empty($json)) {
- $json = [];
- }
- $json['felder']['transform_cart'] = $content;
- $json['felder']['transform_cart_format'] = $format;
- $json['felder']['transform_cart_replace'] = $replaceCart;
- $json['felder']['transform_cart_active'] = $active;
- $json['felder']['transform_cart_data'] = $input;
- $json = json_encode($json);
- if(!empty($json) && !empty(json_decode($json, true))){
- $this->app->DB->Update(
- sprintf(
- "UPDATE `shopexport` SET `einstellungen_json` = '%s' WHERE `id` = %d",
- $this->app->DB->real_escape_string($json), $shopId
- )
- );
- }
- return new JsonResponse(
- [
- 'success' => true,
- ]
- );
- }
-
- return new JsonResponse(
- [
- 'success' => false,
- 'error' => 'Shop konnte nicht gespeichert werden',
- ],
- JsonResponse::HTTP_BAD_REQUEST
- );
- }
-
-
- /**
- * @param array $array
- * @param string $rootNode Name des Root-Elements
- *
- * @return SimpleXMLElement
- */
- public function convertArrayToSimpleXml($array, $rootNode = 'xml')
- {
- $rootNodeCloser = explode(' ', $rootNode);
- $rootNodeCloser = reset($rootNodeCloser);
- $xml = new SimpleXMLElement(
- sprintf('<%s>%s>', $rootNode, $rootNodeCloser)
- );
- $nameSpaces = $this->getNameSpacesByNode($rootNode);
- $this->arrayToXmlHelper($xml, $array, $nameSpaces);
-
- return $xml;
- }
-
-
- /**
- * @param string $key
- * @param array $nameSpaces
- *
- * @return array
- */
- protected function getAttributesFromKey($key, $nameSpaces = [])
- {
- $keyArr = explode(' ', $key);
- $nameSpace = null;
- $node = $keyArr[0];
- if(strpos($node, ':') !== false) {
- list($nameSpaceShort, $node) = explode(':', $node, 2);
- if($nameSpaceShort !== '' && isset($nameSpaces[$nameSpaceShort])) {
- $nameSpace = $nameSpaces[$nameSpaceShort];
- }
- }
- unset($keyArr[0]);
- $attributes = [];
- foreach($keyArr as $attr) {
- if(empty($attr)) {
- continue;
- }
- $attrA = explode('=', $attr,2);
- if(!empty($attrA[1])) {
- $attrA[1] = trim($attrA[1],'"');
- }
- $attributes[] = $attrA;
- }
-
- return [$node, $attributes, $nameSpace];
- }
-
- /**
- * @see convertArrayToSimpleXml
- *
- * @param SimpleXMLElement $xmlObj
- * @param array $array
- * @param array $nameSpaces
- * @param string $parentTag
- * @param array $attributesFromParent
- */
- protected function arrayToXmlHelper(&$xmlObj, $array, $nameSpaces = [], $parentTag = '', $attributesFromParent = [])
- {
- foreach ($array as $key => $value) {
- if(is_int($key)) {
- $key = 'item'.$key;
- }
- // Wenn kein Knotenname ermittelt werden konnte > den Knoten 'item' nennen
- $subNodeName = is_int($key) ? 'item' : $key;
- if(!empty($parentTag) && is_int($key)) {
- $subNodeName = $parentTag;
- }
- list($subNodeName, $attributes, $nameSpace) = $this->getAttributesFromKey($subNodeName, $nameSpaces);
-
- if (is_array($value)) {
- $useParentTag = false;// !empty($key);
- foreach ($value as $key2 => $value2) {
- if(!is_int($key2) || !$useParentTag) {
- $useParentTag = false;
- break;
- }
- }
- if($useParentTag) {
- $this->arrayToXmlHelper($xmlObj, $value, $nameSpaces, $subNodeName, $attributes);
- }
- else {
- $subNode = $xmlObj->addChild((string)$subNodeName, null, $nameSpace);
- if (!empty($attributes)) {
- foreach ($attributes as $attribute) {
- $subNode->addAttribute((string)$attribute[0],
- empty($attribute[1]) ? '' : (string)$attribute[1]);
- }
- }
- elseif(!empty($attributesFromParent)) {
- foreach ($attributesFromParent as $attribute) {
- $subNode->addAttribute((string)$attribute[0],
- empty($attribute[1]) ? '' : (string)$attribute[1]);
- }
- }
- $this->arrayToXmlHelper($subNode, $value, $nameSpaces,$subNodeName);
- }
- } else {
- $subNode = $xmlObj->addChild((string)$subNodeName, htmlspecialchars($value, ENT_QUOTES), $nameSpace);
- if(!empty($attributes)) {
- foreach($attributes as $attribute) {
- $subNode->addAttribute((string)$attribute[0], empty($attribute[1])?'':(string)$attribute[1]);
- }
- }
- elseif(!empty($attributesFromParent)) {
- foreach($attributesFromParent as $attribute) {
- $subNode->addAttribute((string)$attribute[0], empty($attribute[1])?'':(string)$attribute[1]);
- }
- }
- }
- }
- }
-
-
- /**
- * @param string $node
- *
- * @return array
- */
- protected function getNameSpacesByNode($node)
- {
- $nameSpaces = [];
- $nodeArr = explode(' ', $node);
- unset($nodeArr[0]);
- foreach($nodeArr as $nodeVal) {
- $nodeVal = trim($nodeVal);
- if(empty($nodeVal)) {
- continue;
- }
- if(preg_match_all('/xmlns(:{0,1})([^=]*)="([^"]+)"/', $nodeVal, $matches)) {
- $nameSpaces[$matches[2][0]] = $matches[3][0];
- }
- }
-
- return $nameSpaces;
- }
-
- /**
- * @param $id
- */
- protected function loadSmarty($id)
- {
- $this->smartydir = 'Modules/Onlineshops';
- $this->segment = 'online'.$id;// uniqid('online', true);
- $this->templateDir = $this->app->erp->GetTMP().$this->smartydir.'/template_'.$id.$this->segment;
- $this->tmpl = $this->app->Container->get('TransferSmartyTemplate');
- if(!is_dir($this->templateDir) && !mkdir($this->templateDir, 0777, true)
- && !is_dir($this->templateDir)) {
- return;
- }
-
- $this->tmpl->addTemplateDir($this->segment, $this->templateDir . '/');
- try {
- $this->tmpl->registerPlugin('modifier', 'jsondecode', [$this, 'SmartyJsonDecode']);
- $this->tmpl->registerPlugin('modifier', 'jsonencode', [$this, 'SmartyJsonEncode']);
- $this->tmpl->registerPlugin('modifier', 'arraytolist', [$this, 'SmartyArrayToList']);
- $this->tmpl->registerPlugin('modifier', 'print_r', [$this, 'SmartyPrintR']);
- $this->tmpl->registerPlugin('modifier', 'preg_replace', 'preg_replace');
- $this->tmpl->registerPlugin('modifier', 'substr', 'substr');
- $this->tmpl->registerPlugin('modifier', 'strtolower', 'strtolower');
- $this->tmpl->registerPlugin('modifier', 'strtoupper', 'strtoupper');
- $this->tmpl->registerPlugin('modifier', 'explode', 'explode');
- $this->tmpl->registerPlugin('modifier', 'strstr', 'strstr');
- $this->tmpl->registerPlugin('modifier', 'strlen', 'strlen');
- $this->tmpl->registerPlugin('modifier', 'strtotime', 'strtotime');
- $this->tmpl->registerPlugin('modifier', 'intval', 'intval');
- }
- catch (Exception $e) {
-
- }
- }
-
- /**
- * @param string $content
- *
- * @return string
- */
- protected function reformatTemplate($content) {
- return str_replace("\\\n",'', str_replace("\r", '', $content));
- }
-
- /**
- * @param array $cartObj
- * @param string $template
- * @param int $shopId
- * @param bool $merge
- *
- * @return array
- */
- protected function createCartObjectFromTemplateJson($cartObj, $template, $shopId, $merge = true)
- {
- if(!is_dir($this->templateDir) && !mkdir($this->templateDir, 0777, true)
- && !is_dir($this->templateDir)) {
- if($merge){
- return $cartObj;
- }
- return null;
- }
-
- @file_put_contents(
- $this->templateDir.'/cart_'.$shopId.'.tpl', trim($this->reformatTemplate($template))
- );
- try {
- $object = json_decode(json_encode($cartObj));
- $this->tmpl->assign('cart', $object);
- $this->tmpl->assign('cartarray', $cartObj);
- $this->tmpl->assign('object', $object);
- $this->tmpl->assign('objectarray', $cartObj);
- $shop = $this->app->DB->SelectRow(sprintf('SELECT * FROM `shopexport` WHERE `id` = %d', $shopId));
- $settings = @json_decode($shop['einstellungen_json'], true);
- $settings = empty($settings['felder'])?null:$settings['felder'];
- $this->tmpl->assign(
- 'shop',
- $shop
- );
- $this->tmpl->assign(
- 'shopsettings',
- json_decode(json_encode($settings))
- );
- }
- catch (Exception $e) {
- if($merge){
- return $cartObj;
- }
- return null;
- }
- try {
- $content = $this->tmpl->fetch($this->segment, 'cart_' . $shopId . '.tpl');
- }
- catch (Exception $e) {
- throw $e;
- }
- $content = trim($content);
- $ret = json_decode($content, true);
- if(!$merge) {
- return $ret;
- }
-
- return $this->mergeArrays($cartObj, $ret);
- }
-
- /**
- * @param array $cartObj
- * @param array $cartWithItemObj
- * @param string $template
- * @param int $shopId
- * @param bool $merge
- *
- * @return array
- */
- protected function createCartObjectFromTemplate($cartObj, $cartWithItemObj, $template, $shopId, $merge = true)
- {
- if(!is_dir($this->templateDir) && !mkdir($this->templateDir, 0777, true)
- && !is_dir($this->templateDir)) {
- if($merge){
- return [$cartObj, $cartWithItemObj];
- }
- return [null, null];
- }
-
- @file_put_contents(
- $this->templateDir.'/cart_'.$shopId.'.tpl', trim($this->reformatTemplate($template))
- );
-
- try {
- $object = json_decode(json_encode($cartWithItemObj));
- $this->tmpl->assign('cart', $object);
- $this->tmpl->assign('object', $object);
- }catch (Exception $e) {
- if($merge){
- return [$cartObj, $cartWithItemObj];
- }
- return [null, null];
- }
- try {
- $content = $this->tmpl->fetch($this->segment, 'cart_' . $shopId . '.tpl');
- }
- catch (Exception $e) {
- throw $e;
- }
- try {
- $content = trim($content);
- $xml = new SimpleXMLElement($content);
- if($xml === false) {
- $ret = json_decode($content, true);
- if(is_array($ret)) {
- if($merge){
- return [
- $this->mergeArrays($cartObj, $ret),
- null,
- ];
- }
- return [$ret, null];
- }
- }
-
- $ret = $this->convertSimpleXmlToArray($xml);
- $retItem = $this->convertSimpleXmlToArray($xml, null, false);
- if(is_array($ret)) {
- if($merge){
- return [
- $this->mergeArrays($cartObj, $ret),
- $this->mergeArrays($cartWithItemObj, $retItem),
- ];
- }
- return [$ret, $retItem];
- }
- }
- catch (Exception $e) {
-
- }
-
- if($merge){
- return [$cartObj, $cartWithItemObj];
- }
- return [null, null];
- }
-
- /**
- * @param array $from
- * @param array $to
- */
- public function mergeArrays($from, $to)
- {
- $ret = $from;
- if(is_array($to)) {
- foreach($to as $key => $value) {
- if(!isset($ret[$key])) {
- $ret[$key] = $value;
- continue;
- }
- if(is_array($value)) {
- $ret[$key] = $this->mergeArrays($ret[$key], $value);
- continue;
- }
- $ret[$key] = $value;
- }
- }
-
- return $ret;
- }
-}
+Secure->GetGET('id');
+ $nurfehler = $app->YUI->TableSearchFilter($name, 10, 'nurfehler', 0,0,'checkbox');
+ $auftraege = $app->YUI->TableSearchFilter($name, 22, 'auftraege', 0,0,'checkbox');
+ $aenderungen = $app->YUI->TableSearchFilter($name, 28, 'aenderungen', 0,0,'checkbox');
+ $allowed['onlineshops'] = array('edit');
+ $heading = array('','Datum','Typ','Wert','Wert 2','Bearbeiter','');
+ $width = array('1%','20%','10%','20%','20%','15%','1%');
+ $findcols = array('open', 'sl.zeitstempel','sl.typ','sl.parameter1','sl.parameter2','sl.bearbeiter', 'sl.tid');
+ $searchsql = array('sl.zeitstempel','sl.typ','sl.parameter1','sl.parameter2','sl.bearbeiter');
+
+ $defaultorder = 2; //Optional wenn andere Reihenfolge gewuenscht
+
+ $defaultorderdesc = 1;
+
+ if($auftraege)
+ {
+ $arr[]="(SELECT id,logdatei as zeitstempel, 'Auftrag' as typ,extid as parameter1,bestellnummer as parameter2,bearbeiter, concat('2-',id) as tid FROM shopimport_auftraege WHERE shopid = '$id')";
+ }else{
+ $arr[] = "(SELECT id, zeitstempel, typ, parameter1,parameter2,bearbeiter, concat('1-',id) as tid FROM shopexport_log WHERE shopid = '$id')";
+ }
+
+ if($aenderungen){
+ $arr[] = "(SELECT id, creation_timestamp, 'Einstellungsänderung',message, plaindiff,username, concat('3-',id) as tid FROM shopexport_change_log WHERE shop_id = '$id')";
+ }
+
+ $sql = "SELECT SQL_CALC_FOUND_ROWS sl.id, ' Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' as open, sl.zeitstempel, sl.typ, substring(sl.parameter1,1,50), sl.parameter2,sl.bearbeiter, sl.tid
+ FROM
+ (
+ ".implode(" UNION ALL ", $arr)."
+ )
+ sl
+ ";
+ $menucol = 6;
+ $moreinfo = true;
+ $doppelteids = true;
+ //$where = "shopid = '$id'";
+ $where = " 1 ";
+ $menu = "id=%value% ";
+ if($nurfehler)$where .= " AND sl.typ like 'fehler' ";
+
+ break;
+ case "shopexport_sprachen":
+ $id = $app->Secure->GetGET('id');
+ $allowed['onlineshops'] = array('edit');
+ $heading = array('Land','Projekt','Sprache','Aktiv','Menü');
+ $width = array('10%','20%','20%','5%','1%');
+ $findcols = array('s.land', 'p.abkuerzung','s.sprache','s.aktiv','s.id');
+ $searchsql = array('s.land', 'p.abkuerzung','s.sprache','s.aktiv');
+
+ $defaultorder = 1; //Optional wenn andere Reihenfolge gewuenscht
+ $defaultorderdesc = 0;
+
+ $sql = "SELECT SQL_CALC_FOUND_ROWS s.id, s.land, p.abkuerzung, s.sprache, if(s.aktiv = 1, 'ja','-'), s.id
+ FROM
+ shopexport_sprachen s LEFT JOIN projekt p ON s.projekt = p.id
+ ";
+ $where = " s.shop = '$id'";
+ $menu = "";
+ break;
+ case "shopexport_kundengruppen":
+ $id = $app->Secure->GetGET('id');
+ $allowed['onlineshops'] = array('edit');
+ $heading = array('Kennziffer','Kundengruppe','Bezeichnung Shop','Projekt','Rolle','Neukunden zuweisen','Aktiv','Menü');
+ $width = array('5%','40%','30%','10%','5%','%5','4%','1%');
+ $findcols = array('g.name', 'g.kennziffer','s.extgruppename','s.projekt','s.type',"if(s.apply_to_new_customers = 1, 'ja','-')","if(s.aktiv = 1, 'ja','-')",'s.id');
+ $searchsql = array('g.name', 'g.kennziffer','s.extgruppename','s.projekt','s.type',"if(s.apply_to_new_customers = 1, 'ja','-')","if(s.aktiv = 1, 'ja','-')");
+
+ $defaultorder = 1; //Optional wenn andere Reihenfolge gewuenscht
+ $defaultorderdesc = 0;
+
+ $sql = "SELECT SQL_CALC_FOUND_ROWS
+ s.id,
+ g.kennziffer,
+ g.name,
+ s.extgruppename,
+ IF(s.projekt='','',p.name),
+ s.type,
+ IF(s.apply_to_new_customers=1,'ja','-'),
+ IF(s.aktiv = 1, 'ja','-'),
+ s.id
+ FROM shopexport_kundengruppen s
+ LEFT JOIN projekt p ON s.projekt = p.id
+ LEFT JOIN gruppen g ON s.gruppeid = g.id
+ ";
+ $where = " s.shopid = '$id' AND g.aktiv = 1";
+ $menu = "";
+ break;
+ case 'shopexport_artikellist':
+
+ $id = $app->Secure->GetGET('id');
+ $allowed['onlineshops'] = array('artikellist');
+ $heading = array('', '', 'Artikel-Nr.','Artikel','Aktiv','Lagersync','Einstellungen aus Artikel','Letzte Artikelübertragung','Letzter Lagersync','Lagercache','Menü');
+ $width = array( '1%','1%', '5%', '40%', '1%', '1%', '1%', '7%', '7%', '1%', '1%');
+ $findcols = array('a.id','a.id','a.nummer','a.name_de','aos.aktiv','a.autolagerlampe','aos.ausartikel','last_article_transfer','aos.last_storage_transfer','a.cache_lagerplatzinhaltmenge');
+ $searchsql = array('a.nummer','a.name_de');
+
+ $defaultorder = 1; //Optional wenn andere Reihenfolge gewuenscht
+ $defaultorderdesc = 0;
+
+ $dropnbox = "' ' AS `open`, CONCAT(' ') AS `auswahl`";
+
+ $sql = "
+SELECT SQL_CALC_FOUND_ROWS
+ a.id,".
+ $dropnbox.",
+ a.nummer,
+ a.name_de,
+ aos.aktiv,
+ a.autolagerlampe,
+ aos.ausartikel,".
+ $app->erp->FormatDateTime('aos.last_article_transfer').",".
+ $app->erp->FormatDateTime('aos.last_storage_transfer').",
+ if(a.cache_lagerplatzinhaltmenge = -999,'',a.cache_lagerplatzinhaltmenge) cache,
+ a.id
+FROM
+ artikel a
+INNER JOIN artikel_onlineshops aos ON
+ a.id = aos.artikel
+INNER JOIN shopexport s ON
+ s.id = aos.shop
+ ";
+ $where = " s.id = '$id'";
+
+ $menu = "";
+// $menu = "";
+
+ $orderby = null;
+
+ break;
+ }
+
+ $erg = [];
+
+ foreach($erlaubtevars as $k => $v) {
+ if(isset($$v)) {
+ $erg[$v] = $$v;
+ }
+ }
+
+ return $erg;
+ }
+
+ /**
+ * Onlineshops constructor.
+ *
+ * @param Application $app
+ * @param bool $intern
+ */
+ public function __construct($app, $intern = false) {
+ //parent::GenShopexport($app);
+ $this->app=$app;
+ if($intern) {
+ return;
+ }
+ $this->tmpl = $this->app->Container->get('Template');
+ $this->tmpl->setDefaultNamespace('Modules/Onlineshop');
+
+ $this->app->ActionHandlerInit($this);
+
+ $this->app->ActionHandler("create","ShopexportCreate");
+ $this->app->ActionHandler("edit","ShopexportEdit");
+ $this->app->ActionHandler("list","ShopexportList");
+ $this->app->ActionHandler("delete","ShopexportDelete");
+ $this->app->ActionHandler("zahlweisedelete","ShopexportZahlweisedelete");
+ $this->app->ActionHandler("versandartdelete","ShopexportVersandartdelete");
+ $this->app->ActionHandler("freifelddelete","ShopexportFreifelddelete");
+ $this->app->ActionHandler("subshopdelete","ShopexportSubshopdelete");
+ $this->app->ActionHandler("sprachendelete","ShopexportSprachendelete");
+ $this->app->ActionHandler("zahlweiseget","ShopexportZahlweiseget");
+ $this->app->ActionHandler("zahlweisesave","ShopexportZahlweisesave");
+ $this->app->ActionHandler("sprachenget","ShopexportSprachenget");
+ $this->app->ActionHandler("sprachensave","ShopexportSprachensave");
+ $this->app->ActionHandler("kundengruppenget","ShopexportKundengruppenget");
+ $this->app->ActionHandler("kundengruppensave","ShopexportKundengruppensave");
+ $this->app->ActionHandler("kundengruppeneditsave","ShopexportKundengruppensave");
+ $this->app->ActionHandler("kundengruppendelete","ShopexportKundengruppendelete");
+ $this->app->ActionHandler("zahlweiseeditsave","ShopexportZahlweiseeditsave");
+ $this->app->ActionHandler("exportartikelbaum","ShopexportArtikelbaumexport");
+ $this->app->ActionHandler("freifeldersave","ShopexportFreifeldsave");
+ $this->app->ActionHandler("subshopsave","ShopexportSubshopsave");
+
+ $this->app->ActionHandler("versandartget","ShopexportVersandartget");
+ $this->app->ActionHandler("freifeldget","ShopexportFreifeldget");
+ $this->app->ActionHandler("subshopget","ShopexportSubshopget");
+ $this->app->ActionHandler("versandartsave","ShopexportVersandartsave");
+ $this->app->ActionHandler("versandarteditsave","ShopexportVersandarteditsave");
+ $this->app->ActionHandler("freifeldereditsave","ShopexportFreifeldereditsave");
+ $this->app->ActionHandler("spracheneditsave","ShopexportSpracheneditsave");
+
+ $this->app->ActionHandler("subshopeditsave","ShopexportSubshopeditsave");
+ $this->app->ActionHandler("minidetail","ShopexportMinidetail");
+ $this->app->ActionHandler("features","ShopexportFeatures");
+
+ $this->app->ActionHandler('appnew', 'ShopexportAppNew');
+ $this->app->ActionHandler('getapi', 'ShopexportGetApi');
+ $this->app->ActionHandler('itemlink', 'ShopexportItemlink');
+ $this->app->ActionHandler('orderlink', 'ShopexportOrderlink');
+
+ $this->app->ActionHandler('artikellist', 'ShopexportArtikelList');
+
+ $this->app->erp->Headlines('Shopexport');
+ $this->app->ActionHandlerListen($app);
+ }
+
+ public function InstallResouces()
+ {
+ $resourcesDir = dirname(__DIR__, 2).'/classes/Modules/Onlineshop/resources';
+ $cacheDir = dirname(__DIR__).'/cache/Onlineshop/resources';
+ $resourcesSubDirs = ['usecasesSvgDe', 'usecasesSvgEn',];
+ if(!is_dir($resourcesDir)) {
+ return;
+ }
+ if(!is_dir($cacheDir) && !mkdir($cacheDir,0777, true) && !is_dir($cacheDir)) {
+ return;
+ }
+ foreach($resourcesSubDirs as $subDir) {
+ if(!is_dir($resourcesDir.'/'.$subDir)) {
+ continue;
+ }
+ if(!is_dir($cacheDir.'/'.$subDir) && !mkdir($cacheDir.'/'.$subDir,0777, true) && !is_dir($cacheDir.'/'.$subDir)) {
+ continue;
+ }
+ $handle = opendir($resourcesDir.'/'.$subDir);
+ if(empty($handle)) {
+ continue;
+ }
+ while($entry = readdir($handle)) {
+ if(substr($entry, -4) === '.svg' && is_file($resourcesDir.'/'.$subDir.'/'.$entry)) {
+ if(!is_file($cacheDir.'/'.$subDir.'/'.$entry)) {
+ copy($resourcesDir.'/'.$subDir.'/'.$entry, $cacheDir.'/'.$subDir.'/'.$entry);
+ }
+ }
+ }
+ closedir($handle);
+ }
+ }
+
+ /**
+ * @param int $shopId
+ *
+ * @return array
+ */
+ public function genearteApiAccount($shopId)
+ {
+ $shop = $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT se.`id`, se.`api_account_id`, ac.id AS `api_id`, `se`.bezeichnung
+ FROM `shopexport` AS `se`
+ LEFT JOIN `api_account` AS `ac` ON se.api_account_id = ac.id
+ WHERE se.`id` = %d',
+ $shopId
+ )
+ );
+ if(empty($shop)) {
+ return ['success' => false, 'error' => 'Shop nicht gefunden'];
+ }
+ if(!empty($shop['api_id'])) {
+ return ['success' => false, 'error' => 'Api Account existiert bereits', 'api_id' => $shop['api_id']];
+ }
+
+ $remoteDomain = $shop['bezeichnung'];
+ $firstRemoteDomain = $remoteDomain;
+ $apiName = $shop['bezeichnung'];
+ $firstApiName = $apiName;
+ $remoteIndex = 0;
+ $key = sha1(uniqid('shopexport', true));
+ while(
+ !empty(
+ $this->app->DB->Select(
+ sprintf(
+ "SELECT `id` FROM `api_account` WHERE `remotedomain` = '%s' OR `bezeichnung` = '%s' LIMIT 1",
+ $this->app->DB->real_escape_string($remoteDomain),
+ $this->app->DB->real_escape_string($apiName)
+ )
+ )
+ )
+ ) {
+ $remoteIndex++;
+ $remoteDomain = $firstRemoteDomain.'_'.$remoteIndex;
+ $apiName = $firstApiName.' '.$remoteIndex;
+ }
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO `api_account`
+ (`bezeichnung`, `initkey`, `importwarteschlange_name`, `event_url`, `remotedomain`, `aktiv`,
+ `importwarteschlange`, `cleanutf8`, `uebertragung_account`, `projekt`, `permissions`)
+ VALUES ('%s', '%s', '', '', '%s', 1,
+ 0, 0, 0, 0, '%s')",
+ $this->app->DB->real_escape_string($apiName),
+ $this->app->DB->real_escape_string($key), $this->app->DB->real_escape_string($remoteDomain),
+ $this->app->DB->real_escape_string('["communicate_with_shop"]')
+ )
+ );
+ $apiId = $this->app->DB->GetInsertID();
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE `shopexport` SET `api_account_id` = %d WHERE `id` = %d',
+ $apiId, $shopId
+ )
+ );
+
+ return ['success' => true, 'api_id' => $apiId];
+ }
+
+ public function ShopexportItemlink()
+ {
+ $id = (int)$this->app->Secure->GetGET('id');
+ $shop = $this->app->DB->Select(sprintf('SELECT `id` FROM `shopexport` WHERE `id` = %d', $id));
+ if(empty($shop)) {
+ $this->app->Location->execute(
+ 'index.php?module=onlineshops&action=list&msg='.
+ $this->app->erp->base64_url_encode('Shop nicht gefunden
')
+ );
+ }
+ $sid = base64_decode($this->app->Secure->GetGET('sid'));
+ if(empty($sid)) {
+ $this->app->Location->execute(
+ 'index.php?module=onlineshops&action=list&msg='.
+ $this->app->erp->base64_url_encode('Artikel nicht angegeben
')
+ );
+ }
+ $article = $this->app->DB->SelectRow(
+ sprintf(
+ "SELECT art.id, art.projekt FROM `artikel` AS art
+ LEFT JOIN `artikelnummer_fremdnummern` AS af on art.id = af.artikel AND af.aktiv = 1 AND af.shopid = %d
+ WHERE (art.nummer = '%s' OR af.nummer = '%s') AND (art.geloescht = 0 OR art.geloescht IS NULL)
+ ORDER BY af.id DESC
+ LIMIT 1",
+ $shop, $this->app->DB->real_escape_string($sid), $this->app->DB->real_escape_string($sid)
+ )
+ );
+ if(empty($article)) {
+ $this->app->Location->execute(
+ 'index.php?module=onlineshops&action=list&msg='.
+ $this->app->erp->base64_url_encode(sprintf('Artikel %s nicht gefunden
', $sid))
+ );
+ }
+ if(empty($article['projekt']) || $this->app->User->projectOk($article['projekt'])){
+ $this->app->Location->execute('index.php?module=artikel&action=edit&id=' . $article['id']);
+ }
+ $this->app->Location->execute(
+ 'index.php?module=onlineshops&action=list&msg='.
+ $this->app->erp->base64_url_encode(
+ sprintf(
+ 'Sie haben keine Rechte den Artikel %s aufzurufen
',
+ $sid
+ )
+ )
+ );
+ }
+
+ /**
+ * @param string $server
+ *
+ * @return string[][]
+ */
+ public function getUserCases($server)
+ {
+ return [
+ 'batchpicking' => [
+ 'title_de' => 'Batch Kommissionierung',
+ 'title_en' => 'Batch Picking',
+ 'svg_de' => 'usecasesSvgDe/Batch_Kommissionierung@1x.svg',
+ 'svg_en' => 'usecasesSvgEn/Batch_picking@1x.svg',
+ 'link' => $server .'/index.php?module=batchpicking&action=list',
+ 'link_alt' => 'https://xentral.com/helpdesk/kurzanleitung-batches-picklisten',
+ ],
+ 'buchhaltungsexport' => [
+ 'title_de' => 'Datev Export',
+ 'title_en' => 'Data export',
+ 'svg_de' => 'usecasesSvgDe/Datev_Export@1x.svg',
+ 'svg_en' => 'usecasesSvgEn/Data_export@1x.svg',
+ 'link' => $server .'/index.php?module=buchhaltungexport&action=list',
+ 'link_alt' => 'https://xentral.com/helpdesk/kurzanleitung-export-fuer-die-buchhaltung',
+ ],
+ 'dropshipping' => [
+ 'title_de' => 'Dropshipping',
+ 'title_en' => 'Dropshipping',
+ 'svg_de' => 'usecasesSvgDe/Dropshipping@1x.svg',
+ 'svg_en' => 'usecasesSvgEn/Dropshipping@1x.svg',
+ 'link' => $server .'/index.php?module=dropshipping&action=list',
+ 'link_alt' => 'https://xentral.com/helpdesk/dropshipping',
+ ],
+ 'kommissionierlauf' => [
+ 'title_de' => 'Einfache Pickliste',
+ 'title_en' => 'Simple pick list',
+ 'svg_de' => 'usecasesSvgDe/Einfache_Pickliste@1x.svg',
+ 'svg_en' => 'usecasesSvgEn/Simple_pick_list@1x.svg',
+ 'link' => $server .'/index.php?module=kommissionierlauf&action=list',
+ 'link_alt' => 'https://xentral.com/helpdesk/kurzanleitung-logistikprozesse',
+ ],
+ 'mahnwesen' => [
+ 'title_de' => 'Mahnwesen',
+ 'title_en' => 'Dunning',
+ 'svg_de' => 'usecasesSvgDe/Mahnwesen@1x.svg',
+ 'svg_en' => 'usecasesSvgEn/Dunning@1x.svg',
+ 'link' => $server .'/index.php?module=mahnwesen&action=list',
+ 'link_alt' => 'https://xentral.com/helpdesk/kurzanleitung-mahnwesen',
+ ],
+ 'versandarten' => [
+ 'title_de' => 'Paketmarken',
+ 'title_en' => 'Parcel stamps',
+ 'svg_de' => 'usecasesSvgDe/Paketmarken@1x.svg',
+ 'svg_en' => 'usecasesSvgEn/Parcel_stamps@1x.svg',
+ 'link' => $server .'/index.php?module=versandarten&action=list',
+ 'link_alt' => 'https://xentral.com/helpdesk/kurzanleitung-versandarten',
+ ],
+ 'pos' => [
+ 'title_de' => 'POS Anbinden',
+ 'title_en' => 'Connect POS',
+ 'svg_de' => 'usecasesSvgDe/POS_Anbinden@1x.svg',
+ 'svg_en' => 'usecasesSvgEn/Connect_POS@1x.svg',
+ 'link' => $server .'/index.php?module=pos&action=list',
+ 'link_alt' => 'https://xentral.com/helpdesk/kurzanleitung-arbeiten-mit-der-pos-kasse',
+ ],
+ 'retoure' => [
+ 'title_de' => 'Retouren',
+ 'title_en' => 'Returns',
+ 'svg_de' => 'usecasesSvgDe/Retouren@1x.svg',
+ 'svg_en' => 'usecasesSvgEn/Returns@1x.svg',
+ 'link' => $server .'/index.php?module=retoure&action=list',
+ 'link_alt' => 'https://xentral.com/helpdesk/kurzanleitung-rma',
+ ],
+ 'wareneingang' => [
+ 'title_de' => 'Wareneingang',
+ 'title_en' => 'Goods Receipt',
+ 'svg_de' => 'usecasesSvgDe/Wareneingang@1x.svg',
+ 'svg_en' => 'usecasesSvgEn/Goods_Receipt@1x.svg',
+ 'link' => $server .'/index.php?module=warneingang&action=paketannahme',
+ 'link_alt' => 'https://xentral.com/helpdesk/kurzanleitung-zentraler-wareneingang',
+ ],
+
+ ];
+ }
+
+ /**
+ * @param int $shopId
+ *
+ * @return array
+ */
+ public function getModulelinks($shopId = 0)
+ {
+ $server = $this->app->Location->getServer();
+ $pos1 = strpos($server, 'api/index.php');
+ if((int)$pos1 > 0) {
+ $server = substr($server, 0, (int)$pos1);
+ }
+ elseif((int)($pos1 = strpos($server, 'index.php')) > 0) {
+ $server = substr($server, 0, (int)$pos1);
+ }
+ elseif((int)($pos1 = strpos($server, '/api/shopimport/modulelinks')) > 0) {
+ $server = substr($server, 0, (int)$pos1);
+ }
+ $server = rtrim($server,'/');
+ /** @var Appstore $appstore */
+ $appstore = $this->app->loadModule('appstore');
+ $apps = $appstore->getAppsList();
+
+ $ret = $this->getUserCases($server);
+ if(!empty($apps['kauf'])){
+ foreach ($ret as $module => $box) {
+ if($this->app->erp->ModulVorhanden($module)){
+ continue;
+ }
+ foreach ($apps['kauf'] as $app) {
+ if($app['key'] !== $module) {
+ continue;
+ }
+ $ret[$module]['link'] = $server
+ .'/index.php?module=appstore&action=list&cmd=detail&app='.$app['key'];
+ break;
+ }
+ }
+ }
+ $cacheDir = dirname(__DIR__).'/cache/Onlineshop/resources';
+ foreach($ret as $key => $val) {
+ if(!empty($val['svg_en'])) {
+ $file = $cacheDir.'/'.$val['svg_en'];
+ if(!is_file($cacheDir.'/'.$val['svg_en'])) {
+ $this->InstallResouces();
+ break;
+ }
+ }
+ if(!empty($val['svg_de'])) {
+ if(!is_file($cacheDir.'/'.$val['svg_de'])) {
+ $this->InstallResouces();
+ break;
+ }
+ }
+ }
+ foreach($ret as $key => $val) {
+ if(!empty($val['svg_en'])) {
+ $ret[$key]['svg_en'] = $server.'/cache/Onlineshop/resources/'. $val['svg_en'];
+ }
+ if(!empty($val['svg_de'])) {
+ $ret[$key]['svg_de'] = $server.'/cache/Onlineshop/resources/'. $val['svg_de'];
+ }
+ }
+
+ return $ret;
+ }
+
+ public function ShopexportOrderlink()
+ {
+ $id = (int)$this->app->Secure->GetGET('id');
+ $shop = $this->app->DB->Select(sprintf('SELECT `id` FROM `shopexport` WHERE `id` = %d', $id));
+ if(empty($shop)) {
+ $this->app->Location->execute(
+ 'index.php?module=onlineshops&action=list&msg='.
+ $this->app->erp->base64_url_encode('Shop nicht gefunden
')
+ );
+ }
+ $sid = base64_decode($this->app->Secure->GetGET('sid'));
+ if(empty($sid)) {
+ $this->app->Location->execute(
+ 'index.php?module=onlineshops&action=list&msg='.
+ $this->app->erp->base64_url_encode('Auftrag nicht angegeben
')
+ );
+ }
+ $order = $this->app->DB->SelectRow(
+ sprintf(
+ "SELECT `id`, `projekt`
+ FROM `auftrag`
+ WHERE (`internet`= '%s' OR `shopextid` = '%s') AND `shop` = %d
+ ORDER BY `status` = 'storniert'
+ LIMIT 1",
+ $this->app->DB->real_escape_string($sid), $this->app->DB->real_escape_string($sid), $id
+ )
+ );
+ if(empty($order)) {
+ $this->app->Location->execute(
+ 'index.php?module=onlineshops&action=list&msg='.
+ $this->app->erp->base64_url_encode(sprintf('Auftrag %s nicht gefunden
', $sid))
+ );
+ }
+ if(empty($order['projekt']) || $this->app->User->projectOk($order['projekt'])){
+ $this->app->Location->execute('index.php?module=auftrag&action=edit&id=' . $order['id']);
+ }
+ $this->app->Location->execute(
+ 'index.php?module=onlineshops&action=list&msg='.
+ $this->app->erp->base64_url_encode(
+ sprintf(
+ 'Sie haben keine Rechte den Auftrag %s aufzurufen
',
+ $sid
+ )
+ )
+ );
+ }
+
+ /**
+ * @param string $data
+ *
+ * @return array
+ */
+ public function checkAppData($data)
+ {
+ $data = json_decode($data, true);
+ if(empty($data['shoptype'])) {
+ return ['success'=>false,'error' => 'no shoptype given'];
+ }
+ if(empty($data['token'])) {
+ return ['success'=>false,'error' => 'no token given'];
+ }
+
+ if(strpos($data['shoptype'],'shopimporter_') !== 0) {
+ return ['success'=>false,'error' => sprintf('Shopmodule %s not valid', $data['shoptype'])];
+ }
+
+ if(!$this->app->erp->ModulVorhanden($data['shoptype'])) {
+ return ['success'=>false,'error' => sprintf('Shopmodule %s not found', $data['shoptype'])];
+ }
+
+ /** @var ShopimporterBase $shop */
+ $shop = $this->app->loadModule($data['shoptype']);
+ if(!method_exists($shop, 'checkApiApp')) {
+ return ['success'=>false,'error' => sprintf('Shopmodule %s provide no api', $data['shoptype'])];
+ }
+ $info = null;
+ $check = $shop->checkApiApp($data);
+ if(!empty($check['error'])) {
+ return $check;
+ }
+ if(!empty($check['info'])) {
+ $info = $check['info'];
+ }
+
+ return ['success'=>true, 'data' => $data, 'info' => $info];
+ }
+
+ /**
+ * @return JsonResponse|void
+ */
+ public function ShopexportAppNew()
+ {
+ $cmd = $this->app->Secure->GetGET('cmd');
+ $fromAjax = $cmd === 'createdata';
+ $fromCreateButton = $this->app->Secure->GetPOST('create');
+ if($fromAjax || $fromCreateButton) {
+ $data = $this->app->Secure->GetPOST('data','','',true);
+ $step = (int)$this->app->Secure->GetPOST('step');
+ $shopId = (int)$this->app->Secure->GetPOST('shopId');
+ if($step === 2 && $shopId > 0 && !empty($data)) {
+ return $this->getVueShopexportAppNewSuccessPageYt($shopId, $data);
+ }
+ $check = $this->checkAppData($data);
+ $shopId = $shopId <= 0?0:(int)$this->app->DB->Select(
+ sprintf(
+ "SELECT `id` FROM `shopexport` WHERE `geloescht` = 0 AND `aktiv` = 1 AND `id` = %d AND `modulename` = '%s'",
+ $shopId, $this->app->DB->real_escape_string($check['data']['shoptype'])
+ )
+ );
+ if(!empty($check['error'])) {
+ if(!$fromCreateButton) {
+ return new JsonResponse(
+ ['error'=>''.$check['error'].'
'],
+ JsonResponse::HTTP_INTERNAL_SERVER_ERROR
+ );
+ }
+ $this->app->Location->execute(
+ 'index.php?module=onlineshops&action=appnew&msg='
+ .$this->app->erp->base64_url_encode(''.$check['error'].'
')
+ );
+ }
+ if($shopId > 0) {
+ $shop = ['id' => $shopId,];
+ }
+ else {
+ $shop = $this->createInternShop($check['data']['shoptype']);
+ }
+ if(!empty($shop['error'])) {
+ if(!$fromCreateButton) {
+ return new JsonResponse(
+ ['error'=>''.$shop['error'].'
'],
+ JsonResponse::HTTP_INTERNAL_SERVER_ERROR
+ );
+ }
+ $this->app->Location->execute(
+ 'index.php?module=onlineshops&action=appnew&msg='
+ .$this->app->erp->base64_url_encode(''.$shop['error'].'
')
+ );
+ }
+ $apiAccount = $this->genearteApiAccount($shop['id']);
+ if(!empty($apiAccount['api_id'])) {
+ $json = $this->app->DB->Select(
+ sprintf(
+ 'SELECT `einstellungen_json` FROM `shopexport` WHERE `id` = %d',
+ $shop['id']
+ )
+ );
+ $json = json_decode($json, true);
+ if(!is_array($json)) {
+ $json = [];
+ }
+ if(empty($json['felder'])) {
+ $json['felder'] = [];
+ }
+ if(!empty($check['data']['data'])) {
+ foreach($check['data']['data'] as $fieldKey => $fieldValue) {
+ $json['felder'][$fieldKey] = $fieldValue;
+ }
+ }
+ $json = json_encode($json);
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE `shopexport`
+ SET `einstellungen_json` = '%s',
+ `api_account_token` = '%s',
+ `demomodus` = 0,
+ `cronjobaktiv` = 1,
+ `lagerexport` = 1
+ WHERE `id` = %d",
+ $this->app->DB->real_escape_string($json),
+ $this->app->DB->real_escape_string($check['data']['token']),
+ $shop['id']
+ )
+ );
+ if(!$fromCreateButton) {
+ return $this->getVueShopexportAppNewSuccessPage($shop['id'], $data);
+ }
+ $this->app->Location->execute(
+ 'index.php?module=onlineshops&action=appnew&shopid='.$shop['id']
+ .'&url='.urlencode($check['data']['url'])
+ );
+ }
+ }
+
+ if($cmd === 'checkdata') {
+ $data = $this->app->Secure->GetPOST('data','','',true);
+ $check = $this->checkAppData($data);
+ if(!empty($check['error'])) {
+ return new JsonResponse($check, JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
+ }
+ return new JsonResponse(['html'=>'Shoptyp: '.$check['data']['shoptype'].'
']);
+ }
+ $shopdata = $this->app->Secure->GetGET('shopdata');
+ if(!empty($shopdata)) {
+ $shopdata = base64_decode($shopdata);
+ $this->app->User->SetParameter('onlineshops_appnew', $shopdata);
+ $this->app->User->SetParameter('onlineshops_appnew_time', date('Y-m-d H:i:s'));
+ $this->app->erp->RegisterHook('welcome_start', 'onlineshops', 'OnlineShopsWelcomeStart');
+ $this->app->Location->execute('index.php?module=welcome&action=start');
+ }
+
+ $this->app->erp->MenuEintrag('index.php?module=onlineshops&action=appnew', 'Shop mit API anlegen');
+ $shopId = $this->app->Secure->GetGET('shopid');
+ $url = $this->app->Secure->GetGET('url');
+ if(!empty($shopId)) {
+ if(!empty($url)) {
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ ''
+ );
+ }
+ else {
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ 'Es wurde ein neuer
Shop angelegt.
'
+ );
+ }
+ }
+
+ $this->app->Tpl->Parse('PAGE', 'onlineshop_appnew.tpl');
+ }
+
+ /**
+ * @param Welcome $welcomeObj
+ */
+ public function OnlineShopsWelcomeStart($welcomeObj)
+ {
+ $appnew = $this->app->User->GetParameter('onlineshops_appnew');
+ if(empty($appnew)) {
+ return;
+ }
+ $appnewTime = $this->app->User->GetParameter('onlineshops_appnew_time');
+ if(empty($appnewTime)) {
+ return;
+ }
+ try {
+ $lastDay = new DateTime(date('Y-m-d H:i:s'));
+ $lastDay->sub(new DateInterval('P1D'));
+ $appnewTime = new DateTime($appnewTime);
+ if($appnewTime < $lastDay) {
+ return;
+ }
+ }
+ catch (Exception $e) {
+ return;
+ }
+ $this->app->ModuleScriptCache->IncludeJavascriptFiles(
+ 'onlineshops', ['./classes/Modules/Onlineshop/www/js/onlineshop_appnew.js']
+ );
+ $this->app->User->SetParameter('onlineshops_appnew', '');
+ $this->app->User->SetParameter('onlineshops_appnew_time', '');
+ $check = $this->checkAppData($appnew);
+ if(!empty($check['success'])) {
+ $shopModule = $check['data']['shoptype'];
+ $shopModules = [['value' => '-1', 'text'=> 'Neu anlegen',],];
+ $shopModulesPair = $this->app->DB->SelectArr(
+ sprintf(
+ "SELECT `id` AS `value`, `bezeichnung` AS `text`
+ FROM `shopexport`
+ WHERE `geloescht` = 0 AND `modulename` = '%s' AND `aktiv` = 1
+ ORDER BY `bezeichnung`",
+ $this->app->DB->real_escape_string($shopModule)
+ )
+ );
+ if(!empty($shopModulesPair)) {
+ $shopModules = array_merge(
+ [['value'=>'', 'text'=> '']],
+ $shopModulesPair,$shopModules
+ );
+ }
+ else {
+ $shopModules = array_merge(
+ [['value'=>'', 'text'=> '']],
+ $shopModules
+ );
+ }
+
+ $this->app->Tpl->Set('APPNEWJSON', json_encode($shopModules));
+
+ $this->app->Tpl->Set('APPNEWDATA', htmlspecialchars($appnew));
+
+ $this->app->Tpl->Set('APPNEWINFO', empty($check['info']['info'])?'':$check['info']['info']);
+ $this->app->Tpl->Set('APPNEWFIELDSET', empty($check['info']['Shop'])?'':$check['info']['Shop']);
+
+
+ $this->app->Tpl->Parse('AUFGABENPOPUP','onlineshops_appnewpopup.tpl');
+ }
+ else {
+ $error =!empty($check['error'])?$check['error']:'Request ungültig';
+ $this->app->Tpl->Set('ERRORMSG', $error);
+ $this->app->Tpl->Parse('AUFGABENPOPUP','onlineshops_appnewerrorpopup.tpl');
+ }
+
+ $this->app->ModuleScriptCache->IncludeWidgetNew('ClickByClickAssistant');
+ }
+
+ /**
+ * @return JsonResponse
+ */
+ public function ShopexportGetApi()
+ {
+ $token = $this->app->Secure->GetGET('token');
+ $cmd = $this->app->Secure->GetGET('cmd');
+ if($cmd === 'getusecases') {
+ $data = $this->getModulelinks();
+ return new JsonResponse($data);
+ }
+ if(empty($token)) {
+ $data = ['success' => false, 'error' => 'no Token given'];
+ return new JsonResponse($data, JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
+ }
+
+ $shopId = $this->app->DB->SelectRow(
+ sprintf(
+ "SELECT `id`, `api_account_id` FROM `shopexport` WHERE `api_account_token` = '%s' LIMIT 1",
+ $token
+ )
+ );
+
+ if(empty($shopId)) {
+ $data = ['success' => false, 'error' => 'Token is invalid'];
+ return new JsonResponse($data, JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
+ }
+
+ $apiAccount = $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT `id`, `initkey`, `remotedomain` FROM `api_account` WHERE `id` = %d LIMIT 1',
+ $shopId['api_account_id']
+ )
+ );
+
+ $data = ['success' => true];
+ $data['shopid'] = $shopId['id'];
+ $data['api_account_id'] = $shopId['api_account_id'];
+ $data['apiname'] = $apiAccount['remotedomain'];
+ $data['apikey'] = $apiAccount['initkey'];
+ $data['server'] = rtrim(str_replace('index.php','',$this->app->Location->getServer()),'/');
+ $data['api_auth'] = $data['server'].'/api/shopimport/auth';
+ $data['api_syncstorage'] = $data['server'].'/api/shopimport/syncstorage/{articlenumber_base64}';
+ $data['api_articletoxentral'] = $data['server'].'/api/shopimport/articletoxentral/{articlenumber_base64}';
+ $data['api_articletoshop'] = $data['server'].'/api/shopimport/articletoshop/{articlenumber_base64}';
+ $data['api_ordertoxentral'] = $data['server'].'/api/shopimport/ordertoxentral/{ordernumber_base64}';
+ $data['api_statistics'] = $data['server'].'/api/shopimport/statistics';
+ $data['api_modulelinks'] = $data['server'].'/api/shopimport/articletoshop/modulelinks';
+ $data['api_status'] = $data['server'].'/api/shopimport/articletoshop/status';
+ $data['api_disconnect'] = $data['server'].'/api/shopimport/articletoshop/disconnect';
+ $data['api_reconnect'] = $data['server'].'/api/shopimport/articletoshop/reconnect';
+ $data['item_link'] = $data['server']
+ .'/index.php?module=onlineshops&action=itemlink&id='.$shopId['id'].'&sid={articlenumber_base64}';
+ $data['order_link'] = $data['server']
+ .'/index.php?module=onlineshops&action=orderlink&id='.$shopId['id'].'&sid={ordernumber_base64}';
+
+ return new JsonResponse($data);
+ }
+
+ public function ShopexportMinidetail()
+ {
+ $ida = explode('-',$this->app->Secure->GetGET('id'));
+ if((!empty($ida)?count($ida):0) < 2)
+ {
+ $this->app->ExitXentral();
+ }
+ $id = $ida[1];
+ if($ida[0] == 1) {
+ $wert = $this->app->DB->Select("SELECT parameter1 FROM shopexport_log WHERE id = '$id' LIMIT 1");
+ echo '';
+ echo htmlspecialchars($wert);
+ echo ' ';
+ }elseif($ida[0]==3){
+ $query = sprintf('SELECT shop_id FROM shopexport_change_log WHERE id=%d',$id);
+ $shopId = $this->app->DB->Select($query);
+ $query = sprintf('SELECT diff FROM shopexport_change_log WHERE shop_id=%d AND id<%d ORDER BY id ASC',
+ $shopId,$id);
+ $changeLogEntries = $this->app->DB->SelectArr($query);
+ $fieldsToCompareTo = [];
+ foreach ($changeLogEntries as $changeLogEntry){
+ $existingFields = json_decode($changeLogEntry['diff'],true);
+ $fieldsToCompareTo = array_merge($fieldsToCompareTo,$existingFields);
+ }
+ $query = sprintf('SELECT diff FROM shopexport_change_log WHERE id=%d', $id);
+ $lastChanges = json_decode($this->app->DB->Select($query),true);
+
+ $message = 'Feldname Ursprünglicher Wert Aktualisierter Wert ';
+ foreach ($lastChanges as $lastChangeFieldName => $lastChangeFieldValue){
+ $message .= ''.$lastChangeFieldName.' '.$fieldsToCompareTo[$lastChangeFieldName].' '.$lastChangeFieldValue.' ';
+ }
+ $message .='
';
+ echo $message;
+ }else{
+ $shopimportCartRow = $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT * FROM `shopimport_auftraege` WHERE `id` = %d',
+ $id
+ )
+ );
+ if(!empty($shopimportCartRow['jsonencoded'])) {
+ $warenkorb = json_decode(base64_decode($shopimportCartRow['warenkorb']), true);
+ }else{
+ $warenkorb = unserialize(base64_decode($shopimportCartRow['warenkorb']));
+ }
+ echo '';
+ echo print_r($warenkorb,true);
+ echo ' ';
+ $cartInfos = $this->app->DB->SelectArr(
+ sprintf(
+ "SELECT * FROM `onlineshop_transfer_cart` WHERE `shop_id` = %d AND `extid` = '%s'",
+ $shopimportCartRow['shopid'], $this->app->DB->real_escape_string($shopimportCartRow['extid'])
+ )
+ );
+ if(!empty($cartInfos)) {
+ $table = new EasyTable($this->app);
+ $table->Query("SELECT '' AS `Datum`, '' AS `status`, '' AS `Template`, '' AS `Transformiert`");
+ $table->datasets = [];
+ foreach($cartInfos as $cartInfo) {
+ $cart = empty($cartInfo['cart_transfer'])?''
+ :print_r(json_decode(base64_decode($cartInfo['cart_transfer'], true)));
+ $template = empty($cartInfo['template'])?'':$cartInfo['template'];
+ $table->datasets[] = [
+ 'Datum' => $cartInfo['created_at'],
+ 'status' => $cartInfo['status'],
+ 'Template' =>nl2br(htmlspecialchars($template)),
+ 'Transformiert' => nl2br(htmlspecialchars($cart)),
+ ];
+ }
+ echo $table->DisplayNew('return','Transformiert','noAction');
+ }
+ }
+ $this->app->ExitXentral();
+ }
+
+ public function ShopexportKundengruppensave()
+ {
+ $id = (int)$this->app->Secure->GetPOST('id');
+ $aktiv = (int)$this->app->Secure->GetPOST('aktiv');
+ $neukundenzuweisen = (int)$this->app->Secure->GetPOST('kundengruppeneukundenzuweisen');
+ $rolle = $this->app->Secure->GetPOST('zuweisungrolle');
+ $shopId = (int)$this->app->Secure->GetPOST('shop');
+ $kundengruppeIdAusXentral = $this->app->Secure->GetPOST('kundengruppexentral');
+ $kundengruppeBezeichnungAusShop = $this->app->Secure->GetPOST('kundengruppeshop');
+ $projektAbkuerzung = $this->app->Secure->GetPOST('projekt');
+ $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '$projektAbkuerzung' AND abkuerzung <> '' AND ifnull(geloescht,0) = 0 LIMIT 1");
+ if(!$projekt){
+ $projekt = '0';
+ }
+ $antwort = array(
+ 'status' => 1,
+ 'statusText' => 'Gespeichert.'
+ );
+
+ if(!$shopId){
+ $antwort['status'] = 0;
+ $antwort['statusText'] = 'Shopzuordnung kann nicht gefunden werden.';
+ }
+
+ $eintragBereitsvorhanden = $this->app->DB->Select("SELECT id FROM shopexport_kundengruppen WHERE projekt='$projekt' AND shopid='$shopId' AND gruppeid='$kundengruppeIdAusXentral' AND extgruppename='$kundengruppeBezeichnungAusShop' AND id<>'$id'LIMIT 1");
+ if($eintragBereitsvorhanden){
+ $antwort['status'] = 0;
+ $antwort['statusText'] = 'Identischer Eintrag bereits vorhanden.';
+ }
+
+ if ($antwort['status']){
+ $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
+ if($id){
+ $sql = "UPDATE shopexport_kundengruppen SET type='$rolle',gruppeid='$kundengruppeIdAusXentral',extgruppename='$kundengruppeBezeichnungAusShop', aktiv='$aktiv', apply_to_new_customers='$neukundenzuweisen',projekt = '$projekt', updated=NOW(),updatedby='$bearbeiter' WHERE id='$id'";
+ $this->app->DB->Update($sql);
+ }else{
+ $aktiv = '1';
+ $sql = "INSERT INTO shopexport_kundengruppen (shopid, gruppeid, extgruppename, aktiv, apply_to_new_customers,type, projekt, updated, updatedby) VALUES
+ ('$shopId','$kundengruppeIdAusXentral','$kundengruppeBezeichnungAusShop','$aktiv','$neukundenzuweisen','$rolle','$projekt',NOW(),'$bearbeiter')";
+ $this->app->DB->Insert($sql);
+ }
+ }
+
+ echo json_encode($antwort);
+ $this->app->ExitXentral();
+ }
+
+ public function ShopexportSprachensave()
+ {
+ $id = (int)$this->app->Secure->GetGET('id');
+
+ $shop = (int)$this->app->Secure->GetPOST('shop');
+ $land = $this->app->Secure->GetPOST('land');
+ $sprache = $this->app->Secure->GetPOST('sprache');
+ $projekt = explode(' ',$this->app->Secure->GetPOST('projekt'));
+ $projekt = reset($projekt);
+ $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '$projekt' AND abkuerzung <> '' AND ifnull(geloescht,0) = 0 LIMIT 1");
+ /*$aktiv = $this->app->Secure->GetPOST('aktiv');
+ if($aktiv!="1")
+ {
+ $aktiv=0;
+ }*/
+
+ $aktiv = 1;
+
+ if ($shop) {
+ $this->app->DB->Insert("INSERT INTO shopexport_sprachen (id,shop,land,projekt, aktiv, sprache) VALUES
+ ('','$shop','$land','$projekt','$aktiv','$sprache')");
+ $insid = $this->app->DB->GetInsertID();
+ $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
+ $this->app->DB->Update("UPDATE shopexport_sprachen SET updatedby = '$bearbeiter' WHERE id = '$insid' LIMIT 1");
+ }
+
+ echo json_encode(array(
+ 'status' => 1,
+ 'statusText' => 'Gespeichert.'
+ ));
+ $this->app->ExitXentral();
+ }
+
+ public function ShopexportZahlweisesave()
+ {
+ $id = (int)$this->app->Secure->GetGET('id');
+
+ $shop = (int)$this->app->Secure->GetPOST('shop');
+ $zahlweise_shop = $this->app->Secure->GetPOST('zahlweise_shop');
+ $zahlweise_wawision = $this->app->Secure->GetPOST('zahlweise_wawision');
+ $vorabbezahltmarkieren = $this->app->Secure->GetPOST('vorabbezahltmarkieren');
+ $autoversand = $this->app->Secure->GetPOST('autoversand');
+ $keinerechnung = $this->app->Secure->GetPOST('keinerechnung');
+ $fastlane = (int)$this->app->Secure->GetPOST('fastlane');
+ if($keinerechnung!="1")
+ {
+ $keinerechnung=0;
+ }
+ if($vorabbezahltmarkieren!="1")
+ {
+ $vorabbezahltmarkieren=0;
+ }
+ if($autoversand!="1")
+ {
+ $autoversand=0;
+ }
+ if($fastlane!==1)
+ {
+ $fastlane=0;
+ }
+ $aktiv = 1;
+
+ if ($shop) {
+ $this->app->DB->Insert("INSERT INTO shopexport_zahlweisen (id,shop,zahlweise_shop,zahlweise_wawision,vorabbezahltmarkieren,aktiv,autoversand,keinerechnung,fastlane) VALUES
+ ('','$shop','$zahlweise_shop','$zahlweise_wawision','$vorabbezahltmarkieren','$aktiv','$autoversand','$keinerechnung',$fastlane)");
+ $insid = $this->app->DB->GetInsertID();
+ $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
+ $this->app->DB->Update("UPDATE shopexport_zahlweisen SET updatedby = '$bearbeiter' WHERE id = '$insid' LIMIT 1");
+ }
+
+ echo json_encode(array(
+ 'status' => 1,
+ 'statusText' => 'Gespeichert.'
+ ));
+ $this->app->ExitXentral();
+ }
+
+ public function ShopexportSubshopsave()
+ {
+ $id = (int)$this->app->Secure->GetPOST('id');
+ $shop = (int)$this->app->Secure->GetPOST('shop');
+ $subshopkennung = $this->app->Secure->GetPOST('subshopkennung');
+ $projekt = $this->app->Secure->GetPOST('projekt');
+ $sprache = $this->app->Secure->GetPOST('sprache');
+ $aktiv = 1;
+
+ $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' AND abkuerzung!='' LIMIT 1");
+
+ if ($shop && $subshopkennung && $projekt) {
+ $this->app->DB->Insert("INSERT INTO shopexport_subshop (id,shop,subshopkennung,projekt,sprache, aktiv) VALUES ('','$shop','$subshopkennung','$projekt','$sprache','$aktiv')");
+ $insid = $this->app->DB->GetInsertID();
+ $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
+ $this->app->DB->Update("UPDATE shopexport_subshop SET updatedby = '$bearbeiter' WHERE id = '$insid' LIMIT 1");
+
+ echo json_encode(array(
+ 'status' => 1,
+ 'statusText' => 'Gespeichert.'
+ ));
+ }
+ else {
+ echo json_encode(array(
+ 'status' => 0,
+ 'statusText' => 'Bitte alle Felder eingeben'
+ ));
+
+ }
+
+
+ $this->app->ExitXentral();
+ }
+
+ public function ShopexportFreifeldsave()
+ {
+ $id = (int)$this->app->Secure->GetPOST('id');
+ $shop = (int)$this->app->Secure->GetPOST('shop');
+ $freifeld_shop = $this->app->Secure->GetPOST('freifeld_shop');
+ $freifeld_wawi = $this->app->Secure->GetPOST('freifeld_wawi');
+ $aktiv = 1;
+
+ if ($shop && $freifeld_shop) {
+ $this->app->DB->Insert("INSERT INTO shopexport_freifelder (id,shop,freifeld_shop,freifeld_wawi,aktiv) VALUES
+ ('','$shop','$freifeld_shop','$freifeld_wawi','$aktiv')");
+ $insid = $this->app->DB->GetInsertID();
+ $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
+ $this->app->DB->Update("UPDATE shopexport_freifelder SET updatedby = '$bearbeiter' WHERE id = '$insid' LIMIT 1");
+ echo json_encode(array(
+ 'status' => 1,
+ 'statusText' => 'Gespeichert.'
+ ));
+ }
+ else {
+ echo json_encode(array(
+ 'status' => 0,
+ 'statusText' => 'Bitte Freifeld eingeben'
+ ));
+
+ }
+
+ $this->app->ExitXentral();
+ }
+
+ /**
+ * @throws Exception
+ */
+ public function ShopexportArtikelbaumexport(){
+ $shopid = (int)$this->app->Secure->GetPOST('id');
+ if($this->app->DB->Select(sprintf("SELECT id FROM prozessstarter WHERE parameter = 'onlineshops_tasks' AND aktiv = 1 LIMIT 1"))){
+ $command = 'sendartikelbaum';
+ $task = $this->app->DB->SelectRow('SELECT * FROM onlineshops_tasks WHERE shop_id=\'' . $shopid . '\' AND command=\'' . $command . '\'');
+ if(!empty($task['id'])){
+ if($task['status'] !== 'running'){
+ $this->app->DB->Update('UPDATE onlineshop_tasks SET status=\'inactive\',counter=0 WHERE id=' . $task['id']);
+ }
+ }
+ else{
+ $this->app->DB->Insert('INSERT INTO onlineshops_tasks (shop_id, command) VALUES (' . $shopid . ',\'' . $command . '\')');
+ }
+ echo json_encode(
+ array(
+ 'status' => 1,
+ 'statusText' => 'Aufgabe wurde zu Shoptasks hinzugefügt und wird im Hintergrund ausgeführt.'
+ ));
+ $this->app->ExitXentral();
+ }
+
+ $shopinfo = $this->app->DB->SelectRow("SELECT * FROM shopexport WHERE id ='$shopid'");
+ if($shopinfo['shoptyp'] === 'intern' && $this->app->erp->ModulVorhanden($shopinfo['modulename'])){
+
+ $obj = $this->app->erp->LoadModul($shopinfo['modulename']);
+
+ if($obj->canExportArticleTree()){
+
+ $kategorienbaum = null;
+
+ $this->app->erp->GetKategorienbaum($kategorienbaum, 0, 0, $shopid);
+
+ $this->app->remote->RemoteCommand($shopid, 'sendartikelbaum', $kategorienbaum);
+ }
+ }
+ echo json_encode(array(
+ 'status' => 1,
+ 'statusText' => 'Übertragung abgeschlossen.'
+ ));
+ $this->app->ExitXentral();
+ }
+
+ public function ShopexportZahlweiseeditsave()
+ {
+ $id = (int)$this->app->Secure->GetPOST('id');
+ $zahlweise_shop = $this->app->Secure->GetPOST('zahlweise_shop');
+ $zahlweise_wawision = $this->app->Secure->GetPOST('zahlweise_wawision');
+ $vorabbezahltmarkieren = $this->app->Secure->GetPOST('vorabbezahltmarkieren');
+ $autoversand = $this->app->Secure->GetPOST('autoversand');
+ $aktiv = $this->app->Secure->GetPOST('aktiv');
+ $keinerechnung = $this->app->Secure->GetPOST('keinerechnung');
+ $fastlane = (int)$this->app->Secure->GetPOST('fastlane');
+
+ if($vorabbezahltmarkieren!="1") {
+ $vorabbezahltmarkieren=0;
+ }
+ if($keinerechnung!="1")
+ {
+ $keinerechnung=0;
+ }
+ if($autoversand!="1")
+ {
+ $autoversand=0;
+ }
+ if($aktiv!="1")
+ {
+ $aktiv=0;
+ }
+ if($fastlane!==1)
+ {
+ $fastlane=0;
+ }
+
+ if ($id) {
+ $this->app->DB->Update("UPDATE shopexport_zahlweisen SET keinerechnung = '$keinerechnung', zahlweise_shop='$zahlweise_shop',zahlweise_wawision='$zahlweise_wawision',vorabbezahltmarkieren='$vorabbezahltmarkieren',autoversand='$autoversand',aktiv='$aktiv',fastlane = $fastlane WHERE id = '$id'");
+ $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
+ $this->app->DB->Update("UPDATE shopexport_zahlweisen SET updatedby = '$bearbeiter', updated = now() WHERE id = '$id'");
+ }
+
+ echo json_encode(array(
+ 'status' => 1,
+ 'statusText' => 'Gespeichert.'
+ ));
+ $this->app->ExitXentral();
+
+ }
+
+ public function ShopexportSprachenget()
+ {
+ $id = $this->app->Secure->GetPOST('id');
+ $row = $this->app->DB->SelectRow('
+ SELECT
+ s.id,
+ s.sprache,
+ s.land,
+ s.aktiv,
+ p.abkuerzung as projekt
+ FROM
+ shopexport_sprachen s LEFT JOIN projekt p ON s.projekt = p.id
+ WHERE
+ s.id = "' . $id . '"
+ ');
+ echo json_encode($row);
+ $this->app->ExitXentral();
+ }
+
+ public function ShopexportZahlweiseget() {
+ $id = $this->app->Secure->GetPOST('id');
+ $row = $this->app->DB->SelectRow('
+ SELECT
+ id,
+ zahlweise_shop,
+ zahlweise_wawision,
+ vorabbezahltmarkieren,
+ autoversand,
+ aktiv,
+ keinerechnung,
+ fastlane
+ FROM
+ shopexport_zahlweisen
+ WHERE
+ id = "' . $id . '"
+ ');
+
+ echo json_encode($row);
+ $this->app->ExitXentral();
+ }
+
+ public function ShopexportZahlweisedelete()
+ {
+ $id = (int)$this->app->Secure->GetGET("id");
+ $sid = $this->app->DB->Select("SELECT shop FROM shopexport_zahlweisen WHERE id='$id' LIMIT 1");
+
+ if($id > 0) {
+ $this->app->DB->Delete("DELETE FROM shopexport_zahlweisen WHERE id='$id' LIMIT 1");
+ $msg = $this->app->erp->base64_url_encode("Der Eintrag wurde entfernt!
");
+ $this->app->Location->execute("index.php?module=onlineshops&action=edit&id=$sid&msg=$msg#tabs-3");
+ }
+ }
+
+
+ public function ShopexportVersandartsave()
+ {
+ $id = (int)$this->app->Secure->GetGET('id');
+ $shop = (int)$this->app->Secure->GetPOST('shop');
+ $versandart_shop = $this->app->Secure->GetPOST('versandart_shop');
+ $versandart_wawision = $this->app->Secure->GetPOST('versandart_wawision');
+ $versandart_ausgehend = $this->app->Secure->GetPOST('versandart_ausgehend');
+ $produkt_ausgehend = $this->app->Secure->GetPOST('produkt_ausgehend');
+ $land = $this->app->Secure->GetPOST('land');
+ $autoversand = $this->app->Secure->GetPOST('autoversand');
+ $fastlane = (int)$this->app->Secure->GetPOST('fastlane');
+ if($fastlane !== 1)
+ {
+ $fastlane = 0;
+ }
+
+ if($autoversand!="1") $autoversand=0;
+
+ $aktiv = 1;
+
+ if ($shop) {
+ $this->app->DB->Update("INSERT INTO shopexport_versandarten (id,shop,versandart_shop,versandart_wawision,produkt_ausgehend,versandart_ausgehend,aktiv,autoversand,land,fastlane) VALUES
+ ('','$shop','$versandart_shop','$versandart_wawision','{$produkt_ausgehend}','$versandart_ausgehend','$aktiv','$autoversand','$land',$fastlane)");
+ }
+
+ echo json_encode(array(
+ 'status' => 1,
+ 'statusText' => 'Gespeichert.'
+ ));
+ $this->app->ExitXentral();
+
+ }
+
+ public function ShopexportSpracheneditsave()
+ {
+ $id = (int)$this->app->Secure->GetPOST('id');
+ $sprache = $this->app->Secure->GetPOST('sprache');
+ $land = $this->app->Secure->GetPOST('land');
+ $projekt = explode (' ',$this->app->Secure->GetPOST('projekt'));
+ $projekt = reset($projekt);
+ if($projekt) {
+ $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '$projekt' AND abkuerzung <> '' AND geloescht = 0 LIMIT 1");
+ }
+ $aktiv = $this->app->Secure->GetPOST('aktiv');
+ if($aktiv!="1") {
+ $aktiv=0;
+ }
+
+ if ($id) {
+ $this->app->DB->Update("UPDATE shopexport_sprachen SET land='$land',sprache='$sprache',projekt='$projekt',land='$land',
+ aktiv='$aktiv' WHERE id = '$id'");
+
+ $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
+ $this->app->DB->Update("UPDATE shopexport_sprachen SET updatedby = '$bearbeiter', updated = now() WHERE id = '$id'");
+ }
+
+ echo json_encode(array(
+ 'status' => 1,
+ 'statusText' => 'Gespeichert.'
+ ));
+ $this->app->ExitXentral();
+ }
+
+ public function ShopexportVersandarteditsave()
+ {
+ $id = (int)$this->app->Secure->GetPOST('id');
+ $versandart_shop = $this->app->Secure->GetPOST('versandart_shop');
+ $versandart_wawision = $this->app->Secure->GetPOST('versandart_wawision');
+ $versandart_ausgehend = $this->app->Secure->GetPOST('versandart_ausgehend');
+ $produkt_ausgehend = $this->app->Secure->GetPOST('produkt_ausgehend');
+ $autoversand = $this->app->Secure->GetPOST('autoversand');
+ $land = $this->app->Secure->GetPOST('land');
+ $aktiv = $this->app->Secure->GetPOST('aktiv');
+ $fastlane = (int)$this->app->Secure->GetPOST('fastlane');
+ if($fastlane !== 1)
+ {
+ $fastlane = 0;
+ }
+
+ if($aktiv!='1')
+ {
+ $aktiv=0;
+ }
+
+ if ($id) {
+ $this->app->DB->Update("UPDATE shopexport_versandarten SET versandart_shop='$versandart_shop',versandart_wawision='$versandart_wawision',versandart_ausgehend='$versandart_ausgehend',produkt_ausgehend='$produkt_ausgehend',autoversand='$autoversand',land='$land',
+ aktiv='$aktiv',fastlane= $fastlane WHERE id = '$id'");
+ $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
+ $this->app->DB->Update("UPDATE shopexport_versandarten SET updatedby = '$bearbeiter', updated = now() WHERE id = '$id'");
+ }
+
+ echo json_encode(array(
+ 'status' => 1,
+ 'statusText' => 'Gespeichert.'
+ ));
+ $this->app->ExitXentral();
+
+ }
+
+ public function ShopexportSubshopeditsave()
+ {
+ $id = (int)$this->app->Secure->GetPOST('id');
+ $subshopkennung = $this->app->Secure->GetPOST('subshopkennung');
+ $projekt = $this->app->Secure->GetPOST('projekt');
+ $aktiv = $this->app->Secure->GetPOST('aktiv');
+ $sprache = $this->app->Secure->GetPOST('sprache');
+
+ if($aktiv!='1') {
+ $aktiv=0;
+ }
+
+ $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' AND abkuerzung!='' LIMIT 1");
+
+ if ($id && $projekt > 0) {
+ $this->app->DB->Update("UPDATE shopexport_subshop SET subshopkennung='$subshopkennung',projekt='$projekt',sprache = '$sprache',
+ aktiv='$aktiv' WHERE id = '$id'");
+ $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
+ $this->app->DB->Update("UPDATE shopexport_subshop SET updatedby = '$bearbeiter', updated = now() WHERE id = '$id'");
+ echo json_encode(array(
+ 'status' => 1,
+ 'statusText' => 'Gespeichert.'
+ ));
+ }
+ else {
+ echo json_encode(array(
+ 'status' => 0,
+ 'statusText' => 'Projekt nicht vorhanden'
+ ));
+ }
+
+ $this->app->ExitXentral();
+
+ }
+
+
+ public function ShopexportFreifeldereditsave()
+ {
+ $id = (int)$this->app->Secure->GetPOST('id');
+ $freifeld_shop = $this->app->Secure->GetPOST('freifeld_shop');
+ $freifeld_wawi = $this->app->Secure->GetPOST('freifeld_wawi');
+ $aktiv = $this->app->Secure->GetPOST('aktiv');
+
+ if($aktiv!='1') {
+ $aktiv=0;
+ }
+
+ if ($id) {
+ $this->app->DB->Update("UPDATE shopexport_freifelder SET freifeld_wawi='$freifeld_wawi',freifeld_shop='$freifeld_shop',
+ aktiv='$aktiv' WHERE id = '$id'");
+ $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
+ $this->app->DB->Update("UPDATE shopexport_freifelder SET updatedby = '$bearbeiter', updated = now() WHERE id = '$id'");
+ }
+
+ echo json_encode(array(
+ 'status' => 1,
+ 'statusText' => 'Gespeichert.'
+ ));
+ $this->app->ExitXentral();
+
+ }
+
+ public function ShopexportVersandartget() {
+ $id = $this->app->Secure->GetPOST('id');
+ $row = $this->app->DB->SelectRow('
+ SELECT
+ id,
+ versandart_shop,
+ versandart_wawision,
+ produkt_ausgehend,
+ versandart_ausgehend,
+ autoversand,
+ land,
+ aktiv,
+ fastlane
+ FROM
+ shopexport_versandarten
+ WHERE
+ id = "' . $id . '"
+ ');
+
+ echo json_encode($row);
+ $this->app->ExitXentral();
+ }
+
+ public function ShopexportKundengruppenget() {
+ $id = $this->app->Secure->GetPOST('id');
+ $row = $this->app->DB->SelectRow("SELECT s.id, s.gruppeid, s.extgruppename, s.aktiv, s.apply_to_new_customers AS neukundengruppezuweisen, s.type, IF(s.projekt=0,'',p.abkuerzung) AS projekt, s.shopid
+ FROM shopexport_kundengruppen s LEFT JOIN projekt p ON s.projekt = p.id WHERE s.id='$id'");
+ echo json_encode($row);
+ $this->app->ExitXentral();
+ }
+
+ public function ShopexportSubshopget()
+ {
+ $id = $this->app->Secure->GetPOST('id');
+ $row = $this->app->DB->SelectRow('
+ SELECT
+ s.id,
+ s.subshopkennung,
+ p.abkuerzung as projekt,
+ s.sprache,
+ s.aktiv
+ FROM
+ shopexport_subshop s LEFT JOIN projekt p ON p.id=s.projekt
+ WHERE
+ s.id = "' . $id . '"
+ ');
+
+ echo json_encode($row);
+ $this->app->ExitXentral();
+ }
+
+
+ public function ShopexportFreifeldget()
+ {
+ $id = $this->app->Secure->GetPOST('id');
+ $row = $this->app->DB->SelectRow('
+ SELECT
+ id,
+ freifeld_shop,
+ freifeld_wawi,
+ aktiv
+ FROM
+ shopexport_freifelder
+ WHERE
+ id = "' . $id . '"
+ ');
+
+ echo json_encode($row);
+ $this->app->ExitXentral();
+ }
+
+
+ public function ShopexportVersandartdelete()
+ {
+ $id = (int)$this->app->Secure->GetGET('id');
+ $sid = $this->app->DB->Select("SELECT shop FROM shopexport_versandarten WHERE id='$id' LIMIT 1");
+ if($id > 0) {
+ $this->app->DB->Delete("DELETE FROM shopexport_versandarten WHERE id='$id' LIMIT 1");
+
+ $msg = $this->app->erp->base64_url_encode("Der Eintrag wurde entfernt!
");
+ $this->app->Location->execute("index.php?module=onlineshops&action=edit&id=$sid&msg=$msg#tabs-4");
+ }
+ }
+
+ public function ShopexportKundengruppendelete()
+ {
+ $id = (int)$this->app->Secure->GetGET('id');
+ $sid = $this->app->DB->Select("SELECT shopid FROM shopexport_kundengruppen WHERE id='$id' LIMIT 1");
+ if($id > 0 ) {
+ $this->app->DB->Delete("DELETE FROM shopexport_kundengruppen WHERE id='$id' LIMIT 1");
+
+ $msg = $this->app->erp->base64_url_encode("Der Eintrag wurde entfernt!
");
+ $this->app->Location->execute("index.php?module=onlineshops&action=edit&id=$sid&msg=$msg#tabs-8");
+ }
+}
+
+ public function ShopexportSprachendelete()
+ {
+ $id = (int)$this->app->Secure->GetGET('id');
+ $sid = $this->app->DB->Select("SELECT shop FROM shopexport_sprachen WHERE id='$id' LIMIT 1");
+ if($id > 0) {
+ $this->app->DB->Delete("DELETE FROM shopexport_sprachen WHERE id='$id' LIMIT 1");
+
+ $msg = $this->app->erp->base64_url_encode("Der Eintrag wurde entfernt!
");
+ $this->app->Location->execute("index.php?module=onlineshops&action=edit&id=$sid&msg=$msg#tabs-7");
+ }
+ }
+
+ public function ShopexportSubshopdelete()
+ {
+ $id = (int)$this->app->Secure->GetGET('id');
+ $sid = $this->app->DB->Select("SELECT shop FROM shopexport_subshop WHERE id='$id' LIMIT 1");
+ if($id > 0) {
+ $this->app->DB->Delete("DELETE FROM shopexport_subshop WHERE id='$id' LIMIT 1");
+
+ $msg = $this->app->erp->base64_url_encode("Der Eintrag wurde entfernt!
");
+ $this->app->Location->execute("index.php?module=onlineshops&action=edit&id=$sid&msg=$msg#tabs-6");
+ }
+ }
+
+ public function ShopexportFreifelddelete()
+ {
+ $id = (int)$this->app->Secure->GetGET('id');
+ $sid = $this->app->DB->Select("SELECT shop FROM shopexport_freifelder WHERE id='$id' LIMIT 1");
+ if($id > 0) {
+ $this->app->DB->Delete("DELETE FROM shopexport_freifelder WHERE id='$id' LIMIT 1");
+
+ $msg = $this->app->erp->base64_url_encode("Der Eintrag wurde entfernt!
");
+ $this->app->Location->execute("index.php?module=onlineshops&action=edit&id=$sid&msg=$msg#tabs-5");
+ }
+ }
+
+ protected function match($haystack, $needle)
+ {
+ $needle = strtolower($this->app->erp->UmlauteEntfernen($needle));
+ $haystack = strtolower($this->app->erp->UmlauteEntfernen($haystack));
+ $needlaa = explode(' ',$needle);
+ foreach($needlaa as $v) {
+ if($v &&strpos($haystack, $v) === false) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public function getApps($val = '')
+ {
+ $val = (String)$val;
+ $module = $this->app->erp->getApps();
+ if($module)
+ {
+ if(isset($module['installiert']))
+ {
+ foreach($module['installiert'] as $k => $v)
+ {
+ $module['installiert'][$k]['match'] = $this->match($v['Bezeichnung'], $val);
+ $module['installiert'][$k]['md5'] = md5($v['Bezeichnung']);
+ }
+ }
+ if(isset($module['kauf']))
+ {
+ foreach($module['kauf'] as $k => $v)
+ {
+ $module['kauf'][$k]['match'] = $this->match($v['Bezeichnung'], $val);
+ $module['kauf'][$k]['md5'] = md5($v['Bezeichnung']);
+ }
+ }
+ }
+ return $module;
+ }
+
+ /**
+ * @param int $shopId
+ *
+ * @return int|null
+ */
+ public function createShippingArticleByShopId($shopId): ?int
+ {
+ $shop = $this->app->DB->SelectRow(
+ sprintf(
+ "SELECT `s`.`projekt`, `art`.`id`
+ FROM `shopexport` AS `s`
+ LEFT JOIN `artikel` AS `art` ON `s`.`artikelporto` = art.id
+ AND (`art`.`geloescht` = 0 OR `art`.`geloescht` IS NULL)
+ AND (`art`.`intern_gesperrt` = 0 OR `art`.`intern_gesperrt` IS NULL)
+ WHERE `s`.`id` = %d ",
+
+ $shopId
+ )
+ );
+ if (empty($shop) || !empty($shop['id'])) {
+ return null;
+ }
+ $firstShippingArticle = $this->app->DB->SelectRow(
+ 'SELECT `art`.`id`
+ FROM `artikel` AS `art`
+ LEFT JOIN `projekt` AS `p` ON `art`.projekt = p.id
+ WHERE `art`.`porto` = 1
+ AND (`art`.`geloescht` IS NOT NULL OR `art`.geloescht = 0)
+ AND (`art`.`intern_gesperrt` = 0 OR `art`.`intern_gesperrt` IS NULL)
+ AND (`p`.`id` IS NULL OR p.`oeffentlich` = 1)
+ '
+ );
+ if (!empty($firstShippingArticle)) {
+ $this->app->DB->Update(
+ sprintf('UPDATE `shopexport` SET `artikelporto` = %d WHERE `id` = %d ',
+ (int)$firstShippingArticle['id'], $shopId
+ )
+ );
+
+ return (int)$firstShippingArticle['id'];
+ }
+ $shippingArticle = ['projekt' => $shop['projekt'], 'name_de' => 'Porto', 'proto' => 1];
+ $shippingArticle['nummer'] = $this->app->erp->GetNextArtikelnummer('', '1', $shop['projekt']);
+ $shippingArticleId = (int)$this->app->erp->InsertUpdateArtikel($shippingArticle);
+ if ($shippingArticleId <= 0) {
+ return null;
+ }
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE `shopexport` SET `artikelporto` = %d WHERE `id` = %d ',
+ $shippingArticleId, $shopId
+ )
+ );
+
+ return $shippingArticleId;
+ }
+
+ /**
+ * @param int $shopId
+ *
+ * @return int|null
+ */
+ public function createDiscountArticleForShop($shopId): ?int
+ {
+ $shop = $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT `s`.`projekt`, `art`.`id`
+ FROM `shopexport` AS `s`
+ LEFT JOIN `artikel` AS `art` ON `s`.`artikelrabatt` = art.id
+ AND (`art`.`geloescht` = 0 OR `art`.`geloescht` IS NULL)
+ AND (`art`.`intern_gesperrt` = 0 OR `art`.`intern_gesperrt` IS NULL)
+ WHERE `s`.`id` = %d',
+ $shopId
+ )
+ );
+ if (empty($shop) || !empty($shop['id'])) {
+ return null;
+ }
+ $discountArticle = [
+ 'projekt' => $shop['projekt'],
+ 'name_de' => 'Rabatt',
+ 'name_en' => 'Discount',
+ 'lagerartikel' => 0,
+ ];
+ $discountArticle['nummer'] = $this->app->erp->GetNextArtikelnummer('', '1', $shop['projekt']);
+ $discountArticleId = (int)$this->app->erp->InsertUpdateArtikel($discountArticle);
+ if ($discountArticleId <= 0) {
+ return null;
+ }
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE `shopexport` SET `artikelrabatt` = %d WHERE `id` = %d ',
+ $discountArticleId, $shopId
+ )
+ );
+
+ return $discountArticleId;
+ }
+
+ /**
+ * @param string $auswahlmodul
+ *
+ * @return array
+ */
+ public function createInternShop($auswahlmodul)
+ {
+ if($fehler = $this->app->erp->OnlineshopsLizenzFehler($auswahlmodul)) {
+ return ['success'=>false,'error'=>$fehler['Error']];
+ }
+ $bezeichnung = ucfirst(str_replace('shopimporter_','',$auswahlmodul));
+ $i = 1;
+ while($this->app->DB->Select("SELECT id FROM shopexport WHERE bezeichnung = '$bezeichnung' LIMIT 1")) {
+ $i++;
+ $bezeichnung = ucfirst(str_replace('shopimporter_','',$auswahlmodul)).' '.$i;
+ }
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO `shopexport`
+ (`shoptyp`, `modulename`,`artikelimport`,`demomodus`,`bezeichnung`,`artikeltexteuebernehmen`,
+ `versandartenmapping`,
+ `zahlungsweisenmapping`,`lagerexport`,`artikelexport`,`datumvon`,`auftragabgleich`,`portoartikelanlegen`,
+ `steuerfreilieferlandexport`,`multiprojekt`,`direktimport`,`rabatteportofestschreiben`)
+ VALUES ('intern','%s',1,1,'%s',1,1,1,0,0,now(),1,1,1,1,1,1)",
+ $auswahlmodul, $bezeichnung
+ )
+ );
+ $id = $this->app->DB->GetInsertID();
+ $obj = $this->app->erp->LoadModul($auswahlmodul);
+ if($obj && method_exists($obj, 'EinstellungenStruktur')) {
+ $struktur = $obj->EinstellungenStruktur();
+ if(isset($struktur['defaultoncreate']) && is_array($struktur['defaultoncreate'])) {
+ $this->app->DB->UpdateArr('shopexport',$id,'id',$struktur['defaultoncreate'],true);
+ }
+ }
+ $this->app->erp->InstallModul($auswahlmodul);
+ $this->app->erp->RunHook('shopexport_create', 1, $id);
+
+ return ['id'=>$id];
+ }
+
+ /**
+ * @param int $shopId
+ * @param null|array $post
+ */
+ public function saveCreateData($shopId, $post = null)
+ {
+ $shop = $this->app->DB->SelectRow(
+ sprintf('SELECT * FROM `shopexport` WHERE `id` = %d', $shopId)
+ );
+ $obj = $this->app->loadModule($shop['modulename']);
+ if($obj === null) {
+ return;
+ }
+ $form = $obj->getCreateForm();
+ $data = json_decode($shop['einstellungen_json'], true);
+ if(empty($data) || !is_array($data)) {
+ $data = ['felder'=>[]];
+ }
+ if(empty($data['felder']) || !is_array($data['felder'])) {
+ $data['felder'] = [];
+ }
+ if($post === null) {
+ foreach($form as $row) {
+ if(empty($row['inputs'])) {
+ continue;
+ }
+ foreach($row['inputs'] as $input) {
+ if(!empty($input['name'])){
+ $post[$input['name']] = !isset($this->app->Secure->POST[$input['name']])
+ ?null:$this->app->Secure->POST[$input['name']];
+ }
+ }
+ }
+ }
+ if(empty($post)) {
+ return;
+ }
+ foreach($post as $key => $value) {
+ $data['felder'][$key] = $value;
+ }
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE `shopexport` SET `einstellungen_json` = '%s' WHERE `id` = %d",
+ $this->app->DB->real_escape_string(json_encode($data)), $shopId
+ )
+ );
+ }
+
+ /**
+ * @var int ShopId
+ *
+ * @return JsonResponse
+ */
+ public function getVueShopexportSuccessPage($shopId)
+ {
+ $succespage = [
+ 'type' => 'defaultPage',
+ 'icon' => 'add-person-icon',
+ 'headline'=> 'Shop angelegt',
+ 'subHeadline'=> 'Der Shop wurde angelegt',
+ 'ctaButtons' => [
+ [
+ 'title' => 'Klasse',
+ 'action' => 'close',
+ 'link' => 'index.php?module=onlineshops&action=edit&id='.$shopId
+ ]
+ ]
+ ];
+
+ return new JsonResponse(
+ ['page'=>$succespage]
+ );
+ }
+
+ /**
+ * @param $shopId
+ * @param $data
+ *
+ * @return JsonResponse
+ */
+ public function getVueShopexportAppNewSuccessPageYt($shopId, $data): JsonResponse
+ {
+ $youtubeLink = 'https://www.youtube.com/embed/49PICIq3XP8';
+ $shopType = $this->app->DB->Select(
+ sprintf(
+ 'SELECT `modulename` FROM `shopexport` WHERE `id` = %d',
+ $shopId
+ )
+ );
+ if(!empty($shopType)
+ && ($shopModule = $this->app->loadModule($shopType)) !== null
+ && method_exists($shopModule, 'getYoutubeLink')
+ ) {
+ $youtubeLink = $shopModule->getYoutubeLink();
+ }
+
+ $buttons = [];
+ $data = json_decode($data, true);
+ if(!empty($data['url'])) {
+ $buttons[] =
+ [
+ 'title' => 'Zum Shop',
+ 'action' => 'close',
+ 'link' => $data['url'],
+ ];
+ }
+ $buttons[] =
+ [
+ 'title' => 'In Xentral bleiben',
+ 'action' => 'close',
+ 'link' => 'index.php?module=onlineshops&action=edit&id='.$shopId,
+ ];
+ $succespage = [
+ 'type' => 'defaultPage',
+ 'icon' => 'add-person-icon',
+ 'headline'=> 'Shop wurde verknüpft',
+ 'subHeadline'=> '',
+ 'headerMedia' => [
+ 'type' => 'video',
+ 'link' => $youtubeLink
+ ],
+
+ 'ctaButtons' => $buttons,
+ ];
+
+ return new JsonResponse(
+ [
+ 'page'=>$succespage,
+ ]
+ );
+ }
+
+ /**
+ * @var int $shopId
+ *
+ * @return JsonResponse
+ */
+ public function getVueShopexportAppNewSuccessPage($shopId, $data): JsonResponse
+ {
+ $succespage = [
+ 'type' => 'form',
+ 'submitType' => 'submit',
+ 'icon' => 'add-person-icon',
+ 'headline'=> 'Shop wurde verknüpft',
+ 'submitUrl' => 'index.php?module=onlineshops&action=appnew&cmd=createdata',
+ 'form' => [
+ 'id' => 0,
+ 'name' => 'createPriceGroupHead',
+ 'inputs' => [],
+ ],
+ 'subHeadline'=> '',
+ 'ctaButtons' => [
+ [
+ 'title' => 'Weiter',
+ 'type' => 'submit',
+ 'action' => 'submit',
+ ]
+ ]
+ ];
+
+ return new JsonResponse(
+ [
+ 'page'=>$succespage,
+ 'dataRequiredForSubmit' => [
+ 'step' => 2,
+ 'shopId' => $shopId,
+ 'data' => $data,
+ ]
+ ]
+ );
+ }
+
+ /**
+ * @return array[]
+ */
+ public function getPriceGroupForm(): array
+ {
+ $ret = [
+ [
+ 'id' => 0,
+ 'name' => 'createPriceGroupHead',
+ 'inputs' => [
+ [
+ 'label' => 'Neue Preisgruppe erstellen',
+ 'type' => 'checkbox',
+ 'name' => 'createPriceGroup',
+ 'validation' => false,
+ ],
+ ],
+ ],
+ [
+ 'id' => 1,
+ 'name' => 'usePriceGroupHead',
+ 'inputs' => [
+ [
+ 'label' => 'Bestehende Preisgruppe verwenden',
+ 'type' => 'select',
+ 'name' => 'usePriceGroup',
+ 'validation' => false,
+ 'options' => $this->getVuePriceGroups(),
+ ]
+ ],
+ ]
+ ];
+
+ return $ret;
+ }
+
+ /**
+ * @return array
+ */
+ public function getVuePriceGroups(): array
+ {
+ $priceGroups = array_merge(
+ [''=>''],
+ $this->app->DB->SelectPairs(
+ sprintf(
+ "SELECT g.kennziffer, g.name
+ FROM `gruppen` AS `g`
+ WHERE g.aktiv = 1 AND g.art = 'preisgruppe' %s
+ ORDER BY g.name",
+ $this->app->erp->ProjektRechte('g.projekt')
+ )
+ )
+ );
+
+ return $this->convertArrayToVueOptions($priceGroups);
+ }
+
+ /**
+ * @param array $array
+ *
+ * @return array
+ */
+ public function convertArrayToVueOptions($array)
+ {
+ if(empty($array) || !is_array($array)) {
+ return [];
+ }
+ $ret = [];
+ foreach($array as $value => $text) {
+ $ret[] = [
+ 'value' => $value,
+ 'text' => $text,
+ ];
+ }
+
+ return $ret;
+ }
+
+ /**
+ * @var null|array $options
+ *
+ * @return array[]
+ */
+ public function getFeatureForm($options = null): array
+ {
+ $ret = [];
+ if(!empty($options['canExportArticle'])) {
+ $ret[] = [
+ 'id' => 0,
+ 'name' => 'exportArticlesGroup',
+ 'inputs' => [
+ [
+ 'label' => 'Artikel übertragen',
+ 'type' => 'checkbox',
+ 'name' => 'export_articles',
+ 'validation' => false,
+ ],
+
+ ],
+ ];
+ }
+ if(!empty($options['canSyncArticles'])) {
+ $ret[] = [
+ 'id' => 1,
+ 'name' => 'syncArticlesGroup',
+ 'inputs' => [
+ [
+ 'label' => 'Lagerbestände synchronisieren',
+ 'type' => 'checkbox',
+ 'name' => 'sync_articles',
+ 'validation' => false,
+ ],
+
+ ],
+ ];
+ }
+ $ret[] = [
+ 'id' => 2,
+ 'name' => 'autoOrderGroup',
+ 'inputs' => [
+ [
+ 'label' => 'Neue Aufträge automatisch abholen',
+ 'type' => 'checkbox',
+ 'name' => 'auto_order',
+ 'validation' => false,
+ ],
+
+ ],
+ ];
+
+ return $ret;
+ }
+
+ /**
+ * @var string $moduleName
+ * @var string $shopName
+ * @var null|array $requiredForSubmit
+ * @var null|array $options
+ *
+ * @return JsonResponse
+ */
+ public function getPriceGroupPage($moduleName, $shopName, $requiredForSubmit = null, $options = null)
+ {
+ if($requiredForSubmit === null) {
+ $requiredForSubmit = $this->app->Secure->POST;
+ $requiredForSubmit['step'] = 10;
+ }
+
+ $page = [
+ 'type' => 'form',
+
+ 'submitType' => 'submit',
+ 'icon'=> 'password-icon',
+ 'headline' => $shopName,
+ 'subHeadline' => sprintf('Möchtest Du eine Preisgruppe für %s verwenden?', $shopName),
+ 'submitUrl' => 'index.php?module=onlineshops&action=create&cmd=saveassistent&shopmodule='.$moduleName,
+ 'form' => $this->getPriceGroupForm(),
+ 'ctaButtons' => [
+ [
+ 'title' => 'Weiter',
+ 'type' => 'submit',
+ 'action' => 'submit',
+ ],
+ ]
+ ];
+
+ return new JsonResponse(
+ [
+ 'page' => $page,
+ 'dataRequiredForSubmit' => $requiredForSubmit,
+ ]
+ );
+ }
+
+ /**
+ * @var string $moduleName
+ * @var string $shopName
+ * @var null|array $requiredForSubmit
+ * @var null|array $options
+ *
+ * @return JsonResponse
+ */
+ public function getStep2Page($moduleName, $shopName, $requiredForSubmit = null, $options = null)
+ {
+ if($requiredForSubmit === null) {
+ $requiredForSubmit = $this->app->Secure->POST;
+ $requiredForSubmit['step'] = 2;
+ }
+ $page = [
+ 'type' => 'form',
+
+ 'submitType' => 'submit',
+ 'icon'=> 'password-icon',
+ 'headline' => $shopName,
+ 'subHeadline' => 'Welche Features möchtest du nutzen?',
+ 'submitUrl' => 'index.php?module=onlineshops&action=create&cmd=saveassistent&shopmodule='.$moduleName,
+ 'form' => $this->getFeatureForm($options),
+ 'ctaButtons' => [
+ [
+ 'title' => 'Weiter',
+ 'type' => 'submit',
+ 'action' => 'submit',
+ ],
+ ]
+ ];
+
+ return new JsonResponse(
+ [
+ 'page' => $page,
+ 'dataRequiredForSubmit' => $requiredForSubmit,
+ ]
+ );
+ }
+
+ /**
+ * @param string $moduleName
+ * @param string $shopName
+ * @param null|array $requiredForSubmit
+ * @param null|array $options
+ *
+ * @return JsonResponse
+ */
+ public function getExportArticlePage($moduleName, $shopName, $requiredForSubmit = null, $options = null)
+ {
+ if($requiredForSubmit === null) {
+ $requiredForSubmit = $this->app->Secure->POST;
+ $requiredForSubmit['step'] = 3;
+ }
+
+ $capabilites = ShopimporterBase::shopCapabilities();
+ $capabilites = empty($capabilites[$moduleName])?[]:$capabilites[$moduleName];
+ $pictures = !empty($capabilites['bilder'])
+ && $capabilites['bilder']['createarticle'] === ShopimporterBase::CAN;
+ $attributes = !empty($capabilites['eigenschaften'])
+ && $capabilites['eigenschaften']['createarticle'] === ShopimporterBase::CAN;
+ $categories= !empty($capabilites['kategorie'])
+ && $capabilites['kategorie']['createarticle'] === ShopimporterBase::CAN;
+ $variants = !empty($capabilites['varianten'])
+ && $capabilites['varianten']['createarticle'] === ShopimporterBase::CAN;
+ $crossselling = !empty($capabilites['crossselling'])
+ && $capabilites['crossselling']['createarticle'] === ShopimporterBase::CAN;
+ $bulkPrices = !empty($capabilites['staffelpreise'])
+ && $capabilites['staffelpreise']['createarticle'] === ShopimporterBase::CAN;
+
+
+ $exportOptions = [
+ [
+ 'text' => '',
+ 'value' => '',
+ ]
+ ];
+ if(!empty($options['canExportArticle'])){
+ $exportOptions[] = [
+ 'text' => 'xentral zum Shop',
+ 'value' => 'x2s',
+ ];
+ }
+ if(!empty($options['canImportArticle'])) {
+ $exportOptions[] = [
+ 'text' => 'Shop zu xentral',
+ 'value' => 's2x',
+ ];
+ }
+
+ $forms = [
+ [
+ 'id' => 0,
+ 'name' => 'exportFromGroup',
+ 'inputs' => [
+ [
+ 'label' => 'Richtung',
+ 'type' => 'select',
+ 'name' => 'exportFrom',
+ 'validation' => false,
+ 'options' => $exportOptions,
+ ],
+ ],
+ ],
+ ];
+ if($pictures) {
+ $forms[] = [
+ 'id' => 1,
+ 'name' => 'syncPicturesGroup',
+ 'inputs' => [
+ [
+ 'label' => 'Bilder mit übertragen',
+ 'type' => 'checkbox',
+ 'name' => 'sync_picture',
+ 'validation' => false,
+ ],
+
+ ],
+ ];
+ }
+ if($attributes) {
+ $forms[] = [
+ 'id' => 2,
+ 'name' => 'syncAttributesGroup',
+ 'inputs' => [
+ [
+ 'label' => 'Eigenschaften mit übertragen',
+ 'type' => 'checkbox',
+ 'name' => 'sync_attributes',
+ 'validation' => false,
+ ],
+ ],
+ ];
+ }
+ if($categories) {
+ $forms[] = [
+ 'id' => 3,
+ 'name' => 'syncCategoriesGroup',
+ 'inputs' => [
+ [
+ 'label' => 'Kategorien mit übertragen',
+ 'type' => 'checkbox',
+ 'name' => 'sync_categories',
+ 'validation' => false,
+ ],
+ ],
+ ];
+ }
+ if($variants) {
+ $forms[] = [
+ 'id' => 4,
+ 'name' => 'syncVariantsGroup',
+ 'inputs' => [
+ [
+ 'label' => 'Varianten mit übertragen',
+ 'type' => 'checkbox',
+ 'name' => 'sync_variants',
+ 'validation' => false,
+ ],
+ ],
+ ];
+ }
+ if($crossselling) {
+ $forms[] = [
+ 'id' => 5,
+ 'name' => 'syncCrosssellingGroup',
+ 'inputs' => [
+ [
+ 'label' => 'Crossselling mit übertragen',
+ 'type' => 'checkbox',
+ 'name' => 'sync_crossselling',
+ 'validation' => false,
+ ],
+ ],
+ ];
+ }
+ if($bulkPrices) {
+ $forms[] = [
+ 'id' => 6,
+ 'name' => 'syncBulkpricesGroup',
+ 'inputs' => [
+ [
+ 'label' => 'Staffelpreise mit übertragen',
+ 'type' => 'checkbox',
+ 'name' => 'sync_bulkprices',
+ 'validation' => false,
+ ],
+ ],
+ ];
+ }
+
+ $page = [
+ 'type' => 'form',
+ 'submitType' => 'submit',
+ 'icon'=> 'password-icon',
+ 'headline' => $shopName,
+ 'subHeadline' => 'Welche Artikeldaten sollen übertragen werden?',
+ 'submitUrl' => 'index.php?module=onlineshops&action=create&cmd=saveassistent&shopmodule='.$moduleName,
+ 'form' => $forms,
+ 'ctaButtons' => [
+ [
+ 'title' => 'Weiter',
+ 'type' => 'submit',
+ 'action' => 'submit',
+ ],
+ ]
+ ];
+
+ return new JsonResponse(
+ [
+ 'page' => $page,
+ 'dataRequiredForSubmit' => $requiredForSubmit,
+ ]
+ );
+ }
+
+ /**
+ * @param string $module
+ *
+ * @return JsonResponse
+ */
+ public function getBoosterVue($module)
+ {
+ /** @var Appstore $appstore */
+ $appstore = $this->app->loadModule('appstore');
+ $moduleName = $appstore->getAppNameByKey($module);
+ $shopModule = $this->app->loadModule($module);
+ if($moduleName === null) {
+ $moduleName = ucfirst(substr($module, 13));
+ }
+ $headLine = $moduleName;
+ $subHeadline = 'Bitte gehe auf '.$moduleName.' und verbinden Dich mit dienem Xentral';
+ if($shopModule !== null && method_exists($shopModule, 'getBoosterSubHeadline')) {
+ $subHeadline = $shopModule->getBoosterSubHeadline();
+ }
+ if($shopModule !== null && method_exists($shopModule, 'getBoosterHeadline')) {
+ $headLine = $shopModule->getBoosterHeadline();
+ }
+ $page = [
+ 'type' => 'defaultPage',
+ 'icon'=> 'password-icon',
+ 'headline' => $headLine,
+ 'subHeadline' => $subHeadline,
+ 'ctaButtons' => [
+ [
+ 'title' => 'OK',
+ 'type' => 'close',
+ 'action' => 'close',
+ ],
+ ]
+ ];
+
+ $ret = [
+ 'pages'=>
+ [
+ $page
+ ],
+ ];
+
+ return new JsonResponse($ret);
+ }
+
+ public function ShopexportCreate()
+ {
+ $cmd = $this->app->Secure->GetGET('cmd');
+ $auswahlmodul = (string)$this->app->Secure->GetPOST('auswahl');
+ if(empty($auswahlmodul)) {
+ $auswahlmodul = (string)$this->app->Secure->GetGET('auswahl');
+ }
+ if(empty($auswahlmodul)) {
+ $auswahlmodul = (string)$this->app->Secure->GetPOST('shopmodule');
+ }
+ if(strpos($auswahlmodul, 'shopimporter_') === 0 && substr($auswahlmodul, -7) === 'booster') {
+ $module = substr($auswahlmodul, 0, -7);
+ if($cmd === 'getassistant') {
+ return $this->getBoosterVue($module);
+ }
+ $this->app->Location->execute('index.php?module=onlineshops&action=create&cmd='.$module.'&sid=booster');
+ }
+ if(strpos($cmd, 'shopimporter_') === 0) {
+ $sid = $this->app->Secure->GetGET('sid');
+ if($sid === 'booster') {
+ $this->app->Tpl->Add(
+ 'TAB1',
+ ''
+ );
+ }
+ else{
+ /** @var ShopimporterBase $obj */
+ $obj = $this->app->loadModule($cmd);
+ if($obj !== null && method_exists($obj, 'AuthByAssistent')){
+ $this->app->Tpl->Add(
+ 'TAB1',
+ ''
+ );
+ }
+ }
+ }
+ if($cmd === 'saveassistent') {
+ $shopId = $this->app->Secure->GetPOST('id','','',true);
+ $shopModule = $this->app->Secure->GetPOST('shopmodule');
+ $syncArticles = !empty($this->app->Secure->GetPOST('sync_articles'));
+ $autoOrder = !empty($this->app->Secure->GetPOST('auto_order'));
+ $syncPicture = !empty($this->app->Secure->GetPOST('sync_picture'));
+ $syncCategories = !empty($this->app->Secure->GetPOST('sync_categories'));
+ $syncAttributes = !empty($this->app->Secure->GetPOST('sync_attributes'));
+ $syncVariants = !empty($this->app->Secure->GetPOST('sync_variants'));
+ $syncCrossselling = !empty($this->app->Secure->GetPOST('sync_crossselling'));
+ $syncBulkprices = !empty($this->app->Secure->GetPOST('sync_bulkprices'));
+ $exportFrom = $this->app->Secure->GetPOST('exportFrom');
+ $step = (int)$this->app->Secure->GetPOST('step');
+ $exportArticles = !empty($this->app->Secure->GetPOST('export_articles'));
+ $usePriceGroup = (string)$this->app->Secure->GetPOST('usePriceGroup');
+ $createPriceGroup = !empty($this->app->Secure->GetPOST('createPriceGroup'));
+ if($shopId === 'NEW'){
+ $postData = $this->app->Secure->POST;
+ /** @var ShopimporterBase $obj */
+ $obj = $this->app->loadModule($shopModule);
+ $canImportArticle = false;
+ if($obj !== null && method_exists($obj, 'AuthByAssistent')) {
+ $json = $obj->AuthByAssistent();
+ if($json instanceof JsonResponse) {
+ return $json;
+ }
+ if(method_exists($obj,'ImportGetArticleList')) {
+ $canImportArticle = true;
+ }
+ }
+
+ if($obj !== null && method_exists($obj, 'updatePostDataForAssistent')) {
+ $postData = $obj->updatePostDataForAssistent($postData);
+ }
+ $options = [
+ 'canImportArticle' => $canImportArticle,
+ 'canExportArticle' => true,
+ 'canSyncArticles' => true,
+ 'canExportPrice' => true,
+ ];
+ if($obj !== null && method_exists($obj, 'getExportArticleOptions')) {
+ $options = $obj->getExportArticleOptions($options);
+ }
+ if($step < 2) {
+ $postData['step'] = 2;
+
+ return $this->getStep2Page($shopModule, ucfirst(substr($shopModule, 13)), $postData, $options);
+ }
+ if($step === 2 && $exportArticles) {
+ $postData['step'] = 3;
+ return $this->getExportArticlePage(
+ $shopModule,
+ ucfirst(substr($shopModule, 13)),
+ $postData,
+ $options
+ );
+ }
+ if($step >= 2 && $step < 10 && !empty($options['canExportPrice'])) {
+ $postData['step'] = 10;
+ return $this->getPriceGroupPage($shopModule, ucfirst(substr($shopModule, 13)), $postData, $options);
+ }
+
+ $check = $this->createInternShop($shopModule);
+ if(!empty($check['error'])){
+ $data = ['error' => $check['error']];
+ return new JsonResponse($data, JsonResponse::HTTP_BAD_REQUEST);
+ }
+ if(!empty($check['id'])){
+ $shopId = $check['id'];
+ $this->createShippingArticleByShopId($shopId);
+ $this->createDiscountArticleForShop($shopId);
+ if(method_exists($obj, 'getStructureDataForClickByClickSave')) {
+ $structureData = $obj->getStructureDataForClickByClickSave();
+ if(!empty($structureData)) {
+ $this->saveCreateData($shopId, $structureData);
+ }
+ }
+ if(method_exists($obj, 'afterCreateClickByClick')) {
+ $obj->afterCreateClickByClick($shopId);
+ }
+ }
+ }
+ if($shopId > 0) {
+ $this->saveCreateData($shopId);
+ $shopArr = [];
+ if($exportFrom === 'x2s') {
+ $shopArr['autosendarticle'] = 1;
+ $shopArr['artikelexport'] = 1;
+ }
+ if($syncPicture) {
+ $shopArr['shopbilderuebertragen'] = 1;
+ }
+ if($syncCategories) {
+ $shopArr['kategorienuebertragen'] = 1;
+ }
+ if($syncAttributes) {
+ $shopArr['eigenschaftenuebertragen'] = 1;
+ }
+ if($syncVariants) {
+ $shopArr['variantenuebertragen'] = 1;
+ }
+ if($syncCrossselling) {
+ $shopArr['crosssellingartikeluebertragen'] = 1;
+ }
+ if($syncBulkprices) {
+ $shopArr['staffelpreiseuebertragen'] = 1;
+ }
+ if($syncArticles) {
+ $shopArr['lagerexport'] = 1;
+ }
+ if($autoOrder) {
+ $shopArr['cronjobaktiv'] = 1;
+ $shopArr['demomodus'] = 0;
+ }
+ if($obj !== null && method_exists($obj, 'updateShopexportArr')) {
+ $shopArr = $obj->updateShopexportArr($shopArr, $postData);
+ }
+ if(empty($shopArr['preisgruppe'])){
+ if($usePriceGroup !== '') {
+ $shopArr['preisgruppe'] = $this->getPriceGroupIdFromCode($usePriceGroup);
+ }
+ elseif($createPriceGroup){
+ $shopArr['preisgruppe'] = $this->createPriceGroupByShopId($shopId);
+ }
+ }
+ if(!empty($shopArr)) {
+ $this->app->DB->UpdateArr('shopexport', $shopId, 'id', $shopArr, true);
+ }
+
+ if($autoOrder && method_exists($obj, 'EinstellungenStruktur')) {
+ $stucture = $obj->EinstellungenStruktur();
+ if(empty($stucture['ausblenden']) || !in_array('zeitraum',$stucture['ausblenden'])) {
+ $shopArr = [
+ 'anzgleichzeitig' => 50,
+ 'datumvon' => date('Y-m-d H:i:s'),
+ ];
+ $this->app->DB->UpdateArr('shopexport', $shopId, 'id', $shopArr, true);
+ }
+ }
+
+ if($exportFrom === 's2x') {
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO `onlineshops_tasks`
+ (`shop_id`, `command`, `status`, `counter`, `created`, `lastupdate`)
+ VALUES (%d, 'GetArticleList', 'created', 0, NOW(), NOW())",
+ $shopId
+ )
+ );
+ }
+ return $this->getVueShopexportSuccessPage($shopId);
+ }
+ $data = ['error' => 'Unknown error'];
+
+ return new JsonResponse($data, JsonResponse::HTTP_BAD_REQUEST);
+ }
+
+ if($cmd === 'getbooster') {
+ $module = $this->app->Secure->GetPOST('shopmodule');
+ return $this->getBoosterVue($module);
+ }
+
+ if($cmd === 'getassistant') {
+ $module = $this->app->Secure->GetPOST('shopmodule');
+ $isBooster = substr($module, -7) === 'booster';
+ $obj = $this->app->loadModule($module);
+ if($obj === null && $isBooster) {
+ $module = substr($module, 0, -7);
+ return $this->getBoosterVue($module);
+ }
+ if(!method_exists($obj, 'getCreateForm')) {
+ return new JsonResponse(['location' => 'index.php?module=onlineshops&action=create&auswahl='.$module]);
+ }
+ $form = $obj->getCreateForm();
+ if(!empty($form)) {
+ $form[(!empty($form)?count($form):0) - 1]['link'] = [
+ 'link' => 'index.php?module=onlineshops&action=create&auswahl=' . $module,
+ 'title' => 'Expertenmodus',
+ ];
+ }
+ $page = [
+ 'type' => 'form',
+ 'dataRequiredForSubmit' =>
+ [
+ 'shopmodule' => $module,
+ 'id' => 'NEW',
+ ],
+ 'submitType' => 'submit',
+ 'icon'=> 'password-icon',
+ 'headline' => ucfirst(substr($module, 13)),
+ 'subHeadline' => method_exists($obj, 'getClickByClickHeadline')?$obj->getClickByClickHeadline():'Bitte Zugangsdaten eingeben',
+ 'submitUrl' => 'index.php?module=onlineshops&action=create&cmd=saveassistent&shopmodule='.$module,
+ 'form' => $form,
+ 'ctaButtons' => [
+ [
+ 'title' => 'Weiter',
+ 'type' => 'submit',
+ 'action' => 'submit',
+ ],
+ ]
+ ];
+
+ $ret = [
+ 'pages'=>
+ [
+ $page
+ ],
+ ];
+
+ return new JsonResponse($ret);
+ }
+
+ $module = $this->getApps($this->app->Secure->GetPOST('val'));
+
+ if($cmd === 'suche') {
+ $anzeigen = '';
+ $ausblenden = '';
+ if($module) {
+ if(isset($module['installiert'])) {
+ foreach($module['installiert'] as $k => $v) {
+ if($v['match']){
+ if($anzeigen != '') {
+ $anzeigen .= ';';
+ }
+ $anzeigen .= 'm'.md5($v['Bezeichnung']);
+ }
+ else {
+ if($ausblenden != '') {
+ $ausblenden .= ';';
+ }
+ $ausblenden .= 'm'.md5($v['Bezeichnung']);
+ }
+ }
+ }
+ if(isset($module['kauf'])) {
+ foreach($module['kauf'] as $k => $v) {
+ if($v['match']) {
+ if($anzeigen != '') {
+ $anzeigen .= ';';
+ }
+ $anzeigen .= 'm'.md5($v['Bezeichnung']);
+ }
+ else {
+ if($ausblenden != '') {
+ $ausblenden .= ';';
+ }
+ $ausblenden .= 'm'.md5($v['Bezeichnung']);
+ }
+ }
+ }
+ }
+ echo json_encode(array('anzeigen'=>$anzeigen,'ausblenden'=>$ausblenden));
+ $this->app->ExitXentral();
+ }
+
+ if($this->app->Secure->GetGET('auswahl')) {
+ //$bezeichnung = $this->app->Secure->GetPOST('bezeichnung');
+ $auswahlmodul = $this->app->Secure->GetGET('auswahl');
+ if($auswahlmodul === 'extern') {
+ $bezeichnung = 'Onlineshop';
+ $i = 1;
+ while($this->app->DB->Select(
+ sprintf("SELECT `id` FROM `shopexport` WHERE `bezeichnung` = '%s' LIMIT 1", $bezeichnung))) {
+ $i++;
+ $bezeichnung = 'Onlineshop '.$i;
+ }
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO `shopexport`
+ (
+ `artikelimport`,`demomodus`,`bezeichnung`,`artikeltexteuebernehmen`,`versandartenmapping`,
+ `zahlungsweisenmapping`, `lagerexport`,`artikelexport`,`datumvon`,`auftragabgleich`,
+ `portoartikelanlegen`,`steuerfreilieferlandexport`,`multiprojekt`
+ )
+ VALUES (1,1,'%s',1,1,1,0,0,now(),1,1,1,1)",
+ $bezeichnung
+ )
+ );
+ $id = $this->app->DB->GetInsertID();
+ $this->app->erp->RunHook('shopexport_create', 1, $id);
+ $this->app->Location->execute('index.php?module=onlineshops&action=edit&id='.$id.'#tabs-2');
+ }
+ if($this->app->erp->ModulVorhanden($auswahlmodul)) {
+ $check = $this->createInternShop($auswahlmodul);
+ if(!empty($check['error'])) {
+ $msg = $this->app->erp->base64_url_encode(''.$check['Error'].'
');
+ $this->app->Location->execute('index.php?module=onlineshops&action=list&msg='.$msg);
+ }
+ $this->app->Location->execute('index.php?module=onlineshops&action=edit&id='.$check['id']);
+ }
+ }
+
+ /** @var Appstore $appstore */
+ $appstore = $this->app->erp->LoadModul('appstore');
+ $modullist = $this->app->erp->getApps();
+ $appstore->AddModuleHtml(
+ $modullist, 'shopimporter_', 'index.php?module=onlineshops&action=create&get=',
+ [
+ 'title' => 'Extern',
+ 'link' => 'index.php?module=onlineshops&action=create&auswahl=extern',
+ ]
+ );
+
+ $this->ShopexportMenu();
+ $this->app->ModuleScriptCache->IncludeWidgetNew('ClickByClickAssistant');
+ $this->app->Tpl->Parse('PAGE', 'shopexport_neu.tpl');
+ }
+
+ /**
+ * @param int $shopId
+ *
+ * @return int|null
+ */
+ public function createPriceGroupByShopId($shopId): ?int
+ {
+ $shopName = $this->app->DB->Select(sprintf('SELECT `bezeichnung` FROM `shopexport` WHERE `id` = %d', $shopId));
+ $startCode = preg_replace('/[^A-Z0-9]/','',str_replace(' ', '', strtoupper($shopName)));
+ $code = $startCode;
+ $startName = $shopName;
+ $name = $startName;
+ $counter = 0;
+ while(
+ (int)$this->app->DB->Select(
+ sprintf(
+ "SELECT COUNT(`id`) FROM `gruppen` WHERE `kennziffer` = '%s' OR `name` = '%s'",
+ $this->app->DB->real_escape_string($code), $this->app->DB->real_escape_string($name)
+ )
+ ) > 0
+ ) {
+ $counter++;
+ $code = $startCode.$counter;
+ $name = $startName.' '.$counter;
+ }
+
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO `gruppen` (`name`, `art`, `kennziffer`, `aktiv`, `webid`)
+ VALUES ('%s', 'preisgruppe', '%s', 1, '') ",
+ $this->app->DB->real_escape_string($name), $this->app->DB->real_escape_string($code)
+ )
+ );
+ $groupId = (int)$this->app->DB->GetInsertID();
+ if($groupId <= 0) {
+ return null;
+ }
+
+ return $groupId;
+ }
+
+ /**
+ * @param string $code
+ *
+ * @return int|null
+ */
+ public function getPriceGroupIdFromCode($code): ?int
+ {
+ $groupId = $this->app->DB->Select(
+ sprintf(
+ "SELECT g.id
+ FROM `gruppen` AS `g`
+ WHERE g.aktiv = 1 AND g.art = 'preisgruppe' AND g.kennziffer = '%s' %s
+ ORDER BY g.name
+ LIMIT 1",
+ $this->app->DB->real_escape_string($code), $this->app->erp->ProjektRechte('g.projekt')
+ )
+ );
+ if(empty($groupId)) {
+ return null;
+ }
+
+ return (int)$groupId;
+ }
+
+ public function ShopexportList()
+ {
+ $this->ShopexportMenu();
+
+ if($this->app->DB->Select("SELECT id FROM shopexport WHERE aktiv = 1 AND cronjobaktiv LIMIT 1"))
+ {
+ if(!$this->app->DB->Select("SELECT id FROM prozessstarter WHERE parameter = 'shopimport' AND aktiv = 1 AND art = 'periodisch' LIMIT 1"))
+ {
+ if($this->app->DB->Select("SELECT id FROM prozessstarter WHERE parameter = 'shopimport' AND aktiv = 1 AND art <> 'periodisch' LIMIT 1"))
+ {
+ $this->app->Tpl->Add('MESSAGE', '{|Der Prozessstarter "shopimport" ist auf "Uhrzeit" eingestellt. Es werden die Einstellungen "periodisch" mit der Periode 5 empfohlen|}
');
+ }
+ }
+ }
+
+ parent::ShopexportList();
+ }
+
+ public function ShopexportArtikelList()
+ {
+
+ // Copied from shopexport (dirty)
+ $id = (int)$this->app->Secure->GetGET('id');
+ $delcache = $this->app->Secure->GetPOST('delcache');
+ $delcacheselected = $this->app->Secure->GetPOST('delcacheselected');
+
+ // Process multi action
+ $where = "1";
+ $auswahl = $this->app->Secure->GetPOST('auswahl');
+ $selectedIds = [];
+ if(!empty($auswahl)) {
+ foreach($auswahl as $selectedId) {
+ $selectedId = (int)$selectedId;
+ if($selectedId > 0) {
+ $selectedIds[] = $selectedId;
+ }
+ }
+ $where = "a.id IN (".implode(",",$selectedIds).")";
+ }
+
+ if(!empty($delcache) || !empty($delcacheselected)) {
+ $anz = 0;
+ if($id > 0) {
+ $this->app->DB->Update("UPDATE artikel a
+ LEFT JOIN (SELECT artikel FROM artikel_onlineshops WHERE shop = '$id' AND aktiv = 1 GROUP BY artikel) oa ON a.id = oa.artikel
+ SET a.cache_lagerplatzinhaltmenge = -999 WHERE (a.shop = '$id' OR a.shop2 = '$id' OR a.shop3 = '$id' OR NOT ISNULL(oa.artikel)) AND a.geloescht = 0 AND ($where)");
+ $anz = $this->app->DB->affected_rows();
+ $this->app->erp->LogFile("Lagerzahlencache zurückgesetzt für $anz Artikel, shopid: $id");
+ $this->app->Tpl->Add('MESSAGE','Lagerzahlencache zurückgesetzt für '.$anz.' Artikel, shopid: '.$id.'
');
+ }
+ }
+
+ $this->ShopexportMenu();
+ $this->app->YUI->TableSearch('TAB1','shopexport_artikellist', "show", "", "", basename(__FILE__), __CLASS__);
+ $this->app->Tpl->Parse('PAGE', "shopexport_artikellist.tpl");
+ }
+
+
+ /**
+ * @param array $importerCapabilities
+ * @param array $featureKeys
+ * @param array $shopNames
+ * @param array $sequence
+ *
+ * @return array
+ */
+ protected function getShopFeaturesSorted($importerCapabilities, $featureKeys, $shopNames, $sequence): array
+ {
+ $data = [];
+
+ $sequence = array_intersect($sequence, array_keys($importerCapabilities));
+
+ $cShops = (!empty($sequence)?count($sequence):0);
+ $cTables = (int)ceil($cShops / 10);
+ $cTablesPerRow = (int)ceil($cShops / $cTables);
+
+ for($iTable = 0; $iTable < $cTables; $iTable++) {
+ $data[$iTable]['tabheader']['tabdescription'] = '';
+ }
+ foreach($sequence as $shopKey => $shop) {
+ $iTable = (int)floor($shopKey / $cTablesPerRow);
+ $data[$iTable]['tabheader'][$shop] = $shopNames[$shop];
+ }
+ foreach($featureKeys as $featureKey) {
+ $name = !empty($baseImporterCapabilities[$featureKey]['name'])?$baseImporterCapabilities[$featureKey]['name']:$featureKey;
+ for($iTable = 0; $iTable < $cTables; $iTable++) {
+ $data[$iTable][$featureKey]['tabdescription'] = html_entity_decode($name);
+ }
+ foreach($sequence as $shopKey => $shop) {
+ $iTable = (int)floor($shopKey / $cTablesPerRow);
+ $data[$iTable][$featureKey][$shop] = [
+ 'export' => !empty($importerCapabilities[$shop][$featureKey]['createarticle'])?$importerCapabilities[$shop][$featureKey]['createarticle']:null,
+ 'import' => !empty($importerCapabilities[$shop][$featureKey]['importarticle'])?$importerCapabilities[$shop][$featureKey]['importarticle']:null];
+ }
+ }
+
+ return $data;
+ }
+
+ public function ShopexportFeatures()
+ {
+ $this->ShopexportMenu();
+ /** @var ShopimporterBase $obj */
+ $obj = new ShopimporterBase();
+ $baseImporterCapabilities = $obj->importerCapability();
+ $featureKeys = [array_keys($baseImporterCapabilities)];
+ $module = $this->getApps();
+ $importerCapabilities = [];
+ $shopNames = [];
+
+ $shopCapabilities = ShopimporterBase::shopCapabilities();
+ foreach ($shopCapabilities as $shopModule => $capabilities){
+ $importerCapabilities[$shopModule] = $capabilities;
+ $featureKeys[] = array_keys($capabilities);
+ $shopNames[$shopModule] = ucfirst(str_replace('shopimporter_','',$shopModule));
+ }
+
+ $featureKeys = array_merge(...$featureKeys);
+ $featureKeys = array_unique($featureKeys);
+
+ //fuer marketing auftrag immer importierbar zeigen
+ foreach ($importerCapabilities as &$item) {
+ if ($item['auftrag']['importarticle'] === 4) {
+ $item['auftrag']['importarticle'] = 3;
+ }
+ }
+ unset($item);
+
+ $sequenceShop = [
+ 'shopimporter_shopware',
+ 'shopimporter_shopware6',
+ 'shopimporter_shopify',
+ 'shopimporter_magento',
+ 'shopimporter_magento2',
+ 'shopimporter_woocommerce',
+ 'shopimporter_gambio',
+ 'shopimporter_oxid',
+ 'shopimporter_presta',
+ 'shopimporter_getcore',
+ 'shopimporter_epages',
+ 'shopimporter_spryker',
+ 'shopimporter_hhg',
+ 'shopimporter_modified',
+ ];
+ $sequenceMarket = [
+ 'shopimporter_amazon',
+ 'shopimporter_ebay',
+ 'shopimporter_real',
+ 'shopimporter_hood',
+ 'shopimporter_rakuten',
+ 'shopimporter_manomano',
+ 'shopimporter_etsy',
+ 'shopimporter_cdiscount',
+ ];
+ $sequenceMisc = [
+ 'shopimporter_tillhub',
+ 'shopimporter_billbee',
+ ];
+
+ $additionalMisc = array_diff(array_keys($importerCapabilities), $sequenceMarket, $sequenceShop, $sequenceMisc);
+ $sequenceMisc = array_merge($sequenceMisc, $additionalMisc);
+ $features = [];
+ $features['shop'] = $this->getShopFeaturesSorted(
+ $importerCapabilities,
+ $featureKeys,
+ $shopNames,
+ $sequenceShop
+ );
+ $features['market'] = $this->getShopFeaturesSorted(
+ $importerCapabilities,
+ $featureKeys,
+ $shopNames,
+ $sequenceMarket
+ );
+ $features['misc'] = $this->getShopFeaturesSorted(
+ $importerCapabilities,
+ $featureKeys,
+ $shopNames,
+ $sequenceMisc
+ );
+
+ /** @var \Xentral\Components\Template\Template $tmp */
+ $tmp = $this->app->Container->get('Template');
+ $tmp->setDefaultNamespace('Modules/Onlineshop');
+ $tmp->assign('features', $features);
+ $table = $tmp->fetch('feature.tpl');
+ //$html
+ $this->app->Tpl->Add('SHOPTABS', $table);
+ //$this->app->Tpl->Add('TAB1',''.print_r($featureKeys,true).' ');
+
+ $this->app->Tpl->Parse('PAGE','onlineshops_features.tpl');
+ }
+
+ public function ShopexportMenu()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ $this->app->erp->MenuEintrag('index.php?module=onlineshops&action=create','Neu');
+ $action = $this->app->Secure->GetGET('action');
+ if(($action==='list' || $action === 'features') && $id <= 0) {
+ $this->app->erp->Headlines('Shops und Marktplätze');
+ $this->app->erp->MenuEintrag('index.php?module=onlineshops&action=list','Übersicht');
+ $this->app->erp->MenuEintrag('index.php?module=onlineshops&action=features','Shopfunktionen');
+ }
+
+ if($id > 0) {
+ $name = $this->app->DB->Select("SELECT bezeichnung FROM shopexport WHERE id='$id' LIMIT 1");
+ $this->app->erp->Headlines('', $name);
+ //$this->app->Tpl->Add('KURZUEBERSCHRIFT2',$name);
+ $this->app->erp->MenuEintrag('index.php?module=onlineshops&action=edit&id='.$id,'Details');
+ //$this->app->erp->MenuEintrag("index.php?module=shopexport&action=export&id=$id","Export");
+ $this->app->erp->MenuEintrag('index.php?module=onlineshops&action=artikellist&id='.$id,'Artikelliste');
+ $this->app->erp->MenuEintrag('index.php?module=shopexport&action=artikeluebertragung&id='.$id,'Artikel Übertragung');
+ if($this->app->DB->Select("SELECT modulename FROM shopexport WHERE id = '$id'") === 'shopimporter_shopware'){
+ //Soll nur in Shopware angezeigt werden, da nur in Shopware unterstüzt
+ $this->app->erp->MenuEintrag('index.php?module=shopexport&action=adressuebertragung&id='.$id,'Adressen Übertragung');
+ }
+ }
+
+
+ $typ = $this->app->DB->Select("SELECT typ FROM shopexport WHERE id='$id' LIMIT 1");
+ if($typ==='wawision') {
+ $this->app->erp->MenuEintrag("index.php?module=shopexport&action=navigationtab&id=$id","Navigation");
+ $this->app->erp->MenuEintrag("index.php?module=shopexport&action=artikelgruppen&id=$id","Artikelgruppen");
+ $this->app->erp->MenuEintrag("index.php?module=shopexport&action=live&id=$id","Live-Status");
+ $this->app->erp->MenuEintrag("index.php?module=inhalt&action=listshop&id=$id","Inhalte / E-Mailvorlagen");
+ }
+
+ if($this->app->Secure->GetGET('action') !== 'list'){
+ $this->app->erp->MenuEintrag('index.php?module=onlineshops&action=list', 'Zurück zur Übersicht');
+ }
+ $this->app->erp->RunMenuHook('onlineshops');
+ }
+
+ public function ShopexportDelete()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ if(is_numeric($id)) {
+ $this->app->erp->RunHook('shopexportdelete', 1, $id);
+ $this->app->DB->Delete("DELETE FROM shopexport WHERE id='$id' LIMIT 1");
+ }
+ $this->app->Location->execute('index.php?module=onlineshops&action=list');
+ }
+
+ /**
+ * @return JsonResponse
+ */
+ public function HandleUncheckTreeNodeAjaxAction()
+ {
+ $shopId = (int)$this->app->Secure->GetGET('shopId');
+ $id = (int)$this->app->Secure->GetGET('id');
+ $this->setJsonSettings($shopId, 'category_root_id', 0);
+ $data = ['id' => $id,];
+
+ return new JsonResponse($data);
+ }
+
+ /**
+ * @return JsonResponse
+ */
+ public function HandleCheckTreeNodeAjaxAction()
+ {
+ $shopId = (int)$this->app->Secure->GetGET('shopId');
+ $id = (int)$this->app->Secure->GetGET('id');
+ $this->setJsonSettings($shopId, 'category_root_id', $id);
+ $data = ['id' => $id,];
+
+ return new JsonResponse($data);
+ }
+ /**
+ * @return JsonResponse
+ */
+ public function HandleLoadDefaultTemplateAjaxAction()
+ {
+ $template = '';
+ $shopId = (int)$this->app->Secure->GetPOST('shopid');
+ $isJson = $this->app->Secure->GetPOST('format') === 'json';
+ $shopModule = $this->app->DB->Select(sprintf('SELECT `modulename` FROM `shopexport` WHERE `id` = %d', $shopId));
+ $file = dirname(dirname(__DIR__)).'/classes/Modules/Onlineshop/resources/smarty_templates/'.$shopModule.'_'
+ .($isJson?'json':'xml').'.tpl';
+ if(is_file($file)) {
+ $template = file_get_contents($file);
+ }
+
+ return new JsonResponse(
+ [
+ 'success' => true,
+ 'template' => $template
+ ]
+ );
+ }
+
+ public function ShopexportEdit()
+ {
+ $cmd = $this->app->Secure->GetGET('cmd');
+ if($cmd === 'loadDefaultTemplate') {
+ return $this->HandleLoadDefaultTemplateAjaxAction();
+ }
+ if($cmd === 'loadTree') {
+ return $this->HandleLoadTreeAjaxAction();
+ }
+ if($cmd === 'uncheckTreeNode') {
+ return $this->HandleUncheckTreeNodeAjaxAction();
+ }
+ if($cmd === 'checkTreeNode') {
+ return $this->HandleCheckTreeNodeAjaxAction();
+ }
+ if($cmd === 'loadCart') {
+ return $this->HandleLoadCartAjaxAction();
+ }
+ if($cmd === 'runincomming') {
+ return $this->HandleRunSmartyIncommingAjaxAction();
+ }
+ if($cmd === 'savesmartyincomming') {
+ return $this->HandleSaveSmartyIncommingAjaxAction();
+ }
+ if($cmd === 'getnotimortedorders'){
+ $id = (int)$this->app->Secure->GetPOST('id');
+ $notImortedOrders = $this->app->DB->Select(sprintf('SELECT COUNT(id) FROM shopimport_auftraege WHERE shopid = %d AND imported = 0 AND trash = 0', $id));
+ echo json_encode(['count'=>$notImortedOrders]);
+ $this->app->erp->ExitWawi();
+ }
+
+ $id = (int)$this->app->Secure->GetGET('id');
+ if(!empty($id) && $this->app->Secure->GetPOST('speichern') === 'Speichern'){
+ $fieldsToSave = $_POST;
+ unset($fieldsToSave['nurfehler'],$fieldsToSave['auftraege'],$fieldsToSave['aenderungen'],$fieldsToSave['shopexport_log_length']);
+
+ $moduleName = $this->app->DB->Select("SELECT modulename FROM shopexport WHERE id = '$id' LIMIT 1");
+ try {
+ $obj = $this->app->erp->LoadModul($moduleName);
+ if(method_exists($obj,'EinstellungenStruktur')){
+ $struktur = $obj->EinstellungenStruktur($id);
+ foreach ($struktur['felder'] as $fieldname => $fieldData){
+ if($fieldData['typ'] === 'password'){
+ if($fieldsToSave[$fieldname] === '***************') {
+ $oldData = json_decode($this->app->DB->Select('SELECT einstellungen_json FROM shopexport WHERE id=' . $id), true);
+ $fieldsToSave[$fieldname] = $oldData['felder'][$fieldname];
+ }
+ $fieldsToSave[$fieldname] = substr(md5($fieldsToSave[$fieldname]),0,15);
+ }
+ }
+ }
+ }catch(Exception $ex){
+ $this->app->erp->LogFile('Fehlerhafter Aufruf in Modul: '.$moduleName);
+ }
+
+ $username = $this->app->DB->real_escape_string($this->app->User->GetUsername());
+
+ $query = sprintf('SELECT id FROM shopexport_change_log WHERE shop_id=%d',$id);
+ $changeLogEntryExists = $this->app->DB->Select($query);
+
+ if($changeLogEntryExists){
+ $query = sprintf('SELECT diff FROM shopexport_change_log WHERE shop_id=%d ORDER BY id ASC',$id);
+ $existingChangeLogEntries = $this->app->DB->SelectArr($query);
+ $fieldsToCompareTo = [];
+ foreach ($existingChangeLogEntries as $existingChangeLogEntry){
+ $existingFields = json_decode($existingChangeLogEntry['diff'],true);
+ $fieldsToCompareTo = array_merge($fieldsToCompareTo,$existingFields);
+ }
+
+ $differenceInValues = [];
+ foreach ($fieldsToSave as $fieldToSaveName => $fieldToSaveValue){
+ if($fieldsToSave[$fieldToSaveName] !== $fieldsToCompareTo[$fieldToSaveName]){
+ $differenceInValues[$fieldToSaveName] = $fieldsToSave[$fieldToSaveName];
+ }
+ unset($fieldsToCompareTo[$fieldToSaveName]);
+ }
+ foreach ($fieldsToCompareTo as $fieldToCompareToName => $fieldToCompareToValue){
+ if(!empty($fieldToCompareToValue)){
+ $differenceInValues[$fieldToCompareToName] = '';
+ }
+ }
+
+ $message = 'Geänderte Felder: '.(!empty($differenceInValues)?count($differenceInValues):0);
+ if(empty($differenceInValues)){
+ $message = 'Keine Änderung';
+ }
+ $plaindiff = implode(', ',array_keys($differenceInValues));
+ if(strlen($plaindiff)>100){
+ $plaindiff = substr($plaindiff,0,97).'...';
+ }
+ $query = sprintf("INSERT INTO shopexport_change_log (shop_id,diff,message,username,plaindiff) VALUES (%d,'%s','%s','%s','%s')",
+ $id, $this->app->DB->real_escape_string(json_encode($differenceInValues)),$message,$username,$plaindiff);
+ $this->app->DB->Insert($query);
+ }else{
+ $query = sprintf("INSERT INTO shopexport_change_log (shop_id,diff,message,username,plaindiff) VALUES (%d,'%s','%s','%s','')",
+ $id, $this->app->DB->real_escape_string(json_encode($fieldsToSave)),'Initiale Speicherung',$username);
+ $this->app->DB->Insert($query);
+ }
+ }
+
+
+ if($id && $cmd === 'archivspeichern')
+ {
+ //Prüfen ob Cronjob existiert, wenn nicht inaktiv anlegen
+ $cronjobid = $this->app->DB->Select("SELECT id FROM prozessstarter WHERE parameter = 'shopimport_auftragarchiv' LIMIT 1");
+ if(!$cronjobid){
+ $this->app->DB->Insert("INSERT INTO prozessstarter (bezeichnung, bedingung, art, startzeit, letzteausfuerhung, periode, typ, parameter, aktiv) VALUES ('Shopimport Auftragsarchiv','','periodisch', NOW(), '0000-00-00 00:00:00', 10080,'cronjob', 'shopimport_auftragarchiv', 0)");
+ $cronjobid = $this->app->DB->GetInsertID();
+ }else {
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE prozessstarter
+ SET letzteausfuerhung = DATE_SUB(NOW(), INTERVAL 10080 MINUTE)
+ WHERE id = %d AND mutex = 0 AND aktiv = 1 AND letzteausfuerhung > DATE_SUB(NOW(), INTERVAL 10080 MINUTE)',
+ $cronjobid
+ )
+ );
+ }
+ $this->app->DB->Update("UPDATE prozessstarter SET aktiv = 1 WHERE id = '$cronjobid'");
+
+ $check = $this->app->DB->Select("SELECT id FROM shopexport_archiv WHERE shop = '$id' LIMIT 1");
+ if(!$check)
+ {
+ $this->app->DB->Insert("INSERT INTO shopexport_archiv (shop) VALUES ('$id')");
+ $check = $this->app->DB->GetInsertID();
+ }
+ if($check)
+ {
+ $this->app->DB->Update("UPDATE shopexport_archiv SET status = 'aktiv' WHERE id = '$check' LIMIT 1");
+ $typ = $this->app->Secure->GetPOST('typ');
+ $von = $this->app->Secure->GetPOST('von');
+ $bis = $this->app->Secure->GetPOST('bis');
+ $zeitvon = $this->app->Secure->GetPOST('zeitvon');
+ $zeitbis = $this->app->Secure->GetPOST('zeitbis');
+ $abschliessen = (int)$this->app->Secure->GetPOST('auftrag_abschliessen');
+ $rechnung_erzeugen = (int)$this->app->Secure->GetPOST('rechnung_erzeugen');
+ $rechnung_bezahlt = (int)$this->app->Secure->GetPOST('rechnung_bezahlt');
+ $stornierteabholen = (int)$this->app->Secure->GetPOST('stornierte_abholen');
+ $donotimport = (int)$this->app->Secure->GetPOST('donotimport');
+ $datumvon = '';
+ $datumbis = '';
+ $nummervon = '';
+ $nummerbis = '';
+ if($typ === 'zeitraum')
+ {
+ if($von != '')
+ {
+ $datumvon = $this->app->String->Convert($von, '%1.%2.%3', '%3-%2-%1').' '.$zeitvon;
+ }
+ if($bis != '')
+ {
+ $datumbis = $this->app->String->Convert($bis, '%1.%2.%3', '%3-%2-%1').' '.$zeitbis;
+ }
+ }else{
+ $nummervon = $von;
+ $nummerbis = $bis;
+ }
+ if(($nummervon !='' && $nummerbis !='') || ($datumvon !='' && $datumbis !='')){
+ $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
+ $this->app->DB->Update("UPDATE shopexport_archiv
+ SET anzahl=0, erfolgreich=0,`type` = '$typ',bearbeiter = '$bearbeiter',abschliessen = '$abschliessen',
+ rechnung_erzeugen = '$rechnung_erzeugen',rechnung_bezahlt = '$rechnung_bezahlt',
+ nummervon = '$nummervon', nummerbis = '$nummerbis',datumvon = '$datumvon',
+ datumbis = '$datumbis', stornierteabholen='$stornierteabholen' ,
+ donotimport = '$donotimport', letzteabgeholtenummer = 0
+ WHERE id = '$check' LIMIT 1");
+ $this->app->DB->LogIfError();
+ echo json_encode(array('status'=>1));
+ }
+ else {
+ echo json_encode(array('status'=>0));
+ }
+ }
+ $this->app->ExitXentral();
+ }
+ if($cmd === 'changeaktiv') {
+ $data = $this->app->DB->SelectRow("SELECT * FROM shopexport WHERE id = '$id' LIMIT 1");
+ if($data) {
+ if($data['aktiv']) {
+ $this->app->DB->Update("UPDATE shopexport SET aktiv = 0 WHERE id = '$id' LIMIT 1");
+ }
+ else {
+ if($data['shoptyp'] === 'custom' && $data['modulename'] !== '')
+ {
+ $data['modulename'] = trim($data['modulename'],'.');
+ $file = dirname(__DIR__) .'/plugins/external/shopimporter/'.$data['modulename'];
+ if(is_file($file)) {
+ include_once $file;
+ }
+ else {
+ echo json_encode(array('aktiv'=> $data['aktiv']));
+ $this->app->ExitXentral();
+ }
+ }
+ else {
+ $this->app->DB->Update("UPDATE shopexport SET aktiv = 1 WHERE id = '$id' LIMIT 1");
+ }
+ }
+ echo json_encode(array('aktiv'=> 1 - $data['aktiv']));
+ }
+ $this->app->ExitXentral();
+ }
+ if($cmd === 'testcustomfile') {
+ $status = 0;
+ $fehler = '';
+ if($data = $this->app->DB->SelectRow("SELECT * FROM shopexport WHERE id = '$id' AND shoptyp = 'custom' AND modulename <> '' LIMIT 1")) {
+ $data['modulename'] = trim($data['modulename'],'.');
+ $file = dirname(__DIR__) .'/plugins/external/shopimporter/'.$data['modulename'];
+
+ if(is_file($file)) {
+ include_once $file;
+ $status = 1;
+ }
+ else {
+ $fehler = 'Datei nicht gefunden';
+ }
+ }
+ echo json_encode(array('status'=>$status,'fehler'=>$fehler));
+ $this->app->ExitXentral();
+ }
+ if($this->app->Secure->GetPOST('savefile')) {
+ if($data = $this->app->DB->SelectRow("SELECT * FROM shopexport WHERE id = '$id' AND shoptyp = 'custom' AND modulename <> '' LIMIT 1")) {
+ $file = dirname(__DIR__) .'/plugins/external/shopimporter/'.$data['modulename'];
+
+ if(is_file($file)) {
+ $text = htmlspecialchars_decode($_POST['customdatei']);
+ file_put_contents($file, $text);
+ }
+ }
+ }
+
+ if($this->app->Secure->GetPOST('pruefen')) {
+
+ $className = 'Remote';
+ $methodName = 'RemoteConnection';
+ $r = new ReflectionMethod($className, $methodName);
+ $params = $r->getParameters();
+ $anzargs = (!empty($params)?count($params):0);
+ try {
+ if($anzargs > 1){
+ $pageContents = $this->app->remote->RemoteConnection($id, true);
+ }
+ else {
+ $pageContents = $this->app->remote->RemoteConnection($id);
+ }
+ }
+ catch(Exception $e) {
+ $pageContents = $e->getMessage();
+ }
+ if(strpos($pageContents, 'success') === 0){
+ if($anzargs > 1) {
+ $pageContents2 = $this->app->remote->RemoteConnection($id, 'info');
+ }
+
+ if($anzargs > 1 && is_array($pageContents2)) {
+ $json = $this->app->DB->Select("SELECT json FROM shopexport WHERE id = '$id' LIMIT 1");
+ if($json) {
+ $json = array_merge(json_decode($json, true), $pageContents2);
+ }
+ else {
+ $json = $pageContents2;
+ }
+ $this->app->DB->Update("UPDATE shopexport set json = '".$this->app->DB->real_escape_string(json_encode($json))."' WHERE id = '$id' LIMIT 1");
+ unset($json);
+ $this->app->Tpl->Set('MESSAGE','');
+ if(isset($pageContents2['subshops'])) {
+ $this->app->Tpl->Add('MESSAGE','Subshops:
+
Id Name Aktiv
+ ');
+ foreach($pageContents2['subshops'] as $subshop) {
+ $this->app->Tpl->Add('MESSAGE',''.$subshop['id'].' '.$subshop['name']." ".($subshop['aktiv']?'ja':'nein')." ");
+ }
+ $this->app->Tpl->Add('MESSAGE','
');
+ }
+ else {
+ $this->app->Tpl->Add('MESSAGE','Verbindung: success');
+ }
+ $this->app->Tpl->Add('MESSAGE','
');
+ }
+ else {
+ $this->app->Tpl->Set('MESSAGE',"Verbindung: $pageContents
");
+ }
+ }
+ else {
+ $this->app->Tpl->Set('MESSAGE',"Verbindungsproblem: Eventuell falsche Schlüssel! ($pageContents)
");
+ }
+
+ }
+
+ if($this->app->Secure->GetPOST('auftragabholen')) {
+ /** @var Shopimport $obj */
+ $obj = $this->app->erp->LoadModul('shopimport');
+ if(!empty($obj)) {
+ @ignore_user_abort(true);
+ $anz = $obj->ShopimportImport($id, 0, true);
+ }
+ if($anz) {
+ $this->app->Location->execute('index.php?module=shopimport&action=import');
+ }
+ if($obj && !empty($obj->error)) {
+ $this->app->Tpl->Add('MESSAGE', $obj->error);
+ }
+ else{
+ $this->app->Tpl->Add('MESSAGE', 'Aktuell sind keine Aufträge in den Online-Shops vorhanden!
');
+ }
+ }
+
+ $this->app->YUI->TableSearch('LOGTABELLE', 'shopexport_log', 'show','','',basename(__FILE__), __CLASS__);
+
+ $this->app->YUI->TableSearch('TAB3','shopexport_zahlweisen');
+ $this->app->YUI->TableSearch('TAB4','shopexport_versandarten');
+ $this->app->YUI->TableSearch('TAB5','shopexport_freifelder');
+ $this->app->YUI->TableSearch('TAB6','shopexport_subshop');
+ $this->app->YUI->TableSearch('TAB7', 'shopexport_sprachen', 'show','','',basename(__FILE__), __CLASS__);
+ $this->app->YUI->TableSearch('TAB8', 'shopexport_kundengruppen', 'show','','',basename(__FILE__), __CLASS__);
+ $this->app->YUI->AutoComplete('b_projekt','projektname',1);
+ $this->app->YUI->AutoComplete('sprachenprojekt', 'projektname' , 1);
+ $this->app->YUI->AutoComplete('kundengruppeprojekt', 'projektname' , 1);
+ $this->app->YUI->AutoComplete('k_projekt', 'projektname' , 1);
+ $this->app->YUI->AutoComplete('d_projekt', 'projektname' , 1);
+
+ $this->app->Tpl->Add('FREIFELDEROPTIONEN',' ');
+ for($i = 1; $i <= 40; $i++) {
+ $freifeldname = $this->app->erp->Firmendaten('freifeld'.$i);
+ if(!$freifeldname) {
+ $freifeldname = 'Freifeld '.$i;
+ }
+ $freifeldname = explode('|',$freifeldname);
+ $this->app->Tpl->Add('FREIFELDEROPTIONEN',''.$freifeldname[0].' ');
+ }
+
+/*
+ $this->CheckColumn("id","int(11)","shopexport_log","NOT NULL AUTO_INCREMENT");
+ $this->CheckColumn("shopid","int(11)","shopexport_log","DEFAULT '0' NOT NULL");
+ $this->CheckColumn("typ", "varchar(64)", "shopexport_log","DEFAULT '' NOT NULL");
+ $this->CheckColumn("parameter1", "varchar(64)", "shopexport_log","DEFAULT '' NOT NULL");
+ $this->CheckColumn("parameter2", "varchar(64)", "shopexport_log","DEFAULT '' NOT NULL");
+ $this->CheckColumn("bearbeiter", "varchar(64)", "shopexport_log","DEFAULT '' NOT NULL");
+ $this->CheckColumn("zeitstempel","timestamp","shopexport_log","DEFAULT CURRENT_TIMESTAMP");
+*/
+ $sprachenopt = $this->app->erp->GetSprachenSelect();
+ $sprachensel = '';
+ if($sprachenopt) {
+ foreach($sprachenopt as $k => $v) {
+ $sprachensel .= '{|'.$v.'|} ';
+ }
+ }
+
+ $projektId = $this->app->DB->Select("SELECT projekt FROM shopexport WHERE id = '$id' LIMIT 1");
+ $selversandarten = ' ';
+ $selzahlungsweisen = ' ';
+ $zahlungsweisen = $this->app->erp->GetZahlungsweise(null,null,$projektId);
+ if(!empty($zahlungsweisen)){
+ foreach ($zahlungsweisen as $k => $v) {
+ $selzahlungsweisen .= '' . $v . ' ';
+ }
+ }
+
+ $versandartenarr = $this->app->DB->SelectArr("SELECT type,bezeichnung FROM versandarten WHERE aktiv = 1 AND (projekt=0 OR projekt='' OR projekt='$projektId')ORDER BY bezeichnung");
+ if(!empty($versandartenarr)) {
+ $versandarten = [];
+ foreach($versandartenarr as $v) {
+ $versandarten[$v['type']] = $v['bezeichnung'];
+ }
+
+ foreach ($versandarten as $k => $v) {
+ $selversandarten .= '' . $v . ' ';
+ }
+ }
+
+ $this->app->Tpl->Set('FORMULAR','');
+
+ $this->app->Tpl->Add('FORMULAR','');
+
+
+ $alleKundengruppenAusXentral = $this->app->DB->SelectArr("SELECT id,name FROM gruppen WHERE (art='gruppe' OR art='preisgruppe') AND (projekt='' OR projekt=0 OR projekt='$projektId') AND aktiv='1'");
+ $kundengruppenSelect ='';
+ foreach ($alleKundengruppenAusXentral as $kundengruppe) {
+ $kundengruppenSelect .= ''.$kundengruppe['name'].' ';
+ }
+ $this->app->Tpl->Add('FORMULAR','');
+
+ $this->app->Tpl->Add('FORMULAR','');
+
+
+ $this->app->Tpl->Add('FORMULAR','');
+ $this->app->Tpl->Add('FORMULAR','');
+
+ $this->app->Tpl->Set('NEUTAB3','
+
+ {|Anlegen|}
+
+ ');
+
+
+ $this->app->Tpl->Set('NEUTAB4','
+
+ {|Anlegen|}
+
+ ');
+
+ $this->app->Tpl->Set('NEUTAB5','
+
+ {|Anlegen|}
+
+ ');
+
+ $this->app->Tpl->Set('NEUTAB6','
+
+ {|Anlegen|}
+
+ ');
+
+ $this->app->Tpl->Set('NEUTAB7','
+
+ {|Anlegen|}
+
+ ');
+
+ $this->app->Tpl->Set('NEUTAB8','
+
+ {|Anlegen|}
+
+ ');
+
+ if($this->app->DB->Select("SELECT id FROM shopexport WHERE aktiv = 1 AND cronjobaktiv AND id = '$id' LIMIT 1"))
+ {
+ if(!$this->app->DB->Select("SELECT id FROM prozessstarter WHERE parameter = 'shopimport' AND aktiv = 1 AND art = 'periodisch' LIMIT 1"))
+ {
+ if($this->app->DB->Select("SELECT id FROM prozessstarter WHERE parameter = 'shopimport' AND aktiv = 1 AND art <> 'periodisch' LIMIT 1"))
+ {
+ $this->app->Tpl->Add('MESSAGE', '{|Der Prozessstarter "shopimport" ist auf "Uhrzeit" eingestellt. Es werden die Einstellungen "periodisch" mit der Periode 5 empfohlen|}
');
+ }
+ }
+ }
+ $this->ShopexportMenu();
+ if($id > 0) {
+ $this->showBetaMessage($id);
+ }
+ parent::ShopexportEdit();
+ }
+
+ /**
+ * @param int $shopId
+ */
+ public function showBetaMessage($shopId)
+ {
+ if(empty($shopId)) {
+ return;
+ }
+ $module = $this->app->DB->SelectRow(
+ sprintf(
+ "SELECT `modulename`, `bezeichnung`
+ FROM `shopexport`
+ WHERE `id` = %d AND `shoptyp` = 'intern'
+ LIMIT 1",
+ $shopId
+ )
+ );
+ if(empty($module)) {
+ return;
+ }
+ /** @var Appstore $appstore */
+ $appstore = $this->app->erp->LoadModul('appstore');
+ if($appstore === null || !method_exists($appstore, 'isBeta')) {
+ return;
+ }
+ if($appstore->isBeta($module['modulename'])) {
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ 'Dieses Modul ist noch im Beta Stadium.
'
+ );
+ $appstore->addBetaToHeadline();
+ }
+ }
+
+ /**
+ * @param $json
+ *
+ * @return mixed
+ */
+ public function SmartyJsonDecode($json)
+ {
+ return is_string($json)?json_decode($json):$json;
+ }
+
+ /**
+ * @param mixed $data
+ *
+ * @return false|string
+ */
+ public function SmartyJsonEncode($data) {
+ return json_encode($data);
+ }
+
+ /**
+ * @param $var
+ *
+ * @return string
+ */
+ public function SmartyPrintR($var)
+ {
+ return print_r($var, true);
+ }
+
+ /**
+ * @param array $array
+ *
+ * @return string
+ */
+ public function SmartyArrayToList($array)
+ {
+ if(is_string($array)) {
+ return $array;
+ }
+ if(!is_array($array)) {
+ $array = json_decode(json_encode($array), true);
+ }
+ if(is_string($array)) {
+ return $array;
+ }
+ if(!is_array($array)) {
+ return '';
+ }
+
+ foreach($array as $key => $val) {
+ if(is_array($val)) {
+ $array[$key] = json_encode($val);
+ }
+ }
+ return implode(' ', $array);
+ }
+
+ /**
+ * @param array|SimpleXMLElement $attributes
+ *
+ * @return string
+ */
+ protected function attributeKey($attributes) {
+ $ret = '';
+ if(empty($attributes)) {
+ return $ret;
+ }
+ foreach($attributes as $key => $attribute) {
+ if((is_array($attribute) || is_object($attribute)) && (!empty($attribute)?count($attribute):0) === 1) {
+ $ret .= ' '.$key.'="'.reset($attribute).'"';
+ continue;
+ }
+ $ret .= ' '.$key.'="'.$attribute.'"';
+ }
+ return $ret;
+ }
+
+ /**
+ * Kovertiert einen XML-String in ein Array
+ *
+ * @param string $xml
+ * @param bool $wrap
+ *
+ * @return array
+ *
+ * @throws \RuntimeException
+ */
+ public function convertXmlStringToArray($xml)
+ {
+ $namespaces = [];
+ $simplexml = simplexml_load_string($xml, null, LIBXML_NOCDATA);
+ if(is_object($simplexml)) {
+ $namespaces = $simplexml->getNamespaces();
+ }
+ if ($simplexml === false) {
+ return [];
+ }
+
+ return $this->convertSimpleXmlToArray($simplexml, $namespaces);
+ }
+
+ /**
+ * @param SimpleXMLElement $object
+ * @param array|null $namespaces
+ * @param bool $removeItemKey
+ *
+ * @return array|string
+ */
+ public function convertSimpleXmlToArray($object, $namespaces = null, $removeItemKey = true)
+ {
+ $array = [];
+ $isObject = is_object($object);
+ $cobject = $isObject?count($object):0;
+ if($isObject && $cobject === 0) {
+ $name = $object->getName();
+ $attributes = $object->attributes();
+ $attributeKey = $this->attributeKey($attributes);
+ $array[$name.$attributeKey] = (string)$object;
+
+ return $array;
+ }
+ $arr = (array)$object;
+ if(isset($arr['@attributes'])) {
+ unset($arr['@attributes']);
+ }
+ $keys = array_keys($arr);
+ $count = (!empty($keys)?count($keys):0);
+ if($isObject && !empty($arr)) {
+ foreach($object as $key => $value) {
+ if($key === '@attributes') {
+ continue;
+ }
+ if($key === 0 && $count === 1) {
+ return $value;
+ }
+ $valueArr = (array)$value;
+ if(isset($valueArr['@attributes'])) {
+ unset($valueArr['@attributes']);
+ }
+ if(is_object($value) && !empty($valueArr)) {
+ $cValue = (!empty($value)?count($value):0);
+ $cValueArr = (!empty($valueArr)?count($valueArr):0);
+ $attributes = $value->attributes();
+ $attributeKey = $this->attributeKey($attributes);
+ if(isset($array[$key.$attributeKey])) {
+ if(!isset($array[$key.$attributeKey][0])) {
+ $array[$key.$attributeKey] = [$array[$key.$attributeKey]];
+ }
+ if($cValue === 0 || ($cValue <= 1 && $cValueArr === 1)) {
+ $valueReset = reset($valueArr);
+ if(is_array($valueArr)) {
+ $keys = array_keys($valueArr);
+ if(reset($keys) === 0) {
+ $array[$key.$attributeKey] = $valueReset;
+ continue;
+ }
+ }
+ /*
+ if(!is_object($valueReset) && !is_array($valueReset)) {
+ $array[$key.$attributeKey][] = $valueReset;
+ continue;
+ }*/
+ }
+
+ $array[$key.$attributeKey][] = $this->convertSimpleXmlToArray($value, $namespaces, $removeItemKey);
+ continue;
+ }
+ if($cValue === 0 || ($cValue <= 1 && $cValueArr === 1)) {
+ $valueReset = reset($valueArr);
+ if(is_array($valueArr)) {
+ $keys = array_keys($valueArr);
+ if(reset($keys) === 0) {
+ $array[$key.$attributeKey] = $valueReset;
+ continue;
+ }
+ }
+ /*
+ if (!is_object($valueReset) && !is_array($valueReset)) {
+ $array[$key.$attributeKey] = $valueReset;
+ continue;
+ }*/
+ }
+
+ if($removeItemKey && $attributeKey === '' && strpos($key,'item') === 0 && is_numeric(substr($key,4))) {
+ $array[(int)substr($key,4)] = $this->convertSimpleXmlToArray($value, $namespaces, $removeItemKey);
+ }
+ else{
+ $array[$key . $attributeKey] = $this->convertSimpleXmlToArray($value, $namespaces, $removeItemKey);
+ }
+ }
+ else {
+ $array[$key] = (string)$value;
+ }
+ }
+ return $array;
+ }
+
+ return (string)$object;
+ }
+
+
+ /**
+ * @param array $cartArr
+ *
+ * @return array|null
+ */
+ public function getArrayFromCart($cartArr)
+ {
+ if(empty($cartArr)) {
+ return null;
+ }
+ $jsonEncoded = !empty($cartArr['jsonencoded']);
+ $cart = base64_decode($cartArr['warenkorb']);
+ if($jsonEncoded){
+ $cart = json_decode($cart, true);
+ }else {
+ $cart = unserialize($cart);
+ }
+ if(!is_array($cart)) {
+ return [];
+ }
+
+ return $cart;
+ }
+
+ /**
+ * @param int $categoryId
+ * @param array $categories
+ *
+ * @return bool
+ */
+ public function isIdInCategories($categoryId, $categories)
+ {
+ if(empty($categories)) {
+ return false;
+ }
+ foreach($categories as $category) {
+ if((int)$category['id'] === (int)$categoryId) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * @param int $shopId
+ * @param string $name
+ *
+ * @return mixed|null
+ */
+ public function getJsonSettings($shopId, $name)
+ {
+ $json = $this->app->DB->Select(sprintf('SELECT `einstellungen_json` FROM `shopexport` WHERE `id` = %d', $shopId));
+ if(empty($json)) {
+ return null;
+ }
+
+ $json = json_decode($json, true);
+ if(empty($json['felder'])) {
+ return null;
+ }
+ if(!isset($json['felder'][$name])) {
+ return null;
+ }
+ return $json['felder'][$name];
+ }
+
+ /**
+ * @param int $shopId
+ * @param string $name
+ * @param mixed $value
+ */
+ public function setJsonSettings($shopId, $name, $value)
+ {
+ $json = $this->app->DB->Select(sprintf('SELECT `einstellungen_json` FROM `shopexport` WHERE `id` = %d', $shopId));
+ if(!empty($json)){
+ $json = json_decode($json, true);
+ }
+ if(!is_array($json)) {
+ $json = ['felder' => []];
+ }
+ if(!isset($json['felder']) || !is_array($json['felder'])) {
+ $json['felder'] = [];
+ }
+ $json['felder'][$name] = $value;
+ $json = json_encode($json);
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE `shopexport` SET `einstellungen_json` = '%s' WHERE `id` = %d",
+ $this->app->DB->real_escape_string($json), $shopId
+ )
+ );
+ }
+
+ /**
+ * @return JsonResponse
+ */
+ public function HandleLoadTreeAjaxAction()
+ {
+ $shopId = (int)$this->app->Secure->GetGET('id');
+ $checkedId = (int)$this->getJsonSettings($shopId, 'category_root_id');
+ /** @var Artikelbaum $treeObject */
+ $treeObject = $this->app->loadModule('artikelbaum');
+ $categories = [['id'=> 0, 'bezeichnung'=>'root', 'parent' => 0,],];
+ $treeObject->getKategorien($categories, 0);
+ if((!empty($categories)?count($categories):0) > 1) {
+ if((string)$categories[(!empty($categories)?count($categories):0) -1]['id'] === '0'){
+ unset($categories[(!empty($categories)?count($categories):0) - 1]);
+ }
+ }
+ if($checkedId > 0 && !$this->isIdInCategories($checkedId, $categories)) {
+ $checkedId = 0;
+ }
+
+ $data = $treeObject->getTreeData(
+ $categories,
+ [
+ 'checkbox' => true,
+ 'checked_ids' => [
+ $checkedId
+ ],
+ ]
+ );
+
+ return new JsonResponse($data);
+ }
+
+ /**
+ * @return JsonResponse
+ */
+ public function HandleLoadCartAjaxAction()
+ {
+ $shopId = (int)$this->app->Secure->GetPOST('shopid');
+ $extid = $this->app->Secure->GetPOST('extid');
+ $useJson = $this->app->Secure->GetPOST('format') === 'json';
+ $merge = !(bool)(int)$this->app->Secure->GetPOST('replacecart');
+ $content = empty($this->app->Secure->POST['content'])?'':trim($this->app->Secure->POST['content']);
+
+ $cart = $this->app->DB->SelectRow(
+ sprintf(
+ "SELECT `jsonencoded`, `warenkorb`
+ FROM `shopimport_auftraege`
+ WHERE `shopid` = %d AND `extid` = '%s'
+ ORDER BY `id` DESC
+ LIMIT 1",
+ $shopId, $extid
+ )
+ );
+ if(empty($cart)) {
+ return new JsonResponse(['success' => false, 'error' => 'Warenkorb nicht gefunden']);
+ }
+
+ $cart = $this->getArrayFromCart($cart);
+ $cart2 = $cart;
+ if($useJson) {
+ $xml_data = null;
+ }
+ else {
+ $xml_data = $this->convertArrayToSimpleXml($cart);
+ $xml_data = $this->formatXmlForOutput($xml_data->asXML());
+ }
+
+ if($content === '') {
+ return new JsonResponse(
+ [
+ 'success' => true,
+ 'input' => !$useJson?$xml_data:json_encode($cart),
+ 'object' => ''.print_r($cart,true).' ',
+ 'preview' => '',
+ ]
+ );
+ }
+
+ try {
+ $cart2 = $this->addCartInfo($cart2, $shopId, $useJson, $merge, $content);
+ }
+ catch(Exception $e) {
+ return new JsonResponse(
+ [
+ 'success' => true,
+ 'input' => !$useJson?$xml_data:json_encode($cart),
+ 'object' => ''.print_r($cart,true).' ',
+ 'preview' => print_r($e->getMessage(),true),
+ ]
+ );
+ }
+ $xmlDataPreview = '';
+ if(!$useJson) {
+ try {
+ $xmlDataPreview = $this->convertArrayToSimpleXml($cart2);
+ $xmlDataPreview = $this->formatXmlForOutput($xmlDataPreview->asXML());
+ }
+ catch(Exception $e) {
+ $xmlDataPreview = '';
+ }
+ }
+
+ return new JsonResponse(
+ [
+ 'success' => true,
+ 'input' => !$useJson?$xml_data:json_encode($cart),
+ 'object' => ''.print_r($cart,true).' ',
+ 'preview' => !$useJson?$xmlDataPreview:json_encode($cart),
+ ]
+ );
+ }
+
+
+ /**
+ * @param string $xmlstring
+ *
+ * @return string
+ */
+ protected function formatXmlForOutput($xmlstring)
+ {
+ $ret = '';
+ $startpos = 0;
+ $lvl = 1;
+ $xmlstring = trim($xmlstring);
+ while(($pos = strpos($xmlstring,'<',$startpos)) !== false) {
+ $isOpening = true;
+ $isClosing = false;
+ $pos1 = strpos($xmlstring,' ', $pos+1);
+ $pos2 = strpos($xmlstring,'>', $pos+1);
+ if($pos1 !== false && $pos2 !== false) {
+ if ($xmlstring[$pos + 1] === '/') {
+ $isClosing = true;
+ $isOpening = false;
+ }
+ elseif($xmlstring[$pos2 - 1] === '/') {
+ $isClosing = true;
+ $isOpening = true;
+ }
+ }
+ elseif($pos2 !== false) {
+ if ($xmlstring[$pos + 1] === '/') {
+ $isClosing = true;
+ $isOpening = false;
+ }
+ elseif($xmlstring[$pos2 - 1] === '/') {
+ $isClosing = true;
+ $isOpening = true;
+ }
+ }
+ else {
+ $pos2 = $pos;
+ }
+
+ $prev = trim(substr($xmlstring, $startpos, $pos-$startpos));
+
+ if($isClosing) {
+ $lvl--;
+ }
+
+ $xmlPart = str_repeat(' ', $lvl).trim(substr($xmlstring, $pos, $pos2 - $pos + 1)). "\n";
+
+ if($isOpening) {
+ $lvl++;
+ }
+
+ if($lvl < 1) {
+ $lvl = 1;
+ }
+ if($prev !== '') {
+ $ret = trim($ret).$prev.ltrim($xmlPart);
+ }
+ else{
+ $ret .= $prev . $xmlPart;
+ }
+ $startpos = $pos2 + 1;
+ }
+ $ret .= str_repeat(' ',$lvl).trim(substr($xmlstring, $startpos + 1));
+
+ return $ret;
+ }
+
+ /**
+ * @param int $shopId
+ *
+ * @return mixed|null
+ */
+ public function getSettingFields($shopId)
+ {
+ if(empty($shopId)) {
+ return null;
+ }
+
+ $json = $this->app->DB->Select(sprintf('SELECT `einstellungen_json` FROM `shopexport` WHERE `id` = %d', $shopId));
+ if(empty($json)) {
+ return null;
+ }
+
+ $json = json_decode($json, true);
+ if(empty($json['felder'])) {
+ return null;
+ }
+
+ return $json['felder'];
+ }
+
+ /**
+ * @param int $shopId
+ *
+ * @return string|null
+ */
+ protected function getTemplateFromShop($shopId)
+ {
+ $fields = $this->getSettingFields($shopId);
+ if(empty($fields) || empty($fields['transform_cart_active']) || empty($fields['transform_cart'])) {
+ return null;
+ }
+
+ return $fields['transform_cart'];
+ }
+
+ /**
+ * @param int $addressId
+ * @param array $cart
+ * @param int $projekt
+ * @param int $shopId
+ */
+ public function ImportAuftragBeforeHook($addressId, &$cart, $projekt, $shopId)
+ {
+ try {
+ $fields = $this->getSettingFields($shopId);
+ if(empty($fields) || empty($fields['transform_cart_active']) || empty($fields['transform_cart'])) {
+ return;
+ }
+ $content = $fields['transform_cart'];
+ if(empty($content)){
+ return;
+ }
+ $isJson = !empty($fields['transform_cart_format']) && $fields['transform_cart_format'] === 'json';
+ $merge = empty($fields['transform_cart_replace']);
+ if(!$isJson) {
+ $xml = $this->convertArrayToSimpleXml($cart);
+ $xmlString = $xml->asXML();
+ if(empty($xmlString)){
+ return;
+ }
+ }
+ $extId = empty($cart['auftrag'])?'':$cart['auftrag'];
+ $internet = empty($cart['onlinebestellnummer'])?'':$cart['onlinebestellnummer'];
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO `onlineshop_transfer_cart`
+ (`shop_id`, `template`, `cart_original`, `extid`, `internet`, `status`)
+ VALUES (%d, '%s', '%s', '%s', '%s', 'error') ",
+ $shopId, $this->app->DB->real_escape_string($content),
+ $this->app->DB->real_escape_string(base64_encode(json_encode($cart))),
+ $this->app->DB->real_escape_string($extId),
+ $this->app->DB->real_escape_string($internet)
+ )
+ );
+ $transferId = (int)$this->app->DB->GetInsertID();
+ $cartWithItem = $this->convertSimpleXmlToArray($xml, null, false);
+
+ $this->loadSmarty($shopId);
+ if($isJson) {
+ $newCart = $this->createCartObjectFromTemplateJson($cart, $content,$shopId, $merge);
+ }
+ else{
+ $newCarts = $this->createCartObjectFromTemplate($cart, $cartWithItem, $content, $shopId, $merge);
+ $newCart = $newCarts[0];
+ }
+ if(!empty($newCart)){
+ if($transferId > 0) {
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE `onlineshop_transfer_cart`
+ SET `cart_transfer` = '%s', `status` = 'transferred'
+ WHERE `id` = %d",
+ $this->app->DB->real_escape_string(base64_encode(json_encode($newCart))),
+ $transferId
+ )
+ );
+ }
+ $cart = $newCart;
+ }
+ }
+ catch (Exception $e) {
+
+ }
+ }
+
+ /**
+ * @param array $cart
+ * @param int $shopId
+ * @param bool $useJson
+ * @param bool $merge
+ * @param string|null $content
+ *
+ * @return array
+ */
+ public function addCartInfo($cart, $shopId, $useJson = false, $merge = true, $content = null)
+ {
+ if($content === null) {
+ $content = $this->getTemplateFromShop($shopId);
+ }
+ if(empty($content)) {
+ if(!$merge) {
+ return null;
+ }
+ return $cart;
+ }
+
+ if($useJson){
+ $this->loadSmarty($shopId);
+
+ return $this->createCartObjectFromTemplateJson($cart, $content, $shopId, $merge);
+ }
+
+ $xml = $this->convertArrayToSimpleXml($cart);
+ $xmlString = $xml->asXML();
+ if(empty($xmlString)) {
+ if(!$merge) {
+ return null;
+ }
+ return $cart;
+ }
+ $cartWithItem = $this->convertSimpleXmlToArray($xml, null, false);
+
+ $this->loadSmarty($shopId);
+ $newCarts = $this->createCartObjectFromTemplate($cart, $cartWithItem, $content, $shopId, $merge);
+ $newCart = $newCarts[0];
+ if(!empty($newCart)) {
+ return $newCart;
+ }
+ if(!$merge) {
+ return null;
+ }
+ return $cart;
+ }
+
+ /**
+ * @return JsonResponse
+ */
+ public function HandleRunSmartyIncommingAjaxAction()
+ {
+ $shopId = (int)$this->app->Secure->GetPOST('shopid');
+ $input = !isset($this->app->Secure->POST['input'])?null:$this->app->Secure->POST['input'];
+ $content = !isset($this->app->Secure->POST['content'])?null:$this->app->Secure->POST['content'];
+ $isJson = $this->app->Secure->GetPOST('format') === 'json';
+ $replaceCart = (bool)(int)$this->app->Secure->GetPOST('replacecart');
+ $xml = null;
+ $cart = null;
+ $cartWithItem = null;
+ if(is_string($input)) {
+ $input = trim($input);
+ }
+ if(is_string($content)) {
+ $content = trim($content);
+ }
+ try {
+ if($isJson){
+ $cart = json_decode($input, true);
+ }
+ else {
+ $xml = new SimpleXMLElement($input);
+ $cart = $this->convertSimpleXmlToArray($xml, null, true);
+ $cartWithItem = $this->convertSimpleXmlToArray($xml, null, false);
+ }
+ }
+ catch (Exception $e) {
+ $xml = null;
+ $cart = null;
+ $cartWithItem = null;
+ }
+ $this->loadSmarty($shopId);
+ try {
+ if($isJson) {
+ $newCart = $this->createCartObjectFromTemplateJson($cart, $content, $shopId, !$replaceCart);
+ }
+ else{
+ $newCarts = $this->createCartObjectFromTemplate($cart, $cartWithItem, $content, $shopId, !$replaceCart);
+ $newCart = $newCarts[0];
+ }
+ }
+ catch(Exception $e) {
+ return new JsonResponse(
+ [
+ 'success' => true,
+ 'preview' => print_r($e->getMessage(), true),
+ 'object' => ''.print_r($cart, true).' ',
+ ]
+ );
+ }
+ try{
+ if($isJson) {
+ $xmlData = json_encode($newCart);
+ }
+ else {
+ $xmlData = $this->convertArrayToSimpleXml($newCart);
+ $xmlData = $this->formatXmlForOutput($xmlData->asXML());
+ }
+ }
+ catch(Exception $e) {
+
+ }
+
+ return new JsonResponse(
+ [
+ 'success' => true,
+ 'preview' => $xmlData,
+ 'object' => ''.print_r($cart, true).' ',
+ ]
+ );
+ }
+
+ /**
+ * @return JsonResponse
+ */
+ public function HandleSaveSmartyIncommingAjaxAction()
+ {
+ $shopId = (int)$this->app->Secure->GetPOST('shopid');
+ $input = !isset($this->app->Secure->POST['input'])?null:$this->app->Secure->POST['input'];
+ $content = !isset($this->app->Secure->POST['content'])?null:$this->app->Secure->POST['content'];
+ $format = $this->app->Secure->GetPOST('format');
+ $replaceCart = (int)$this->app->Secure->GetPOST('replacecart');
+ $active = (int)$this->app->Secure->GetPOST('active');
+
+ $shopArr = $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT `einstellungen_json` FROM `shopexport` WHERE `id` = %d',
+ $shopId
+ )
+ );
+ if(!empty($shopArr)) {
+ $json = json_decode($shopArr['einstellungen_json'], true);
+ if(empty($json)) {
+ $json = [];
+ }
+ $json['felder']['transform_cart'] = $content;
+ $json['felder']['transform_cart_format'] = $format;
+ $json['felder']['transform_cart_replace'] = $replaceCart;
+ $json['felder']['transform_cart_active'] = $active;
+ $json['felder']['transform_cart_data'] = $input;
+ $json = json_encode($json);
+ if(!empty($json) && !empty(json_decode($json, true))){
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE `shopexport` SET `einstellungen_json` = '%s' WHERE `id` = %d",
+ $this->app->DB->real_escape_string($json), $shopId
+ )
+ );
+ }
+ return new JsonResponse(
+ [
+ 'success' => true,
+ ]
+ );
+ }
+
+ return new JsonResponse(
+ [
+ 'success' => false,
+ 'error' => 'Shop konnte nicht gespeichert werden',
+ ],
+ JsonResponse::HTTP_BAD_REQUEST
+ );
+ }
+
+
+ /**
+ * @param array $array
+ * @param string $rootNode Name des Root-Elements
+ *
+ * @return SimpleXMLElement
+ */
+ public function convertArrayToSimpleXml($array, $rootNode = 'xml')
+ {
+ $rootNodeCloser = explode(' ', $rootNode);
+ $rootNodeCloser = reset($rootNodeCloser);
+ $xml = new SimpleXMLElement(
+ sprintf('<%s>%s>', $rootNode, $rootNodeCloser)
+ );
+ $nameSpaces = $this->getNameSpacesByNode($rootNode);
+ $this->arrayToXmlHelper($xml, $array, $nameSpaces);
+
+ return $xml;
+ }
+
+
+ /**
+ * @param string $key
+ * @param array $nameSpaces
+ *
+ * @return array
+ */
+ protected function getAttributesFromKey($key, $nameSpaces = [])
+ {
+ $keyArr = explode(' ', $key);
+ $nameSpace = null;
+ $node = $keyArr[0];
+ if(strpos($node, ':') !== false) {
+ list($nameSpaceShort, $node) = explode(':', $node, 2);
+ if($nameSpaceShort !== '' && isset($nameSpaces[$nameSpaceShort])) {
+ $nameSpace = $nameSpaces[$nameSpaceShort];
+ }
+ }
+ unset($keyArr[0]);
+ $attributes = [];
+ foreach($keyArr as $attr) {
+ if(empty($attr)) {
+ continue;
+ }
+ $attrA = explode('=', $attr,2);
+ if(!empty($attrA[1])) {
+ $attrA[1] = trim($attrA[1],'"');
+ }
+ $attributes[] = $attrA;
+ }
+
+ return [$node, $attributes, $nameSpace];
+ }
+
+ /**
+ * @see convertArrayToSimpleXml
+ *
+ * @param SimpleXMLElement $xmlObj
+ * @param array $array
+ * @param array $nameSpaces
+ * @param string $parentTag
+ * @param array $attributesFromParent
+ */
+ protected function arrayToXmlHelper(&$xmlObj, $array, $nameSpaces = [], $parentTag = '', $attributesFromParent = [])
+ {
+ foreach ($array as $key => $value) {
+ if(is_int($key)) {
+ $key = 'item'.$key;
+ }
+ // Wenn kein Knotenname ermittelt werden konnte > den Knoten 'item' nennen
+ $subNodeName = is_int($key) ? 'item' : $key;
+ if(!empty($parentTag) && is_int($key)) {
+ $subNodeName = $parentTag;
+ }
+ list($subNodeName, $attributes, $nameSpace) = $this->getAttributesFromKey($subNodeName, $nameSpaces);
+
+ if (is_array($value)) {
+ $useParentTag = false;// !empty($key);
+ foreach ($value as $key2 => $value2) {
+ if(!is_int($key2) || !$useParentTag) {
+ $useParentTag = false;
+ break;
+ }
+ }
+ if($useParentTag) {
+ $this->arrayToXmlHelper($xmlObj, $value, $nameSpaces, $subNodeName, $attributes);
+ }
+ else {
+ $subNode = $xmlObj->addChild((string)$subNodeName, null, $nameSpace);
+ if (!empty($attributes)) {
+ foreach ($attributes as $attribute) {
+ $subNode->addAttribute((string)$attribute[0],
+ empty($attribute[1]) ? '' : (string)$attribute[1]);
+ }
+ }
+ elseif(!empty($attributesFromParent)) {
+ foreach ($attributesFromParent as $attribute) {
+ $subNode->addAttribute((string)$attribute[0],
+ empty($attribute[1]) ? '' : (string)$attribute[1]);
+ }
+ }
+ $this->arrayToXmlHelper($subNode, $value, $nameSpaces,$subNodeName);
+ }
+ } else {
+ $subNode = $xmlObj->addChild((string)$subNodeName, htmlspecialchars($value, ENT_QUOTES), $nameSpace);
+ if(!empty($attributes)) {
+ foreach($attributes as $attribute) {
+ $subNode->addAttribute((string)$attribute[0], empty($attribute[1])?'':(string)$attribute[1]);
+ }
+ }
+ elseif(!empty($attributesFromParent)) {
+ foreach($attributesFromParent as $attribute) {
+ $subNode->addAttribute((string)$attribute[0], empty($attribute[1])?'':(string)$attribute[1]);
+ }
+ }
+ }
+ }
+ }
+
+
+ /**
+ * @param string $node
+ *
+ * @return array
+ */
+ protected function getNameSpacesByNode($node)
+ {
+ $nameSpaces = [];
+ $nodeArr = explode(' ', $node);
+ unset($nodeArr[0]);
+ foreach($nodeArr as $nodeVal) {
+ $nodeVal = trim($nodeVal);
+ if(empty($nodeVal)) {
+ continue;
+ }
+ if(preg_match_all('/xmlns(:{0,1})([^=]*)="([^"]+)"/', $nodeVal, $matches)) {
+ $nameSpaces[$matches[2][0]] = $matches[3][0];
+ }
+ }
+
+ return $nameSpaces;
+ }
+
+ /**
+ * @param $id
+ */
+ protected function loadSmarty($id)
+ {
+ $this->smartydir = 'Modules/Onlineshops';
+ $this->segment = 'online'.$id;// uniqid('online', true);
+ $this->templateDir = $this->app->erp->GetTMP().$this->smartydir.'/template_'.$id.$this->segment;
+ $this->tmpl = $this->app->Container->get('TransferSmartyTemplate');
+ if(!is_dir($this->templateDir) && !mkdir($this->templateDir, 0777, true)
+ && !is_dir($this->templateDir)) {
+ return;
+ }
+
+ $this->tmpl->addTemplateDir($this->segment, $this->templateDir . '/');
+ try {
+ $this->tmpl->registerPlugin('modifier', 'jsondecode', [$this, 'SmartyJsonDecode']);
+ $this->tmpl->registerPlugin('modifier', 'jsonencode', [$this, 'SmartyJsonEncode']);
+ $this->tmpl->registerPlugin('modifier', 'arraytolist', [$this, 'SmartyArrayToList']);
+ $this->tmpl->registerPlugin('modifier', 'print_r', [$this, 'SmartyPrintR']);
+ $this->tmpl->registerPlugin('modifier', 'preg_replace', 'preg_replace');
+ $this->tmpl->registerPlugin('modifier', 'substr', 'substr');
+ $this->tmpl->registerPlugin('modifier', 'strtolower', 'strtolower');
+ $this->tmpl->registerPlugin('modifier', 'strtoupper', 'strtoupper');
+ $this->tmpl->registerPlugin('modifier', 'explode', 'explode');
+ $this->tmpl->registerPlugin('modifier', 'strstr', 'strstr');
+ $this->tmpl->registerPlugin('modifier', 'strlen', 'strlen');
+ $this->tmpl->registerPlugin('modifier', 'strtotime', 'strtotime');
+ $this->tmpl->registerPlugin('modifier', 'intval', 'intval');
+ }
+ catch (Exception $e) {
+
+ }
+ }
+
+ /**
+ * @param string $content
+ *
+ * @return string
+ */
+ protected function reformatTemplate($content) {
+ return str_replace("\\\n",'', str_replace("\r", '', $content));
+ }
+
+ /**
+ * @param array $cartObj
+ * @param string $template
+ * @param int $shopId
+ * @param bool $merge
+ *
+ * @return array
+ */
+ protected function createCartObjectFromTemplateJson($cartObj, $template, $shopId, $merge = true)
+ {
+ if(!is_dir($this->templateDir) && !mkdir($this->templateDir, 0777, true)
+ && !is_dir($this->templateDir)) {
+ if($merge){
+ return $cartObj;
+ }
+ return null;
+ }
+
+ @file_put_contents(
+ $this->templateDir.'/cart_'.$shopId.'.tpl', trim($this->reformatTemplate($template))
+ );
+ try {
+ $object = json_decode(json_encode($cartObj));
+ $this->tmpl->assign('cart', $object);
+ $this->tmpl->assign('cartarray', $cartObj);
+ $this->tmpl->assign('object', $object);
+ $this->tmpl->assign('objectarray', $cartObj);
+ $shop = $this->app->DB->SelectRow(sprintf('SELECT * FROM `shopexport` WHERE `id` = %d', $shopId));
+ $settings = @json_decode($shop['einstellungen_json'], true);
+ $settings = empty($settings['felder'])?null:$settings['felder'];
+ $this->tmpl->assign(
+ 'shop',
+ $shop
+ );
+ $this->tmpl->assign(
+ 'shopsettings',
+ json_decode(json_encode($settings))
+ );
+ }
+ catch (Exception $e) {
+ if($merge){
+ return $cartObj;
+ }
+ return null;
+ }
+ try {
+ $content = $this->tmpl->fetch($this->segment, 'cart_' . $shopId . '.tpl');
+ }
+ catch (Exception $e) {
+ throw $e;
+ }
+ $content = trim($content);
+ $ret = json_decode($content, true);
+ if(!$merge) {
+ return $ret;
+ }
+
+ return $this->mergeArrays($cartObj, $ret);
+ }
+
+ /**
+ * @param array $cartObj
+ * @param array $cartWithItemObj
+ * @param string $template
+ * @param int $shopId
+ * @param bool $merge
+ *
+ * @return array
+ */
+ protected function createCartObjectFromTemplate($cartObj, $cartWithItemObj, $template, $shopId, $merge = true)
+ {
+ if(!is_dir($this->templateDir) && !mkdir($this->templateDir, 0777, true)
+ && !is_dir($this->templateDir)) {
+ if($merge){
+ return [$cartObj, $cartWithItemObj];
+ }
+ return [null, null];
+ }
+
+ @file_put_contents(
+ $this->templateDir.'/cart_'.$shopId.'.tpl', trim($this->reformatTemplate($template))
+ );
+
+ try {
+ $object = json_decode(json_encode($cartWithItemObj));
+ $this->tmpl->assign('cart', $object);
+ $this->tmpl->assign('object', $object);
+ }catch (Exception $e) {
+ if($merge){
+ return [$cartObj, $cartWithItemObj];
+ }
+ return [null, null];
+ }
+ try {
+ $content = $this->tmpl->fetch($this->segment, 'cart_' . $shopId . '.tpl');
+ }
+ catch (Exception $e) {
+ throw $e;
+ }
+ try {
+ $content = trim($content);
+ $xml = new SimpleXMLElement($content);
+ if($xml === false) {
+ $ret = json_decode($content, true);
+ if(is_array($ret)) {
+ if($merge){
+ return [
+ $this->mergeArrays($cartObj, $ret),
+ null,
+ ];
+ }
+ return [$ret, null];
+ }
+ }
+
+ $ret = $this->convertSimpleXmlToArray($xml);
+ $retItem = $this->convertSimpleXmlToArray($xml, null, false);
+ if(is_array($ret)) {
+ if($merge){
+ return [
+ $this->mergeArrays($cartObj, $ret),
+ $this->mergeArrays($cartWithItemObj, $retItem),
+ ];
+ }
+ return [$ret, $retItem];
+ }
+ }
+ catch (Exception $e) {
+
+ }
+
+ if($merge){
+ return [$cartObj, $cartWithItemObj];
+ }
+ return [null, null];
+ }
+
+ /**
+ * @param array $from
+ * @param array $to
+ */
+ public function mergeArrays($from, $to)
+ {
+ $ret = $from;
+ if(is_array($to)) {
+ foreach($to as $key => $value) {
+ if(!isset($ret[$key])) {
+ $ret[$key] = $value;
+ continue;
+ }
+ if(is_array($value)) {
+ $ret[$key] = $this->mergeArrays($ret[$key], $value);
+ continue;
+ }
+ $ret[$key] = $value;
+ }
+ }
+
+ return $ret;
+ }
+}
diff --git a/www/pages/shopexport.php b/www/pages/shopexport.php
index a6ebf47a..715b428d 100644
--- a/www/pages/shopexport.php
+++ b/www/pages/shopexport.php
@@ -1,1126 +1,1136 @@
-app=$app;
- if($intern) {
- return;
- }
-
- $this->app->ActionHandlerInit($this);
-
- $this->app->ActionHandler("login","ShopexportLogin");
- $this->app->ActionHandler("main","ShopexportMain");
- $this->app->ActionHandler("list","ShopexportList");
- $this->app->ActionHandler("export","ShopexportExport");
- $this->app->ActionHandler("artikeluebertragung","ShopexportArtikeluebertragung");
- $this->app->ActionHandler("adressuebertragung","ShopexportAdressuebertragung");
- $this->app->ActionHandler("artikeluebertragungdel","ShopexportArtikeluebertragungdel");
- $this->app->ActionHandler("adressuebertragungdel","ShopexportAdressuebertragungdel");
- $this->app->ActionHandler("besuchen","ShopexportBesuchen");
- $this->app->ActionHandler("navigation","ShopexportNavigation");
- $this->app->ActionHandler("logout","ShopexportLogout");
- $this->app->ActionHandler("navigationtab","ShopexportNavigationUebersicht");
- $this->app->ActionHandler("artikelgruppen","ShopexportArtikelgruppen");
- $this->app->ActionHandler("dateien","ShopexportDateien");
- $this->app->ActionHandler("live","ShopexportLive");
-
- $this->app->DefaultActionHandler("list");
- $this->app->ActionHandlerListen($app);
- }
-
- public function ShopexportList()
- {
- $this->app->Location->execute('index.php?module=importvorlage&action=uebersicht');
- }
-
- public function ShopexportLive()
- {
- $id = $this->app->Secure->GetGET('id');
- $this->app->erp->Headlines('Navigation');
- $this->ShopexportMenu();
-
- $url = $this->app->DB->Select("SELECT url FROM shopexport WHERE id='$id' LIMIT 1");
- $this->app->Tpl->Set('ID',$id);
- $this->app->Tpl->Set('URL',$url);
-
- $this->app->Tpl->Parse('PAGE','shopexport_live.tpl');
- }
-
- public function Install()
- {
- $this->app->erp->CheckColumn('namenuebertragen','tinyint(1)','shopexport','DEFAULT -1');
- $this->app->erp->CheckColumn('beschreibunguebertragen','tinyint(1)','shopexport','DEFAULT -1');
- $this->app->erp->CheckColumn('verkaufspreis','tinyint(1)','shopexport','DEFAULT -1');
- $this->app->erp->CheckColumn('staffelpreiseuebertragen','tinyint(1)','shopexport','DEFAULT -1');
- $this->app->erp->CheckColumn('fremdsprachenuebertragen','tinyint(1)','shopexport','DEFAULT -1');
- $this->app->erp->CheckColumn('kategorienanlegen','tinyint(1)','shopexport','DEFAULT -1');
- $this->app->erp->CheckColumn('kategorienbaumuebertragen','tinyint(1)','shopexport','DEFAULT -1');
- $this->app->erp->CheckColumn('eanuebertragen','tinyint(1)','shopexport','DEFAULT -1');
- $this->app->erp->CheckColumn('zolltarifnummeruebertragen','tinyint(1)','shopexport','DEFAULT -1');
- $this->app->erp->CheckColumn('gewichtuebertragen','tinyint(1)','shopexport','DEFAULT -1');
- $this->app->erp->CheckColumn('herstelleruebertragen','tinyint(1)','shopexport','DEFAULT -1');
- $this->app->erp->CheckColumn('matrixeigenschaftenuebertragen','tinyint(1)','shopexport','DEFAULT -1');
- }
-
- protected function CheckEdit($id = null, $create = false)
- {
- if($id === null) {
- $id = $this->app->Secure->GetGET('id');
- }
- if(!is_numeric($id) || $id <= 0) {
- return;
- }
- $shopexportarr = $this->app->DB->SelectRow('SELECT * FROM shopexport WHERE id = '.$id.' LIMIT 1');
- if(empty($shopexportarr)) {
- return;
- }
- if($shopexportarr['shoptyp'] === '' || $shopexportarr['shoptyp'] === 'extern') {
- $obj = new ShopimporterBase();
- }
- elseif($shopexportarr['shoptyp'] === 'intern' && !empty($shopexportarr['modulename'])) {
- $obj = $this->app->erp->LoadModul($shopexportarr['modulename']);
- }
- if(empty($obj) || !method_exists($obj,'getArticleExportCapability')) {
- return;
- }
- $export = $obj->getArticleExportCapability();
- foreach($export as $k => $v) {
- if(isset($v['field']) && $shopexportarr[$v['field']] == -1) {
- if($create && isset($v['defaultoncreate'])) {
- $this->app->DB->Update("UPDATE shopexport SET '".$v['field']."' = ".(int)$v['defaultoncreate']." WHERE id = '$id' LIMIT 1");
- }
- elseif(isset($v['default'])) {
- if(is_numeric($v['default'])) {
- $this->app->DB->Update("UPDATE shopexport SET '".$v['field']."' = ".(int)$v['default']." WHERE id = '$id' LIMIT 1");
- }
- elseif(isset($shopexportarr[$v['default']])) {
- $this->app->DB->Update("UPDATE shopexport SET '".$v['field']."' = ".(int)$shopexportarr[$v['default']]." WHERE id = '$id' LIMIT 1");
- }
- }
- else{
- $this->app->DB->Update("UPDATE shopexport SET '".$v['field']."' = 0 WHERE id = '$id' LIMIT 1");
- }
- }
- }
- }
-
- protected function CheckCreate($id = null)
- {
- $this->CheckEdit($id, true);
- }
-
- public function ShopexportNavigationUebersicht()
- {
- $id = $this->app->Secure->GetGET('id');
- $this->app->erp->Headlines('Navigation');
- $this->ShopexportMenu();
-
- $navexport = $this->app->Secure->GetPOST('navexport');
- $this->app->Tpl->Set('ID',$id);
- $this->app->Tpl->Set('NAVEXPORT',' Navigation vom Shop ändern (interne Shop! kein XT & Co.).
');
- if(!empty($navexport)) {
- $this->app->remote->RemoteSendArtikelgruppen($id);
- $anzahl = $this->app->remote->RemoteSendNavigation($id);
- $this->app->erp->NewEvent('Navigations-Export Online-Shop Nr. '.$id,'onlineshop');
- $this->app->Tpl->Set('NAVEXPORT','Es wurden '.$anzahl.' Navigationen heraufgeladen.
');
- }
-
- $this->app->Tpl->Parse('PAGE','shopexport_navigation.tpl');
- }
-
- public function ShopexportArtikelgruppen()
- {
- $this->app->erp->Headlines('Artikelgruppen');
- $this->ShopexportMenu();
-
- $shop = $this->app->Secure->GetGET('id');
- $edit = $this->app->Secure->GetGET('edit');
- $delete = $this->app->Secure->GetGET('delete');
-
- $bezeichnung = $this->app->Secure->GetPOST('bezeichnung');
- $bezeichnung_en = $this->app->Secure->GetPOST('bezeichnung_en');
- $beschreibung_de = $this->app->Secure->GetPOST('beschreibung_de');
- $beschreibung_en = $this->app->Secure->GetPOST('beschreibung_en');
-
- $aktiv = $this->app->Secure->GetPOST('aktiv');
- $submit = $this->app->Secure->GetPOST('anlegen');
-
- // Edit
- if(is_numeric($edit)) {
- if(!empty($submit) && is_numeric($shop)) {
- $this->app->DB->Update("UPDATE artikelgruppen SET bezeichnung='$bezeichnung',
- bezeichnung_en='$bezeichnung_en',
- beschreibung_de='$beschreibung_de',
- beschreibung_en='$beschreibung_en',
- shop='$shop', aktiv='$aktiv' WHERE id='$edit' LIMIT 1");
- $this->app->Location->execute('index.php?module=shopexport&action=artikelgruppen&id='.$shop.'#tabs-1');
- }
-
- $data = $this->app->DB->SelectArr("SELECT bezeichnung, bezeichnung_en, beschreibung_de, beschreibung_en, aktiv
- FROM artikelgruppen WHERE id='$edit' LIMIT 1");
- if(is_array($data)) {
- $this->app->Tpl->Set('BEZEICHNUNG', $data[0]['bezeichnung']);
- $this->app->Tpl->Set('BESCHREIBUNG_DE', $data[0]['beschreibung_de']);
- $this->app->Tpl->Set('BESCHREIBUNG_EN', $data[0]['beschreibung_en']);
- $this->app->Tpl->Set('BEZEICHNUNGEN', $data[0]['bezeichnung_en']);
- $this->app->Tpl->Set('AKTIVCHECKED', (($data[0]['aktiv']=='1') ? 'checked' : ''));
- }
- }else{
- if(!empty($submit) && is_numeric($shop)) {
- $this->app->DB->Insert("INSERT INTO artikelgruppen (bezeichnung, bezeichnung_en, beschreibung_de,beschreibung_en, shop, aktiv) VALUES ('$bezeichnung', '$bezeichnung_en','$beschreibung_de','$beschreibung_en','$shop', '$aktiv')");
- $this->app->Location->execute('index.php?module=shopexport&action=artikelgruppen&id='.$shop.'#tabs-1');
- }
- }
-
- // Delete
- if(is_numeric($delete)) {
- $this->app->DB->Delete("DELETE FROM artikelgruppen WHERE id='$delete' LIMIT 1");
- $this->app->Location->execute('index.php?module=shopexport&action=artikelgruppen&id='.$shop);
- }
-
- // Table
- $table = new EasyTable($this->app);
- $this->app->Tpl->Set('INHALT','');
- $this->app->Tpl->Set('SUBSUBHEADING','Artikelgruppen');
- $table->Query("SELECT g.bezeichnung as artikelgruppe, g.id as gruppe, s.bezeichnung, if(g.aktiv,'online','') as aktiv, g.id FROM artikelgruppen g,
- shopexport s WHERE s.firma='".$this->app->User->GetFirma()."' AND s.id=g.shop AND s.id=$shop");
- $table->DisplayNew('INHALT', "
-
- ");
- $this->app->Tpl->Set('EXTEND','');
- $this->app->Tpl->Parse('TABLE', 'rahmen70.tpl');
-
- $this->app->Tpl->Parse('PAGE','shopexport_artikelgruppen.tpl');
- }
-
- public function ShopexportDateien()
- {
- $this->app->erp->Headlines('Shopexport','Dateien');
- $this->ShopexportMenu();
-
- $id = $this->app->Secure->GetGET('id');
- $this->app->YUI->DateiUpload('PAGE','Banner',$id);
- }
-
- public function ShopexportMenu()
- {
- $id = $this->app->Secure->GetGET('id');
-
- $shopexportRow = $id <= 0?null: $this->app->DB->SelectRow(
- sprintf(
- 'SELECT `bezeichnung`, `typ`, `shoptyp`, `modulename` FROM `shopexport` WHERE `id` = %d LIMIT 1',
- $id
- )
- );
- $name = empty($shopexportRow['bezeichnung'])?'': $shopexportRow['bezeichnung'];
- $this->app->erp->Headlines('',$name);
- /** @var Appstore $appstore */
- if(
- !empty($shopexportRow['shoptyp'])
- && $shopexportRow['shoptyp'] === 'intern'
- && ($appstore = $this->app->erp->LoadModul('appstore'))
- && !empty($shopexportRow['modulename'])
- && $appstore->isBeta($shopexportRow['modulename'])) {
- $appstore->addBetaToHeadline();
- }
-
- //$this->app->Tpl->Add('KURZUEBERSCHRIFT2',$name);
-
- $typ = empty($shopexportRow['typ'])?'':$shopexportRow['typ'];
-
- $this->app->erp->MenuEintrag('index.php?module=onlineshops&action=create','Neu');
-
- $this->app->erp->MenuEintrag("index.php?module=onlineshops&action=edit&id=$id",'Details');
- //$this->app->erp->MenuEintrag("index.php?module=shopexport&action=export&id=$id","Export");
- $this->app->erp->MenuEintrag("index.php?module=shopexport&action=artikeluebertragung&id=$id","Artikel Übertragung");
- if($this->app->DB->Select("SELECT modulename FROM shopexport WHERE id = '$id'") === 'shopimporter_shopware'){
- //Soll nur in Shopware angezeigt werden, da nur in Shopware unterstüzt
- $this->app->erp->MenuEintrag("index.php?module=shopexport&action=adressuebertragung&id=$id","Adressen Übertragung");
- }
-
- if($typ==='wawision') {
- $this->app->erp->MenuEintrag("index.php?module=shopexport&action=navigationtab&id=$id","Navigation");
- $this->app->erp->MenuEintrag("index.php?module=shopexport&action=artikelgruppen&id=$id","Artikelgruppen");
- $this->app->erp->MenuEintrag("index.php?module=shopexport&action=dateien&id=$id","Dateien");
- $this->app->erp->MenuEintrag("index.php?module=shopexport&action=live&id=$id","Live-Status");
- $this->app->erp->MenuEintrag("index.php?module=inhalt&action=listshop&id=$id","Inhalte / E-Mailvorlagen");
- }
- $this->app->erp->MenuEintrag("index.php?module=shopexport&action=list","Zurück zur Übersicht");
-
- $this->app->erp->RunMenuHook('shopexport');
- }
-
-
- public function ShopexportBesuchen()
- {
- $id = $this->app->Secure->GetGET('id');
-
- $url = $this->app->DB->Select("SELECT url FROM shopexport WHERE id='$id' LIMIT 1");
- $typ = $this->app->DB->Select("SELECT typ FROM shopexport WHERE id='$id' LIMIT 1");
-
-
- if($typ==='wawision') {
- $this->app->Location->execute($url);
- }
- }
-
-
- public function ShopexportExport()
- {
- $id = $this->app->Secure->GetGET('id');
- $this->ShopexportMenu();
- $this->app->erp->MenuEintrag('index.php?module=onlineshops&action=edit&id='.$id, "Zurück zur Übersicht");
-
- $this->app->Tpl->Set('SCHRITT2',"disabled");
- $this->app->Tpl->Set('SCHRITT3',"disabled");
-
- $this->app->Tpl->Set('STATUS',"Artikel Export: Bitte Verbindung prüfen.
");
-
- $this->app->Tpl->Set('ID',$id);
- $this->app->Tpl->Set('COMMONEXPORT',"Abgleich zu Kundencenter.
");
-
- if($this->app->Secure->GetPOST("commonexport")!=''){
- $anzahl = $this->app->remote->RemoteSendExportlink($id);
- //$anzahl = $this->app->remote->RemoteSendNavigation($id);
- //$this->app->erp->NewEvent("Navigations-Export Online-Shop Nr. $id","onlineshop");
- $this->app->Tpl->Set('COMMONEXPORT',"Es wurden ".$anzahl." Datensätze heraufgeladen.
");
- }
-
- if($this->app->Secure->GetPOST("schritt1")!=''){
-
- $className = 'Remote';
- $methodName = 'RemoteConnection';
- $r = new ReflectionMethod($className, $methodName);
- $params = $r->getParameters();
- $anzargs = (!empty($params)?count($params):0);
- if($anzargs > 1) {
- $pageContents = $this->app->remote->RemoteConnection($id, true);
- }
- else{
- $pageContents = $this->app->remote->RemoteConnection($id);
- }
- if($pageContents==='success') {
- if($anzargs > 1) {
- $pageContents2 = $this->app->remote->RemoteConnection($id, 'info');
- }
-
- $this->app->Tpl->Set('SCHRITT2','');
- $this->app->Tpl->Set('HIDDENSCHRITT2'," ");
- if($anzargs > 1 && is_array($pageContents2)) {
- $json = $this->app->DB->Select("SELECT json FROM shopexport WHERE id = '$id' LIMIT 1");
- if($json)
- {
- $json = array_merge(json_decode($json, true), $pageContents2);
- }else{
- $json = $pageContents2;
- }
- $this->app->DB->Update("UPDATE shopexport set json = '".$this->app->DB->real_escape_string(json_encode($json))."' WHERE id = '$id' LIMIT 1");
- unset($json);
- $this->app->Tpl->Set('STATUS',"");
- if(isset($pageContents2['subshops']))
- {
- $this->app->Tpl->Set('STATUS',"Subshops:
-
Id Name Aktiv
- ");
- foreach($pageContents2['subshops'] as $subshop)
- {
- $this->app->Tpl->Add('STATUS',"".$subshop['id']." ".$subshop['name']." ".($subshop['aktiv']?'ja':'nein')." ");
- }
- $this->app->Tpl->Add('STATUS',"
");
- }else{
- $this->app->Tpl->Add('STATUS',"Verbindung: success");
- }
- $this->app->Tpl->Add('STATUS',"
");
- }else{
- $this->app->Tpl->Set('STATUS',"Verbindung: $pageContents
");
- }
- }
- else {
- $this->app->Tpl->Set('STATUS',"Verbindungsproblem: Eventuell falsche Schlüssel! ($pageContents)
");
- }
- }
-
- if($this->app->Secure->GetPOST('schritt2')!='' && $this->app->Secure->GetPOST('schritt1_check')=='1') {
- $projekt = $this->app->DB->Select("SELECT projekt FROM shopexport WHERE id='$id' LIMIT 1");
-
- $this->app->erp->UpdateChecksumShopartikel($projekt);
-
- $tmp = $this->app->remote->RemoteGetUpdateArticleList($id);
-
- $this->app->Tpl->Set('SCHRITT2','');
- $this->app->Tpl->Set('SCHRITT3','');
- $this->app->Tpl->Set('HIDDENSCHRITT2'," ");
- $this->app->Tpl->Set('HIDDENSCHRITT3'," ");
-
- $html = "";
-
- $this->app->Tpl->Set('UPDATES',$html);
-
- }
- if($this->app->Secure->GetPOST("schritt3")!="" && $this->app->Secure->GetPOST("schritt1_check")=="1" &&
- $this->app->Secure->GetPOST("schritt2_check")=="1")
- {
- $artikel = $this->app->Secure->GetPOST("artikel");
- $this->app->erp->NewEvent("Artikel-Export Online-Shop Nr. $id","onlineshop");
-
- // artikelgruppen update
-
- if($this->app->Secure->GetPOST("cms")=="1") {
- $cms = $this->app->DB->Select("SELECT cms FROM shopexport WHERE id='$id' LIMIT 1");
- if($cms=='1'){
- $this->app->remote->RemoteSendInhalt($id);
- }
- }
-
- if($this->app->Secure->GetPOST("artikelgruppen")=="1") {
- $this->app->remote->RemoteSendArtikelgruppen($id);
- $this->app->remote->RemoteSendArtikelArtikelgruppen($id);
- }
-
-
- // sende artikel liste
- $tmp_anzahl = $this->app->remote->RemoteSendArticleList($id,$artikel);
-
- // dateien update
- //$dateien = $this->app->DB->SelectArr("SELECT DISTINCT ds.datei FROM datei_stichwoerter ds, datei d WHERE d.id=ds.datei AND (ds.subjekt!='Druckbild') AND (ds.objekt='Artikel' OR ds.objekt='Kampangen') AND d.geloescht=0 AND d.firma='".$this->app->User->GetFirma()."'");
-
- // das sind zuviele bilder!!!! nur die bilder vom shop! TODO
-
- //$dateien = $this->app->DB->SelectArr("SELECT DISTINCT ds.datei FROM datei_stichwoerter ds, datei d WHERE d.id=ds.datei AND (ds.subjekt!='Druckbild') AND (ds.objekt='Artikel' OR ds.objekt='Kampangen') AND d.firma='".$this->app->User->GetFirma()."'");
-
- if($this->app->Secure->GetPOST("dateienupdate")==1) {
- $dateien = $this->app->DB->SelectArr("SELECT DISTINCT ds.datei FROM datei_stichwoerter ds, datei d, artikel a WHERE d.id=ds.datei AND (ds.subjekt='Shopbild' OR ds.subjekt='Gruppenbild') AND ((ds.objekt='Artikel' AND ds.parameter=a.id) OR (ds.objekt='Kampangen' AND ds.parameter='$id')) AND d.firma='".$this->app->User->GetFirma()."' AND a.shop='$id'");
-
- $tmp = $this->app->remote->RemoteGetFileList($id);
-
- if(is_array($tmp)) {
- foreach($tmp as $row) {
- $checkarray[$row['datei']] = $row['checksum'];
- }
- }
- $datei_updates = 0;
- $cdateien = !empty($dateien)?count($dateien):0;
- for($i=0;$i<$cdateien;$i++) {
- $fid = $dateien[$i]['datei'];
- $geloescht = $this->app->DB->Select("SELECT geloescht FROM datei WHERE id='$fid' LIMIT 1");
-
- if(isset($checkarray) && ($checkarray[$fid]!=md5($this->app->erp->GetDatei($fid))) && $geloescht==0) {
- $datei_updates++;
- $this->app->remote->RemoteSendFile($id,$fid);
- $this->app->remote->RemoteAddFileSubject($id,$fid);
- $checkarray[$fid]="update";
- }
- else {
- if($geloescht) {
- $this->app->remote->RemoteDeleteFile($id,$fid);
- $checkarray[$fid]='delete';
- }
- }
- $checkarray[$fid]='mark';
- // wenn datei lokal geloescht loesche diese auch auf dem server
- // if($geloescht)
- }
- }
- //print_r($checkarray);
- if(is_array($checkarray) && (!empty($checkarray)?count($checkarray):0)>0) {
- $delete=0;
- foreach($checkarray as $key=>$value) {
- if($checkarray[$key]!=='mark' && $checkarray[$key]!=='delete' && $checkarray[$key]!=='update') {
- //echo "loesche $key ";
- $this->app->remote->RemoteDeleteFile($id,$key);
- $delete++;
- }
- }
- }
- //ENDE DATEIEN
- // loesche nicht gebrauchte dateien
-
- if($datei_updates>0) {
- $this->app->Tpl->Set('STATUS',"Datei-Updates: ".$datei_updates.".
");
- }
- if($delete>0) {
- $this->app->Tpl->Add('STATUS',"Datei(en) gelöscht: ".$delete.".
");
- }
- // ende dateien update
-
- $this->app->DB->Insert("INSERT INTO shopexport_status (id, shopexport, bearbeiter,zeit, bemerkung,befehl)
- VALUES('','$id','".$this->app->User->GetName()."',NOW(),'','".serialize($artikel)."')");
-
- $this->app->Tpl->Add('STATUS',"Erfolgreiche Updates an ".$tmp_anzahl." Artikeln durchgeführt.
");
- }
-
-
- $this->app->Tpl->Set('SUBHEADING','Starte Artikel Export');
- $this->app->Tpl->Parse('PAGE','shopexport_export.tpl');
- }
-
-
- public function ShopexportArtikeluebertragungdel()
- {
- $id = (int)$this->app->Secure->GetGET('id');
- $shop = (int)$this->app->Secure->GetGET('shop');;
- if($id > 0){
- $shop = $this->app->DB->Select("SELECT shop FROM shopexport_artikeluebertragen WHERE artikel='$id' AND shop = '$shop' LIMIT 1");
- $this->app->DB->Delete("DELETE FROM shopexport_artikeluebertragen WHERE artikel='$id' AND shop = '$shop' LIMIT 1");
- $this->app->DB->Delete("DELETE FROM shopexport_artikeluebertragen_check WHERE artikel='$id' AND shop = '$shop' LIMIT 1");
- }
- $msg = $this->app->erp->base64_url_encode('Der Artikel wurde aus der Übertragung entfernt.
');
- $this->app->Location->execute('index.php?module=shopexport&action=artikeluebertragung&id='.$shop.'&msg='.$msg);
- }
-
- public function ShopexportAdressuebertragungdel()
- {
-
- $id = (int)$this->app->Secure->GetGET('id');
- $shop = 0;
- if($id > 0){
- $shop = $this->app->DB->Select("SELECT shop FROM shopexport_adressenuebertragen WHERE id='$id' LIMIT 1");
- $this->app->DB->Delete("DELETE FROM shopexport_adressenuebertragen WHERE id='$id' LIMIT 1");
- }
- $msg = $this->app->erp->base64_url_encode('Die Adresse wurde aus der Übertragung entfernt.
');
- $this->app->Location->execute('index.php?module=shopexport&action=adressuebertragung&id='.$shop.'&msg='.$msg);
- }
-
- /**
- * @param int $shopId
- *
- * @return array
- */
- public function getChangedCount($shopId)
- {
- $checkedStarted = (int)$this->app->erp->GetKonfiguration('shopexport_artikeluebertragen_check_start_'.$shopId);
- $checked = (int)$this->app->erp->GetKonfiguration('shopexport_artikeluebertragen_check_checked_'.$shopId);
- $changed = (int)$this->app->erp->GetKonfiguration('shopexport_artikeluebertragen_check_changed_'.$shopId);
- $transfered = (int)$this->app->erp->GetKonfiguration('shopexport_artikeluebertragen_check_transfered_'.$shopId);
- $lastid = (int)$this->app->erp->GetKonfiguration('shopexport_artikeluebertragen_check_lastid_'.$shopId);
- return [$checkedStarted, $checked, $changed, $checked - $changed, $transfered, $lastid];
- }
-
- /**
- * @param int $shopId
- */
- public function resetChangedInfo($shopId) {
- $this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_start_'.$shopId,'');
- $this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_checked_'.$shopId,'');
- $this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_changed_'.$shopId,'');
- $this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_transfered_'.$shopId,'');
- $this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_lastid_'.$shopId,'');
- }
-
- /**
- * @param int $ids
- */
- public function addChangedArticles($minutes = 15)
- {
- $ids = $this->app->DB->SelectFirstCols(
- sprintf(
- 'SELECT `id`
- FROM `shopexport`
- WHERE `aktiv` = 1 AND `autosendarticle` = 1 AND `artikelexport` = 1
- AND (`autosendarticle_last` IS NULL OR DATE_ADD(`autosendarticle_last` INTERVAL %d MINUTE) <= NOW())',
- $minutes
- )
- );
-
- if(empty($ids)) {
- return;
- }
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO `shopexport_artikeluebertragen_check` (`shop`, `artikel`)
- SELECT s.id as shop, a.id
- FROM `artikel` AS `a`
- INNER JOIN `shopexport` AS `s` ON s.id IN (%s)
- LEFT JOIN (
- SELECT `artikel`, `shop`
- FROM `artikel_onlineshops`
- WHERE `shop` IN (%s) AND `aktiv` = 1
- GROUP BY `artikel`, `shop`
- ) AS `oa` ON a.id = oa.artikel AND s.id = oa.shop
- LEFT JOIN `shopexport_artikeluebertragen_check` AS `sac` ON a.id = sac.artikel AND sac.shop = s.id
- LEFT JOIN `shopexport_artikeluebertragen` AS `sa` ON sa.shop = s.id AND sa.artikel = a.id
- WHERE (a.shop=s.id OR a.shop2=s.id OR a.shop3=s.id OR oa.artikel IS NOT NULL)
- AND a.geloescht!=1 AND sa.id IS NULL
- AND sac.id IS NULL
- GROUP BY a.id, s.id",
- implode(',', $ids), implode(',', $ids)
- )
- );
- }
-
- /**
- * @return RedirectResponse
- */
- public function HandleResetArticleCacheForArticleWithZeroStock(): RedirectResponse
- {
- $anz = 0;
- $id = (int)$this->app->Secure->GetGET('id');
- if($id > 0) {
- $this->app->DB->Update(
- "UPDATE `artikel` AS `a`
- INNER JOIN
- `artikel_onlineshops` AS `oa` ON oa.shop = '$id' AND oa.aktiv = 1 AND a.id = oa.artikel
- SET oa.storage_cache = -999, oa.pseudostorage_cache = -999
- WHERE (oa.storage_cache = 0 OR oa.storage_cache IS NULL) AND a.geloescht = 0"
- );
- $anz = $this->app->DB->affected_rows();
- $this->app->erp->LogFile("Lagerzahlencache zurückgesetzt für $anz Artikel mit 0-Mengen, shopid: $id");
- }
- $msg = $this->app->erp->base64_url_encode(
- "Lagerzahlen Cache für ".$anz." Artikel zurückgesetzt.
"
- );
- return RedirectResponse::createFromUrl("index.php?module=shopexport&action=artikeluebertragung&id=$id&msg=$msg");
- }
-
- public function ShopexportArtikeluebertragung()
- {
- $id = (int)$this->app->Secure->GetGET('id');
- $alle = $this->app->Secure->GetPOST('alle');
- $allchanged = $this->app->Secure->GetPOST('allchanged');
- $bestaetigen = $this->app->Secure->GetPOST('bestaetigen');
- $abbrechen = $this->app->Secure->GetPOST('abbrechen');
- $artikelladen = $this->app->Secure->GetPOST('artikelladen');
- $artikel = $this->app->Secure->GetPOST('artikel');
- $kategorie = $this->app->Secure->GetPOST('kategorie');
- $unterartikel = $this->app->Secure->GetPOST('unterartikel');
- $unterartikelkategorie = $this->app->Secure->GetPOST('unterartikelkategorie');
- $kategorieladen = $this->app->Secure->GetPOST('kategorieladen');
- $delcache = $this->app->Secure->GetPOST('delcache');
- $delzerostockcache = $this->app->Secure->GetPOST('delzerostockcache');
- $delArticleCache = $this->app->Secure->GetPOST('delarticlecache');
- $artikelexporterlauben = $this->app->Secure->GetPOST('artikelexporterlauben');
-
- if(!empty($artikelexporterlauben)){
- $this->app->DB->Update("UPDATE shopexport SET artikelexport=1 WHERE id='$id' LIMIT 1");
- }
-
- if(!empty($delzerostockcache)) {
- $this->HandleResetArticleCacheForArticleWithZeroStock()->send();
- $this->app->ExitXentral();
- }
- if(!empty($delcache)) {
- $anz = 0;
- if($id > 0) {
- $this->app->DB->Update("UPDATE artikel a
- LEFT JOIN (SELECT artikel FROM artikel_onlineshops WHERE shop = '$id' AND aktiv = 1 GROUP BY artikel) oa ON a.id = oa.artikel
- SET a.cache_lagerplatzinhaltmenge = -999 WHERE (a.shop = '$id' OR a.shop2 = '$id' OR a.shop3 = '$id' OR NOT ISNULL(oa.artikel)) AND a.geloescht = 0");
- $anz = $this->app->DB->affected_rows();
- $this->app->erp->LogFile("Lagerzahlencache zurückgesetzt für $anz Artikel, shopid: $id");
- }
- $msg = $this->app->erp->base64_url_encode("Lagerzahlen Cache für ".$anz." Artikel zurückgesetzt.
");
- $this->app->Location->execute("index.php?module=shopexport&action=artikeluebertragung&id=$id&msg=$msg");
- }
-
- if(!empty($delArticleCache)) {
- $anz = 0;
- if($id > 0){
- $this->app->DB->Update(
- sprintf(
- "UPDATE artikel_onlineshops SET last_article_hash = '', storage_cache=-999,pseudostorage_cache=-999 WHERE shop = %d",
- $id
- )
- );
- $anz = $this->app->DB->affected_rows();
- if($anz < 0) {
- $anz = 0;
- }
- }
- $msg = $this->app->erp->base64_url_encode("Artikel-Cache für ".$anz." Artikel zurückgesetzt.
");
- $this->app->Location->execute("index.php?module=shopexport&action=artikeluebertragung&id=$id&msg=$msg");
- }
-
- if(!empty($allchanged)) {
- if(!empty($bestaetigen)) {
- if($id > 0){
- /*$artikelarr = $this->app->DB->SelectArr("SELECT a.id FROM artikel a
- LEFT JOIN (SELECT artikel FROM artikel_onlineshops WHERE shop = '$id' AND aktiv = 1 GROUP BY artikel) oa ON a.id = oa.artikel
- WHERE (a.shop='$id' OR a.shop2='$id' OR a.shop3='$id' OR NOT ISNULL(oa.artikel)) AND a.geloescht!=1");
- $cartikelarr = !empty($artikelarr) ? count($artikelarr) : 0;
- for ($i = 0; $i < $cartikelarr; $i++) {
- $this->app->DB->Insert("INSERT INTO shopexport_artikeluebertragen_check (id,shop,artikel) VALUES ('','$id','" . $artikelarr[$i]['id'] . "')");
- }
- }*/
- $this->resetChangedInfo($id);
- $this->app->DB->Delete(
- sprintf(
- 'DELETE FROM shopexport_artikeluebertragen_check WHERE shop = %d',
- $id
- )
- );
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO shopexport_artikeluebertragen_check (shop, artikel)
- SELECT '%d' as shop, a.id FROM artikel a
- LEFT JOIN (
- SELECT artikel FROM artikel_onlineshops WHERE shop = %d AND aktiv = 1 GROUP BY artikel
- ) oa ON a.id = oa.artikel
- LEFT JOIN shopexport_artikeluebertragen AS sa ON sa.shop = %d AND sa.artikel = a.id
- WHERE (a.shop=%d OR a.shop2=%d OR a.shop3=%d OR NOT ISNULL(oa.artikel)) AND a.geloescht!=1 AND ISNULL(sa.id)
- GROUP BY a.id",
- $id, $id, $id, $id, $id, $id
- )
- );
- echo $this->app->DB->error();
- $changeStart = $this->app->DB->affected_rows();
- $this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_start_'.$id,
- $changeStart
- );
- $this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_checked_'.$id,0);
- $this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_changed_'.$id,0);
- $this->app->erp->SetKonfigurationValue(
- 'shopexport_artikeluebertragen_check_lastid_'.$id,
- mt_rand(1,2000000000)
- );
- }
-
- $msg = $this->app->erp->base64_url_encode("Alle Artikel die mit dem Shop verknüpft sind werden überprüft.
");
- $this->app->Location->execute("index.php?module=shopexport&action=artikeluebertragung&id=$id&msg=$msg");
- }
- $this->app->Tpl->Add('MESSAGE','Bitte Bestätigen Sie die Übertragung!
');
- }
-
- if(!empty($alle)) {
- if(!empty($bestaetigen)) {
- if($id > 0){
- /*$artikelarr = $this->app->DB->SelectArr("SELECT a.id FROM artikel a
- LEFT JOIN (SELECT artikel FROM artikel_onlineshops WHERE shop = '$id' AND aktiv = 1 GROUP BY artikel) oa ON a.id = oa.artikel
- WHERE (a.shop='$id' OR a.shop2='$id' OR a.shop3='$id' OR NOT ISNULL(oa.artikel)) AND a.geloescht!=1");
- $cartikelarr = !empty($artikelarr) ? count($artikelarr) : 0;
- for ($i = 0; $i < $cartikelarr; $i++) {
- $this->app->DB->Insert("INSERT INTO shopexport_artikeluebertragen (id,shop,artikel) VALUES ('','$id','" . $artikelarr[$i]['id'] . "')");
- }
- */
- $this->resetChangedInfo($id);
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO shopexport_artikeluebertragen (shop, artikel)
- SELECT '%d' AS shop, a.id FROM artikel a
- LEFT JOIN (
- SELECT artikel FROM artikel_onlineshops WHERE shop = %d AND aktiv = 1 GROUP BY artikel
- ) AS oa ON a.id = oa.artikel
- WHERE (a.shop=%d OR a.shop2=%d OR a.shop3=%d OR NOT ISNULL(oa.artikel)) AND a.geloescht!=1",
- $id,$id, $id, $id, $id
- )
- );
- $this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_start_'.$id,
- $this->app->DB->affected_rows()
- );
- }
-
- $msg = $this->app->erp->base64_url_encode("Alle Artikel die mit dem Shop verknüpft sind werden übertragen.
");
- $this->app->Location->execute("index.php?module=shopexport&action=artikeluebertragung&id=$id&msg=$msg");
- }
- $this->app->Tpl->Add('MESSAGE','Bitte Bestätigen Sie die Übertragung!
');
- }
-
- if(!empty($abbrechen)) {
- $this->app->DB->Delete("DELETE FROM shopexport_artikeluebertragen WHERE shop='$id'");
- $this->app->DB->Delete("DELETE FROM shopexport_artikeluebertragen_check WHERE shop='$id'");
- $this->resetChangedInfo($id);
- //$this->app->erp-> 'shopexport_artikeluebertragen_check_start_'.$id
- $msg = $this->app->erp->base64_url_encode('Alle aktuellen Artikel wurden aus der Übertragung entfernt.
');
- $this->app->Location->execute('index.php?module=shopexport&action=artikeluebertragung&id='.$id.'&msg='.$msg);
- }
-
- if($kategorieladen != '') {
- if(!empty($bestaetigen)) {
- $typ = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung!='' AND bezeichnung='$kategorie' LIMIT 1");
- if($typ) {
- $typ .= '_kat';
- }
- else{
- $typ = $kategorie;
- }
-
- if((String)$typ !== '') {
- $this->app->DB->Query("INSERT INTO shopexport_artikeluebertragen (artikel, shop) SELECT id as artikel ,'$id' as shop FROM artikel WHERE (geloescht = 0 OR isnull(geloescht)) AND nummer <> 'DEL' AND nummer <> '' AND typ = '$typ'");
- $anz = (int)$this->app->DB->affected_rows();
- //$artikelarr = $this->app->DB->SelectArr("SELECT id FROM artikel WHERE (geloescht = 0 OR isnull(geloescht)) AND nummer <> 'DEL' AND nummer <> '' AND typ = '$typ'");
- if($anz > 0) {
- $msg = $this->app->erp->base64_url_encode("Die Artikelkategorie wurde der Übertragung hinzugefügt ($anz Artikel).
");
- }
- else{
- $msg = $this->app->erp->base64_url_encode("Keine Artikel in dieser Artikelkategorie gefunden.
");
- }
- $this->app->Location->execute("index.php?module=shopexport&action=artikeluebertragung&id=$id&msg=$msg");
- }
- $msg = $this->app->erp->base64_url_encode("Keine Artikelkategorie ausgewählt
");
- $this->app->Location->execute("index.php?module=shopexport&action=artikeluebertragung&id=$id&msg=$msg");
- }
- $this->app->Tpl->Add('MESSAGE','Bitte Bestätigen Sie die Übertragung!
');
- }
-
- if($artikelladen!='') {
- if(!empty($bestaetigen)) {
- $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer!='' AND nummer='$artikel' AND (geloescht = 0 OR isnull(geloescht)) AND nummer <> 'DEL' LIMIT 1");
-
- if($artikelid > 0 && $id > 0)
- {
- $this->app->DB->Insert("INSERT INTO shopexport_artikeluebertragen (id,shop,artikel) VALUES ('','$id','$artikelid')");
-
- $msg = $this->app->erp->base64_url_encode("Der Artikel wurde der Übertragung hinzugefügt.
");
- $this->app->Location->execute("index.php?module=shopexport&action=artikeluebertragung&id=$id&msg=$msg");
- }
- $msg = $this->app->erp->base64_url_encode("Kein Artikel ausgewählt
");
- $this->app->Location->execute("index.php?module=shopexport&action=artikeluebertragung&id=$id&msg=$msg");
- }
- $this->app->Tpl->Add('MESSAGE','Bitte Bestätigen Sie die Übertragung!
');
- }
-
- $this->app->Tpl->Set('VORMATRIXPRODUKT','');
-
- $this->ShopexportMenu();
-
- $checking = (int)$this->app->DB->Select(
- sprintf(
- 'SELECT COUNT(id) FROM shopexport_artikeluebertragen_check WHERE shop = %d',
- $id
- )
- );
- list($start,$checked, $changed, $notChanged, $transfered, $lastid) = $this->getChangedCount($id);
- if($checking || (int)$start > 0) {
- $inList = (int)$this->app->DB->Select(
- sprintf(
- 'SELECT COUNT(id) FROM shopexport_artikeluebertragen WHERE shop = %d',
- $id
- )
- );
-
- if($inList === 0 && $checking === 0) {
- $this->app->Tpl->Add(
- 'MESSAGE',
- '' .$checked.' von '.$start.
- ' Artikel wurden überprüft. '.(!empty($transfered)?$transfered:$changed).' veränderte Artikel wurden gefunden und an den Shop übertragen.
');
- }
- else{
- $this->app->Tpl->Add(
- 'MESSAGE',
- '');
- /*if($start > 0) {
- $this->app->Tpl->Add(
- 'MESSAGE',
- ' '
- );
- }
- else {
- $this->app->Tpl->Add(
- 'MESSAGE',
- '');
- $this->app->Tpl->Add('IMPORTERINFO','Der Artikelexport für diesen Importer ist nicht aktiviert.
- ');
- $this->app->Tpl->Add('IMPORTERINFO','
');
- }
- $this->app->erp->checkActiveCronjob('artikeluebertragen', 'IMPORTERINFO2');
-
-
-
-
- $this->app->erp->MenuEintrag('index.php?module=onlineshops&action=edit&id='.$id, 'Zurück zur Übersicht');
- $this->app->YUI->AutoComplete('artikel','artikelnummer',1);
- $this->app->YUI->AutoComplete('kategorie','artikelkategorien');
- $this->app->YUI->TableSearch('TAB1','shopexport_artikeluebertragung');
- $this->app->Tpl->Parse('PAGE','shopexport_artikeluebertragung.tpl');
- }
-
- public function ShopexportAdressuebertragung()
- {
- $id = (int)$this->app->Secure->GetGET('id');
- $bestaetigen = $this->app->Secure->GetPOST('bestaetigen');
- $alle = $this->app->Secure->GetPOST('alle');
- $abbrechen = $this->app->Secure->GetPOST('abbrechen');
- $adresseladen = $this->app->Secure->GetPOST('adresseladen');
- $adresse = $this->app->Secure->GetPOST('adresse');
- $gruppeladen = $this->app->Secure->GetPOST('gruppeladen');
- $gruppe = $this->app->Secure->GetPOST('gruppe');
-
- if(!empty($alle)) {
- if(!empty($bestaetigen)) {
- if($id > 0){
- $this->app->DB->Insert("INSERT INTO shopexport_adressenuebertragen (shop,adresse) SELECT $id, a.id FROM adresse a WHERE a.geloescht <> 1 AND a.kundennummer <> '' AND a.id NOT IN (SELECT adresse FROM shopexport_adressenuebertragen WHERE shop = $id)");
- }
-
- $msg = $this->app->erp->base64_url_encode("Alle Adressen die mit dem Shop verknüpft sind werden übertragen.
");
- $this->app->Location->execute("index.php?module=shopexport&action=adressuebertragung&id=$id&msg=$msg");
- }
- $this->app->Tpl->Add('MESSAGE','Alle Adressen wurden aus der Übertragung entfernt.
');
- $this->app->Location->execute('index.php?module=shopexport&action=adressuebertragung&id='.$id.'&msg='.$msg);
- }
-
- if($gruppeladen!='') {
- if(!empty($bestaetigen) && $gruppe!='') {
- $gruppetmp = explode(' ', $gruppe);
- $gruppenid = $this->app->DB->Select("SELECT id FROM gruppen WHERE kennziffer='".$gruppetmp[0]."' LIMIT 1");
- if($gruppenid > 0 && $id > 0)
- {
- $this->app->DB->Insert("INSERT INTO shopexport_adressenuebertragen (shop,adresse) SELECT $id, a.id FROM adresse a JOIN adresse_rolle ar ON a.id = ar.adresse WHERE ar.subjekt='Mitglied' AND ar.objekt='Gruppe' AND ar.parameter='$gruppenid' AND a.geloescht <> 1 AND a.kundennummer <> '' AND a.id NOT IN (SELECT adresse FROM shopexport_adressenuebertragen WHERE shop = $id)");
- $msg = $this->app->erp->base64_url_encode("Die Adressen wurde der Übertragung hinzugefügt.
");
- $this->app->Location->execute("index.php?module=shopexport&action=adressuebertragung&id=$id&msg=$msg");
- }
- $msg = $this->app->erp->base64_url_encode("Die Adresse wurde der Übertragung hinzugefügt.
");
- $this->app->Location->execute("index.php?module=shopexport&action=adressuebertragung&id=$id&msg=$msg");
- }
- $msg = $this->app->erp->base64_url_encode(" Navigation vom Shop ändern (interne Shop! kein XT & Co.).
');
+ if(!empty($navexport)) {
+ $this->app->remote->RemoteSendArtikelgruppen($id);
+ $anzahl = $this->app->remote->RemoteSendNavigation($id);
+ $this->app->erp->NewEvent('Navigations-Export Online-Shop Nr. '.$id,'onlineshop');
+ $this->app->Tpl->Set('NAVEXPORT','Es wurden '.$anzahl.' Navigationen heraufgeladen.
');
+ }
+
+ $this->app->Tpl->Parse('PAGE','shopexport_navigation.tpl');
+ }
+
+ public function ShopexportArtikelgruppen()
+ {
+ $this->app->erp->Headlines('Artikelgruppen');
+ $this->ShopexportMenu();
+
+ $shop = $this->app->Secure->GetGET('id');
+ $edit = $this->app->Secure->GetGET('edit');
+ $delete = $this->app->Secure->GetGET('delete');
+
+ $bezeichnung = $this->app->Secure->GetPOST('bezeichnung');
+ $bezeichnung_en = $this->app->Secure->GetPOST('bezeichnung_en');
+ $beschreibung_de = $this->app->Secure->GetPOST('beschreibung_de');
+ $beschreibung_en = $this->app->Secure->GetPOST('beschreibung_en');
+
+ $aktiv = $this->app->Secure->GetPOST('aktiv');
+ $submit = $this->app->Secure->GetPOST('anlegen');
+
+ // Edit
+ if(is_numeric($edit)) {
+ if(!empty($submit) && is_numeric($shop)) {
+ $this->app->DB->Update("UPDATE artikelgruppen SET bezeichnung='$bezeichnung',
+ bezeichnung_en='$bezeichnung_en',
+ beschreibung_de='$beschreibung_de',
+ beschreibung_en='$beschreibung_en',
+ shop='$shop', aktiv='$aktiv' WHERE id='$edit' LIMIT 1");
+ $this->app->Location->execute('index.php?module=shopexport&action=artikelgruppen&id='.$shop.'#tabs-1');
+ }
+
+ $data = $this->app->DB->SelectArr("SELECT bezeichnung, bezeichnung_en, beschreibung_de, beschreibung_en, aktiv
+ FROM artikelgruppen WHERE id='$edit' LIMIT 1");
+ if(is_array($data)) {
+ $this->app->Tpl->Set('BEZEICHNUNG', $data[0]['bezeichnung']);
+ $this->app->Tpl->Set('BESCHREIBUNG_DE', $data[0]['beschreibung_de']);
+ $this->app->Tpl->Set('BESCHREIBUNG_EN', $data[0]['beschreibung_en']);
+ $this->app->Tpl->Set('BEZEICHNUNGEN', $data[0]['bezeichnung_en']);
+ $this->app->Tpl->Set('AKTIVCHECKED', (($data[0]['aktiv']=='1') ? 'checked' : ''));
+ }
+ }else{
+ if(!empty($submit) && is_numeric($shop)) {
+ $this->app->DB->Insert("INSERT INTO artikelgruppen (bezeichnung, bezeichnung_en, beschreibung_de,beschreibung_en, shop, aktiv) VALUES ('$bezeichnung', '$bezeichnung_en','$beschreibung_de','$beschreibung_en','$shop', '$aktiv')");
+ $this->app->Location->execute('index.php?module=shopexport&action=artikelgruppen&id='.$shop.'#tabs-1');
+ }
+ }
+
+ // Delete
+ if(is_numeric($delete)) {
+ $this->app->DB->Delete("DELETE FROM artikelgruppen WHERE id='$delete' LIMIT 1");
+ $this->app->Location->execute('index.php?module=shopexport&action=artikelgruppen&id='.$shop);
+ }
+
+ // Table
+ $table = new EasyTable($this->app);
+ $this->app->Tpl->Set('INHALT','');
+ $this->app->Tpl->Set('SUBSUBHEADING','Artikelgruppen');
+ $table->Query("SELECT g.bezeichnung as artikelgruppe, g.id as gruppe, s.bezeichnung, if(g.aktiv,'online','') as aktiv, g.id FROM artikelgruppen g,
+ shopexport s WHERE s.firma='".$this->app->User->GetFirma()."' AND s.id=g.shop AND s.id=$shop");
+ $table->DisplayNew('INHALT', "Artikel Export: Bitte Verbindung prüfen.
");
+
+ $this->app->Tpl->Set('ID',$id);
+ $this->app->Tpl->Set('COMMONEXPORT',"Abgleich zu Kundencenter.
");
+
+ if($this->app->Secure->GetPOST("commonexport")!=''){
+ $anzahl = $this->app->remote->RemoteSendExportlink($id);
+ //$anzahl = $this->app->remote->RemoteSendNavigation($id);
+ //$this->app->erp->NewEvent("Navigations-Export Online-Shop Nr. $id","onlineshop");
+ $this->app->Tpl->Set('COMMONEXPORT',"Es wurden ".$anzahl." Datensätze heraufgeladen.
");
+ }
+
+ if($this->app->Secure->GetPOST("schritt1")!=''){
+
+ $className = 'Remote';
+ $methodName = 'RemoteConnection';
+ $r = new ReflectionMethod($className, $methodName);
+ $params = $r->getParameters();
+ $anzargs = (!empty($params)?count($params):0);
+ if($anzargs > 1) {
+ $pageContents = $this->app->remote->RemoteConnection($id, true);
+ }
+ else{
+ $pageContents = $this->app->remote->RemoteConnection($id);
+ }
+ if($pageContents==='success') {
+ if($anzargs > 1) {
+ $pageContents2 = $this->app->remote->RemoteConnection($id, 'info');
+ }
+
+ $this->app->Tpl->Set('SCHRITT2','');
+ $this->app->Tpl->Set('HIDDENSCHRITT2',"Datei-Updates: ".$datei_updates.".
");
+ }
+ if($delete>0) {
+ $this->app->Tpl->Add('STATUS',"Datei(en) gelöscht: ".$delete.".
");
+ }
+ // ende dateien update
+
+ $this->app->DB->Insert("INSERT INTO shopexport_status (id, shopexport, bearbeiter,zeit, bemerkung,befehl)
+ VALUES('','$id','".$this->app->User->GetName()."',NOW(),'','".serialize($artikel)."')");
+
+ $this->app->Tpl->Add('STATUS',"Erfolgreiche Updates an ".$tmp_anzahl." Artikeln durchgeführt.
");
+ }
+
+
+ $this->app->Tpl->Set('SUBHEADING','Starte Artikel Export');
+ $this->app->Tpl->Parse('PAGE','shopexport_export.tpl');
+ }
+
+
+ public function ShopexportArtikeluebertragungdel()
+ {
+ $id = (int)$this->app->Secure->GetGET('id');
+ $shop = (int)$this->app->Secure->GetGET('shop');;
+ if($id > 0){
+ $shop = $this->app->DB->Select("SELECT shop FROM shopexport_artikeluebertragen WHERE artikel='$id' AND shop = '$shop' LIMIT 1");
+ $this->app->DB->Delete("DELETE FROM shopexport_artikeluebertragen WHERE artikel='$id' AND shop = '$shop' LIMIT 1");
+ $this->app->DB->Delete("DELETE FROM shopexport_artikeluebertragen_check WHERE artikel='$id' AND shop = '$shop' LIMIT 1");
+ }
+ $msg = $this->app->erp->base64_url_encode('Der Artikel wurde aus der Übertragung entfernt.
');
+ $this->app->Location->execute('index.php?module=shopexport&action=artikeluebertragung&id='.$shop.'&msg='.$msg);
+ }
+
+ public function ShopexportAdressuebertragungdel()
+ {
+
+ $id = (int)$this->app->Secure->GetGET('id');
+ $shop = 0;
+ if($id > 0){
+ $shop = $this->app->DB->Select("SELECT shop FROM shopexport_adressenuebertragen WHERE id='$id' LIMIT 1");
+ $this->app->DB->Delete("DELETE FROM shopexport_adressenuebertragen WHERE id='$id' LIMIT 1");
+ }
+ $msg = $this->app->erp->base64_url_encode('Die Adresse wurde aus der Übertragung entfernt.
');
+ $this->app->Location->execute('index.php?module=shopexport&action=adressuebertragung&id='.$shop.'&msg='.$msg);
+ }
+
+ /**
+ * @param int $shopId
+ *
+ * @return array
+ */
+ public function getChangedCount($shopId)
+ {
+ $checkedStarted = (int)$this->app->erp->GetKonfiguration('shopexport_artikeluebertragen_check_start_'.$shopId);
+ $checked = (int)$this->app->erp->GetKonfiguration('shopexport_artikeluebertragen_check_checked_'.$shopId);
+ $changed = (int)$this->app->erp->GetKonfiguration('shopexport_artikeluebertragen_check_changed_'.$shopId);
+ $transfered = (int)$this->app->erp->GetKonfiguration('shopexport_artikeluebertragen_check_transfered_'.$shopId);
+ $lastid = (int)$this->app->erp->GetKonfiguration('shopexport_artikeluebertragen_check_lastid_'.$shopId);
+ return [$checkedStarted, $checked, $changed, $checked - $changed, $transfered, $lastid];
+ }
+
+ /**
+ * @param int $shopId
+ */
+ public function resetChangedInfo($shopId) {
+ $this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_start_'.$shopId,'');
+ $this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_checked_'.$shopId,'');
+ $this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_changed_'.$shopId,'');
+ $this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_transfered_'.$shopId,'');
+ $this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_lastid_'.$shopId,'');
+ }
+
+ /**
+ * @param int $ids
+ */
+ public function addChangedArticles($minutes = 15)
+ {
+ $ids = $this->app->DB->SelectFirstCols(
+ sprintf(
+ 'SELECT `id`
+ FROM `shopexport`
+ WHERE `aktiv` = 1 AND `autosendarticle` = 1 AND `artikelexport` = 1
+ AND (`autosendarticle_last` IS NULL OR DATE_ADD(`autosendarticle_last` INTERVAL %d MINUTE) <= NOW())',
+ $minutes
+ )
+ );
+
+ if(empty($ids)) {
+ return;
+ }
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO `shopexport_artikeluebertragen_check` (`shop`, `artikel`)
+ SELECT s.id as shop, a.id
+ FROM `artikel` AS `a`
+ INNER JOIN `shopexport` AS `s` ON s.id IN (%s)
+ LEFT JOIN (
+ SELECT `artikel`, `shop`
+ FROM `artikel_onlineshops`
+ WHERE `shop` IN (%s) AND `aktiv` = 1
+ GROUP BY `artikel`, `shop`
+ ) AS `oa` ON a.id = oa.artikel AND s.id = oa.shop
+ LEFT JOIN `shopexport_artikeluebertragen_check` AS `sac` ON a.id = sac.artikel AND sac.shop = s.id
+ LEFT JOIN `shopexport_artikeluebertragen` AS `sa` ON sa.shop = s.id AND sa.artikel = a.id
+ WHERE (a.shop=s.id OR a.shop2=s.id OR a.shop3=s.id OR oa.artikel IS NOT NULL)
+ AND a.geloescht!=1 AND sa.id IS NULL
+ AND sac.id IS NULL
+ GROUP BY a.id, s.id",
+ implode(',', $ids), implode(',', $ids)
+ )
+ );
+ }
+
+ /**
+ * @return RedirectResponse
+ */
+ public function HandleResetArticleCacheForArticleWithZeroStock(): RedirectResponse
+ {
+ $anz = 0;
+ $id = (int)$this->app->Secure->GetGET('id');
+ if($id > 0) {
+ $this->app->DB->Update(
+ "UPDATE `artikel` AS `a`
+ INNER JOIN
+ `artikel_onlineshops` AS `oa` ON oa.shop = '$id' AND oa.aktiv = 1 AND a.id = oa.artikel
+ SET oa.storage_cache = -999, oa.pseudostorage_cache = -999
+ WHERE (oa.storage_cache = 0 OR oa.storage_cache IS NULL) AND a.geloescht = 0"
+ );
+ $anz = $this->app->DB->affected_rows();
+ $this->app->erp->LogFile("Lagerzahlencache zurückgesetzt für $anz Artikel mit 0-Mengen, shopid: $id");
+ }
+ $msg = $this->app->erp->base64_url_encode(
+ "Lagerzahlen Cache für ".$anz." Artikel zurückgesetzt.
"
+ );
+ return RedirectResponse::createFromUrl("index.php?module=shopexport&action=artikeluebertragung&id=$id&msg=$msg");
+ }
+
+ public function ShopexportArtikeluebertragung()
+ {
+ $id = (int)$this->app->Secure->GetGET('id');
+ $alle = $this->app->Secure->GetPOST('alle');
+ $allchanged = $this->app->Secure->GetPOST('allchanged');
+ $bestaetigen = $this->app->Secure->GetPOST('bestaetigen');
+ $abbrechen = $this->app->Secure->GetPOST('abbrechen');
+ $artikelladen = $this->app->Secure->GetPOST('artikelladen');
+ $artikel = $this->app->Secure->GetPOST('artikel');
+ $kategorie = $this->app->Secure->GetPOST('kategorie');
+ $unterartikel = $this->app->Secure->GetPOST('unterartikel');
+ $unterartikelkategorie = $this->app->Secure->GetPOST('unterartikelkategorie');
+ $kategorieladen = $this->app->Secure->GetPOST('kategorieladen');
+ $delcache = $this->app->Secure->GetPOST('delcache');
+ $delzerostockcache = $this->app->Secure->GetPOST('delzerostockcache');
+ $delArticleCache = $this->app->Secure->GetPOST('delarticlecache');
+ $artikelexporterlauben = $this->app->Secure->GetPOST('artikelexporterlauben');
+
+ if(!empty($artikelexporterlauben)){
+ $this->app->DB->Update("UPDATE shopexport SET artikelexport=1 WHERE id='$id' LIMIT 1");
+ }
+
+ if(!empty($delzerostockcache)) {
+ $this->HandleResetArticleCacheForArticleWithZeroStock()->send();
+ $this->app->ExitXentral();
+ }
+ if(!empty($delcache)) {
+ $anz = 0;
+ if($id > 0) {
+ $this->app->DB->Update("UPDATE artikel a
+ LEFT JOIN (SELECT artikel FROM artikel_onlineshops WHERE shop = '$id' AND aktiv = 1 GROUP BY artikel) oa ON a.id = oa.artikel
+ SET a.cache_lagerplatzinhaltmenge = -999 WHERE (a.shop = '$id' OR a.shop2 = '$id' OR a.shop3 = '$id' OR NOT ISNULL(oa.artikel)) AND a.geloescht = 0");
+ $anz = $this->app->DB->affected_rows();
+ $this->app->erp->LogFile("Lagerzahlencache zurückgesetzt für $anz Artikel, shopid: $id");
+ }
+ $msg = $this->app->erp->base64_url_encode("Lagerzahlen Cache für ".$anz." Artikel zurückgesetzt.
");
+ $this->app->Location->execute("index.php?module=shopexport&action=artikeluebertragung&id=$id&msg=$msg");
+ }
+
+ if(!empty($delArticleCache)) {
+ $anz = 0;
+ if($id > 0){
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE artikel_onlineshops SET last_article_hash = '', storage_cache=-999,pseudostorage_cache=-999 WHERE shop = %d",
+ $id
+ )
+ );
+ $anz = $this->app->DB->affected_rows();
+ if($anz < 0) {
+ $anz = 0;
+ }
+ }
+ $msg = $this->app->erp->base64_url_encode("Artikel-Cache für ".$anz." Artikel zurückgesetzt.
");
+ $this->app->Location->execute("index.php?module=shopexport&action=artikeluebertragung&id=$id&msg=$msg");
+ }
+
+ if(!empty($allchanged)) {
+ if(!empty($bestaetigen)) {
+ if($id > 0){
+ /*$artikelarr = $this->app->DB->SelectArr("SELECT a.id FROM artikel a
+ LEFT JOIN (SELECT artikel FROM artikel_onlineshops WHERE shop = '$id' AND aktiv = 1 GROUP BY artikel) oa ON a.id = oa.artikel
+ WHERE (a.shop='$id' OR a.shop2='$id' OR a.shop3='$id' OR NOT ISNULL(oa.artikel)) AND a.geloescht!=1");
+ $cartikelarr = !empty($artikelarr) ? count($artikelarr) : 0;
+ for ($i = 0; $i < $cartikelarr; $i++) {
+ $this->app->DB->Insert("INSERT INTO shopexport_artikeluebertragen_check (id,shop,artikel) VALUES ('','$id','" . $artikelarr[$i]['id'] . "')");
+ }
+ }*/
+ $this->resetChangedInfo($id);
+ $this->app->DB->Delete(
+ sprintf(
+ 'DELETE FROM shopexport_artikeluebertragen_check WHERE shop = %d',
+ $id
+ )
+ );
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO shopexport_artikeluebertragen_check (shop, artikel)
+ SELECT '%d' as shop, a.id FROM artikel a
+ LEFT JOIN (
+ SELECT artikel FROM artikel_onlineshops WHERE shop = %d AND aktiv = 1 GROUP BY artikel
+ ) oa ON a.id = oa.artikel
+ LEFT JOIN shopexport_artikeluebertragen AS sa ON sa.shop = %d AND sa.artikel = a.id
+ WHERE (a.shop=%d OR a.shop2=%d OR a.shop3=%d OR NOT ISNULL(oa.artikel)) AND a.geloescht!=1 AND ISNULL(sa.id)
+ GROUP BY a.id",
+ $id, $id, $id, $id, $id, $id
+ )
+ );
+ echo $this->app->DB->error();
+ $changeStart = $this->app->DB->affected_rows();
+ $this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_start_'.$id,
+ $changeStart
+ );
+ $this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_checked_'.$id,0);
+ $this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_changed_'.$id,0);
+ $this->app->erp->SetKonfigurationValue(
+ 'shopexport_artikeluebertragen_check_lastid_'.$id,
+ mt_rand(1,2000000000)
+ );
+ }
+
+ $msg = $this->app->erp->base64_url_encode("Alle Artikel die mit dem Shop verknüpft sind werden überprüft.
");
+ $this->app->Location->execute("index.php?module=shopexport&action=artikeluebertragung&id=$id&msg=$msg");
+ }
+ $this->app->Tpl->Add('MESSAGE','Alle Artikel die mit dem Shop verknüpft sind werden übertragen.
");
+ $this->app->Location->execute("index.php?module=shopexport&action=artikeluebertragung&id=$id&msg=$msg");
+ }
+ $this->app->Tpl->Add('MESSAGE','Alle aktuellen Artikel wurden aus der Übertragung entfernt.
');
+ $this->app->Location->execute('index.php?module=shopexport&action=artikeluebertragung&id='.$id.'&msg='.$msg);
+ }
+
+ if($kategorieladen != '') {
+ if(!empty($bestaetigen)) {
+ $typ = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung!='' AND bezeichnung='$kategorie' LIMIT 1");
+ if($typ) {
+ $typ .= '_kat';
+ }
+ else{
+ $typ = $kategorie;
+ }
+
+ if((String)$typ !== '') {
+ $this->app->DB->Query("INSERT INTO shopexport_artikeluebertragen (artikel, shop) SELECT id as artikel ,'$id' as shop FROM artikel WHERE (geloescht = 0 OR isnull(geloescht)) AND nummer <> 'DEL' AND nummer <> '' AND typ = '$typ'");
+ $anz = (int)$this->app->DB->affected_rows();
+ //$artikelarr = $this->app->DB->SelectArr("SELECT id FROM artikel WHERE (geloescht = 0 OR isnull(geloescht)) AND nummer <> 'DEL' AND nummer <> '' AND typ = '$typ'");
+ if($anz > 0) {
+ $msg = $this->app->erp->base64_url_encode("Die Artikelkategorie wurde der Übertragung hinzugefügt ($anz Artikel).
");
+ }
+ else{
+ $msg = $this->app->erp->base64_url_encode("Keine Artikel in dieser Artikelkategorie gefunden.
");
+ }
+ $this->app->Location->execute("index.php?module=shopexport&action=artikeluebertragung&id=$id&msg=$msg");
+ }
+ $msg = $this->app->erp->base64_url_encode("Der Artikel wurde der Übertragung hinzugefügt.
");
+ $this->app->Location->execute("index.php?module=shopexport&action=artikeluebertragung&id=$id&msg=$msg");
+ }
+ $msg = $this->app->erp->base64_url_encode("' .$checked.' von '.$start.
+ ' Artikel wurden überprüft. '.(!empty($transfered)?$transfered:$changed).' veränderte Artikel wurden gefunden und an den Shop übertragen.
');
+ }
+ else{
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ '');
+ $this->app->Tpl->Add('IMPORTERINFO','Der Artikelexport für diesen Importer ist nicht aktiviert.
+ ');
+ $this->app->Tpl->Add('IMPORTERINFO','
');
+ }
+ $this->app->erp->checkActiveCronjob('artikeluebertragen', 'IMPORTERINFO2');
+
+
+
+
+ $this->app->erp->MenuEintrag('index.php?module=onlineshops&action=edit&id='.$id, 'Zurück zur Übersicht');
+ $this->app->YUI->AutoComplete('artikel','artikelnummer',1);
+ $this->app->YUI->AutoComplete('kategorie','artikelkategorien');
+ $this->app->YUI->TableSearch('TAB1','shopexport_artikeluebertragung');
+ $this->app->Tpl->Parse('PAGE','shopexport_artikeluebertragung.tpl');
+ }
+
+ public function ShopexportArtikelList()
+ {
+ $this->ShopexportMenu();
+ $this->app->YUI->TableSearch('TAB1','shopexport_artikellist', "show", "", "", basename(__FILE__), __CLASS__);
+ $this->app->Tpl->Parse('PAGE', "shopexport_artikellist.tpl");
+ }
+
+ public function ShopexportAdressuebertragung()
+ {
+ $id = (int)$this->app->Secure->GetGET('id');
+ $bestaetigen = $this->app->Secure->GetPOST('bestaetigen');
+ $alle = $this->app->Secure->GetPOST('alle');
+ $abbrechen = $this->app->Secure->GetPOST('abbrechen');
+ $adresseladen = $this->app->Secure->GetPOST('adresseladen');
+ $adresse = $this->app->Secure->GetPOST('adresse');
+ $gruppeladen = $this->app->Secure->GetPOST('gruppeladen');
+ $gruppe = $this->app->Secure->GetPOST('gruppe');
+
+ if(!empty($alle)) {
+ if(!empty($bestaetigen)) {
+ if($id > 0){
+ $this->app->DB->Insert("INSERT INTO shopexport_adressenuebertragen (shop,adresse) SELECT $id, a.id FROM adresse a WHERE a.geloescht <> 1 AND a.kundennummer <> '' AND a.id NOT IN (SELECT adresse FROM shopexport_adressenuebertragen WHERE shop = $id)");
+ }
+
+ $msg = $this->app->erp->base64_url_encode("Alle Adressen die mit dem Shop verknüpft sind werden übertragen.
");
+ $this->app->Location->execute("index.php?module=shopexport&action=adressuebertragung&id=$id&msg=$msg");
+ }
+ $this->app->Tpl->Add('MESSAGE','Alle Adressen wurden aus der Übertragung entfernt.
');
+ $this->app->Location->execute('index.php?module=shopexport&action=adressuebertragung&id='.$id.'&msg='.$msg);
+ }
+
+ if($gruppeladen!='') {
+ if(!empty($bestaetigen) && $gruppe!='') {
+ $gruppetmp = explode(' ', $gruppe);
+ $gruppenid = $this->app->DB->Select("SELECT id FROM gruppen WHERE kennziffer='".$gruppetmp[0]."' LIMIT 1");
+ if($gruppenid > 0 && $id > 0)
+ {
+ $this->app->DB->Insert("INSERT INTO shopexport_adressenuebertragen (shop,adresse) SELECT $id, a.id FROM adresse a JOIN adresse_rolle ar ON a.id = ar.adresse WHERE ar.subjekt='Mitglied' AND ar.objekt='Gruppe' AND ar.parameter='$gruppenid' AND a.geloescht <> 1 AND a.kundennummer <> '' AND a.id NOT IN (SELECT adresse FROM shopexport_adressenuebertragen WHERE shop = $id)");
+ $msg = $this->app->erp->base64_url_encode("Die Adressen wurde der Übertragung hinzugefügt.
");
+ $this->app->Location->execute("index.php?module=shopexport&action=adressuebertragung&id=$id&msg=$msg");
+ }
+ $msg = $this->app->erp->base64_url_encode("Die Adresse wurde der Übertragung hinzugefügt.
");
+ $this->app->Location->execute("index.php?module=shopexport&action=adressuebertragung&id=$id&msg=$msg");
+ }
+ $msg = $this->app->erp->base64_url_encode("