/** * 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)); }