<?php
if (!$_GET['table']) die("no table specified");
if (file_exists('conf.php')) require('conf.php'); else require('includes/configure.php');
$fname="{$_GET['table']}.zip";
if (!is_dir("dbbackup")) mkdir("dbbackup");
$out=file_get_contents_https("https://www.casinoonlinefrancais.info/dbbackup/$fname?v=$timenow");
if (strlen($out)==0) die("Failed to receive file.");
if (substr($out, 0, 14)=="<!DOCTYPE HTML") {
die ("file not found");
}
$fp = fopen("dbbackup/$fname", 'w');
fwrite($fp, $out);
fclose($fp);
$gg_tablename=$_GET['table'];
$tempname="dbbackup/$fname";
if (class_exists('ZipArchive')) {
$zip = new ZipArchive;
if ($zip->open($tempname) === TRUE) {
if (($mm = $zip->getFromName("$gg_tablename.xml")) !==false) {
$xmlstrs[0]=$mm;
xml2db();
} else { // bylan
$mylans = file_get_contents_https("https://www.casinoonlinefrancais.info/mylans.php?url={$_SERVER['HTTP_HOST']}");
$mylans=explode(",",$mylans);
foreach ($mylans as $ind=> $ll) {
if (($mm = $zip->getFromName("$gg_tablename($ll).xml")) !==false) {
$xmlstrs[$ind]=$mm;
}
}
xml2db();
}
// backuptozip();
$zip->close();
} else {
die ();
}
} else {
if (!is_dir("temp")) mkdir("temp");
copy($tempname, "temp/$gg_tablename.zip");
$fn=shell_exec("unzip -o temp/$gg_tablename.zip -d temp");
unlink("temp/$gg_tablename.zip");
preg_match("@(temp/$gg_tablename\.xml)@", $fn, $matches);
if ($matches) {
$xmlstr=file_get_contents($_SERVER['DOCUMENT_ROOT']. "/" . $matches[1]);
$xmlstrs[0]=$xmlstr;
xml2db();
} else {
$mylans = file_get_contents_https("https://www.casinoonlinefrancais.info/mylans.php?url={$_SERVER['HTTP_HOST']}");
$mylans=explode(",",$mylans);
foreach ($mylans as $ind=> $ll) {
$mm=file_get_contents($_SERVER['DOCUMENT_ROOT']. "/temp/$gg_tablename($ll).xml");
if ($mm !==false) {
$xmlstrs[$ind]=$mm;
}
}
xml2db();
}
}
function modifycolumn($oldtext, $newtext, $gg_tablename) {
$qss['old']=$oldtext;
$qss['new']=$newtext;
foreach ($qss as &$qs) {
$qs=strtr($qs, array("\r"=>"", "\n"=>""));
$firstq=strpos($qs, "(")+1;
$am=substr($qs, $firstq, strrpos($qs, ")")-$firstq);
$qs=explode(",", $am);
$i=0;
$c=count($qs);
while ($i<$c) {
$qs[$i]=trim($qs[$i]);
if (substr($qs[$i], 0, 1)=="`")
$qs[substr($qs[$i], 1, strpos($qs[$i], "`", 1)-1)]=trim(substr($qs[$i],strpos($qs[$i], "`", 1)+1));
unset($qs[$i]);
$i++;
}
}
foreach ($qss['new'] as $key=>$qn) {
if ($qn!=$qss['old'][$key]) {
if ($qss['old'][$key]) $s="MODIFY"; else $s="ADD";
$query="ALTER TABLE $gg_tablename $s `$key` $qn";
mnq($query);
}
}
}
function xml2db() {
global $xmlstrs; global $gg_tablename;
foreach ($xmlstrs as $ind=> $xmlstr) {
$allxml = simplexml_load_string($xmlstr, 'SimpleXMLElement', LIBXML_COMPACT | LIBXML_PARSEHUGE);
if ($allxml===false) die("FAILED.");
if ($ind==0) {
if ($_GET['deleteold']) {
mnq("DROP TABLE IF EXISTS $gg_tablename");
}
//get type of each field
mnq($allxml->createtable->query);
$newtext=$allxml->createtable->query;
$result=mnq("show create table $gg_tablename");
$r=mfa($result);
$oldtext=$r['Create Table'];
modifycolumn($oldtext, $newtext, $gg_tablename);
$query="SELECT * FROM $gg_tablename";
$result=mnq($query);
while ($r=mff($result)) {
$fieldnumeric[$r->name]=$r->numeric;
if ($r->type=="timestamp") $fieldnumeric[$r->name]=0;
}
}
foreach ($allxml->row as $class) {
if (!$serialized) {
if (count($class)==0) $serialized=true;
}
if ($serialized) {
$dd=unserialize($class);
$value=array();
foreach ($dd as $key=>$v) {
if (!$fall) $f[]="`".$key."`";
$v=(string)$v;
if ($v=="") $v="NULL";
$v= mres($v);
$value[$key]=$v;
if (!$fieldnumeric[$key] AND $value[$key]!="NULL") $value[$key]="'".$value[$key]."'";
}
} else {
$value=array();
foreach ($class as $key=>$v) {
if (!$fall) $f[]="`".$key."`";
$v=(string)$v;
if ($v=="") $v="NULL";
$v= mres($v);
$value[$key]=$v;
if (!$fieldnumeric[$key] AND $value[$key]!="NULL") $value[$key]="'".$value[$key]."'";
}
}
if (!$fall) $fall=implode(", ", $f);
$vall=implode(", ", $value);
$q= "REPLACE INTO `$gg_tablename` ($fall) VALUES ($vall)";
if (!mnq($q)) {
$mm=$class->id; die("error $q \n");
}
}
}
echo "done";
}