diff --git a/main/exercice/export/exercise_import.inc.php b/main/exercice/export/exercise_import.inc.php
index 57e87af6a1..cdbf45c024 100644
--- a/main/exercice/export/exercise_import.inc.php
+++ b/main/exercice/export/exercise_import.inc.php
@@ -31,35 +31,39 @@ function tempdir($dir, $prefix = 'tmp', $mode = 0777) {
}
/**
- * @return the path of the temporary directory where the exercise was uploaded and unzipped
+ * the path of the temporary directory where the exercise was uploaded and unzipped
+ * @param string
+ * @param string
+ * @return bool
*/
-function get_and_unzip_uploaded_exercise($baseWorkDir, $uploadPath) {
- global $_course, $_user;
+function get_and_unzip_uploaded_exercise($baseWorkDir, $uploadPath)
+{
+ $_course = api_get_course_info();
+ $_user = api_get_user_info();
+
//Check if the file is valid (not to big and exists)
- if (!isset ($_FILES['userFile']) || !is_uploaded_file($_FILES['userFile']['tmp_name'])) {
+ if (!isset($_FILES['userFile']) || !is_uploaded_file($_FILES['userFile']['tmp_name'])) {
// upload failed
return false;
- }
- if (preg_match('/.zip$/i', $_FILES['userFile']['name']) && handle_uploaded_document($_course, $_FILES['userFile'], $baseWorkDir, $uploadPath, $_user['user_id'], 0, null, 1)) {
- if (!function_exists('gzopen')) {
- //claro_delete_file($uploadPath);
- return false;
- }
- // upload successfull
+ }
+
+ if (preg_match('/.zip$/i', $_FILES['userFile']['name']) &&
+ handle_uploaded_document($_course, $_FILES['userFile'], $baseWorkDir, $uploadPath, $_user['user_id'], 0, null, 1)
+ ) {
return true;
- } else {
- //claro_delete_file($uploadPath);
- return false;
}
+ return false;
}
+
/**
* main function to import an exercise,
- *
+ * @param array $file
* @return an array as a backlog of what was really imported, and error or debug messages to display
*/
-function import_exercise($file) {
+function import_exercise($file)
+{
global $exercise_info;
global $element_pile;
global $non_HTML_tag_to_avoid;
@@ -99,15 +103,17 @@ function import_exercise($file) {
}
// find the different manifests for each question and parse them.
+
$exerciseHandle = opendir($baseWorkDir);
//$question_number = 0;
$file_found = false;
$operation = false;
$result = false;
+
// parse every subdirectory to search xml question files
while (false !== ($file = readdir($exerciseHandle))) {
if (is_dir($baseWorkDir . '/' . $file) && $file != "." && $file != "..") {
- //find each manifest for each question repository found
+ // Find each manifest for each question repository found
$questionHandle = opendir($baseWorkDir . '/' . $file);
while (false !== ($questionFile = readdir($questionHandle))) {
if (preg_match('/.xml$/i', $questionFile)) {
@@ -120,11 +126,12 @@ function import_exercise($file) {
$file_found = true;
} // else ignore file
}
+
if (!$file_found) {
- Display :: display_error_message(get_lang('No XML file found in the zip'));
+ Display :: display_error_message(get_lang('No XML file found in the zip'));
return false;
}
- if ($result == false ) {
+ if ($result == false ) {
return false;
}
@@ -133,7 +140,7 @@ function import_exercise($file) {
//1.create exercise
$exercise = new Exercise();
$exercise->exercise = $exercise_info['name'];
-
+
$exercise->save();
$last_exercise_id = $exercise->selectId();
if (!empty($last_exercise_id)) {
@@ -170,11 +177,12 @@ function import_exercise($file) {
// delete the temp dir where the exercise was unzipped
my_delete($baseWorkDir . $uploadPath);
$operation = true;
- }
+ }
return $operation;
}
-function parse_file($exercisePath, $file, $questionFile) {
+function parse_file($exercisePath, $file, $questionFile)
+{
global $exercise_info;
global $element_pile;
global $non_HTML_tag_to_avoid;
@@ -183,8 +191,7 @@ function parse_file($exercisePath, $file, $questionFile) {
$questionTempDir = $exercisePath . '/' . $file . '/';
$questionFilePath = $questionTempDir . $questionFile;
-
- if (!($fp = @ fopen($questionFilePath, 'r'))) {
+ if (!($fp = fopen($questionFilePath, 'r'))) {
Display :: display_error_message(get_lang('Error opening question\'s XML file'));
return false;
} else {
@@ -193,7 +200,7 @@ function parse_file($exercisePath, $file, $questionFile) {
//parse XML question file
$data = str_replace(array('
', '
','',''), '', $data);
-
+
//used global variable start values declaration :
$record_item_body = false;
@@ -412,12 +419,12 @@ function startElement($parser, $name, $attributes) {
//retrieve answers id for MCUA and MCMA questions
case 'SIMPLECHOICE' :
-
+
$current_answer_id = $attributes['IDENTIFIER'];
if (!isset($exercise_info['question'][$current_question_ident]['answer'][$current_answer_id])) {
$exercise_info['question'][$current_question_ident]['answer'][$current_answer_id] = array ();
}
-
+
break;
case 'MAPENTRY' :
@@ -524,15 +531,15 @@ function elementData($parser, $data) {
if ($record_item_body && (!in_array($current_element, $non_HTML_tag_to_avoid))) {
$current_question_item_body .= $data;
}
-
+
switch ($current_element) {
case 'SIMPLECHOICE' :
-
+
if (!isset ($exercise_info['question'][$current_question_ident]['answer'][$current_answer_id]['value'])) {
$exercise_info['question'][$current_question_ident]['answer'][$current_answer_id]['value'] = trim($data);
} else {
$exercise_info['question'][$current_question_ident]['answer'][$current_answer_id]['value'] .= ''.trim($data);
- }
+ }
break;
case 'FEEDBACKINLINE' :
@@ -590,4 +597,4 @@ function elementData($parser, $data) {
}
break;
}
-}
\ No newline at end of file
+}
diff --git a/main/exercice/qti2.php b/main/exercice/qti2.php
index 40d56760ab..261cfde86c 100644
--- a/main/exercice/qti2.php
+++ b/main/exercice/qti2.php
@@ -30,22 +30,33 @@ if (!api_is_allowed_to_edit(null, true)) {
}
// the breadcrumbs
-$interbreadcrumb[]= array ("url"=>"exercice.php", "name"=> get_lang('Exercices'));
+$interbreadcrumb[]= array (
+ "url" => api_get_path(WEB_CODE_PATH)."exercice/exercice.php?".api_get_cidreq(),
+ "name" => get_lang('Exercices')
+);
$is_allowedToEdit = api_is_allowed_to_edit(null, true);
/**
* This function displays the form for import of the zip file with qti2
*/
-function ch_qti2_display_form() {
+function ch_qti2_display_form()
+{
$name_tools = get_lang('ImportQtiQuiz');
$form = '';
- $form_validator = new FormValidator('qti_upload', 'post',api_get_self()."?".api_get_cidreq(), null, array('enctype' => 'multipart/form-data') );
- $form_validator->addElement('header', $name_tools);
- $form_validator->addElement('file', 'userFile', get_lang('DownloadFile'));
- $form_validator->addElement('style_submit_button', 'submit', get_lang('Send'), 'class="upload"');
- $form .= $form_validator->return_form();
+ $formValidator = new FormValidator(
+ 'qti_upload',
+ 'post',
+ api_get_self()."?".api_get_cidreq(),
+ null,
+ array('enctype' => 'multipart/form-data')
+ );
+ $formValidator->addElement('header', $name_tools);
+ $formValidator->addElement('file', 'userFile', get_lang('DownloadFile'));
+ $formValidator->addElement('style_submit_button', 'submit', get_lang('Send'), 'class="upload"');
+ $form .= $formValidator->return_form();
echo $form;
}
@@ -54,7 +65,8 @@ function ch_qti2_display_form() {
* This function will import the zip file with the respective qti2
* @param array $uploaded_file ($_FILES)
*/
-function ch_qti2_import_file($array_file) {
+function ch_qti2_import_file($array_file)
+{
$unzip = 0;
$lib_path = api_get_path(LIBRARY_PATH);
require_once $lib_path.'fileUpload.lib.php';
@@ -64,15 +76,20 @@ function ch_qti2_import_file($array_file) {
// if it's a zip, allow zip upload
$unzip = 1;
}
+
if ($process && $unzip == 1) {
$main_path = api_get_path(SYS_CODE_PATH);
require_once $main_path.'exercice/export/exercise_import.inc.php';
require_once $main_path.'exercice/export/qti2/qti2_classes.php';
+
$imported = import_exercise($array_file['name']);
+
if ($imported) {
- header('Location: exercice.php?'.api_get_cidreq());
+ header('Location: '.api_get_path(WEB_CODE_PATH).'exercice/exercice.php?'.api_get_cidreq());
+ exit;
} else {
Display::display_error_message(get_lang('UplNoFileUploaded'));
+
return false;
}
}
@@ -92,4 +109,4 @@ if ((api_is_allowed_to_edit(null, true))) {
ch_qti2_display_form();
// display the footer
-Display::display_footer();
\ No newline at end of file
+Display::display_footer();
diff --git a/main/inc/lib/fileUpload.lib.php b/main/inc/lib/fileUpload.lib.php
index 9e5ce977ba..3d363d523b 100644
--- a/main/inc/lib/fileUpload.lib.php
+++ b/main/inc/lib/fileUpload.lib.php
@@ -211,7 +211,14 @@ function handle_uploaded_document(
// If the want to unzip, check if the file has a .zip (or ZIP,Zip,ZiP,...) extension
if ($unzip == 1 && preg_match('/.zip$/', strtolower($uploaded_file['name']))) {
- return unzip_uploaded_document($uploaded_file, $upload_path, $base_work_dir, $max_filled_space, $output, $to_group_id);
+ return unzip_uploaded_document(
+ $uploaded_file,
+ $upload_path,
+ $base_work_dir,
+ $max_filled_space,
+ $output,
+ $to_group_id
+ );
//display_message('Unzipping file');
} elseif ($unzip == 1 && !preg_match('/.zip$/', strtolower($uploaded_file['name']))) { // We can only unzip ZIP files (no gz, tar,...)
if ($output) {
@@ -751,7 +758,14 @@ function unzip_uploaded_file($uploaded_file, $upload_path, $base_work_dir, $max_
*
* @return boolean true if it succeeds false otherwise
*/
-function unzip_uploaded_document($uploaded_file, $upload_path, $base_work_dir, $max_filled_space, $output = true, $to_group_id = 0) {
+function unzip_uploaded_document(
+ $uploaded_file,
+ $upload_path,
+ $base_work_dir,
+ $max_filled_space,
+ $output = true,
+ $to_group_id = 0
+) {
global $_course;
global $_user;
global $to_user_id;
@@ -760,11 +774,10 @@ function unzip_uploaded_document($uploaded_file, $upload_path, $base_work_dir, $
$zip_file = new PclZip($uploaded_file['tmp_name']);
// Check the zip content (real size and file extension)
-
$zip_content_array = (array)$zip_file->listContent();
$real_filesize = 0;
- foreach($zip_content_array as & $this_content) {
+ foreach ($zip_content_array as & $this_content) {
$real_filesize += $this_content['size'];
}
@@ -782,12 +795,13 @@ function unzip_uploaded_document($uploaded_file, $upload_path, $base_work_dir, $
// Get into the right directory
$save_dir = getcwd();
+
chdir($base_work_dir.$upload_path);
// We extract using a callback function that "cleans" the path
$unzipping_state = $zip_file->extract(PCLZIP_CB_PRE_EXTRACT, 'clean_up_files_in_zip', PCLZIP_OPT_REPLACE_NEWER);
// Add all documents in the unzipped folder to the database
add_all_documents_in_folder_to_database($_course, $_user['user_id'], $base_work_dir ,$upload_path == '/' ? '' : $upload_path, $to_group_id);
- //Display::display_normal_message(get_lang('UplZipExtractSuccess'));
+
return true;
}