Rev 1295 | Autoría | Ultima modificación | Ver Log |
<?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/>.namespace theme_universe_child\output;use html_writer;use stdClass;use moodle_url;use context_course;use context_system;use core_course_list_element;use custom_menu;use action_menu_filler;use action_menu_link_secondary;use action_menu;use action_link;use core_text;use coding_exception;use navigation_node;use context_header;use core\oauth2\rest;use pix_icon;use renderer_base;use theme_config;use get_string;use core_course_category;use theme_universe\util\user;use theme_universe\util\course;use core_completion\progress;require_once($CFG->dirroot . '/cesa/statics_blocks.php'); // Incluimos StaticsBlocks/*** Renderers to align Moodle's HTML with that expected by Bootstrap** @package theme_universe* @copyright 2023 Marcin Czaja (https://rosea.io)* @license Commercial https://themeforest.net/licenses*/class core_renderer extends \theme_universe\output\core_renderer{public function cesa_navigation_course_menu_lateral_output(){global $CFG, $COURSE, $PAGE, $DB, $OUTPUT;if (!$COURSE->id) {return '';}$course_id = $COURSE->id;$parent = optional_param('parent', 0, PARAM_INT); // Course module idif (!$parent) {$parent = optional_param('amp;parent', 0, PARAM_INT); // Course module id}//$PAGE->requires->js('/theme/edumynew/javascript/menu-lateral.js');if ($parent) {$sql = ' SELECT * FROM {subcourse} WHERE course = ' . $parent;$sql .= ' AND refcourse = ' . $course_id;$recordParentRefCourse = $DB->get_record_sql($sql);if ($recordParentRefCourse) {$course_id = $recordParentRefCourse->course;}}$course = get_course($course_id);$course_context = context_course::instance($course->id);$completioninfo = new \completion_info($course);// $course_context = !empty($PAGE->cm->id) ? $PAGE->cm : \context_course::instance($COURSE->id);// First we should check if we want to add navigation.// Get a list of all the activities in the course.$menu = [];$currentServerLink = strtolower(trim($_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']));$currentServerLink = html_entity_decode($currentServerLink);$currentServerLink = htmlentities($currentServerLink);$parts = explode('&', $currentServerLink);if (count($parts) > 1) {$currentServerLink = $parts[0];}$modules = get_fast_modinfo($course->id)->get_cms();$prevmod = null;$nextmod = null;$currentmod = new stdClass();$currentmod->name = "Sin Módulos";$mods = [];$menu = [];$numberOfTemary = 1;$prevlink = new \StdClass();$nextlink = new \StdClass();$prevlink->url = "#";$nextlink->url = "#";$isACoursePage = $course->id !== "1" ? true : false;$modules = get_fast_modinfo($COURSE->id)->get_cms();/*echo '<pre>';print_r($modules);echo '</pre>';*/if (!empty($modules)) {// Put the modules into an array in order by the position they are shown in the course.foreach ($modules as $module) {if (!$module->uservisible || $module->is_stealth() || empty($module->url)) {continue;}$mods[$module->id] = $module;}$nummods = count($mods);// If there is only one mod then do nothing.if ($nummods == 1) {}// Get an array of just the course module ids used to get the cmid value based on their position in the course.$modids = array_keys($mods);// Get the position in the array of the course module we are viewing.$position = array_search($course_context->id, $modids); //array_search($this->page->cm->id, $modids);$currentmod = $mods[$modids[$position]];// Check if we have a previous mod to show.if ($position > 0) {$prevmod = $mods[$modids[$position - 1]];}// Check if we have a next mod to show.if ($position < ($nummods - 1)) {$nextmod = $mods[$modids[$position + 1]];}}//$sections = $DB->get_records('course_sections', ['course' => $COURSE->id], 'section ASC', 'id,name,section,sequence,visible');$modinfo = get_fast_modinfo($course);$records = $modinfo->get_section_info_all();$sections = [];foreach ($records as $record) {if (!$record->visible) {continue;}$section = new \stdClass();$section->id = $record->id;$section->section = $record->section;$section->name = $record->name;$section->parent = $record->parent;$section->visible = 1;array_push($sections, $section);}$openParent = 0;$maxSections = count($sections);for ($i = 0; $i < $maxSections; $i++) {$j = $i + 1;if ($j < $maxSections) {if ($sections[$j]->parent) {$openParent = true;$sections[$i]->close_section_parent = 0;$sections[$i]->close_section = 0;} else {$sections[$i]->close_section_parent = $openParent ? 1 : 0;$sections[$i]->close_section = 1;}} else {$sections[$i]->close_section_parent = $openParent ? 1 : 0;$sections[$i]->close_section = 1;}// print_r($section);}/*echo '<pre>';print_r($sections);echo '</pre>';*/foreach ($sections as $key => $section) {if (!$section->visible) {continue;}$activities = [];$section_active = false;foreach ($modules as $module) {if ($module->section != $section->id) {continue;}if (!$module->uservisible || $module->is_stealth()) {// if (!$module->uservisible || $module->is_stealth() || empty($module->url)) {continue;}$mods[$module->id] = $module;$duration = '';$type = '';$filepath = '';$sql = 'SELECT md.name, cm.instance FROM {modules} md ' .' JOIN {course_modules} cm ON cm.module = md.id ' .' WHERE cm.id = ' . $module->id . ' LIMIT 1 ';$record = $DB->get_record_sql($sql);if ($record) {/*echo '<pre>';print_r($record);echo '<pre>';*/$type = $record->name;if ($type == 'hvp') {$instance = $record->instance;$sql = 'SELECT json_content FROM {hvp} WHERE id = ' . $instance . ' LIMIT 1';$record = $DB->get_record_sql($sql);if ($record) {$json_content = json_decode($record->json_content);if (!empty($json_content->interactiveVideo->video->files[0]->path)) {$filepath = trim($json_content->interactiveVideo->video->files[0]->path);$filepath = trim(str_replace('#tmp', '', $filepath));$arr = explode('/', $filepath);if (count($arr) > 1) {$filename = $arr[count($arr) - 1];} else {$filename = $arr[0];}$record = $DB->get_record('files', ['filename' => $filename]);if ($record) {$duration = $this->extractDurationFromVideo($record, $filename);}}}}}$modname = $module->get_formatted_name();$modcontent = $module->get_formatted_content();if (empty($module->url)) {$linkurl = '';$currentLink = '';} else {$linkurl = new moodle_url($module->url, array('forceview' => 1));$linkurl = strtolower(trim($linkurl->__toString()));$parts = explode('&', $linkurl);if (count($parts) > 1) {$currentLink = $parts[0];} else {$currentLink = $linkurl;}}$completiondata = $completioninfo->get_data($module, true);if (strcasecmp($currentLink, $currentServerLink) == 0) {$active = true;$section_active = true;} else {$active = false;}array_push($activities, ['active' => $active,'indexElement' => $key,'numberOfTemary' => $numberOfTemary,'activity' => true,'blank' => !empty($section->section),'name' => $this->substr_cesa_navigation_course_menu_name($modname),'content' => $modcontent,'duration' => $duration,'type' => $type,'completed' => $completiondata->completionstate == COMPLETION_COMPLETE || $completiondata->completionstate == COMPLETION_COMPLETE_PASS,'failed' => $completiondata->completionstate == COMPLETION_COMPLETE_FAIL,'url' => $linkurl]);}if ($activities) {if ($section->section) {$sectionname = trim($section->name);$sectionname = $sectionname ? $sectionname : ' Tema ' . $section->section;} else {$sectionname = 'Recursos';}array_push($menu, ['active' => $section_active,'indexElement' => $key,'id' => $section->id,'numberOfTemary' => $numberOfTemary,'section' => true,'name' => $this->substr_cesa_navigation_course_menu_name($sectionname),'close_section_parent' => $section->close_section_parent,'close_section' => $section->close_section,'completed' => false,'url' => false,'activities' => $activities,]);}$numberOfTemary = ++$numberOfTemary;}// Check if there is a previous module to display.if ($prevmod) {$linkurl = new \moodle_url($prevmod->url, array('forceview' => 1));$attributes = [];$prevlink = new \action_link($linkurl, $OUTPUT->larrow(), null, $attributes);}// Check if there is a next module to display.if ($nextmod) {$linkurl = new \moodle_url($nextmod->url, array('forceview' => 1));$attributes = [];$nextlink = new \action_link($linkurl, $OUTPUT->rarrow(), null, $attributes);}// echo '<pre>';// print_r($activities);// echo '</pre>';// exit;$progreso = number_format(progress::get_course_progress_percentage($course), 2); // Progreso por curso$course_navigation = new \theme_universe_child\output\custom_drawer($prevlink->url, $nextlink->url, $menu, $this->substr_cesa_navigation_course_menu_name($currentmod->name, 10), false, $isACoursePage, $COURSE->summary, $progreso);return $course_navigation->export_for_template($OUTPUT);}public function render_statics_blocks($userid = null){global $USER;if (!$userid) {$userid = $USER->id;}// Instanciamos StaticsBlocks para renderizar los bloques$statics_blocks = new \StaticsBlocks('side-pre',['messageteacher', 'comments', 'cesa_course_rating', 'cesa_notes']);$blocks = $statics_blocks->renderBlocks();return $blocks;}}