explode /// shop to date 7 /// 08.12.2009 Rabattsperre hinzugefügt /// 11.12.2009 Rabattcoupons hinzugefügt /// 23.01.2010 Rechnungsnummer hinzugefügt /// 24.01.2010 Payment Kosten und Rabatte eingebaut /// 08.02.2010 SQL Connektor Version Ausgabe geändert /// 09.02.2010 Payment Kosten und Rabatte an com Interface angepasst /// 22.02.2010 bill und order prefix hinzugefügt /// 25.03.2010 Rechnungserstellung bei Statuswechsel /// 21.07.2010 bill und order prefix verbessert /// 04.08.2010 Email Versand verbessert, Methode für Rechnungsabruf/-erstellung /// 05.08.2010 Bei nicht Auftragsgebundener-Email Zugriff auf Auftrag verhindert /// 07.08.2010 Banfelder längern angepasst. /// 09.08.2010 pdf_creation /// 13.08.2010 expected_date formatieren /// 16.08.2010 Action test hinzugefügt /// 23.11.2010 null werte bei bill_dte /// ////////////////////////////////////////////////////////////////////////////////////////// ///<23.01.2010/7.0.2.7/> define('ROOT', './'); define('ASSETS', ROOT.'assets/'); require(ASSETS.'s2diconf.php'); define('WEBSERVICE_ACCESS', true); define('WEBSERVICE_PATH', ASSETS); define('HTTP_URL', CC_SITE_HTTPURL); define('ROOT_PATH', ROOT); require(CC_WEBSERVICE_X2DWS); require(CC_WEBSERVICE_XMLPARSER); require(CC_INCLUDE_INIT); define('SECRET_KEY', CC_SITE_ENCRYPTIONKEY); $tables = array( 'coupons', 'coupondefs', 'templates', 'emails', 'orders', 'clients', 'stock', 'affiliate', ); // Webserviceobjekt anlegen define('SERVICE_VERSION', '1.0'); $x2dws = new x2dws(SERVICE_VERSION); $x2dws->handle(array('service', 'tabula_rasa', 'dbinfo', 'scriptdiag', 'version', 'identify', 'list_tables', 'lock', 'unlock', 'get_lock', 'reset_templates')); $xml = new xmldata($x2dws->get_data()); switch($x2dws->get_action()) { // Service Test, benötigt keinen request body case 'service': $x2dws->add_line('shop2date6 service layer working'); break; case 'test': $x2dws->add_line($xml->get('test', CHECK_ALL)); break; case 'identify': $result = $dbms->sql_query("SELECT config_value FROM ".TABLE_PREFIX."config WHERE config_key = 'timestamp'"); $row = $dbms->sql_fetch_row($result); $x2dws->add_node('dbcreated', $row->config_value); break; case 'version': $x2dws->add_node('scriptversion', VERSION); $x2dws->add_node('sqlversion', TABLES_CHANGE_ID.'.'.MORE_SQL_COUNT); $x2dws->add_node('debug', DEBUG ? 1 : 0); $x2dws->add_node('paymentlog', LOG_PAYMENT ? 1 : 0); $x2dws->add_node('protectdisclog', LOG_PROTECTDISC ? 1 : 0); $x2dws->add_node('paymentsandbox', PAYMENT_TESTMODE ? 1 : 0); $result = $dbms->sql_query("SELECT config_value FROM ".TABLE_PREFIX."config WHERE config_key = 'timestamp'"); $row = $dbms->sql_fetch_row($result); $x2dws->add_node('dbcreated', $row->config_value); break; case 'scriptdiag': foreach(array(ROOT, ASSETS) as $dir) foreach(array(CC_SITE_SCRIPTEXTENSION, 'sql') as $ext) foreach(glob($dir.'*.'.$ext) as $file) { $x2dws->open_node('script'); $contents = file_get_contents($file); $x2dws->add_node('file', $file); if(preg_match('/\/\/<(.*?)\/(.*?)\/(.*?)>/', $contents, $parts)) { $date = $parts[1]; $version = $parts[2]; $info = $parts[3]; $x2dws->add_node('date', $date); $x2dws->add_node('version', $version); $x2dws->add_node('info', $info); } $x2dws->close_node(); } break; // Modus Datensatz auslesen, benötigt keinen request body case 'dbinfo': $client = new client(); $x2dws->add_node('clients', $client->db_numrows(array('order_id' => 0))); $order = new order(); $x2dws->add_node('orders', $order->db_numrows()); break; // Gesamte Tabellen löschen, benötigt keinen request body case 'tabula_rasa': $result = $dbms->sql_query($dbms->sql_tables()); while ($row = $dbms->sql_fetch_array($result)) $tablenames[] = $row[0]; if (isset($tablenames)) $dbms->drop_tables($tablenames); break; // Tabelle leeren case 'purge_table': $xml->check_nodes(array('table'), true); $dbms->sql_query("DELETE FROM ".TABLE_PREFIX.$xml->get('table', $tables)); // Bei Aufträgen zugehörige Kundendaten mitlöschen if ($xml->get('table', $tables) == 'orders') $dbms->sql_query("DELETE FROM ".TABLE_PREFIX."clients where order_id != 0"); break; case 'reset_templates': // Tabelle leeren $dbms->sql_query('DELETE FROM '.TABLE_PREFIX.'templates'); // Vorlagen Definitionen einlesen, parsen und in DB einfügen $active = false; $set = array(); foreach(file(CC_INCLUDE_OSTEMPLATES) as $line) { $line = trim($line); if (strlen($line)) { if (preg_match("/^\[Email-Templates\]$/", $line)) $active = true; else if (preg_match("/^\[.*\]$/", $line)) break; else if ($active && preg_match("/^([a-z0-9]+)=(.*)$/", $line, $found)) { $identifier_found = false; foreach(array('name', 'subject', 'body', 'status') as $key) { if ($found[1] == $key) { if (isset($set[$key])) $x2dws->error_response('Error in file '.CC_INCLUDE_OSTEMPLATES.', dublicate identifier "'.$found[1].'".'); $set[$key] = $found[2]; $identifier_found = true; break; } } if (!$identifier_found) $x2dws->error_response('Error in file '.CC_INCLUDE_OSTEMPLATES.', unknown identifier "'.$found[1].'".'); if (count($set) == 4) { $sql = "INSERT INTO ".TABLE_PREFIX."templates (id, name, subject, body, status) values (null, '".$dbms->escape_string($set['name'])."', '".$dbms->escape_string($set['subject'])."', '".$set['body']."', ".($set['status'] ? "'".$set['status']."'" : 'null').");"; $dbms->sql_query($sql); $set = array(); } } else if (!preg_match("/^;/", $line, $found)) $x2dws->error_response('Error in file '.CC_INCLUDE_OSTEMPLATES.', unknown command "'.$line.'".'); } } break; //////////////////////////////////////////////////////////////////////////// change_ids // change_id zu einer object_id abrufen case 'get_change_id': $xml->check_nodes(array('type', 'id'), true); $class = $xml->get('type', array('client', 'order')); $id = $class."_id"; $object = new $class($xml->get('id', CHECK_NUMREQ)); if (!$object->$id) $x2dws->error_response("No such $class"); $x2dws->open_node($class); $x2dws->add_node('change_id', $object->change_id); $x2dws->close_node(); break; // Mehrere change_ids ab einer bestimmten abrufen case 'get_change_ids': $xml->check_nodes(array('type', 'firstid', 'limit'), true); $class = $xml->get('type', array('client', 'order')); $object = new $class(); $id = $class."_id"; $field = array(); $deleted = array(); while($row = $object->db_get( array($id, 'change_id'), array('change_id >= '.$xml->get('firstid', CHECK_NUMREQ)), array('change_id ASC'), 1, $xml->get('limit', CHECK_NUMREQ) )) if ($row->$id >= 0) $field[$row->change_id] = $row->$id; // Gelöschte Kunden und Aufträge if ($class == 'client' || $class == 'order') { $deleted_ids = new abstractdb(TABLE_DELETED); while($row = $deleted_ids->db_get( array($id, 'change_id'), array('change_id >= '.$xml->get('firstid', CHECK_NUMREQ), "$id is not null"), array('change_id ASC'), 1, $xml->get('limit', CHECK_NUMREQ) )) { $field[$row->change_id] = $row->$id; ksort($field); while(count($field) > $xml->get('limit', CHECK_NUMREQ)) array_pop($field); } } foreach($field as $change_id => $myid) { $x2dws->open_node($class); $x2dws->add_node($id, $myid); $x2dws->add_node('change_id', $change_id); if (isset($deleted[$change_id])) $x2dws->add_node('deleted', '1'); $x2dws->close_node(); } break; //////////////////////////////////////////////////////////////////////////// Kunden und Bestellungen // Kunde oder Bestellung abrufen case 'get_objects': $xml->check_nodes(array('type', 'objects'), true); // Kunde if ($xml->get('type', array('client', 'order')) == 'client') { $xml->deeper('objects'); $xml->check_nodes(array('object'), true); $xml->deeper('object'); $x2dws->open_node('clients'); do { $client = new client($id = $xml->get('id', CHECK_NUMREQ)); if (!$client->client_id) { $deleted_ids = new abstractdb(TABLE_DELETED); if ($deleted = $deleted_ids->get(array('change_id'), array('client_id' => $id))) { $x2dws->open_node('client'); $x2dws->add_node('client_id', $id); $x2dws->add_node('change_id', $deleted->change_id); $x2dws->add_node('deleted', 1); $x2dws->close_node('client'); } else $x2dws->error_response('No such client'); } else { $x2dws->open_node('client'); $x2dws->add_node('client_id', $client->client_id); $x2dws->add_node('change_id', $client->change_id); $x2dws->add_node('email', $client->email); $x2dws->add_node('password', $client->password); $x2dws->add_node('salutation', $client->salutation); $x2dws->add_node('firstname', $client->firstname); $x2dws->add_node('lastname', $client->lastname); $x2dws->add_node('company', $client->company); $x2dws->add_node('street', $client->street); $x2dws->add_node('streetnumber', $client->streetnumber); $x2dws->add_node('zip', $client->zip); $x2dws->add_node('city', $client->city); $x2dws->add_node('country', $client->country); $x2dws->add_node('phone', $client->phone); $x2dws->add_node('cellphone', $client->cellphone); $x2dws->add_node('fax', $client->fax); $x2dws->add_node('custom1', $client->custom1); $x2dws->add_node('custom2', $client->custom2); $x2dws->add_node('custom3', $client->custom3); $x2dws->add_node('custom4', $client->custom4); $x2dws->add_node('custom5', $client->custom5); $x2dws->add_node('newsletter', $client->newsletter); $x2dws->add_node('reliability', $client->reliability); $x2dws->add_node('novat', $client->novat); $x2dws->add_node('rebate_amount', $client->rebate_amount); $x2dws->add_node('rebate_absolute', $client->rebate_absolute); $x2dws->add_node('daystopayment', $client->daystopayment); $x2dws->close_node(); } } while ($xml->next_child()); $x2dws->close_node(); // Bestellung } else { $xml->deeper('objects'); $xml->check_nodes(array('object'), true); $xml->deeper('object'); $x2dws->open_node('orders'); do { $order = new order($id = $xml->get('id', CHECK_NUMREQ)); if (!$order->order_date) { $deleted_ids = new abstractdb(TABLE_DELETED); if ($deleted = $deleted_ids->get(array('change_id'), array('order_id' => $id))) { $x2dws->open_node('order'); $x2dws->add_node('order_id', $id); $x2dws->add_node('change_id', $deleted->change_id); $x2dws->add_node('deleted', 1); $x2dws->close_node('order'); } else $x2dws->error_response('No such order'); } else { $x2dws->open_node('order'); $x2dws->add_node('order_id', $order->order_id); $x2dws->add_node('change_id', $order->change_id); $x2dws->add_node('order_date', $order->order_date); $x2dws->add_node('order_time', $order->order_time); $x2dws->add_node('order_prefix', $order->order_id_prefix); $x2dws->add_node('bill_id', $order->bill_id); $x2dws->add_node('bill_date', $order->bill_date); $x2dws->add_node('bill_prefix', $order->bill_id_prefix); $x2dws->add_node('b2b', $order->b2b); $x2dws->add_node('currency', $order->currency); $x2dws->add_node('sumrebate_amount', $order->sumrebate_amount); $x2dws->add_node('sumrebate_absolute', $order->sumrebate_absolute); $x2dws->add_node('couponrebate_amount', $order->couponrebate_amount); $x2dws->add_node('couponrebate_absolute', $order->couponrebate_absolute); $x2dws->add_node('coupon_id', $order->coupon_id); $x2dws->add_node('coupon_caption', $order->coupon_caption); $x2dws->add_node('shipping_caption', $order->shipping_caption); $x2dws->add_node('shipping_cost', $order->shipping_cost); $x2dws->add_node('shipping_vat', $order->shipping_vat); $x2dws->add_node('shipping_trackingurl', $order->shipping_trackingurl); $x2dws->add_node('payment_cost', $order->payment_amount); $x2dws->add_node('payment_cost_absolute', $order->payment_absolute); $x2dws->add_node('payment_rebate', $order->paymentrebate_amount); $x2dws->add_node('payment_rebate_absolute', $order->paymentrebate_absolute); $x2dws->add_node('payment_vat', $order->payment_vat); $x2dws->add_node('payment_caption', $order->payment_caption); $x2dws->add_node('payment_param', $order->payment_param); $x2dws->add_node('status', $order->status); $x2dws->add_node('expected_date', $order->expected_date); $x2dws->add_node('payment_date', $order->payment_date); $x2dws->add_node('shipping_date', $order->shipping_date); $x2dws->add_node('message', $order->message); $x2dws->add_node('tracking_id', $order->tracking_id); $x2dws->add_node('affiliate_id', $order->affiliate_id); $x2dws->add_node('affiliate_subid', $order->affiliate_subid); $x2dws->add_node('pdf_creation', $order->pdf_creation); // Kunde $x2dws->open_node('client'); $x2dws->add_node('client_id', $order->client->client_id); $x2dws->add_node('email', $order->client->email); $x2dws->add_node('salutation', $order->client->salutation); $x2dws->add_node('firstname', $order->client->firstname); $x2dws->add_node('lastname', $order->client->lastname); $x2dws->add_node('company', $order->client->company); $x2dws->add_node('street', $order->client->street); $x2dws->add_node('streetnumber', $order->client->streetnumber); $x2dws->add_node('zip', $order->client->zip); $x2dws->add_node('city', $order->client->city); $x2dws->add_node('country', $order->client->country); $x2dws->add_node('phone', $order->client->phone); $x2dws->add_node('cellphone', $order->client->cellphone); $x2dws->add_node('fax', $order->client->fax); $x2dws->add_node('custom1', $order->client->custom1); $x2dws->add_node('custom2', $order->client->custom2); $x2dws->add_node('custom3', $order->client->custom3); $x2dws->add_node('custom4', $order->client->custom4); $x2dws->add_node('custom5', $order->client->custom5); $x2dws->add_node('bank_accountholder', $order->client->bank_accountholder); $x2dws->add_node('bank_accountnumber', $order->client->bank_accountnumber); $x2dws->add_node('bank_code', $order->client->bank_code); $x2dws->add_node('bank_name', $order->client->bank_name); $x2dws->add_node('credit_accountholder', $order->client->credit_accountholder); $x2dws->add_node('credit_accountnumber', $order->client->credit_accountnumber); $x2dws->add_node('credit_validuntil', $order->client->credit_validuntil); $x2dws->add_node('credit_cvc', $order->client->credit_cvc); $x2dws->add_node('deviating_shipping_address', $order->client->deviating_shipping_address); $x2dws->add_node('shipping_salutation', $order->client->shipping_salutation); $x2dws->add_node('shipping_firstname', $order->client->shipping_firstname); $x2dws->add_node('shipping_lastname', $order->client->shipping_lastname); $x2dws->add_node('shipping_company', $order->client->shipping_company); $x2dws->add_node('shipping_street', $order->client->shipping_street); $x2dws->add_node('shipping_streetnumber', $order->client->shipping_streetnumber); $x2dws->add_node('shipping_zip', $order->client->shipping_zip); $x2dws->add_node('shipping_city', $order->client->shipping_city); $x2dws->add_node('shipping_country', $order->client->shipping_country); $x2dws->add_node('rebate_amount', $order->client->rebate_amount); $x2dws->add_node('rebate_absolute', $order->client->rebate_absolute); $x2dws->add_node('message', $order->client->message); $x2dws->add_node('daystopayment', $order->client->daystopayment); $x2dws->add_node('novat', $order->client->novat); $x2dws->close_node('client'); // Artikel foreach ($order->items as $item) { $x2dws->open_node('item'); $x2dws->add_node('uid', $item->uid); $x2dws->add_node('position', $item->position); $x2dws->add_node('id', $item->id); $x2dws->add_node('quantity', $item->quantity); $x2dws->add_node('qprecision', $item->qprecision); $x2dws->add_node('caption', $item->caption); $x2dws->add_node('price', $item->price); $x2dws->add_node('vat', $item->vat); $x2dws->add_node('rebatable', $item->rebatable); $x2dws->add_node('unit', $item->unit); $x2dws->add_node('weight', $item->weight); $x2dws->add_node('order_status', $item->order_status); $x2dws->add_node('variationa_caption', $item->variationa_caption); $x2dws->add_node('variationb_caption', $item->variationb_caption); // Konfiguration if ($item->specialinfo) foreach(explode("\n", $item->specialinfo) as $special) { $x2dws->open_node('product_configuration'); $specialparts = explode('=', $special); $x2dws->add_node('caption', urldecode($specialparts[0])); $x2dws->add_node('value', urldecode($specialparts[1])); $x2dws->close_node(); } $x2dws->add_node('download_uid', $item->download_uid); $x2dws->add_node('download_pid', $item->download_pid); $x2dws->add_node('download_filename', $item->download_filename); $x2dws->add_node('download_count', $item->download_count); // ESD Lizenzen if ($item->download_pid) { $download = new abstractdb(TABLE_ESDLICENSES); while($license = $download->get(array('*'), array('id' => $item->download_uid, 'order_id' => $order->order_id))) { $x2dws->open_node('license'); $x2dws->add_node('date', substr($license->date, 0, 10)); $x2dws->add_node('time', substr($license->date, 11)); $x2dws->add_node('hardware_id', $license->hardware_id); $x2dws->add_node('license_code', $license->license_code); $x2dws->add_node('client_comment', $license->client_comment); $x2dws->add_node('license_pending', $license->license_pending); $x2dws->close_node(); } } $x2dws->close_node(); } $x2dws->close_node(); } } while ($xml->next_child()); $x2dws->close_node(); } break; //////////////////////////////////////////////////////////////////////////// get case 'get_all': $xml->check_nodes(array('type'), false); switch ($xml->get('type', array('templates', 'coupons', 'coupondefs'))) { // Alle Vorlagen abrufen case 'templates': $mailtemplate = new abstractdb(TABLE_TEMPLATES); while($t = $mailtemplate->get(array('*'), null, array('name asc'))) { $x2dws->open_node('template'); $x2dws->add_node('id', $t->id); $x2dws->add_node('status', $t->status); $x2dws->add_node('name', $t->name); $x2dws->add_node('subject', $t->subject); $x2dws->add_node('body', $t->body); $x2dws->close_node(); } break; // Alle Gutscheine abrufen case 'coupons': $coupon = new coupon(); $xml->check_nodes(array('type', 'id'), true); while($row = $coupon->db_get(array('*'), array('coupondef_id' => $xml->get('id', CHECK_NUMREQ)), array('coupon_id ASC'))) { $x2dws->open_node('coupon'); $x2dws->add_node('coupon_id', $row->coupon_id); $x2dws->add_node('coupondef_id', $row->coupondef_id); $x2dws->add_node('client_email', $row->client_email); $x2dws->add_node('order_id', $row->order_id); $x2dws->add_node('client_id', $row->client_id); $x2dws->add_node('mode', $row->mode); $x2dws->close_node(); } break; // Gutscheindefinitionen abrufen case 'coupondefs': $coupondef = new coupondef(); while($row = $coupondef->db_get(array('*'), null, array('coupondef_id ASC'))) { $x2dws->open_node('coupondef'); $x2dws->add_node('coupondef_id', $row->coupondef_id); $x2dws->add_node('item_price', $row->item_price); $x2dws->add_node('item_uid', $row->item_uid); if ($row->rebate_absolute) { $x2dws->add_node('rebate_absolute', $row->rebate_amount); $x2dws->add_node('rebate_percent', ''); } else { $x2dws->add_node('rebate_absolute', ''); $x2dws->add_node('rebate_percent', $row->rebate_amount); } $x2dws->add_node('date_from', $row->date_from); $x2dws->add_node('date_until', $row->date_until); $x2dws->add_node('subtotal', $row->subtotal); $x2dws->add_node('caption', $row->caption); $x2dws->close_node(); } break; } break; // PDF Pfad abrufen, ggf. Rechnung erstellen case 'get_bill_url': $xml->check_nodes(array('order_id'), true); $order = new order($id = $xml->get('order_id', CHECK_NUMREQ)); if (!$order->order_date) { $deleted_ids = new abstractdb(TABLE_DELETED); if ($deleted = $deleted_ids->get(array('change_id'), array('order_id' => $id))) { $x2dws->open_node('order'); $x2dws->add_node('order_id', $id); $x2dws->add_node('change_id', $deleted->change_id); $x2dws->add_node('deleted', 1); $x2dws->close_node('order'); } else $x2dws->error_response('No such order'); } else { include_once(CC_BLOGIC_PDFDOC); $pdfdoc = new pdfdoc(CC_SITE_FILEKEY, DOCS, $order); if ($order->bill_id) $pdfdoc->verify($pdfdoc->MODE_BILL); else $pdfdoc->generate($pdfdoc->MODE_BILL); $x2dws->add_node('bill_id', $order->bill_id); $x2dws->add_node('bill_id_prefix', $order->bill_id_prefix); $x2dws->add_node('bill_date', $order->bill_date); $x2dws->add_node('url', CC_SITE_HTTPURL . substr($pdfdoc->filename($pdfdoc->MODE_BILL), 2)); } break; //////////////////////////////////////////////////////////////////////////// Vorlagen // Alle Vorlagen schreiben case 'set_templates': $xml->check_nodes(array('template'), true); $xml->deeper('template'); $updated_ids = array(); do { $xml->check_nodes(array('id', 'name', 'subject', 'status', 'body'), true); $id = $xml->get('id', CHECK_NUM); $mailtemplate = new abstractdb(TABLE_TEMPLATES, $id); if (!isset($mailtemplate->name)) $id = null; $mailtemplate->name = $xml->get('name', CHECK_TEXT100REQ); $mailtemplate->subject = $xml->get('subject', CHECK_TEXT255REQ); $mailtemplate->status = $xml->get('status', CHECK_ALPHAMAX1); $mailtemplate->body = $xml->get('body', CHECK_ALL); if ($id) { $mailtemplate->store(); array_push($updated_ids, $id); } else array_push($updated_ids, $mailtemplate->store(true)); } while($xml->next_child()); $mailtemplate = new abstractdb(TABLE_TEMPLATES); if (count($updated_ids)) $mailtemplate->db_delete(array('id not in ('.implode(', ', $updated_ids).')')); else $mailtemplate->db_delete(); foreach ($updated_ids as $id) { $x2dws->open_node('template'); $x2dws->add_node('id', $id); $x2dws->close_node(); } break; //////////////////////////////////////////////////////////////////////////// Affiliate case 'get_affiliate': $xml->check_nodes(array('year', 'month', 'id'), false); $month = $xml->get('month', CHECK_NUM); $year = $xml->get('year', CHECK_NUMREQ); $id = $xml->get('id', CHECK_TEXT32); $affiliate = new abstractdb(TABLE_AFFILIATE); $order = new order(); if ($month) { while($a = $affiliate->get(array('*'), array( 'id' => $id, "date >= '$year-$month-01' AND date <= '$year-$month-31' ", ), array('date asc'))) { $time = strtotime($a->date); if (isset($hits[date('j', $time)])) $hits[date('j', $time)] += $a->hits; else $hits[date('j', $time)] = $a->hits; } // Anzahl Bestellungen for ($d = 1; $d <= 31; $d++) { $ordercount[$d] = $order->db_numrows(array( 'affiliate_id' => $id, 'order_date' => "$year-$month-".($d < 10 ? '0' : '').$d )); } // Ausgabe for ($d = 1; $d <= 31; $d++) if (isset($hits[$d]) || $ordercount[$d]) { $x2dws->open_node('affiliate'); $x2dws->add_node('day', $d); if (isset($hits[$d])) $x2dws->add_node('hits', $hits[$d]); if ($ordercount[$d]) $x2dws->add_node('orders', $ordercount[$d]); $x2dws->close_node(); } } else { while($a = $affiliate->get(array('*'), array( 'id' => $id, "date >= '$year-01-01' AND date <= '$year-12-31'", ), array('date asc'))) { $time = strtotime($a->date); if (isset($hits[date('n', $time)])) $hits[date('n', $time)] += $a->hits; else $hits[date('n', $time)] = $a->hits; } // Anzahl Bestellungen for ($m = 1; $m <= 12; $m++) { $ordercount[$m] = $order->db_numrows(array( 'affiliate_id' => $id, "order_date >= '$year-".($m < 10 ? '0' : '').$m."-01' AND order_date <= '$year-".($m < 10 ? '0' : '').$m."-31'" )); } // Ausgabe for ($m = 1; $m <= 12; $m++) { if (isset($hits[$m]) || $ordercount[$m]) { $x2dws->open_node('affiliate'); $x2dws->add_node('month', $m); if (isset($hits[$m])) $x2dws->add_node('hits', $hits[$m]); if ($ordercount[$m]) $x2dws->add_node('orders', $ordercount[$m]); $x2dws->close_node(); } } } break; //////////////////////////////////////////////////////////////////////////// Email Log // Email Log abrufen case 'get_emails': $xml->check_nodes(array('previd', 'limit'), true); $email = new abstractdb(TABLE_EMAILS); while($e = $email->get( array('*'), $xml->get('previd', CHECK_NUM) ? array('email_id > '.$xml->get('previd', CHECK_NUMREQ)) : null, array('email_id ASC'), 1, $xml->get('limit', CHECK_NUMREQ) )) { $x2dws->open_node('email'); $x2dws->add_node('email_id', $e->email_id); $x2dws->add_node('client_id', $e->client_id); $x2dws->add_node('order_id', $e->order_id); $x2dws->add_node('date', $e->date); $x2dws->add_node('time', $e->time); $x2dws->add_node('to_email', $e->to_email); $x2dws->add_node('to_plain', $e->to_plain); $x2dws->add_node('from_email', $e->from_email); $x2dws->add_node('from_plain', $e->from_plain); $x2dws->add_node('subject', $e->subject); $x2dws->add_node('content_plain', $e->content_plain); $x2dws->close_node(); } break; // Email Log abrufen case 'send_email': $xml->check_nodes(array('client_id', 'order_id', 'to_email', 'to_plain', 'from_email', 'from_plain', 'subject', 'content_plain', 'content_html', 'attach_bill'), true); $email = new email(); $email->order_id = $xml->getornull('order_id', CHECK_NUM); if ($email->order_id) $order = new order($email->order_id); $email->client_id = $xml->getornull('client_id', CHECK_NUM); $client = new client($email->client_id); $email->to_email = $xml->get('to_email', CHECK_TEXT50REQ); $email->from_email = $xml->get('from_email', CHECK_TEXT50REQ); $email->to_plain = $xml->get('to_plain', CHECK_TEXT50REQ); $email->from_plain = $xml->get('from_plain', CHECK_TEXT50REQ); $email->subject = $xml->get('subject', CHECK_TEXT255REQ); $email->content_plain = $xml->get('content_plain', CHECK_REQ); $email->content_html = html_entity_decode($xml->get('content_html', CHECK_ALL)); $email->date = date("Y-m-d"); $email->time = date("H:i:s"); $attach_bill = $xml->get('attach_bill', CHECK_BOOL); // Template Variablen einlesen $active = false; foreach(file(CC_INCLUDE_OSTEMPLATES) as $line) { $line = trim($line); if (strlen($line)) { if ($active) { if (preg_match("/^\[.*\]$/", $line)) { if (!preg_match("/^\[Template-Variables-.*\]$/", $line)) $active = false; } else if (preg_match("/^([a-z_]+)=(.*)$/", $line, $found)) $mailtemplate_vars[$found[1]] = $found[2]; else if (!preg_match("/^;/", $line, $found)) die('Error in file '.CC_INCLUDE_OSTEMPLATES.', unknown command "'.$line.'".'); } else if (preg_match("/^\[Template-Variables-.*\]$/", $line)) $active = true; } } // Und ersetzen foreach ($mailtemplate_vars as $key => $var) { $orig[] = '/{'.$var.'}/'; if ($key == 'country') $repl[] = isset($order) ? substr($order->client->$key, 11) : substr($client->$key, 11); else if ($key == 'signature') $repl[] = str_replace('
', "\n", CC_SITE_SHOPADDRESS); else if (strstr($key, '_date')) $repl[] = isset($order) && $order->$key ? date(CC_SITE_DATEFORMAT, strtotime($order->$key)) : ''; else if (in_array($key, array('order_id', 'order_id_prefix', 'tracking_id', 'message', 'expected_date'))) $repl[] = isset($order) && $order->$key ? $order->$key : ''; else if ($key == 'shipping_trackingurl') $repl[] = isset($order) ? CC_SITE_HTTPURL . clean_url($order->$key) : ''; else $repl[] = isset($order) ? $order->client->$key : $client->$key; } $email->content_plain = preg_replace($orig, $repl, $email->content_plain); $email->content_html = preg_replace($orig, $repl, $email->content_html); // Ggf. Rechnung anhängen if ($attach_bill && isset($order) && !CC_SITE_BILLHASLEFTTHEBUILDING) { include_once(CC_BLOGIC_PDFDOC); $pdfdoc = new pdfdoc(CC_SITE_FILEKEY, DOCS, $order); if (!$order->bill_id) $pdfdoc->generate($pdfdoc->MODE_BILL); else $pdfdoc->verify($pdfdoc->MODE_BILL); $pdf['filename'] = $pdfdoc->filename($pdfdoc->MODE_BILL); $pdf['name'] = $pdfdoc->name($pdfdoc->MODE_BILL); $email->pdf = $pdf; } $id = $email->store(true); $x2dws->open_node('email'); $x2dws->add_node('email_id', $id); $x2dws->add_node('date', $email->date); $x2dws->add_node('time', $email->time); $x2dws->close_node(); break; //////////////////////////////////////////////////////////////////////////// Bestände // Bestandsverwaltung case 'stock': $xml->check_nodes(array('mode', 'id', 'vara', 'varb', 'value'), true); $stock_product = new stock_product( $xml->get('id', CHECK_ALPHANUM), floatval($xml->get('vara', CHECK_REALNUMVALUE)), floatval($xml->get('varb', CHECK_REALNUMVALUE)) ); switch($xml->get('mode', CHECK_ALPHA)) { case 'set': $stock_product->set(floatval($xml->get('value', CHECK_REALNUMVALUE))); break; case 'inc': $stock_product->inc(floatval($xml->get('value', CHECK_REALNUMVALUE))); break; case 'dec': $stock_product->dec(floatval($xml->get('value', CHECK_REALNUMVALUE))); break; case 'get': break; default: $x2dws->error_response('No such mode'); } $x2dws->open_node('product'); $x2dws->add_node('stock', $stock_product->get()); $x2dws->close_node(); break; //////////////////////////////////////////////////////////////////////////// Setzfunktion case 'set': // Gutscheine setzen oder aktualisieren if ($xml->deeper('coupon')) { do { $xml->check_nodes(array('coupon_id', 'coupondef_id', 'client_email', 'order_id', 'client_id', 'mode'), true); $coupondef_id = $xml->get('coupondef_id', CHECK_NUMREQ); $coupondef = new coupondef($coupondef_id); if (!$coupondef->coupondef_id) $x2dws->error_response("No such coupondef"); $coupon_id = $xml->get('coupon_id', CHECK_TEXT32); if (!$coupon_id) $coupon_id = md5(uniqid(rand(), true)); $coupon = new coupon($coupon_id); $coupon->order_id = $xml->getornull('order_id', CHECK_NUM); $coupon->client_id = $xml->getornull('client_id', CHECK_NUM); $coupon->client_email = $xml->getornull('client_email', CHECK_TEXT50); $coupon->mode = $xml->get('mode', CHECK_NUM); if ($coupon->coupondef_id) { $coupon->coupondef_id = $coupondef_id; $coupon->store(); } else { $coupon->coupondef_id = $coupondef_id; $coupon->store(true); } $x2dws->open_node('coupon'); $x2dws->add_node('coupon_id', $coupon->coupon_id); $x2dws->close_node(); } while($xml->next_child()); $xml->higher(); } // Gutscheindefinition setzen oder aktualisieren if ($xml->deeper('coupondef')) { do { $xml->check_nodes(array('coupondef_id', 'item_price', 'item_uid', 'rebate_absolute', 'rebate_percent', 'date_from', 'date_until', 'subtotal', 'caption', ), true); $coupondef = new coupondef($xml->getornull('coupondef_id', CHECK_NUM)); $coupondef->item_price = $xml->getornull('item_price', CHECK_REALNUMVALUE); $coupondef->item_uid = $xml->getornull('item_uid', CHECK_ALPHANUM); if ($xml->getornull('rebate_absolute', CHECK_REALNUMVALUE)) { $coupondef->rebate_absolute = 1; $coupondef->rebate_amount = $xml->getornull('rebate_absolute', CHECK_REALNUMVALUE); } else { $coupondef->rebate_absolute = 0; $coupondef->rebate_amount = $xml->getornull('rebate_percent', CHECK_REALNUMVALUE); } $coupondef->date_from = $xml->getornull('date_from', CHECK_DATE); $coupondef->date_until = $xml->getornull('date_until', CHECK_DATE); $coupondef->subtotal = $xml->getornull('subtotal', CHECK_REALNUMVALUE); $coupondef->caption = $xml->getornull('caption', CHECK_TEXT50); if ($coupondef->coupondef_id) $coupondef->store(); else { $coupondef->coupondef_id = $xml->getornull('coupondef_id', CHECK_NUM); $coupondef->coupondef_id = $coupondef->store(true); } $x2dws->open_node('coupondef'); $x2dws->add_node('coupondef_id', $coupondef->coupondef_id); $x2dws->close_node(); } while($xml->next_child()); $xml->higher(); } // Kunde if ($xml->deeper('client')) { do { $xml->check_nodes(array( 'client_id', 'email', 'password', 'salutation', 'firstname', 'lastname', 'street', 'streetnumber', 'zip', 'city', 'country', 'company', 'phone', 'cellphone', 'fax', 'custom1', 'custom2', 'custom3', 'custom4', 'custom5', 'newsletter', 'reliability', 'novat', 'daystopayment', 'rebate_absolute', 'rebate_amount' ), true); $client_id = $xml->get('client_id', CHECK_NUM); $client = new client($client_id ? $client_id : null); $client->email = $xml->get('email', CHECK_TEXT50REQ); $client->password = $xml->get('password', CHECK_TEXT32); $client->salutation = $xml->get('salutation', CHECK_TEXT10); $client->firstname = $xml->get('firstname', CHECK_TEXT30); $client->lastname = $xml->get('lastname', CHECK_TEXT30); $client->street = $xml->get('street', CHECK_TEXT30); $client->streetnumber = $xml->get('streetnumber', CHECK_TEXT10); $client->zip = $xml->get('zip', CHECK_TEXT10); $client->city = $xml->get('city', CHECK_TEXT30); $client->country = $xml->get('country', CHECK_TEXT60); $client->company = $xml->getornull('company', CHECK_TEXT50); $client->phone = $xml->getornull('phone', CHECK_TEXT30); $client->cellphone = $xml->getornull('cellphone', CHECK_TEXT30); $client->fax = $xml->getornull('fax', CHECK_TEXT30); $client->custom1 = $xml->getornull('custom1', CHECK_TEXT50); $client->custom2 = $xml->getornull('custom2', CHECK_TEXT50); $client->custom3 = $xml->getornull('custom3', CHECK_TEXT50); $client->custom4 = $xml->getornull('custom4', CHECK_TEXT50); $client->custom5 = $xml->getornull('custom5', CHECK_TEXT50); $client->newsletter = $xml->get('newsletter', CHECK_BOOL); $client->reliability = intval($xml->get('reliability', CHECK_SIGNETNUM)); $client->novat = $xml->get('novat', CHECK_BOOL); $client->daystopayment = $xml->getornull('daystopayment', CHECK_NUM); $client->rebate_absolute = $xml->get('rebate_absolute', CHECK_BOOL); $client->rebate_amount = floatval($xml->get('rebate_amount', CHECK_REALNUMVALUE)); if (!$client->rebate_absolute && $client->rebate_amount > 100) $client->rebate_amount = 100; if (!$client->rebate_absolute && $client->rebate_amount < 0) $client->rebate_amount = 0; $x2dws->open_node('client'); if ($client_id) $client->store(null); else { $client_id = $client->store(true); $x2dws->add_node('client_id', $client_id); } $xml->higher(); $x2dws->add_node('change_id', $client->change_id); $x2dws->close_node(); } while($xml->next_child()); } // Bestellung if ($xml->deeper('order')) { do { $xml->check_nodes(array( 'order_id', 'order_date', 'order_time', 'order_prefix', 'bill_id', 'bill_date', 'bill_prefix', 'b2b', 'currency', 'sumrebate_amount', 'sumrebate_absolute', 'couponrebate_amount', 'couponrebate_absolute', 'coupon_id', 'coupon_caption', 'shipping_caption', 'shipping_trackingurl', 'shipping_cost', 'shipping_vat', 'payment_caption', 'payment_param', 'payment_cost', 'payment_cost_absolute', 'payment_rebate', 'payment_rebate_absolute', 'payment_vat', 'status', 'expected_date', 'shipping_date', 'payment_date', 'message', 'tracking_id', 'affiliate_id', 'affiliate_subid', 'client', 'item', 'pdf_creation' ), true); $order_id = $xml->get('order_id', CHECK_NUM); if (!$order_id) { list($usec, $sec) = explode(" ", microtime()); $usec = floor((float) $usec * 1000); $order_id = substr($usec.strrev($sec), 0, 9); $no_order_id = true; } $order = new order($order_id); if ($order->order_date) $existing_order = true; else $existing_order = false; $order->bill_id = $xml->get('bill_id', CHECK_TEXT20); $order->bill_date = $xml->getornull('bill_date', CHECK_DATE); $order->bill_id_prefix = $xml->get('bill_prefix', CHECK_TEXT10); $order->order_date = $xml->get('order_date', CHECK_DATEREQ); $order->order_time = $xml->get('order_time', CHECK_TIMEREQ); $order->order_id_prefix = $xml->get('order_prefix', CHECK_TEXT10); $order->b2b = $xml->get('b2b', CHECK_BOOL); $order->currency = $xml->get('currency', CHECK_TEXT10); $order->sumrebate_amount = floatval($xml->get('sumrebate_amount', CHECK_REALNUMVALUE)); $order->sumrebate_absolute = $xml->get('sumrebate_absolute', CHECK_BOOL); if (!$order->sumrebate_absolute) { $order->sumrebate_amount = min($order->sumrebate_amount, 100); $order->sumrebate_amount = max($order->sumrebate_amount, 0); } $order->couponrebate_amount = floatval($xml->get('couponrebate_amount', CHECK_REALNUMVALUE)); $order->couponrebate_absolute = $xml->get('couponrebate_absolute', CHECK_BOOL); if (!$order->couponrebate_absolute) { $order->couponrebate_amount = min($order->couponrebate_amount, 100); $order->couponrebate_amount = max($order->couponrebate_amount, 0); } $order->coupon_id = $xml->getornull('coupon_id', CHECK_TEXT32); $order->coupon_caption = $xml->getornull('coupon_caption', CHECK_TEXT50); $order->shipping_trackingurl = $xml->getornull('shipping_trackingurl', CHECK_TEXT255); $order->shipping_caption = $xml->get('shipping_caption', CHECK_TEXT50); $order->shipping_cost = floatval($xml->get('shipping_cost', CHECK_REALNUMVALUE)); $order->shipping_vat = floatval($xml->get('shipping_vat', CHECK_REALNUMVALUE)); $order->shipping_vat = min($order->shipping_vat, 100); $order->shipping_vat = max($order->shipping_vat, 0); $order->payment_param = $xml->getornull('payment_param', CHECK_TEXT20); $order->payment_caption = $xml->get('payment_caption', CHECK_TEXT50); $order->payment_amount = floatval($xml->get('payment_cost', CHECK_REALNUMVALUE)); $order->payment_absolute = $xml->get('payment_cost_absolute', CHECK_BOOL); if (!$order->payment_absolute) { $order->payment_amount = min($order->payment_amount, 100); $order->payment_amount = max($order->payment_amount, 0); } $order->paymentrebate_amount = floatval($xml->get('payment_rebate', CHECK_REALNUMVALUE)); $order->paymentrebate_absolute = $xml->get('payment_rebate_absolute', CHECK_BOOL); if (!$order->paymentrebate_absolute) { $order->paymentrebate_amount = min($order->paymentrebate_amount, 100); $order->paymentrebate_amount = max($order->paymentrebate_amount, 0); } $order->payment_vat = floatval($xml->get('payment_vat', CHECK_REALNUMVALUE)); $order->payment_vat = min($order->payment_vat, 100); $order->payment_vat = max($order->payment_vat, 0); $order->expected_date = $xml->getornull('expected_date', CHECK_DATE); $order->shipping_date = $xml->getornull('shipping_date', CHECK_DATE); $order->payment_date = $xml->getornull('payment_date', CHECK_DATE); $order->message = $xml->getornull('message', CHECK_ALL); $order->tracking_id = $xml->getornull('tracking_id', CHECK_TEXT100); $order->affiliate_id = $xml->getornull('affiliate_id', CHECK_TEXT32); $order->affiliate_subid = $xml->getornull('affiliate_subid', CHECK_TEXT32); $order->pdf_creation = $xml->get('pdf_creation', CHECK_NUM); // Status setzen und ggf. Email senden $new_order_status = $xml->get('status', $orderstatus); $old_order_status = $order->status; $order->status = $new_order_status; if ($old_order_status != $order->status && !CC_SITE_BILLHASLEFTTHEBUILDING) { if ($order->status == CC_RESSOURCE_ORDERSTATUSSHORT_SHIPPED && $order->pdf_creation == PDF_CREATION_ONSHIPP && !CC_SITE_BILLHASLEFTTHEBUILDING) { include_once(CC_BLOGIC_PDFDOC); $pdf = new pdfdoc(CC_SITE_FILEKEY, DOCS, $order); $pdf->generate($pdf->MODE_BILL); } } if ($existing_order) $order->store(); else $order->store(true); // Zugehörige Kundendaten if (!$xml->deeper('client')) $x2dws->error_response("Missing node [client]"); else { $xml->check_nodes(array( 'client_id', 'email', 'salutation', 'firstname', 'lastname', 'street', 'streetnumber', 'zip', 'city', 'country', 'company', 'phone', 'cellphone', 'fax', 'custom1', 'custom2', 'custom3', 'custom4', 'custom5', 'daystopayment', 'rebate_absolute', 'rebate_amount', 'novat', 'bank_accountnumber', 'bank_accountholder', 'bank_code', 'bank_name', 'credit_accountnumber', 'credit_accountholder', 'credit_cvc', 'credit_validuntil', 'shipping_salutation', 'shipping_firstname', 'shipping_lastname', 'shipping_street', 'shipping_streetnumber', 'shipping_zip', 'shipping_city', 'shipping_country', 'shipping_company', 'deviating_shipping_address', 'message', ), true); if (!$existing_order) $order->client = new client(); $order->client->client_id = $xml->get('client_id', CHECK_SIGNETNUM); $order->client->email = $xml->get('email', CHECK_TEXT50); $order->client->salutation = $xml->get('salutation', CHECK_TEXT10); $order->client->firstname = $xml->get('firstname', CHECK_TEXT30); $order->client->lastname = $xml->get('lastname', CHECK_TEXT30); $order->search_name = $order->client->firstname.' '.$order->client->lastname; $order->client->street = $xml->get('street', CHECK_TEXT30); $order->client->streetnumber = $xml->get('streetnumber', CHECK_TEXT10); $order->client->zip = $xml->get('zip', CHECK_TEXT10); $order->client->city = $xml->get('city', CHECK_TEXT30); $order->client->country = $xml->get('country', CHECK_TEXT60); $order->client->company = $xml->getornull('company', CHECK_TEXT50); $order->client->phone = $xml->getornull('phone', CHECK_TEXT30); $order->client->cellphone = $xml->getornull('cellphone', CHECK_TEXT30); $order->client->fax = $xml->getornull('fax', CHECK_TEXT30); $order->client->custom1 = $xml->getornull('custom1', CHECK_TEXT50); $order->client->custom2 = $xml->getornull('custom2', CHECK_TEXT50); $order->client->custom3 = $xml->getornull('custom3', CHECK_TEXT50); $order->client->custom4 = $xml->getornull('custom4', CHECK_TEXT50); $order->client->custom5 = $xml->getornull('custom5', CHECK_TEXT50); $order->client->message = $xml->getornull('message', CHECK_ALL); $order->client->daystopayment = $xml->getornull('daystopayment', CHECK_NUM); $order->client->novat = $xml->getornull('novat', CHECK_BOOL); $order->client->rebate_absolute = $xml->get('rebate_absolute', CHECK_BOOL); $order->client->rebate_amount = floatval($xml->get('rebate_amount', CHECK_REALNUMVALUE)); if (!$order->client->rebate_absolute && $order->client->rebate_amount > 100) $order->client->rebate_amount = 100; if (!$order->client->rebate_absolute && $order->client->rebate_amount < 0) $order->client->rebate_amount = 0; $order->client->bank_accountholder = $xml->getornull('bank_accountholder', CHECK_TEXT30); $order->client->bank_accountnumber = $xml->getornull('bank_accountnumber', CHECK_TEXT60); $order->client->bank_code = $xml->getornull('bank_code', CHECK_TEXT30); $order->client->bank_name = $xml->getornull('bank_name', CHECK_TEXT30); $order->client->credit_accountholder = $xml->getornull('credit_accountholder', CHECK_TEXT60); $order->client->credit_accountnumber = $xml->getornull('credit_accountnumber', CHECK_TEXT30); $order->client->credit_validuntil = $xml->getornull('credit_validuntil', CHECK_TEXT30); $order->client->credit_cvc = $xml->getornull('credit_cvc', CHECK_TEXT6); $order->client->deviating_shipping_address = $xml->get('deviating_shipping_address', CHECK_BOOL); if ($order->client->deviating_shipping_address) { $order->client->shipping_salutation = $xml->get('shipping_salutation', CHECK_TEXT10); $order->client->shipping_firstname = $xml->get('shipping_firstname', CHECK_TEXT30); $order->client->shipping_lastname = $xml->get('shipping_lastname', CHECK_TEXT30); $order->client->shipping_street = $xml->get('shipping_street', CHECK_TEXT30); $order->client->shipping_streetnumber = $xml->get('shipping_streetnumber', CHECK_TEXT10); $order->client->shipping_zip = $xml->get('shipping_zip', CHECK_TEXT10); $order->client->shipping_city = $xml->get('shipping_city', CHECK_TEXT30); $order->client->shipping_country = $xml->get('shipping_country', CHECK_TEXT60); $order->client->shipping_company = $xml->get('shipping_company', CHECK_TEXT50); } else { $order->client->shipping_salutation = null; $order->client->shipping_firstname = null; $order->client->shipping_lastname = null; $order->client->shipping_street = null; $order->client->shipping_streetnumber = null; $order->client->shipping_zip = null; $order->client->shipping_city = null; $order->client->shipping_country = null; $order->client->shipping_company = null; } if ($existing_order) $order->client->store(); else { if (!$order->client->client_id) $order->client->set_client_id(); $order->client->order_id = $order->order_id; $order->client->store(false); } $xml->higher(); } // Zugehörige Artikel if (!$xml->deeper('item')) $x2dws->error_response("Missing node [item]"); else { $position = 1; $item = new item(); $item->db_delete(array('order_id' => $order->order_id)); do { $xml->check_nodes(array( 'uid', 'order_status', 'id', 'quantity', 'qprecision', 'caption', 'price', 'vat', 'rebatable', 'unit', 'weight', 'variationa_caption', 'variationb_caption', 'download_uid', 'download_pid', 'download_filename', 'download_count' ), false); $uid = $xml->get('uid', CHECK_ALPHANUM); $item = new item($uid, $order->order_id, $position); $item->order_status = $xml->get('order_status', $orderstatus); $item->id = $xml->getornull('id', CHECK_TEXT32); $item->quantity = floatval($xml->get('quantity', CHECK_REALNUMVALUE)); $item->qprecision = $xml->get('qprecision', CHECK_NUMREQ); $item->caption = $xml->get('caption', CHECK_TEXT100); $item->price = floatval($xml->get('price', CHECK_REALNUMVALUE)); $item->vat = floatval($xml->get('vat', CHECK_REALNUMVALUE)); $item->vat = min($item->vat, 100); $item->vat = max($item->vat, 0); $item->rebatable = intval($xml->get('rebatable', CHECK_BOOL)); $item->unit = $xml->get('unit', CHECK_TEXT10); $item->weight = floatval($xml->get('weight', CHECK_REALNUMVALUE)); $item->variationa_caption = $xml->getornull('variationa_caption', CHECK_TEXT50); $item->variationb_caption = $xml->getornull('variationb_caption', CHECK_TEXT50); $item->download_uid = $xml->getornull('download_uid', CHECK_TEXT100); $item->download_pid = $xml->getornull('download_pid', CHECK_TEXT50); $item->download_filename = $xml->getornull('download_filename', CHECK_TEXT100); $item->download_count = $xml->getornull('download_count', CHECK_NUM); // Zugehörige Produkt Konfiguration if (!$xml->deeper('product_configuration')) $item->specialinfo = null; else { $specials = array(); do { $xml->check_nodes(array('caption', 'value'), true); $caption = $xml->get('caption', CHECK_TEXT255); $value = $xml->get('value', CHECK_TEXT255); $specials[] = rawurlencode($caption).'='.rawurlencode($value); } while($xml->next_child()); $item->specialinfo = implode("\n", $specials); $xml->higher(); } // Zugehörige Lizenzen if (!$existing_order && $xml->deeper('license')) { do { $xml->check_nodes(array('date', 'time', 'hardware_id', 'license_code', 'client_comment', 'license_pending'), true); $license = new abstractdb(TABLE_ESDLICENSES, $item->download_uid); $license->order_id = $order->order_id; $license->date = $xml->get('date', CHECK_DATE).' '.$xml->get('time', CHECK_TIMEREQ); $license->hardware_id = $xml->get('hardware_id', CHECK_TEXT100); $license->license_code = $xml->get('license_code', CHECK_TEXT100); $license->client_comment = $xml->get('client_comment', CHECK_TEXT255); $license->license_pending = $xml->get('license_pending', CHECK_NUM); $license->store(true); } while($xml->next_child()); $xml->higher(); } // Immer speichern, da Artikel gelöscht $item->store(true); // Download Artikel zentral speichern if ($item->download_uid) $item->store_download($item->download_count); $position++; } while($xml->next_child()); $xml->higher(); } $xml->higher(); $x2dws->open_node('order'); if (isset($no_order_id)) $x2dws->add_node('order_id', $order_id); $x2dws->add_node('change_id', $order->change_id); $x2dws->close_node(); } while($xml->next_child()); } break; //////////////////////////////////////////////////////////////////////////// Löschfunktion // Datensätze löschen case 'delete': foreach(array('order', 'client', 'email', 'coupon', 'coupondef') as $class) { if ($xml->is_node($class)) { $xml->deeper($class); do { $id_name = $class.'_id'; $xml->check_nodes(array($id_name), true); $id = $xml->get($id_name, CHECK_ALL); $object = new $class($id); $change_id = $object->delete(); if ($class == 'client' || $class == 'order') { $x2dws->open_node($class); $x2dws->add_node('change_id', $change_id); $x2dws->add_node($id_name, $id); $x2dws->add_node('deleted', '1'); $x2dws->close_node(); } } while($xml->next_child()); $xml->higher(); } } break; ////////////////////////////////////////////////////////////////////////////////////////////// // Sperrt die Tabellen case 'lock': $dbms->sql_query("UPDATE ".TABLE_PREFIX."config SET config_value = 1 WHERE config_key = 'lock'"); break; // Gibt die Tabellen wieder frei case 'unlock': $dbms->sql_query("UPDATE ".TABLE_PREFIX."config SET config_value = 0 WHERE config_key = 'lock'"); break; // Sperrstatus der Tabellen auslesen case 'get_lock': $result = $dbms->sql_query("SELECT config_value FROM ".TABLE_PREFIX."config WHERE config_key = 'lock'"); $row = $dbms->sql_fetch_row($result); $dbms->sql_free_result($result); $x2dws->add_node('lock_status', $row->config_value); break; case 'list_fields': $xml->check_nodes(array('table'), true); $table = $xml->get('table', CHECK_ALPHA); $x2dws->open_node($table); foreach($dbms->sql_get_fieldnames($table) as $field) $x2dws->add_node('field', $field); $x2dws->close_node(); break; // Alle Tabellen und deren Zeilenanzahl ausgeben case 'list_tables': $result = $dbms->sql_query($dbms->sql_tables()); $tablenames = array(); while ($row = $dbms->sql_fetch_array($result)) { if ($row[0] == TABLE_PREFIX.'config') array_unshift($tablenames, $row[0]); else array_push($tablenames, $row[0]); } $dbms->sql_free_result($result); $x2dws->open_node('tables'); foreach($tablenames as $tn) { $x2dws->open_node('table'); $x2dws->add_node('name', str_replace(TABLE_PREFIX, '', $tn)); $result = $dbms->sql_query("SELECT count(*) as count FROM $tn"); $row = $dbms->sql_fetch_row($result); $dbms->sql_free_result($result); $x2dws->add_node('count', $row->count); $x2dws->close_node(); } $x2dws->close_node(); break; // Einen Datensatz holen case 'get_recordsets': $xml->check_nodes(array('table', 'offset', 'limit'), true); $result = $dbms->sql_query("SELECT * FROM ".TABLE_PREFIX.$xml->get('table', CHECK_ALPHA)." LIMIT ".intval($xml->get('offset', CHECK_NUM)).", ".intval($xml->get('limit', CHECK_NUM))); $x2dws->open_node('recordsets'); while ($row = $dbms->sql_fetch_row($result)) { $x2dws->open_node('recordset'); $hash = get_object_vars($row); foreach(array_keys($hash) as $key) if ($hash[$key] !== null) $x2dws->add_node($key, str_replace('\\', '\\\\', $hash[$key])); $x2dws->close_node(); } $dbms->sql_free_result($result); $x2dws->close_node(); break; // Einen Datensatz speichern case 'put_recordsets': $xml->check_nodes(array('recordsets', 'table'), true); $table = $xml->get('table', CHECK_ALPHA); $xml->deeper('recordsets'); $xml->check_nodes(array('recordset'), true); $xml->deeper('recordset'); do { $pairs = $xml->get_content(); // Sonderbehandlung Tabelle config if ($table == 'config') { if ($pairs->config_key == 'tables' && $pairs->config_value != TABLES_CHANGE_ID) $x2dws->error_response('Database format does not match!'); else $dbms->sql_query("UPDATE ".TABLE_PREFIX."config SET config_value = ".$pairs->config_value." WHERE config_key = '".$pairs->config_key."'"); // Tabellen mit Inhalt leeren $dbms->sql_query("DELETE FROM ".TABLE_PREFIX.'templates'); $dbms->sql_query("DELETE FROM ".TABLE_PREFIX.'osconfig'); } else { $pairs = get_object_vars($pairs); $sql_keys = array(); $sql_values = array(); foreach($pairs as $key => $value) { $sql_keys[] = $dbms->escape_string($key); $sql_values[] = $dbms->escape_string($value); } $sql = "INSERT INTO ". TABLE_PREFIX.$table." (".implode(',', $sql_keys).") VALUES ('".implode("','", $sql_values)."')"; $dbms->sql_query($sql); } } while($xml->next_child()); break; default: $x2dws->action_nok(); } $x2dws->send_response(); ?>