Ejemplo n.º 1
0
 /**
  * Test the page updated event.
  *
  * There is no external API for updateing a page, so the unit test will simply
  * create and trigger the event and ensure data is returned as expected.
  */
 public function test_page_updated()
 {
     // Trigger an event: page updated.
     $eventparams = array('context' => context_module::instance($this->lesson->properties()->cmid), 'objectid' => 25, 'other' => array('pagetype' => 'True/false'));
     $event = \mod_lesson\event\page_updated::create($eventparams);
     // Trigger and capture the event.
     $sink = $this->redirectEvents();
     $event->trigger();
     $events = $sink->get_events();
     $event = reset($events);
     // Check that the event data is valid.
     $this->assertInstanceOf('\\mod_lesson\\event\\page_updated', $event);
     $this->assertEquals(25, $event->objectid);
     $this->assertEquals('True/false', $event->other['pagetype']);
     $this->assertEventContextNotUsed($event);
     $this->assertDebuggingNotCalled();
 }
Ejemplo n.º 2
0
 /**
  * Updates a lesson page and its answers within the database
  *
  * @param object $properties
  * @return bool
  */
 public function update($properties, $context = null, $maxbytes = null)
 {
     global $DB, $PAGE;
     $answers = $this->get_answers();
     $properties->id = $this->properties->id;
     $properties->lessonid = $this->lesson->id;
     if (empty($properties->qoption)) {
         $properties->qoption = '0';
     }
     if (empty($context)) {
         $context = $PAGE->context;
     }
     if ($maxbytes === null) {
         $maxbytes = get_user_max_upload_file_size($context);
     }
     $properties->timemodified = time();
     $properties = file_postupdate_standard_editor($properties, 'contents', array('noclean' => true, 'maxfiles' => EDITOR_UNLIMITED_FILES, 'maxbytes' => $maxbytes), $context, 'mod_lesson', 'page_contents', $properties->id);
     $DB->update_record("lesson_pages", $properties);
     // Trigger an event: page updated.
     \mod_lesson\event\page_updated::create_from_lesson_page($this, $context)->trigger();
     if ($this->type == self::TYPE_STRUCTURE && $this->get_typeid() != LESSON_PAGE_BRANCHTABLE) {
         // These page types have only one answer to save the jump and score.
         if (count($answers) > 1) {
             $answer = array_shift($answers);
             foreach ($answers as $a) {
                 $DB->delete_record('lesson_answers', array('id' => $a->id));
             }
         } else {
             if (count($answers) == 1) {
                 $answer = array_shift($answers);
             } else {
                 $answer = new stdClass();
                 $answer->lessonid = $properties->lessonid;
                 $answer->pageid = $properties->id;
                 $answer->timecreated = time();
             }
         }
         $answer->timemodified = time();
         if (isset($properties->jumpto[0])) {
             $answer->jumpto = $properties->jumpto[0];
         }
         if (isset($properties->score[0])) {
             $answer->score = $properties->score[0];
         }
         if (!empty($answer->id)) {
             $DB->update_record("lesson_answers", $answer->properties());
         } else {
             $DB->insert_record("lesson_answers", $answer);
         }
     } else {
         for ($i = 0; $i < $this->lesson->maxanswers; $i++) {
             if (!array_key_exists($i, $this->answers)) {
                 $this->answers[$i] = new stdClass();
                 $this->answers[$i]->lessonid = $this->lesson->id;
                 $this->answers[$i]->pageid = $this->id;
                 $this->answers[$i]->timecreated = $this->timecreated;
             }
             if (isset($properties->answer_editor[$i])) {
                 if (is_array($properties->answer_editor[$i])) {
                     // Multichoice and true/false pages have an HTML editor.
                     $this->answers[$i]->answer = $properties->answer_editor[$i]['text'];
                     $this->answers[$i]->answerformat = $properties->answer_editor[$i]['format'];
                 } else {
                     // Branch tables, shortanswer and mumerical pages have only a text field.
                     $this->answers[$i]->answer = $properties->answer_editor[$i];
                     $this->answers[$i]->answerformat = FORMAT_MOODLE;
                 }
             }
             if (!empty($properties->response_editor[$i]) && is_array($properties->response_editor[$i])) {
                 $this->answers[$i]->response = $properties->response_editor[$i]['text'];
                 $this->answers[$i]->responseformat = $properties->response_editor[$i]['format'];
             }
             if (isset($this->answers[$i]->answer) && $this->answers[$i]->answer != '') {
                 if (isset($properties->jumpto[$i])) {
                     $this->answers[$i]->jumpto = $properties->jumpto[$i];
                 }
                 if ($this->lesson->custom && isset($properties->score[$i])) {
                     $this->answers[$i]->score = $properties->score[$i];
                 }
                 if (!isset($this->answers[$i]->id)) {
                     $this->answers[$i]->id = $DB->insert_record("lesson_answers", $this->answers[$i]);
                 } else {
                     $DB->update_record("lesson_answers", $this->answers[$i]->properties());
                 }
                 // Save files in answers and responses.
                 if (isset($properties->response_editor[$i])) {
                     $this->save_answers_files($context, $maxbytes, $this->answers[$i], $properties->answer_editor[$i], $properties->response_editor[$i]);
                 } else {
                     $this->save_answers_files($context, $maxbytes, $this->answers[$i], $properties->answer_editor[$i]);
                 }
             } else {
                 if (isset($this->answers[$i]->id)) {
                     $DB->delete_records('lesson_answers', array('id' => $this->answers[$i]->id));
                     unset($this->answers[$i]);
                 }
             }
         }
     }
     return true;
 }
