Merge branch 'wip-MDL-59775-fix' of https://github.com/marinaglancy/moodle
[moodle.git] / report / insights / insights.php
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/>.
17 /**
18  * View model insights.
19  *
20  * @package    report_insights
21  * @copyright  2017 David Monllao {@link http://www.davidmonllao.com}
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 require_once(__DIR__ . '/../../config.php');
26 require_once($CFG->libdir . '/adminlib.php');
28 $contextid = required_param('contextid', PARAM_INT);
29 $modelid = optional_param('modelid', false, PARAM_INT);
30 $page = optional_param('page', 0, PARAM_INT);
31 $perpage = optional_param('perpage', 100, PARAM_INT);
33 if ($perpage > 1000) {
34     $perpage = 1000;
35 }
37 list($context, $course, $cm) = get_context_info_array($contextid);
38 require_login($course, false, $cm);
39 if ($context->contextlevel < CONTEXT_COURSE) {
40     // Only for higher levels than course.
41     $PAGE->set_context($context);
42 }
43 \core_analytics\manager::check_can_list_insights($context);
45 // Get all models that are enabled, trained and have predictions at this context.
46 $othermodels = \core_analytics\manager::get_all_models(true, true, $context);
47 if (!$modelid && count($othermodels)) {
48     // Autoselect the only available model.
49     $model = reset($othermodels);
50     $modelid = $model->get_id();
51 }
52 if ($modelid) {
53     unset($othermodels[$modelid]);
54 }
56 // The URL in navigation only contains the contextid.
57 $params = array('contextid' => $contextid);
58 $navurl = new \moodle_url('/report/insights/insights.php', $params);
60 // This is the real page url, we need it to include the modelid so pagination and
61 // other stuff works as expected.
62 $url = clone $navurl;
63 if ($modelid) {
64     $url->param('modelid', $modelid);
65 }
67 $PAGE->set_url($url);
68 $PAGE->set_pagelayout('report');
70 if ($context->contextlevel === CONTEXT_SYSTEM) {
71     admin_externalpage_setup('reportinsights', '', null, '', array('pagelayout' => 'report'));
72 } else if ($context->contextlevel === CONTEXT_USER) {
73     $user = \core_user::get_user($context->instanceid, '*', MUST_EXIST);
74     $PAGE->navigation->extend_for_user($user);
75     $PAGE->add_report_nodes($user->id, array(
76         'name' => get_string('insights', 'report_insights'),
77         'url' => $url
78     ));
79 }
80 $PAGE->navigation->override_active_url($navurl);
82 $renderer = $PAGE->get_renderer('report_insights');
84 // No models with insights available at this context level.
85 if (!$modelid) {
86     echo $renderer->render_no_insights($context);
87     exit(0);
88 }
90 $model = new \core_analytics\model($modelid);
92 $insightinfo = new stdClass();
93 $insightinfo->contextname = $context->get_context_name();
94 $insightinfo->insightname = $model->get_target()->get_name();
96 if (!$model->is_enabled()) {
97     echo $renderer->render_model_disabled($insightinfo);
98     exit(0);
99 }
101 if (!$model->uses_insights()) {
102     echo $renderer->render_no_insights_model($context);
103     exit(0);
106 $PAGE->set_title($insightinfo->insightname);
107 $PAGE->set_heading($insightinfo->contextname);
109 echo $OUTPUT->header();
111 $renderable = new \report_insights\output\insights_list($model, $context, $othermodels, $page, $perpage);
112 echo $renderer->render($renderable);
114 $eventdata = array (
115     'context' => $context,
116     'other' => array('modelid' => $model->get_id())
117 );
118 \core\event\insights_viewed::create($eventdata)->trigger();
120 echo $OUTPUT->footer();