query ("SELECT * FROM `{prefix}$table` WHERE $where")) { foreach ($db as $row) { if ($table=="i18n") { if (($row['section']=="dot") != $data) { continue; } $row['id'] = 0; } if ($table=="group") { if (!$onlinedata && !$withHistory && ($row['status']&BASE::STATUS_ERASED) && ($row['online_group_id'] || !$db2->query ("SELECT id FROM `{prefix}group` WHERE online_group_id={$row['id']} AND !(status&".BASE::STATUS_ERASED.")"))) { // Gruppe ist gelöscht und es ist eine offline Gruppe oder zu der gelöschten online Gruppe gibt es keine offline Gruppen continue; } $sequences[$row['sequence_id']] = true; } $line = "INSERT INTO `$table` VALUES ('".implode ("','", Database::escape ($row))."');\n"; $fp ? fputs ($fp, $line) : print ($line); } } // Sequence Einträge if ($table=="group") { $line = "TRUNCATE TABLE `sequence`;\n"; $fp ? fputs ($fp, $line) : print ($line); if ($db->query ("SELECT * FROM `{prefix}sequence`")) { foreach ($db as $row) { if (isset ($sequences[$row['id']])) { $line = "INSERT INTO `sequence` VALUES ('".implode ("','", Database::escape ($row))."');\n"; $fp ? fputs ($fp, $line) : print ($line); } } } } // History Einträge if ($table!="i18n" || !$data) { $line = "DELETE FROM `history` WHERE `table_name`='$table';\n"; $fp ? fputs ($fp, $line) : print ($line); if ($withHistory) { if ($db->query ("SELECT * FROM `{prefix}history` WHERE table_name='$table'")) { foreach ($db as $row) { $row['id'] = ""; $line = "INSERT INTO `history` VALUES ('".implode ("','", Database::escape ($row))."');\n"; $fp ? fputs ($fp, $line) : print ($line); } } } } } } public static function getFileList ($onlyOnline=false) { $files = array (); $db = new Database (); if ($db->query ("SELECT id FROM `{prefix}element`". ($onlyOnline ? " WHERE status&".BASE::STATUS_ONLINE." AND ticket_id=0" : ""))) { foreach ($db as $row) { if (file_exists (Setting::get ("config", "filePath") . $row['id'])) { $files[] = $row['id']; } } } return $files; } /** * Spielt einen Dump in die Datenbank ein * * \param filename Name der Datei die eingespielt werden soll * \param noerr Es soll keine Fehlermeldung geloggt/ausgegeben werden wenn ein Fehler aftritt * * \return Einen Leerstring bei Erfolg, ansonsten die Fehlermeldung */ public static function insertData ($filename, $noerr=false) { $fp = fopen ($filename, "r"); if ($fp) { $db = new Database ("", null, $noerr); $conf = $db->config; if (!$conf['database'] || $conf['database']=="mysql") { return "Not allowed database name '{$conf['database']}'"; } $query = ""; while (!feof($fp)) { $row = fgets ($fp, 1024*1024); if (preg_match ("/^-- Database Version: (\S+)/", $row, $erg) && $erg[1]!=Setting::VERSION_DB) { return "Wrong database Version in '".basename ($filename)."'"; } if (preg_match ("/^--/", $row)) { // Kommentar Zeilen überspringen continue; } if (!empty ($conf['prefix'])) { $row = preg_replace ("/^(CREATE TABLE( IF NOT EXISTS)? `|INSERT( IGNORE)? INTO `|DROP TABLE IF EXISTS `|TRUNCATE TABLE `|DELETE FROM `)/", "\\1{$conf['prefix']}_", $row); } $query .= $row; if (preg_match ("/\;\s*$/", $row)) { if ($db->query ($query, true)!==false) { $query = ""; } else { fclose ($fp); return $db->errmsg; } } } fclose ($fp); } else { return "File not found '$filename'"; } return ""; } /** * erstellt die Datenbank Tabellen * * \param noerr Es soll keine Fehlermeldung geloggt/ausgegeben werden wenn ein Fehler aftritt * * \return Einen Leerstring bei Erfolg, ansonsten die Fehlermeldung */ public static function createTables ($noerr=false) { if (!($err = Backup::insertData (dirname(__FILE__)."/database.sql", $noerr))) { $err = Backup::insertData (dirname(__FILE__)."/i18n.sql", $noerr); } return $err; } /** * löscht die Datenbank Tabellen * * \param prefix Prefix der Tabellen die gelöscht werden sollen */ public static function delTables () { $db = new Database (); $db->query ("DROP TABLE IF EXISTS `{prefix}group`, `{prefix}element`, `{prefix}sequence`, `{prefix}ticket`, `{prefix}timer`, `{prefix}i18n`, `{prefix}config`, `{prefix}history`, `{prefix}user`"); } } ?>