/**
  * Restore Work
  */
 function restore_works($session_id = 0)
 {
     $perm = api_get_permissions_for_new_directories();
     if ($this->course->has_resources(RESOURCE_WORK)) {
         $table_work = Database::get_course_table(TABLE_STUDENT_PUBLICATION);
         $table_work_assignment = Database::get_course_table(TABLE_STUDENT_PUBLICATION_ASSIGNMENT);
         $resources = $this->course->resources;
         foreach ($resources[RESOURCE_WORK] as $id => $obj) {
             // check resources inside html from fckeditor tool and copy correct urls into recipient course
             $obj->params['description'] = DocumentManager::replace_urls_inside_content_html_from_copy_course($obj->params['description'], $this->course->code, $this->course->destination_path, $this->course->backup_path, $this->course->info['path']);
             $obj->params['id'] = null;
             $obj->params['c_id'] = $this->destination_course_id;
             $last_id = Database::insert($table_work, $obj->params);
             // re-create dir
             // @todo check security against injection of dir in crafted course backup here!
             $path = $obj->params['url'];
             $path = '/' . str_replace('/', '', substr($path, 1));
             $destination_path = api_get_path(SYS_COURSE_PATH) . $this->course->destination_path . '/work' . $path;
             $r = @mkdir($destination_path, $perm);
             if ($r === false) {
                 error_log('Failed creating directory ' . $destination_path . ' in course restore for work tool');
             }
             if (is_numeric($last_id)) {
                 api_item_property_update($this->destination_course_info, 'work', $last_id, "DirectoryCreated", api_get_user_id());
             }
         }
     }
 }
Exemplo n.º 2
0
 /**
  * Duplicates the question
  *
  * @author Olivier Brouckaert
  * @param  array   Course info of the destination course
  * @return int     ID of the new question
  */
 public function duplicate($course_info = null)
 {
     if (empty($course_info)) {
         $course_info = $this->course;
     }
     $TBL_QUESTIONS = Database::get_course_table(TABLE_QUIZ_QUESTION);
     $TBL_QUESTION_OPTIONS = Database::get_course_table(TABLE_QUIZ_QUESTION_OPTION);
     $question = $this->question;
     $description = $this->description;
     //Using the same method used in the course copy to transform URLs
     if ($this->course['id'] != $course_info['id']) {
         $description = DocumentManager::replace_urls_inside_content_html_from_copy_course($description, $this->course['id'], $course_info['id']);
         $question = DocumentManager::replace_urls_inside_content_html_from_copy_course($question, $this->course['id'], $course_info['id']);
     }
     $course_id = $course_info['real_id'];
     //Read the source options
     $options = self::readQuestionOption($this->id, $this->course['real_id']);
     //Inserting in the new course db / or the same course db
     $params = array('c_id' => $course_id, 'question' => $question, 'description' => $description, 'ponderation' => $this->weighting, 'position' => $this->position, 'type' => $this->type, 'level' => $this->level, 'extra' => $this->extra, 'parent_id' => $this->parent_id);
     $new_question_id = Database::insert($TBL_QUESTIONS, $params);
     if (!empty($options)) {
         //Saving the quiz_options
         foreach ($options as $item) {
             $item['question_id'] = $new_question_id;
             $item['c_id'] = $course_id;
             unset($item['iid']);
             Database::insert($TBL_QUESTION_OPTIONS, $item);
         }
     }
     $this->duplicate_category_question($new_question_id, $course_id);
     // Duplicates the picture of the hotspot
     $this->exportPicture($new_question_id, $course_info);
     return $new_question_id;
 }
