Rev 1235 | Autoría | Ultima modificación | Ver Log |
<?phpdefined('MOODLE_INTERNAL') || die();use core_completion\progress;// Definición de la clase que extiende plugin_renderer_baseclass block_cesa_lastcourse_renderer extends plugin_renderer_base{public function procesar(){global $USER, $DB, $CFG, $PAGE;$userid = $USER->id;$url_noimage = $CFG->wwwroot . '/theme/' . $PAGE->theme->name . '/pix/coursenoimage.jpg';$data = ['course' => ''];// Consulta SQL optimizada para obtener el último curso accedido por el usuario$sql = "SELECT courseid FROM {logstore_standard_log} WHERE ";$sql .= "action = 'viewed' AND target IN ('course', 'course_module') AND userid = :userid ";$sql .= "ORDER BY timecreated DESC LIMIT 1";$lastcourse = $DB->get_record_sql($sql, ['userid' => $userid]);if ($lastcourse) {$course = get_course($lastcourse->courseid);if ($course) {$courseInList = new core_course_list_element($course);// Manejo de imagen$image = $url_noimage;foreach ($courseInList->get_course_overviewfiles() as $file) {if ($file->is_valid_image()) {$image = file_encode_url("{$CFG->wwwroot}/pluginfile.php", "/{$file->get_contextid()}/{$file->get_component()}/{$file->get_filearea()}{$file->get_filepath()}{$file->get_filename()}");break;}}// Obtener categoría$category = $DB->get_record('course_categories', ['id' => $course->category]);$categoryName = $category ? $category->name : get_string('unknowncategory', 'block_cesa_lastcourse');// Obtener primera sección (número)$first_section_number = 0;$sections = $DB->get_records('course_sections', ['course' => $course->id], 'section ASC', 'id, section, sequence, visible');foreach ($sections as $section) {if ($section->section > 0) {$first_section_number = $section->section;break;}}// Buscar módulo en la primera sección$linkurl = '';$modules = get_fast_modinfo($course->id)->get_cms();foreach ($modules as $module) {if ($module->uservisible && !$module->is_stealth() && $module->url && $module->section == $first_section_number) {$linkurl = new moodle_url($module->url, ['forceview' => 1]);break;}}// Si el usuario tiene ciertos roles, forzar la URL al cursoif ($completion_edit_curso) {$linkurl = $CFG->wwwroot . '/course/view.php?id=' . $course->id;}// Obtener un resumen del curso$summary = trim(strip_tags($course->summary));if (empty($summary)) {$summary = ' ';} elseif (strlen($summary) > 80) {$summary = substr($summary, 0, 80) . '...';}// Asignar datos del curso al array de respuesta$data['course'] = ['courseid' => $course->id,'coursecategory' => $category->name,'courseimage' => $image,'enddate' => $course->enddate,'fullname' => $course->fullname,'fullnamedisplay' => get_course_display_name_for_list($course),'hasprogress' => true,'hidden' => false,'id' => $course->id,'idnumber' => $course->idnumber,'isfavourite' => false,'progress' => $miProgreso,'shortname' => $course->shortname,'showshortname' => false,'startdate' => $course->startdate,'summary' => $summary,'summaryformat' => $course->summaryformat,'timeaccess' => $lastaccess,'viewurl' => $CFG->wwwroot . '/course/view.php?id=' . $course->id,'viewurlnew' => $linkurl,'visible' => true,];}// Renderizar la plantilla con los datos del cursoreturn $this->render_from_template('block_cesa_lastcourse/full', $data);}}