e966dd7f43cde27aaab462952a3d280786482b9b
[moodle.git] / admin / tool / models / classes / output / renderer.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  * Renderer.
19  *
20  * @package    tool_models
21  * @copyright  2016 David Monllao {@link http://www.davidmonllao.com}
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 namespace tool_models\output;
27 defined('MOODLE_INTERNAL') || die();
29 use plugin_renderer_base;
30 use templatable;
31 use renderable;
33 /**
34  * Renderer class.
35  *
36  * @package    tool_models
37  * @copyright  2016 David Monllao {@link http://www.davidmonllao.com}
38  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
39  */
40 class renderer extends plugin_renderer_base {
42     /**
43      * Defer to template.
44      *
45      * @param templatable $templatable
46      * @return string HTML
47      */
48     protected function render_models_list(templatable $templatable) {
49         $data = $templatable->export_for_template($this);
50         return parent::render_from_template('tool_models/models_list', $data);
51     }
53     /**
54      * Renders a table.
55      *
56      * @param \table_sql $table
57      * @return string HTML
58      */
59     public function render_table(\table_sql $table) {
61         ob_start();
62         $table->out(10, true);
63         $output = ob_get_contents();
64         ob_end_clean();
66         return $output;
67     }
69     /**
70      * Web interface evaluate results.
71      *
72      * @param \stdClass[] $results
73      * @param string[] $logs
74      * @return string HTML
75      */
76     public function render_evaluate_results($results, $logs = array()) {
77         global $OUTPUT;
79         $output = '';
81         foreach ($results as $timesplittingid => $result) {
83             if (!CLI_SCRIPT) {
84                 $output .= $OUTPUT->box_start('generalbox m-b-3');
85             }
87             // Check that the array key is a string, not all results depend on time splitting methods (e.g. general errors).
88             if (!is_numeric($timesplittingid)) {
89                 $timesplitting = \core_analytics\manager::get_time_splitting($timesplittingid);
90                 $langstrdata = (object)array('name' => $timesplitting->get_name(), 'id' => $timesplittingid);
92                 if (CLI_SCRIPT) {
93                     $output .= $OUTPUT->heading(get_string('getpredictionsresultscli', 'tool_models', $langstrdata), 3);
94                 } else {
95                     $output .= $OUTPUT->heading(get_string('getpredictionsresults', 'tool_models', $langstrdata), 3);
96                 }
97             }
99             if ($result->status == 0) {
100                 $output .= $OUTPUT->notification(get_string('goodmodel', 'tool_models'),
101                     \core\output\notification::NOTIFY_SUCCESS);
102             } else if ($result->status === \core_analytics\model::NO_DATASET) {
103                 $output .= $OUTPUT->notification(get_string('nodatatoevaluate', 'tool_models'),
104                     \core\output\notification::NOTIFY_WARNING);
105             }
107             if (isset($result->score)) {
108                 // Score.
109                 $output .= $OUTPUT->heading(get_string('accuracy', 'tool_models') . ': ' .
110                     round(floatval($result->score), 4) * 100  . '%', 4);
111             }
113             if (!empty($result->info)) {
114                 foreach ($result->info as $message) {
115                     $output .= $OUTPUT->notification($message, \core\output\notification::NOTIFY_WARNING);
116                 }
117             }
119             if (!CLI_SCRIPT) {
120                 $output .= $OUTPUT->box_end();
121             }
122         }
124         // Info logged during evaluation.
125         if (!empty($logs) && debugging()) {
126             $output .= $OUTPUT->heading(get_string('extrainfo', 'tool_models'), 3);
127             foreach ($logs as $log) {
128                 $output .= $OUTPUT->notification($log, \core\output\notification::NOTIFY_WARNING);
129             }
130         }
132         if (!CLI_SCRIPT) {
133             $output .= $OUTPUT->single_button(new \moodle_url('/admin/tool/models/index.php'), get_string('continue'));
134         }
136         return $output;
137     }
140     /**
141      * Web interface training & prediction results.
142      *
143      * @param \stdClass|false $trainresults
144      * @param string[] $trainlogs
145      * @param \stdClass|false $predictresults
146      * @param string[] $predictlogs
147      * @return string HTML
148      */
149     public function render_get_predictions_results($trainresults = false, $trainlogs = array(), $predictresults = false, $predictlogs = array()) {
150         global $OUTPUT;
152         $output = '';
154         if ($trainresults || (!empty($trainlogs) && debugging())) {
155             $output .= $OUTPUT->heading(get_string('trainingresults', 'tool_models'), 3);
156         }
158         if ($trainresults) {
159             if ($trainresults->status == 0) {
160                 $output .= $OUTPUT->notification(get_string('trainingprocessfinished', 'tool_models'),
161                     \core\output\notification::NOTIFY_SUCCESS);
162             } else if ($trainresults->status === \core_analytics\model::NO_DATASET) {
163                 $output .= $OUTPUT->notification(get_string('nodatatotrain', 'tool_models'),
164                     \core\output\notification::NOTIFY_WARNING);
165             } else {
166                 $output .= $OUTPUT->notification(get_string('generalerror', 'analytics', $trainresults->status),
167                     \core\output\notification::NOTIFY_ERROR);
168             }
169         }
171         if (!empty($trainlogs) && debugging()) {
172             $output .= $OUTPUT->heading(get_string('extrainfo', 'tool_models'), 4);
173             foreach ($trainlogs as $log) {
174                 $output .= $OUTPUT->notification($log, \core\output\notification::NOTIFY_WARNING);
175             }
176         }
178         if ($predictresults || (!empty($predictlogs) && debugging())) {
179             $output .= $OUTPUT->heading(get_string('predictionresults', 'tool_models'), 3, 'main m-t-3');
180         }
182         if ($predictresults) {
183             if ($predictresults->status == 0) {
184                 $output .= $OUTPUT->notification(get_string('predictionprocessfinished', 'tool_models'),
185                     \core\output\notification::NOTIFY_SUCCESS);
186             } else if ($predictresults->status === \core_analytics\model::NO_DATASET) {
187                 $output .= $OUTPUT->notification(get_string('nodatatopredict', 'tool_models'),
188                     \core\output\notification::NOTIFY_WARNING);
189             } else {
190                 $output .= $OUTPUT->notification(get_string('generalerror', 'analytics', $predictresults->status),
191                     \core\output\notification::NOTIFY_ERROR);
192             }
193         }
195         if (!empty($predictlogs) && debugging()) {
196             $output .= $OUTPUT->heading(get_string('extrainfo', 'tool_models'), 4);
197             foreach ($predictlogs as $log) {
198                 $output .= $OUTPUT->notification($log, \core\output\notification::NOTIFY_WARNING);
199             }
200         }
202         if (!CLI_SCRIPT) {
203             $output .= $OUTPUT->single_button(new \moodle_url('/admin/tool/models/index.php'), get_string('continue'));
204         }
206         return $output;
207     }