$database_size += $v['Data_length'] + $v['Index_length']; $all_tables[] = $v['Name']; } $view->assign('database_size', $database_size); $view->assign('all_tables', $all_tables); $files = fn_get_dir_contents(Registry::get('config.dir.backups'), false, true, array('.sql', '.tgz', '.zip'), '', true); sort($files, SORT_STRING); $backup_files = array(); $date_format = Registry::get('settings.Appearance.date_format') . ' ' . Registry::get('settings.Appearance.time_format'); if (is_array($files)) { $backup_dir = Registry::get('config.dir.backups'); foreach ($files as $file) { $ext = fn_get_file_ext($backup_dir . $file); $backup_files[$file]['size'] = filesize($backup_dir . $file); $backup_files[$file]['create'] = fn_date_format(filemtime($backup_dir . $file), $date_format); if ($ext == 'sql') { $backup_files[$file]['type'] = 'database'; } else { $backup_files[$file]['type'] = DataKeeper::getArchiveType($backup_dir . $file); } } } $supported_archive_types = array('tgz'); $validators = new Validators(); if ($validators->isZipArchiveAvailable()) { $supported_archive_types[] = 'zip'; } $view->assign('supported_archive_types', $supported_archive_types); $view->assign('backup_files', $backup_files); $view->assign('backup_dir', fn_get_rel_dir(Registry::get('config.dir.backups'))); }
/** * Gets archive file tree without unpacking * * @param string $file_path Path to packed file * @param bool $only_root gets only root folders and files * @return mixed List of files in packed archive or false if archive cannot be read or archive does not support */ public static function getCompressedFilesList($file_path, $only_root = false) { $files_list = array(); $ext = fn_get_file_ext($file_path); switch ($ext) { case 'zip': $validators = new Validators(); if (!$validators->isZipArchiveAvailable()) { return $files_list; } $zip = new \ZipArchive(); if ($zip->open($file_path)) { $num_files = $zip->numFiles; for ($i = 0; $i < $num_files; $i++) { $file_name = $zip->getNameIndex($i); if ($only_root && strpos($file_name, '/') !== false) { $file_name = preg_replace('#/.*$#i', '', $file_name); } $files_list[$file_name] = $i; } $files_list = array_flip($files_list); } break; case 'tgz': if ($only_root) { $tgz = new \PharData($file_path); if (!empty($tgz)) { foreach ($tgz as $index => $file) { $files_list[] = $file->getFilename(); } } } else { $files_list = fn_get_dir_contents('phar://' . $file_path, true, true, '', '', true); return $files_list; } break; default: break; } return $files_list; }
/** * Check if mod_rewrite is available * * @return bool true if available */ public function isZipArchiveAvailable() { $result = parent::isZipArchiveAvailable(); if (!$result) { $app = App::instance(); $app->setNotification('W', $app->t('warning'), $app->t('text_zip_archive_notice'), true, 'server_configuration'); } return true; }
$backup_dir = Registry::get('config.dir.backups'); foreach ($files as $file) { $ext = fn_get_file_ext($backup_dir . $file); $backup_files[$file]['size'] = filesize($backup_dir . $file); $backup_files[$file]['create'] = fn_date_format(filemtime($backup_dir . $file), $date_format); if ($ext == 'tgz') { $backup_files[$file]['type'] = DataKeeper::BACKUP_TYPE_UNKNOWN; } else { $backup_files[$file]['type'] = DataKeeper::getBackupType($backup_dir . $file); } $backup_files[$file]['can_be_restored'] = true; if ($ext == 'tgz' && !$validators->isPharDataAvailable()) { $backup_files[$file]['can_be_restored'] = false; $required_phardata = true; } if ($ext == 'zip' && !$validators->isZipArchiveAvailable()) { $backup_files[$file]['can_be_restored'] = false; } } } if ($required_phardata) { fn_set_notification('E', __('error'), __('error_class_phar_data_not_found')); } $backup_create_allowed = true; if (!$validators->isZipArchiveAvailable()) { $backup_create_allowed = false; fn_set_notification('E', __('error'), __('error_unable_to_create_backups')); fn_set_notification('E', __('error'), __('error_zip_php_extension_not_installed')); } /** @var \Tygh\SmartyEngine\Core $view */ $view = Tygh::$app['view'];
/** * Gets archive file tree without unpacking * * @param string $file_path Path to packed file * @param bool $only_root gets only root folders and files * @return mixed List of files in packed archive or false if archive cannot be read or archive does not support */ public static function getCompressedFilesList($file_path, $only_root = false) { $files_list = array(); $ext = fn_get_file_ext($file_path); switch ($ext) { case 'zip': $validators = new Validators(); if (!$validators->isZipArchiveAvailable()) { return $files_list; } $zip = new \ZipArchive(); if ($zip->open($file_path)) { $num_files = $zip->numFiles; $counter = 0; for ($i = 0; $i < $num_files; $i++) { $file_name = $zip->getNameIndex($i); $parent_directories = fn_get_parent_directory_stack($file_name); if ($only_root) { if (empty($parent_directories)) { $files_list[$file_name] = $counter++; } else { $files_list[end($parent_directories)] = $counter++; } } else { $files_list[$file_name] = $counter++; foreach ($parent_directories as $parent_dir_path) { $files_list[$parent_dir_path] = $counter++; } } } $files_list = array_flip($files_list); $zip->close(); } break; case 'tgz': $tgz = new \PharData($file_path, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::CURRENT_AS_FILEINFO | \FilesystemIterator::KEY_AS_PATHNAME); if ($only_root) { $iterator = $tgz; } else { $iterator = new \RecursiveIteratorIterator($tgz, \RecursiveIteratorIterator::SELF_FIRST); } foreach ($iterator as $path_name => $spl_file_info) { /** @var \SplFileInfo $spl_file_info */ $files_list[] = $spl_file_info->isDir() ? rtrim($iterator->getSubPathname(), '\\/') . DIRECTORY_SEPARATOR : $iterator->getSubPathname(); } $tgz = null; $iterator = null; break; default: break; } sort($files_list); return $files_list; }