Ejemplo n.º 1
0
 public function main()
 {
     //init controller data
     $this->extensions->hk_InitData($this, __FUNCTION__);
     $this->loadLanguage('tool/backup');
     $this->loadModel('tool/backup');
     $this->document->setTitle($this->language->get('heading_title'));
     //shedule task for backup
     if ($this->request->is_POST() && $this->_validate()) {
         if (is_uploaded_file($this->request->files['restore']['tmp_name'])) {
             if (pathinfo($this->request->files['restore']['name'], PATHINFO_EXTENSION) == 'sql') {
                 $filetype = 'sql';
                 $content = file_get_contents($this->request->files['restore']['tmp_name']);
             } else {
                 $content = false;
             }
         } elseif (is_uploaded_file($this->request->files['import']['tmp_name'])) {
             if (pathinfo($this->request->files['import']['name'], PATHINFO_EXTENSION) == 'xml') {
                 $filetype = 'xml';
                 $content = file_get_contents($this->request->files['import']['tmp_name']);
             } else {
                 $content = false;
             }
         } else {
             $content = false;
             //if do sheduled task for backup
             $task_details = $this->model_tool_backup->createBackupTask('sheduled_backup', $this->request->post);
             if (!$task_details) {
                 $this->error['warning'] = array_merge($this->error, $this->model_tool_backup->errors);
             } else {
                 $this->session->data['success'] = sprintf($this->language->get('text_success_scheduled'), $this->html->getSecureURL('tool/task'));
                 $this->redirect($this->html->getSecureURL('tool/backup'));
             }
         }
         if ($content) {
             $this->cache->delete('*');
             if ($filetype == 'sql') {
                 $this->model_tool_backup->restore($content);
                 $this->session->data['success'] = $this->language->get('text_success');
                 $this->redirect($this->html->getSecureURL('tool/backup'));
             } else {
                 if ($this->model_tool_backup->load($content)) {
                     $this->session->data['success'] = $this->language->get('text_success_xml');
                     $this->redirect($this->html->getSecureURL('tool/backup'));
                 } else {
                     $this->error['warning'] = $this->language->get('error_xml');
                 }
             }
         } elseif (!has_value($this->request->post['do_backup'])) {
             if ($this->request->files) {
                 $this->error['warning'] = $this->language->get('error_empty') . ' (' . pathinfo($this->request->files['restore']['name'], PATHINFO_EXTENSION) . ')';
             } else {
                 $this->error['warning'] = $this->language->get('error_upload');
                 $uploaded_file = '';
                 if (isset($this->request->files['restore'])) {
                     $uploaded_file = $this->request->files['restore'];
                 } elseif ($this->request->files['import']) {
                     $uploaded_file = $this->request->files['import'];
                 }
                 if ($uploaded_file) {
                     $this->error['warning'] .= '<br>Error: ' . getTextUploadError($uploaded_file['error']);
                 }
             }
         }
     }
     if (isset($this->error['warning'])) {
         $this->data['error_warning'] = $this->error['warning'];
     } elseif ($this->session->data['error']) {
         $this->data['error_warning'] = $this->session->data['error'];
         unset($this->session->data['error']);
     } else {
         $bkp = new ABackup('manual_backup');
         $bkp->validate();
         $this->data['error_warning'] = implode("\n", $bkp->error);
     }
     if (isset($this->session->data['success'])) {
         $this->data['success'] = $this->session->data['success'];
         unset($this->session->data['success']);
     } else {
         $this->data['success'] = '';
     }
     $this->document->resetBreadcrumbs();
     $this->document->addBreadcrumb(array('href' => $this->html->getSecureURL('index/home'), 'text' => $this->language->get('text_home'), 'separator' => FALSE));
     $this->document->addBreadcrumb(array('href' => $this->html->getSecureURL('tool/backup'), 'text' => $this->language->get('heading_title'), 'separator' => ' :: ', 'current' => true));
     $this->loadModel('tool/backup');
     $this->data['tables'] = $this->model_tool_backup->getTables();
     //if we cannot to get table list from database -show error
     if ($this->data['tables'] === false) {
         $this->data['tables'] = array();
     }
     $table_sizes = $this->model_tool_backup->getTableSizes($this->data['tables']);
     $tables = array();
     $db_size = 0;
     foreach ($this->data['tables'] as $table) {
         $tables[$table] = $table . ' (' . $table_sizes[$table]['text'] . ')';
         $db_size += $table_sizes[$table]['bytes'];
     }
     //size of data of database (sql-file will be greater)
     if ($db_size > 1048576) {
         $this->data['entry_tables_size'] = round($db_size / 1048576, 1) . 'Mb';
     } else {
         $this->data['entry_tables_size'] = round($db_size / 1024, 1) . 'Kb';
     }
     $form = new AForm('ST');
     $form->setForm(array('form_name' => 'backup'));
     $this->data['form']['id'] = 'backup';
     $this->data['form']['form_open'] = $form->getFieldHtml(array('type' => 'form', 'name' => 'backup', 'action' => $this->html->getSecureURL('tool/backup'), 'attr' => 'class="aform form-horizontal"')) . $form->getFieldHtml(array('type' => 'hidden', 'name' => 'do_backup', 'value' => 1));
     $this->data['form']['fields']['tables'] = $form->getFieldHtml(array('type' => 'checkboxgroup', 'name' => 'table_list[]', 'value' => $this->data['tables'], 'options' => $tables, 'scrollbox' => true, 'style' => 'checkboxgroup'));
     $c_size = $this->model_tool_backup->getCodeSize();
     if ($c_size > 1048576) {
         $code_size = round($c_size / 1048576, 1) . 'Mb';
     } else {
         $code_size = round($c_size / 1024, 1) . 'Kb';
     }
     $this->data['entry_backup_code'] = sprintf($this->language->get('entry_backup_code'), $code_size);
     $this->data['form']['fields']['backup_code'] = $form->getFieldHtml(array('type' => 'checkbox', 'name' => 'backup_code', 'value' => '1', 'checked' => true));
     $c_size = $this->model_tool_backup->getContentSize();
     if ($c_size > 1048576) {
         $content_size = round($c_size / 1048576, 1) . 'Mb';
     } else {
         $content_size = round($c_size / 1024, 1) . 'Kb';
     }
     $this->data['entry_backup_content'] = sprintf($this->language->get('entry_backup_content'), $content_size);
     $this->data['form']['fields']['backup_content'] = $form->getFieldHtml(array('type' => 'checkbox', 'name' => 'backup_content', 'value' => '1', 'checked' => true));
     $this->data['form']['fields']['compress_backup'] = $form->getFieldHtml(array('type' => 'checkbox', 'name' => 'compress_backup', 'value' => 1));
     $this->data['entry_compress_backup'] = sprintf($this->language->get('entry_compress_backup'), str_replace(DIR_ROOT, '', DIR_BACKUP), DIR_BACKUP);
     $this->data['form']['build_task_url'] = $this->html->getSecureURL('r/tool/backup/buildTask');
     $this->data['form']['complete_task_url'] = $this->html->getSecureURL('r/tool/backup/complete');
     $this->data['form']['backup_now'] = $form->getFieldHtml(array('type' => 'button', 'name' => 'backup_now', 'text' => $this->language->get('button_backup_now'), 'style' => 'button1'));
     $this->data['form']['backup_schedule'] = $form->getFieldHtml(array('type' => 'button', 'name' => 'backup_schedule', 'text' => $this->language->get('button_backup_schedule'), 'style' => 'button1'));
     $form = new AForm('ST');
     $form->setForm(array('form_name' => 'restore_form'));
     $this->data['restoreform']['id'] = 'restore_form';
     $this->data['restoreform']['form_open'] = $form->getFieldHtml(array('type' => 'form', 'name' => 'restore_form', 'action' => $this->html->getSecureURL('tool/backup'), 'attr' => 'class="aform form-horizontal"'));
     $this->data['restoreform']['file'] = $form->getFieldHtml(array('type' => 'file', 'name' => 'restore'));
     $this->data['restoreform']['submit'] = $form->getFieldHtml(array('type' => 'button', 'name' => 'submit', 'text' => $this->language->get('tab_restore'), 'style' => 'button1'));
     $form = new AForm('ST');
     $form->setForm(array('form_name' => 'loadxml_form'));
     $this->data['xmlform']['id'] = 'loadxml_form';
     $this->data['xmlform']['form_open'] = $form->getFieldHtml(array('type' => 'form', 'name' => 'loadxml_form', 'action' => $this->html->getSecureURL('tool/backup'), 'attr' => 'class="aform form-horizontal"'));
     $this->data['xmlform']['file'] = $form->getFieldHtml(array('type' => 'file', 'name' => 'import'));
     $this->data['xmlform']['submit'] = $form->getFieldHtml(array('type' => 'button', 'name' => 'submit', 'text' => $this->language->get('button_load'), 'style' => 'button1'));
     $this->data['text_fail_note'] = sprintf($this->language->get('text_fail_note'), DIR_APP_SECTION . 'system/backup');
     $this->view->batchAssign($this->data);
     $this->view->assign('help_url', $this->gen_help_url());
     $this->view->assign('current_url', $this->html->currentURL());
     $this->processTemplate('pages/tool/backup.tpl');
     //update controller data
     $this->extensions->hk_UpdateData($this, __FUNCTION__);
 }
 /**
  * @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;
     }
 }
Ejemplo n.º 3
0
 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 string $task_name
  * @param array $data
  * @return array|bool
  */
 public function createBackupTask($task_name, $data = array())
 {
     if (!$task_name) {
         $this->errors[] = 'Can not to create task. Empty task name given';
     }
     //NOTE: remove temp backup dir before process to prevent progressive increment of directory date if some backup-steps will be failed
     $bkp = new ABackup('manual_backup');
     $bkp->removeBackupDirectory();
     unset($bkp);
     $tm = new ATaskManager();
     //1. create new task
     $task_id = $tm->addTask(array('name' => $task_name, 'starter' => 1, 'created_by' => $this->user->getId(), 'status' => 1, 'start_time' => date('Y-m-d H:i:s', mktime(0, 0, 0, date('m'), date('d') + 1, date('Y'))), 'last_time_run' => '0000-00-00 00:00:00', 'progress' => '0', 'last_result' => '0', 'run_interval' => '0', 'max_execution_time' => '0'));
     if (!$task_id) {
         $this->errors = array_merge($this->errors, $tm->errors);
         return false;
     }
     //create step for table backup
     if ($data['table_list']) {
         //calculate estimate time for dumping of tables
         // get sizes of tables
         $table_list = array();
         foreach ($data['table_list'] as $table) {
             if (!is_string($table)) {
                 continue;
             }
             // clean
             $table_list[] = $this->db->escape($table);
         }
         $sql = "SELECT SUM(data_length + index_length - data_free) AS 'db_size'\n\t\t\t\t\tFROM information_schema.TABLES\n\t\t\t\t\tWHERE information_schema.TABLES.table_schema = '" . DB_DATABASE . "'\n\t\t\t\t\t\tAND TABLE_NAME IN ('" . implode("','", $data['table_list']) . "')\t";
         if ($prefix_len) {
             $sql .= " AND TABLE_NAME like '" . DB_PREFIX . "%'";
         }
         $result = $this->db->query($sql);
         $db_size = $result->row['db_size'];
         //size in bytes
         $step_id = $tm->addStep(array('task_id' => $task_id, 'sort_order' => 1, 'status' => 1, 'last_time_run' => '0000-00-00 00:00:00', 'last_result' => '0', 'max_execution_time' => ceil($db_size / 2794843) * 4, 'controller' => 'task/tool/backup/dumptables', 'settings' => array('table_list' => $data['table_list'], 'sql_dump_mode' => $data['sql_dump_mode'])));
         if (!$step_id) {
             $this->errors = array_merge($this->errors, $tm->errors);
             return false;
         } else {
             // get eta in seconds. 2794843 - "bytes per seconds" of dumping for Pentium(R) Dual-Core CPU E5200 @ 2.50GHz × 2
             $this->eta[$step_id] = ceil($db_size / 2794843) * 4;
             $this->est_backup_size += ceil($db_size * 1.61);
             // size of sql-file of output
         }
     }
     //create step for content-files backup
     if ($data['backup_code']) {
         //calculate estimate time for copying of code
         $dirs_size = $this->getCodeSize();
         $step_id = $tm->addStep(array('task_id' => $task_id, 'sort_order' => 2, 'status' => 1, 'last_time_run' => '0000-00-00 00:00:00', 'last_result' => '0', 'max_execution_time' => ceil($dirs_size / 28468838), 'controller' => 'task/tool/backup/backupCodeFiles', 'settings' => array('interrupt_on_step_fault' => false)));
         if (!$step_id) {
             $this->errors = array_merge($this->errors, $tm->errors);
             return false;
         } else {
             //// get eta in seconds. 28468838 - "bytes per seconds" of copiing of files for SATA III hdd
             $this->eta[$step_id] = ceil($dirs_size / 28468838);
             $this->est_backup_size += $dirs_size;
         }
     }
     //create step for content-files backup
     if ($data['backup_content']) {
         //calculate estimate time for copying of content files
         $dirs_size = $this->getContentSize();
         $step_id = $tm->addStep(array('task_id' => $task_id, 'sort_order' => 3, 'status' => 1, 'last_time_run' => '0000-00-00 00:00:00', 'last_result' => '0', 'max_execution_time' => ceil($dirs_size / 28468838), 'controller' => 'task/tool/backup/backupContentFiles', 'settings' => array('interrupt_on_step_fault' => false)));
         if (!$step_id) {
             $this->errors = array_merge($this->errors, $tm->errors);
             return false;
         } else {
             //// get eta in seconds. 28468838 - "bytes per seconds" of copiing of files for SATA III hdd
             $this->eta[$step_id] = ceil($dirs_size / 28468838);
             $this->est_backup_size += $dirs_size;
         }
     }
     //create last step for compressing backup
     if ($data['compress_backup']) {
         $step_id = $tm->addStep(array('task_id' => $task_id, 'sort_order' => 4, 'status' => 1, 'last_time_run' => '0000-00-00 00:00:00', 'last_result' => '0', 'max_execution_time' => ceil($this->est_backup_size / 18874368), 'controller' => 'task/tool/backup/compressbackup'));
         if (!$step_id) {
             $this->errors = array_merge($this->errors, $tm->errors);
             return false;
         } else {
             //// get eta in seconds. 18874368 - "bytes per seconds" of gz-compression, level 1 on
             // AMD mobile Athlon XP2400+ 512 MB RAM Linux 2.6.12-rc4 gzip 1.3.3
             $this->eta[$step_id] = ceil($this->est_backup_size / 18874368);
         }
     }
     $task_details = $tm->getTaskById($task_id);
     if ($task_details) {
         foreach ($this->eta as $step_id => $eta) {
             $task_details['steps'][$step_id]['eta'] = $eta;
         }
         return $task_details;
     } else {
         $this->errors[] = 'Can not to get task details for execution';
         $this->errors = array_merge($this->errors, $tm->errors);
         return false;
     }
 }
Ejemplo n.º 5
0
 /**
  * @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;
 }
Ejemplo n.º 6
0
 /**
  * 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;
 }
Ejemplo n.º 7
0
 /**
  * Method of checks before installation process
  */
 public function validate()
 {
     $this->error = '';
     //1.check is extension directory writable
     if (!is_writable(DIR_EXT)) {
         $this->error .= 'Directory ' . DIR_EXT . ' is not writable. Please change permissions for it.' . "\n";
     }
     //2. check temporaty directory. just call method
     $this->getTempDir();
     //3. run validation for backup-process before install
     $bkp = new ABackup('', false);
     if (!$bkp->validate()) {
         $this->error .= implode("\n", $bkp->error);
     }
     $this->extensions->hk_ValidateData($this);
     return $this->error ? false : true;
 }
Ejemplo n.º 8
0
 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;
 }