function duplicate_wordpress($servername) { $unix = new unix(); $q = new mysql(); $free = new freeweb($servername); $WORKING_DIRECTORY = $free->www_dir; if ($free->groupware_duplicate == null) { build_progress("{$servername}: {duplicate} {$servername} no duplicate set...", 42); sleep(2); return false; } $free2 = new freeweb($free->groupware_duplicate); if ($free2->mysql_database == null) { echo "Fatal: {$free->groupware_duplicate} did not have any such DB set, try to find it..\n"; $free2->mysql_database = $free2->CreateDatabaseName(); echo "Fatal: {$free->groupware_duplicate} = {$free2->mysql_database}\n"; } if (!$q->DATABASE_EXISTS($free2->mysql_database, true)) { build_progress("{$servername}: {duplicate} {$free->groupware_duplicate} did not have any database...", 42); sleep(2); return false; } $srcdir = $free2->www_dir; $Mysqlpassword = null; $cp = $unix->find_program("cp"); $rm = $unix->find_program("rm"); if (@is_link($WORKING_DIRECTORY)) { $WORKING_DIRECTORY = @readlink($WORKING_DIRECTORY); } if (is_dir($WORKING_DIRECTORY)) { build_progress("{$servername}: {removing} {$WORKING_DIRECTORY}...", 42); sleep(2); shell_exec("{$rm} -rf {$WORKING_DIRECTORY}/*"); } @mkdir($WORKING_DIRECTORY, 0755, true); build_progress("{$servername}: {installing} {from} {$srcdir}...", 42); shell_exec("{$cp} -rf {$srcdir}/* {$WORKING_DIRECTORY}/"); $wordpressDB = $free->mysql_database; if ($wordpressDB == null) { $wordpressDB = $free->CreateDatabaseName(); } if ($q->DATABASE_EXISTS($wordpressDB)) { build_progress("{$servername}: {remove_database} {$wordpressDB}...", 42); sleep(2); if (!$q->DELETE_DATABASE($wordpressDB)) { build_progress("{$servername}: {remove_database} {$wordpressDB} {failed}...", 42); return false; } if (!$q->CREATE_DATABASE($wordpressDB, true)) { build_progress("{$servername}: {create_database} {$wordpressDB} {failed}...", 42); return false; } } if (!$q->DATABASE_EXISTS($wordpressDB)) { if (!$q->CREATE_DATABASE($wordpressDB, true)) { build_progress("{$servername}: {create_database} {$wordpressDB} {failed}...", 42); return false; } } build_progress("{$servername}: {backup_database} {from} {$free2->mysql_database}...", 42); $mysqldump = $unix->find_program("mysqldump"); $q = new mysql(); if ($q->mysql_password != null) { $Mysqlpassword = "******" . $unix->shellEscapeChars($q->mysql_password); } $t = time(); $TMP_FILE = $unix->FILE_TEMP(); $cmdline = trim("{$mysqldump} --add-drop-table --single-transaction --force --insert-ignore -S /var/run/mysqld/mysqld.sock -u {$q->mysql_admin}{$Mysqlpassword} {$free2->mysql_database} >{$TMP_FILE} 2>&1"); if ($GLOBALS["VERBOSE"]) { echo "{$cmdline}\n"; } $results = array(); exec($cmdline, $results); while (list($num, $ligne) = each($results)) { echo "{$ligne}\n"; if (preg_match("#ERROR\\s+([0-9]+)#", $ligne)) { build_progress("{$servername}: {restore_database} {to} {$wordpressDB} {failed}..", 42); sleep(3); return false; } } build_progress("{$servername}: {restore_database} {to} {$wordpressDB}..", 42); $mysqlbin = $unix->find_program("mysql"); $cmd = "{$mysqlbin} --batch --force -S /var/run/mysqld/mysqld.sock -u {$q->mysql_admin}{$Mysqlpassword} --database={$wordpressDB} <{$TMP_FILE} 2>&1"; if ($GLOBALS["VERBOSE"]) { echo "{$cmd}\n"; } exec($cmd, $results); while (list($num, $ligne) = each($results)) { echo "{$ligne}\n"; if (preg_match("#ERROR\\s+([0-9]+)#", $ligne)) { build_progress("{$servername}: {restore_database} {to} {$wordpressDB} {failed}..", 42); sleep(3); return false; } } build_progress("{$servername}: {restore_database} {to} {$wordpressDB}..{done}", 42); @unlink($TMP_FILE); if (!scan($WORKING_DIRECTORY)) { build_progress("{$servername}: {install} {failed}", 42); sleep(3); return false; } $proto = "http"; if ($free->useSSL == 1) { $proto = "https"; } $sql = "UPDATE `wp_options` SET `option_value`='{$proto}://{$servername}' WHERE `option_name`='siteurl'"; $q->QUERY_SQL($sql, $wordpressDB); if (!$q->ok) { echo $q->mysql_error; build_progress("{$servername}: {install} {failed}", 42); sleep(3); return false; } $sql = "UPDATE `wp_options` SET `option_value`='{$proto}://{$servername}' WHERE `option_name`='home'"; $q->QUERY_SQL($sql, $wordpressDB); if (!$q->ok) { echo $q->mysql_error; build_progress("{$servername}: {install} {failed}", 42); sleep(3); return false; } $free->groupware_duplicate = null; $free->CreateSite(true); return true; }
function ExportSingleWebsite($servername) { $GLOBALS["PROGRESS_FILE"] = "/usr/share/artica-postfix/ressources/logs/wordpress.export.{$servername}.progress"; $unix = new unix(); $DBADD = false; $mysqldump = $unix->find_program("mysqldump"); $q = new mysql(); $free = new freeweb($servername); $gzip = $unix->find_program("gzip"); $tar = $unix->find_program("tar"); $rm = $unix->find_program("rm"); $database = $free->mysql_database; if ($database == null) { $database = $free->CreateDatabaseName(); $DBADD = true; } build_progress("{$servername}: Backup database {$database}", 20); if (!$q->DATABASE_EXISTS($database)) { build_progress("Backup {$servername}: database {$database} Failed ( No such database )", 110); return false; } if ($DBADD) { $free->mysql_database = $database; $free->CreateSite(true); $free = new freeweb($servername); } $TMP_PATH = $unix->TEMP_DIR(); $BaseWorkDir = "{$TMP_PATH}/{$servername}"; @mkdir("{$BaseWorkDir}", 0755, true); $q = new mysql(); $ligneDump = @mysql_fetch_array($q->QUERY_SQL("SELECT * from freeweb WHERE servername='{$servername}'", "artica_backup")); while (list($index, $data) = each($ligneDump)) { if (is_numeric($index)) { continue; } echo "Dumping {$index} = {$data}\n"; $TODUMP[$index] = $data; } if (count($TODUMP) == 0) { build_progress("Dumping parameters failed", 110); return; } @file_put_contents("{$BaseWorkDir}/config.serialize", base64_encode(serialize($TODUMP))); $TODUMP = unserialize(base64_decode(@file_get_contents("{$BaseWorkDir}/config.serialize"))); if (count($TODUMP) == 0) { build_progress("Dumping parameters failed", 110); return; } build_progress("Dumping parameters {$BaseWorkDir}/config.serialize success", 22); $nice = $unix->EXEC_NICE(); $q = new mysql(); if ($q->mysql_password != null) { $password = "******" . $unix->shellEscapeChars($q->mysql_password); } $t = time(); $prefix = trim("{$nice} {$mysqldump} --add-drop-table --single-transaction --force --insert-ignore -S /var/run/mysqld/mysqld.sock -u {$q->mysql_admin}{$password} {$database}"); $cmdline = "{$prefix} | {$gzip} > {$BaseWorkDir}/database.gz"; shell_exec($cmdline); $took = $unix->distanceOfTimeInWords($t, time()); $size = FormatBytes(@filesize("{$BaseWorkDir}/database.gz") / 1024); build_progress("Backup database {$database} {$size}", 25); $WORKDIR = $free->www_dir; build_progress("Backup directory {$WORKDIR}", 25); echo "Backup directory {$WORKDIR}"; if (!is_dir($WORKDIR)) { build_progress("Backup directory {$WORKDIR} Failed ( No such directory )", 110); return false; } chdir($WORKDIR); system("{$nice} {$tar} cfz {$BaseWorkDir}/wordpress.tar.gz *"); $took = $unix->distanceOfTimeInWords($t, time()); $size = FormatBytes(@filesize("{$BaseWorkDir}/wordpress.tar.gz") / 1024); build_progress("Backup directory {$WORKDIR} {$size}", 50); sleep(4); build_progress("Creating container...", 50); chdir($BaseWorkDir); @mkdir("/home/artica/wordress-exported", 0755, true); if (is_file("/home/artica/wordress-exported/{$servername}.tar.gz")) { @unlink("/home/artica/wordress-exported/{$servername}.tar.gz"); } system("{$nice} {$tar} cvfz /home/artica/wordress-exported/{$servername}.tar.gz *"); sleep(4); build_progress("Cleaning...", 95); chdir("/root"); shell_exec("{$rm} -rf {$BaseWorkDir}"); build_progress("Creating container done...", 100); }