Use app/cache/course_backups instead of main app/cache folder

pull/2487/head
jmontoyaa 10 years ago
parent 58c1ed829a
commit 19ff6440fa
  1. 5
      main/course_info/download.php
  2. 2
      main/coursecopy/create_backup.php
  3. 12
      main/coursecopy/import_backup.php
  4. 82
      src/Chamilo/CourseBundle/Component/CourseCopy/CourseArchiver.php
  5. 1
      src/Chamilo/CourseBundle/Component/CourseCopy/CourseBuilder.php
  6. 1
      src/Chamilo/CourseBundle/Component/CourseCopy/CourseSelectForm.php

@ -1,5 +1,6 @@
<?php
/* For licensing terms, see /license.txt */
use Chamilo\CourseBundle\Component\CourseCopy\CourseArchiver;
/**
* Download script for course info
@ -14,7 +15,7 @@ if (isset($_GET['session']) && $_GET['session']) {
$_cid = true;
$is_courseAdmin = true;
} else {
$archive_path = api_get_path(SYS_ARCHIVE_PATH);
$archive_path = CourseArchiver::getBackupDir();
}
$archive_file = isset($_GET['archive']) ? $_GET['archive'] : null;
@ -23,7 +24,7 @@ $archive_file = str_replace(array('..', '/', '\\'), '', $archive_file);
list($extension) = getextension($archive_file);
if (empty($extension) || !file_exists($archive_path.$archive_file)) {
exit;
exit;
}
$extension = strtolower($extension);

@ -68,7 +68,7 @@ if (Security::check_token('post') && (
$course = $cb->build();
}
$zip_file = CourseArchiver::write_course($course);
$zip_file = CourseArchiver::createBackup($course);
Display::display_confirmation_message(get_lang('BackupCreated'));
echo '<br /><a class="btn btn-primary btn-large" href="' . api_get_path(WEB_CODE_PATH) . 'course_info/download.php?archive=' . $zip_file . '&' . api_get_cidreq() . '">
' . get_lang('Download') . '</a>';

@ -74,7 +74,7 @@ if (Security::check_token('post') && (
$delete_file = false;
} else {
if ($_FILES['backup']['error'] == 0) {
$filename = CourseArchiver::import_uploaded_file(
$filename = CourseArchiver::importUploadedFile(
$_FILES['backup']['tmp_name']
);
if ($filename === false) {
@ -89,7 +89,7 @@ if (Security::check_token('post') && (
if (!$error) {
// Full backup
$course = CourseArchiver::read_course($filename, $delete_file);
$course = CourseArchiver::readCourse($filename, $delete_file);
}
}
@ -116,7 +116,7 @@ if (Security::check_token('post') && (
}
}
}
CourseArchiver::clean_backup_dir();
CourseArchiver::cleanBackupDir();
} elseif (Security::check_token('post') && (
isset($_POST['import_option']) &&
@ -130,10 +130,10 @@ if (Security::check_token('post') && (
$filename = $_POST['backup_server'];
$delete_file = false;
} else {
$filename = CourseArchiver::import_uploaded_file($_FILES['backup']['tmp_name']);
$filename = CourseArchiver::importUploadedFile($_FILES['backup']['tmp_name']);
$delete_file = true;
}
$course = CourseArchiver::read_course($filename, $delete_file);
$course = CourseArchiver::readCourse($filename, $delete_file);
if ($course->has_resources() && ($filename !== false)) {
$hiddenFields['same_file_name_option'] = $_POST['same_file_name_option'];
@ -149,7 +149,7 @@ if (Security::check_token('post') && (
}
} else {
$user = api_get_user_info();
$backups = CourseArchiver::get_available_backups(
$backups = CourseArchiver::getAvailableBackups(
$is_platformAdmin ? null : $user['user_id']
);
$backups_available = count($backups) > 0;

@ -3,6 +3,8 @@
namespace Chamilo\CourseBundle\Component\CourseCopy;
use Symfony\Component\Filesystem\Filesystem;
/**
* Some functions to write a course-object to a zip-file and to read a course-
* object from such a zip-file.
@ -13,12 +15,34 @@ namespace Chamilo\CourseBundle\Component\CourseCopy;
*/
class CourseArchiver
{
/**
* @return string
*/
public static function getBackupDir()
{
return api_get_path(SYS_ARCHIVE_PATH).'course_backups/';
}
/**
* @return string
*/
public static function createBackupDir()
{
$perms = api_get_permissions_for_new_directories();
$dir = self::getBackupDir();
$fs = new Filesystem();
$fs->mkdir($dir, $perms);
return $dir;
}
/**
* Delete old temp-dirs
*/
public static function clean_backup_dir()
public static function cleanBackupDir()
{
$dir = api_get_path(SYS_ARCHIVE_PATH);
$dir = self::getBackupDir();
if ($handle = @ opendir($dir)) {
while (($file = readdir($handle)) !== false) {
if ($file != "." && $file != ".." &&
@ -36,22 +60,25 @@ class CourseArchiver
* Write a course and all its resources to a zip-file.
* @return string A pointer to the zip-file
*/
public static function write_course($course)
public static function createBackup($course)
{
$perm_dirs = api_get_permissions_for_new_directories();
CourseArchiver::cleanBackupDir();
CourseArchiver::createBackupDir();
CourseArchiver::clean_backup_dir();
$perm_dirs = api_get_permissions_for_new_directories();
$backupDirectory = self::getBackupDir();
// Create a temp directory
$tmp_dir_name = 'CourseArchiver_' . api_get_unique_id();
$backup_dir = api_get_path(SYS_ARCHIVE_PATH) . $tmp_dir_name . '/';
$backup_dir = $backupDirectory . 'CourseArchiver_' . api_get_unique_id() . '/';
// All course-information will be stored in course_info.dat
$course_info_file = $backup_dir . 'course_info.dat';
$zip_dir = api_get_path(SYS_ARCHIVE_PATH);
$user = api_get_user_info();
$date = new \DateTime(api_get_local_time());
$zip_file = $user['user_id'] . '_' . $course->code . '_' . $date->format('Ymd-His') . '.zip';
$zipFileName = $user['user_id'] . '_' . $course->code . '_' . $date->format('Ymd-His') . '.zip';
$zipFilePath = $backupDirectory. $zipFileName;
$php_errormsg = '';
$res = @mkdir($backup_dir, $perm_dirs);
if ($res === false) {
@ -129,22 +156,22 @@ class CourseArchiver
}
// Zip the course-contents
$zip = new \PclZip($zip_dir . $zip_file);
$zip->create($zip_dir . $tmp_dir_name, PCLZIP_OPT_REMOVE_PATH, $zip_dir . $tmp_dir_name . '/');
//$zip->deleteByIndex(0);
$zip = new \PclZip($zipFilePath);
$zip->create($backup_dir, PCLZIP_OPT_REMOVE_PATH, $backup_dir);
// Remove the temp-dir.
rmdirr($backup_dir);
return '' . $zip_file;
return $zipFileName;
}
/**
* @param int $user_id
* @return array
*/
public static function get_available_backups($user_id = null)
public static function getAvailableBackups($user_id = null)
{
$backup_files = array();
$dirname = api_get_path(SYS_ARCHIVE_PATH) . '';
$dirname = self::getBackupDir();
if ($dir = opendir($dirname)) {
while (($file = readdir($dir)) !== false) {
$file_parts = explode('_', $file);
@ -174,12 +201,12 @@ class CourseArchiver
* @param array $file
* @return bool|string
*/
public static function import_uploaded_file($file)
public static function importUploadedFile($file)
{
$new_filename = uniqid('') . '.zip';
$new_dir = api_get_path(SYS_ARCHIVE_PATH);
$new_dir = self::getBackupDir();
if (is_dir($new_dir) && is_writable($new_dir)) {
move_uploaded_file($file, api_get_path(SYS_ARCHIVE_PATH).$new_filename);
move_uploaded_file($file, $new_dir.$new_filename);
return $new_filename;
}
@ -195,21 +222,27 @@ class CourseArchiver
* @return course The course
* @todo Check if the archive is a correct Chamilo-export
*/
public static function read_course($filename, $delete = false)
public static function readCourse($filename, $delete = false)
{
CourseArchiver::clean_backup_dir();
CourseArchiver::cleanBackupDir();
// Create a temp directory
$tmp_dir_name = 'CourseArchiver_' . uniqid('');
$unzip_dir = api_get_path(SYS_ARCHIVE_PATH) . '' . $tmp_dir_name;
$tmp_dir_name = 'CourseArchiver_'.uniqid('');
$unzip_dir = self::getBackupDir().$tmp_dir_name;
$filePath = self::getBackupDir().$filename;
@mkdir($unzip_dir, api_get_permissions_for_new_directories(), true);
@copy(api_get_path(SYS_ARCHIVE_PATH) . '' . $filename, $unzip_dir . '/backup.zip');
@copy(
$filePath,
$unzip_dir . '/backup.zip'
);
// unzip the archive
$zip = new \PclZip($unzip_dir . '/backup.zip');
@chdir($unzip_dir);
$zip->extract(PCLZIP_OPT_TEMP_FILE_ON);
// remove the archive-file
if ($delete) {
@unlink(api_get_path(SYS_ARCHIVE_PATH) . '' . $filename);
@unlink($filePath);
}
// read the course
@ -222,7 +255,6 @@ class CourseArchiver
@fclose($fp);
class_alias('Chamilo\CourseBundle\Component\CourseCopy\Course', 'Course');
class_alias('Chamilo\CourseBundle\Component\CourseCopy\Resources\Announcement', 'Announcement');
class_alias('Chamilo\CourseBundle\Component\CourseCopy\Resources\Attendance', 'Attendance');
class_alias('Chamilo\CourseBundle\Component\CourseCopy\Resources\CalendarEvent', 'CalendarEvent');

@ -1357,7 +1357,6 @@ class CourseBuilder
$this->course->path = api_get_path(SYS_COURSE_PATH).$_course['directory'].'/';
$this->course->backup_path = api_get_path(SYS_COURSE_PATH).$_course['directory'];
$this->course->encoding = api_get_system_encoding(); //current platform encoding
$code_course = $_course['code'];
$courseId = $_course['real_id'];
$sql_session = "SELECT s.id, name, c_id
FROM $tbl_session_course sc

@ -220,7 +220,6 @@ class CourseSelectForm
}
echo '<div class="well">';
echo '<div class="btn-group">';
echo "<a class=\"btn btn-default\" href=\"javascript: void(0);\" onclick=\"javascript: setCheckbox('$type',true);\" >".get_lang('All')."</a>";
echo "<a class=\"btn btn-default\" href=\"javascript: void(0);\" onclick=\"javascript:setCheckbox('$type',false);\" >".get_lang('None')."</a>";

Loading…
Cancel
Save