Exemplo n.º 3
0
 /**
  * Duplicates the question
  *
  * @author Olivier Brouckaert
  * @param  array   Course info of the destination course
  * @return int     ID of the new question
  */
 public function duplicate($course_info = null)
 {
     if (empty($course_info)) {
         $course_info = $this->course;
     } else {
         $course_info = $course_info;
     }
     $TBL_QUESTIONS = Database::get_course_table(TABLE_QUIZ_QUESTION);
     $TBL_QUESTION_OPTIONS = Database::get_course_table(TABLE_QUIZ_QUESTION_OPTION);
     $question = $this->question;
     $description = $this->description;
     $weighting = $this->weighting;
     $position = $this->position;
     $type = $this->type;
     $level = intval($this->level);
     $extra = $this->extra;
     //Using the same method used in the course copy to transform URLs
     if ($this->course['id'] != $course_info['id']) {
         $description = DocumentManager::replace_urls_inside_content_html_from_copy_course($description, $this->course['code'], $course_info['id']);
         $question = DocumentManager::replace_urls_inside_content_html_from_copy_course($question, $this->course['code'], $course_info['id']);
     }
     $course_id = $course_info['real_id'];
     //Read the source options
     $options = self::readQuestionOption($this->id, $this->course['real_id']);
     // Inserting in the new course db / or the same course db
     $params = ['c_id' => $course_id, 'question' => $question, 'description' => $description, 'ponderation' => $weighting, 'position' => $position, 'type' => $type, 'level' => $level, 'extra' => $extra];
     $new_question_id = Database::insert($TBL_QUESTIONS, $params);
     if ($new_question_id) {
         $sql = "UPDATE {$TBL_QUESTIONS} SET id = iid\n                    WHERE iid = {$new_question_id}";
         Database::query($sql);
         if (!empty($options)) {
             //Saving the quiz_options
             foreach ($options as $item) {
                 $item['question_id'] = $new_question_id;
                 $item['c_id'] = $course_id;
                 unset($item['id']);
                 unset($item['iid']);
                 $id = Database::insert($TBL_QUESTION_OPTIONS, $item);
                 if ($id) {
                     $sql = "UPDATE {$TBL_QUESTION_OPTIONS} SET id = iid\n                                WHERE iid = {$id}";
                     Database::query($sql);
                 }
             }
         }
         // Duplicates the picture of the hotspot
         $this->exportPicture($new_question_id, $course_info);
     }
     return $new_question_id;
 }
