#!/usr/local/bin/php -q parse(read_file($sessionfile)); $xmlParser = null; unlink($sessionfile); $sessionid = $session['OCXMLSESSION']['SESSIONID']['DATA']; $recordscount = $session['OCXMLSESSION']['RECORDS']['USER']; $recordscount += $session['OCXMLSESSION']['RECORDS']['CACHE']; $recordscount += $session['OCXMLSESSION']['RECORDS']['CACHEDESC']; $recordscount += $session['OCXMLSESSION']['RECORDS']['CACHELOG']; $recordscount += $session['OCXMLSESSION']['RECORDS']['PICTURE']; $recordscount += $session['OCXMLSESSION']['RECORDS']['REMOVEOBJECT']; echo 'Abruf seit ' . $lastUpdate . "\n"; echo "------------------------\n"; echo 'Session-Id: ' . $sessionid . "\n"; echo 'User: ' . $session['OCXMLSESSION']['RECORDS']['USER'] . "\n"; echo 'Cache: ' . $session['OCXMLSESSION']['RECORDS']['CACHE'] . "\n"; echo 'Cachdesc: ' . $session['OCXMLSESSION']['RECORDS']['CACHEDESC'] . "\n"; echo 'Cachelog: ' . $session['OCXMLSESSION']['RECORDS']['CACHELOG'] . "\n"; echo 'Picture: ' . $session['OCXMLSESSION']['RECORDS']['PICTURE'] . "\n"; echo 'Removedobject: ' . $session['OCXMLSESSION']['RECORDS']['REMOVEOBJECT'] . "\n"; echo "------------------------\n"; echo 'Summe: ' . $recordscount . "\n"; $filescount = ($recordscount + (500 - $recordscount % 500)) / 500; echo 'Anzahl der Pakete: ' . $filescount . "\n"; echo "\n"; if ($recordscount == 0) { echo "No new data, exiting\n"; exit; } for ($i = 1; $i <= $filescount; $i++) { echo "Download Paket: " . $i . ' von ' . $filescount . "\n"; $fileurl = $opt['url_getsession']; $fileurl = mb_ereg_replace('{sessionid}', $sessionid, $fileurl); $fileurl = mb_ereg_replace('{file}', $i, $fileurl); $fileurl = mb_ereg_replace('{zip}', $opt['zip'], $fileurl); $target = $opt['tmpdir'] . $sessionid . '-' . sprintf('%04d', $i) . $fileext; copy($fileurl, $target); } } else { echo 'Download ...' . "\n"; $target = $opt['tmpdir'] . date('YmdHis') . $fileext; copy($url, $target); } } function unzipxmlfiles() { global $opt; // alle zips entpacken $hDir = opendir($opt['tmpdir']); while (false !== ($file = readdir($hDir))) { if (is_file($opt['tmpdir'] . $file)) { $bCopy = false; if (mb_substr($file, mb_strrpos($file, '.')) == '.zip') { echo 'Unzipping file ' . $file . "\n"; system($opt['unzip'] . ' --type=zip --src="' . $opt['rel_tmpdir'] . '/' . $file . '" --dst="' . $opt['rel_tmpdir'] . '"'); } else if (mb_substr($file, mb_strrpos($file, '.')) == '.gz') { echo 'Unzipping file ' . $file . "\n"; system($opt['unzip'] . ' --type=gzip --src="' . $opt['rel_tmpdir'] . '/' . $file . '" --dst="' . $opt['rel_tmpdir'] . '"'); } else if (mb_substr($file, mb_strrpos($file, '.')) == '.bz2') { echo 'Unzipping file ' . $file . "\n"; system($opt['unzip'] . ' --type=bzip2 --src="' . $opt['rel_tmpdir'] . '/' . $file . '" --dst="' . $opt['rel_tmpdir'] . '"'); } else if (mb_substr($file, mb_strrpos($file, '.')) == '.xml') { $bCopy = true; } // und jetzt die gezippte Datei verschieben $archivdir = $opt['archivdir']; $archivdir .= $opt['curdb'] . '/'; if (!is_dir($archivdir)) mkdir($archivdir); if ($bCopy == true) copy($opt['tmpdir'] . $file, $archivdir . '/' . $file); else rename($opt['tmpdir'] . $file, $archivdir . '/' . $file); } } closedir($hDir); } function importxmlfiles() { global $opt; $files = array(); $hDir = opendir($opt['tmpdir']); while (false !== ($file = readdir($hDir))) { if (is_file($opt['tmpdir'] . $file)) if ($file != '.cvsignore') $files[] = $opt['tmpdir'] . $file; } closedir($hDir); sort($files); foreach ($files AS $file) importxmlfile($file); } function importxmlfile($file) { echo 'Importing file ' . $file . "\n"; $xmlReader = new xmlReader(); $xmlReader->open($file); $xmlReader->read(); if ($xmlReader->nodeType != XMLReader::DOC_TYPE) { echo 'error: DOCTYPE expected, aborted'; return false; } if ($xmlReader->name != 'oc11xml') { echo 'error: wrong DOCTYPE, aborted'; return false; } $xmlReader->read(); if ($xmlReader->nodeType != XMLReader::ELEMENT) { echo 'error: First element expected, aborted'; return false; } if ($xmlReader->name != 'oc11xml') { echo 'error: first element not valid, aborted'; return false; } $xmlReader->moveToFirstAttribute(); while (($xmlReader->name != 'date') && $xmlReader->moveToNextAttribute()) ; if ($xmlReader->name == 'date') $starttime = strtotime($xmlReader->value); else $starttime = strtotime('2005-08-01 00:00:00'); // ok ... machen wir mal ... $xmlReader->read(); do { if ($xmlReader->nodeType == XMLReader::ELEMENT) { $elementName = mb_strtoupper($xmlReader->name); /* ... diese Node in Array umwandeln $node['USER']['__DATA'] = ''; $node['USER']['ID']['__ATTR']['ID'] = '101016'; $node['USER']['ID']['__DATA'] = 'B97CE517-4D74-B6CE-BED8-EF76662FB7EE'; $node['USER']['USERNAME']['__DATA'] = 'Team BMW-Biker'; $node['USER']['PMR']['__DATA'] = '0'; $node['USER']['DATECREATED']['__DATA'] = '2005-08-14 00:00:00'; $node['USER']['LASTMODIFIED']['__DATA'] = '2005-10-30 19:26:51'; */ unset($node); $node[$elementName]['__DATA'] = ''; $sSubElement = ''; $nRecursionLevel = 1; while ($xmlReader->read() && ($nRecursionLevel > 0)) { if ($xmlReader->nodeType == XMLReader::TEXT) { if ($sSubElement != '') $node[$elementName][$sSubElement]['__DATA'] = $xmlReader->value; else $node[$elementName]['__DATA'] = $xmlReader->value; } else if ($xmlReader->nodeType == XMLReader::CDATA) { if ($sSubElement != '') $node[$elementName][$sSubElement]['__DATA'] = $xmlReader->value; else $node[$elementName]['__DATA'] = $xmlReader->value; } else if ($xmlReader->nodeType == XMLReader::ELEMENT) { if ($sSubElement != '') { // vorheriges element zuerst schlißen $sSubElement = ''; $nRecursionLevel--; } $sSubElement = mb_strtoupper($xmlReader->name); $nRecursionLevel++; // attribute auslesen if ($xmlReader->moveToFirstAttribute()) { $node[$elementName][$sSubElement]['__ATTR'][mb_strtoupper($xmlReader->name)] = $xmlReader->value; while ($xmlReader->moveToNextAttribute()) { $node[$elementName][$sSubElement]['__ATTR'][mb_strtoupper($xmlReader->name)] = $xmlReader->value; } } } else if ($xmlReader->nodeType == XMLReader::END_ELEMENT) { $sSubElement = ''; $nRecursionLevel--; } } switch ($elementName) { case 'USER': ImportUserArray($node['USER']); break; case 'CACHE': ImportCacheArray($node['CACHE']); break; case 'CACHEDESC': ImportCacheDescArray($node['CACHEDESC']); break; case 'CACHELOG': ImportCachelogArray($node['CACHELOG']); break; case 'PICTURE': ImportPictureArray($node['PICTURE']); break; case 'REMOVEDOBJECT': ImportRemovedObjectArray($node['REMOVEDOBJECT']); break; default: echo 'Unknown Element "' . $xmlReader->name . '", skipping' . "\n"; break; } } else { // echo $xmlReader->nodeType . "\n"; } } while ($xmlReader->read()); $xmlReader->close(); $xmlReader = null; // zeitstempel notieren $oldstarttime = strtotime(getSysConfig('ocxml11client_lastupdate', '2005-08-01 00:00:00')); if ($oldstarttime < $starttime) { setSysConfig('ocxml11client_lastupdate', date('Y-m-d H:i:s', $starttime)); } } function cleartmpdir() { global $opt; $hDir = opendir($opt['tmpdir']); while (false !== ($file = readdir($hDir))) { if (is_file($opt['tmpdir'] . $file)) if ($file != '.cvsignore') unlink($opt['tmpdir'] . $file); } closedir($hDir); } function switchdb() { global $argv, $opt, $dblink; global $dbname, $dbserver, $dbusername, $dbpasswd; $opt['curdb'] = 0; foreach ($argv AS $arg) { // andere DB connecten? if (mb_substr($arg, 0, 5) == '--db=') { if (!is_numeric(mb_substr($arg, 5))) die('invalid alternative DB' . "\n"); $nDb = mb_substr($arg, 5); if ($nDb != 0) { if (!isset($opt['db'][$nDb])) die('invalid alternative DB' . "\n"); mysql_close($dblink); $dblink = mysql_connect($opt['db'][1]['server'], $opt['db'][1]['username'], $opt['db'][1]['passwd']); if ($dblink !== false) { sql("SET NAMES 'utf8'"); sql('USE `&1`', $opt['db'][1]['name']); } else die('Connect to alternative DB failed' . "\n"); $opt['curdb'] = $nDb; } } } if ($opt['curdb'] == 0) { $dblink = mysql_connect($dbserver, $dbusername, $dbpasswd); if ($dblink !== false) { sql("SET NAMES 'utf8'"); sql('USE `&1`', $dbname); } else die('Connect to alternative DB failed' . "\n"); } } function ImportUserArray($r) { // prüfen ob alle elemente vorhanden sind if (!isset($r['ID']['__DATA']) || !isset($r['USERNAME']['__DATA']) || !isset($r['LASTMODIFIED']['__DATA'])) { echo 'warn: ImportUserArray required element not defined' . "\n"; return; } if (!isset($r['DATECREATED']['__DATA'])) $r['DATECREATED']['__DATA'] = date('Y-m-d H:i:s'); if (!isset($r['PMR']['__DATA'])) $r['PMR']['__DATA'] = 0; if (removedObject($r['ID']['__DATA'])) return; // abfragen, ob user schon existiert $rs = sql("SELECT `user_id`, `last_modified` FROM `user` WHERE `uuid`='&1'", $r['ID']['__DATA']); if ($rid = sql_fetch_array($rs)) { // update if (strtotime($rid['last_modified']) < strtotime($r['LASTMODIFIED']['__DATA'])) { // existiert username schon? $rsUser = sql("SELECT `user_id` FROM `user` WHERE `username`='&1'", $r['USERNAME']['__DATA']); if ($rUser = sql_fetch_array($rsUser)) { if ($rUser['user_id'] != $rid['user_id']) { importError('user', $r['ID']['__DATA'], $r, 'new username already exists, skipping'); return; } } mysql_free_result($rsUser); sql("UPDATE `user` SET `last_modified`='&1', `username`='&2', `pmr_flag`=&3 WHERE `user_id`=&4", $r['LASTMODIFIED']['__DATA'], $r['USERNAME']['__DATA'], ($r['PMR']['__DATA'] == '0' ? '0' : '1'), $rid['user_id']); } } else { // existiert username schon? $rsUser = sql("SELECT COUNT(*) `c` FROM `user` WHERE `username`='&1'", $r['USERNAME']['__DATA']); $rUser = sql_fetch_array($rsUser); mysql_free_result($rsUser); if ($rUser['c'] > 0) { importError('user', $r['ID']['__DATA'], $r, 'username already exists, skipping'); return; } // neu anlegen sql("INSERT INTO `user` (`username`, `last_modified`, `country`, `date_created`, `uuid`, `pmr_flag`) VALUES ('&1', '&2', 'XX', '&3', '&4', &5)", $r['USERNAME']['__DATA'], $r['LASTMODIFIED']['__DATA'], $r['DATECREATED']['__DATA'], $r['ID']['__DATA'], ($r['PMR']['__DATA'] == '0' ? '0' : '1')); } mysql_free_result($rs); } function ImportCacheArray($r) { // prüfen ob alle elemente vorhanden sind if (!isset($r['ID']['__DATA']) || !isset($r['USERID']['__ATTR']['UUID']) || !isset($r['NAME']['__DATA']) || !isset($r['LONGITUDE']['__DATA']) || !isset($r['LATITUDE']['__DATA']) || !isset($r['TYPE']['__ATTR']['ID']) || !isset($r['STATUS']['__ATTR']['ID']) || !isset($r['COUNTRY']['__ATTR']['ID']) || !isset($r['SIZE']['__ATTR']['ID']) || !isset($r['DIFFICULTY']['__DATA']) || !isset($r['TERRAIN']['__DATA']) || !isset($r['RATING']['__ATTR']['WAYLENGTH']) || !isset($r['RATING']['__ATTR']['NEEDTIME']) || !isset($r['WAYPOINTS']['__ATTR']['OC']) || !isset($r['DATEHIDDEN']['__DATA']) || !isset($r['DATECREATED']['__DATA']) || !isset($r['LASTMODIFIED']['__DATA'])) { echo 'warn: ImportCacheArray required element not defined' . "\n"; return; } if (!isset($r['WAYPOINTS']['__ATTR']['GCCOM'])) $r['WAYPOINTS']['__ATTR']['GCCOM'] = ''; if (!isset($r['WAYPOINTS']['__ATTR']['NCCOM'])) $r['WAYPOINTS']['__ATTR']['NCCOM'] = ''; if ($r['RATING']['__ATTR']['NEEDTIME'] == '') $r['RATING']['__ATTR']['NEEDTIME'] = 0; if ($r['RATING']['__ATTR']['WAYLENGTH'] == '') $r['RATING']['__ATTR']['WAYLENGTH'] = 0; if (removedObject($r['ID']['__DATA'])) return; // prüfen, ob cache schon vorhanden $rs = sql("SELECT `cache_id`, `user_id`, `last_modified`, `wp_oc`, `uuid` FROM `caches` WHERE `uuid`='&1'", $r['ID']['__DATA']); if ($rc = sql_fetch_array($rs)) { if (strtotime($rc['last_modified']) < strtotime($r['LASTMODIFIED']['__DATA'])) { // user unterschiedlich? $rsUser = sql("SELECT `user_id` FROM `user` WHERE `uuid`='&1'", $r['USERID']['__ATTR']['UUID']); if ($rUser = sql_fetch_array($rsUser)) { if ($rc['user_id'] != $rUser['user_id']) { importError('cache', $r['ID']['__DATA'], $r, 'User has changed, not supported at the moment, skipping'); return; } } else { importError('cache', $r['ID']['__DATA'], $r, 'User does not exist'); return; } mysql_free_result($rsUser); // waypoint unterschiedlich? $rsWaypoint = sql("SELECT `wp_oc` FROM `caches` WHERE `uuid`='&1'", $r['ID']['__DATA']); $rWaypoint = sql_fetch_array($rsWaypoint); if ($rWaypoint['wp_oc'] != $r['WAYPOINTS']['__ATTR']['OC']) { if ($rWaypoint['wp_oc'] != null) { importError('cache', $r['ID']['__DATA'], $r, 'Waypoint does not match'); return; } else importWarn('cache', $r['ID']['__DATA'], $r, 'Waypoint does not match, i will set it'); } mysql_free_result($rsWaypoint); // update record sql("UPDATE `caches` SET `name`='&1', `longitude`=&2, `latitude`=&3, `last_modified`='&4', `date_created`='&5', `type`=&6, `status`=&7, `country`='&8', `date_hidden`='&9', `size`=&10, `difficulty`=&11, `terrain`=&12, `search_time`=&13, `way_length`=&14, `wp_gc`='&15', `wp_nc`='&16', `wp_oc`='&17' WHERE `uuid`='&18' LIMIT 1", $r['NAME']['__DATA'], $r['LONGITUDE']['__DATA'], $r['LATITUDE']['__DATA'], $r['LASTMODIFIED']['__DATA'], $r['DATECREATED']['__DATA'], $r['TYPE']['__ATTR']['ID'], $r['STATUS']['__ATTR']['ID'], $r['COUNTRY']['__ATTR']['ID'], $r['DATEHIDDEN']['__DATA'], $r['SIZE']['__ATTR']['ID'], $r['DIFFICULTY']['__DATA'], $r['TERRAIN']['__DATA'], $r['RATING']['__ATTR']['NEEDTIME'], $r['RATING']['__ATTR']['WAYLENGTH'], $r['WAYPOINTS']['__ATTR']['GCCOM'], $r['WAYPOINTS']['__ATTR']['NCCOM'], $r['WAYPOINTS']['__ATTR']['OC'], $r['ID']['__DATA']); } } else { // userid ermitteln $rsUser = sql("SELECT `user_id` FROM `user` WHERE `uuid`='&1'", $r['USERID']['__ATTR']['UUID']); if (!($rUser = sql_fetch_array($rsUser))) { importError('cache', $r['ID']['__DATA'], $r, 'User does not exist, skipping'); return; } mysql_free_result($rsUser); // waypoint prüfen $rsWp = sql("SELECT `wp_oc` FROM `caches` WHERE `wp_oc`='&1'", $r['WAYPOINTS']['__ATTR']['OC']); if (mysql_num_rows($rsWp) > 0) { importError('cache', $r['ID']['__DATA'], $r, 'Waypoint already exists, skipping'); return; } sql_fetch_array($rsWp); // insert ... sql("INSERT INTO caches (`user_id`, `name`, `longitude`, `latitude`, `last_modified`, `date_created`, `type`, `status`, `country`, `date_hidden`, `size`, `difficulty`, `terrain`, `uuid`, `search_time`, `way_length`, `wp_gc`, `wp_nc`, `wp_oc`) VALUES ( &1 , '&2', &3 , &4 , '&5', '&6', &7 , &8 , '&9', '&10', &11 , &12 , &13 , '&14', &15 , &16 , '&17', '&18', '&19')", $rUser['user_id'], $r['NAME']['__DATA'], $r['LONGITUDE']['__DATA'], $r['LATITUDE']['__DATA'], $r['LASTMODIFIED']['__DATA'], $r['DATECREATED']['__DATA'], $r['TYPE']['__ATTR']['ID'], $r['STATUS']['__ATTR']['ID'], $r['COUNTRY']['__ATTR']['ID'], $r['DATEHIDDEN']['__DATA'], $r['SIZE']['__ATTR']['ID'], $r['DIFFICULTY']['__DATA'] * 2, $r['TERRAIN']['__DATA'] * 2, $r['ID']['__DATA'], $r['RATING']['__ATTR']['NEEDTIME'], $r['RATING']['__ATTR']['WAYLENGTH'], $r['WAYPOINTS']['__ATTR']['GCCOM'], $r['WAYPOINTS']['__ATTR']['NCCOM'], $r['WAYPOINTS']['__ATTR']['OC']); } mysql_free_result($rs); } function ImportCacheDescArray($r) { /* [ID][__DATA] => 7A894AEA-59EE-673B-C56B-6BC36E12701B [CACHEID][__DATA] => 4721CD92-824D-B8AF-C1C4-FA565E8C5D27 [LANGUAGE][__ATTR][ID] => EN [SHORTDESC][__DATA] => Drive-by micro cache with a scenic view. [DESC][__ATTR][HTML] => 0 [DESC][__DATA] => This micro cache leads you. [LASTMODIFIED][__DATA] => 2005-08-22 14:03:33 */ // prüfen ob alle elemente vorhanden sind if (!isset($r['ID']['__DATA']) || !isset($r['CACHEID']['__DATA']) || !isset($r['LANGUAGE']['__ATTR']['ID']) || !isset($r['LASTMODIFIED']['__DATA'])) { echo 'error: ImportCacheDescArray required element not defined' . "\n"; return; } if (!isset($r['DESC']['__ATTR']['HTML'])) $r['DESC']['__ATTR']['HTML'] = 0; if (!isset($r['DESC']['__DATA'])) $r['DESC']['__DATA'] = ''; if (!isset($r['SHORTDESC']['__DATA'])) $r['SHORTDESC']['__DATA'] = ''; if (!isset($r['HINT']['__DATA'])) $r['HINT']['__DATA'] = ''; if ($r['DESC']['__ATTR']['HTML'] != 1) $r['DESC']['__DATA'] = nl2br(htmlspecialchars($r['DESC']['__DATA'], ENT_COMPAT, 'UTF-8')); $r['SHORTDESC']['__DATA'] = $r['SHORTDESC']['__DATA']; $r['HINT']['__DATA'] = nl2br(htmlspecialchars($r['HINT']['__DATA'], ENT_COMPAT, 'UTF-8')); if (removedObject($r['ID']['__DATA'])) return; // cachedesc schon vorhanden? $rsDesc = sql("SELECT `id`, `cache_id`, `last_modified`, `language` FROM `cache_desc` WHERE `uuid`='&1'", $r['ID']['__DATA']); if ($rDesc = sql_fetch_array($rsDesc)) { if (strtotime($rDesc['last_modified']) < strtotime($r['LASTMODIFIED']['__DATA'])) { // cacheid noch die selbe? $rsCache = sql("SELECT `uuid` FROM `caches` WHERE cache_id=&1", $rDesc['cache_id']); if (!($rCache = sql_fetch_array($rsCache))) { importError('cachedesc', $r['ID']['__DATA'], $r, 'Cache does not exist, database inconsistent, skipping'); return; } mysql_free_result($rsCache); if ($rCache['uuid'] != $r['CACHEID']['__DATA']) { importError('cachedesc', $r['ID']['__DATA'], $r, 'Cache changed, not supported'); return; } // language geändert? if ($rDesc['language'] != $r['LANGUAGE']['__ATTR']['ID']) { $rsLang = sql("SELECT `language` FROM `cache_desc` WHERE `cache_id`=&1 AND `language`='&2'", $rDesc['cache_id'], $r['LANGUAGE']['__ATTR']['ID']); if (mysql_num_rows($rsLang) > 0) { importError('cachedesc', $r['ID']['__DATA'], $r, 'new language already exists!'); return; } mysql_free_result($rsLang); } // update sql("UPDATE `cache_desc` SET `language`='&1', `desc`='&2', `desc_html`=&3, `hint`='&4', `short_desc`='&5', `last_modified`='&6' WHERE `id`=&7 LIMIT 1", $r['LANGUAGE']['__ATTR']['ID'], $r['DESC']['__DATA'], ($r['DESC']['__ATTR']['HTML'] == 1 ? '1' : '0'), $r['HINT']['__DATA'], $r['SHORTDESC']['__DATA'], $r['LASTMODIFIED']['__DATA'], $rDesc['id']); } } else { // cacheid ermitteln $rsCache = sql("SELECT `cache_id` FROM `caches` WHERE `uuid`='&1'", $r['CACHEID']['__DATA']); if (!($rCache = sql_fetch_array($rsCache))) { importError('cachedesc', $r['ID']['__DATA'], $r, 'Cache does not exist, skipping'); return; } mysql_free_result($rsCache); // existiert bereits eine beschreibung in der sprache für diesen cache? $rsCount = sql("SELECT COUNT(*) `c` FROM `cache_desc` WHERE `cache_id`=&1 AND `language`='&2'", $rCache['cache_id'], $r['LANGUAGE']['__ATTR']['ID']); $rCount = sql_fetch_array($rsCount); if ($rCount['c'] > 0) { importError('cachedesc', $r['ID']['__DATA'], $r, 'Cache already has an describtion is this language, skipping'); return; } mysql_free_result($rsCount); sql("INSERT INTO `cache_desc` (`cache_id`, `language`, `desc`, `desc_html`, `hint`, `short_desc`, `last_modified`, `uuid`) VALUES ( &1 , '&2', '&3', &4 , '&5', '&6', '&7', '&8')", $rCache['cache_id'], $r['LANGUAGE']['__ATTR']['ID'], $r['DESC']['__DATA'], ($r['DESC']['__ATTR']['HTML'] == 1 ? '1' : '0'), $r['HINT']['__DATA'], $r['SHORTDESC']['__DATA'], $r['LASTMODIFIED']['__DATA'], $r['ID']['__DATA']); } mysql_free_result($rsDesc); } function ImportCachelogArray($r) { /* [ID][__DATA] => A2D85008-3F10-1B6F-C97F-01B47AA380F3 [CACHEID][__DATA] => 42264069-CDD6-5997-104A-AEDA9CEF4E18 [USERID][__ATTR][UUID] => B97CE517-4D74-B6CE-BED8-EF76662FB7EE [LOGTYPE][__ATTR][ID] => 3 [DATE][__DATA] => 2002-08-25 [TEXT][__DATA] => > Was hat es denn historisch mit dem Heidentor auf sich ? [DATECREATED][__DATA] => 2005-08-14 19:44:01 [LASTMODIFIED][__DATA] => 2005-08-14 19:44:01 */ if (!isset($r['ID']['__DATA']) || !isset($r['CACHEID']['__DATA']) || !isset($r['USERID']['__ATTR']['UUID']) || !isset($r['LOGTYPE']['__ATTR']['ID']) || !isset($r['DATE']['__DATA']) || !isset($r['DATECREATED']['__DATA']) || !isset($r['LASTMODIFIED']['__DATA'])) { echo 'error: ImportCachelogArray required element not defined' . "\n"; return; } if (!isset($r['TEXT']['__DATA'])) $r['TEXT']['__DATA'] = ''; if (removedObject($r['ID']['__DATA'])) return; // existiert cache? $rsCache = sql("SELECT `cache_id` FROM `caches` WHERE `uuid`='&1'", $r['CACHEID']['__DATA']); if (!($rCache = sql_fetch_array($rsCache))) { importError('cachelog', $r['ID']['__DATA'], $r, 'Cache does not exist, skipping'); return; } // existiert user? $rsUser = sql("SELECT `user_id` FROM `user` WHERE `uuid`='&1'", $r['USERID']['__ATTR']['UUID']); if (!($rUser = sql_fetch_array($rsUser))) { importError('cachelog', $r['ID']['__DATA'], $r, 'User does not exist, skipping'); return; } // logtype gültig? if (sqlValue("SELECT COUNT(*) FROM `log_types` WHERE `id`='" . sql_escape($r['LOGTYPE']['__ATTR']['ID']) . "'", 0) == 0) { importError('cachelog', $r['ID']['__DATA'], $r, 'Logtype not valid, skipping'); return; } $rsLog = sql("SELECT `id`, `last_modified`, `user_id`, `cache_id`, `type` FROM `cache_logs` WHERE `uuid`='&1'", $r['ID']['__DATA']); if ($rLog = sql_fetch_array($rsLog)) { if (strtotime($rLog['last_modified']) < strtotime($r['LASTMODIFIED']['__DATA'])) { if ($rLog['cache_id'] != $rCache['cache_id']) { importError('cachelog', $r['ID']['__DATA'], $r, 'Cache_id changed, not supported, skipping'); return; } if ($rLog['user_id'] != $rUser['user_id']) { importError('cachelog', $r['ID']['__DATA'], $r, 'User_id changed, not supported, skipping'); return; } sql("UPDATE `cache_logs` SET `type`=&1, `date`='&2', `text`='&3', `last_modified`='&4', `uuid`='&5', `date_created`='&6' WHERE `id`=&7", $r['LOGTYPE']['__ATTR']['ID'], date('Y-m-d', strtotime($r['DATE']['__DATA'])), $r['TEXT']['__DATA'], date('Y-m-d H:i:s', strtotime($r['LASTMODIFIED']['__DATA'])), $r['ID']['__DATA'], date('Y-m-d H:i:s', strtotime($r['DATECREATED']['__DATA'])), $rLog['id']); } } else { // log eintragen sql("INSERT INTO `cache_logs` (`cache_id`, `user_id`, `type`, `date`, `text`, `last_modified`, `uuid`, `date_created`, `owner_notified`) VALUES (&1 , &2 , &3 , '&4' , '&5' , '&6' , '&7' , '&8' , 1)", $rCache['cache_id'], $rUser['user_id'], $r['LOGTYPE']['__ATTR']['ID'], date('Y-m-d', strtotime($r['DATE']['__DATA'])), $r['TEXT']['__DATA'], date('Y-m-d H:i:s', strtotime($r['LASTMODIFIED']['__DATA'])), $r['ID']['__DATA'], date('Y-m-d H:i:s', strtotime($r['DATECREATED']['__DATA'])) ); } } function ImportPictureArray($r) { /* [ID][__DATA] => DCFDE050-B42F-A76A-E9C7-BCCCC8812A23 [URL][__DATA] => http://www.opencaching.de/images/uploads/DCFDE050-B42F-A76A-E9C7-BCCCC8812A23.jpg [TITLE][__DATA] => Cache [OBJECT][__ATTR][TYPE] => 2 [OBJECT][__DATA] => 42264069-CDD6-5997-104A-AEDA9CEF4E18 [DATECREATED][__DATA] => 2005-08-20 19:01:37 [LASTMODIFIED][__DATA] => 2005-08-20 19:01:37 */ if (!isset($r['ID']['__DATA']) || !isset($r['URL']['__DATA']) || !isset($r['OBJECT']['__ATTR']['TYPE']) || !isset($r['OBJECT']['__DATA']) || !isset($r['ATTRIBUTES']['__ATTR']['SPOILER']) || !isset($r['ATTRIBUTES']['__ATTR']['DISPLAY']) || !isset($r['DATECREATED']['__DATA']) || !isset($r['LASTMODIFIED']['__DATA'])) { echo 'error: ImportPictureArray required element not defined ' . "\n"; return; } if (!isset($r['TITLE']['__DATA'])) $r['TITLE']['__DATA'] = ''; if (removedObject($r['ID']['__DATA'])) return; // prüfen, ob object existiert und user_id ermitteln switch ($r['OBJECT']['__ATTR']['TYPE']) { case 1: $rsObject = sql("SELECT `id` `object_id`, `user_id` FROM `cache_logs` WHERE `uuid`='&1'", $r['OBJECT']['__DATA']); break; case 2: $rsObject = sql("SELECT `cache_id` `object_id`, `user_id` FROM `caches` WHERE `uuid`='&1'", $r['OBJECT']['__DATA']); break; default: importError('picture', $r['ID']['__DATA'], $r, 'object_type, not supported, skipping'); return; } $rObject = sql_fetch_array($rsObject); mysql_free_result($rsObject); if ($rObject == false) { importError('picture', $r['ID']['__DATA'], $r, 'object not found, skipping'); return; } $rsPicture = sql("SELECT `id`, `object_id`, `object_type`, `last_modified`, `user_id` FROM `pictures` WHERE `uuid`='&1'", $r['ID']['__DATA']); if ($rPicture = sql_fetch_array($rsPicture)) { if (strtotime($rPicture['last_modified']) < strtotime($r['LASTMODIFIED']['__DATA'])) { // user_id noch gleich? if ($rPicture['user_id'] != $rObject['user_id']) { importError('picture', $r['ID']['__DATA'], $r, 'user_id changed, not supported, skipping'); return; } // object noch das selbe? if (($rPicture['object_id'] != $rObject['object_id']) || ($rPicture['object_type'] != $r['OBJECT']['__ATTR']['TYPE'])) { importError('picture', $r['ID']['__DATA'], $r, 'object changed, not supported, skipping'); return; } sql("UPDATE `pictures` SET `url`='&1', `last_modified`='&2', `title`='&3', `date_created`='&4', `spoiler`=&5, `local`=0, `display`=&6 WHERE `id`=&7", $r['URL']['__DATA'], date('Y-m-d H:i:s', strtotime($r['LASTMODIFIED']['__DATA'])), $r['TITLE']['__DATA'], date('Y-m-d H:i:s', strtotime($r['DATECREATED']['__DATA'])), $r['ATTRIBUTES']['__ATTR']['SPOILER'], $r['ATTRIBUTES']['__ATTR']['DISPLAY'], $rPicture['id']); } } else { sql("INSERT INTO `pictures` (`uuid`, `url`, `last_modified`, `title`, `date_created`, `object_id`, `object_type`, `user_id`, `spoiler`, `local`, `display`) VALUES ('&1' , '&2' , '&3' , '&4' , '&5' , &6 , &7 , &8 , &9 , 0 , &10)", $r['ID']['__DATA'], $r['URL']['__DATA'], date('Y-m-d H:i:s', strtotime($r['LASTMODIFIED']['__DATA'])), $r['TITLE']['__DATA'], date('Y-m-d H:i:s', strtotime($r['DATECREATED']['__DATA'])), $rObject['object_id'], $r['OBJECT']['__ATTR']['TYPE'], $rObject['user_id'], $r['ATTRIBUTES']['__ATTR']['SPOILER'], $r['ATTRIBUTES']['__ATTR']['DISPLAY'] ); } } function ImportRemovedObjectArray($r) { /* [OBJECT][__ATTR][TYPE] => 1 [OBJECT][__DATA] => CA1FCA8F-DEED-06D8-F971-53634CC91AEC [REMOVEDDATE][__DATA] => 2005-08-14 19:31:32 */ if (!isset($r['OBJECT']['__ATTR']['TYPE']) || !isset($r['OBJECT']['__DATA']) || !isset($r['REMOVEDDATE']['__DATA'])) { echo 'error: ImportRemovedObjectArray required element not defined' . "\n"; return; } $localid = 0; switch ($r['OBJECT']['__ATTR']['TYPE']) { case 1: // cachelog $rsLog = sql("SELECT `cache_id`, `user_id`, `type` FROM `cache_logs` WHERE `uuid`='&1'", $r['OBJECT']['__DATA']); if ($rLog = sql_fetch_array($rsLog)) { sql("DELETE FROM `cache_logs` WHERE `uuid`='&1'", $r['OBJECT']['__DATA']); } break; case 2: // cache $rsCache = sql("SELECT `user_id` FROM `caches` WHERE `uuid`='&1'", $r['OBJECT']['__DATA']); if ($rCache = sql_fetch_array($rsCache)) { sql("DELETE FROM `caches` WHERE `uuid`='&1'", $r['OBJECT']['__DATA']); } break; case 3: // cachedesc $rsDesc = sql("SELECT `cache_id` FROM `cache_desc` WHERE `uuid`='&1'", $r['OBJECT']['__DATA']); if ($rDesc = sql_fetch_array($rsDesc)) { sql("DELETE FROM `cache_desc` WHERE `uuid`='&1'", $r['OBJECT']['__DATA']); } break; case 4: // user $rsUser = sql("SELECT `user_id` FROM `user` WHERE `uuid`='&1'", $r['OBJECT']['__DATA']); if ($rUser = sql_fetch_array($rsUser)) { sql("DELETE FROM `user` WHERE `uuid`='&1'", $r['OBJECT']['__DATA']); } break; case 6: // picture $rsPicture = sql("SELECT `object_id`, `object_type` FROM `pictures` WHERE `uuid`='&1'", $r['OBJECT']['__DATA']); if ($rPicture = sql_fetch_array($rsPicture)) { sql("DELETE FROM `pictures` WHERE `uuid`='&1'", $r['OBJECT']['__DATA']); switch ($rPicture['object_type']) { case 1: $rsCounter = sql("SELECT COUNT(*) `count` FROM `pictures` WHERE `object_type`=1 AND `object_id`=&1", $rPicture['object_id']); $rCounter = sql_fetch_array($rsCounter); mysql_free_result($rsCounter); break; case 2: $rsCounter = sql("SELECT COUNT(*) `count` FROM `pictures` WHERE `object_type`=2 AND `object_id`=&1", $rPicture['object_id']); $rCounter = sql_fetch_array($rsCounter); mysql_free_result($rsCounter); break; default: importError('removedobject (picture)', $r['OBJECT']['__DATA'], $r, 'object type not supported, skipping'); return; } } break; default: importError('removedobject', $r['OBJECT']['__DATA'], $r, 'object type not supported, skipping'); return; } // in removed_object einfügen ... $rs = sql("SELECT * FROM `removed_objects` WHERE `uuid`='&1'", $r['OBJECT']['__DATA']); if (mysql_num_rows($rs) == 0) { sql("INSERT INTO `removed_objects` (`uuid`, `localid`, `type`, `removed_date`) VALUES ('&1', &2, &3, '&4')", $r['OBJECT']['__DATA'], $localid, $r['OBJECT']['__ATTR']['TYPE'], date('Y-m-d H:i:s', strtotime($r['REMOVEDDATE']['__DATA'])) ); } } function removedObject($uuid) { $rs = sql("SELECT `id` FROM `removed_objects` WHERE `uuid`='&1'", $uuid); if ($r = sql_fetch_array($rs)) return true; else return false; } function importError($recordtype, $uuid, $r, $info) { echo 'error: ' . $recordtype . ' (' . $uuid . '): ' . $info . "\n"; } function importWarn($recordtype, $uuid, $r, $info) { echo 'warn: ' . $recordtype . ' (' . $uuid . '): ' . $info . "\n"; } function restorevalues() { $rs = sql('SELECT `replication_overwritetypes`.`table` `table`, `replication_overwritetypes`.`field` `field`, `replication_overwritetypes`.`uuid_fieldname` `uuid_fieldname`, `replication_overwrite`.`value` `value`, `replication_overwrite`.`uuid` `uuid` FROM `replication_overwrite`, `replication_overwritetypes` WHERE `replication_overwrite`.`type` = `replication_overwritetypes`.`id`'); while ($r = sql_fetch_array($rs)) { sql("UPDATE `&1` SET `&2`='&3' WHERE `&4`='&5' LIMIT 1", $r['table'], $r['field'], $r['value'], $r['uuid_fieldname'], $r['uuid']); } mysql_free_result($rs); } ?>