public function CompressBackup() { if ($this->request->get['eta'] > 30) { set_time_limit((int) $this->request->get['eta'] + 30); } $backup_name = preg_replace('[^0-9A-z_\\.]', '', $this->request->get['backup_name']); $backup_name = !$backup_name ? 'manual_backup' : $backup_name; $bkp = new ABackup($backup_name); $arc_basename = DIR_BACKUP . $bkp->getBackupName(); if (is_file($arc_basename . '.tar')) { unlink($arc_basename . '.tar'); } if (is_file($arc_basename . '.tar.gz')) { unlink($arc_basename . '.tar.gz'); } $result = $bkp->archive($arc_basename . '.tar.gz', DIR_BACKUP, $bkp->getBackupName()); if ($result) { $this->load->library('json'); $this->response->addJSONHeader(); $output = array('result' => true, 'filename' => $bkp->getBackupName()); $this->response->setOutput(AJson::encode($output)); } else { $error = new AError('compress backup error'); return $error->toJSONResponse('APP_ERROR_402', array('error_text' => $bkp->error, 'reset_value' => true)); } }
/** * @param array $data * @return bool|string */ public function generatePackage($data = array()) { $project_info = $this->getProjectConfig($this->session->data['dev_tools_prj_id']); $extension = $project_info['extension_txt_id']; if (!$extension) { return false; } if (!is_dir(DIR_EXT . $extension)) { return false; } $config_xml = simplexml_load_file(DIR_EXT . $extension . '/config.xml'); $data['version'] = (string) $config_xml->version; foreach ($config_xml->cartversions->item as $store_version) { $data['cartversions'][] = (string) $store_version; } if (is_writable(DIR_APP_SECTION . 'system/temp') && file_exists(DIR_APP_SECTION . 'system/temp')) { $package_dir = DIR_APP_SECTION . 'system/temp/'; } elseif (!is_dir(DIR_APP_SECTION . 'system/temp')) { $result = mkdir(DIR_APP_SECTION . 'system/temp', 0777); if (!$result) { $package_dir = sys_get_temp_dir(); } else { $package_dir = DIR_APP_SECTION . 'system/temp/'; } } else { $package_dir = sys_get_temp_dir(); } if (file_exists($package_dir . $extension)) { // if stuck files exists - breaks return false; } $package_directory = $package_dir . $extension . '_' . $data['version'] . '/'; mkdir($package_directory, 0777); mkdir($package_directory . '/code', 0777); mkdir($package_directory . '/code/extensions', 0777); mkdir($package_directory . '/code/extensions/' . $extension, 0777); $this->_copyDir(DIR_EXT . $extension, $package_directory . '/code/extensions/' . $extension); // build package.xml $xml_data = array('id' => $extension, 'type' => 'extension', 'version' => $data['version'], 'minversion' => $data['version']); if ($data['cartversions']) { foreach ($data['cartversions'] as &$ver) { $ver = explode('.', $ver); $ver = $ver[0] . "." . $ver[1]; } unset($ver); $xml_data['cartversions'] = array('item' => $data['cartversions']); } $xml_data['package_content'] = array('extensions' => array('extension' => $extension)); $xml = Array2XML::createXML('package', $xml_data); $xml = $xml->saveXML(); file_put_contents($package_directory . 'package.xml', $xml); if ($data['license']) { file_put_contents($package_directory . 'license.txt', $data['license']); } if ($data['copyright']) { file_put_contents($package_directory . 'copyright.txt', $data['copyright']); } $archive = new ABackup($extension . '_' . $data['version']); $archive->archive($package_dir . $extension . '_' . $data['version'] . '.tar.gz', $package_dir, $extension . '_' . $data['version']); if (file_exists($package_dir . $extension . '_' . $data['version'] . '.tar.gz')) { return $package_dir . $extension . '_' . $data['version'] . '.tar.gz'; } else { return false; } }
/** * @param array $tables * @param bool|true $rl * @param bool|false $config * @param string $sql_dump_mode * @return bool */ public function backup($tables, $rl = true, $config = false, $sql_dump_mode = 'data_only') { $bkp = new ABackup('manual_backup' . '_' . date('Y-m-d-H-i-s')); if ($bkp->error) { return false; } // do sql dump if (!in_array($sql_dump_mode, array('data_only', 'recreate'))) { $sql_dump_mode = 'data_only'; } $bkp->sql_dump_mode = $sql_dump_mode; $bkp->dumpTables($tables); if ($rl) { $bkp->backupDirectory(DIR_RESOURCE, false); } if ($config) { $bkp->backupFile(DIR_ROOT . '/system/config.php', false); } $result = $bkp->archive(DIR_BACKUP . $bkp->getBackupName() . '.tar.gz', DIR_BACKUP, $bkp->getBackupName()); if (!$result) { $this->errors[] = $bkp->error; } else { $this->backup_filename = $bkp->getBackupName(); } return $result; }
/** * @return bool */ private function _upgradeCore() { $package_info =& $this->session->data['package_info']; if (versionCompare(VERSION, $package_info['package_version'], ">=")) { $this->session->data['error'] = str_replace('%VERSION%', VERSION, $this->language->get('error_core_version')) . $package_info['package_version'] . '!'; unset($this->session->data['package_info']); $this->redirect($this->_get_begin_href()); } $corefiles = $package_info['package_content']['core']; $pmanager = new APackageManager(); //#1 backup files $backup = new ABackup('abantecart_' . str_replace('.', '', VERSION)); foreach ($corefiles as $core_file) { if (file_exists(DIR_ROOT . '/' . $core_file)) { if (!$backup->backupFile(DIR_ROOT . '/' . $core_file, false)) { return false; } } } //#2 backup database if ($backup->dumpDatabase()) { $backup_dirname = $backup->getBackupName(); if ($backup_dirname) { if (!$backup->dumpDatabase()) { $this->session->data['error'] = $backup->error; return false; } if (!$backup->archive(DIR_BACKUP . $backup_dirname . '.tar.gz', DIR_BACKUP, $backup_dirname)) { $this->session->data['error'] = $backup->error; return false; } } else { $this->session->data['error'] = 'Error: Unknown directory name for backup.'; return false; } $install_upgrade_history = new ADataset('install_upgrade_history', 'admin'); $install_upgrade_history->addRows(array('date_added' => date("Y-m-d H:i:s", time()), 'name' => 'Backup before core upgrade. Core version: ' . VERSION, 'version' => VERSION, 'backup_file' => $backup_dirname . '.tar.gz', 'backup_date' => date("Y-m-d H:i:s", time()), 'type' => 'backup', 'user' => $this->user->getUsername())); } else { $this->session->data['error'] = $backup->error; return false; } //#3 replace files $pmanager->replaceCoreFiles(); //#4 run sql and php upgare procedure files $package_dirname = $package_info['tmp_dir'] . $package_info['package_dir']; /** * @var SimpleXmlElement $config */ $config = simplexml_load_string(file_get_contents($package_dirname . '/package.xml')); if (!$config) { $this->session->data['error'] = 'Error: package.xml from package content is not valid xml-file!'; unset($this->session->data['package_info']); $this->redirect($this->_get_begin_href()); } $pmanager->upgradeCore($config); $pmanager->updateCoreVersion((string) $config->version); return true; }
/** * Function make backup and move it into admin/system/backup/directory * @param string $extension_id * @return bool */ public function backupPrevious($extension_id = '') { $old_path = !$extension_id ? DIR_ROOT . '/' . $this->session->data['package_info']['dst_dir'] : DIR_EXT; $package_id = !$extension_id ? $this->session->data['package_info']['package_id'] : $extension_id; if (!$package_id) { return false; } if (file_exists($old_path . $package_id)) { $backup = new ABackup($extension_id); $backup_dirname = $backup->getBackupName(); if ($backup_dirname) { if (!$backup->backupDirectory($old_path . $package_id)) { $this->error = $backup->error; return false; } if (!$backup->dumpDatabase()) { return false; } if (!$backup->archive(DIR_BACKUP . $backup_dirname . '.tar.gz', DIR_BACKUP, $backup_dirname)) { return false; } } else { return false; } $info = $this->extensions->getExtensionInfo($package_id); $install_upgrade_history = new ADataset('install_upgrade_history', 'admin'); $install_upgrade_history->addRows(array('date_added' => date("Y-m-d H:i:s", time()), 'name' => $package_id, 'version' => $info['version'], 'backup_file' => $backup_dirname . '.tar.gz', 'backup_date' => date("Y-m-d H:i:s", time()), 'type' => 'backup', 'user' => $this->user->getUsername())); //delete previous version $this->removeDir($old_path . $package_id); } return true; }
public function backup($tables, $rl = true, $config = false) { $sql_dump = ''; // make dump foreach ($tables as $table) { if (DB_PREFIX) { if (strpos($table, DB_PREFIX) === FALSE) { $status = FALSE; } else { $status = TRUE; } } else { $status = TRUE; } if ($status) { $sql_dump .= 'TRUNCATE TABLE `' . $table . '`;' . "\n\n"; $query = $this->db->query("SELECT * FROM `" . $table . "`"); foreach ($query->rows as $result) { $fields = ''; foreach (array_keys($result) as $value) { $fields .= '`' . $value . '`, '; } $values = ''; foreach (array_values($result) as $value) { $value = str_replace(array("", "\n", "\r", ""), array('\\0', '\\n', '\\r', '\\Z'), $value); $value = str_replace(array("\n", "\r", "\t"), array('\\n', '\\r', '\\t'), $value); $value = str_replace('\\', '\\\\', $value); $value = str_replace('\'', '\\\'', $value); $value = str_replace('\\\\n', '\\n', $value); $value = str_replace('\\\\r', '\\r', $value); $value = str_replace('\\\\t', '\\t', $value); $values .= '\'' . $value . '\', '; } $sql_dump .= 'INSERT INTO `' . $table . '` (' . preg_replace('/, $/', '', $fields) . ') VALUES (' . preg_replace('/, $/', '', $values) . ');' . "\n"; } $sql_dump .= "\n\n"; } } $result = false; $bkp = new ABackup('manual_backup'); if (!$bkp->error) { $backup_dir = DIR_BACKUP . $bkp->getBackupName() . '/'; $fp = fopen($backup_dir . 'data/dump.sql', 'w'); fwrite($fp, $sql_dump); fclose($fp); if ($rl) { $bkp->backupDirectory(DIR_RESOURCE, false); } if ($config) { $bkp->backupFile(DIR_ROOT . '/system/config.php', false); } $result = $bkp->archive(DIR_BACKUP . $bkp->getBackupName() . '.tar.gz', DIR_BACKUP, $bkp->getBackupName()); if (!$result) { $this->error = $bkp->error; } else { $this->backup_filename = $bkp->getBackupName(); } } return $result; }