From 245e2d1545c184368db0e68f9a07c99d4907b2af Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Sat, 4 Mar 2023 15:08:57 +0100 Subject: [PATCH] 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 @@ + +
+ + + + +
+
+ [MESSAGE] +
+
+
+
+ + [TAB1] +
+
+ + Stapelverarbeitung + + + +
 alle markieren 
+
+
+
+
+
+
+ {|Aktionen|} +
+
+
+
+
+
+ +
+ + 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 = "
" . "" . "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . " " . "" . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . " 
"; - 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 = "
" . "" . "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . " " . "" . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . " 
"; - 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', - '
Es wurde ein neuer Shop angelegt. - zurück zum Onlineshop
' - ); - } - 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 = ''; - foreach ($lastChanges as $lastChangeFieldName => $lastChangeFieldValue){ - $message .= ''; - } - $message .='
FeldnameUrsprünglicher WertAktualisierter Wert
'.$lastChangeFieldName.''.$fieldsToCompareTo[$lastChangeFieldName].''.$lastChangeFieldValue.'
'; - 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: - - '); - foreach($pageContents2['subshops'] as $subshop) { - $this->app->Tpl->Add('MESSAGE','"); - } - $this->app->Tpl->Add('MESSAGE','
IdNameAktiv
'.$subshop['id'].''.$subshop['name']."".($subshop['aktiv']?'ja':'nein')."
'); - } - 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',''); - } - -/* - $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 .= ''; - } - } - - $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 .= ''; - } - } - - $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 .= ''; - } - } - - $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 .= ''; - } - $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|} -
- - - - - - - - - - - - - - - - - - - - - - - -
{|Zahlweise Shop|}:  {|Zahlweise Xentral|}:  {|Vorab als bezahlt markieren|}:  {|Autoversand aktiv|}:  (Haken muss standardmässig aktiviert sein) {|keine Rechnung erstellen|}:  {|Fast-Lane|}:  
-
-
'); - - - $this->app->Tpl->Set('NEUTAB4',' -
- {|Anlegen|} -
- - - - - - - - - - - - - - - - - - - - - - - - -
{|Versandart Shop|}:  {|Versandart Xentral|}:  {|Versandart Ausgehend|}:  -  {|Produkt Ausgehend|}:  -  {|Land (2-stellig ISO mit Komma getrennt)|}:  {|Autoversand aktiv|}:  (Haken muss standardmässig aktiviert sein) {|Fast-Lane|}:  
-
-
'); - - $this->app->Tpl->Set('NEUTAB5',' -
- {|Anlegen|} -
- - - - - - - - - - - -
{|Freifeld Xentral|}:  {|Bezeichnung in Shop|}:  
-
-
'); - - $this->app->Tpl->Set('NEUTAB6',' -
- {|Anlegen|} -
- - - - - - - - - - - - - - -
{|Subshop Kennung|}:  {|Sprache|}:  {|Projekt Xentral|}:  
-
-
'); - - $this->app->Tpl->Set('NEUTAB7',' -
- {|Anlegen|} -
- - - - - - - - - - - - - - - - - - -
{|Land|}:  {|Sprache|}:  {|Projekt Xentral|}:  
Bitte als ISO2-Länderkürzel eintragen
-
-
'); - - $this->app->Tpl->Set('NEUTAB8',' -
- {|Anlegen|} -
- - - - - - - - - - - - - - - - - - - - -
 {|von|}:  {|Projekt Xentral|}:  {|Gruppe im Shop|}:   
-
-
'); - - 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>', $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 = "
" . "" . "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . " " . "" . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . " 
"; + 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 = "
" . "" . "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . " " . "" . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . " 
"; + 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 = "
" . "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">
"; +// $menu = "
" . "" . "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . " " . "" . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . " 
"; + + $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', + '
Es wurde ein neuer Shop angelegt. + zurück zum Onlineshop
' + ); + } + 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 = ''; + foreach ($lastChanges as $lastChangeFieldName => $lastChangeFieldValue){ + $message .= ''; + } + $message .='
FeldnameUrsprünglicher WertAktualisierter Wert
'.$lastChangeFieldName.''.$fieldsToCompareTo[$lastChangeFieldName].''.$lastChangeFieldValue.'
'; + 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: + + '); + foreach($pageContents2['subshops'] as $subshop) { + $this->app->Tpl->Add('MESSAGE','"); + } + $this->app->Tpl->Add('MESSAGE','
IdNameAktiv
'.$subshop['id'].''.$subshop['name']."".($subshop['aktiv']?'ja':'nein')."
'); + } + 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',''); + } + +/* + $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 .= ''; + } + } + + $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 .= ''; + } + } + + $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 .= ''; + } + } + + $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 .= ''; + } + $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|} +
+ + + + + + + + + + + + + + + + + + + + + + + +
{|Zahlweise Shop|}:  {|Zahlweise Xentral|}:  {|Vorab als bezahlt markieren|}:  {|Autoversand aktiv|}:  (Haken muss standardmässig aktiviert sein) {|keine Rechnung erstellen|}:  {|Fast-Lane|}:  
+
+
'); + + + $this->app->Tpl->Set('NEUTAB4',' +
+ {|Anlegen|} +
+ + + + + + + + + + + + + + + + + + + + + + + + +
{|Versandart Shop|}:  {|Versandart Xentral|}:  {|Versandart Ausgehend|}:  +  {|Produkt Ausgehend|}:  +  {|Land (2-stellig ISO mit Komma getrennt)|}:  {|Autoversand aktiv|}:  (Haken muss standardmässig aktiviert sein) {|Fast-Lane|}:  
+
+
'); + + $this->app->Tpl->Set('NEUTAB5',' +
+ {|Anlegen|} +
+ + + + + + + + + + + +
{|Freifeld Xentral|}:  {|Bezeichnung in Shop|}:  
+
+
'); + + $this->app->Tpl->Set('NEUTAB6',' +
+ {|Anlegen|} +
+ + + + + + + + + + + + + + +
{|Subshop Kennung|}:  {|Sprache|}:  {|Projekt Xentral|}:  
+
+
'); + + $this->app->Tpl->Set('NEUTAB7',' +
+ {|Anlegen|} +
+ + + + + + + + + + + + + + + + + + +
{|Land|}:  {|Sprache|}:  {|Projekt Xentral|}:  
Bitte als ISO2-Länderkürzel eintragen
+
+
'); + + $this->app->Tpl->Set('NEUTAB8',' +
+ {|Anlegen|} +
+ + + + + + + + + + + + + + + + + + + + +
 {|von|}:  {|Projekt Xentral|}:  {|Gruppe im Shop|}:   
+
+
'); + + 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>', $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: - - "); - foreach($pageContents2['subshops'] as $subshop) - { - $this->app->Tpl->Add('STATUS',""); - } - $this->app->Tpl->Add('STATUS',"
IdNameAktiv
".$subshop['id']."".$subshop['name']."".($subshop['aktiv']?'ja':'nein')."
"); - }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 = ""; - $html = $html.""; - - if(is_array($tmp)) { - foreach($tmp as $row) { - $checkarray[$row['artikel']] = $row['checksum']; - } - } - /* - if($projekt=="1") $checkmasterarray = $this->app->DB->SelectArr("SELECT id,checksum FROM artikel WHERE shop='1' AND projekt='$projekt' AND geloescht='0'"); - else if ($projekt=="2") $checkmasterarray = $this->app->DB->SelectArr("SELECT id,checksum FROM artikel WHERE shop='2' AND projekt='$projekt' AND geloescht='0'"); - else if ($projekt=="4") $checkmasterarray = $this->app->DB->SelectArr("SELECT id,checksum FROM artikel WHERE shop='3' AND projekt='$projekt' AND geloescht='0'"); - */ - $checkmasterarray = $this->app->DB->SelectArr("SELECT id,checksum FROM artikel WHERE shop='$id' AND geloescht='0'"); - $html = $html." - "; - - $html = $html." - "; - - $html = $html." - "; - $aenderungen = 0; - $ccheckmasterarray = !empty($checkmasterarray)?count($checkmasterarray):0; - for($i=0; $i<$ccheckmasterarray;$i++) { - $artikel = $checkmasterarray[$i]['id']; - $checksum= $checkmasterarray[$i]['checksum']; - - if(isset($checkarray) && isset($checkarray[$artikel]) && ($checkarray[$artikel]!=$checksum || $checkarray[$artikel]=="")) - { - $aenderungen++; - $tmp = $this->app->DB->SelectArr("SELECT a.name_de, a.nummer FROM artikel a WHERE a. id='$artikel' LIMIT 1"); - if($tmp) - { - $tmp[0]['logdatei'] = $this->app->DB->Select("SELECT logdatei FROM shopexport_artikel WHERE artikel='$artikel' AND shopexport='$id' LIMIT 1"); - - if($tmp[0]['logdatei']=="") $tmp[0]['logdatei']="noch nicht vorhanden"; - - - $html = $html." - "; - } - } - if(isset($checkarray) && isset($checkarray[$artikel])) - { - unset($checkarray[$artikel]); - } - } - - // loesche alle artikel im shop die nicht mehr im ERP als shop artikel vorhanden sind! - $ccheckarray = !empty($checkarray)?count($checkarray):0; - for($j=0;$j < $ccheckarray; $j++) { - if($ccheckarray > 0){ - foreach ($checkarray as $key_artikel => $value_checksum) { - $pageContents = $this->app->remote->RemoteDeleteArticle($id, $key_artikel); - } - $this->app->Tpl->Set('STATUS', "
Es wurden " . $ccheckarray . " Artikel im Shop gelöscht (fehlende Attribute).
"); - } - } - - $this->app->Tpl->Add('STATUS',"
Änderungen an $aenderungen Artikel gefunden.
"); - - $html = $html ."
Pos.ArtikelNummerLetzte Änderung
CMSInhaltsseiten (keine Shop-Artikeltexte)(falls vorhanden)
ArtikelgruppenArtikelgruppen(falls vorhanden)
Dateien/BilderShopbilder (dauert bei vielen Bildern)(falls vorhanden)
$aenderungen{$tmp[0]['name_de']}{$tmp[0]['nummer']}{$tmp[0]['logdatei']}
"; - - $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', - '
' .$checked.' von '.$start.' Artikel wurden überprüft. '.$changed. - ' veränderte Artikel wurden gefunden und '.$transfered.' davon an den Shop übertragen.
'); - /*if($start > 0) { - $this->app->Tpl->Add( - 'MESSAGE', - '
' . - $checked . ' von ' . $start . ' Artikel geprüft (' . $changed . ' geändert / ' . - $notChanged . ' nicht geändert) -
' - ); - } - else { - $this->app->Tpl->Add( - 'MESSAGE', - '
' . $inList . ' Artikel gefunden, noch zu prüfen ' . $checking . ' Artikel
' - ); - }*/ - } - } - - - $exportErlaubt = $this->app->DB->Select("SELECT artikelexport FROM shopexport WHERE id='$id' LIMIT 1"); - - if(!$exportErlaubt){ - $this->app->Tpl->Set('IMPORTERINFO','
'); - $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','
Bitte Bestätigen Sie die Übertragung!
'); - } - - if(!empty($abbrechen)) { - $this->app->DB->Delete("DELETE FROM shopexport_adressenuebertragen WHERE shop='$id'"); - $msg = $this->app->erp->base64_url_encode('
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("
Keie Adresse ausgewählt
"); - $this->app->Location->execute("index.php?module=shopexport&action=adressuebertragung&id=$id&msg=$msg"); - } - $this->app->Tpl->Add('MESSAGE','
Bitte Bestätigen Sie die Übertragung!
'); - } - - if($adresseladen!='') - { - if(!empty($bestaetigen) && $adresse!=''){ - $adressetmp = explode(' ', $adresse); - $adressid = $adressetmp[0]; - $adressid = $this->app->DB->Select("SELECT id FROM adresse WHERE name!='' AND kundennummer!='' AND geloescht<>1 AND id='$adressid' LIMIT 1"); - if($adressid > 0 && $id > 0) { - $this->app->DB->Insert("INSERT INTO shopexport_adressenuebertragen (id,shop,adresse) VALUES ('','$id','$adressid')"); - - $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("
Keie Adresse ausgewählt
"); - $this->app->Location->execute("index.php?module=shopexport&action=adressuebertragung&id=$id&msg=$msg"); - } - $this->app->Tpl->Add('MESSAGE','
Bitte Bestätigen Sie die Übertragung!
'); - } - - $this->ShopexportMenu(); - $this->app->erp->MenuEintrag('index.php?module=onlineshops&action=edit&id='.$id, 'Zurück zur Übersicht'); - $this->app->YUI->AutoComplete('adresse','adresse'); - $this->app->YUI->AutoComplete('gruppe','gruppekennziffer'); - $this->app->YUI->TableSearch('TAB1','shopexport_adressuebertragung'); - $this->app->Tpl->Parse('PAGE','shopexport_adressuebertragung.tpl'); - } - - public function ShopexportNavigation() - { - $id = $this->app->Secure->GetGET('id'); - $tmp = new Navigation($this->app,$id); - $this->app->Tpl->Set('ID',$id); - $this->app->Tpl->Set('PAGE',$tmp->Get()); - $this->app->BuildNavigation=false; - } - - - /** - * @param int $articleId - * @param int|array $shopId - * - * @return array - */ - public function hasArticleHashChanged($articleId, $shopId) - { - if(is_array($shopId)) { - $shop = $shopId; - $shopId = $shop['id']; - }/* - else { - $shop = $this->app->DB->SelectRow('SELECT * FROM shopexport WHERE id = %d', $shopId); - }*/ - $hash = $this->getArticleHash($articleId, $shopId, true); - $articleShopRow = $this->app->DB->SelectRow( - sprintf( - 'SELECT last_article_hash, last_article_transfer FROM artikel_onlineshops WHERE artikel = %d AND shop = %d', - $articleId, $shopId - ) - ); - - return [ - 'changed' => empty($articleShopRow['last_article_hash']) || ($articleShopRow['last_article_hash'] !== $hash), - 'hash' => $hash - ]; - } - - /** - * @param int $articleId - * @param int|array $shopId - * @param bool $withAttributes - * @param bool $widthCategorieTree - * - * @return string - */ - public function getArticleHash($articleId, $shopId, $withAttributes = true, $widthCategorieTree = false) - { - if(is_array($shopId)) { - $shop = $shopId; - $shopId = $shop['id']; - }/* else { - $shop = $this->app->DB->SelectRow('SELECT * FROM shopexport WHERE id = %d', $shopId); - }*/ - $art = $this->app->DB->SelectRow( - sprintf( - 'SELECT * FROM artikel WHERE id = %d', - $articleId - ) - ); - if(empty($art)) { - return ''; - } - unset( - $art['logdatei'], - $art['cache_lagerplatzinhaltmenge'], - $art['shop'], - $art['shop2'], - $art['shop3'], - $art['usereditid'], - $art['useredittimestamp'], - $art['laststorage_sync'] - ); - if($withAttributes) { - $art['attributes'] = $this->app->DB->SelectArr( - sprintf( - "SELECT DISTINCT e.name, ew.wert - FROM artikeleigenschaften e - INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften - WHERE ew.artikel = %d AND e.name <> '' AND ew.wert <> '' AND e.geloescht <> 1 - ORDER BY e.name, ew.wert", - $articleId - ) - ); - } - if($widthCategorieTree) { - $kategorienbaum = null; - $this->app->erp->GetKategorienbaum($kategorienbaum, 0, 0, $articleId); - if(!empty($kategorienbaum)) { - $kategorien = $this->app->DB->SelectArr( - sprintf( - "SELECT ak.id, ak.bezeichnung - FROM `artikelbaum_artikel` aa - INNER JOIN `artikelkategorien` ak ON aa.kategorie = ak.id AND ak.geloescht <> 1 AND aa.artikel = %d - ORDER by ak.bezeichnung, ak.id", - $articleId - ) - ); - if($kategorien) - { - foreach($kategorien as $v) - { - $katid[$v['id']] = true; - } - } - if(!empty($katid)) { - foreach($kategorienbaum as $v) { - if(isset($katid[$v['id']])) { - $art['kategorien'][] = array('name'=>$v['bezeichnung'],'parent'=>$v['parent'],'id'=>$v['id'],'lvl'=>$v['lvl'],'extid'=>$v['extid']); - } - } - } - } - } - - $art['shopexport'] = $this->app->DB->SelectArr( - sprintf( - "SELECT name, wert FROM shopexport_artikel WHERE artikel = %d AND shopid = %d ORDER BY id ", - $articleId, $shopId - ) - ); - - return sha1(json_encode($art)); - } -} +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->ActionHandler('artikellist', 'ShopexportArtikelList'); + + $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=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"); + } + + 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: + + "); + foreach($pageContents2['subshops'] as $subshop) + { + $this->app->Tpl->Add('STATUS',""); + } + $this->app->Tpl->Add('STATUS',"
IdNameAktiv
".$subshop['id']."".$subshop['name']."".($subshop['aktiv']?'ja':'nein')."
"); + }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 = ""; + $html = $html.""; + + if(is_array($tmp)) { + foreach($tmp as $row) { + $checkarray[$row['artikel']] = $row['checksum']; + } + } + /* + if($projekt=="1") $checkmasterarray = $this->app->DB->SelectArr("SELECT id,checksum FROM artikel WHERE shop='1' AND projekt='$projekt' AND geloescht='0'"); + else if ($projekt=="2") $checkmasterarray = $this->app->DB->SelectArr("SELECT id,checksum FROM artikel WHERE shop='2' AND projekt='$projekt' AND geloescht='0'"); + else if ($projekt=="4") $checkmasterarray = $this->app->DB->SelectArr("SELECT id,checksum FROM artikel WHERE shop='3' AND projekt='$projekt' AND geloescht='0'"); + */ + $checkmasterarray = $this->app->DB->SelectArr("SELECT id,checksum FROM artikel WHERE shop='$id' AND geloescht='0'"); + $html = $html." + "; + + $html = $html." + "; + + $html = $html." + "; + $aenderungen = 0; + $ccheckmasterarray = !empty($checkmasterarray)?count($checkmasterarray):0; + for($i=0; $i<$ccheckmasterarray;$i++) { + $artikel = $checkmasterarray[$i]['id']; + $checksum= $checkmasterarray[$i]['checksum']; + + if(isset($checkarray) && isset($checkarray[$artikel]) && ($checkarray[$artikel]!=$checksum || $checkarray[$artikel]=="")) + { + $aenderungen++; + $tmp = $this->app->DB->SelectArr("SELECT a.name_de, a.nummer FROM artikel a WHERE a. id='$artikel' LIMIT 1"); + if($tmp) + { + $tmp[0]['logdatei'] = $this->app->DB->Select("SELECT logdatei FROM shopexport_artikel WHERE artikel='$artikel' AND shopexport='$id' LIMIT 1"); + + if($tmp[0]['logdatei']=="") $tmp[0]['logdatei']="noch nicht vorhanden"; + + + $html = $html." + "; + } + } + if(isset($checkarray) && isset($checkarray[$artikel])) + { + unset($checkarray[$artikel]); + } + } + + // loesche alle artikel im shop die nicht mehr im ERP als shop artikel vorhanden sind! + $ccheckarray = !empty($checkarray)?count($checkarray):0; + for($j=0;$j < $ccheckarray; $j++) { + if($ccheckarray > 0){ + foreach ($checkarray as $key_artikel => $value_checksum) { + $pageContents = $this->app->remote->RemoteDeleteArticle($id, $key_artikel); + } + $this->app->Tpl->Set('STATUS', "
Es wurden " . $ccheckarray . " Artikel im Shop gelöscht (fehlende Attribute).
"); + } + } + + $this->app->Tpl->Add('STATUS',"
Änderungen an $aenderungen Artikel gefunden.
"); + + $html = $html ."
Pos.ArtikelNummerLetzte Änderung
CMSInhaltsseiten (keine Shop-Artikeltexte)(falls vorhanden)
ArtikelgruppenArtikelgruppen(falls vorhanden)
Dateien/BilderShopbilder (dauert bei vielen Bildern)(falls vorhanden)
$aenderungen{$tmp[0]['name_de']}{$tmp[0]['nummer']}{$tmp[0]['logdatei']}
"; + + $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', + '
' .$checked.' von '.$start.' Artikel wurden überprüft. '.$changed. + ' veränderte Artikel wurden gefunden und '.$transfered.' davon an den Shop übertragen.
'); + /*if($start > 0) { + $this->app->Tpl->Add( + 'MESSAGE', + '
' . + $checked . ' von ' . $start . ' Artikel geprüft (' . $changed . ' geändert / ' . + $notChanged . ' nicht geändert) +
' + ); + } + else { + $this->app->Tpl->Add( + 'MESSAGE', + '
' . $inList . ' Artikel gefunden, noch zu prüfen ' . $checking . ' Artikel
' + ); + }*/ + } + } + + + $exportErlaubt = $this->app->DB->Select("SELECT artikelexport FROM shopexport WHERE id='$id' LIMIT 1"); + + if(!$exportErlaubt){ + $this->app->Tpl->Set('IMPORTERINFO','
'); + $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','
Bitte Bestätigen Sie die Übertragung!
'); + } + + if(!empty($abbrechen)) { + $this->app->DB->Delete("DELETE FROM shopexport_adressenuebertragen WHERE shop='$id'"); + $msg = $this->app->erp->base64_url_encode('
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("
Keie Adresse ausgewählt
"); + $this->app->Location->execute("index.php?module=shopexport&action=adressuebertragung&id=$id&msg=$msg"); + } + $this->app->Tpl->Add('MESSAGE','
Bitte Bestätigen Sie die Übertragung!
'); + } + + if($adresseladen!='') + { + if(!empty($bestaetigen) && $adresse!=''){ + $adressetmp = explode(' ', $adresse); + $adressid = $adressetmp[0]; + $adressid = $this->app->DB->Select("SELECT id FROM adresse WHERE name!='' AND kundennummer!='' AND geloescht<>1 AND id='$adressid' LIMIT 1"); + if($adressid > 0 && $id > 0) { + $this->app->DB->Insert("INSERT INTO shopexport_adressenuebertragen (id,shop,adresse) VALUES ('','$id','$adressid')"); + + $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("
Keie Adresse ausgewählt
"); + $this->app->Location->execute("index.php?module=shopexport&action=adressuebertragung&id=$id&msg=$msg"); + } + $this->app->Tpl->Add('MESSAGE','
Bitte Bestätigen Sie die Übertragung!
'); + } + + $this->ShopexportMenu(); + $this->app->erp->MenuEintrag('index.php?module=onlineshops&action=edit&id='.$id, 'Zurück zur Übersicht'); + $this->app->YUI->AutoComplete('adresse','adresse'); + $this->app->YUI->AutoComplete('gruppe','gruppekennziffer'); + $this->app->YUI->TableSearch('TAB1','shopexport_adressuebertragung'); + $this->app->Tpl->Parse('PAGE','shopexport_adressuebertragung.tpl'); + } + + public function ShopexportNavigation() + { + $id = $this->app->Secure->GetGET('id'); + $tmp = new Navigation($this->app,$id); + $this->app->Tpl->Set('ID',$id); + $this->app->Tpl->Set('PAGE',$tmp->Get()); + $this->app->BuildNavigation=false; + } + + + /** + * @param int $articleId + * @param int|array $shopId + * + * @return array + */ + public function hasArticleHashChanged($articleId, $shopId) + { + if(is_array($shopId)) { + $shop = $shopId; + $shopId = $shop['id']; + }/* + else { + $shop = $this->app->DB->SelectRow('SELECT * FROM shopexport WHERE id = %d', $shopId); + }*/ + $hash = $this->getArticleHash($articleId, $shopId, true); + $articleShopRow = $this->app->DB->SelectRow( + sprintf( + 'SELECT last_article_hash, last_article_transfer FROM artikel_onlineshops WHERE artikel = %d AND shop = %d', + $articleId, $shopId + ) + ); + + return [ + 'changed' => empty($articleShopRow['last_article_hash']) || ($articleShopRow['last_article_hash'] !== $hash), + 'hash' => $hash + ]; + } + + /** + * @param int $articleId + * @param int|array $shopId + * @param bool $withAttributes + * @param bool $widthCategorieTree + * + * @return string + */ + public function getArticleHash($articleId, $shopId, $withAttributes = true, $widthCategorieTree = false) + { + if(is_array($shopId)) { + $shop = $shopId; + $shopId = $shop['id']; + }/* else { + $shop = $this->app->DB->SelectRow('SELECT * FROM shopexport WHERE id = %d', $shopId); + }*/ + $art = $this->app->DB->SelectRow( + sprintf( + 'SELECT * FROM artikel WHERE id = %d', + $articleId + ) + ); + if(empty($art)) { + return ''; + } + unset( + $art['logdatei'], + $art['cache_lagerplatzinhaltmenge'], + $art['shop'], + $art['shop2'], + $art['shop3'], + $art['usereditid'], + $art['useredittimestamp'], + $art['laststorage_sync'] + ); + if($withAttributes) { + $art['attributes'] = $this->app->DB->SelectArr( + sprintf( + "SELECT DISTINCT e.name, ew.wert + FROM artikeleigenschaften e + INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften + WHERE ew.artikel = %d AND e.name <> '' AND ew.wert <> '' AND e.geloescht <> 1 + ORDER BY e.name, ew.wert", + $articleId + ) + ); + } + if($widthCategorieTree) { + $kategorienbaum = null; + $this->app->erp->GetKategorienbaum($kategorienbaum, 0, 0, $articleId); + if(!empty($kategorienbaum)) { + $kategorien = $this->app->DB->SelectArr( + sprintf( + "SELECT ak.id, ak.bezeichnung + FROM `artikelbaum_artikel` aa + INNER JOIN `artikelkategorien` ak ON aa.kategorie = ak.id AND ak.geloescht <> 1 AND aa.artikel = %d + ORDER by ak.bezeichnung, ak.id", + $articleId + ) + ); + if($kategorien) + { + foreach($kategorien as $v) + { + $katid[$v['id']] = true; + } + } + if(!empty($katid)) { + foreach($kategorienbaum as $v) { + if(isset($katid[$v['id']])) { + $art['kategorien'][] = array('name'=>$v['bezeichnung'],'parent'=>$v['parent'],'id'=>$v['id'],'lvl'=>$v['lvl'],'extid'=>$v['extid']); + } + } + } + } + } + + $art['shopexport'] = $this->app->DB->SelectArr( + sprintf( + "SELECT name, wert FROM shopexport_artikel WHERE artikel = %d AND shopid = %d ORDER BY id ", + $articleId, $shopId + ) + ); + + return sha1(json_encode($art)); + } +}