Exemplo n.º 4
0
 /**
  * Duplicates answers by copying them into another question
  *
  * @author Olivier Brouckaert
  * @param  int question id
  * @param  array destination course info (result of the function api_get_course_info() )
  */
 public function duplicate($newQuestionId, $course_info = null)
 {
     if (empty($course_info)) {
         $course_info = $this->course;
     }
     $TBL_REPONSES = Database::get_course_table(TABLE_QUIZ_ANSWER);
     $fixed_list = array();
     if (self::getQuestionType() == MULTIPLE_ANSWER_TRUE_FALSE || self::getQuestionType() == MULTIPLE_ANSWER_TRUE_FALSE) {
         // Selecting origin options
         $origin_options = Question::readQuestionOption($this->selectQuestionId(), $this->course['real_id']);
         if (!empty($origin_options)) {
             foreach ($origin_options as $item) {
                 $new_option_list[] = $item['id'];
             }
         }
         $destination_options = Question::readQuestionOption($newQuestionId, $course_info['real_id']);
         $i = 0;
         if (!empty($destination_options)) {
             foreach ($destination_options as $item) {
                 $fixed_list[$new_option_list[$i]] = $item['id'];
                 $i++;
             }
         }
     }
     // if at least one answer
     if ($this->nbrAnswers) {
         // inserts new answers into data base
         $c_id = $course_info['real_id'];
         for ($i = 1; $i <= $this->nbrAnswers; $i++) {
             if ($this->course['id'] != $course_info['id']) {
                 $this->answer[$i] = DocumentManager::replace_urls_inside_content_html_from_copy_course($this->answer[$i], $this->course['id'], $course_info['id']);
                 $this->comment[$i] = DocumentManager::replace_urls_inside_content_html_from_copy_course($this->comment[$i], $this->course['id'], $course_info['id']);
             }
             $answer = $this->answer[$i];
             $correct = $this->correct[$i];
             if (self::getQuestionType() == MULTIPLE_ANSWER_TRUE_FALSE || self::getQuestionType() == MULTIPLE_ANSWER_TRUE_FALSE) {
                 $correct = $fixed_list[intval($correct)];
             }
             $comment = $this->comment[$i];
             $weighting = $this->weighting[$i];
             $position = $this->position[$i];
             $hotspot_coordinates = $this->hotspot_coordinates[$i];
             $hotspot_type = $this->hotspot_type[$i];
             $destination = $this->destination[$i];
             $params = ['c_id' => $c_id, 'question_id' => $newQuestionId, 'answer' => $answer, 'correct' => $correct, 'comment' => $comment, 'ponderation' => $weighting, 'position' => $position, 'hotspot_coordinates' => $hotspot_coordinates, 'hotspot_type' => $hotspot_type, 'destination' => $destination];
             $id = Database::insert($TBL_REPONSES, $params);
             if ($id) {
                 $sql = "UPDATE {$TBL_REPONSES} SET id = id_auto WHERE id_auto = {$id}";
                 Database::query($sql);
             }
         }
     }
 }
 /**
  * Restore Works
  * @param int $sessionId
  */
 public function restore_works($sessionId = 0)
 {
     require_once api_get_path(SYS_CODE_PATH) . 'work/work.lib.php';
     if ($this->course->has_resources(RESOURCE_WORK)) {
         $table_work_assignment = Database::get_course_table(TABLE_STUDENT_PUBLICATION_ASSIGNMENT);
         $resources = $this->course->resources;
         foreach ($resources[RESOURCE_WORK] as $obj) {
             // check resources inside html from ckeditor tool and copy correct urls into recipient course
             $obj->params['description'] = DocumentManager::replace_urls_inside_content_html_from_copy_course($obj->params['description'], $this->course->code, $this->course->destination_path, $this->course->backup_path, $this->course->info['path']);
             $id_work = $obj->params['id'];
             $obj->params['id'] = null;
             $obj->params['c_id'] = $this->destination_course_info['real_id'];
             // re-create dir
             // @todo check security against injection of dir in crafted course backup here!
             $path = $obj->params['url'];
             $path = '/' . str_replace('/', '', substr($path, 1));
             $workData = array();
             switch ($this->file_option) {
                 case FILE_SKIP:
                     $workData = get_work_data_by_path($path, $this->destination_course_info['real_id']);
                     if (!empty($workData)) {
                         continue;
                     }
                 case FILE_OVERWRITE:
                     // Creating folder.
                     $workData = get_work_data_by_path($path, $this->destination_course_info['real_id']);
                 case FILE_RENAME:
                     $obj->params['new_dir'] = $obj->params['title'];
                     if (!empty($this->course_origin_id)) {
                         $sql = 'SELECT * FROM ' . $table_work_assignment . '
                                 WHERE
                                     c_id = ' . $this->course_origin_id . ' AND
                                     publication_id = ' . $id_work;
                         $result = Database::query($sql);
                         $cant = Database::num_rows($result);
                         if ($cant > 0) {
                             $row = Database::fetch_assoc($result);
                         }
                         //$obj->params['qualification'] = empty($row['enable_qualification']) ? true : false;
                         $obj->params['enableExpiryDate'] = $row['expires_on'] == '0000-00-00 00:00:00' ? false : true;
                         $obj->params['enableEndDate'] = $row['ends_on'] == '0000-00-00 00:00:00' ? false : true;
                         $obj->params['expires_on'] = $row['expires_on'];
                         $obj->params['ends_on'] = $row['ends_on'];
                         $obj->params['enable_qualification'] = $row['enable_qualification'];
                         $obj->params['add_to_calendar'] = !empty($row['add_to_calendar']) ? 1 : 0;
                         if (empty($workData)) {
                             addDir($obj->params, api_get_user_id(), $this->destination_course_info, 0, $sessionId);
                         } else {
                             $workId = $workData['id'];
                             updateWork($workId, $obj->params, $this->destination_course_info, $sessionId);
                             updatePublicationAssignment($workId, $obj->params, $this->destination_course_info, 0);
                         }
                     }
                     break;
             }
         }
     }
 }
