/**
  * Read page
  *
  * @throws \coding_exception
  * @return stdClass
  */
 private function read_page()
 {
     global $PAGE, $COURSE;
     $cm = $PAGE->cm;
     $page = \theme_snap\local::get_page_mod($cm);
     $context = $PAGE->context;
     // Trigger module instance viewed event.
     $event = \mod_page\event\course_module_viewed::create(array('objectid' => $page->id, 'context' => $context));
     $event->add_record_snapshot('course_modules', $cm);
     $event->add_record_snapshot('course', $COURSE);
     $event->add_record_snapshot('page', $page);
     $event->trigger();
     return $page;
 }
 /**
  * Read page
  *
  * @throws \coding_exception
  * @return stdClass
  */
 private function read_page()
 {
     global $PAGE, $COURSE;
     $cm = $PAGE->cm;
     $page = \theme_snap\local::get_page_mod($cm);
     $context = $PAGE->context;
     // Trigger module instance viewed event.
     $event = \mod_page\event\course_module_viewed::create(array('objectid' => $page->id, 'context' => $context));
     $event->add_record_snapshot('course_modules', $cm);
     $event->add_record_snapshot('course', $COURSE);
     $event->add_record_snapshot('page', $page);
     $event->trigger();
     // Update 'viewed' state if required by completion system.
     $completion = new \completion_info($COURSE);
     $completion->set_module_viewed($cm);
     $renderer = $PAGE->get_renderer('core', 'course');
     $page->completionhtml = $renderer->course_section_cm_completion($COURSE, $completion, $cm);
     return $page;
 }
 /**
  * Get page module html
  * @param cm_info $mod
  * @return string
  */
 protected function mod_page_html(cm_info $mod)
 {
     if (!$mod->uservisible) {
         return "";
     }
     $page = \theme_snap\local::get_page_mod($mod);
     $imgarr = \theme_snap\local::extract_first_image($page->content);
     $thumbnail = '';
     if ($imgarr) {
         $img = html_writer::img($imgarr['src'], $imgarr['alt']);
         $thumbnail = "<div class=summary-figure>{$img}</div>";
     }
     $readmore = get_string('readmore', 'theme_snap');
     $close = get_string('close', 'theme_snap');
     // Identify content elements which should force an AJAX lazy load.
     $elcontentblist = ['iframe', 'video', 'object', 'embed'];
     $content = $page->content;
     $lazyload = false;
     foreach ($elcontentblist as $el) {
         if (stripos($content, '<' . $el) !== false) {
             $content = '';
             // Don't include the content as it is likely to slow the page load down considerably.
             $lazyload = true;
         }
     }
     $contentloaded = !$lazyload ? 1 : 0;
     $o = "\n        {$thumbnail}\n        <div class='summary-text'>\n            {$page->summary}\n            <p><a class='pagemod-readmore' href='{$mod->url}' data-pagemodcontext='{$mod->context->id}'>{$readmore}</a></p>\n        </div>\n\n        <div class=pagemod-content tabindex='-1' data-content-loaded={$contentloaded}>\n            {$content}\n            <div><hr><a  class='snap-action-icon' href='#'>\n            <i class='icon icon-office-52'></i><small>{$close}</small></a></div>\n        </div>";
     return $o;
 }
 /**
  * Test that the summary, when generated from the intro text, does not strip out images or trim the text in anyway.
  * @throws \coding_exception
  * @throws \moodle_exception
  */
 public function test_get_page_mod_intro_summary()
 {
     $this->resetAfterTest();
     $generator = $this->getDataGenerator();
     $course = $generator->create_course();
     $pagegen = $generator->get_plugin_generator('mod_page');
     $page = $pagegen->create_instance(['course' => $course->id, 'intro' => '<img src="http://fakeurl.local/testimg.png" alt="some alt text" />' . '<p>Some content text</p>' . str_pad('-', 200)]);
     $cm = get_course_and_cm_from_instance($page->id, 'page', $course->id)[1];
     $pagemod = local::get_page_mod($cm);
     // Ensure summary contains text and is sitll within tags.
     $this->assertContains('<p>Some content text</p>', $pagemod->summary);
     // Ensure summary contains images.
     $this->assertContains('<img', $pagemod->summary);
     // Make sure summary text can be greater than 200 chars.
     $this->assertGreaterThan(200, strlen($pagemod->summary));
 }