assets/s2diinit.php /// Art: Include //// Inhalt: Initialisierungsroutinen bei Shopstart und Online Auftragsverwaltung /// Beschreibung: Einbindung von Klassen und Funktionen, Datenbankverbindung herstellen, Session starten /// Benötigt: eine Menge, siehe unten /// CCML-Parsing: nein /// ////////////////////////////////////////////////////////////////////////////////////////// /// /// Letzte Änderungen: /// 30.01.2009 Timestamp beim Erstellen der DB /// 23.01.2010 Migrationspfad verbessert bei Neuanlage von Datenbanken /// 09.02.2010 Migration bei sqlite Fehlermeldung /// 10.03.2010 Debug verbessert /// 07.08.2010 Migrationspfad 6 -> 7 /// 08.08.2010 Migrationspfad für Email Templates /// 09.08.2010 Migrationspfad für Webservice /// 13.09.2010 Migrationspfad SQLite Name /// 04.10.2010 Migrationspfad auch in Unterverzeichnissen /// ////////////////////////////////////////////////////////////////////////////////////////// ///<04.10.2010/7.0.2.4/> if (!defined('SHOP_TO_DATE')) die('Forbidden'); require(CC_INCLUDE_DB); require(CC_INCLUDE_FUNCTIONS); require(CC_INCLUDE_TEMPLATE); // Datenbankverbindung herstellen, ggf. Fallback auf sqlite if (ini_get('sendmail_from') == 'preview@webtodatepreview.local' || CC_SITE_DB == 'sqlite') { // Auf PHP5 und sqlite Funktionen prüfen if (!function_exists('sqlite_open') || !function_exists('sqlite_fetch_object')) die(CC_RESSOURCE_SQLITEERROR); // SQLite Konnektor einbinden $db_file_old = CC_SITE_DB_FILE_OLD; $db_file = CC_SITE_DB_FILE; // Migration SQLite Dateiname if (file_exists($db_file_old)) { if (file_exists($db_file)) { @unlink($db_file_old); } else { rename($db_file_old, $db_file); if (!file_exists($db_file)) { $db_file = $db_file_old; } } } require(CC_INCLUDE_SQLITE); $dbms = new dbms($db_file); define('INCLUDE_DBSTRUCTURE', CC_INCLUDE_SQLITESTRUCTURE); define('SQL_DATEBACK_1MONTH', "date('now', '-1 month')"); define('SQL_DATEBACK_3MONTH', "date('now', '-3 month')"); define('SQL_DATEBACK_1YEAR', "date('now', '-1 year')"); } else { // MYSQL Konnektor einbinden $db_host = CC_SITE_DB_HOST; $db_name = CC_SITE_DB_NAME; $db_user = CC_SITE_DB_USER; $db_passwd = CC_SITE_DB_PASSWORD; require(CC_INCLUDE_MYSQL); $dbms = new dbms($db_host, $db_user, $db_passwd, $db_name); define('INCLUDE_DBSTRUCTURE', CC_INCLUDE_MYSQLSTRUCTURE); define('INCLUDE_DBMORE', CC_INCLUDE_MYSQLMORE); define('SQL_DATEBACK_1MONTH', "CURDATE() - INTERVAL 1 MONTH"); define('SQL_DATEBACK_3MONTH', "CURDATE() - INTERVAL 3 MONTH"); define('SQL_DATEBACK_1YEAR', "CURDATE() - INTERVAL 1 YEAR"); } // Überprüfen ob Tabellen vorhanden sind $ok = true; $result = $dbms->sql_query($dbms->sql_table_config()); if ($dbms->sql_num_rows($result) == 1) { $result = $dbms->sql_query("SELECT * FROM ".TABLE_PREFIX."config"); while($row = $dbms->sql_fetch_row($result)) $config[$row->config_key] = $row->config_value; if (!isset($config['tables']) || $config['tables'] != TABLES_CHANGE_ID) $ok = false; } else $ok = false; $dbms->sql_free_result($result); if (isset($config['lock']) && $config['lock'] && !defined('WEBSERVICE_ACCESS')) die('Application locked for maintenance!'); // Tabellen erstellen und default data einfügen if (!$ok) { // Alle Tabellen löschen function truncate() { global $dbms; $result = $dbms->sql_query($dbms->sql_tables()); while ($row = $dbms->sql_fetch_array($result)) $tablenames[] = $row[0]; if (isset($tablenames)) $dbms->drop_tables($tablenames); } // Bei Fehler bestehende Tabellen abräumen um unvollständige DBs zu vermeiden function aboard($error) { truncate(); die($error); } $sql = ""; truncate(); // Datenbank anlegen und Daten einfügen foreach(array(INCLUDE_DBSTRUCTURE, CC_INCLUDE_DBDATA) as $file) foreach(file($file) as $line) { $line = trim($line); $line = str_replace('{TABLE_PREFIX}', TABLE_PREFIX, $line); $line = str_replace('{TABLES}', TABLES_CHANGE_ID, $line); $line = str_replace('{TIMESTAMP}', time(), $line); $line = str_replace('{NEW_SQL_COUNT}', NEW_SQL_COUNT, $line); if (strlen($line) && !preg_match("/^--/", $line)) $sql .= $line; if (preg_match("/;$/", $sql)) { $dbms->sql_query($sql); $sql = ''; } } // 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])) aboard('Error in file '.CC_INCLUDE_OSTEMPLATES.', dublicate identifier "'.$found[1].'".'); $set[$key] = $found[2]; $identifier_found = true; break; } } if (!$identifier_found) aboard('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)) aboard('Error in file '.CC_INCLUDE_OSTEMPLATES.', unknown command "'.$line.'".'); } } } else { // Tabellen erweitern if (!isset($config['moresql'])) { $dbms->sql_query("INSERT INTO ".TABLE_PREFIX."config (config_key, config_value) VALUES ('moresql', 0)"); } else if ($config['moresql'] < MORE_SQL_COUNT) { if (defined('WEBSERVICE_ACCESS')) die('MIGRATION_REQUIRED'); if (ini_get('sendmail_from') != 'preview@webtodatepreview.local' && CC_SITE_DB != 'sqlite') { if (isset($_GET['migrate'])) { $sql_array = file(INCLUDE_DBMORE); // Template Migration if (preg_match('#add_email_template\(([a-z])\)#', $sql_array[$config['moresql']], $parts)) { $status = $parts[1]; 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])) die('Error in file '.CC_INCLUDE_OSTEMPLATES.', dublicate identifier "'.$found[1].'".'); $set[$key] = $found[2]; $identifier_found = true; break; } } if (!$identifier_found) die('Error in file '.CC_INCLUDE_OSTEMPLATES.', unknown identifier "'.$found[1].'".'); if (count($set) == 4) { if ($set['status'] == $status) { $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); break; } else $set = array(); } } else if (!preg_match("/^;/", $line, $found)) die('Error in file '.CC_INCLUDE_OSTEMPLATES.', unknown command "'.$line.'".'); } } // SQL Migration } else { $dbms->sql_query(str_replace('{TABLE_PREFIX}', TABLE_PREFIX, $sql_array[$config['moresql']])); } $dbms->sql_query("UPDATE ".TABLE_PREFIX."config SET config_value = ".($config['moresql'] + 1)." WHERE config_key = 'moresql' "); $message = str_replace('[n]', $config['moresql'] + 1, RESSOURCE_MIGRATE_WORKING); $message = str_replace('[t]', MORE_SQL_COUNT, $message); echo $message . ''; exit; } else { echo str_replace('[l]', '' . CC_RESSOURCE_BASKETNEXT . '', RESSOURCE_MIGRATE_NEXT); exit; } } else die('SQLite migration failed. Use MySQL or contact your system administrator.'); } else if (isset($_GET['migrate'])) { echo RESSOURCE_MIGRATE_DONE . ''; exit; } } //////////////////////////////////////////////////////////////////////////// // Business Logic einbinden require(CC_BLOGIC_ITEM); require(CC_BLOGIC_SHIPPING); require(CC_BLOGIC_PAYMENT); require(CC_BLOGIC_CLIENT); require(CC_BLOGIC_ORDER); require(CC_BLOGIC_COUPONS); require(CC_BLOGIC_EMAIL); require(CC_BLOGIC_ABSTRACT); if (!defined('WEBSERVICE_ACCESS')) { // Session erstellen, ssl Übergabe $session_id = is_get(PARAMETER_SESSION) ? get(PARAMETER_SESSION, CHECK_ALPHANUM32) : (is_post(PARAMETER_SESSION) ? post(PARAMETER_SESSION, CHECK_ALPHANUM32) : null); $session = new session($session_id); if (is_get(PARAMETER_LOGOUT)) { $session->unset_client(); redirect(CC_SITE_SHOPMORE); } $redirect = is_get(PARAMETER_REDIRECT) ? get(PARAMETER_REDIRECT, CHECK_HEX) : post(PARAMETER_REDIRECT, CHECK_HEX); } // Debugging function debug($s1, $s2 = null) { $data = debug_backtrace(); echo '
';
	echo $data[0]['file'] . ' line ' . $data[0]['line'] . ': ';
	if ($s2)
		echo '_'.$s2.'_ ';
	else if (is_object($s1) || is_array($s1))
		print_r($s1);
	else
		echo '_' . $s1 . '_';
	echo '

'; }; ?>