|
@@ -16,49 +16,81 @@ class MoodleImport
|
|
|
*
|
|
|
* @param resource $uploadedFile *.* mbz file moodle course backup
|
|
|
*
|
|
|
+ * @throws Exception
|
|
|
+ *
|
|
|
* @return bool
|
|
|
*/
|
|
|
public function import($uploadedFile)
|
|
|
{
|
|
|
- $file = $uploadedFile['tmp_name'];
|
|
|
-
|
|
|
- if (!is_file($file) || !is_readable($file)) {
|
|
|
- return false;
|
|
|
+ if (UPLOAD_ERR_OK !== $uploadedFile['error']) {
|
|
|
+ throw new Exception(get_lang('UploadError'));
|
|
|
}
|
|
|
|
|
|
- $package = new PclZip($file);
|
|
|
- $mainFileKey = 0;
|
|
|
- $packageContent = $package->listContent();
|
|
|
- if (!empty($packageContent)) {
|
|
|
- foreach ($packageContent as $index => $value) {
|
|
|
- if ($value['filename'] == 'moodle_backup.xml') {
|
|
|
- $mainFileKey = $index;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
+ $cachePath = api_get_path(SYS_ARCHIVE_PATH);
|
|
|
+ $tempPath = $uploadedFile['tmp_name'];
|
|
|
+ $nameParts = explode('.', $uploadedFile['name']);
|
|
|
+ $extension = array_pop($nameParts);
|
|
|
+ $name = basename($tempPath).".$extension";
|
|
|
+
|
|
|
+ if (!move_uploaded_file($tempPath, api_get_path(SYS_ARCHIVE_PATH).$name)) {
|
|
|
+ throw new Exception(get_lang('UploadError'));
|
|
|
}
|
|
|
|
|
|
- if (!$mainFileKey) {
|
|
|
- Display::addFlash(
|
|
|
- Display::return_message(
|
|
|
- get_lang('FailedToImportThisIsNotAMoodleFile'),
|
|
|
- 'error'
|
|
|
- )
|
|
|
- );
|
|
|
+ $filePath = $cachePath.$name;
|
|
|
|
|
|
- return false;
|
|
|
+ if (!is_readable($filePath)) {
|
|
|
+ throw new Exception(get_lang('UploadError'));
|
|
|
}
|
|
|
|
|
|
+ $mimeType = mime_content_type($filePath);
|
|
|
+
|
|
|
$folder = api_get_unique_id();
|
|
|
$destinationDir = api_get_path(SYS_ARCHIVE_PATH).$folder;
|
|
|
+
|
|
|
+ mkdir($destinationDir, api_get_permissions_for_new_directories(), true);
|
|
|
+
|
|
|
+ switch ($mimeType) {
|
|
|
+ case 'application/x-gzip':
|
|
|
+ $backUpFile = new PharData($filePath);
|
|
|
+
|
|
|
+ if (false === $backUpFile->extractTo($destinationDir)) {
|
|
|
+ throw new Exception(get_lang('ErrorImportingFile'));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!file_exists($destinationDir.'/moodle_backup.xml')) {
|
|
|
+ throw new Exception(get_lang('FailedToImportThisIsNotAMoodleFile'));
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+ case 'application/zip':
|
|
|
+ $package = new PclZip($filePath);
|
|
|
+ $mainFileKey = 0;
|
|
|
+ $packageContent = $package->listContent();
|
|
|
+
|
|
|
+ if (!empty($packageContent)) {
|
|
|
+ foreach ($packageContent as $index => $value) {
|
|
|
+ if ($value['filename'] == 'moodle_backup.xml') {
|
|
|
+ $mainFileKey = $index;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!$mainFileKey) {
|
|
|
+ throw new Exception(get_lang('FailedToImportThisIsNotAMoodleFile'));
|
|
|
+ }
|
|
|
+
|
|
|
+ $package->extract(PCLZIP_OPT_PATH, $destinationDir);
|
|
|
+
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
$coursePath = api_get_course_path();
|
|
|
$sessionId = api_get_session_id();
|
|
|
$groupId = api_get_group_id();
|
|
|
$documentPath = api_get_path(SYS_COURSE_PATH).$coursePath.'/document';
|
|
|
$courseInfo = api_get_course_info();
|
|
|
|
|
|
- mkdir($destinationDir, api_get_permissions_for_new_directories(), true);
|
|
|
-
|
|
|
create_unexisting_directory(
|
|
|
$courseInfo,
|
|
|
api_get_user_id(),
|
|
@@ -71,11 +103,6 @@ class MoodleImport
|
|
|
0
|
|
|
);
|
|
|
|
|
|
- $package->extract(
|
|
|
- PCLZIP_OPT_PATH,
|
|
|
- $destinationDir
|
|
|
- );
|
|
|
-
|
|
|
// This process will upload all question resource files
|
|
|
$filesXml = @file_get_contents($destinationDir.'/files.xml');
|
|
|
$mainFileModuleValues = $this->getAllQuestionFiles($filesXml);
|
|
@@ -128,15 +155,9 @@ class MoodleImport
|
|
|
|
|
|
if (empty($res)) {
|
|
|
removeDir($destinationDir);
|
|
|
+ unlink($filePath);
|
|
|
|
|
|
- Display::addFlash(
|
|
|
- Display::return_message(
|
|
|
- get_lang('FailedToImportThisIsNotAMoodleFile'),
|
|
|
- 'error'
|
|
|
- )
|
|
|
- );
|
|
|
-
|
|
|
- return false;
|
|
|
+ throw new Exception(get_lang('FailedToImportThisIsNotAMoodleFile'));
|
|
|
}
|
|
|
$activities = $doc->getElementsByTagName('activity');
|
|
|
foreach ($activities as $activity) {
|
|
@@ -345,8 +366,9 @@ class MoodleImport
|
|
|
}
|
|
|
|
|
|
removeDir($destinationDir);
|
|
|
+ unlink($filePath);
|
|
|
|
|
|
- return $packageContent[$mainFileKey];
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
/**
|