MDL-43682 loglive: Rewrite loglive to use new logging stores
[moodle.git] / report / loglive / classes / renderable.php
CommitLineData
5991eb80
AA
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
25defined('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 */
35class report_loglive_renderable implements renderable {
36
37 /** @const 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
67 /** @var report_loglive_table_log table log which will be used for rendering logs */
68 public $tablelog;
69
70 /** @var int refresh rate in seconds */
71 protected $refresh = 60;
72
73 /**
74 * Constructor.
75 *
76 * @param string $logreader (optional)reader pluginname from which logs will be fetched.
77 * @param stdClass|int $course (optional) course record or id
78 * @param moodle_url|string $url (optional) page url.
79 * @param int $date date (optional) from which records will be fetched.
80 * @param int $page (optional) page number.
81 * @param int $perpage (optional) number of records to show per page.
82 * @param string $order (optional) sortorder of fetched records
83 */
84 public function __construct($logreader = "", $course = 0, $url = "", $date = 0, $page = 0, $perpage = 100,
85 $order = "timecreated DESC") {
86
87 global $PAGE;
88
89 // Use first reader as selected reader, if not passed.
90 if (empty($logreader)) {
91 $readers = $this->get_readers();
92 if (!empty($readers)) {
93 reset($readers);
94 $logreader = key($readers);
95 } else {
96 $logreader = null;
97 }
98 }
99 $this->selectedlogreader = $logreader;
100
101 // Use page url if empty.
102 if (empty($url)) {
103 $url = new moodle_url($PAGE->url);
104 } else {
105 $url = new moodle_url($url);
106 }
107 $this->url = $url;
108
109 // Use site course id, if course is empty.
110 if (!empty($course) && is_int($course)) {
111 $course = get_course($course);
112 }
113 $this->course = $course;
114
115 if ($date == 0 ) {
116 $date = time() - self::CUTOFF;
117 }
118 $this->date = $date;
119
120 $this->page = $page;
121 $this->perpage = $perpage;
122 $this->order = $order;
123 $this->set_refresh_rate();
124 }
125
126 /**
127 * Get a list of enabled sql_select_reader objects/name
128 *
129 * @param bool $nameonly if true only reader names will be returned.
130 *
131 * @return array core\log\sql_select_reader object or name.
132 */
133 public function get_readers($nameonly = false) {
134 if (!isset($this->logmanager)) {
135 $this->logmanager = get_log_manager();
136 }
137
138 $readers = $this->logmanager->get_readers('core\log\sql_select_reader');
139 if ($nameonly) {
140 foreach ($readers as $pluginname => $reader) {
141 $readers[$pluginname] = $reader->get_name();
142 }
143 }
144 return $readers;
145 }
146
147 /**
148 * Setup table log.
149 */
150 public function setup_table() {
151 $filter = $this->setup_filters();
152 $this->tablelog = new report_loglive_table_log('report_loglive', $filter);
153 $this->tablelog->define_baseurl($this->url);
154 }
155
156 /**
157 * Setup table log for ajax output.
158 */
159 public function setup_table_ajax() {
160 $filter = $this->setup_filters();
161 $this->tablelog = new report_loglive_table_log_ajax('report_loglive', $filter);
162 $this->tablelog->define_baseurl($this->url);
163 }
164
165 /**
166 * Setup filters
167 *
168 * @return stdClass filters
169 */
170 protected function setup_filters() {
171 $readers = $this->get_readers();
172
173 // Set up filters.
174 $filter = new \stdClass();
175 if (!empty($this->course)) {
176 $filter->courseid = $this->course->id;
177 } else {
178 $filter->courseid = 0;
179 }
180 $filter->logreader = $readers[$this->selectedlogreader];
181 $filter->date = $this->date;
182 $filter->orderby = $this->order;
183 $filter->anonymous = 0;
184
185 return $filter;
186 }
187
188 /**
189 * Set refresh rate of the live updates.
190 */
191 protected function set_refresh_rate() {
192 if (defined('BEHAT_SITE_RUNNING')) {
193 // Hack for behat tests.
194 $this->refresh = 5;
195 } else {
196 if (defined('REPORT_LOGLIVE_REFRESH')) {
197 // Backward compatibility.
198 $this->refresh = REPORT_LOGLIVE_REFERESH;
199 } else {
200 // Default.
201 $this->refresh = 60;
202 }
203 }
204 }
205
206 /**
207 * Get refresh rate of the live updates.
208 */
209 public function get_refresh_rate() {
210 return $this->refresh;
211 }
212
213}