Ejemplo n.º 3
0
 /**
  * Updates the page and its answers
  *
  * @global moodle_database $DB
  * @global moodle_page $PAGE
  * @param stdClass $properties
  * @return bool
  */
 public function update($properties, $context = null, $maxbytes = null)
 {
     global $DB, $PAGE;
     $answers = $this->get_answers();
     $properties->id = $this->properties->id;
     $properties->lessonid = $this->lesson->id;
     $properties->timemodified = time();
     $properties = file_postupdate_standard_editor($properties, 'contents', array('noclean' => true, 'maxfiles' => EDITOR_UNLIMITED_FILES, 'maxbytes' => $PAGE->course->maxbytes), context_module::instance($PAGE->cm->id), 'mod_lesson', 'page_contents', $properties->id);
     $DB->update_record("lesson_pages", $properties);
     // Trigger an event: page updated.
     \mod_lesson\event\page_updated::create_from_lesson_page($this, $context)->trigger();
     // need to reset offset for correct and wrong responses
     $this->lesson->maxanswers = 2;
     for ($i = 0; $i < $this->lesson->maxanswers; $i++) {
         if (!array_key_exists($i, $this->answers)) {
             $this->answers[$i] = new stdClass();
             $this->answers[$i]->lessonid = $this->lesson->id;
             $this->answers[$i]->pageid = $this->id;
             $this->answers[$i]->timecreated = $this->timecreated;
         }
         if (!empty($properties->answer_editor[$i]) && is_array($properties->answer_editor[$i])) {
             $this->answers[$i]->answer = $properties->answer_editor[$i]['text'];
             $this->answers[$i]->answerformat = $properties->answer_editor[$i]['format'];
         }
         if (!empty($properties->response_editor[$i]) && is_array($properties->response_editor[$i])) {
             $this->answers[$i]->response = $properties->response_editor[$i]['text'];
             $this->answers[$i]->responseformat = $properties->response_editor[$i]['format'];
         }
         // we don't need to check for isset here because properties called it's own isset method.
         if ($this->answers[$i]->answer != '') {
             if (isset($properties->jumpto[$i])) {
                 $this->answers[$i]->jumpto = $properties->jumpto[$i];
             }
             if ($this->lesson->custom && isset($properties->score[$i])) {
                 $this->answers[$i]->score = $properties->score[$i];
             }
             if (!isset($this->answers[$i]->id)) {
                 $this->answers[$i]->id = $DB->insert_record("lesson_answers", $this->answers[$i]);
             } else {
                 $DB->update_record("lesson_answers", $this->answers[$i]->properties());
             }
             // Save files in answers and responses.
             $this->save_answers_files($context, $maxbytes, $this->answers[$i], $properties->answer_editor[$i], $properties->response_editor[$i]);
         } else {
             if (isset($this->answers[$i]->id)) {
                 $DB->delete_records('lesson_answers', array('id' => $this->answers[$i]->id));
                 unset($this->answers[$i]);
             }
         }
     }
     return true;
 }
Ejemplo n.º 4
0
 public function update($properties, $context = null, $maxbytes = null)
 {
     global $DB, $PAGE;
     $answers = $this->get_answers();
     $properties->id = $this->properties->id;
     $properties->lessonid = $this->lesson->id;
     $properties->timemodified = time();
     $properties = file_postupdate_standard_editor($properties, 'contents', array('noclean' => true, 'maxfiles' => EDITOR_UNLIMITED_FILES, 'maxbytes' => $PAGE->course->maxbytes), context_module::instance($PAGE->cm->id), 'mod_lesson', 'page_contents', $properties->id);
     $DB->update_record("lesson_pages", $properties);
     // Trigger an event: page updated.
     \mod_lesson\event\page_updated::create_from_lesson_page($this, $context)->trigger();
     if (!array_key_exists(0, $this->answers)) {
         $this->answers[0] = new stdClass();
         $this->answers[0]->lessonid = $this->lesson->id;
         $this->answers[0]->pageid = $this->id;
         $this->answers[0]->timecreated = $this->timecreated;
     }
     if (isset($properties->jumpto[0])) {
         $this->answers[0]->jumpto = $properties->jumpto[0];
     }
     if (isset($properties->score[0])) {
         $this->answers[0]->score = $properties->score[0];
     }
     if (!isset($this->answers[0]->id)) {
         $this->answers[0]->id = $DB->insert_record("lesson_answers", $this->answers[0]);
     } else {
         $DB->update_record("lesson_answers", $this->answers[0]->properties());
     }
     return true;
 }