2021-05-21 08:49:41 +02:00
< ? php
2023-03-04 15:08:57 +01:00
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral ( c ) Xentral ERP Sorftware GmbH , Fuggerstrasse 11 , D - 86150 Augsburg , * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License * Version 3.1 .
*
* You should have received a copy of this license from your vendor and / or * along with this file ; If not , please visit www . wawision . de / Lizenzhinweis
* to obtain the text of the corresponding license version .
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
2021-05-21 08:49:41 +02:00
*/
?>
2023-03-04 15:08:57 +01:00
< ? php
use Xentral\Components\Http\JsonResponse ;
use Xentral\Modules\TransferSmartyTemplate\TransferSmartyTemplate ;
include '_gen/shopexport.php' ;
class Onlineshops extends GenShopexport {
/** @var Application $app */
public $app ;
/** @var TransferSmartyTemplate $tmpl */
public $tmpl ;
const MODULE_NAME = 'Onlineshop' ;
public $stylesheet = [
'./classes/Modules/Onlineshop/www/css/feature.css' ,
'./classes/Modules/Onlineshop/www/css/shopsettings.css' ,
'./classes/Modules/Appstore/www/css/tilegrid.css' ,
];
public $javascript = [
'./classes/Modules/Onlineshop/www/js/onlineshop_appnew.js' ,
'./classes/Modules/Onlineshop/www/js/shopsettings.js' ,
'./classes/Modules/Onlineshop/www/js/onlineshop_create.js' ,
];
/** @var string $smartydir */
protected $smartydir ;
/** @var string $templateDir */
protected $templateDir ;
/** @var string $segment */
protected $segment ;
/**
* @ param Application $app
* @ param string $name
* @ param array $erlaubtevars
*
* @ return array
*/
public static function TableSearch ( $app , $name , $erlaubtevars )
{
switch ( $name )
{
case " shopexport_log " :
$id = $app -> 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, '<img src=./themes/ { $app -> 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 = " <span style= \" display:none; \" >id=%value%</span> " ;
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 = " <table cellpadding=0 cellspacing=0><tr><td nowrap> " . " <a href= \" # \" onclick=sprachenEdit(%value%)> " . " <img src= \" themes/ { $app -> Conf -> WFconf [ 'defaulttheme' ] } /images/edit.svg \" border= \" 0 \" ></a> " . " " . " <a href= \" # \" onclick=DeleteDialog( \" index.php?module=onlineshops&action=sprachendelete&id=%value% \" );> " . " <img src= \" themes/ { $app -> Conf -> WFconf [ 'defaulttheme' ] } /images/delete.svg \" border= \" 0 \" ></a> " . " </td></tr></table> " ;
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 = " <table cellpadding=0 cellspacing=0><tr><td nowrap> " . " <a href= \" # \" onclick=kundengruppenEdit(%value%)> " . " <img src= \" themes/ { $app -> Conf -> WFconf [ 'defaulttheme' ] } /images/edit.svg \" border= \" 0 \" ></a> " . " " . " <a href= \" # \" onclick=DeleteDialog( \" index.php?module=onlineshops&action=kundengruppendelete&id=%value% \" );> " . " <img src= \" themes/ { $app -> Conf -> WFconf [ 'defaulttheme' ] } /images/delete.svg \" border= \" 0 \" ></a> " . " </td></tr></table> " ;
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 = " '<img src=./themes/new/images/details_open.png class=details>' AS `open`, CONCAT('<input type= \" checkbox \" name= \" auswahl[] \" value= \" ',a.id,' \" />') 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 = " <table cellpadding=0 cellspacing=0><tr><td nowrap> " . " <a href= \" index.php?module=artikel&action=edit&id=%value%#tabs-4 \" ><img src= \" themes/ { $app -> Conf -> WFconf [ 'defaulttheme' ] } /images/edit.svg \" border= \" 0 \" ></a></td></tr></table> " ;
// $menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap>" . "<a href=\"#\" onclick=kundengruppenEdit(%value%)>" . "<img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>" . " " . "<a href=\"#\" onclick=DeleteDialog(\"index.php?module=onlineshops&action=kundengruppendelete&id=%value%\");>" . "<img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>" . " </td></tr></table>";
$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 ( '<div class="error">Shop nicht gefunden</div>' )
);
}
$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 ( '<div class="error">Artikel nicht angegeben</div>' )
);
}
$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 ( '<div class="error">Artikel %s nicht gefunden</div>' , $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 (
'<div class="error">Sie haben keine Rechte den Artikel %s aufzurufen</div>' ,
$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 ( '<div class="error">Shop nicht gefunden</div>' )
);
}
$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 ( '<div class="error">Auftrag nicht angegeben</div>' )
);
}
$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 ( '<div class="error">Auftrag %s nicht gefunden</div>' , $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 (
'<div class="error">Sie haben keine Rechte den Auftrag %s aufzurufen</div>' ,
$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' => '<div class="error">' . $check [ 'error' ] . '</div>' ],
JsonResponse :: HTTP_INTERNAL_SERVER_ERROR
);
}
$this -> app -> Location -> execute (
'index.php?module=onlineshops&action=appnew&msg='
. $this -> app -> erp -> base64_url_encode ( '<div class="error">' . $check [ 'error' ] . '</div>' )
);
}
if ( $shopId > 0 ) {
$shop = [ 'id' => $shopId ,];
}
else {
$shop = $this -> createInternShop ( $check [ 'data' ][ 'shoptype' ]);
}
if ( ! empty ( $shop [ 'error' ])) {
if ( ! $fromCreateButton ) {
return new JsonResponse (
[ 'error' => '<div class="error">' . $shop [ 'error' ] . '</div>' ],
JsonResponse :: HTTP_INTERNAL_SERVER_ERROR
);
}
$this -> app -> Location -> execute (
'index.php?module=onlineshops&action=appnew&msg='
. $this -> app -> erp -> base64_url_encode ( '<div class="error">' . $shop [ 'error' ] . '</div>' )
);
}
$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' => '<div class="info">Shoptyp: ' . $check [ 'data' ][ 'shoptype' ] . '</div>' ]);
}
$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' ,
'<div class="info">Es wurde ein neuer <a href="index.php?module=onlineshops&action=edit&id='
. $shopId . ' " target= " _blank " >Shop</a> angelegt.
< a href = " '. $url .' " target = " _blank " > zur & uuml ; ck zum Onlineshop </ a ></ div > '
);
}
else {
$this -> app -> Tpl -> Add (
'MESSAGE' ,
'<div class="info">Es wurde ein neuer <a href="index.php?module=onlineshops&action=edit&id='
. $shopId . '" target="_blank">Shop</a> angelegt.</div>'
);
}
}
$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 '<pre>' ;
echo htmlspecialchars ( $wert );
echo '</pre>' ;
} 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 = '<table><tr><td>Feldname</td><td>Ursprünglicher Wert</td><td>Aktualisierter Wert</td></tr>' ;
foreach ( $lastChanges as $lastChangeFieldName => $lastChangeFieldValue ){
$message .= '<tr><td>' . $lastChangeFieldName . '</td><td>' . $fieldsToCompareTo [ $lastChangeFieldName ] . '</td><td>' . $lastChangeFieldValue . '</td></tr>' ;
}
$message .= '</table>' ;
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 '<pre>' ;
echo print_r ( $warenkorb , true );
echo '</pre>' ;
$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' ){
2024-04-30 14:52:34 +02:00
$this -> app -> DB -> Update ( 'UPDATE onlineshops_tasks SET status=\'inactive\',counter=0 WHERE id=' . $task [ 'id' ]);
2023-03-04 15:08:57 +01:00
}
}
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 ( " <div class= \" info \" >Der Eintrag wurde entfernt!</div> " );
$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 ( " <div class= \" info \" >Der Eintrag wurde entfernt!</div> " );
$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 ( " <div class= \" info \" >Der Eintrag wurde entfernt!</div> " );
$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 ( " <div class= \" info \" >Der Eintrag wurde entfernt!</div> " );
$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 ( " <div class= \" info \" >Der Eintrag wurde entfernt!</div> " );
$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 ( " <div class= \" info \" >Der Eintrag wurde entfernt!</div> " );
$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' ,
'<script class="booster" data-module="' . $cmd . '" type="application/json"></script>'
);
}
else {
/** @var ShopimporterBase $obj */
$obj = $this -> app -> loadModule ( $cmd );
if ( $obj !== null && method_exists ( $obj , 'AuthByAssistent' )){
$this -> app -> Tpl -> Add (
'TAB1' ,
'<script class="autoOpenModule" data-module="' . $cmd . '" type="application/json"></script>'
);
}
}
}
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 ( '<div class="error">' . $check [ 'Error' ] . '</div>' );
$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' , '<div class="error">{|Der Prozessstarter "shopimport" ist auf "Uhrzeit" eingestellt. Es werden die Einstellungen "periodisch" mit der Periode 5 empfohlen|}</div>' );
}
}
}
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' , '<div class="info">Lagerzahlencache zurückgesetzt für ' . $anz . ' Artikel, shopid: ' . $id . '</div>' );
}
}
$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','<pre>'.print_r($featureKeys,true).'</pre>');
$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' , '<div class="info">' );
if ( isset ( $pageContents2 [ 'subshops' ])) {
$this -> app -> Tpl -> Add ( 'MESSAGE' , ' Subshops :
< table >< tr >< td > Id </ td >< td > Name </ td >< td > Aktiv </ td ></ tr >
' );
foreach ( $pageContents2 [ 'subshops' ] as $subshop ) {
$this -> app -> Tpl -> Add ( 'MESSAGE' , '<tr><td>' . $subshop [ 'id' ] . '</td><td>' . $subshop [ 'name' ] . " </td><td> " . ( $subshop [ 'aktiv' ] ? 'ja' : 'nein' ) . " </td></tr> " );
}
$this -> app -> Tpl -> Add ( 'MESSAGE' , '</table>' );
}
else {
$this -> app -> Tpl -> Add ( 'MESSAGE' , 'Verbindung: success' );
}
$this -> app -> Tpl -> Add ( 'MESSAGE' , '</div>' );
}
else {
$this -> app -> Tpl -> Set ( 'MESSAGE' , " <div class= \" info \" >Verbindung: $pageContents </div> " );
}
}
else {
$this -> app -> Tpl -> Set ( 'MESSAGE' , " <div class= \" error \" >Verbindungsproblem: Eventuell falsche Schlüssel! ( $pageContents )</div> " );
}
}
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' , '<div class="error2">Aktuell sind keine Aufträge in den Online-Shops vorhanden!</div>' );
}
}
$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' , '<option value=""></option>' );
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' , '<option value="freifeld' . $i . '">' . $freifeldname [ 0 ] . '</option>' );
}
/*
$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 .= '<option value="' . $k . '">{|' . $v . '|}</option>' ;
}
}
$projektId = $this -> app -> DB -> Select ( " SELECT projekt FROM shopexport WHERE id = ' $id ' LIMIT 1 " );
$selversandarten = '<option value=""></option>' ;
$selzahlungsweisen = '<option value=""></option>' ;
$zahlungsweisen = $this -> app -> erp -> GetZahlungsweise ( null , null , $projektId );
if ( ! empty ( $zahlungsweisen )){
foreach ( $zahlungsweisen as $k => $v ) {
$selzahlungsweisen .= '<option value="' . $k . '">' . $v . '</option>' ;
}
}
$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 .= '<option value="' . $k . '">' . $v . '</option>' ;
}
}
$this -> app -> Tpl -> Set ( 'FORMULAR' , ' < div id = " editZahlweisen " style = " display:none; " title = " Bearbeiten " >
< input type = " hidden " id = " b_id " >
< table >
< tr >
< td > { | Zahlweise Shop | } :</ td >
< td >< input type = " text " id = " b_zahlweise_shop " ></ td >
</ tr >
< tr >
< td > { | Zahlweise Xentral | } :</ td >
< td >< select id = " b_zahlweise_wawision " > '.$selzahlungsweisen.' </ select ></ td >
</ tr >
< tr >
< td > { | Vorab als bezahlt markieren | } :</ td >
< td >< input type = " checkbox " value = " 1 " id = " b_vorabbezahltmarkieren " ></ td >
</ tr >
< tr >
< td > { | Autoversand aktiv | } :</ td >
< td >< input type = " checkbox " checked = " checked " value = " 1 " id = " b_autoversand " ></ td >
</ tr >
< tr >
< td > { | keine Rechnung erstellen | } :</ td >
< td >< input type = " checkbox " value = " 1 " id = " b_keinerechnung " ></ td >
</ tr >
< tr >
< td > { | Fast - Lane | } :</ td >
< td >< input type = " checkbox " value = " 1 " id = " b_fastlane " ></ td >
</ tr >
< tr >
< td > { | Aktiv | } :</ td >
< td >< input type = " checkbox " value = " 1 " id = " b_aktiv " ></ td >
</ tr >
</ table >
</ div > ' );
$this -> app -> Tpl -> Add ( 'FORMULAR' , ' < div id = " editVersandarten " style = " display:none; " title = " Bearbeiten " >
< input type = " hidden " id = " b_id2 " >
< table >
< tr >
< td > { | Versandart Shop | } :</ td >
< td >< input type = " text " id = " b_versandart_shop " ></ td >
</ tr >
< tr >
< td > { | Versandart Xentral | } :</ td >
< td >< select id = " b_versandart_wawision " > '.$selversandarten.' </ select ></ td >
</ tr >
< tr >
< tr >
< td > { | Versandart Ausgehend | } :</ td >
< td >< input type = " text " id = " b_versandart_ausgehend " ></ td >
</ tr >
< tr >
< td > { | Versandprodukt Ausgehend | } :</ td >
< td >< input type = " text " id = " b_produkt_ausgehend " ></ td >
</ tr >
< tr >
< td > { | Land ( mit Komma getrennt 2 - stellig ISO ) | } :</ td >
< td >< input type = " text " id = " b_land " ></ td >
</ tr >
< tr >
< td > { | Fast - Lane | } :</ td >
< td >< input type = " checkbox " value = " 1 " id = " b_fastlane2 " ></ td >
</ tr >
< tr >
< td > { | Autoversand aktiv | } :</ td >
< td >< input type = " checkbox " checked = " checked " value = " 1 " id = " b_autoversand2 " ></ td >
</ tr >
< tr >
< td > { | Aktiv | } :</ td >
< td >< input type = " checkbox " value = " 1 " id = " b_aktiv2 " ></ td >
</ tr >
</ table >
</ div > ' );
$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 .= '<option value="' . $kundengruppe [ 'id' ] . '">' . $kundengruppe [ 'name' ] . '</option>' ;
}
$this -> app -> Tpl -> Add ( 'FORMULAR' , ' < div id = " editKundengruppen " style = " display:none; " title = " Bearbeiten " >
< input type = " hidden " id = " k_id " >
< input type = " hidden " id = " k_shop " >
< table >
< tr >
< td > { | Gruppe Xentral | } :</ td >
< td >< select id = " k_kundengruppe " > '.$kundengruppenSelect.' </ select ></ td >
</ tr >
< tr >
< td > { | Gruppe im Shop | } :</ td >
< td >< input type = " text " id = " k_extbezeichnung " ></ td >
</ tr >
< tr >
< td > { | Projekt | } :</ td >
< td >< input type = " text " id = " k_projekt " ></ td >
</ tr >
< tr >
< td > { | Neukunden zuweisen | } :</ td >
< td >< input type = " checkbox " value = " 1 " id = " k_neukundengruppezuweisen " ></ td >
</ tr >
< tr >
< td > { | Rolle | } :</ td >
< td >< select id = " k_rolle " >< option value = " Kunde " > Kunde </ option >< option value = " Mitglied " > Mitglied </ option >< option value = " Artikel " > Artikel </ option ></ select ></ td >
</ tr >
< tr >
< td > { | Aktiv | } :</ td >
< td >< input type = " checkbox " value = " 1 " id = " k_aktiv " ></ td >
</ tr >
</ table >
</ div > ' );
$this -> app -> Tpl -> Add ( 'FORMULAR' , ' < div id = " editFreifelder " style = " display:none; " title = " Bearbeiten " >
< input type = " hidden " id = " b_id3 " >
< table >
< tr >
< td > { | Freifeld Xentral | } :</ td >
< td >< select id = " b_freifeld_wawi " >
[ FREIFELDEROPTIONEN ]
</ select ></ td >
</ tr >
< tr >
< td > { | Bezeichnung in Shop | } :</ td >
< td >< input type = " text " id = " b_freifeld_shop " ></ td >
</ tr >
< tr >
< td > { | Aktiv | } :</ td >
< td >< input type = " checkbox " value = " 1 " id = " b_aktiv3 " ></ td >
</ tr >
</ table >
</ div > ' );
$this -> app -> Tpl -> Add ( 'FORMULAR' , ' < div id = " editSubshop " style = " display:none; " title = " Bearbeiten " >
< input type = " hidden " id = " b_id4 " >
< table >
< tr >
< td > { | Subshop Kennung | } :</ td >
< td >< input type = " text " id = " b_subshopkennung " ></ td >
</ tr >
< tr >
< td > { | Projekt Xentral | } :</ td >
< td >< input type = " text " name = " b_projekt " id = " b_projekt " ></ td >
</ tr >
< tr >
< td > { | Sprache | } :</ td >
< td >< select id = " b_sprache " >< option value = " " ></ option > '.$sprachensel.' </ select ></ td >
</ tr >
< tr >
< td > { | Aktiv | } :</ td >
< td >< input type = " checkbox " value = " 1 " id = " b_aktiv4 " ></ td >
</ tr >
</ table >
</ div > ' );
$this -> app -> Tpl -> Add ( 'FORMULAR' , ' < div id = " editSprachen " style = " display:none; " title = " Bearbeiten " >
< input type = " hidden " id = " d_id " >
< table >
< tr >
< td > { | Land | } :</ td >
< td >< input type = " text " id = " d_land " ></ td >
</ tr >
< tr >
< td > { | Projekt Xentral | } :</ td >
< td >< input type = " text " name = " d_projekt " id = " d_projekt " ></ td >
</ tr >
< tr >
< td > { | Sprache | } :</ td >
< td >< select id = " d_sprache " > '.$sprachensel.' </ select ></ td >
</ tr >
< tr >
< td > { | Aktiv | } :</ td >
< td >< input type = " checkbox " value = " 1 " id = " d_aktiv " ></ td >
</ tr >
</ table >
</ div > ' );
$this -> app -> Tpl -> Set ( 'NEUTAB3' , '
< fieldset >
< legend > { | Anlegen | } </ legend >
< form action = " " onsubmit = " return zahlweiseSave(this); " >
< input type = " hidden " name = " shop " id = " shop " value = " '. $id .' " >
< table width = " " cellspacing = " 0 " cellpadding = " 0 " >
< tr >
< td > { | Zahlweise Shop | } :& nbsp ; </ td >
< td >< input type = " text " name = " zahlweise_shop " id = " zahlweise_shop " ></ td >
< td >& nbsp ; </ td >
< td > { | Zahlweise Xentral | } :& nbsp ; </ td >
< td >< select name = " zahlweise_wawision " id = " zahlweise_wawision " > '.$selzahlungsweisen.' </ select ></ td >
< td >& nbsp ; </ td >
< td > { | Vorab als bezahlt markieren | } :& nbsp ; </ td >
< td >< input type = " checkbox " value = " 1 " name = " vorabbezahltmarkieren " id = " vorabbezahltmarkieren " ></ td >
< td >& nbsp ; </ td >
< td > { | Autoversand aktiv | } :& nbsp ; </ td >
< td >< input type = " checkbox " value = " 1 " checked = " checked " name = " autoversand " id = " autoversand " >& nbsp ; < i > ( Haken muss standardmässig aktiviert sein ) </ i ></ td >
< td >& nbsp ; </ td >
< td > { | keine Rechnung erstellen | } :& nbsp ; </ td >
< td >< input type = " checkbox " value = " 1 " name = " keinerechnung " id = " keinerechnung " ></ td >
< td >& nbsp ; </ td >
< td > { | Fast - Lane | } :& nbsp ; </ td >
< td >< input type = " checkbox " value = " 1 " name = " fastlane " id = " fastlane " ></ td >
< td >& nbsp ; </ td >
< td >< input type = " submit " name = " " value = " { |Speichern|} " ></ td >
</ tr >
</ table >
</ form >
</ fieldset > ' );
$this -> app -> Tpl -> Set ( 'NEUTAB4' , '
< fieldset >
< legend > { | Anlegen | } </ legend >
< form action = " " onsubmit = " return versandartSave(this); " >
< input type = " hidden " name = " shop " id = " shop " value = " '. $id .' " >
< table width = " " cellspacing = " 0 " cellpadding = " 0 " >
< tr >
< td width = " 105 " > { | Versandart Shop | } :& nbsp ; </ td >
< td width = " 180 " >< input type = " text " name = " versandart_shop " id = " versandart_shop " ></ td >
< td >& nbsp ; </ td >
< td width = " 130 " > { | Versandart Xentral | } :& nbsp ; </ td >
< td width = " 180 " >< select name = " versandart_wawision " id = " versandart_wawision " > '.$selversandarten.' </ select ></ td >
< td >& nbsp ; </ td >
< td width = " 130 " > { | Versandart Ausgehend | } :& nbsp ; </ td >
< td width = " 180 " >< input type = " text " name = " versandart_ausgehend " id = " versandart_ausgehend " </ td >
< td >& nbsp ; </ td >
< td width = " 130 " > { | Produkt Ausgehend | } :& nbsp ; </ td >
< td width = " 180 " >< input type = " text " name = " produkt_ausgehend " id = " produkt_ausgehend " </ td >
< td >& nbsp ; </ td >
< td width = " 230 " > { | Land ( 2 - stellig ISO mit Komma getrennt ) | } :& nbsp ; </ td >
< td width = " 60 " >< input type = " text " name = " land " id = " land " size = " 3 " ></ td >
< td >& nbsp ; </ td >
< td width = " 110 " > { | Autoversand aktiv | } :& nbsp ; </ td >
< td width = " 300 " >< input type = " checkbox " value = " 1 " checked = " checked " name = " autoversand " id = " autoversand " >& nbsp ; < i > ( Haken muss standardmässig aktiviert sein ) </ i ></ td >
< td >& nbsp ; </ td >
< td width = " 110 " > { | Fast - Lane | } :& nbsp ; </ td >
< td width = " 300 " >< input type = " checkbox " value = " 1 " name = " fastlane " id = " fastlane " ></ td >
< td >& nbsp ; </ td >
< td >< input type = " submit " name = " " value = " { |Speichern|} " ></ td >
</ tr >
</ table >
</ form >
</ fieldset > ' );
$this -> app -> Tpl -> Set ( 'NEUTAB5' , '
< fieldset >
< legend > { | Anlegen | } </ legend >
< form action = " " onsubmit = " return freifelderSave(this); " >
< input type = " hidden " name = " shop " id = " shop " value = " '. $id .' " >
< table width = " " cellspacing = " 0 " cellpadding = " 0 " >
< tr >
< td > { | Freifeld Xentral | } :& nbsp ; </ td >
< td >< select name = " freifeld_wawi " id = " freifeld_wawi " > [ FREIFELDEROPTIONEN ] </ select ></ td >
< td >& nbsp ; </ td >
< td > { | Bezeichnung in Shop | } :& nbsp ; </ td >
< td >< input type = " text " name = " freifeld_shop " id = " freifeld_shop " ></ td >
< td >& nbsp ; </ td >
< td >< input type = " submit " name = " " value = " { |Speichern|} " ></ td >
</ tr >
</ table >
</ form >
</ fieldset > ' );
$this -> app -> Tpl -> Set ( 'NEUTAB6' , '
< fieldset >
< legend > { | Anlegen | } </ legend >
< form action = " " onsubmit = " return subshopSave(this); " >
< input type = " hidden " name = " shop " id = " shop " value = " '. $id .' " >
< table width = " " cellspacing = " 0 " cellpadding = " 0 " >
< tr >
< td > { | Subshop Kennung | } :& nbsp ; </ td >
< td >< input type = " text " name = " subshopkennung " id = " subshopkennung " ></ td >
< td >& nbsp ; </ td >
< td > { | Sprache | } :& nbsp ; </ td >
< td >< select name = " sprache " id = " sprache " >< option value = " " ></ option > '.$sprachensel.' </ select ></ td >
< td >& nbsp ; </ td >
< td > { | Projekt Xentral | } :& nbsp ; </ td >
< td >< input type = " text " name = " projekt " id = " projekt " ></ td >
< td >& nbsp ; </ td >
< td >< input type = " submit " name = " " value = " { |Speichern|} " ></ td >
</ tr >
</ table >
</ form >
</ fieldset > ' );
$this -> app -> Tpl -> Set ( 'NEUTAB7' , '
< fieldset >
< legend > { | Anlegen | } </ legend >
< form action = " " onsubmit = " return sprachenSave(this); " >
< input type = " hidden " name = " shop " id = " spracheshop " value = " '. $id .' " >
< table width = " " cellspacing = " 0 " cellpadding = " 0 " >
< tr >
< td > { | Land | } :& nbsp ; </ td >
< td >< input type = " text " name = " land " id = " sprachenland " ></ td >
< td >& nbsp ; </ td >
< td > { | Sprache | } :& nbsp ; </ td >
< td >< select name = " sprache " id = " sprachensprache " > '.$sprachensel.' </ select ></ td >
< td >& nbsp ; </ td >
< td > { | Projekt Xentral | } :& nbsp ; </ td >
< td >< input type = " text " name = " projekt " id = " sprachenprojekt " ></ td >
< td >& nbsp ; </ td >
< td >< input type = " submit " name = " " value = " { |Speichern|} " ></ td >
</ tr >
< tr >
< td ></ td >
< td colspan = " 4 " >< small >< i > Bitte als ISO2 - L & auml ; nderk & uuml ; rzel eintragen </ i ></ small ></ td >
</ tr >
</ table >
</ form >
</ fieldset > ' );
$this -> app -> Tpl -> Set ( 'NEUTAB8' , '
< fieldset >
< legend > { | Anlegen | } </ legend >
< form action = " " onsubmit = " return kundengruppenSave(this); " >
< input type = " hidden " name = " shop " id = " kundengruppenshopid " value = " '. $id .' " >
< table width = " " cellspacing = " 0 " cellpadding = " 0 " >
< tr >
< td >< label for = " zuweisungrolle " > { | Rolle | } :& nbsp ; </ label ></ td >
< td >< select name = " zuweisungrolle " id = " zuweisungrolle " >< option value = " Kunde " > Kunde </ option >< option value = " Mitglied " > Mitglied </ option >< option value = " Artikel " > Artikel </ option ></ select ></ td >
< td >& nbsp ; </ td >
< td > { | von | } :& nbsp ; </ td >
< td >< select name = " kundengruppexentral " id = " kundengruppexentral " > '.$kundengruppenSelect.' </ select ></ td >
< td >& nbsp ; </ td >
< td > { | Projekt Xentral | } :& nbsp ; </ td >
< td >< input type = " text " name = " projekt " id = " kundengruppeprojekt " ></ td >
< td >& nbsp ; </ td >
< td > { | Gruppe im Shop | } :& nbsp ; </ td >
< td >< input type = " text " name = " kundengruppeshop " id = " kundengruppeshop " ></ td >
< td >& nbsp ; </ td >
< td >< label for = " kundengruppeneukundenzuweisen " > { | Neukunden automatisch zuweisen | } :& nbsp ; </ label ></ td >
< td >< input type = " checkbox " value = " 1 " id = " kundengruppeneukundenzuweisen " name = " kundengruppeneukundenzuweisen " ></ td >
< td >& nbsp ; </ td >
< td >< input type = " submit " name = " " value = " { |Speichern|} " ></ td >
</ tr >
</ table >
</ form >
</ fieldset > ' );
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' , '<div class="error">{|Der Prozessstarter "shopimport" ist auf "Uhrzeit" eingestellt. Es werden die Einstellungen "periodisch" mit der Periode 5 empfohlen|}</div>' );
}
}
}
$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' ,
'<div class="info">Dieses Modul ist noch im Beta Stadium.</div>'
);
$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 ( '<br />' , $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' => '<pre>' . print_r ( $cart , true ) . '</pre>' ,
'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' => '<pre>' . print_r ( $cart , true ) . '</pre>' ,
'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' => '<pre>' . print_r ( $cart , true ) . '</pre>' ,
'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' => '<pre>' . print_r ( $cart , true ) . '</pre>' ,
]
);
}
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' => '<pre>' . print_r ( $cart , true ) . '</pre>' ,
]
);
}
/**
* @ 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 ( '<?xml version="1.0" encoding="UTF-8"?><%s></%s>' , $rootNode , $rootNodeCloser )
);
$nameSpaces = $this -> getNameSpacesByNode ( $rootNode );
$this -> arrayToXmlHelper ( $xml , $array , $nameSpaces );
return $xml ;
}
/**
* @ param string $key
* @ param array $nameSpaces
*
* @ return array
*/
protected function getAttributesFromKey ( $key , $nameSpaces = [])
{
$keyArr = explode ( ' ' , $key );
$nameSpace = null ;
$node = $keyArr [ 0 ];
if ( strpos ( $node , ':' ) !== false ) {
list ( $nameSpaceShort , $node ) = explode ( ':' , $node , 2 );
if ( $nameSpaceShort !== '' && isset ( $nameSpaces [ $nameSpaceShort ])) {
$nameSpace = $nameSpaces [ $nameSpaceShort ];
}
}
unset ( $keyArr [ 0 ]);
$attributes = [];
foreach ( $keyArr as $attr ) {
if ( empty ( $attr )) {
continue ;
}
$attrA = explode ( '=' , $attr , 2 );
if ( ! empty ( $attrA [ 1 ])) {
$attrA [ 1 ] = trim ( $attrA [ 1 ], '"' );
}
$attributes [] = $attrA ;
}
return [ $node , $attributes , $nameSpace ];
}
/**
* @ see convertArrayToSimpleXml
*
* @ param SimpleXMLElement $xmlObj
* @ param array $array
* @ param array $nameSpaces
* @ param string $parentTag
* @ param array $attributesFromParent
*/
protected function arrayToXmlHelper ( & $xmlObj , $array , $nameSpaces = [], $parentTag = '' , $attributesFromParent = [])
{
foreach ( $array as $key => $value ) {
if ( is_int ( $key )) {
$key = 'item' . $key ;
}
// Wenn kein Knotenname ermittelt werden konnte > den Knoten 'item' nennen
$subNodeName = is_int ( $key ) ? 'item' : $key ;
if ( ! empty ( $parentTag ) && is_int ( $key )) {
$subNodeName = $parentTag ;
}
list ( $subNodeName , $attributes , $nameSpace ) = $this -> getAttributesFromKey ( $subNodeName , $nameSpaces );
if ( is_array ( $value )) {
$useParentTag = false ; // !empty($key);
foreach ( $value as $key2 => $value2 ) {
if ( ! is_int ( $key2 ) || ! $useParentTag ) {
$useParentTag = false ;
break ;
}
}
if ( $useParentTag ) {
$this -> arrayToXmlHelper ( $xmlObj , $value , $nameSpaces , $subNodeName , $attributes );
}
else {
$subNode = $xmlObj -> addChild (( string ) $subNodeName , null , $nameSpace );
if ( ! empty ( $attributes )) {
foreach ( $attributes as $attribute ) {
$subNode -> addAttribute (( string ) $attribute [ 0 ],
empty ( $attribute [ 1 ]) ? '' : ( string ) $attribute [ 1 ]);
}
}
elseif ( ! empty ( $attributesFromParent )) {
foreach ( $attributesFromParent as $attribute ) {
$subNode -> addAttribute (( string ) $attribute [ 0 ],
empty ( $attribute [ 1 ]) ? '' : ( string ) $attribute [ 1 ]);
}
}
$this -> arrayToXmlHelper ( $subNode , $value , $nameSpaces , $subNodeName );
}
} else {
$subNode = $xmlObj -> addChild (( string ) $subNodeName , htmlspecialchars ( $value , ENT_QUOTES ), $nameSpace );
if ( ! empty ( $attributes )) {
foreach ( $attributes as $attribute ) {
$subNode -> addAttribute (( string ) $attribute [ 0 ], empty ( $attribute [ 1 ]) ? '' : ( string ) $attribute [ 1 ]);
}
}
elseif ( ! empty ( $attributesFromParent )) {
foreach ( $attributesFromParent as $attribute ) {
$subNode -> addAttribute (( string ) $attribute [ 0 ], empty ( $attribute [ 1 ]) ? '' : ( string ) $attribute [ 1 ]);
}
}
}
}
}
/**
* @ param string $node
*
* @ return array
*/
protected function getNameSpacesByNode ( $node )
{
$nameSpaces = [];
$nodeArr = explode ( ' ' , $node );
unset ( $nodeArr [ 0 ]);
foreach ( $nodeArr as $nodeVal ) {
$nodeVal = trim ( $nodeVal );
if ( empty ( $nodeVal )) {
continue ;
}
if ( preg_match_all ( '/xmlns(:{0,1})([^=]*)="([^"]+)"/' , $nodeVal , $matches )) {
$nameSpaces [ $matches [ 2 ][ 0 ]] = $matches [ 3 ][ 0 ];
}
}
return $nameSpaces ;
}
/**
* @ param $id
*/
protected function loadSmarty ( $id )
{
$this -> smartydir = 'Modules/Onlineshops' ;
$this -> segment = 'online' . $id ; // uniqid('online', true);
$this -> templateDir = $this -> app -> erp -> GetTMP () . $this -> smartydir . '/template_' . $id . $this -> segment ;
$this -> tmpl = $this -> app -> Container -> get ( 'TransferSmartyTemplate' );
if ( ! is_dir ( $this -> templateDir ) && ! mkdir ( $this -> templateDir , 0777 , true )
&& ! is_dir ( $this -> templateDir )) {
return ;
}
$this -> tmpl -> addTemplateDir ( $this -> segment , $this -> templateDir . '/' );
try {
$this -> tmpl -> registerPlugin ( 'modifier' , 'jsondecode' , [ $this , 'SmartyJsonDecode' ]);
$this -> tmpl -> registerPlugin ( 'modifier' , 'jsonencode' , [ $this , 'SmartyJsonEncode' ]);
$this -> tmpl -> registerPlugin ( 'modifier' , 'arraytolist' , [ $this , 'SmartyArrayToList' ]);
$this -> tmpl -> registerPlugin ( 'modifier' , 'print_r' , [ $this , 'SmartyPrintR' ]);
$this -> tmpl -> registerPlugin ( 'modifier' , 'preg_replace' , 'preg_replace' );
$this -> tmpl -> registerPlugin ( 'modifier' , 'substr' , 'substr' );
$this -> tmpl -> registerPlugin ( 'modifier' , 'strtolower' , 'strtolower' );
$this -> tmpl -> registerPlugin ( 'modifier' , 'strtoupper' , 'strtoupper' );
$this -> tmpl -> registerPlugin ( 'modifier' , 'explode' , 'explode' );
$this -> tmpl -> registerPlugin ( 'modifier' , 'strstr' , 'strstr' );
$this -> tmpl -> registerPlugin ( 'modifier' , 'strlen' , 'strlen' );
$this -> tmpl -> registerPlugin ( 'modifier' , 'strtotime' , 'strtotime' );
$this -> tmpl -> registerPlugin ( 'modifier' , 'intval' , 'intval' );
}
catch ( Exception $e ) {
}
}
/**
* @ param string $content
*
* @ return string
*/
protected function reformatTemplate ( $content ) {
return str_replace ( " \\ \n " , '' , str_replace ( " \r " , '' , $content ));
}
/**
* @ param array $cartObj
* @ param string $template
* @ param int $shopId
* @ param bool $merge
*
* @ return array
*/
protected function createCartObjectFromTemplateJson ( $cartObj , $template , $shopId , $merge = true )
{
if ( ! is_dir ( $this -> templateDir ) && ! mkdir ( $this -> templateDir , 0777 , true )
&& ! is_dir ( $this -> templateDir )) {
if ( $merge ){
return $cartObj ;
}
return null ;
}
@ file_put_contents (
$this -> templateDir . '/cart_' . $shopId . '.tpl' , trim ( $this -> reformatTemplate ( $template ))
);
try {
$object = json_decode ( json_encode ( $cartObj ));
$this -> tmpl -> assign ( 'cart' , $object );
$this -> tmpl -> assign ( 'cartarray' , $cartObj );
$this -> tmpl -> assign ( 'object' , $object );
$this -> tmpl -> assign ( 'objectarray' , $cartObj );
$shop = $this -> app -> DB -> SelectRow ( sprintf ( 'SELECT * FROM `shopexport` WHERE `id` = %d' , $shopId ));
$settings = @ json_decode ( $shop [ 'einstellungen_json' ], true );
$settings = empty ( $settings [ 'felder' ]) ? null : $settings [ 'felder' ];
$this -> tmpl -> assign (
'shop' ,
$shop
);
$this -> tmpl -> assign (
'shopsettings' ,
json_decode ( json_encode ( $settings ))
);
}
catch ( Exception $e ) {
if ( $merge ){
return $cartObj ;
}
return null ;
}
try {
$content = $this -> tmpl -> fetch ( $this -> segment , 'cart_' . $shopId . '.tpl' );
}
catch ( Exception $e ) {
throw $e ;
}
$content = trim ( $content );
$ret = json_decode ( $content , true );
if ( ! $merge ) {
return $ret ;
}
return $this -> mergeArrays ( $cartObj , $ret );
}
/**
* @ param array $cartObj
* @ param array $cartWithItemObj
* @ param string $template
* @ param int $shopId
* @ param bool $merge
*
* @ return array
*/
protected function createCartObjectFromTemplate ( $cartObj , $cartWithItemObj , $template , $shopId , $merge = true )
{
if ( ! is_dir ( $this -> templateDir ) && ! mkdir ( $this -> templateDir , 0777 , true )
&& ! is_dir ( $this -> templateDir )) {
if ( $merge ){
return [ $cartObj , $cartWithItemObj ];
}
return [ null , null ];
}
@ file_put_contents (
$this -> templateDir . '/cart_' . $shopId . '.tpl' , trim ( $this -> reformatTemplate ( $template ))
);
try {
$object = json_decode ( json_encode ( $cartWithItemObj ));
$this -> tmpl -> assign ( 'cart' , $object );
$this -> tmpl -> assign ( 'object' , $object );
} catch ( Exception $e ) {
if ( $merge ){
return [ $cartObj , $cartWithItemObj ];
}
return [ null , null ];
}
try {
$content = $this -> tmpl -> fetch ( $this -> segment , 'cart_' . $shopId . '.tpl' );
}
catch ( Exception $e ) {
throw $e ;
}
try {
$content = trim ( $content );
$xml = new SimpleXMLElement ( $content );
if ( $xml === false ) {
$ret = json_decode ( $content , true );
if ( is_array ( $ret )) {
if ( $merge ){
return [
$this -> mergeArrays ( $cartObj , $ret ),
null ,
];
}
return [ $ret , null ];
}
}
$ret = $this -> convertSimpleXmlToArray ( $xml );
$retItem = $this -> convertSimpleXmlToArray ( $xml , null , false );
if ( is_array ( $ret )) {
if ( $merge ){
return [
$this -> mergeArrays ( $cartObj , $ret ),
$this -> mergeArrays ( $cartWithItemObj , $retItem ),
];
}
return [ $ret , $retItem ];
}
}
catch ( Exception $e ) {
}
if ( $merge ){
return [ $cartObj , $cartWithItemObj ];
}
return [ null , null ];
}
/**
* @ param array $from
* @ param array $to
*/
public function mergeArrays ( $from , $to )
{
$ret = $from ;
if ( is_array ( $to )) {
foreach ( $to as $key => $value ) {
if ( ! isset ( $ret [ $key ])) {
$ret [ $key ] = $value ;
continue ;
}
if ( is_array ( $value )) {
$ret [ $key ] = $this -> mergeArrays ( $ret [ $key ], $value );
continue ;
}
$ret [ $key ] = $value ;
}
}
return $ret ;
}
}