Current Path : C:/xampp/htdocs/moodle/theme/moove/classes/ |
Current File : C:/xampp/htdocs/moodle/theme/moove/classes/format_topics_renderer.php |
<?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Overriden course topics format renderer. * * @package theme_moove * @copyright 2017 Willian Mano - http://conecti.me * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); require_once($CFG->dirroot . '/course/format/topics/renderer.php'); /** * Rewrite format topics renderer base class * * @package theme_moove * @copyright 2017 Willian Mano - http://conecti.me * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class theme_moove_format_topics_renderer extends format_topics_renderer { /** * Output the html for a single section page . * * @param stdClass $course The course entry from DB * @param array $sections (argument not used) * @param array $mods (argument not used) * @param array $modnames (argument not used) * @param array $modnamesused (argument not used) * @param int $displaysection The section number in the course which is being displayed */ public function print_single_section_page($course, $sections, $mods, $modnames, $modnamesused, $displaysection) { $modinfo = get_fast_modinfo($course); $course = course_get_format($course)->get_course(); // Can we view the section in question? if (!($sectioninfo = $modinfo->get_section_info($displaysection))) { // This section doesn't exist. print_error('unknowncoursesection', 'error', null, $course->fullname); return; } if (!$sectioninfo->uservisible) { if (!$course->hiddensections) { echo $this->start_section_list(); echo $this->section_hidden($displaysection, $course->id); echo $this->end_section_list(); } // Can't view this section. return; } // Copy activity clipboard.. echo $this->course_activity_clipboard($course, $displaysection); $thissection = $modinfo->get_section_info(0); if ($thissection->summary or !empty($modinfo->sections[0]) or $this->page->user_is_editing()) { echo $this->start_section_list(); echo $this->section_header($thissection, $course, true, $displaysection); echo $this->courserenderer->course_section_cm_list($course, $thissection, $displaysection); echo $this->courserenderer->course_section_add_cm_control($course, 0, $displaysection); echo $this->section_footer(); echo $this->end_section_list(); } // Start single-section div. echo html_writer::start_tag('div', array('class' => 'single-section')); // The requested section page. $thissection = $modinfo->get_section_info($displaysection); // Title with section navigation links. $sectionnavlinks = $this->get_nav_links($course, $modinfo->get_section_info_all(), $displaysection); $sectiontitle = ''; $sectiontitle .= html_writer::start_tag('div', array('class' => 'section-navigation navigationtitle')); // Title attributes. $classes = 'sectionname'; if (!$thissection->visible) { $classes .= ' dimmed_text'; } $sectionname = html_writer::tag('span', $this->section_title_without_link($thissection, $course)); $sectiontitle .= $this->output->heading($sectionname, 3, $classes); $sectiontitle .= html_writer::end_tag('div'); echo $sectiontitle; // Now the list of sections.. echo $this->start_section_list(); echo $this->section_header($thissection, $course, true, $displaysection); // Show completion help icon. $completioninfo = new completion_info($course); echo $completioninfo->display_help_icon(); echo $this->courserenderer->course_section_cm_list($course, $thissection, $displaysection); echo $this->courserenderer->course_section_add_cm_control($course, $displaysection, $displaysection); echo $this->section_footer(); echo $this->end_section_list(); // Display section bottom navigation. $sectionbottomnav = ''; $sectionbottomnav .= html_writer::start_tag('div', array('class' => 'section-navigation mdl-bottom')); $sectionbottomnav .= html_writer::tag('span', $sectionnavlinks['previous'], array('class' => 'mdl-left')); $sectionbottomnav .= html_writer::tag('span', $sectionnavlinks['next'], array('class' => 'mdl-right')); $sectionbottomnav .= html_writer::tag('div', $this->section_nav_selection($course, $sections, $displaysection), array('class' => 'mdl-align')); $sectionbottomnav .= html_writer::end_tag('div'); echo $sectionbottomnav; // Close single-section div. echo html_writer::end_tag('div'); } /** * Generate next/previous section links for naviation * * @param stdClass $course The course entry from DB * @param array $sections The course_sections entries from the DB * @param int $sectionno The section number in the coruse which is being dsiplayed * @return array associative array with previous and next section link */ protected function get_nav_links($course, $sections, $sectionno) { // FIXME: This is really evil and should by using the navigation API. $course = course_get_format($course)->get_course(); $canviewhidden = has_capability('moodle/course:viewhiddensections', context_course::instance($course->id)) or !$course->hiddensections; $arrowleft = 'left'; $arrowright = 'right'; // RTL support. if (right_to_left()) { $arrowleft = 'right'; $arrowright = 'left'; } $links = array('previous' => '', 'next' => ''); $back = $sectionno - 1; while ($back > 0 and empty($links['previous'])) { if ($canviewhidden || $sections[$back]->uservisible) { $params = array(); if (!$sections[$back]->visible) { $params = array('class' => 'dimmed_text'); } $previouslink = html_writer::tag('span', '<i class="icon-arrow-'.$arrowleft.'"></i>', array('class' => 'larrow')); $previouslink .= "<span class='text'><span class='nav_guide'>".get_string('prev_section', 'theme_moove')."</span>"; $previouslink .= "<br>" . get_section_name($course, $sections[$back])."</span>"; $links['previous'] = html_writer::link(course_get_url($course, $back), $previouslink, $params); } $back--; } $forward = $sectionno + 1; $numsections = course_get_format($course)->get_last_section_number(); while ($forward <= $numsections and empty($links['next'])) { if ($canviewhidden || $sections[$forward]->uservisible) { $params = array(); if (!$sections[$forward]->visible) { $params = array('class' => 'dimmed_text'); } $nextlink = "<span class='text'><span class='nav_guide'>".get_string('next_section', 'theme_moove')."</span><br>"; $nextlink .= get_section_name($course, $sections[$forward])."</span>"; $nextlink .= html_writer::tag('span', '<i class="icon-arrow-'.$arrowright.'"></i>', array('class' => 'rarrow')); $links['next'] = html_writer::link(course_get_url($course, $forward), $nextlink, $params); } $forward++; } return $links; } /** * Output the html for a multiple section page * * @param stdClass $course The course entry from DB * @param array $sections (argument not used) * @param array $mods (argument not used) * @param array $modnames (argument not used) * @param array $modnamesused (argument not used) */ public function print_multiple_section_page($course, $sections, $mods, $modnames, $modnamesused) { $modinfo = get_fast_modinfo($course); $course = course_get_format($course)->get_course(); $context = context_course::instance($course->id); // Title with completion help icon. $completioninfo = new completion_info($course); echo $completioninfo->display_help_icon(); echo $this->output->heading($this->page_title(), 2, 'accesshide'); // Copy activity clipboard.. echo $this->course_activity_clipboard($course, 0); // Now the list of sections.. echo $this->start_section_list(); $numsections = course_get_format($course)->get_last_section_number(); $hasrow = false; foreach ($modinfo->get_section_info_all() as $section => $thissection) { if ($section == 0) { // 0-section is displayed a little different then the others. if ($thissection->summary or !empty($modinfo->sections[0]) or $this->page->user_is_editing()) { echo $this->section_header($thissection, $course, false, 0); echo $this->courserenderer->course_section_cm_list($course, $thissection, 0); echo $this->courserenderer->course_section_add_cm_control($course, 0, 0); echo $this->section_footer(); } continue; } if ($section > $numsections) { // Activities inside this section are 'orphaned', this section will be printed as 'stealth' below. continue; } if (!$hasrow && $course->coursedisplay) { // Initialize or reinitialize a new row to print the course sections boxes. echo "<div class='row'>"; $hasrow = true; } // Show the section if the user is permitted to access it, OR if it's not available // but there is some available info text which explains the reason & should display. $showsection = $thissection->uservisible || ($thissection->visible && !$thissection->available && !empty($thissection->availableinfo)); if (!$showsection) { // If the hiddensections option is set to 'show hidden sections in collapsed // form', then display the hidden section message - UNLESS the section is // hidden by the availability system, which is set to hide the reason. if (!$course->hiddensections && $thissection->available) { echo $this->section_hidden($section, $course->id); } continue; } if (!$this->page->user_is_editing() && $course->coursedisplay == COURSE_DISPLAY_MULTIPAGE) { // Display section summary only. echo $this->section_summary($thissection, $course, null); } else { echo $this->section_header($thissection, $course, false, 0); if ($thissection->uservisible) { echo $this->courserenderer->course_section_cm_list($course, $thissection, 0); echo $this->courserenderer->course_section_add_cm_control($course, $section, 0); } echo $this->section_footer(); } if (!($section % 2) && $course->coursedisplay) { // There are at least 3 columns. So it's time to create a new row. $hasrow = false; echo "</div>"; } } if ($hasrow && $course->coursedisplay) { // We need to close the opened row. echo "</div>"; } if ($this->page->user_is_editing() and has_capability('moodle/course:update', $context)) { // Print stealth sections if present. foreach ($modinfo->get_section_info_all() as $section => $thissection) { if ($section <= $numsections or empty($modinfo->sections[$section])) { // This is not stealth section or it is empty. continue; } echo $this->stealth_section_header($section); echo $this->courserenderer->course_section_cm_list($course, $thissection, 0); echo $this->stealth_section_footer(); } echo $this->end_section_list(); echo $this->change_number_sections($course, 0); } else { echo $this->end_section_list(); } } /** * Generate a summary of a section for display on the 'coruse index page' * * @param stdClass $section The course_section entry from DB * @param stdClass $course The course entry from DB * @param array $mods (argument not used) * @return string HTML to output. */ protected function section_summary($section, $course, $mods) { $classattr = 'section main section-summary clearfix col-md-6 col-xs-12'; $linkclasses = ''; // If section is hidden then display grey section link. if (!$section->visible) { $classattr .= ' hidden'; $linkclasses .= ' dimmed_text'; } else if (course_get_format($course)->is_section_current($section)) { $classattr .= ' current'; } $title = get_section_name($course, $section); $output = ''; $output .= html_writer::start_tag('li', array('id' => 'section-'.$section->section, 'class' => $classattr, 'role' => 'region', 'aria-label' => $title)); $output .= html_writer::start_tag('div', array('class' => 'card card-block')); $output .= html_writer::tag('div', '<i class="fa fa-laptop"></i>', array('class' => 'pgr-img')); $output .= html_writer::start_tag('div', array('class' => 'pgr-content')); $output .= html_writer::tag('div', '', array('class' => 'left side')); $output .= html_writer::tag('div', '', array('class' => 'right side')); $output .= html_writer::start_tag('div', array('class' => 'content')); if ($section->uservisible) { $title = html_writer::tag('a', $title, array('href' => course_get_url($course, $section->section), 'class' => $linkclasses)); } $output .= $this->output->heading($title, 4, 'section-title'); $output .= html_writer::start_tag('div', array('class' => 'summarytext')); $output .= $this->format_summary_text($section); $output .= html_writer::end_tag('div'); $output .= $this->section_activity_summary($section, $course, null); $context = context_course::instance($course->id); $output .= $this->section_availability_message($section, has_capability('moodle/course:viewhiddensections', $context)); $output .= html_writer::end_tag('div'); // Content. $output .= html_writer::end_tag('div'); // Col-md-9. $output .= html_writer::end_tag('div'); // Pgr-content. $output .= html_writer::end_tag('li'); return $output; } /** * Generate a summary of the activites in a section * * @param stdClass $section The course_section entry from DB * @param stdClass $course the course record from DB * @param array $mods (argument not used) * @return string HTML to output. */ protected function section_activity_summary($section, $course, $mods) { $modinfo = get_fast_modinfo($course); if (empty($modinfo->sections[$section->section])) { return ''; } // Generate array with count of activities in this section. $sectionmods = array(); $total = 0; $complete = 0; $cancomplete = isloggedin() && !isguestuser(); $completioninfo = new completion_info($course); foreach ($modinfo->sections[$section->section] as $cmid) { $thismod = $modinfo->cms[$cmid]; if ($thismod->uservisible) { if (isset($sectionmods[$thismod->modname])) { $sectionmods[$thismod->modname]['name'] = $thismod->modplural; $sectionmods[$thismod->modname]['count']++; } else { $sectionmods[$thismod->modname]['name'] = $thismod->modfullname; $sectionmods[$thismod->modname]['count'] = 1; } if ($cancomplete && $completioninfo->is_enabled($thismod) != COMPLETION_TRACKING_NONE) { $total++; $completiondata = $completioninfo->get_data($thismod, true); if ($completiondata->completionstate == COMPLETION_COMPLETE || $completiondata->completionstate == COMPLETION_COMPLETE_PASS) { $complete++; } } } } if (empty($sectionmods)) { // No sections. return ''; } // Output section completion data. $output = ''; if ($total > 0) { $completion = new stdClass; $completion->complete = $complete; $completion->total = $total; $percent = 0; if ($complete > 0) { $percent = (int) (($complete / $total) * 100); } $output = html_writer::start_tag('div', array('class' => 'section-summary-activities')); $output .= html_writer::tag( 'span', get_string('discipline_progress', 'theme_moove'), array('class' => 'activity-count') ); $output .= "<div class='progress'>"; $output .= "<div class='progress-bar progress-bar-info' role='progressbar' aria-valuenow='{$percent}' "; $output .= " aria-valuemin='0' aria-valuemax='100' style='width: {$percent}%;'>"; $output .= "{$percent}%"; $output .= "</div>"; $output .= "</div>"; $output .= html_writer::end_tag('div'); } return $output; } }