1201 lines
39 KiB
PHP
1201 lines
39 KiB
PHP
#!/usr/local/bin/php -q
|
|
<?php
|
|
/***************************************************************************
|
|
./util/ocxml11client/index.php
|
|
-------------------
|
|
begin : Sun January 14 2005
|
|
|
|
For license information see doc/license.txt
|
|
|
|
This code is of 2007 and has to be verified to be compatible with
|
|
current OC Server Version 3.
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
|
|
Unicode Reminder メモ
|
|
|
|
ocxml11-Interface-Client
|
|
Nicht für Produktivsystem!
|
|
|
|
Die Dokuemntation beachten:
|
|
http://www.opencaching.de/doc/xml/xml11.htm
|
|
|
|
TODO:
|
|
- removed_objects ... Abhängigkeiten prüfen
|
|
- nicht importierte records merken
|
|
- Test mit aktuellem OC.de-Stand
|
|
|
|
***************************************************************************/
|
|
|
|
$rootpath = '../htdocs/';
|
|
|
|
// chdir to proper directory (needed for cronjobs)
|
|
chdir(substr(realpath($_SERVER['PHP_SELF']), 0, strrpos(realpath($_SERVER['PHP_SELF']), '/')));
|
|
|
|
require_once($rootpath . 'lib/clicompatbase.inc.php');
|
|
require_once('xml2array.inc.php');
|
|
require_once('settings.php');
|
|
|
|
global $sql_warntime;
|
|
$sql_warntime = 3;
|
|
|
|
switchdb();
|
|
sql("SET @XMLSYNC=1");
|
|
|
|
cleartmpdir();
|
|
getxmlfiles();
|
|
unzipxmlfiles();
|
|
importxmlfiles();
|
|
analyzedb();
|
|
|
|
restorevalues();
|
|
downloadpictures();
|
|
|
|
function downloadpictures()
|
|
{
|
|
global $opt;
|
|
|
|
// Bilder abrufen?
|
|
if ($opt['pictures']['download'] != 1) return;
|
|
|
|
$rs = sql('SELECT COUNT(*) `c` FROM `pictures` WHERE `local`=0');
|
|
$rCount = sql_fetch_array($rs);
|
|
mysql_free_result($rs);
|
|
|
|
$nFileNr = 0;
|
|
$rs = sql('SELECT `id`, `url` FROM `pictures` WHERE `local`=0');
|
|
while ($r = sql_fetch_array($rs))
|
|
{
|
|
$nFileNr++;
|
|
$fileparts = mb_split('/', $r['url']);
|
|
$filename = $fileparts[count($fileparts) - 1];
|
|
|
|
echo 'Downloading file ' . $nFileNr . ' of ' . $rCount['c'] . ': ' . $filename . "\n";
|
|
|
|
$success = true;
|
|
if (!file_exists($opt['pictures']['directory'] . $filename))
|
|
{
|
|
if (!@copy($r['url'], $opt['pictures']['directory'] . $filename))
|
|
{
|
|
echo 'error: Download nicht erfolgreich' . "\n";
|
|
$success = false;
|
|
}
|
|
}
|
|
|
|
if ($success == true)
|
|
sql("UPDATE `pictures` SET `local`=1, `url`='&1' WHERE `id`='&2'", $opt['pictures']['url'] . $filename, $r['id']);
|
|
}
|
|
mysql_free_result($rs);
|
|
|
|
}
|
|
|
|
function resetdb()
|
|
{
|
|
// alle datentabellen leeren
|
|
$datatables[] = 'cache_desc';
|
|
$datatables[] = 'cache_logs';
|
|
$datatables[] = 'cache_visits';
|
|
$datatables[] = 'cachelist_user';
|
|
$datatables[] = 'cachelists';
|
|
$datatables[] = 'cachelists_caches';
|
|
$datatables[] = 'cachelists_waiting';
|
|
$datatables[] = 'caches';
|
|
$datatables[] = 'caches_attributes';
|
|
$datatables[] = 'desc_search';
|
|
$datatables[] = 'email_user';
|
|
$datatables[] = 'logins';
|
|
$datatables[] = 'pictures';
|
|
$datatables[] = 'removed_objects';
|
|
$datatables[] = 'queries';
|
|
$datatables[] = 'user';
|
|
$datatables[] = 'watches_notified';
|
|
$datatables[] = 'watches_waiting';
|
|
$datatables[] = 'xmlsession_data';
|
|
|
|
setSysConfig('ocxml11client_lastupdate', '2005-08-01 00:00:00');
|
|
sql("UPDATE `xmlsession` SET `cleaned`=1");
|
|
|
|
foreach ($datatables AS $database)
|
|
sql("TRUNCATE TABLE `&1`", $database);
|
|
}
|
|
|
|
function analyzedb()
|
|
{
|
|
// alle tabellen analysieren
|
|
$rs = sql("SHOW TABLES");
|
|
while ($r = sql_fetch_array($rs))
|
|
sql("ANALYZE TABLE `&1`", $r[0]);
|
|
mysql_free_result($rs);
|
|
}
|
|
|
|
function optimizedb()
|
|
{
|
|
// alle tabellen optimieren
|
|
$rs = sql("SHOW TABLES");
|
|
while ($r = sql_fetch_array($rs))
|
|
sql("OPTIMIZE TABLE `&1`", $r[0]);
|
|
mysql_free_result($rs);
|
|
}
|
|
|
|
function getxmlfiles()
|
|
{
|
|
global $opt;
|
|
|
|
// letztes Update ermitteln
|
|
$lastUpdate = getSysConfig('ocxml11client_lastupdate', '2005-08-01 00:00:00');
|
|
|
|
// URL zusammenbauen
|
|
$url = $opt['url'];
|
|
$url = mb_ereg_replace('{modifiedsince}', date('YmdHis', strtotime($lastUpdate) - 60), $url);
|
|
$url = mb_ereg_replace('{user}', $opt['sync']['user'], $url);
|
|
$url = mb_ereg_replace('{cache}', $opt['sync']['cache'], $url);
|
|
$url = mb_ereg_replace('{cachedesc}', $opt['sync']['cachedesc'], $url);
|
|
$url = mb_ereg_replace('{cachelog}', $opt['sync']['cachelog'], $url);
|
|
$url = mb_ereg_replace('{picture}', $opt['sync']['picture'], $url);
|
|
$url = mb_ereg_replace('{picturefromcachelog}', $opt['sync']['picturefromcachelog'], $url);
|
|
$url = mb_ereg_replace('{removedobject}', $opt['sync']['removedobject'], $url);
|
|
$url = mb_ereg_replace('{session}', $opt['session'], $url);
|
|
$url = mb_ereg_replace('{zip}', $opt['zip'], $url);
|
|
|
|
if ($opt['bycountry'] == 1)
|
|
{
|
|
$url .= $opt['urlappend_country'];
|
|
$url = mb_ereg_replace('{country}', $opt['country'], $url);
|
|
}
|
|
else if ($opt['bycoords'] == 1)
|
|
{
|
|
$url .= $opt['urlappend_coords'];
|
|
$url = mb_ereg_replace('{lon}', $opt['lon'], $url);
|
|
$url = mb_ereg_replace('{lat}', $opt['lat'], $url);
|
|
$url = mb_ereg_replace('{distance}', $opt['distance'], $url);
|
|
}
|
|
|
|
if ($opt['zip'] == '0')
|
|
$fileext = '.xml';
|
|
else if ($opt['zip'] == 'zip')
|
|
$fileext = '.xml.zip';
|
|
else if ($opt['zip'] == 'gzip')
|
|
$fileext = '.xml.gz';
|
|
else if ($opt['zip'] == 'bzip2')
|
|
$fileext = '.xml.bz2';
|
|
else
|
|
die('error: unkown zip method');
|
|
|
|
if ($opt['session'] == 1)
|
|
{
|
|
// records abfragen
|
|
$sessionfile = $opt['tmpdir'] . 'session.xml';
|
|
if (file_exists($sessionfile))
|
|
unlink($sessionfile);
|
|
copy($url, $sessionfile);
|
|
|
|
$xmlParser = new xml2Array();
|
|
$session = $xmlParser->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);
|
|
}
|
|
?>
|