Exemplo n.º 6
0
 /**
  * Duplicates answers by copying them into another question
  *
  * @author Olivier Brouckaert
  * @param  int question id
  * @param  array destination course info (result of the function api_get_course_info() )
  */
 public function duplicate($newQuestionId, $course_info = null)
 {
     if (empty($course_info)) {
         $course_info = $this->course;
     } else {
         $course_info = $course_info;
     }
     $TBL_REPONSES = Database::get_course_table(TABLE_QUIZ_ANSWER);
     if (self::getQuestionType() == MULTIPLE_ANSWER_TRUE_FALSE || self::getQuestionType() == MULTIPLE_ANSWER_TRUE_FALSE) {
         //Selecting origin options
         $origin_options = Question::readQuestionOption($this->selectQuestionId(), $this->course['real_id']);
         if (!empty($origin_options)) {
             foreach ($origin_options as $item) {
                 $new_option_list[] = $item['id'];
             }
         }
         $destination_options = Question::readQuestionOption($newQuestionId, $course_info['real_id']);
         $i = 0;
         $fixed_list = array();
         if (!empty($destination_options)) {
             foreach ($destination_options as $item) {
                 $fixed_list[$new_option_list[$i]] = $item['id'];
                 $i++;
             }
         }
     }
     // if at least one answer
     if ($this->nbrAnswers) {
         // inserts new answers into data base
         $c_id = $course_info['real_id'];
         $correct_answers = array();
         $new_ids = array();
         foreach ($this->answer as $answer_id => $answer_item) {
             $i = $answer_id;
             if ($this->course['id'] != $course_info['id']) {
                 $this->answer[$i] = DocumentManager::replace_urls_inside_content_html_from_copy_course($this->answer[$i], $this->course['id'], $course_info['id']);
                 $this->comment[$i] = DocumentManager::replace_urls_inside_content_html_from_copy_course($this->comment[$i], $this->course['id'], $course_info['id']);
             }
             $answer = Database::escape_string($this->answer[$i]);
             $correct = Database::escape_string($this->correct[$i]);
             if (self::getQuestionType() == MULTIPLE_ANSWER_TRUE_FALSE || self::getQuestionType() == MULTIPLE_ANSWER_TRUE_FALSE) {
                 $correct = $fixed_list[intval($correct)];
             }
             $comment = Database::escape_string($this->comment[$i]);
             $weighting = Database::escape_string($this->weighting[$i]);
             $position = Database::escape_string($this->position[$i]);
             $hotspot_coordinates = Database::escape_string($this->hotspot_coordinates[$i]);
             $hotspot_type = Database::escape_string($this->hotspot_type[$i]);
             $destination = Database::escape_string($this->destination[$i]);
             $sql = "INSERT INTO {$TBL_REPONSES}(question_id, answer, correct, comment, ponderation, position, hotspot_coordinates, hotspot_type ,destination) VALUES";
             $sql .= "('{$newQuestionId}','{$answer}','{$correct}','{$comment}', '{$weighting}','{$position}','{$hotspot_coordinates}','{$hotspot_type}','{$destination}')";
             Database::query($sql);
             $new_id = Database::insert_id();
             $new_ids[$answer_id] = $new_id;
             if ($correct) {
                 $correct_answers[$new_id] = $correct;
             }
         }
         if (self::getQuestionType() == MATCHING) {
             if (!empty($correct_answers)) {
                 foreach ($correct_answers as $new_id => $correct_id) {
                     $correct = $new_ids[$correct_id];
                     $sql = "UPDATE {$TBL_REPONSES} SET correct = {$correct} WHERE iid = {$new_id}";
                     Database::query($sql);
                 }
             }
         }
     }
 }
Exemplo n.º 7
0
 /**
  * Duplicates the question
  *
  * @author Olivier Brouckaert
  * @param  array   Course info of the destination course
  * @return int     ID of the new question
  */
 function duplicate($course_info = null)
 {
     if (empty($course_info)) {
         $course_info = $this->course;
     } else {
         $course_info = $course_info;
     }
     $TBL_QUESTIONS = Database::get_course_table(TABLE_QUIZ_QUESTION);
     $TBL_QUESTION_OPTIONS = Database::get_course_table(TABLE_QUIZ_QUESTION_OPTION);
     $question = $this->question;
     $description = $this->description;
     $weighting = $this->weighting;
     $position = $this->position;
     $type = $this->type;
     $level = intval($this->level);
     $extra = $this->extra;
     //Using the same method used in the course copy to transform URLs
     if ($this->course['id'] != $course_info['id']) {
         $description = DocumentManager::replace_urls_inside_content_html_from_copy_course($description, $this->course['id'], $course_info['id']);
         $question = DocumentManager::replace_urls_inside_content_html_from_copy_course($question, $this->course['id'], $course_info['id']);
     }
     $course_id = $course_info['real_id'];
     //Read the source options
     $options = self::readQuestionOption($this->id, $this->course['real_id']);
     //Inserting in the new course db / or the same course db
     $sql = "INSERT INTO {$TBL_QUESTIONS} (c_id, question, description, ponderation, position, type, level, extra )\n\t\t\t\tVALUES('{$course_id}', '" . Database::escape_string($question) . "','" . Database::escape_string($description) . "','" . Database::escape_string($weighting) . "','" . Database::escape_string($position) . "','" . Database::escape_string($type) . "' ,'" . Database::escape_string($level) . "' ,'" . Database::escape_string($extra) . "'  )";
     Database::query($sql);
     $new_question_id = Database::insert_id();
     if (!empty($options)) {
         //Saving the quiz_options
         foreach ($options as $item) {
             $item['question_id'] = $new_question_id;
             $item['c_id'] = $course_id;
             unset($item['id']);
             Database::insert($TBL_QUESTION_OPTIONS, $item);
         }
     }
     // Duplicates the picture of the hotspot
     $this->exportPicture($new_question_id, $course_info);
     return $new_question_id;
 }