|
|
|
@ -267,23 +267,23 @@ class CourseRestorer |
|
|
|
|
CourseManager::update_attributes($origin_course_info['real_id'], $params); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Restore documents |
|
|
|
|
* @param int session id |
|
|
|
|
/** |
|
|
|
|
* Restore documents |
|
|
|
|
* |
|
|
|
|
*/ |
|
|
|
|
* @param int $session_id |
|
|
|
|
* @param bool $respect_base_content |
|
|
|
|
* @param string $destination_course_code |
|
|
|
|
*/ |
|
|
|
|
public function restore_documents($session_id = 0, $respect_base_content = false, $destination_course_code = '') |
|
|
|
|
{ |
|
|
|
|
$perm = api_get_permissions_for_new_directories(); |
|
|
|
|
$course_info = api_get_course_info($destination_course_code); |
|
|
|
|
if ($this->course->has_resources(RESOURCE_DOCUMENT)) { |
|
|
|
|
|
|
|
|
|
if ($this->course->has_resources(RESOURCE_DOCUMENT)) { |
|
|
|
|
$table = Database :: get_course_table(TABLE_DOCUMENT); |
|
|
|
|
$resources = $this->course->resources; |
|
|
|
|
$path = api_get_path(SYS_COURSE_PATH).$this->course->destination_path.'/'; |
|
|
|
|
|
|
|
|
|
foreach ($resources[RESOURCE_DOCUMENT] as $id => $document) { |
|
|
|
|
$path = api_get_path(SYS_COURSE_PATH).$this->course->destination_path.'/'; |
|
|
|
|
//$dirs = explode('/', dirname($document->path)); |
|
|
|
|
|
|
|
|
|
if (empty($document->item_properties[0]['id_session'])) { |
|
|
|
|
$my_session_id = 0; |
|
|
|
@ -293,26 +293,67 @@ class CourseRestorer |
|
|
|
|
|
|
|
|
|
if ($document->file_type == FOLDER) { |
|
|
|
|
$visibility = $document->item_properties[0]['visibility']; |
|
|
|
|
if (!empty($document->title)) { |
|
|
|
|
|
|
|
|
|
/*if (!empty($document->title)) { |
|
|
|
|
$title = $document->title; |
|
|
|
|
} else { |
|
|
|
|
$title = basename($document->path); |
|
|
|
|
} |
|
|
|
|
}*/ |
|
|
|
|
|
|
|
|
|
$new = substr($document->path, 8); |
|
|
|
|
|
|
|
|
|
if (!is_dir($path.'document'.$new)) { |
|
|
|
|
$created_dir = create_unexisting_directory( |
|
|
|
|
$course_info, |
|
|
|
|
api_get_user_id(), |
|
|
|
|
$my_session_id, |
|
|
|
|
0, |
|
|
|
|
0, |
|
|
|
|
$path.'document', |
|
|
|
|
$new, |
|
|
|
|
$title, |
|
|
|
|
$visibility |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
$folderList = explode('/', $new); |
|
|
|
|
$tempFolder = ''; |
|
|
|
|
|
|
|
|
|
// Check if the parent path exists. |
|
|
|
|
foreach ($folderList as $folder) { |
|
|
|
|
$folderToCreate = $tempFolder.$folder; |
|
|
|
|
$sysFolderPath = $path.'document'.$folderToCreate; |
|
|
|
|
$tempFolder .= $folder.'/'; |
|
|
|
|
|
|
|
|
|
if (empty($folderToCreate)) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$title = basename($sysFolderPath); |
|
|
|
|
// File doesn't exist in file system. |
|
|
|
|
if (!is_dir($sysFolderPath)) { |
|
|
|
|
// Creating directory |
|
|
|
|
create_unexisting_directory( |
|
|
|
|
$course_info, |
|
|
|
|
api_get_user_id(), |
|
|
|
|
$my_session_id, |
|
|
|
|
0, |
|
|
|
|
0, |
|
|
|
|
$path.'document', |
|
|
|
|
$folderToCreate, |
|
|
|
|
$title, |
|
|
|
|
$visibility |
|
|
|
|
); |
|
|
|
|
} else { |
|
|
|
|
// File exist in file system. |
|
|
|
|
$documentData = DocumentManager::get_document_id( |
|
|
|
|
$course_info, |
|
|
|
|
$folderToCreate, |
|
|
|
|
$my_session_id |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
if (empty($documentData)) { |
|
|
|
|
/* This means the folder exists in the |
|
|
|
|
filesystem but not in the DB, trying to fix it */ |
|
|
|
|
add_document( |
|
|
|
|
$course_info, |
|
|
|
|
$folderToCreate, |
|
|
|
|
'folder', |
|
|
|
|
0, |
|
|
|
|
$title, |
|
|
|
|
null, |
|
|
|
|
null, |
|
|
|
|
false |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} elseif ($document->file_type == DOCUMENT) { |
|
|
|
|
//Checking if folder exists in the database otherwise we created it |
|
|
|
|
$dir_to_create = dirname($document->path); |
|
|
|
@ -330,7 +371,17 @@ class CourseRestorer |
|
|
|
|
$title = str_replace('/', '', $new); |
|
|
|
|
|
|
|
|
|
// This code fixes the possibility for a file without a directory entry to be |
|
|
|
|
$document_id = add_document($course_info, $new, 'folder', 0, $title, null, null, false); |
|
|
|
|
$document_id = add_document( |
|
|
|
|
$course_info, |
|
|
|
|
$new, |
|
|
|
|
'folder', |
|
|
|
|
0, |
|
|
|
|
$title, |
|
|
|
|
null, |
|
|
|
|
null, |
|
|
|
|
false |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
api_item_property_update( |
|
|
|
|
$course_info, |
|
|
|
|
TOOL_DOCUMENT, |
|
|
|
@ -348,7 +399,6 @@ class CourseRestorer |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (file_exists($path.$document->path)) { |
|
|
|
|
|
|
|
|
|
switch ($this->file_option) { |
|
|
|
|
case FILE_OVERWRITE : |
|
|
|
|
$origin_path = $this->course->backup_path.'/'.$document->path; |
|
|
|
@ -363,13 +413,13 @@ class CourseRestorer |
|
|
|
|
$count = Database::num_rows($res); |
|
|
|
|
if ($count == 0) { |
|
|
|
|
$sql = "INSERT INTO $table SET |
|
|
|
|
path = '/".self::DBUTF8escapestring(substr($document->path, 9))."', |
|
|
|
|
c_id = ".$this->destination_course_id.", |
|
|
|
|
comment = '".self::DBUTF8escapestring($document->comment)."', |
|
|
|
|
title = '".self::DBUTF8escapestring($document->title)."' , |
|
|
|
|
filetype ='".$document->file_type."', |
|
|
|
|
size = '".$document->size."', |
|
|
|
|
session_id = '$my_session_id'"; |
|
|
|
|
path = '/".self::DBUTF8escapestring(substr($document->path, 9))."', |
|
|
|
|
c_id = ".$this->destination_course_id.", |
|
|
|
|
comment = '".self::DBUTF8escapestring($document->comment)."', |
|
|
|
|
title = '".self::DBUTF8escapestring($document->title)."' , |
|
|
|
|
filetype ='".$document->file_type."', |
|
|
|
|
size = '".$document->size."', |
|
|
|
|
session_id = '$my_session_id'"; |
|
|
|
|
Database::query($sql); |
|
|
|
|
$document_id = Database::insert_id(); |
|
|
|
|
$this->course->resources[RESOURCE_DOCUMENT][$id]->destination_id = $document_id; |
|
|
|
@ -396,7 +446,9 @@ class CourseRestorer |
|
|
|
|
filetype ='".$document->file_type."', |
|
|
|
|
size = '".$document->size."', |
|
|
|
|
session_id = '$my_session_id' |
|
|
|
|
WHERE c_id = ".$this->destination_course_id." AND path = '/".self::DBUTF8escapestring(substr($document->path, 9))."'"; |
|
|
|
|
WHERE |
|
|
|
|
c_id = ".$this->destination_course_id." AND |
|
|
|
|
path = '/".self::DBUTF8escapestring(substr($document->path, 9))."'"; |
|
|
|
|
Database::query($sql); |
|
|
|
|
$this->course->resources[RESOURCE_DOCUMENT][$id]->destination_id = $obj->id; |
|
|
|
|
api_item_property_update( |
|
|
|
@ -593,13 +645,13 @@ class CourseRestorer |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$sql = "INSERT INTO ".$table." SET |
|
|
|
|
c_id = ".$this->destination_course_id.", |
|
|
|
|
path = '/".self::DBUTF8escapestring(substr($new_file_name, 9))."', |
|
|
|
|
comment = '".self::DBUTF8escapestring($document->comment)."', |
|
|
|
|
title = '".self::DBUTF8escapestring($document->title)."' , |
|
|
|
|
filetype ='".$document->file_type."', |
|
|
|
|
size = '".$document->size."', |
|
|
|
|
session_id = '$my_session_id'"; |
|
|
|
|
c_id = ".$this->destination_course_id.", |
|
|
|
|
path = '/".self::DBUTF8escapestring(substr($new_file_name, 9))."', |
|
|
|
|
comment = '".self::DBUTF8escapestring($document->comment)."', |
|
|
|
|
title = '".self::DBUTF8escapestring($document->title)."' , |
|
|
|
|
filetype ='".$document->file_type."', |
|
|
|
|
size = '".$document->size."', |
|
|
|
|
session_id = '$my_session_id'"; |
|
|
|
|
Database::query($sql); |
|
|
|
|
|
|
|
|
|
$document_id = Database::insert_id(); |
|
|
|
@ -638,13 +690,13 @@ class CourseRestorer |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
$sql = "INSERT INTO ".$table." SET |
|
|
|
|
c_id = ".$this->destination_course_id.", |
|
|
|
|
path = '/".self::DBUTF8escapestring(substr($new_file_name, 9))."', |
|
|
|
|
comment = '".self::DBUTF8escapestring($document->comment)."', |
|
|
|
|
title = '".self::DBUTF8escapestring($document->title)."' , |
|
|
|
|
filetype ='".$document->file_type."', |
|
|
|
|
size = '".$document->size."', |
|
|
|
|
session_id = '$my_session_id'"; |
|
|
|
|
c_id = ".$this->destination_course_id.", |
|
|
|
|
path = '/".self::DBUTF8escapestring(substr($new_file_name, 9))."', |
|
|
|
|
comment = '".self::DBUTF8escapestring($document->comment)."', |
|
|
|
|
title = '".self::DBUTF8escapestring($document->title)."' , |
|
|
|
|
filetype ='".$document->file_type."', |
|
|
|
|
size = '".$document->size."', |
|
|
|
|
session_id = '$my_session_id'"; |
|
|
|
|
Database::query($sql); |
|
|
|
|
|
|
|
|
|
$document_id = Database::insert_id(); |
|
|
|
@ -668,7 +720,11 @@ class CourseRestorer |
|
|
|
|
} else { |
|
|
|
|
// end if file exists |
|
|
|
|
//make sure the source file actually exists |
|
|
|
|
if (is_file($this->course->backup_path.'/'.$document->path) && is_readable($this->course->backup_path.'/'.$document->path) && is_dir(dirname($path.$document->path)) && is_writeable(dirname($path.$document->path))) { |
|
|
|
|
if (is_file($this->course->backup_path.'/'.$document->path) && |
|
|
|
|
is_readable($this->course->backup_path.'/'.$document->path) && |
|
|
|
|
is_dir(dirname($path.$document->path)) && |
|
|
|
|
is_writeable(dirname($path.$document->path)) |
|
|
|
|
) { |
|
|
|
|
//echo 'Copying'; |
|
|
|
|
copy($this->course->backup_path.'/'.$document->path, $path.$document->path); |
|
|
|
|
|
|
|
|
@ -714,13 +770,13 @@ class CourseRestorer |
|
|
|
|
); |
|
|
|
|
} else { |
|
|
|
|
//echo 'not Copying'; |
|
|
|
|
if(is_file($this->course->backup_path.'/'.$document->path) && is_readable($this->course->backup_path.'/'.$document->path)) { |
|
|
|
|
if (is_file($this->course->backup_path.'/'.$document->path) && is_readable($this->course->backup_path.'/'.$document->path)) { |
|
|
|
|
error_log('Course copy generated an ignoreable error while trying to copy '.$this->course->backup_path.'/'.$document->path.': file not found'); |
|
|
|
|
} |
|
|
|
|
if(!is_dir(dirname($path.$document->path))) { |
|
|
|
|
if (!is_dir(dirname($path.$document->path))) { |
|
|
|
|
error_log('Course copy generated an ignoreable error while trying to copy to '.dirname($path.$document->path).': directory not found'); |
|
|
|
|
} |
|
|
|
|
if(!is_writeable(dirname($path.$document->path))) { |
|
|
|
|
if (!is_writeable(dirname($path.$document->path))) { |
|
|
|
|
error_log('Course copy generated an ignoreable error while trying to copy to '.dirname($path.$document->path).': directory not writeable'); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -746,7 +802,7 @@ class CourseRestorer |
|
|
|
|
if ($this->course->has_resources(RESOURCE_SCORM)) { |
|
|
|
|
$resources = $this->course->resources; |
|
|
|
|
|
|
|
|
|
foreach ($resources[RESOURCE_SCORM] as $id => $document) { |
|
|
|
|
foreach ($resources[RESOURCE_SCORM] as $document) { |
|
|
|
|
$path = api_get_path(SYS_COURSE_PATH).$this->course->destination_path.'/'; |
|
|
|
|
|
|
|
|
|
@mkdir(dirname($path.$document->path), $perm, true); |
|
|
|
|