function ImportSingleWebsite($filename) { $unix = new unix(); $GLOBALS["PROGRESS_FILE"] = "/usr/share/artica-postfix/ressources/logs/wordpress.import.{$filename}.progress"; $password = null; $gzip = $unix->find_program("gzip"); $tar = $unix->find_program("tar"); $rm = $unix->find_program("rm"); $gunzip = $unix->find_program("gunzip"); $mysql = $unix->find_program("mysql"); $php = $unix->LOCATE_PHP5_BIN(); build_progress("{$filename}: Checking", 20); $content_file = dirname(__FILE__) . "/ressources/conf/upload/{$filename}"; echo "Checking {$content_file}\n"; if (!is_file($content_file)) { build_progress("{$filename}: {$content_file} no such file", 110); return; } $TMP_PATH = $unix->TEMP_DIR() . "/" . time(); @mkdir($TMP_PATH, 0755, true); @copy($content_file, "{$TMP_PATH}/{$filename}"); $serialize = "{$TMP_PATH}/config.serialize"; //@unlink($content_file); build_progress("{$filename}: {extracting}", 30); echo "Extracting {$TMP_PATH}/{$filename} to {$TMP_PATH}\n"; system("tar xvf {$TMP_PATH}/{$filename} -C {$TMP_PATH}/"); if (!is_file("{$TMP_PATH}/wordpress.tar.gz")) { build_progress("{$filename}: wordpress.tar.gz no such file", 110); return; } if (!is_file("{$TMP_PATH}/database.gz")) { build_progress("{$filename}: database.gz no such file", 110); return; } $size = @filesize($serialize); echo "Checking {$serialize} {$size}Bytes\n"; if (!is_file("{$serialize}")) { build_progress("{$filename}: config.seralize no such file", 110); return; } build_progress("{$filename}: Extracting parameters..", 30); $content = @file_get_contents($serialize); $content = unserialize(base64_decode($content)); print_r($content); if (!isset($content["servername"])) { build_progress("{$filename}: config.seralize no such servername key", 110); return; } $ADD = false; $q = new mysql(); $servername = $content["servername"]; while (list($index, $data) = each($content)) { $fieldAdds[] = "`{$index}`"; $fieldAddsVals[] = "'" . mysql_escape_string2($data) . "'"; $FieldsEdit[] = "`{$index}` = '" . mysql_escape_string2($data) . "'"; } $sqlADD = "INSERT IGNORE INTO freeweb (" . @implode(",", $fieldAdds) . ") VALUES (" . @implode(",", $fieldAddsVals) . ")"; $sqlEdit = "UPDATE freeweb SET " . @implode(",", $FieldsEdit) . " WHERE servername='{$servername}'"; $ligne = @mysql_fetch_array($q->QUERY_SQL("SELECT * from freeweb WHERE servername='{$servername}'", "artica_backup")); if (!$q->ok) { build_progress("{$filename}: {failed}", 110); echo "Fatal {$q->mysql_error} SELECT * from freeweb WHERE servername='{$servername}'\n"; return; } $sql = $sqlEdit; if (trim($ligne["servername"]) == null) { $ADD = true; } if ($ADD) { $sql = $sqlADD; } build_progress("{$filename}: importing parameters..", 35); $free = new freeweb($servername); if (!$free->patchTable()) { build_progress("{$filename}: Patching tables {failed}", 110); echo "Fatal {$q->mysql_error}\n"; return; } $q->QUERY_SQL($sql, "artica_backup"); if (!$q->ok) { build_progress("{$filename}: importing parameters {failed}", 110); echo "Fatal {$q->mysql_error}\n"; return; } $WORKDIR = $free->www_dir; build_progress("{$filename}: Restoring {$WORKDIR}..", 40); @mkdir($WORKDIR, 0755, true); system("tar xf {$TMP_PATH}/wordpress.tar.gz -C {$WORKDIR}/"); build_progress("{$filename}: Restoring {$WORKDIR} OK..", 45); $database = $free->mysql_database; build_progress("{$filename}: Restoring DATABASE {$database}..", 50); shell_exec("{$gunzip} -c {$TMP_PATH}/database.gz >{$TMP_PATH}/database.sql"); if ($q->mysql_password != null) { $password = "******" . $unix->shellEscapeChars($q->mysql_password); } $t = time(); exec("{$mysql} --force -u root{$password} -S /var/run/mysqld/mysqld.sock {$database} < {$TMP_PATH}/database.sql 2>&1", $results); while (list($index, $line) = each($results)) { $line = trim($line); if ($line == null) { continue; } echo "{$line}\n"; if (preg_match("^ERROR\\s+[0-9]+#", $line)) { build_progress("{$filename}: Restoring DATABASE {$database} {failed}", 110); return; } } build_progress("{$filename}: Removing temporary directory", 55); shell_exec("{$rm} -rf {$TMP_PATH}"); build_progress("{$filename}: Reconfiguring {$servername}", 55); system("{$php} /usr/share/artica-postfix/exec.wordpress.php \"{$servername}\""); build_progress("{$filename}: Adding {$servername} to web service", 60); system("{$php} /usr/share/artica-postfix/exec.freeweb.php --sitename \"{$servername}\""); build_progress("{$filename}: {$servername} {done}", 100); @unlink($content_file); }