| Línea 13... |
Línea 13... |
| 13 |
$userid = $USER->id;
|
13 |
$userid = $USER->id;
|
| 14 |
$url_noimage = $CFG->wwwroot . '/theme/' . $PAGE->theme->name . '/pix/coursenoimage.jpg';
|
14 |
$url_noimage = $CFG->wwwroot . '/theme/' . $PAGE->theme->name . '/pix/coursenoimage.jpg';
|
| Línea 15... |
Línea 15... |
| 15 |
|
15 |
|
| Línea 16... |
Línea 16... |
| 16 |
$data = ['course' => ''];
|
16 |
$data = ['course' => ''];
|
| 17 |
|
17 |
|
| 18 |
// Consulta SQL optimizada para obtener los cursos recientemente accedidos por el usuario
|
18 |
// Consulta SQL para obtener los cursos recientemente accedidos por el usuario
|
| 19 |
$sql = "SELECT DISTINCT(courseid) AS courseid FROM {logstore_standard_log} WHERE ";
|
19 |
$sql = "SELECT DISTINCT(courseid) AS courseid FROM {logstore_standard_log} WHERE ";
|
| Línea -... |
Línea 20... |
| - |
|
20 |
$sql .= "action = 'viewed' AND target IN ('course', 'course_module') AND userid = :userid ";
|
| 20 |
$sql .= "action = 'viewed' AND target IN ('course', 'course_module') AND userid = :userid ";
|
21 |
$sql .= "GROUP BY courseid ORDER BY timecreated DESC";
|
| Línea 21... |
Línea 22... |
| 21 |
$sql .= "GROUP BY courseid ORDER BY timecreated DESC";
|
22 |
|
| - |
|
23 |
$courseid = null;
|
| 22 |
|
24 |
$lastcourses = $DB->get_records_sql($sql, ['userid' => $userid]);
|
| - |
|
25 |
|
| 23 |
$lastcourses = $DB->get_records_sql($sql, ['userid' => $userid]);
|
26 |
// Obtener el último curso visible accedido por el usuario
|
| - |
|
27 |
foreach ($lastcourses as $lastcourse) {
|
| - |
|
28 |
$course = $DB->get_record('course', ['id' => $lastcourse->courseid]);
|
| - |
|
29 |
|
| 24 |
|
30 |
if (!$course || !$course->visible) {
|
| - |
|
31 |
continue;
|
| - |
|
32 |
}
|
| - |
|
33 |
|
| 25 |
// Obtener los cursos visibles
|
34 |
$category = $DB->get_record('course_categories', ['id' => $course->category]);
|
| 26 |
list($sql_in, $params) = $DB->get_in_or_equal(array_keys($lastcourses), SQL_PARAMS_NAMED);
|
35 |
if (!$category || !$category->visible) {
|
| - |
|
36 |
continue;
|
| Línea 27... |
Línea 37... |
| 27 |
$sql = "SELECT id FROM {course} WHERE id $sql_in AND visible = 1";
|
37 |
}
|
| 28 |
$courses = $DB->get_records_sql($sql, $params);
|
38 |
|
| - |
|
39 |
$courseid = $course->id;
|
| 29 |
|
40 |
}
|
| 30 |
$courseid = key($courses) ?? null;
|
41 |
|
| 31 |
|
42 |
if ($courseid) {
|
| Línea 32... |
Línea 43... |
| 32 |
if ($courseid) {
|
43 |
$course = get_course($courseid);
|
| 33 |
$course = get_course($courseid);
|
44 |
|
| 34 |
if ($course instanceof stdClass) {
|
45 |
if ($course instanceof stdClass) {
|
| 35 |
$courseInList = new core_course_list_element($course);
|
46 |
$courseInList = new core_course_list_element($course);
|
| 36 |
}
|
47 |
}
|
| 37 |
|
48 |
|
| - |
|
49 |
// Obtener la imagen del curso o usar la imagen por defecto
|
| 38 |
// Obtener la imagen del curso o usar la imagen por defecto
|
50 |
$image = $url_noimage;
|
| 39 |
$image = $url_noimage;
|
51 |
foreach ($courseInList->get_course_overviewfiles() as $file) {
|
| Línea 40... |
Línea 52... |
| 40 |
foreach ($courseInList->get_course_overviewfiles() as $file) {
|
52 |
$isimage = $file->is_valid_image();
|
| 41 |
if ($file->is_valid_image()) {
|
53 |
$image = file_encode_url("{$CFG->wwwroot}/pluginfile.php", "/" . $file->get_contextid() . "/" . $file->get_component() . "/" . $file->get_filearea() . $file->get_filepath() . $file->get_filename(), !$isimage);
|
| 42 |
$image = file_encode_url("{$CFG->wwwroot}/pluginfile.php", "/" . $file->get_contextid() . "/" . $file->get_component() . "/" . $file->get_filearea() . $file->get_filepath() . $file->get_filename());
|
54 |
if (!$isimage) {
|
| 43 |
break;
|
55 |
$image = $url_noimage;
|
| 44 |
}
|
56 |
}
|
| Línea 45... |
Línea 57... |
| 45 |
}
|
57 |
}
|
| Línea 56... |
Línea 68... |
| 56 |
$progress = progress::get_course_progress_percentage($course);
|
68 |
$progress = progress::get_course_progress_percentage($course);
|
| 57 |
$progress = $progress ? floatval($progress) : 0.0;
|
69 |
$progress = $progress ? floatval($progress) : 0.0;
|
| 58 |
$miProgreso = number_format($progress, 2);
|
70 |
$miProgreso = number_format($progress, 2);
|
| Línea 59... |
Línea 71... |
| 59 |
|
71 |
|
| 60 |
// Obtener la primera sección visible del curso
|
72 |
// Obtener la primera sección visible del curso
|
| 61 |
$first_section = $DB->get_field_sql(
|
73 |
$first_section = 0;
|
| - |
|
74 |
$sections = $DB->get_records('course_sections', ['course' => $course->id], 'section ASC', 'id,name,section,sequence,visible');
|
| - |
|
75 |
foreach ($sections as $section) {
|
| 62 |
"SELECT id FROM {course_sections} WHERE course = :course AND section > 0 AND visible = 1 ORDER BY section ASC LIMIT 1",
|
76 |
if (!empty($section->section)) {
|
| - |
|
77 |
$first_section = $section->id;
|
| - |
|
78 |
break;
|
| 63 |
['course' => $course->id]
|
79 |
}
|
| Línea 64... |
Línea 80... |
| 64 |
);
|
80 |
}
|
| 65 |
|
81 |
|
| 66 |
// Verificar roles del usuario en el curso
|
82 |
// Verificar roles del usuario en el curso
|
| - |
|
83 |
$course_context = context_course::instance($course->id);
|
| - |
|
84 |
$roles = get_user_roles($course_context, $USER->id, true);
|
| 67 |
$course_context = context_course::instance($course->id);
|
85 |
$completion_edit_curso = false;
|
| - |
|
86 |
foreach ($roles as $role) {
|
| - |
|
87 |
if ($role->shortname == 'companydepartmentmanager' || $role->shortname == 'companycoursenoneditor') {
|
| - |
|
88 |
$completion_edit_curso = true;
|
| - |
|
89 |
break;
|
| Línea 68... |
Línea 90... |
| 68 |
$roles = get_user_roles($course_context, $USER->id, true);
|
90 |
}
|
| - |
|
91 |
}
|
| 69 |
$completion_edit_curso = array_reduce($roles, fn($carry, $role) => $carry || in_array($role->shortname, ['companydepartmentmanager', 'companycoursenoneditor']), false);
|
92 |
|
| 70 |
|
93 |
// Obtener el primer módulo visible del curso
|
| 71 |
// Obtener el primer módulo visible del curso
|
94 |
$modules = get_fast_modinfo($course->id)->get_cms();
|
| - |
|
95 |
$linkurl = '';
|
| 72 |
$modules = array_filter(
|
96 |
foreach ($modules as $module) {
|
| - |
|
97 |
if (!$module->uservisible || $module->is_stealth() || empty($module->url) || empty($module->section)) {
|
| - |
|
98 |
continue;
|
| 73 |
get_fast_modinfo($course->id)->get_cms(),
|
99 |
}
|
| - |
|
100 |
|
| - |
|
101 |
if ($module->section == $first_section || $completion_edit_curso) {
|
| - |
|
102 |
$linkurl = new moodle_url($module->url, ['forceview' => 1]);
|
| Línea 74... |
Línea 103... |
| 74 |
fn($module) => $module->uservisible && !$module->is_stealth() && !empty($module->url)
|
103 |
break;
|
| 75 |
);
|
104 |
}
|
| 76 |
$linkurl = reset($modules)?->url ?? $CFG->wwwroot . '/course/view.php?id=' . $course->id;
|
105 |
}
|
| 77 |
|
106 |
|
| Línea 87... |
Línea 116... |
| 87 |
} elseif (strlen($summary) > 80) {
|
116 |
} elseif (strlen($summary) > 80) {
|
| 88 |
$summary = substr($summary, 0, 80) . '...';
|
117 |
$summary = substr($summary, 0, 80) . '...';
|
| 89 |
}
|
118 |
}
|
| Línea 90... |
Línea 119... |
| 90 |
|
119 |
|
| 91 |
// Asignar datos del curso al array de respuesta
|
120 |
// Asignar datos del curso al array de respuesta
|
| - |
|
121 |
$data['course'] = [
|
| - |
|
122 |
'courseid' => $course->id,
|
| - |
|
123 |
'coursecategory' => $category->name,
|
| - |
|
124 |
'courseimage' => $image,
|
| - |
|
125 |
'enddate' => $course->enddate,
|
| - |
|
126 |
'fullname' => $course->fullname,
|
| - |
|
127 |
'fullnamedisplay' => get_course_display_name_for_list($course),
|
| - |
|
128 |
'hasprogress' => true,
|
| - |
|
129 |
'hidden' => false,
|
| - |
|
130 |
'id' => $course->id,
|
| - |
|
131 |
'idnumber' => $course->idnumber,
|
| - |
|
132 |
'isfavourite' => false,
|
| - |
|
133 |
'progress' => $miProgreso,
|
| - |
|
134 |
'shortname' => $course->shortname,
|
| - |
|
135 |
'showshortname' => false,
|
| - |
|
136 |
'startdate' => $course->startdate,
|
| - |
|
137 |
'summary' => $summary,
|
| - |
|
138 |
'summaryformat' => $course->summaryformat,
|
| - |
|
139 |
'timeaccess' => $lastaccess,
|
| - |
|
140 |
'viewurl' => $CFG->wwwroot . '/course/view.php?id=' . $course->id,
|
| - |
|
141 |
'viewurlnew' => $linkurl,
|
| - |
|
142 |
'visible' => true,
|
| 92 |
$data['course'] = [...];
|
143 |
];
|
| Línea 93... |
Línea 144... |
| 93 |
}
|
144 |
}
|
| 94 |
|
145 |
|
| 95 |
// Renderizar la plantilla con los datos del curso
|
146 |
// Renderizar la plantilla con los datos del curso
|