Proyectos de Subversion Moodle

Rev

Rev 1 | | Comparar con el anterior | 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
 * Loglive report renderable class.
19
 *
20
 * @package    report_loglive
21
 * @copyright  2014 onwards Ankit Agarwal <ankit.agrr@gmail.com>
22
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23
 */
24
 
25
defined('MOODLE_INTERNAL') || die;
26
 
27
/**
28
 * Report loglive renderable class.
29
 *
30
 * @since      Moodle 2.7
31
 * @package    report_loglive
32
 * @copyright  2014 onwards Ankit Agarwal <ankit.agrr@gmail.com>
33
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
34
 */
35
class report_loglive_renderable implements renderable {
36
 
37
    /** @var int number of seconds to show logs from, by default. */
38
    const CUTOFF = 3600;
39
 
40
    /** @var \core\log\manager log manager */
41
    protected $logmanager;
42
 
43
    /** @var string selected log reader pluginname */
44
    public $selectedlogreader = null;
45
 
46
    /** @var int page number */
47
    public $page;
48
 
49
    /** @var int perpage records to show */
50
    public $perpage;
51
 
52
    /** @var stdClass course record */
53
    public $course;
54
 
55
    /** @var moodle_url url of report page */
56
    public $url;
57
 
58
    /** @var int selected date from which records should be displayed */
59
    public $date;
60
 
61
    /** @var string order to sort */
62
    public $order;
63
 
64
    /** @var int group id */
65
    public $groupid;
66
 
1441 ariadna 67
    /** @var int forces the use of a course filter in site context */
68
    public $sitecoursefilter;
69
 
1 efrain 70
    /** @var report_loglive_table_log table log which will be used for rendering logs */
71
    public $tablelog;
72
 
73
    /** @var  int refresh rate in seconds */
74
    protected $refresh  = 60;
75
 
76
    /**
77
     * Constructor.
78
     *
79
     * @param string $logreader (optional)reader pluginname from which logs will be fetched.
80
     * @param stdClass|int $course (optional) course record or id
81
     * @param moodle_url|string $url (optional) page url.
82
     * @param int $date date (optional) from which records will be fetched.
83
     * @param int $page (optional) page number.
84
     * @param int $perpage (optional) number of records to show per page.
85
     * @param string $order (optional) sortorder of fetched records
1441 ariadna 86
     * @param int $sitecoursefilter (optional) use a course filter in site context.
1 efrain 87
     */
88
    public function __construct($logreader = "", $course = 0, $url = "", $date = 0, $page = 0, $perpage = 100,
1441 ariadna 89
                                $order = "timecreated DESC", $sitecoursefilter = 0) {
1 efrain 90
 
1441 ariadna 91
        global $PAGE, $SITE;
1 efrain 92
 
93
        // Use first reader as selected reader, if not passed.
94
        if (empty($logreader)) {
95
            $readers = $this->get_readers();
96
            if (!empty($readers)) {
97
                reset($readers);
98
                $logreader = key($readers);
99
            } else {
100
                $logreader = null;
101
            }
102
        }
103
        $this->selectedlogreader = $logreader;
104
 
105
        // Use page url if empty.
106
        if (empty($url)) {
107
            $url = new moodle_url($PAGE->url);
108
        } else {
109
            $url = new moodle_url($url);
110
        }
111
        $this->url = $url;
112
 
113
        // Use site course id, if course is empty.
114
        if (!empty($course) && is_int($course)) {
1441 ariadna 115
            $courseid = $course;
116
            try {
117
                $course = get_course($courseid);
118
            } catch (dml_missing_record_exception) {
119
                // Missing courses may have be deleted, so display them in site context.
120
                $course = 0;
121
                $sitecoursefilter = $courseid;
122
            }
1 efrain 123
        }
124
        $this->course = $course;
125
 
126
        if ($date == 0 ) {
127
            $date = time() - self::CUTOFF;
128
        }
129
        $this->date = $date;
130
 
131
        $this->page = $page;
132
        $this->perpage = $perpage;
133
        $this->order = $order;
1441 ariadna 134
        $this->sitecoursefilter = $sitecoursefilter;
1 efrain 135
        $this->set_refresh_rate();
136
    }
137
 
138
    /**
139
     * Get a list of enabled sql_reader objects/name
140
     *
141
     * @param bool $nameonly if true only reader names will be returned.
142
     *
143
     * @return array core\log\sql_reader object or name.
144
     */
145
    public function get_readers($nameonly = false) {
146
        if (!isset($this->logmanager)) {
147
            $this->logmanager = get_log_manager();
148
        }
149
 
150
        $readers = $this->logmanager->get_readers('core\log\sql_reader');
151
        if ($nameonly) {
152
            foreach ($readers as $pluginname => $reader) {
153
                $readers[$pluginname] = $reader->get_name();
154
            }
155
        }
156
        return $readers;
157
    }
158
 
159
    /**
160
     * Setup table log.
161
     */
162
    protected function setup_table() {
163
        $filter = $this->setup_filters();
164
        $this->tablelog = new report_loglive_table_log('report_loglive', $filter);
165
        $this->tablelog->define_baseurl($this->url);
166
    }
167
 
168
    /**
169
     * Setup table log for ajax output.
170
     */
171
    protected function setup_table_ajax() {
172
        $filter = $this->setup_filters();
173
        $this->tablelog = new report_loglive_table_log_ajax('report_loglive', $filter);
174
        $this->tablelog->define_baseurl($this->url);
175
    }
176
 
177
    /**
178
     * Setup filters
179
     *
180
     * @return stdClass filters
181
     */
182
    protected function setup_filters() {
183
        $readers = $this->get_readers();
184
 
185
        // Set up filters.
186
        $filter = new \stdClass();
187
        if (!empty($this->course)) {
188
            $filter->courseid = $this->course->id;
189
            $context = context_course::instance($filter->courseid);
190
            if (!has_capability('moodle/site:viewanonymousevents', $context)) {
191
                $filter->anonymous = 0;
192
            }
193
        } else {
194
            $filter->courseid = 0;
195
        }
196
        $filter->logreader = $readers[$this->selectedlogreader];
197
        $filter->date = $this->date;
198
        $filter->orderby = $this->order;
1441 ariadna 199
        $filter->sitecoursefilter = $this->sitecoursefilter;
1 efrain 200
 
201
        return $filter;
202
    }
203
 
204
    /**
205
     * Set refresh rate of the live updates.
206
     */
207
    protected function set_refresh_rate() {
208
        if (defined('BEHAT_SITE_RUNNING')) {
209
            // Hack for behat tests.
210
            $this->refresh = 5;
211
        } else {
212
            if (defined('REPORT_LOGLIVE_REFRESH')) {
213
                // Backward compatibility.
214
                $this->refresh = REPORT_LOGLIVE_REFRESH;
215
            } else {
216
                // Default.
217
                $this->refresh = 60;
218
            }
219
        }
220
    }
221
 
222
    /**
223
     * Get refresh rate of the live updates.
224
     */
225
    public function get_refresh_rate() {
226
        return $this->refresh;
227
    }
228
 
229
    /**
230
     * Setup table and return it.
231
     *
232
     * @param bool $ajax If set to true report_loglive_table_log_ajax is set instead of report_loglive_table_log.
233
     *
234
     * @return report_loglive_table_log|report_loglive_table_log_ajax table object
235
     */
236
    public function get_table($ajax = false) {
237
        if (empty($this->tablelog)) {
238
            if ($ajax) {
239
                $this->setup_table_ajax();
240
            } else {
241
                $this->setup_table();
242
            }
243
        }
244
        return $this->tablelog;
245
    }
246
}