Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
use core_completion\progress;
3
 
4
class block_progreso_sinopsis_renderer extends plugin_renderer_base {
5
 
6
    public function procesar($instance_id) {
7
 
8
        global $USER, $CFG;
9
 
10
       // require_once $CFG->libdir . '/grade/grade_item.php';
11
 
12
        require_once $CFG->libdir . '/completionlib.php';
13
        require_once $CFG->dirroot.'/completion/classes/progress.php';
14
 
15
        require_once $CFG->libdir . '/badgeslib.php';
16
        require_once $CFG->libdir . '/gradelib.php';
17
        require_once $CFG->dirroot . '/grade/querylib.php';
18
 
19
 
20
 
21
        $mycourses = enrol_get_users_courses($USER->id);
22
        $max_time   = time();
23
        $min_time   = strtotime('-1 YEAR');
24
        $limit      = 3600;
25
 
26
        $dedication = 0;
27
        $completed  = 0;
28
        $inprogress = 0;
29
        $grades     = 0;
30
        $points     = 0;
31
        $badges     = 0;
32
 
33
 
34
        foreach($mycourses as $key => $val) {
35
            $course = get_course($val->id);
36
            $completion = new \completion_info($course);
37
            //$completion = new completion_info($course);
38
            if ($completion->is_enabled()) {
39
                $percentage = progress::get_course_progress_percentage($course);
40
                $percentage = !$percentage ? 0 : $percentage;
41
 
42
                $points += $percentage;
43
 
44
                if($percentage >= 100) {
45
                    $completed++;
46
                } else {
47
                    $inprogress++;
48
                }
49
            } else {
50
                $inprogress++;
51
            }
52
            // OJO: Comentado, se requiere los badges y no los grades
53
//             $resultkrb =  grade_get_course_grades($course->id, $USER->id);
54
//             $grd = $resultkrb->grades[$USER->id];
55
//             if('-' != $grd->str_grade) {
56
//                 $grades++;
57
//             }
58
 
59
//             $records = badges_get_user_badges($USER->id,$course->id, null, null, null, true);
60
            $records = badges_get_user_badges($USER->id,null, null, null, null, true);
61
            $badges = count($records);
62
//             var_dump($records)."<br>";
63
 
64
            $dedication = $dedication + $this->get_students_dedication($USER->id, $course->id, $min_time, $max_time, $limit);
65
            //var_dump($dedication);//test
66
            //die();
67
        }
68
 
69
        if(0 != $completed || 0 != $inprogress) {
70
            $points = (int) ($points / ($completed + $inprogress));
71
        }
72
 
73
 
74
 
75
        $data = [
76
            'dedication'    => $this->format_dedication($dedication),
77
            'completed'     => $completed,
78
            'inprogress'    => $inprogress,
79
            'grades'        => $badges,
80
            'points'    => $points,
81
        ];
82
        //var_dump($data);//test
83
        //die();
84
        return $this->render_from_template('block_progreso_sinopsis/full', $data);
85
    }
86
 
87
    public static function format_dedication($totalsecs) {
88
        $totalsecs = abs($totalsecs);
89
 
90
        $str = new stdClass();
91
        $str->hour = get_string('hour');
92
        $str->hours = get_string('hours');
93
        $str->min = get_string('min');
94
        $str->mins = get_string('mins');
95
        $str->sec = get_string('sec');
96
        $str->secs = get_string('secs');
97
 
98
        $hours = floor($totalsecs / HOURSECS);
99
        $remainder = $totalsecs - ($hours * HOURSECS);
100
        $mins = floor($remainder / MINSECS);
101
        $secs = round($remainder - ($mins * MINSECS), 2);
102
 
103
        $ss = ($secs == 1) ? $str->sec : $str->secs;
104
        $sm = ($mins == 1) ? $str->min : $str->mins;
105
        $sh = ($hours == 1) ? $str->hour : $str->hours;
106
 
107
        $ohours = '';
108
        $omins = '';
109
        $osecs = '';
110
 
111
 
112
        if ($hours) {
113
           // $ohours = $hours . ' ' . $sh;
114
            $ohours = $hours . ' ' . 'h';
115
        }
116
        if ($mins) {
117
            //$omins = $mins . ' ' . $sm;
118
            $omins = $mins . ' ' . 'm';
119
        }
120
        if ($secs) {
121
            //$osecs = $secs . ' ' . $ss;
122
            $osecs = $secs . ' ' . 's';
123
        }
124
 
125
        if ($hours) {
126
            return trim($ohours . ' ' . $omins);
127
        }
128
        if ($mins) {
129
            return trim($omins . ' ' . $osecs);
130
        }
131
        if ($secs) {
132
            return $osecs;
133
        }
134
 
135
        return get_string('none');
136
 
137
 
138
    }
139
 
140
    public function get_events_select($selectwhere, array $params)
141
    {
142
        $logstores  = ['logstore_standard', 'logstore_legacy'];
143
        $return     = [];
144
 
145
        static $allreaders = null;
146
 
147
        if (is_null($allreaders)) {
148
            $allreaders = get_log_manager()->get_readers();
149
        }
150
 
151
        $processedreaders = 0;
152
 
153
        foreach ($logstores as $name) {
154
            if (isset($allreaders[$name])) {
155
                $reader = $allreaders[$name];
156
                $events = $reader->get_events_select($selectwhere, $params, 'timecreated ASC', 0, 0);
157
                foreach ($events as $event) {
158
                    // Note: see \core\event\base to view base class of event.
159
                    $obj = new stdClass();
160
                    $obj->time = $event->timecreated;
161
                    $obj->ip = $event->get_logextra()['ip'];
162
                    $return[] = $obj;
163
                }
164
                if (!empty($events)) {
165
                    $processedreaders++;
166
                }
167
            }
168
        }
169
 
170
        // Sort mixed array by time ascending again only when more of a reader has added events to return array.
171
        if ($processedreaders > 1) {
172
            usort($return, function($a, $b) {
173
                return $a->time > $b->time;
174
            });
175
        }
176
 
177
        return $return;
178
    }
179
 
180
    public function get_students_dedication($user_id, $course_id, $min_time, $max_time, $limit)
181
    {
182
 
183
        $where = 'courseid = :courseid AND userid = :userid AND timecreated >= :mintime AND timecreated <= :maxtime';
184
        $params = array(
185
            'courseid'  => $course_id,
186
            'userid'    => $user_id,
187
            'mintime'   => $min_time,
188
            'maxtime'   => $max_time
189
        );
190
 
191
        //var_dump($params);//test
192
        //die();
193
 
194
 
195
        $logs = $this->get_events_select($where, $params);
196
        if ($logs) {
197
            $previouslog = array_shift($logs);
198
            $previouslogtime = $previouslog->time;
199
            $sessionstart = $previouslog->time;
200
            $dedication = 0;
201
 
202
            foreach ($logs as $log) {
203
                if (($log->time - $previouslogtime) > $limit) {
204
                    $dedication += $previouslogtime - $sessionstart;
205
                    $sessionstart = $log->time;
206
                }
207
                $previouslogtime = $log->time;
208
            }
209
            $dedication += $previouslogtime - $sessionstart;
210
        } else {
211
            $dedication = 0;
212
        }
213
 
214
 
215
       // var_dump($dedication);//test
216
        //die();
217
 
218
        return $dedication;
219
 
220
    }
221
 
222
 
223
 
224
 
225
 
226
 
227
}