Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
// This file is part of Moodle - http://moodle.org/
3
//
4
// Moodle is free software: you can redistribute it and/or modify
5
// it under the terms of the GNU General Public License as published by
6
// the Free Software Foundation, either version 3 of the License, or
7
// (at your option) any later version.
8
//
9
// Moodle is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
// GNU General Public License for more details.
13
//
14
// You should have received a copy of the GNU General Public License
15
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
16
 
17
/**
18
 * Configurable Reports
19
 * A Moodle block for creating customizable reports
20
 * @package blocks
21
 * @author: Juan leyva <http://www.twitter.com/jleyvadelgado>
22
 * @date: 2009
23
 */
24
 
25
require_once($CFG->dirroot.'/blocks/configurable_reports/plugin.class.php');
26
 
27
class plugin_userstats extends plugin_base{
28
 
29
    public function init() {
30
        $this->fullname = get_string('userstats', 'block_configurable_reports');
31
        $this->type = 'undefined';
32
        $this->form = true;
33
        $this->reporttypes = array('users');
34
    }
35
 
36
    public function summary($data) {
37
        return format_string($data->columname);
38
    }
39
 
40
    public function colformat($data) {
41
        $align = (isset($data->align)) ? $data->align : '';
42
        $size = (isset($data->size)) ? $data->size : '';
43
        $wrap = (isset($data->wrap)) ? $data->wrap : '';
44
        return array($align, $size, $wrap);
45
    }
46
 
47
    // Data -> Plugin configuration data.
48
    // Row -> Complet user row c->id, c->fullname, etc...
49
    public function execute($data, $row, $user, $courseid, $starttime = 0, $endtime = 0) {
50
        global $DB, $CFG;
51
 
52
        $stat = '--';
53
 
54
        $filterstarttime = optional_param('filter_starttime', 0, PARAM_RAW);
55
        $filterendtime = optional_param('filter_endtime', 0, PARAM_RAW);
56
 
57
        // Do not apply filters in timeline report (filters yet applied).
58
        if ($starttime && $endtime) {
59
            $filterstarttime = 0;
60
            $filterendtime = 0;
61
        }
62
 
63
        if ($filterstarttime and $filterendtime) {
64
            $filterstarttime = make_timestamp($filterstarttime['year'], $filterstarttime['month'], $filterstarttime['day']);
65
            $filterendtime = make_timestamp($filterendtime['year'], $filterendtime['month'], $filterendtime['day']);
66
        }
67
 
68
        $starttime = ($filterstarttime) ? $filterstarttime : $starttime;
69
        $endtime = ($filterendtime) ? $filterendtime : $endtime;
70
 
71
        if ($data->stat == 'coursededicationtime') {
72
            $sql = "userid = ?";
73
            $params = array($row->id);
74
 
75
            require_once($CFG->dirroot . "/blocks/configurable_reports/locallib.php");
76
 
77
            list($uselegacyreader, $useinternalreader, $logtable) = cr_logging_info();
78
 
79
            $logs = array();
80
            if ($uselegacyreader) {
81
 
82
                if ($courseid != 1) {
83
                    $sql .= " AND course = ?";
84
                    $params = array_merge($params, array($courseid));
85
                }
86
 
87
                if ($starttime and $endtime) {
88
                    $starttime = usergetmidnight($starttime) + 24 * 60 * 60;
89
                    $endtime = usergetmidnight($endtime) + 24 * 60 * 60;
90
                    $sql .= " AND time >= ? AND time <= ?";
91
                    $params = array_merge($params, array($starttime, $endtime));
92
                }
93
 
94
                $logs = $DB->get_records_select("log", $sql, $params, "time ASC", "id,time");
95
 
96
            } else if ($useinternalreader) {
97
 
98
                if ($courseid != 1) {
99
                    $sql .= " AND courseid = ?";
100
                    $params = array_merge($params, array($courseid));
101
                }
102
 
103
                if ($starttime and $endtime) {
104
                    $starttime = usergetmidnight($starttime) + 24 * 60 * 60;
105
                    $endtime = usergetmidnight($endtime) + 24 * 60 * 60;
106
                    $sql .= " AND timecreated >= ? AND timecreated <= ?";
107
                    $params = array_merge($params, array($starttime, $endtime));
108
                }
109
 
110
                $logs = $DB->get_records_select($logtable, $sql, $params, "timecreated ASC", "id,timecreated as time");
111
            }
112
 
113
            // Code from Course Dedication Block.
114
            if ($logs) {
115
 
116
                // This should be a config value in some where.
117
                $limitinseconds = (!empty($data->sessionlimittime)) ? $data->sessionlimittime : 30 * 60;
118
 
119
                $previouslog = array_shift($logs);
120
                $previouslogtime = $previouslog->time;
121
                $sessionstart = $previouslogtime;
122
                $totaldedication = 0;
123
 
124
                foreach ($logs as $log) {
125
                    if (($log->time - $previouslogtime) > $limitinseconds) {
126
                        $dedication = $previouslogtime - $sessionstart;
127
                        $totaldedication += $dedication;
128
                        $sessionstart = $log->time;
129
                    }
130
                    $previouslogtime = $log->time;
131
                }
132
 
133
                $dedication = $previouslogtime - $sessionstart;
134
                $totaldedication += $dedication;
135
                if ($totaldedication) {
136
                    return format_time($totaldedication);
137
                } else {
138
                    return 0;
139
                }
140
            }
141
            // Code from Course Dedication Block.
142
            return 0;
143
        }
144
 
145
        switch($data->stat){
146
            case 'activityview':
147
                                $total = 'statsreads';
148
                                $stattype = 'activity';
149
                                break;
150
            case 'activitypost':
151
                                $total = 'statswrites';
152
                                $stattype = 'activity';
153
                                break;
154
            case 'logins':
155
            default:
156
                                $total = 'statsreads';
157
                                $stattype = 'logins';
158
        }
159
        $sql = "SELECT SUM($total) as total FROM {stats_user_daily} WHERE stattype = ? AND userid = ?";
160
        $params = array($stattype, $row->id);
161
 
162
        if ($courseid != SITEID and $data->stat != 'logins') {
163
            $sql .= " AND courseid = ?";
164
            $params[] = $courseid;
165
        }
166
 
167
        if ($starttime and $endtime) {
168
            $starttime = usergetmidnight($starttime) + 24 * 60 * 60;
169
            $endtime = usergetmidnight($endtime) + 24 * 60 * 60;
170
            $sql .= " AND timeend >= $starttime AND timeend <= $endtime";
171
            $params = array_merge($params, array($starttime, $endtime));
172
        }
173
 
174
        if ($res = $DB->get_records_sql($sql, $params)) {
175
            $res = array_shift($res);
176
            if ($res->total != null) {
177
                return $res->total;
178
            } else {
179
                return 0;
180
            }
181
        }
182
 
183
        return $stat;
184
    }
185
}