Proyectos de Subversion Moodle

Rev

Rev 1231 | Rev 1235 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 1231 Rev 1234
Línea 1... Línea 1...
1
<?php
1
<?php
2
 
-
 
3
defined('MOODLE_INTERNAL') || die();
2
defined('MOODLE_INTERNAL') || die();
Línea 4... Línea 3...
4
 
3
 
Línea -... Línea 4...
-
 
4
use core_completion\progress;
5
use core_completion\progress;
5
 
6
 
6
// Definición de la clase que extiende plugin_renderer_base
7
class block_cesa_lastcourse_renderer extends plugin_renderer_base
-
 
8
{
7
class block_cesa_lastcourse_renderer extends plugin_renderer_base
9
 
8
{
10
    public function procesar()
-
 
11
    {
9
    public function procesar()
Línea 12... Línea -...
12
 
-
 
13
        global $USER, $DB, $CFG, $PAGE;
10
    {
14
 
11
        global $USER, $DB, $CFG, $PAGE;
Línea 15... Línea -...
15
 
-
 
16
        $userid = $USER->id;
12
 
17
        $url_noimage =  $CFG->wwwroot . '/theme/' . $PAGE->theme->name . '/pix/coursenoimage.jpg';
-
 
18
 
-
 
19
        $data = [
-
 
20
            'course' => ''
-
 
21
        ];
-
 
22
 
-
 
23
 
-
 
Línea 24... Línea 13...
24
        $sql  = "SELECT DISTINCT(courseid) AS courseid  FROM {logstore_standard_log} WHERE ";
13
        $userid = $USER->id;
25
        $sql .= "action = 'viewed'  AND target IN ('course', 'course_module') AND userid = $userid ";
-
 
26
        $sql .= "GROUP BY courseid ORDER BY timecreated DESC  ";
-
 
27
 
14
        $url_noimage =  $CFG->wwwroot . '/theme/' . $PAGE->theme->name . '/pix/coursenoimage.jpg';
28
 
15
 
29
        $courseid =  null;
16
        $data = ['course' => ''];
30
 
17
 
31
 
18
        // Consulta SQL optimizada para obtener los cursos recientemente accedidos por el usuario
32
        $lastcourses = $DB->get_records_sql($sql);
19
        $sql  = "SELECT DISTINCT(courseid) AS courseid FROM {logstore_standard_log} WHERE ";
33
        foreach ($lastcourses as $lastcourse) {
20
        $sql .= "action = 'viewed' AND target IN ('course', 'course_module') AND userid = :userid ";
34
            //$course = get_course($lastcourse->courseid);
-
 
35
 
-
 
36
            $course =  $DB->get_record('course', array('id' => $lastcourse->courseid));
-
 
37
 
21
        $sql .= "GROUP BY courseid ORDER BY timecreated DESC";
38
            if (!$course || !$course->visible) {
22
 
39
                continue;
23
        $lastcourses = $DB->get_records_sql($sql, ['userid' => $userid]);
40
            }
-
 
41
 
24
 
42
            $category = $DB->get_record('course_categories', array('id' => $course->category));
25
        // Obtener los cursos visibles
43
            if (!$category || !$category->visible) {
-
 
Línea 44... Línea 26...
44
                continue;
26
        list($sql_in, $params) = $DB->get_in_or_equal(array_keys($lastcourses), SQL_PARAMS_NAMED);
45
            }
27
        $sql = "SELECT id FROM {course} WHERE id $sql_in AND visible = 1";
46
 
-
 
47
            $courseid = $course->id;
28
        $courses = $DB->get_records_sql($sql, $params);
48
        }
29
        
49
 
30
        $courseid = key($courses) ?? null;
-
 
31
 
-
 
32
        if ($courseid) {
50
        if ($courseid) {
33
            $course = get_course($courseid);
51
            $course = get_course($courseid);
34
            if ($course instanceof stdClass) {
52
 
35
                $courseInList = new core_course_list_element($course);
53
            if ($course instanceof stdClass) {
36
            }
54
                $courseInList = new core_course_list_element($course);
37
 
55
            }
-
 
56
            $image = $url_noimage;
38
            // Obtener la imagen del curso o usar la imagen por defecto
57
            foreach ($courseInList->get_course_overviewfiles() as $file) {
39
            $image = $url_noimage;
Línea -... Línea 40...
-
 
40
            foreach ($courseInList->get_course_overviewfiles() as $file) {
-
 
41
                if ($file->is_valid_image()) {
-
 
42
                    $image = file_encode_url("{$CFG->wwwroot}/pluginfile.php", "/" . $file->get_contextid() . "/" . $file->get_component() . "/" . $file->get_filearea() . $file->get_filepath() . $file->get_filename());
-
 
43
                    break;
-
 
44
                }
Línea 58... Línea -...
58
                $isimage = $file->is_valid_image();
-
 
59
                $image = file_encode_url("{$CFG->wwwroot}/pluginfile.php", '/' . $file->get_contextid() . '/' . $file->get_component() . '/' . $file->get_filearea() . $file->get_filepath() . $file->get_filename(), !$isimage);
-
 
60
                if (!$isimage) {
-
 
61
                    $image = $url_noimage;
-
 
62
                }
-
 
63
            }
-
 
64
 
-
 
65
 
-
 
66
            $lastaccess = null;
-
 
67
            $sql = "select timecreated  from {logstore_standard_log} where courseid  = :courseid and userid  = :userid " .
-
 
68
                "  and eventname  = '\\\\core\\\\event\\\\course_viewed' order by id desc limit 1 ";
45
            }
Línea -... Línea 46...
-
 
46
 
69
 
47
            // Obtener el último acceso al curso por el usuario
70
            $timecreated = $DB->get_field_sql($sql,  array('courseid' => $course->id, 'userid' => $userid));
48
            $sql = "SELECT timecreated FROM {logstore_standard_log} WHERE courseid = :courseid AND userid = :userid ";
71
            if ($timecreated) {
49
            $sql .= "AND eventname = '\\core\\event\\course_viewed' ORDER BY id DESC LIMIT 1";
72
 
-
 
Línea -... Línea 50...
-
 
50
            $timecreated = $DB->get_field_sql($sql, ['courseid' => $course->id, 'userid' => $userid]);
73
                $lastaccess = date('d/m/Y h:i a', $timecreated);
51
            $lastaccess = $timecreated ? date('d/m/Y h:i a', $timecreated) : null;
74
            }
52
 
-
 
53
            $category = $DB->get_record('course_categories', ['id' => $course->category]);
-
 
54
 
Línea 75... Línea 55...
75
 
55
            // Obtener el progreso del usuario en el curso
76
            $category = $DB->get_record('course_categories', array('id' => $course->category));
-
 
77
 
-
 
78
            $progress = progress::get_course_progress_percentage($course);
-
 
79
            $progress = $progress ? floatval($progress) : 0.0;
-
 
80
            $miProgreso = number_format($progress, 2); // Progreso por curso
-
 
81
 
56
            $progress = progress::get_course_progress_percentage($course);
82
 
57
            $progress = $progress ? floatval($progress) : 0.0;
-
 
58
            $miProgreso = number_format($progress, 2);
Línea 83... Línea 59...
83
            $first_section = 0;
59
 
84
            $sections = $DB->get_records('course_sections', ['course' => $course->id], 'section ASC', 'id,name,section,sequence,visible');
60
            // Obtener la primera sección visible del curso
85
 
61
            $first_section = $DB->get_field_sql(
86
            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",
87
                if (!empty($section->section)) {
-
 
88
                    $first_section = $section->id;
-
 
89
                    break;
63
                ['course' => $course->id]
90
                }
-
 
91
            }
-
 
92
            $course_context = context_course::instance($course->id);
-
 
93
            $roles = get_user_roles($course_context, $USER->id, true);
64
            );
94
 
-
 
95
            $completion_edit_curso = false;
-
 
96
            foreach ($roles as $role) {
-
 
97
                if ($role->shortname == 'companydepartmentmanager' || $role->shortname == 'companycoursenoneditor') {
-
 
98
                    $completion_edit_curso  = true;
-
 
99
                    break;
-
 
100
                }
-
 
Línea 101... Línea -...
101
            }
-
 
102
 
-
 
103
 
-
 
104
 
-
 
105
            $modules = get_fast_modinfo($course->id)->get_cms();
-
 
106
 
-
 
107
 
65
 
108
 
-
 
109
            $linkurl = '';
-
 
110
            foreach ($modules as $module) {
-
 
111
 
-
 
112
 
66
            // Verificar roles del usuario en el curso
113
 
67
            $course_context = context_course::instance($course->id);
114
 
68
            $roles = get_user_roles($course_context, $USER->id, true);
Línea 115... Línea -...
115
                //print "!".$module->uservisible ."||". $module->is_stealth() ."||". $module->url ."||". $module->section."<br>";
-
 
-
 
69
            $completion_edit_curso = array_reduce($roles, fn($carry, $role) => $carry || in_array($role->shortname, ['companydepartmentmanager', 'companycoursenoneditor']), false);
116
                if (!$module->uservisible || $module->is_stealth() || empty($module->url) || empty($module->section)) {
70
 
117
                    continue;
-
 
118
                }
71
            // Obtener el primer módulo visible del curso
119
 
72
            $modules = array_filter(
120
                if ($module->section == $first_section || $completion_edit_curso) {
73
                get_fast_modinfo($course->id)->get_cms(),
121
                    $linkurl =  new moodle_url($module->url, array('forceview' => 1));
-
 
122
                    break;
74
                fn($module) => $module->uservisible && !$module->is_stealth() && !empty($module->url)
123
                }
75
            );
Línea 124... Línea -...
124
            }
-
 
125
            if ($completion_edit_curso) {
-
 
126
                $linkurl = $CFG->wwwroot . '/course/view.php?id=' . $course->id;
-
 
127
            }
-
 
128
 
-
 
129
 
-
 
130
            $summary = trim(strip_tags($course->summary));
-
 
131
 
-
 
132
            if (empty($summary)) {
-
 
133
                $summary = '&nbsp';
-
 
134
            } else if (strlen($summary) > 80) {
-
 
135
 
-
 
136
                $summary =  substr($summary, 0, 80) . '...';
-
 
137
            }
-
 
138
 
-
 
139
 
-
 
140
            $data['course'] = [
76
            $linkurl = reset($modules)?->url ?? $CFG->wwwroot . '/course/view.php?id=' . $course->id;
141
                'courseid' => $course->id,
-
 
142
                'coursecategory' => $category->name,
-
 
143
                'courseimage' => $image,
-
 
144
                'enddate' => $course->enddate,
-
 
145
                'fullname' => $course->fullname,
-
 
146
                'fullnamedisplay' => get_course_display_name_for_list($course),
77
 
147
                'hasprogress' => true,
-
 
148
                'hidden' => false,
-
 
149
                'id' => $course->id,
78
            // Si el usuario tiene ciertos roles, forzar la URL al curso
Línea 150... Línea -...
150
                'idnumber' => $course->idnumber,
-
 
-
 
79
            if ($completion_edit_curso) {
151
                'isfavourite' => false,
80
                $linkurl = $CFG->wwwroot . '/course/view.php?id=' . $course->id;
152
                'progress' => $miProgreso,
81
            }
153
                'shortname' => $course->shortname,
82