Ankündigung

Einklappen
Keine Ankündigung bisher.

Schnittstelle zwischen Amicron Faktura und modified Shop

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Schnittstelle zwischen Amicron Faktura und modified Shop

    Hallo,

    folgende Situation habe ich gerade:

    Unser modified Shop wurde wegen einem PHP Update auf 7.3 auf die Shopversion 2.05.0 upgedatet. Nun funktioniert die Schnittstelle von unserer Warenwirtschaft Amicron Faktura zum modified Shop nicht mehr vollständig. Es lässt sich der Bestellstatus im Shop von der Wawi nicht mehr ändern. Es erscheint folgende Fehlermeldung:

    statusfehler.jpg
    Der Import der Bestellungen aus dem Shop funktioniert reibungslos.
    Der Dienstleister, der das Update des Shops gemacht hat, hat sich bemüht, jedoch leider erfolglos. Am Ende wurde mir gesagt, dass im Shop alles ok ist und es an der Wawi liegt. Der Hersteller der Wawi sagt, dass er mit modified nicht mehr zusammenarbeitet und daher kein Support möglich ist. Ob das Verhalten beider Partner richtig ist, lass ich einfach mal unkommentiert. Ich stehe nun einfach mit diesem Problem da. Ich habe die Hoffnung, dass es hier jemanden gibt, der vielleicht eine Lösung hat. Noch eine Anmerkung. In der SQL Datenbank wurden die Tabellen von Einstellungen befreit, die außerhalb von UTF8 liegen. Wir können nur leider nicht mehr feststellen, wann der Bestellstatus von der Wawi nicht mehr geändert werden kann. Ob es nur am update oder an der Datenbankbereinigung (es wurden alle Tabellen auf UTF8 umgestellt) liegt wissen wir nicht mehr.

    Die Schnittstelle, die auf dem Server liegt, sieht so aus:

    PHP-Code:
    /* Beispiel fuer Useragent
    if (_SERVER["HTTP_USER_AGENT"]!='Amicron-Faktura') exit;
    */
    $action = (isset($_POST['action']) ? $_POST['action'] : $_GET['action']);
    if ($action == 'write_artikel' || $action == 'write_categorie' || $action == 'write_hersteller') {
    $post = array();
    $post = $_POST;
    }
    require('../includes/application_top_export.php');
    define('ENCODE_DEFAULT_CHARSET', 'ISO-8859-15');
    define('CHARSET', ENCODE_DEFAULT_CHARSET);


    // 18.11.05 NC: wird ab 3.0.4 in Image_Manipulator getestet
    define('_VALID_XTC', true);

    include(DIR_FS_DOCUMENT_ROOT . 'admin/includes/classes/' . IMAGE_MANIPULATOR);
    require_once(DIR_FS_INC . 'xtc_not_null.inc.php');
    require_once(DIR_FS_INC . 'xtc_redirect.inc.php');
    require_once(DIR_FS_INC . 'xtc_rand.inc.php');
    require_once(DIR_FS_INC . 'xtc_get_tax_rate.inc.php');
    require_once(DIR_FS_INC . 'xtc_href_link.inc.php');
    require_once(DIR_FS_INC . 'xtc_set_time_limit.inc.php');

    xtc_set_time_limit(0);

    // ACHTUNG: diese Zeilen werden benötigt, nichts ändern!
    $version_major = 4;
    $version_minor = 1;
    $datum = "Sep 2016";

    // error_reporting(E_WARNING);
    // rewrite values to use resample classes
    define('DIR_FS_CATALOG_IMAGES', DIR_FS_CATALOG . DIR_WS_IMAGES);
    define('DIR_FS_CATALOG_ORIGINAL_IMAGES', DIR_FS_CATALOG . DIR_WS_ORIGINAL_IMAGES);
    define('DIR_FS_CATALOG_INFO_IMAGES', DIR_FS_CATALOG . DIR_WS_INFO_IMAGES);
    define('DIR_FS_CATALOG_POPUP_IMAGES', DIR_FS_CATALOG . DIR_WS_POPUP_IMAGES);
    define('DIR_FS_CATALOG_THUMBNAIL_IMAGES', DIR_FS_CATALOG . DIR_WS_THUMBNAIL_IMAGES);
    define('DIR_FS_CATALOG_GALLERY_IMAGES', DIR_FS_CATALOG_IMAGES . 'product_images/gallery_images/');
    if (isset($_GET['NoHeader']) && $_GET['NoHeader'] != "Y") {
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // immer geaendert
    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
    header("Pragma: no-cache"); // HTTP/1.0
    if (isset($_GET['FullHeader']) && $_GET['FullHeader'] == "Y") {
    header("Content-type: text/xml");
    }
    }

    class upload {
    var $file, $filename, $destination, $permissions, $extensions, $tmp_filename;
    function upload($file = '', $destination = '', $permissions = '777', $extensions = '') {
    $this->set_file($file);
    $this->set_destination($destination);
    $this->set_permissions($permissions);
    $this->set_extensions($extensions);

    if (xtc_not_null($this->file) && xtc_not_null($this->destination)) {
    if (($this->parse() == true) && ($this->save() == true)) {
    return true;
    } else {
    return false;
    }
    }
    }

    function parse() {
    global $messageStack;
    if (isset($_FILES[$this->file])) {
    $file = array('name' => $_FILES[$this->file]['name'],
    'type' => $_FILES[$this->file]['type'],
    'size' => $_FILES[$this->file]['size'],
    'tmp_name' => $_FILES[$this->file]['tmp_name']);
    } elseif (isset($_FILES[$this->file])) {

    $file = array('name' => $_FILES[$this->file]['name'],
    'type' => $_FILES[$this->file]['type'],
    'size' => $_FILES[$this->file]['size'],
    'tmp_name' => $_FILES[$this->file]['tmp_name']);
    } else {
    $file = array('name' => $GLOBALS[$this->file . '_name'],
    'type' => $GLOBALS[$this->file . '_type'],
    'size' => $GLOBALS[$this->file . '_size'],
    'tmp_name' => $GLOBALS[$this->file]);
    }

    if (xtc_not_null($file['tmp_name']) && ($file['tmp_name'] != 'none') && is_uploaded_file($file['tmp_name'])) {
    if (sizeof($this->extensions) > 0) {
    if (!in_array(strtolower(substr($file['name'], strrpos($file['name'], '.') + 1)), $this->extensions)) {
    return false;
    }
    }

    $this->set_file($file);
    $this->set_filename($file['name']);
    $this->set_tmp_filename($file['tmp_name']);
    return $this->check_destination();
    } else {
    return false;
    }
    }

    function save() {
    global $messageStack;

    if (substr($this->destination, -1) != '/')
    $this->destination .= '/';

    // GDlib check
    if (!function_exists("imagecreatefromgif")) {

    // check if uploaded file = gif
    if ($this->destination == DIR_FS_CATALOG_ORIGINAL_IMAGES) {
    // check if merge image is defined .gif
    if (strstr(PRODUCT_IMAGE_THUMBNAIL_MERGE, '.gif') ||
    strstr(PRODUCT_IMAGE_INFO_MERGE, '.gif') ||
    strstr(PRODUCT_IMAGE_POPUP_MERGE, '.gif')) {
    return false;
    }
    if (strstr($this->filename, '.gif')) {
    return false;
    }
    }
    }

    if (move_uploaded_file($this->file['tmp_name'], $this->destination . $this->filename)) {
    chmod($this->destination . $this->filename, $this->permissions);
    return true;
    } else {
    return false;
    }
    }

    function set_file($file) {
    $this->file = $file;
    }

    function set_destination($destination) {
    $this->destination = $destination;
    }

    function set_permissions($permissions) {
    $this->permissions = octdec($permissions);
    }

    function set_filename($filename) {
    $this->filename = $filename;
    }

    function set_tmp_filename($filename) {
    $this->tmp_filename = $filename;
    }

    function set_extensions($extensions) {
    if (xtc_not_null($extensions)) {
    if (is_array($extensions)) {
    $this->extensions = $extensions;
    } else {
    $this->extensions = array($extensions);
    }
    } else {
    $this->extensions = array();
    }
    }

    function check_destination() {
    global $messageStack;

    if (!is_writeable($this->destination)) {
    if (is_dir($this->destination)) {

    } else {

    }
    return false;
    } else {
    return true;
    }
    }

    }

    function clear_string($value) {
    $string = str_replace("'", '', $value);
    $string = str_replace(')', '', $string);
    $string = str_replace('(', '', $string);
    $array = explode(',', $string);
    return $array;
    }

    // 26.10.2005 Bei GD<2.0 existiert die Funktion "ImageCreateTrueColor" noch
    // nicht, daher ein Workaround
    if (!function_exists('ImageCreateTrueColor')) {

    function ImageCreateTrueColor($new_x, $new_y) {
    return ImageCreate($new_x, $new_y);
    }
    }

    if (!function_exists('ImageCopyResampled')) {
    function ImageCopyResampled($dst_im, $src_im, $dstX, $dstY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH) {
    return ImageCopyResized($dst_im, $src_im, $dstX, $dstY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH);
    }
    }

    $action = xtc_db_prepare_input(isset($_POST['action']) ? $_POST['action'] : $_GET['action']);
    $user = xtc_db_prepare_input(isset($_POST['user']) ? $_POST['user'] : $_GET['user']);
    $password = xtc_db_prepare_input(isset($_POST['password']) ? $_POST['password'] : $_GET['password']);

    // Default-Sprache
    $LangID = 2;

    if (isset($_GET['Debug']) && $_GET['Debug'] == "Y") {
    ShowDebug();
    exit;
    }

    switch ($action) {
    // Versionsausgabe
    case 'read_version':
    ReadVersion();
    exit;

    case 'read_languages':
    if (CheckLogin($user, $password)) {
    ReadLanguages();
    }
    exit;

    case 'read_categories':
    if (CheckLogin($user, $password)) {
    ReadCategories();
    }
    exit;

    case 'write_artikel':
    if (CheckLogin($user, $password)) {
    WriteArtikel();
    }
    exit;

    case 'write_categorie':
    if (CheckLogin($user, $password)) {
    WriteCategorie();
    }
    exit;

    case 'read_artikel':
    if (CheckLogin($user, $password)) {
    ReadArtikel();
    }
    exit;

    case 'get_artikel_image':
    if (CheckLogin($user, $password)) {
    GetArtikelImage();
    }
    exit;

    case 'read_hersteller':
    if (CheckLogin($user, $password)) {
    ReadHersteller();
    }
    exit;

    case 'write_hersteller':
    if (CheckLogin($user, $password)) {
    WriteHersteller();
    }
    exit;

    case 'delete_artikel':
    if (CheckLogin($user, $password)) {
    DeleteArtikel();
    }
    exit;

    case 'order_update':
    if (CheckLogin($user, $password)) {
    OrderUpdate();
    }
    exit;

    case 'read_shopdata':
    if (CheckLogin($user, $password)) {
    ReadShopData();
    }
    exit;

    case 'orders_export':
    if (CheckLogin($user, $password)) {
    OrdersExport();
    }
    exit;

    default:
    ReadVersion();
    exit;
    } // switch

    function ShowDebug() {
    global $action, $version_major, $version_minor;

    echo "<DEBUG>\n";
    echo " <GetAction>$_GET[action]</GetAction>\n";
    echo " <PostAction>$_POST[action]</PostAction>\n";
    echo " <GetDaten>\n";
    foreach ($_GET as $Key => $Value) {
    echo " <$Key>$Value</$Key>\n";
    }
    echo " </GetDaten>\n";
    echo " <PostDaten>\n";
    foreach ($_POST as $Key => $Value) {
    echo " <$Key>$Value</$Key>\n";
    }
    echo " </PostDaten>\n";
    echo "</DEBUG>\n";
    }

    function ReadVersion() {
    global $action, $version_major, $version_minor, $datum;
    $ver = explode('.', PHP_VERSION);
    $shop = array('version' => ' < 2.0');
    $cmd = "select * from " . TABLE_DATABASE_VERSION;
    $query = xtc_db_query($cmd);
    if ($shop = xtc_db_fetch_array($query)) ;

    echo '<?xml version="1.0" encoding="' . CHARSET . '"?>' . "\n" .
    "<STATUS>\n" .
    " <STATUS_DATA>\n" .
    " <SCRIPT_VERSION_MAJOR>$version_major</SCRIPT_VERSION_MAJOR>\n" .
    " <SCRIPT_VERSION_MINOR>$version_minor</SCRIPT_VERSION_MINOR>\n" .
    " <SCRIPT_DEFAULTCHARSET>" . ENCODE_DEFAULT_CHARSET . "</SCRIPT_DEFAULTCHARSET>\n" .
    " <INFO>PHP:$ver[0].$ver[1] - {$shop['version']} - $datum</INFO>\n" .
    " </STATUS_DATA>\n" .
    "</STATUS>\n\n";
    } // Ende ReadVersion()

    function OrdersExport() {
    require (DIR_WS_CLASSES . 'order.php');
    $order_from = xtc_db_prepare_input($_GET['order_from']);
    $order_to = xtc_db_prepare_input($_GET['order_to']);
    $order_status = xtc_db_prepare_input($_GET['order_status']);

    echo '<?xml version="1.0" encoding="' . CHARSET . '"?>' . "\n" .
    '<ORDERS>' . "\n";

    if (!isset($order_status) && !isset($order_from)) {
    $order_status = 1;
    $sql = "and orders_status ='" . $order_status . "'";
    }
    if ($order_status != '') {
    $sql = "and orders_status ='" . $order_status . "'";
    }

    $orders_query = xtc_db_query("-- /admin/orders.php
    SELECT orders_id
    FROM " . TABLE_ORDERS .
    " WHERE orders_id >= '{$order_from}' $sql ");
    $order_exists = true;
    if (!xtc_db_num_rows($orders_query)) {
    $order_exists = false;
    echo "<info>Es existiert keine Bestellung; ab orders_id: $order_from ! </info>";
    }

    while ($order = xtc_db_fetch_array($orders_query)) {
    echo '<ORDER>' . "\n";
    $oID = $order['orders_id'];
    $order = new order($oID);
    $cmd = "SELECT c.countries_id from orders o, countries c "
    . "where o.orders_id = {$order->info['orders_id']} "
    . "and c.countries_iso_code_2 = o.delivery_country_iso_code_2";
    $query = xtc_db_query($cmd);
    if ($r = xtc_db_fetch_array($query)) {
    $cmd = "SELECT z.zone_country_id, z.zone_id, z.geo_zone_id from zones_to_geo_zones z, countries c "
    . "where z.zone_country_id = {$r['countries_id']}";
    $query = xtc_db_query($cmd);
    $res = xtc_db_fetch_array($query);
    $res['oID'] = $oID;
    }

    $shipping = get_shipping($order->info['shipping_class'], $order->info['language'], $res);
    $afpayment = get_payment($order->info['payment_class'], $order->info['language'], $res);

    foreach ($order->info as $key => $value) {
    if ($key == 'shipping_class' || $key == 'shipping_method')
    continue;
    if ($key == 'payment_class' || $key == 'payment_method')
    continue;
    echo " <$key>" . decode_utf8(encode_htmlspecialchars($value)) . "</$key>\n";
    }

    switch ($order->products[0]['allow_tax']) {
    case 0:
    if ($order->info['pp_tax'] > 0)
    echo " <tax_flag>N</tax_flag>\n";
    else
    echo " <tax_flag>0</tax_flag>\n";
    break;
    case 1:
    if ($order->info['pp_tax'] > 0)
    echo " <tax_flag>J</tax_flag>\n";
    if ($order->info['pp_tax'] == 0)
    echo " <tax_flag>0</tax_flag>\n";
    break;
    default:
    echo " <tax_flag>J</tax_flag>\n";
    break;
    }
    if ($tracking = get_tracking($order)) {
    echo " <tracking>\n" .
    " <carrier_name>{$tracking['carrier_name']}</carrier_name>\n" .
    " <parcel_id>{$tracking['parcel_id']}</parcel_id>\n" .
    " </tracking>\n";
    }

    echo " <products>\n";
    foreach ($order->products as $i) {
    echo " <product>\n";
    foreach ($i as $key => $value) {
    echo " <$key>" . decode_utf8(encode_htmlspecialchars($value)) . "</$key>\n";
    if ($key == 'attributes') {
    foreach ($value as $i => $attr) {
    echo " <option>\n" .
    " <products_options>" . decode_utf8($attr['products_options']) . "</products_options>\n" .
    // " <products_options_values>" . decode_utf8($attr['products_options_values']) . "</products_options_values>\n" .
    " <products_options_values>" . decode_utf8($attr['attributes_ean']) . "</products_options_values>\n" .
    " <products_options_model>" . decode_utf8($attr['attributes_model']) . "</products_options_model>\n" .
    " <products_options_price>" . $attr['price_prefix'] . ' ' . $attr['options_values_price'] . "</products_options_price>\n" .
    " </option>\n";
    }
    }
    }
    echo " </product>\n";
    }
    echo " </products>\n";
    echo " <customer>\n";
    foreach ($order->customer as $key => $value) {
    if ($key == 'gender') {
    if ($value == 'm') {
    echo " <anrede>Herrn</anrede>\n";
    continue;
    } elseif ($value == 'f') {
    echo " <anrede>Frau</anrede>\n";
    continue;
    } else {
    echo " <anrede></anrede>\n";
    continue;
    }
    }
    echo " <$key>" . decode_utf8(encode_htmlspecialchars($value)) . "</$key>\n";
    }
    echo " </customer>\n";
    /*
    echo " <billing>\n";
    foreach ($order->billing as $key => $value) {
    echo " <$key>".decode_utf8(encode_htmlspecialchars($val ue ))."</$key>\n";
    }
    echo " </billing>\n";
    */
    echo " <delivery>\n";
    foreach ($order->delivery as $key => $value) {
    if ($key == 'gender') {
    if ($value == 'm') {
    echo " <anrede>Herrn</anrede>\n";
    continue;
    } elseif ($value == 'f') {
    echo " <anrede>Frau</anrede>\n";
    continue;
    } else {
    echo " <anrede></anrede>\n";
    continue;
    }
    }
    echo " <$key>" . decode_utf8(encode_htmlspecialchars($value)) . "</$key>\n";
    }
    echo " </delivery>\n";
    if ($order->info['shipping_method']) {
    echo " <shipping>\n";
    foreach ($shipping as $key => $value) {
    echo " <$key>" . decode_utf8(encode_htmlspecialchars($value)) . "</$key> \n";
    }
    echo " </shipping>\n";
    }
    if ($order->info['payment_class']) {

    echo " <payment>\n";
    foreach ($afpayment as $key => $value) {
    echo " <$key>" . decode_utf8(encode_htmlspecialchars($value)) . "</$key>\n";
    }
    }
    echo " </payment>\n";
    if ($order->info['payment_class'] == 'banktransfer') {
    $sepa = get_sepa($payment_class, $res);
    echo " <sepa>\n";
    foreach ($sepa as $key => $value) {
    echo " <$key>" . decode_utf8(encode_htmlspecialchars($value)) . "</$key>\n";
    }
    echo " </sepa>\n";
    }
    echo " <totals>\n";

    if ((isset($order->info['pp_fee']) && $order->info['pp_fee'] <> 0) ||
    (isset($order->info['pp_gs']) && $order->info['pp_gs'] <> 0 ))
    get_tmodul_tax($order, $res);

    foreach ($order->totals as $i) {
    echo " <total>\n";
    foreach ($i as $key => $value) {
    echo " <$key>" . decode_utf8(encode_htmlspecialchars($value)) . "</$key>\n";
    }
    echo " </total>\n";
    }
    echo " </totals>\n";
    echo "</ORDER>\n";
    }
    echo '</ORDERS>' . "\n";
    }

    function OrderUpdate() {
    global $action, $version_major, $version_minor;
    require_once (DIR_FS_INC . 'xtc_php_mail.inc.php');
    require_once (DIR_FS_INC . 'get_tracking_link.inc.php');
    $post = array();
    $post = $_POST;

    $afOrderID = $post['Order_id'];
    $afStatus = $post['Status'];
    $afComments = '';
    if (isset($post['Sendungsdienstleister']) && isset($post['Sendungsnummer']) && !empty($post['Sendungsnummer'])) {
    $afCarrier = strtoupper($post['Sendungsdienstleister']);
    $afTrackNr = $post['Sendungsnummer'];
    }

    // initiate template engine for mail
    $smarty = new Smarty;
    //require (DIR_WS_CLASSES.'currencies.php');
    require (DIR_WS_CLASSES . 'order.php');
    $orders_query = xtc_db_query("-- /admin/orders.php
    SELECT orders_id
    FROM " . TABLE_ORDERS .
    " WHERE orders_id = $afOrderID");
    $order_exists = true;
    if (!xtc_db_num_rows($orders_query)) {
    $order_exists = false;
    $output = " <INFO>Bestellung mit der ID: $afOrderID konnte nicht gefunden werden</INFO>\n";
    }

    $order_select_fields = 'o.orders_id,o.customers_id,o.customers_name,
    o.customers_company,o.payment_method, o.shipping_method,
    o.shipping_class,o.last_modified,o.date_purchased,
    o.orders_status,o.currency,o.currency_value,
    o.afterbuy_success,o.afterbuy_id,o.language,
    o.delivery_country,o.delivery_country_iso_code_2
    ';
    // invoice number and date
    //include(DIR_WS_MODULES.'invoice_number/invoice_number_functions.php');
    //$order_select_fields = add_select_ibillnr($order_select_fields);

    if ($order = xtc_db_fetch_array($orders_query)) {
    $oID = $order['orders_id'];
    $order = new order($oID);

    if (isset($order) && is_object($order)) {
    $lang_query = xtc_db_query("SELECT languages_id, language_charset
    code,image
    FROM " . TABLE_LANGUAGES . "
    WHERE directory = '" . $order->info['language'] . "'");
    $lang_array = xtc_db_fetch_array($lang_query);
    $lang = $lang_array['languages_id'];
    $lang_code = $lang_array['code'];
    $lang_charset = $lang_array['language_charset'];
    }

    $orders_query_raw = "-- /admin/orders.php
    SELECT " . $order_select_fields . ",s.orders_status_name
    FROM " . TABLE_ORDERS . " o
    LEFT JOIN " . TABLE_ORDERS_STATUS . " s
    ON (o.orders_status = s.orders_status_id
    AND s.language_id = '" . (int) $lang . "')
    WHERE o.orders_id LIKE '%" . $oID . "%'
    ORDER BY o.orders_id DESC";
    $orders_query = xtc_db_query($orders_query_raw);
    // $order_exists = false;
    if (xtc_db_num_rows($orders_query) == 1) {
    // $order_exists = true;
    $oID_array = xtc_db_fetch_array($orders_query);
    $oID = $oID_array['orders_id'];
    }

    // track & trace
    if (isset($afCarrier) && isset($afTrackNr)) {
    $carriers = array();
    $carriers_query = xtc_db_query("SELECT carrier_id, carrier_name
    FROM " . TABLE_CARRIERS . "
    ORDER BY carrier_sort_order ASC");
    while ($carrier = xtc_db_fetch_array($carriers_query)) {
    if (isset($afCarrier) && isset($afTrackNr)) {
    if ($carrier['carrier_name'] == $afCarrier) {
    $carrier_id = xtc_db_prepare_input($carrier['carrier_id']);
    $parcel_id = xtc_db_prepare_input($afTrackNr);
    $sql_data_array = array('orders_id' => $oID,
    'carrier_id' => $carrier_id,
    'parcel_id' => $parcel_id);
    xtc_db_perform(TABLE_ORDERS_TRACKING, $sql_data_array);
    $trackID = xtc_db_insert_id();
    }
    }
    $carriers[] = array('id' => $carrier['carrier_id'], 'text' => $carrier['carrier_name']);
    }
    }

    $orders_statuses = array();
    $orders_status_array = array();
    $orders_status_query = xtc_db_query("SELECT orders_status_id, orders_status_name
    FROM " . TABLE_ORDERS_STATUS . "
    WHERE language_id = '" . $lang . "'
    ORDER BY sort_order");
    while ($orders_status = xtc_db_fetch_array($orders_status_query)) {
    $orders_statuses[] = array('id' => $orders_status['orders_status_id'], 'text' => $orders_status['orders_status_name']);
    $orders_status_array[$orders_status['orders_status_id']] = $orders_status['orders_status_name'];
    }

    // set dirs manual
    $smarty->caching = false;
    $smarty->template_dir = DIR_FS_CATALOG . 'templates';
    $smarty->compile_dir = DIR_FS_CATALOG . 'templates_c';
    $smarty->config_dir = DIR_FS_CATALOG . 'lang';
    $send_by_admin = true;
    $insert_id = $oID;
    // require_once(DIR_FS_CATALOG.DIR_WS_CLASSES.'xtcPri ce.php');
    require_once(DIR_FS_INC . 'xtc_href_link_from_admin.inc.php');
    // include (DIR_FS_CATALOG .'send_order.php');
    require_once (DIR_FS_CATALOG . 'lang/' . $order->info['language'] . '/admin/' . $order->info['language'] . '.php');
    $comments = xtc_db_prepare_input($afStatus);
    $order_updated = false;
    $customer_notified = 0;
    $gender_query = xtc_db_query("SELECT customers_gender
    FROM " . TABLE_CUSTOMERS . "
    WHERE customers_id = '" . $order->customer['id'] . "'");
    $gender_array = xtc_db_fetch_array($gender_query);
    $order->customer['gender'] = $gender_array['customers_gender'];

    if ($order->customer['gender'] == 'f') {
    $smarty->assign('GENDER', FEMALE);
    } elseif ($order->customer['gender'] == 'm') {
    $smarty->assign('GENDER', MALE);
    } else {
    $smarty->assign('GENDER', '');
    }
    $smarty->assign('LASTNAME', $order->customer['lastname'] != '' ? $order->customer['lastname'] : $order->customer['name']);
    $smarty->assign('order', $order);
    // $smarty->assign('order_data', $order->getOrderData($oID));
    $smarty->assign('tpl_path', DIR_WS_BASE . 'templates/' . CURRENT_TEMPLATE . '/');
    $smarty->assign('logo_path', HTTP_SERVER . DIR_WS_CATALOG . 'templates/' . CURRENT_TEMPLATE . '/img/');
    $smarty->assign('NAME', $order->customer['name']);
    $smarty->assign('ORDER_NR', $order->info['order_id']);
    $smarty->assign('ORDER_ID', $oID);
    // track & trace
    $tracking_array = get_tracking_link($oID, $lang_code, ((isset($afCarrier) && isset($afTrackNr)) ? array($trackID) : array('0')));
    $smarty->assign('PARCEL_COUNT', count($tracking_array));
    $smarty->assign('PARCEL_ARRAY', $tracking_array);
    $smarty->assign('ORDER_DATE', xtc_date_long($order->info['date_purchased']));
    //$smarty->assign('NOTIFY_COMMENTS', nl2br($notify_comments));
    $smarty->assign('NOTIFY_COMMENTS', nl2br($afComments));
    $smarty->assign('ORDER_STATUS', $orders_status_array[$afStatus]);
    // assign language
    $smarty->assign('language', $order->info['language']);

    // $smarty->template_dir = DIR_FS_CATALOG.'templates';
    // $smarty->compile_dir = DIR_FS_CATALOG.'templates_c';
    // $smarty->config_dir = DIR_FS_CATALOG.'lang';

    $html_mail = $smarty->fetch(CURRENT_TEMPLATE . '/admin/mail/' . $order->info['language'] . '/change_order_mail.html');
    $txt_mail = $smarty->fetch(CURRENT_TEMPLATE . '/admin/mail/' . $order->info['language'] . '/change_order_mail.txt');
    $order_subject_search = array('{$nr}', '{$date}', '{$lastname}', '{$firstname}');
    $order_subject_replace = array($oID, strftime(DATE_FORMAT_LONG), $order->customer['lastname'], $order->customer['firstname']);
    $order_subject = str_replace($order_subject_search, $order_subject_replace, EMAIL_BILLING_SUBJECT);

    //EMAIL PREVIEW
    include ('includes/modules/email_preview/email_preview.php');

    xtc_php_mail(EMAIL_BILLING_ADDRESS, EMAIL_BILLING_NAME, $order->customer['email_address'], $order->customer['name'], '', EMAIL_BILLING_REPLY_ADDRESS, EMAIL_BILLING_REPLY_ADDRESS_NAME, '', '', $order_subject, $html_mail, $txt_mail
    );

    $customer_notified = 1;
    $sql_data_array = array('orders_id' => $oID,
    'orders_status_id' => $afStatus,
    'date_added' => 'now()',
    'customer_notified' => $customer_notified,
    'comments' => '',
    'comments_sent' => 0
    );
    xtc_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);
    $sql_data = array('orders_status' => $afStatus, 'last_modified' => 'now()');
    xtc_db_perform(TABLE_ORDERS, $sql_data, 'update', "orders_id ='$oID'");
    $order_updated = true;
    }

    echo '<?xml version="1.0" encoding="' . CHARSET . '"?>' . "\n" .
    "<STATUS>\n" .
    " <STATUS_DATA>\n" .
    " <MESSAGE>OK</MESSAGE>\n";
    if (!$order_exists) {
    echo $output;
    }
    echo " <SCRIPT_VERSION_MAJOR>$version_major</SCRIPT_VERSION_MAJOR>\n" .
    " <SCRIPT_VERSION_MINOR>$version_minor</SCRIPT_VERSION_MINOR>\n" .
    " </STATUS_DATA>\n" .
    "</STATUS>\n\n";
    } // Ende OrderUpdate()

    function ReadLanguages() {
    global $action;
    echo '<?xml version="1.0" encoding="' . CHARSET . '"?>' . "\n"
    . "<LANGUAGES>\n";

    $cmd = "select languages_id,name,code from " . TABLE_LANGUAGES;
    $languages_query = xtc_db_query($cmd);
    while ($languages = xtc_db_fetch_array($languages_query)) {
    echo " <LANGUAGES_DATA>\n" .
    " <ID>$languages[languages_id]</ID>\n" .
    " <NAME>" . htmlspecialchars($languages["name"]) . "</NAME>\n" .
    " <CODE>" . htmlspecialchars($languages["code"]) . "</CODE>\n" .
    " </LANGUAGES_DATA>\n";
    }
    echo "</LANGUAGES>\n";
    }

    function ReadCategories() {
    global $action;

    echo '<?xml version="1.0" encoding="' . CHARSET . '"?>' . "\n" .
    "<CATEGORIES>\n";

    $cmd = "select categories_id, parent_id from " . TABLE_CATEGORIES .
    " order by parent_id, categories_id";

    $cat_query = xtc_db_query($cmd);
    while ($cat = xtc_db_fetch_array($cat_query)) {
    echo "<CATEGORIES_DATA>\n" .
    " <ID>$cat[categories_id]</ID>\n" .
    " <PARENT_ID>$cat[parent_id]</PARENT_ID>\n" .
    " <NAMES>\n";

    $cmd = "select language_id, categories_name from " . TABLE_CATEGORIES_DESCRIPTION .
    " where categories_id=" . $cat['categories_id'];
    $names_query = xtc_db_query($cmd);
    while ($names = xtc_db_fetch_array($names_query)) {
    echo " <NAMEENTRY>\n" .
    " <LANGUAGEID>$names[language_id]</LANGUAGEID>\n" .
    " <NAME>" . htmlspecialchars($names['categories_name']) . "</NAME>\n" .
    " </NAMEENTRY>\n";
    }

    echo " </NAMES>\n" .
    "</CATEGORIES_DATA>\n";
    }

    echo "</CATEGORIES>\n";
    } // Ende ReadCategories()

    function WriteArtikel() {
    global $action, $version_major, $version_minor, $LangID, $post;
    $btime = aftime();
    $ExportModus = xtc_db_prepare_input($post['ExportModus']);
    $Artikel_ID = (integer) (xtc_db_prepare_input($post['Artikel_ID']));
    $Hersteller_ID = (integer) ($post['Hersteller_ID']);
    $Artikel_Artikelnr = xtc_db_prepare_input($post['Artikel_Artikelnr']);
    $Artikel_Menge = xtc_db_prepare_input($post['Artikel_Menge']);
    $Artikel_Preis = xtc_db_prepare_input($post['Artikel_Preis']);
    $Artikel_Gewicht = xtc_db_prepare_input($post['Artikel_Gewicht']);
    $Artikel_Status = xtc_db_prepare_input($post['Artikel_Status']);
    $Artikel_Steuersatz = xtc_db_prepare_input($post['Artikel_Steuersatz']);
    $Artikel_Bilddatei = xtc_db_prepare_input($post['Artikel_Bilddatei']);
    $Artikel_EAN = xtc_db_prepare_input($post['Artikel_EAN']);
    $Artikel_Lieferstatus = (integer) (xtc_db_prepare_input($post['Artikel_Lieferstatus']));
    $Artikel_Startseite = (integer) (xtc_db_prepare_input($post['Artikel_Startseite']));
    $SkipImages = (bool) (xtc_db_prepare_input($post['SkipImages']));
    $sql_data_array = array();

    if (isset($post['Artikel_Lieferstatustext'])) {
    $Artikel_Lieferstatustext = xtc_db_prepare_input($post['Artikel_Lieferstatustext']);
    $cmd = "select shipping_status_id, language_id, shipping_status_name from " . TABLE_SHIPPING_STATUS . " where language_id = $LangID and shipping_status_name = '$Artikel_Lieferstatustext'";
    $shipping_time_query = xtc_db_query($cmd);
    $shipping_time = xtc_db_fetch_array($shipping_time_query);
    if (!$shipping_time) {
    $IDcmd = "SELECT shipping_status_id, language_id FROM " . TABLE_SHIPPING_STATUS . " where language_id = $LangID ORDER BY shipping_status_id DESC LIMIT 1";
    $lastID_query = xtc_db_query($IDcmd);
    $lastID = xtc_db_fetch_array($lastID_query);
    $statusID = $lastID['shipping_status_id'] + 1;
    $insert_shipping_status = array('shipping_status_id' => $statusID, 'language_id' => $LangID, 'shipping_status_name' => $Artikel_Lieferstatustext);
    xtc_db_perform(TABLE_SHIPPING_STATUS, $insert_shipping_status);
    $sql_data_array['products_shippingtime'] = $statusID;
    $Artikel_Lieferstatus = $sql_data_array['products_shippingtime'];
    } else {
    $sql_data_array['products_shippingtime'] = $shipping_time['shipping_status_id'];
    $Artikel_Lieferstatus = $sql_data_array['products_shippingtime'];
    }
    } else {
    $sql_data_array['products_shippingtime'] = $Artikel_Lieferstatus;
    }

    $Artikel_Kategorien = array();
    $i = 1;
    while (isset($post["Artikel_KategorieID{$i}"])) {
    $Artikel_Kategorien[$i] = (integer) (xtc_db_prepare_input($post["Artikel_KategorieID{$i}"]));
    $i++;
    }

    $Artikel_Texte = array();
    $i = 1;
    while (isset($post["Artikel_Bezeichnung{$i}"])) {
    $Artikel_Texte[$i] = array(
    'B' => xtc_db_prepare_input($post["Artikel_Bezeichnung{$i}"]),
    'T' => xtc_db_prepare_input($post["Artikel_Text{$i}"]),
    'S' => xtc_db_prepare_input($post["Artikel_Kurztext{$i}"]),
    'L' => (integer) (xtc_db_prepare_input($post["Artikel_TextLanguage{$i}"])),
    'MT' => xtc_db_prepare_input($post["Artikel_MetaTitle{$i}"]),
    'MD' => xtc_db_prepare_input($post["Artikel_MetaDescription{$i}"]),
    'MK' => xtc_db_prepare_input($post["Artikel_MetaKeywords{$i}"]),
    'URL' => xtc_db_prepare_input($post["Artikel_URL{$i}"]));
    $i++;
    }

    $Artikel_Preise = array();
    $i = 1;
    while (isset($post["Artikelpreise_Preis{$i}"])) {
    $Artikel_Preise[$i] = array(
    'P' => xtc_db_prepare_input($post["Artikelpreise_Preis{$i}"]),
    'G' => (integer) xtc_db_prepare_input($post["Artikelpreise_Gruppe{$i}"]),
    'M' => (integer) xtc_db_prepare_input($post["Artikelpreise_Menge{$i}"]));
    $i++;
    }

    $exists = FALSE;
    $mode = 'NONE';

    // if ($Artikel_ID == 0) {
    $cmd = "SELECT products_id, products_model FROM " . TABLE_PRODUCTS
    . " WHERE products_model = '" . $Artikel_Artikelnr
    . "' OR products_id = '" . $Artikel_ID . "'";
    $products_model_query = xtc_db_query($cmd);
    if ($products_model_query) {
    $products_model = xtc_db_fetch_array($products_model_query);
    if ($products_model) {
    $exists = TRUE;
    $mode = 'UPDATED';
    $Artikel_ID = $products_model['products_id'];
    } else {
    $exists = FALSE;
    $mode = 'INSERTED';
    }
    }

    // Artikel laden
    // if ($Artikel_ID !=0) {
    if ($exists) {
    $cmd = "select products_image from " . TABLE_PRODUCTS . " where products_id='$Artikel_ID'";
    $artikel_query = xtc_db_query($cmd);
    if ($artikel = xtc_db_fetch_array($artikel_query)) {
    $exists = TRUE;
    $Bilddatei = $artikel['products_image'];
    // Alte Bilder entfernen
    if (!$SkipImages && $ExportModus == 'Overwrite') {
    if ($Bilddatei != 'no_picture.gif' && $Bilddatei != '') {
    $cmd = "select count(*) as total from " . TABLE_PRODUCTS .
    " where products_image = '$Bilddatei'";
    $duplicate_image_query = xtc_db_query($cmd);
    $duplicate_image = xtc_db_fetch_array($duplicate_image_query);

    if ($duplicate_image['total'] < 2) {
    if (file_exists(DIR_FS_CATALOG_ORIGINAL_IMAGES . $Bilddatei)) {
    @unlink(DIR_FS_CATALOG_ORIGINAL_IMAGES . $Bilddatei);
    }
    if (file_exists(DIR_FS_CATALOG_THUMBNAIL_IMAGES . $Bilddatei)) {
    @unlink(DIR_FS_CATALOG_THUMBNAIL_IMAGES . $Bilddatei);
    }
    if (file_exists(DIR_FS_CATALOG_INFO_IMAGES . $Bilddatei)) {
    @unlink(DIR_FS_CATALOG_INFO_IMAGES . $Bilddatei);
    }
    if (file_exists(DIR_FS_CATALOG_POPUP_IMAGES . $Bilddatei)) {
    @unlink(DIR_FS_CATALOG_POPUP_IMAGES . $Bilddatei);
    }
    if (file_exists(DIR_FS_CATALOG_GALLERY_IMAGES . $Bilddatei)) {
    @unlink(DIR_FS_CATALOG_GALLERY_IMAGES . $Bilddatei);
    }

    $image_subdir = BIG_IMAGE_SUBDIR;
    if (substr($image_subdir, -1) != '/') {
    $image_subdir .= '/';
    }
    if (file_exists(DIR_FS_CATALOG_IMAGES . $image_subdir . $Bilddatei)) {
    @unlink(DIR_FS_CATALOG_IMAGES . $image_subdir . $Bilddatei);
    }
    }
    }

    $cmd = "select image_name from " . TABLE_PRODUCTS_IMAGES . " where products_id='$Artikel_ID'";
    $images_query = xtc_db_query($cmd);
    while ($images = xtc_db_fetch_array($images_query)) {
    $Bilddatei = $images['image_name'];
    if ($Bilddatei != 'no_picture.gif' && $Bilddatei != '') {
    $cmd = "select count(*) as total from " . TABLE_PRODUCTS_IMAGES .
    " where image_name = '$Bilddatei'";
    $duplicate_image_query = xtc_db_query($cmd);
    $duplicate_image = xtc_db_fetch_array($duplicate_image_query);

    if ($duplicate_image['total'] < 2) {
    if (file_exists(DIR_FS_CATALOG_ORIGINAL_IMAGES . $Bilddatei)) {
    @unlink(DIR_FS_CATALOG_ORIGINAL_IMAGES . $Bilddatei);
    }
    if (file_exists(DIR_FS_CATALOG_THUMBNAIL_IMAGES . $Bilddatei)) {
    @unlink(DIR_FS_CATALOG_THUMBNAIL_IMAGES . $Bilddatei);
    }
    if (file_exists(DIR_FS_CATALOG_INFO_IMAGES . $Bilddatei)) {
    @unlink(DIR_FS_CATALOG_INFO_IMAGES . $Bilddatei);
    }
    if (file_exists(DIR_FS_CATALOG_POPUP_IMAGES . $Bilddatei)) {
    @unlink(DIR_FS_CATALOG_POPUP_IMAGES . $Bilddatei);
    }
    if (file_exists(DIR_FS_CATALOG_GALLERY_IMAGES . $Bilddatei)) {
    @unlink(DIR_FS_CATALOG_GALLERY_IMAGES . $Bilddatei);
    }

    $image_subdir = BIG_IMAGE_SUBDIR;
    if (substr($image_subdir, -1) != '/') {
    $image_subdir .= '/';
    }
    if (file_exists(DIR_FS_CATALOG_IMAGES . $image_subdir . $Bilddatei)) {
    @unlink(DIR_FS_CATALOG_IMAGES . $image_subdir . $Bilddatei);
    }
    }
    }
    }

    xtc_db_query("delete from " . TABLE_PRODUCTS_IMAGES . " where products_id = '$Artikel_ID'");
    }
    } else {
    $exists = FALSE;
    }
    }

    // sofern es kein Datensatz gibt, oder er ueberschrieben werden kann, weitermachen
    if (!$exists || $ExportModus != 'NoOverwrite') {

    // Array nur komplett fuellen, wenn ein Insert oder ein Komplettes Update
    // durchgefuehrt wird (und nicht nur der Preis)
    if (!$exists || $ExportModus == 'Overwrite') {
    $sql_data_array = array(
    'products_id' => $Artikel_ID,
    'products_quantity' => $Artikel_Menge,
    'products_shippingtime' => $Artikel_Lieferstatus,
    'products_model' => $Artikel_Artikelnr,
    'products_price' => $Artikel_Preis,
    'products_weight' => $Artikel_Gewicht,
    'products_ean' => $Artikel_EAN,
    'products_status' => $Artikel_Status,
    'products_tax_class_id' => $Artikel_Steuersatz,
    'products_startpage' => $Artikel_Startseite,
    'manufacturers_id' => $Hersteller_ID);

    if (!$SkipImages) {
    $sql_data_array['products_image'] = $Artikel_Bilddatei;
    }

    if (isset($post['Artikel_VPEValue'])) {
    $sql_data_array['products_vpe_status'] = 1;
    $sql_data_array['products_vpe_value'] = xtc_db_prepare_input($post['Artikel_VPEValue']);
    }

    if (isset($post['Artikel_Grundeinheit']) && isset($post['Artikel_Masseinheit'])) {
    $vpe_name = xtc_db_prepare_input($post['Artikel_Grundeinheit']) . ' ' . xtc_db_prepare_input($post['Artikel_Masseinheit']);
    $vpe_id = 0;
    foreach ($Artikel_Texte as $i => $AText) {
    if ($AText['L'] <> 0) {
    $cmd = "select products_vpe_id from " . TABLE_PRODUCTS_VPE . " where products_vpe_name='" . $vpe_name . "' and " .
    "language_id='" . $AText['L'] . "'";
    $vpe_query = xtc_db_query($cmd);
    if ($vpe = xtc_db_fetch_array($vpe_query)) {
    $vpe_id = $vpe['products_vpe_id'];
    } else {
    if ($vpe_id == 0) {
    $cmd = "select max(products_vpe_id) vpemax from " . TABLE_PRODUCTS_VPE;
    $vpemax_query = xtc_db_query($cmd);
    $vpemax = xtc_db_fetch_array($vpemax_query);
    $vpe_id = $vpemax['vpemax'] + 1;
    }

    $vpe_data = array(
    'products_vpe_id' => $vpe_id,
    'products_vpe_name' => $vpe_name,
    'language_id' => $AText['L']);
    xtc_db_perform(TABLE_PRODUCTS_VPE, $vpe_data);
    }
    }
    }
    $sql_data_array['products_vpe'] = $vpe_id;
    }
    } else {
    if ($ExportModus == 'PriceOnly') {
    // nur der Preis wird geaendert
    $sql_data_array = array(
    'products_price' => $Artikel_Preis);
    }
    if ($ExportModus == 'QuantityOnly') {
    // nur die Menge wird geaendert
    $sql_data_array = array(
    'products_quantity' => $Artikel_Menge);
    }
    if ($ExportModus == 'PriceAndQuantityOnly') {
    // nur der Preis und die Menge wird geaendert
    $sql_data_array = array(
    'products_quantity' => $Artikel_Menge,
    'products_price' => $Artikel_Preis);
    }
    }
    if (!$exists) { // Neuanlage (ID wird an Amicron-Faktura zurueckgegeben !!!)
    $mode = 'INSERTED';
    $insert_sql_data = array('products_date_added' => $btime);
    $sql_data_array = array_merge($sql_data_array, $insert_sql_data);
    xtc_db_perform(TABLE_PRODUCTS, $sql_data_array);
    $Artikel_ID = xtc_db_insert_id();
    } elseif ($exists || ($ExportModus == 'Overwrite')) { //Update
    $mode = 'UPDATED';
    $update_sql_data = array('products_last_modified' => $btime);
    $sql_data_array = array_merge($sql_data_array, $update_sql_data);
    xtc_db_perform(TABLE_PRODUCTS, $sql_data_array, 'update', "products_id = '$Artikel_ID'");
    }

    // Details nur beschreiben, wenn Uebermodus oder Datensatz nicht da ist
    if (!$exists || $ExportModus == 'Overwrite') {
    foreach ($Artikel_Texte as $i => $AText) {
    if ($AText['L'] <> 0) {
    $sql_data_array = array(
    'products_name' => $AText['B'],
    'products_description' => $AText['T'],
    'products_short_description' => $AText['S'],
    'products_meta_title' => $AText['MT'],
    'products_meta_description' => $AText['MD'],
    'products_meta_keywords' => $AText['MK'],
    'products_url' => $AText['URL']);

    // Bestehende Daten laden
    $cmd = "select products_id from " . TABLE_PRODUCTS_DESCRIPTION .
    " where products_id='$Artikel_ID' and language_id='" . $AText['L'] . "'";

    $desc_query = xtc_db_query($cmd);
    if ($desc = xtc_db_fetch_array($desc_query)) {
    xtc_db_perform(TABLE_PRODUCTS_DESCRIPTION, $sql_data_array, 'update', "products_id ='$Artikel_ID' and language_id = '" . $AText['L'] . "'");
    } else {
    $sql_data_array['products_id'] = $Artikel_ID;
    $sql_data_array['language_id'] = $AText['L'];
    xtc_db_perform(TABLE_PRODUCTS_DESCRIPTION, $sql_data_array);
    }
    }
    }

    // Kategorien eintragen, alte Kategorien vorher entfernen
    if (count($Artikel_Kategorien) > 0) {
    $cmd = "delete from " . TABLE_PRODUCTS_TO_CATEGORIES . " where " . "products_id=$Artikel_ID";
    xtc_db_query($cmd);

    foreach ($Artikel_Kategorien as $i => $Kategorie_ID) {
    $insert_sql_data = array(
    'products_id' => $Artikel_ID,
    'categories_id' => $Kategorie_ID);
    xtc_db_perform(TABLE_PRODUCTS_TO_CATEGORIES, $insert_sql_data);
    }
    }

    // Bilder laden
    if (!$SkipImages) {
    if (isset($post['Artikel_Bilddatei'])) {
    $products_image = new upload('artikel_image');
    $products_image->set_destination(DIR_FS_CATALOG . DIR_WS_ORIGINAL_IMAGES);
    if ($products_image->parse()) {
    $products_image->save();
    }
    $products_image_name = $products_image->filename;

    if (file_exists(DIR_FS_CATALOG_GALLERY_IMAGES)) {

    require(DIR_FS_DOCUMENT_ROOT . 'admin/includes/product_gallery_images.php');
    }
    // generate resampled images
    require(DIR_FS_DOCUMENT_ROOT . 'admin/includes/product_thumbnail_images.php');
    require(DIR_FS_DOCUMENT_ROOT . 'admin/includes/product_info_images.php');
    require(DIR_FS_DOCUMENT_ROOT . 'admin/includes/product_popup_images.php');
    }

    if (isset($post['Artikel_Bilddateien'])) {
    for ($i = 0; $i < (integer) ($post['Artikel_Bilddateien']); $i++) {
    $products_image = new upload("artikel_images$i");
    $products_image->set_destination(DIR_FS_CATALOG . DIR_WS_ORIGINAL_IMAGES);
    if ($products_image->parse()) {
    $products_image->save();
    }
    $products_image_name = $products_image->filename;

    if (file_exists(DIR_FS_CATALOG_GALLERY_IMAGES)) {

    require(DIR_FS_DOCUMENT_ROOT . 'admin/includes/product_gallery_images.php');
    }

    // generate resampled images
    require(DIR_FS_DOCUMENT_ROOT . 'admin/includes/product_thumbnail_images.php');
    require(DIR_FS_DOCUMENT_ROOT . 'admin/includes/product_info_images.php');
    require(DIR_FS_DOCUMENT_ROOT . 'admin/includes/product_popup_images.php');

    $insert_sql_data = array(
    'products_id' => $Artikel_ID,
    'image_nr' => $i + 1, // ab 1
    'image_name' => $products_image_name);
    xtc_db_perform(TABLE_PRODUCTS_IMAGES, $insert_sql_data);
    }
    }
    } // Bilder laden
    } // Overwrite
    } // NoOverwrite

    if (!$exists || $ExportModus == 'Overwrite' || $ExportModus == 'PriceOnly' || $ExportModus == 'PriceAndQuantityOnly') {
    $cmd = "select distinct(customers_status_id) from " . TABLE_CUSTOMERS_STATUS;
    $ss_query = xtc_db_query($cmd);
    while ($ss = xtc_db_fetch_array($ss_query)) {
    xtc_db_query("delete from " . TABLE_PERSONAL_OFFERS_BY . $ss['customers_status_id'] . " where products_id = '$Artikel_ID'");
    }
    foreach ($Artikel_Preise as $i => $APreis) {
    $sql_data_array = array(
    'products_id' => $Artikel_ID,
    'quantity' => $APreis['M'],
    'personal_offer' => $APreis['P']);

    xtc_db_perform(TABLE_PERSONAL_OFFERS_BY . $APreis['G'], $sql_data_array);
    }
    }

    echo '<?xml version="1.0" encoding="' . CHARSET . '"?>' . "\n" .
    "<STATUS>\n" .
    " <STATUS_DATA>\n" .
    " <MESSAGE>OK</MESSAGE>\n" .
    " <MODE>$mode</MODE>\n" .
    " <ID>$Artikel_ID</ID>\n" .
    " <SCRIPT_VERSION_MAJOR>$version_major</SCRIPT_VERSION_MAJOR>\n" .
    " <SCRIPT_VERSION_MINOR>$version_minor</SCRIPT_VERSION_MINOR>\n" .
    " </STATUS_DATA>\n" .
    "</STATUS>\n\n";
    } // Ende WriteArtikel()

    function xtc_remove_product($product_id) {
    global $LangID;

    $product_image_query = xtc_db_query("select products_image from " . TABLE_PRODUCTS . " where products_id = '" . xtc_db_input($product_id) . "'");
    $product_image = xtc_db_fetch_array($product_image_query);

    $duplicate_image_query = xtc_db_query("select count(*) as total from " . TABLE_PRODUCTS . " where products_image = '" . xtc_db_input($product_image['products_image']) . "'");
    $duplicate_image = xtc_db_fetch_array($duplicate_image_query);

    if ($duplicate_image['total'] < 2) {
    if (file_exists(DIR_FS_CATALOG_POPUP_IMAGES . $product_image['products_image'])) {
    @unlink(DIR_FS_CATALOG_POPUP_IMAGES . $product_image['products_image']);
    }
    // START CHANGES
    $image_subdir = BIG_IMAGE_SUBDIR;
    if (substr($image_subdir, -1) != '/')
    $image_subdir .= '/';
    if (file_exists(DIR_FS_CATALOG_IMAGES . $image_subdir . $product_image['products_image'])) {
    @unlink(DIR_FS_CATALOG_IMAGES . $image_subdir . $product_image['products_image']);
    }
    // END CHANGES
    }

    xtc_db_query("delete from " . TABLE_SPECIALS . " where products_id = '" . xtc_db_input($product_id) . "'");
    xtc_db_query("delete from " . TABLE_PRODUCTS . " where products_id = '" . xtc_db_input($product_id) . "'");
    xtc_db_query("delete from " . TABLE_PRODUCTS_TO_CATEGORIES . " where products_id = '" . xtc_db_input($product_id) . "'");
    xtc_db_query("delete from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . xtc_db_input($product_id) . "'");
    xtc_db_query("delete from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id = '" . xtc_db_input($product_id) . "'");
    xtc_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where products_id = '" . xtc_db_input($product_id) . "'");
    xtc_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where products_id = '" . xtc_db_input($product_id) . "'");

    // get statuses
    $customers_statuses_array = array(array());
    $customers_statuses_query = xtc_db_query("select * from " . TABLE_CUSTOMERS_STATUS . " where language_id = '" . $LangID . "' order by customers_status_id");
    while ($customers_statuses = xtc_db_fetch_array($customers_statuses_query)) {
    $customers_statuses_array[] = array('id' => $customers_statuses['customers_status_id'],
    'text' => $customers_statuses['customers_status_name']);
    }
    for ($i = 0, $n = sizeof($customers_statuses_array); $i < $n; $i++) {
    xtc_db_query("delete from personal_offers_by_customers_status_" . $i . " where products_id = '" . xtc_db_input($product_id) . "'");
    }

    $product_reviews_query = xtc_db_query("select reviews_id from " . TABLE_REVIEWS . " where products_id = '" . xtc_db_input($product_id) . "'");
    while ($product_reviews = xtc_db_fetch_array($product_reviews_query)) {
    xtc_db_query("delete from " . TABLE_REVIEWS_DESCRIPTION . " where reviews_id = '" . $product_reviews['reviews_id'] . "'");
    }
    xtc_db_query("delete from " . TABLE_REVIEWS . " where products_id = '" . xtc_db_input($product_id) . "'");
    } // Ende xtc_remove Product()

    function DeleteArtikel() {
    global $action, $version_major, $version_minor;
    $Artikel_ID = (integer) (xtc_db_prepare_input($_POST['Artikel_ID']));
    // xtc_db_query("delete from " . TABLE_PRODUCTS_TO_CATEGORIES .
    // " where products_id='" . $Artikel_ID . "'");

    xtc_remove_product($Artikel_ID);

    echo '<?xml version="1.0" encoding="' . CHARSET . '"?>' . "\n" .
    "<STATUS>\n" .
    " <STATUS_DATA>\n" .
    " <MESSAGE>OK</MESSAGE>\n" .
    " <SCRIPT_VERSION_MAJOR>$version_major</SCRIPT_VERSION_MAJOR>\n" .
    " <SCRIPT_VERSION_MINOR>$version_minor</SCRIPT_VERSION_MINOR>\n" .
    " </STATUS_DATA>\n" .
    "</STATUS>\n\n";
    } // Ende DeleteArtikel()

    function WriteCategorie() {
    global $action, $version_major, $version_minor, $post;
    $btime = aftime();

    $Kategorie_ID = (integer) ($post['Artikel_Kategorie_ID']);
    $Kategorie_Vater_ID = (integer) (xtc_db_prepare_input($post['Kategorie_Vater_ID']));

    $Kategorie_Names = array(
    1 => array(
    'N' => xtc_db_prepare_input($post['Kategorie_Name1']),
    'L' => (integer) (xtc_db_prepare_input($post['Kategorie_NameLanguage1']))),
    2 => array(
    'N' => xtc_db_prepare_input($post['Kategorie_Name2']),
    'L' => (integer) (xtc_db_prepare_input($post['Kategorie_NameLanguage2']))),
    3 => array(
    'N' => xtc_db_prepare_input($post['Kategorie_Name3']),
    'L' => (integer) (xtc_db_prepare_input($post['Kategorie_NameLanguage3']))),
    4 => array(
    'N' => xtc_db_prepare_input($post['Kategorie_Name4']),
    'L' => (integer) (xtc_db_prepare_input($post['Kategorie_NameLanguage4'])))
    );

    $exists = FALSE;

    if ($Kategorie_ID != 0) {
    $cmd = "select categories_id from " . TABLE_CATEGORIES . " where categories_id='" . $Kategorie_ID . "'";
    $cat_query = xtc_db_query($cmd);
    if ($cat = xtc_db_fetch_array($cat_query)) {
    $exists = TRUE;
    }
    }

    if (!$exists) {
    // Kategorie erzeugen und ID ermitteln
    $insert_sql_data = array('parent_id' => $Kategorie_Vater_ID,
    'categories_status' => 1,
    'date_added' => $btime,
    'categories_template' => 'default',
    'listing_template' => 'default',
    'products_sorting' => 'p.products_price',
    'products_sorting2' => 'ASC'
    );
    xtc_db_perform(TABLE_CATEGORIES, $insert_sql_data);
    $Kategorie_ID = xtc_db_insert_id();
    }

    // Dateinamen aus der ID und der ueberlieferten Extension zusammensetzen, sofern Bild mitgeliefert
    // wird
    if (isset($post['Kategorie_Bildextension'])) {
    $Kategorie_Bildextension = xtc_db_prepare_input($post['Kategorie_Bildextension']);
    $filename = "cat" . $Kategorie_ID . $Kategorie_Bildextension;
    $categories_image = new upload('Kategorie_image');
    $categories_image->set_destination(DIR_FS_CATALOG . DIR_WS_IMAGES . 'categories/');
    if ($categories_image->parse()) {
    $categories_image->set_filename($filename);
    $categories_image->save();
    }

    $sql_data_array = array('categories_image' => $filename);
    xtc_db_perform(TABLE_CATEGORIES, $sql_data_array, 'update', "categories_id='$Kategorie_ID'");
    }

    // Namen eintragen
    foreach ($Kategorie_Names as $i => $KName) {
    if ($KName['L'] <> 0) {
    // Bestehende Daten pruefen
    $cmd = "select categories_id from " . TABLE_CATEGORIES_DESCRIPTION .
    " where categories_id='$Kategorie_ID' and language_id='" . $KName['L'] . "'";

    $desc_query = xtc_db_query($cmd);
    $text = htmlspecialchars($KName['N']);
    if ($desc = xtc_db_fetch_array($desc_query)) {
    $sql_data_array = array('categories_name' => $KName['N']);

    xtc_db_perform(TABLE_CATEGORIES_DESCRIPTION, $sql_data_array, 'update', "categories_id='$Kategorie_ID' and language_id = '" . $KName['L'] . "'");
    } else {
    $sql_data_array = array('categories_id' => $Kategorie_ID,
    'language_id' => $KName['L'],
    'categories_name' => $KName['N'],
    'categories_heading_title' => $KName['N']
    );
    xtc_db_perform(TABLE_CATEGORIES_DESCRIPTION, $sql_data_array);
    }
    }
    }

    echo '<?xml version="1.0" encoding="' . CHARSET . '"?>' . "\n" .
    "<STATUS>\n" .
    " <STATUS_DATA>\n" .
    " <MESSAGE>OK</MESSAGE>\n" .
    " <ID>$Kategorie_ID</ID>\n" .
    " <SCRIPT_VERSION_MAJOR>$version_major</SCRIPT_VERSION_MAJOR>\n" .
    " <SCRIPT_VERSION_MINOR>$version_minor</SCRIPT_VERSION_MINOR>\n" .
    " </STATUS_DATA>\n" .
    "</STATUS>\n\n";
    } // Ende writeCategory()

    function ReadArtikel() {
    global $action, $LangID;
    $SkipImages = (bool) (xtc_db_prepare_input($_GET['SkipImages']));
    $cmd = "select * from " . TABLE_PRODUCTS;

    if (isset($_GET['AbDatum'])) {
    $cmd .= " where products_last_modified>='" . (xtc_db_prepare_input($_GET['AbDatum'])) . "'";
    }

    $HasLimit = (isset($_GET['LimitOffset']) && isset($_GET['LimitRowCount']));
    if ($HasLimit) {
    $cmd .= " limit " . (integer) (xtc_db_prepare_input($_GET['LimitOffset'])) . ', ' .
    (integer) (xtc_db_prepare_input($_GET['LimitRowCount']));
    }

    echo '<?xml version="1.0" encoding="' . CHARSET . '"?>' . "\n" .
    "<ARTIKEL";
    if ($HasLimit) {
    echo ' WithLimit="True"';
    }
    echo ">\n";
    $artikel_query = xtc_db_query($cmd);

    while ($artikel = xtc_db_fetch_array($artikel_query)) {
    // Bild auslesen, wenn vorhanden
    $bildname = $artikel['products_image'];
    $bild = '';
    if ($bildname != '' && !$SkipImages && file_exists(DIR_FS_CATALOG . DIR_WS_ORIGINAL_IMAGES . $bildname) && $bildname != 'no_picture.gif') {
    $bild = @implode("", @file(DIR_FS_CATALOG . DIR_WS_ORIGINAL_IMAGES . $bildname));
    }

    echo "<ARTIKEL_DATA>\n" .
    " <ID>$artikel[products_id]</ID>\n" .
    " <ARTIKELNR>" . (htmlspecialchars($artikel['products_model'])) . "</ARTIKELNR>\n" .
    " <TEXTE>\n";

    $cmd = "select language_id, products_name, products_description, products_short_description, products_meta_title," .
    " products_meta_description, products_meta_keywords, products_url from " . TABLE_PRODUCTS_DESCRIPTION .
    " where products_id=" . $artikel['products_id'];
    $texte_query = xtc_db_query($cmd);
    while ($texte = xtc_db_fetch_array($texte_query)) {
    echo " <TEXT>\n" .
    " <LANGUAGEID>$texte[language_id]</LANGUAGEID>\n" .
    " <NAME>" . htmlspecialchars($texte['products_name']) . "</NAME>\n" .
    " <DESCRIPTION>" . encode_htmlspecialchars($texte['products_description']) . "</DESCRIPTION>\n" .
    " <SHORTDESCRIPTION>" . encode_htmlspecialchars($texte['products_short_description']) . "</SHORTDESCRIPTION>\n" .
    " <METATITLE>" . htmlspecialchars($texte['products_meta_title']) . "</METATITLE>\n" .
    " <METADESCRIPTION>" . htmlspecialchars($texte['products_meta_description']) . "</METADESCRIPTION>\n" .
    " <METAKEYWORDS>" . htmlspecialchars($texte['products_meta_keywords']) . "</METAKEYWORDS>\n" .
    " <URL>" . htmlspecialchars($texte['products_url']) . "</URL>\n" .
    " </TEXT>\n";
    }

    echo " </TEXTE>\n" .
    " <PREISE>\n";
    $cmd = "select distinct(customers_status_id) from " . TABLE_CUSTOMERS_STATUS;
    $ss_query = xtc_db_query($cmd);
    while ($ss = xtc_db_fetch_array($ss_query)) {
    $cmd = "select quantity, personal_offer from " . TABLE_PERSONAL_OFFERS_BY . $ss['customers_status_id'] .
    " where products_id=" . $artikel['products_id'];
    $preise_query = xtc_db_query($cmd);
    while ($preise = xtc_db_fetch_array($preise_query)) {
    echo " <PREIS>\n" .
    " <GRUPPE>$ss[customers_status_id]</GRUPPE>\n" .
    " <MENGE>" . $preise['quantity'] . "</MENGE>\n" .
    " <PREIS>$preise[personal_offer]</PREIS>\n" .
    " </PREIS>\n";
    }
    }
    echo " </PREISE>\n" .
    " <GEWICHT>$artikel[products_weight]</GEWICHT>\n" .
    " <EAN>" . $artikel['products_ean'] . "</EAN>\n" .
    " <PREIS>$artikel[products_price]</PREIS>\n" .
    " <MENGE>$artikel[products_quantity]</MENGE>\n" .
    " <STATUS>$artikel[products_status]</STATUS>\n" .
    " <STEUERSATZ>$artikel[products_tax_class_id]</STEUERSATZ>\n" .
    " <HERSTELLER_ID>$artikel[manufacturers_id]</HERSTELLER_ID>\n" .
    " <KATEGORIEN>\n";
    $cmd = "select categories_id from " . TABLE_PRODUCTS_TO_CATEGORIES . " where products_id = $artikel[products_id]";
    $cat_query = xtc_db_query($cmd);
    while ($cat = xtc_db_fetch_array($cat_query)) {
    echo " <KATEGORIE>$cat[categories_id]</KATEGORIE>\n";
    }
    echo " </KATEGORIEN>\n" .
    " <BILDDATEI>" . htmlspecialchars($artikel['products_image']) . "</BILDDATEI>\n" .
    " <BILD>" . base64_encode($bild) . "</BILD>\n" .
    " <IMAGES>\n";
    $lastbild = $bild;
    if (!$SkipImages) {
    $cmd = "select image_name from " . TABLE_PRODUCTS_IMAGES .
    " where products_id=" . $artikel['products_id'];
    $images_query = xtc_db_query($cmd);
    while ($images = xtc_db_fetch_array($images_query)) {
    $bildname = $images['image_name'];
    $bild = '';
    if ($bildname != '' && file_exists(DIR_FS_CATALOG . DIR_WS_ORIGINAL_IMAGES . $bildname) && $bildname != 'no_picture.gif') {
    $bild = @implode("", @file(DIR_FS_CATALOG . DIR_WS_ORIGINAL_IMAGES . $bildname));
    }

    if ($bild != $lastbild) {
    echo " <IMAGE>\n" .
    " <NAME>" . htmlspecialchars($bildname) . "</NAME>\n" .
    " <BILD>" . base64_encode($bild) . "</BILD>\n" .
    " </IMAGE>\n";
    $lastbild = $bild;
    }
    }
    }

    echo " </IMAGES>\n";
    $cmd = "select shipping_status_name from " . TABLE_SHIPPING_STATUS . ", " . TABLE_PRODUCTS
    . " where shipping_status_id = products_shippingtime"
    . " AND products_id = $artikel[products_id] "
    . "AND language_id = $LangID";
    $shipping_time_query = xtc_db_query($cmd);
    $shipping_time = xtc_db_fetch_array($shipping_time_query);
    echo " <LIEFERSTATUSTEXT>" . htmlspecialchars($shipping_time['shipping_status_name']) . "</LIEFERSTATUSTEXT>\n" .
    " <STARTSEITE>$artikel[products_startpage]</STARTSEITE>\n";

    if ($artikel['products_vpe_status'] == 1) {
    echo " <VPEValue>$artikel[products_vpe_value]</VPEValue>";
    }

    if ($artikel['products_vpe'] != 0) {
    $cmd = "select products_vpe_name from " . TABLE_PRODUCTS_VPE . " where products_vpe_id='" . $artikel['products_vpe'] . "'";
    $vpe_query = xtc_db_query($cmd);
    if ($vpe = xtc_db_fetch_array($vpe_query)) {
    echo " <VPEName>" . htmlspecialchars($vpe['products_vpe_name']) . "</VPEName>";
    }
    }
    echo "</ARTIKEL_DATA>\n";
    }
    echo "</ARTIKEL>\n";
    } // Ende ReadArtikel()

    function ReadShopData() {
    global $action, $LangID;
    echo '<?xml version="1.0" encoding="' . CHARSET . '"?>' . "\n" .
    "<SHOPDATA>\n" .
    " <TAXRATES>\n";

    $cmd = "select tax_class_id,tax_rate from " . TABLE_TAX_RATES . " WHERE tax_zone_id =5";
    $tax_query = xtc_db_query($cmd);
    while ($tax = xtc_db_fetch_array($tax_query)) {
    echo " <TAX>\n" .
    " <ID>$tax[tax_class_id]</ID>\n" .
    " <RATE>$tax[tax_rate]</RATE>\n" .
    " </TAX>\n";
    }
    echo " </TAXRATES>\n" .
    "<SHIPPINGSTATUS>\n";
    $cmd = "select shipping_status_id, language_id, shipping_status_name from " . TABLE_SHIPPING_STATUS . " WHERE language_id = '2'";
    $ss_query = xtc_db_query($cmd);
    while ($ss = xtc_db_fetch_array($ss_query)) {
    echo " <SHIPPINGSTATUS_DATA>\n" .
    " <ID>$ss[shipping_status_id]</ID>\n" .
    " <LANGUAGEID>$ss[language_id]</LANGUAGEID>\n" .
    " <NAME>" . htmlspecialchars($ss['shipping_status_name']) . "</NAME>\n" .
    " </SHIPPINGSTATUS_DATA>\n";
    }
    echo "</SHIPPINGSTATUS>\n" .
    "<CUSTOMERSSTATUS>\n";

    $cmd = "select customers_status_id, language_id, customers_status_name from " . TABLE_CUSTOMERS_STATUS . " WHERE language_id = '2'";
    $ss_query = xtc_db_query($cmd);
    while ($ss = xtc_db_fetch_array($ss_query)) {
    echo " <CUSTOMERSSTATUS_DATA>\n" .
    " <ID>$ss[customers_status_id]</ID>\n" .
    " <LANGUAGEID>$ss[language_id]</LANGUAGEID>\n" .
    " <NAME>" . htmlspecialchars($ss['customers_status_name']) . "</NAME>\n" .
    " </CUSTOMERSSTATUS_DATA>\n";
    }
    echo "</CUSTOMERSSTATUS>\n" .
    "</SHOPDATA>\n";
    } // Ende ReadShopData()

    function ReadHersteller() {
    global $action;

    echo '<?xml version="1.0" encoding="' . CHARSET . '"?>' . "\n" .
    "<MANUFACTURERS>\n";

    $cmd = "select manufacturers_id,manufacturers_name from " . TABLE_MANUFACTURERS;
    $manufacturers_query = xtc_db_query($cmd);
    while ($manufacturers = xtc_db_fetch_array($manufacturers_query)) {
    echo " <MANUFACTURERS_DATA>\n" .
    " <ID>$manufacturers[manufacturers_id]</ID>\n" .
    " <NAME>" . htmlspecialchars($manufacturers["manufacturers_name"]) . "</NAME>\n" .
    " </MANUFACTURERS_DATA>\n";
    }

    echo "</MANUFACTURERS>\n";
    } // EndeReadHersteller()

    function WriteHersteller() {
    global $action, $version_major, $version_minor, $post;
    $btime = aftime();
    $Hersteller_Name = xtc_db_prepare_input($post['Hersteller_Name']);
    $cmd = "select manufacturers_id,manufacturers_name from " . TABLE_MANUFACTURERS .
    " where manufacturers_name='$Hersteller_Name'";
    $manufacturers_query = xtc_db_query($cmd);
    if ($manufacturers = xtc_db_fetch_array($manufacturers_query)) {
    $Hersteller_ID = $manufacturers['manufacturers_id'];
    } else {
    $insert_sql_data = array('manufacturers_name' => $Hersteller_Name,
    'date_added' => $btime);
    xtc_db_perform(TABLE_MANUFACTURERS, $insert_sql_data);
    $Hersteller_ID = xtc_db_insert_id();
    }

    echo '<?xml version="1.0" encoding="' . CHARSET . '"?>' . "\n" .
    "<STATUS>\n" .
    " <STATUS_DATA>\n" .
    " <MESSAGE>OK</MESSAGE>\n" .
    " <ID>$Hersteller_ID</ID>\n" .
    " <SCRIPT_VERSION_MAJOR>$version_major</SCRIPT_VERSION_MAJOR>\n" .
    " <SCRIPT_VERSION_MINOR>$version_minor</SCRIPT_VERSION_MINOR>\n" .
    " </STATUS_DATA>\n" .
    "</STATUS>\n\n";
    } // Ende WriteHersteller()

    //county code abfragen CJ
    function xtc_get_county_code($country_name) {
    $zone_query = xtc_db_query("select zone_code from " . TABLE_ZONES . " where zone_name = '" . $country_name . "'");
    $zone = xtc_db_fetch_array($zone_query);
    return $zone['zone_code'];
    } // Ende xtc_get_county_code()

    function aftime() {
    return date('Y-m-d H:i:s', time());
    } // Ende aftime

    function get_tmodul_tax($order, $res) {
    $module = array(array('name' => 'ot_cod_fee', 'prefix' => '0'),
    array('name' => 'ot_loworderfee', 'prefix' => '0'),
    array('name' => 'ot_ps_fee', 'prefix' => '0'),
    array('name' => 'ot_coupon', 'prefix' => '0'),
    array('name' => 'ot_gv', 'prefix' => '0')
    );

    foreach ($order->totals as $key => $value) {
    $k = array_search($value['class'], array_column($module, 'name'));
    if (is_numeric($k)) {
    if (file_exists(DIR_WS_MODULES . 'order_total/' . $value['class'] . '.php')) {
    require_once (DIR_WS_MODULES . 'order_total/' . $value['class'] . '.php');
    }
    $total_name = str_replace('ot_', '', $value['class']);
    $mTaxRate = xtc_get_tax_rate(constant(strtoupper('MODULE_ORDER _TOTAL_' . $total_name . '_TAX_CLASS')), $res['zone_country_id'], $res['geo_zone_id']);
    $order->totals[$key]['tax'] = $mTaxRate;
    $order->totals[$key]['prefix'] = $module[$k]['prefix'];
    unset($k);
    }
    }
    return $order->totals;
    } // Ende get_tmodul_tax()

    function get_shipping($shipping_class, $language, $res) {
    $shipping_class_array = explode('_', $shipping_class);
    $shipping_class = $shipping_class_array[0];
    $shipping_method = $shipping_class;

    if (file_exists(DIR_FS_CATALOG . 'lang/' . $language . '/modules/shipping/' . $shipping_class . '.php')) {
    include(DIR_FS_CATALOG . 'lang/' . $language . '/modules/shipping/' . $shipping_class . '.php');
    $shipping_method = constant(strtoupper('MODULE_SHIPPING_' . $shipping_class . '_TEXT_TITLE'));
    // MODULE_SHIPPING_FLAT_TAX_CLASS
    $cmd = "select * from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_" . $shipping_class . "_TAX_CLASS'";
    $shipping_query = xtc_db_query($cmd);

    if ($shipping = xtc_db_fetch_array($shipping_query)) {
    $shipping_tax_class = $shipping['configuration_value'];
    $tax_rate = xtc_get_tax_rate(constant(strtoupper('MODULE_SHIPP ING_' . $shipping_class . '_TAX_CLASS')), $res['zone_country_id'], $res['geo_zone_id']);
    }
    $shipping_array = array('class' => $shipping_class,
    'method' => $shipping_method,
    'tax_rate' => $tax_rate
    );
    }
    return $shipping_array;
    } // Ende get_shipping()

    function get_sepa($payment_method, $res) {
    $cmd = "select * from banktransfer where orders_id = {$res['oID']}";
    $query = xtc_db_query($cmd);

    if ($pbanktr = xtc_db_fetch_array($query)) {
    $payment_array = array('banktransfer_owner' => $pbanktr['banktransfer_owner'],
    'banktransfer_bankname' => $pbanktr['banktransfer_bankname'],
    'banktransfer_iban' => $pbanktr['banktransfer_iban'],
    'banktransfer_bic' => $pbanktr['banktransfer_bic']
    );
    return $payment_array;
    }
    } // Ende get_sepa()

    function get_payment($payment_method, $language, $res) {
    $payment_array = array();
    $payment_class = $payment_method;

    if (file_exists(DIR_FS_CATALOG . 'lang/' . $language . '/modules/payment/' . $payment_method . '.php')) {
    require_once (DIR_FS_CATALOG . 'lang/' . $language . '/modules/payment/' . $payment_method . '.php');
    $payment_method = constant(strtoupper('MODULE_PAYMENT_' . $payment_class . '_TEXT_TITLE'));
    if ($payment_class == 'cod') {
    $payment_class = 'cod_fee';
    }

    if (substr($payment_class, 0, 6) == 'paypal') {
    $cmd = "select * from paypal_ipn "
    . "where orders_id = '{$res['oID']}'";
    $query = xtc_db_query($cmd);
    if ($ppaypal = xtc_db_fetch_array($query)) {
    $payment_array['transaction_id'] = $ppaypal['transaction_id'];
    $payment_array['payment_status'] = $ppaypal['payment_status'];
    }
    }

    $payment_array['method'] = $payment_method;
    $payment_array['class'] = $payment_class;
    //'code' => $code
    }
    return $payment_array;
    } // Ende get_payment()

    function get_tracking($order) {
    $oID = $order->info['orders_id'];
    $cmd = "Select max(ot.tracking_id) as tracking_id, ot.orders_id, ot.parcel_id, c.carrier_name from " . TABLE_ORDERS_TRACKING . " ot, " . TABLE_CARRIERS . " c "
    . "where ot.carrier_id = c.carrier_id and ot.orders_id = '{$oID}'";
    $query = xtc_db_query($cmd);
    $res = xtc_db_fetch_array($query);
    if (!$res['tracking_id']) {
    return false;
    } else {
    $order->tracking = array();
    $order->tracking['carrier_name'] = $res['carrier_name'];
    $order->tracking['parcel_id'] = $res['parcel_id'];
    return $order->tracking;
    }
    } // Ende get_tracking()

    function CheckLogin($user, $password) {
    require_once (DIR_FS_INC . 'xtc_validate_password.inc.php');
    require_once(DIR_FS_INC . 'xtc_not_null.inc.php');
    $ok = FALSE;
    $check_customer_query = xtc_db_query('SELECT customers_id,customers_password,customers_email_ad dress
    FROM ' . TABLE_CUSTOMERS . '
    WHERE customers_email_address = "' . xtc_db_input($user) . '"
    AND customers_status = 0');

    $check_customer = xtc_db_fetch_array($check_customer_query);

    if (!xtc_validate_password(xtc_db_input($password), $check_customer['customers_password'], $check_customer['customers_id'])) {
    die('Login Anfrage fehlgeschlagen');
    echo "\nZugriff verweigert. E-Mail und/oder Passwort falsch!";
    } else {
    $ok = TRUE;
    return $ok;
    }
    } // Ende CheckLogin()

    ?>

  • #2
    Liest sich eher nach einem Jobangebot, wenn du willst, dass dir jemand das repariert.

    Kommentar


    • #3
      Das wäre auch ok!

      Kommentar


      • #4
        MOD: Verschoben von PHP-Einsteiger

        Kommentar


        • #5
          Der CodeBlock ist echt sehr sehr nervig zu scrollen, kann man den nicht löschen lullifatz ?

          Kommentar


          • #6
            Ich dachte, dass dieser benötigt wird!?

            Kommentar


            • #7
              Ich habe es geändert. Vielleicht ist das so besser?

              Kommentar


              • #8
                Zitat von lullifatz Beitrag anzeigen
                Ich dachte, dass dieser benötigt wird!?
                Kann ich dir nicht sagen, der eintrag im logfile, welcner mit dem 500er zusammenhängt ist da wohl wesentlich aufschlussreicher.
                Und ja, es ist viel angenehmer )

                Kommentar


                • #9
                  Das liest sich wie sehr, sehr, sehr (sehr!) alter PHP Code. Wundert mich, dass da überhaupt noch was funktioniert. Aber wie Vorposter schon schrieben, musst du mal rausfinden, was genau den Serverfehler 500 auslöst. Am besten du schaust dir auch mal an, welchen Request deine WaWi da eigentlich raushaut.

                  Kommentar


                  • #10
                    Und im Shop mal ins ErrorLog schauen, da sollte dann auch genaueres dazu stehen.
                    The string "()()" is not palindrom but the String "())(" is.

                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | Kein Support per PN

                    Kommentar


                    • #11
                      alxy
                      Hallo, was meinst Du mit
                      welchen Request deine WaWi da eigentlich raushaut.
                      ?
                      hausl
                      Ich habe die Log Dateien im Shop gelöscht und den Fehler provoziert. Es werden zwei Logdateien geschrieben. In der ersten Datei steht:

                      PHP-Code:
                      [2020-03-03 14:14:37]    [warning]    [modified]    [pid:8889]    Use of undefined constant DIR_FS_LANGUAGES assumed 'DIR_FS_LANGUAGES' (this will throw an Error in a future version of PHPin File: /pages/f3/6a/d0013499/home/htdocs/fee/lang/german/admin/german.php on Line48    {}    {}
                      [
                      2020-03-03 14:14:37]    [warning]    [modified]    [pid:8889]    Backtrace #0 - /pages/f3/6a/d0013499/home/htdocs/fee/export/af12_xtscript.php called at Line 659    {}    {}
                      [2020-03-03 14:14:37]    [warning]    [modified]    [pid:8889]    Backtrace #1 - /pages/f3/6a/d0013499/home/htdocs/fee/export/af12_xtscript.php called at Line 305    {}    {}
                      [2020-03-03 14:14:37]    [warning]    [modified]    [pid:8889]    include(includes/modules/email_preview/email_preview.php): failed to open streamNo such file or directory in File: /pages/f3/6a/d0013499/home/htdocs/fee/export/af12_xtscript.php on Line706    {}    {}
                      [
                      2020-03-03 14:14:37]    [warning]    [modified]    [pid:8889]    include(): Failed opening 'includes/modules/email_preview/email_preview.php' for inclusion (include_path='.:/usr/share/php73/PEAR'in File: /pages/f3/6a/d0013499/home/htdocs/fee/export/af12_xtscript.php on Line706    {}    {}
                      [
                      2020-03-03 14:14:37]    [warning]    [modified]    [pid:8889]    Use of undefined constant CONTENT_CONDITIONS assumed 'CONTENT_CONDITIONS' (this will throw an Error in a future version of PHPin File: /pages/f3/6a/d0013499/home/htdocs/fee/inc/xtc_php_mail.inc.php on Line211    {}    {}
                      [
                      2020-03-03 14:14:37]    [warning]    [modified]    [pid:8889]    Backtrace #0 - /pages/f3/6a/d0013499/home/htdocs/fee/export/af12_xtscript.php called at Line 708    {}    {}
                      [2020-03-03 14:14:37]    [warning]    [modified]    [pid:8889]    Backtrace #1 - /pages/f3/6a/d0013499/home/htdocs/fee/export/af12_xtscript.php called at Line 305    {}    {} 
                      und in der zweiten Datei:

                      PHP-Code:
                      [2020-03-03 14:14:37]    [notice]    [modified]    [pid:8889]    Constant ENCODE_DEFAULT_CHARSET already defined in File: /pages/f3/6a/d0013499/home/htdocs/fee/export/af12_xtscript.php on Line36    {}    {}
                      [
                      2020-03-03 14:14:37]    [notice]    [modified]    [pid:8889]    Undefined variable_SESSION in File: /pages/f3/6a/d0013499/home/htdocs/fee/includes/classes/order.php on Line126    {}    {}
                      [
                      2020-03-03 14:14:37]    [notice]    [modified]    [pid:8889]    Backtrace #0 - /pages/f3/6a/d0013499/home/htdocs/fee/export/af12_xtscript.php called at Line 587    {}    {}
                      [2020-03-03 14:14:37]    [notice]    [modified]    [pid:8889]    Backtrace #1 - /pages/f3/6a/d0013499/home/htdocs/fee/export/af12_xtscript.php called at Line 305    {}    {}
                      [2020-03-03 14:14:37]    [notice]    [modified]    [pid:8889]    Undefined indexlanguage_charset in File: /pages/f3/6a/d0013499/home/htdocs/fee/export/af12_xtscript.php on Line597    {}    {}
                      [
                      2020-03-03 14:14:37]    [notice]    [modified]    [pid:8889]    Undefined variable_SESSION in File: /pages/f3/6a/d0013499/home/htdocs/fee/includes/classes/main.php on Line25    {}    {}
                      [
                      2020-03-03 14:14:37]    [notice]    [modified]    [pid:8889]    Backtrace #0 - /pages/f3/6a/d0013499/home/htdocs/fee/inc/xtc_php_mail.inc.php called at Line 40    {}    {}
                      [2020-03-03 14:14:37]    [notice]    [modified]    [pid:8889]    Backtrace #1 - /pages/f3/6a/d0013499/home/htdocs/fee/export/af12_xtscript.php called at Line 708    {}    {}
                      [2020-03-03 14:14:37]    [notice]    [modified]    [pid:8889]    Backtrace #2 - /pages/f3/6a/d0013499/home/htdocs/fee/export/af12_xtscript.php called at Line 305    {}    {} 
                      Die Datei af12_xtscript.php ist die Schnittstelle.

                      Kommentar


                      • #12
                        Die Datei scheint nicht mehr kompatibel mit der neuen Version des Shops zu seien. Dateien fehlen (wurden umbenannt), Variablen/Konstanten heißen anders, ...
                        Mit dem Request meine ich, dass du mal schauen sollst, welchen Request deine WaWi an den Shop sendet. POST/GET, welche Parameter werden übergeben, welche Header? Evtl. hast du dann die Chance, die Schnittstelle entsprechend anzupassen oder neu zu programmieren. Mal eine Frage: Funktioniert der Import der Bestellungen mit dem selben Skript? Kann ich ja fast gar nicht glauben.

                        Kommentar


                        • #13
                          Wie kann ich den rausfinden welchen Request meine WaWi an den Shop sendet?

                          Kommentar

                          Lädt...
                          X