. /** * renderers/core_renderer.php * @package theme_qualisaude * @copyright 2015 onwards LMSACE Dev Team (http://www.lmsace.com) * @author LMSACE Dev Team * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); /** * qualisaude core renderer renderer from the moodle core renderer * @copyright 2015 onwards LMSACE Dev Team (http://www.lmsace.com) * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class theme_qualisaude_core_renderer extends theme_boost\output\core_renderer { /** * Custom menu in header. * @param custom_menu $menu * @return type */ public function custom_menu_render(custom_menu $menu) { global $CFG; $langs = get_string_manager()->get_list_of_translations(); $haslangmenu = $this->lang_menu() != ''; if (!$menu->has_children() && !$haslangmenu) { return ''; } $content = ''; foreach ($menu->get_children() as $item) { $context = $item->export_for_template($this); $content .= $this->render_from_template('theme_qualisaude/custom_menu_item', $context); } return $content; } /** * This renders the navbar. * Uses bootstrap compatible html. */ public function breadscrumb() { // print_object($this->page->navbar); return $this->render_from_template('theme_qualisaude/breadscrumb', $this->page->navbar); } /** * Wrapper for header elements. * * @return string HTML to display the main header. */ public function edit_buttons() { global $PAGE; $header = new stdClass(); $header->settingsmenu = $this->context_header_settings_menu(); $header->contextheader = $this->context_header(); $header->hasnavbar = empty($PAGE->layout_options['nonavbar']); $header->navbar = $this->navbar(); $header->pageheadingbutton = $this->page_heading_button(); $header->courseheader = $this->course_header(); return $this->render_from_template('theme_qualisaude/edit_buttons', $header); } /** * Extract first image from html * * @param string $html (must be well formed) * @return array | bool (false) */ public static function extract_first_image($html) { $doc = new \DOMDocument(); libxml_use_internal_errors(true); // Required for HTML5. $doc->loadHTML($html); libxml_clear_errors(); // Required for HTML5. $imagetags = $doc->getElementsByTagName('img'); if ($imagetags->item(0)) { $src = $imagetags->item(0)->getAttribute('src'); $alt = $imagetags->item(0)->getAttribute('alt'); return array('src' => $src, 'alt' => $alt); } else { return false; } } /** * Alternative rendering of front page news, called from layout/faux_site_index.php which * replaces the standard news output with this. * * @return string */ public function site_frontpage_news() { global $CFG, $SITE; require_once($CFG->dirroot.'/mod/forum/lib.php'); if (!$forum = forum_get_course_forum($SITE->id, 'news')) { print_error('cannotfindorcreateforum', 'forum'); } $cm = get_coursemodule_from_instance('forum', $forum->id, $SITE->id, false, MUST_EXIST); $context = \context_module::instance($cm->id, MUST_EXIST); $output = html_writer::start_tag('div', array('id' => 'site-news-forum', 'class' => 'clearfix')); $output .= $this->heading(format_string('Notícias', true, array('context' => $context)), 2,'titulo'); $groupmode = groups_get_activity_groupmode($cm, $SITE); $currentgroup = groups_get_activity_group($cm); if (!$discussions = forum_get_discussions($cm, 'p.modified DESC', true, null, $SITE->newsitems, false, -1, $SITE->newsitems)) { $output .= html_writer::tag('div', '('.get_string('nonews', 'forum').')', array('class' => 'forumnodiscuss')); if (forum_user_can_post_discussion($forum, $currentgroup, $groupmode, $cm, $context)) { $output .= html_writer::link( new moodle_url('/mod/forum/post.php', array('forum' => $forum->id)), 'Adicionar notícia', array('class' => 'btn btn-primary') ); } else { // No news and user cannot edit, so return nothing. return 'Nenhuma notícia cadastrada'; } return $output.''; } $output .= html_writer::start_div('', array('id' => 'news-articles')); foreach ($discussions as $discussion) { if (!forum_user_can_see_discussion($forum, $discussion, $context)) { continue; } $message = file_rewrite_pluginfile_urls($discussion->message, 'pluginfile.php', $context->id, 'mod_forum', 'post', $discussion->id); $imagestyle = ''; $imgarr = $this->extract_first_image($message); if ($imgarr) { $imageurl = s($imgarr['src']); $imagestyle = " style=\"background-image:url('$imageurl')\""; } $name = format_string($discussion->name, true, array('context' => $context)); $date = userdate($discussion->timemodified, get_string('strftimedatetime', 'langconfig')); $message = format_text($message, $discussion->messageformat, ['context' => $context]); $readmorebtn = "Saiba mais"; $preview = ''; $newsimage = ''; if (!$imagestyle) { $preview = html_to_text($message, 0, false); $preview = "

".shorten_text($preview, 200)."

"; // $preview .= "

".$readmorebtn."

"; $preview .= "
"; } else { $newsimage = '
'; } $close = get_string('closebuttontitle', 'moodle'); $output .= <<

{$name}

{$preview} HTML; } // $actionlinks = html_writer::link( // new moodle_url('/mod/forum/view.php', array('id' => $cm->id)), // 'Mais notícias', // array('class' => 'btn btn-secondary') // ); // if (forum_user_can_post_discussion($forum, $currentgroup, $groupmode, $cm, $context)) { // $actionlinks .= html_writer::link( // new moodle_url('/mod/forum/post.php', array('forum' => $forum->id)), // 'Nova notícia', // array('class' => 'btn btn-primary') // ); // } $output .= html_writer::end_div(); // $output .= "
$actionlinks
"; $output .= html_writer::end_tag('div'); return $output; } }