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
 * Renderer.
19
 *
20
 * @package    tool_analytics
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
 */
24
 
25
namespace tool_analytics\output;
26
 
27
defined('MOODLE_INTERNAL') || die();
28
 
29
use plugin_renderer_base;
30
 
31
 
32
/**
33
 * Renderer class.
34
 *
35
 * @package    tool_analytics
36
 * @copyright  2016 David Monllao {@link http://www.davidmonllao.com}
37
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
38
 */
39
class renderer extends plugin_renderer_base {
40
 
41
    /**
42
     * Defer to template.
43
     *
44
     * @param \tool_analytics\output\models_list $modelslist
45
     * @return string HTML
46
     */
47
    protected function render_models_list(\tool_analytics\output\models_list $modelslist) {
48
        $data = $modelslist->export_for_template($this);
49
        return parent::render_from_template('tool_analytics/models_list', $data);
50
    }
51
 
52
    /**
53
     * Renders a table.
54
     *
55
     * @param \table_sql $table
56
     * @return string HTML
57
     */
58
    public function render_table(\table_sql $table) {
59
 
60
        ob_start();
61
        $table->out(10, true);
62
        $output = ob_get_contents();
63
        ob_end_clean();
64
 
65
        return $output;
66
    }
67
 
68
    /**
69
     * Web interface evaluate results.
70
     *
71
     * @param \stdClass[] $results
72
     * @param string[] $logs
73
     * @return string HTML
74
     */
75
    public function render_evaluate_results($results, $logs = array()) {
76
        $output = '';
77
 
78
        foreach ($results as $timesplittingid => $result) {
79
 
80
            if (!CLI_SCRIPT) {
81
                $output .= $this->output->box_start('generalbox mb-3');
82
            }
83
 
84
            // Check that the array key is a string, not all results depend on time splitting methods (e.g. general errors).
85
            if (!is_numeric($timesplittingid)) {
86
                $timesplitting = \core_analytics\manager::get_time_splitting($timesplittingid);
87
                $langstrdata = (object)array('name' => $timesplitting->get_name(), 'id' => $timesplittingid);
88
 
89
                if (CLI_SCRIPT) {
90
                    $output .= $this->output->heading(get_string('scheduledanalysisresultscli', 'tool_analytics', $langstrdata), 3);
91
                } else {
92
                    $output .= $this->output->heading(get_string('scheduledanalysisresults', 'tool_analytics', $langstrdata), 3);
93
                }
94
            }
95
 
96
            if ($result->status == 0) {
97
                $output .= $this->output->notification(get_string('goodmodel', 'tool_analytics'),
98
                    \core\output\notification::NOTIFY_SUCCESS);
99
            } else if ($result->status === \core_analytics\model::NO_DATASET) {
100
                $output .= $this->output->notification(get_string('nodatatoevaluate', 'tool_analytics'),
101
                    \core\output\notification::NOTIFY_WARNING);
102
            }
103
 
104
            if (isset($result->score)) {
105
                // Score.
106
                $output .= $this->output->heading(get_string('accuracy', 'tool_analytics') . ': ' .
107
                    round(floatval($result->score), 4) * 100  . '%', 4);
108
            }
109
 
110
            if (!empty($result->info)) {
111
                foreach ($result->info as $message) {
112
                    $output .= $this->output->notification($message, \core\output\notification::NOTIFY_WARNING);
113
                }
114
            }
115
 
116
            if (!CLI_SCRIPT) {
117
                $output .= $this->output->box_end();
118
            }
119
        }
120
 
121
        // Info logged during evaluation.
122
        if (!empty($logs) && debugging()) {
123
            $output .= $this->output->heading(get_string('extrainfo', 'tool_analytics'), 3);
124
            foreach ($logs as $log) {
125
                $output .= $this->output->notification($log, \core\output\notification::NOTIFY_WARNING);
126
            }
127
        }
128
 
129
        if (!CLI_SCRIPT) {
130
            $output .= $this->output->single_button(new \moodle_url('/admin/tool/analytics/index.php'),
131
                    get_string('continue'), 'get');
132
        }
133
 
134
        return $output;
135
    }
136
 
137
 
138
    /**
139
     * Web interface training & prediction results.
140
     *
141
     * @param \stdClass|false $trainresults
142
     * @param string[] $trainlogs
143
     * @param \stdClass|false $predictresults
144
     * @param string[] $predictlogs
145
     * @return string HTML
146
     */
147
    public function render_get_predictions_results($trainresults = false, $trainlogs = array(), $predictresults = false, $predictlogs = array()) {
148
        $output = '';
149
 
150
        if ($trainresults || (!empty($trainlogs) && debugging())) {
151
            $output .= $this->output->heading(get_string('trainingresults', 'tool_analytics'), 3);
152
        }
153
 
154
        if ($trainresults) {
155
            if ($trainresults->status == 0) {
156
                $output .= $this->output->notification(
157
                        get_string('trainingprocessfinished', 'tool_analytics'),
158
                    \core\output\notification::NOTIFY_SUCCESS);
159
            } else if ($trainresults->status === \core_analytics\model::NO_DATASET ||
160
                    $trainresults->status === \core_analytics\model::NOT_ENOUGH_DATA) {
161
                $output .= $this->output->notification(
162
                        get_string('nodatatotrain', 'tool_analytics'),
163
                    \core\output\notification::NOTIFY_WARNING);
164
            } else {
165
                $output .= $this->output->notification(
166
                        get_string('generalerror', 'tool_analytics', $trainresults->status),
167
                    \core\output\notification::NOTIFY_ERROR);
168
            }
169
        }
170
 
171
        if (!empty($trainlogs) && debugging()) {
172
            $output .= $this->output->heading(get_string('extrainfo', 'tool_analytics'), 4);
173
            foreach ($trainlogs as $log) {
174
                $output .= $this->output->notification($log, \core\output\notification::NOTIFY_WARNING);
175
            }
176
        }
177
 
178
        if ($predictresults || (!empty($predictlogs) && debugging())) {
179
            $output .= $this->output->heading(
180
                    get_string('predictionresults', 'tool_analytics'), 3, 'main mt-3');
181
        }
182
 
183
        if ($predictresults) {
184
            if ($predictresults->status == 0) {
185
                $output .= $this->output->notification(
186
                        get_string('predictionprocessfinished', 'tool_analytics'),
187
                    \core\output\notification::NOTIFY_SUCCESS);
188
            } else if ($predictresults->status === \core_analytics\model::NO_DATASET ||
189
                    $predictresults->status === \core_analytics\model::NOT_ENOUGH_DATA) {
190
                $output .= $this->output->notification(
191
                        get_string('nodatatopredict', 'tool_analytics'),
192
                    \core\output\notification::NOTIFY_WARNING);
193
            } else {
194
                $output .= $this->output->notification(
195
                        get_string('generalerror', 'tool_analytics', $predictresults->status),
196
                    \core\output\notification::NOTIFY_ERROR);
197
            }
198
        }
199
 
200
        if (!empty($predictlogs) && debugging()) {
201
            $output .= $this->output->heading(get_string('extrainfo', 'tool_analytics'), 4);
202
            foreach ($predictlogs as $log) {
203
                $output .= $this->output->notification($log, \core\output\notification::NOTIFY_WARNING);
204
            }
205
        }
206
 
207
        if (!CLI_SCRIPT) {
208
            $output .= $this->output->single_button(new \moodle_url('/admin/tool/analytics/index.php'),
209
                    get_string('continue'), 'get');
210
        }
211
 
212
        return $output;
213
    }
214
 
215
    /**
216
     * Defer to template.
217
     *
218
     * @param \tool_analytics\output\insights_report $insightsreport
219
     * @return string HTML
220
     */
221
    protected function render_insights_report(\tool_analytics\output\insights_report $insightsreport): string {
222
        $data = $insightsreport->export_for_template($this);
223
        return parent::render_from_template('tool_analytics/insights_report', $data);
224
    }
225
 
226
    /**
227
     * Defer to template.
228
     *
229
     * @param \tool_analytics\output\invalid_analysables $invalidanalysables
230
     * @return string HTML
231
     */
232
    protected function render_invalid_analysables(\tool_analytics\output\invalid_analysables $invalidanalysables) {
233
        $data = $invalidanalysables->export_for_template($this);
234
        return parent::render_from_template('tool_analytics/invalid_analysables', $data);
235
    }
236
 
237
    /**
238
     * Renders an analytics disabled notification.
239
     *
240
     * @return string HTML
241
     */
242
    public function render_analytics_disabled() {
243
        global $FULLME;
244
 
245
        $this->page->set_url($FULLME);
246
        $this->page->set_title(get_string('pluginname', 'tool_analytics'));
247
        $this->page->set_heading(get_string('pluginname', 'tool_analytics'));
248
 
249
        $output = $this->output->header();
250
        $output .= $this->output->notification(get_string('analyticsdisabled', 'analytics'),
251
                \core\output\notification::NOTIFY_INFO);
252
        $output .= \html_writer::tag('a', get_string('continue'), ['class' => 'btn btn-primary',
253
            'href' => (new \moodle_url('/'))->out()]);
254
        $output .= $this->output->footer();
255
 
256
        return $output;
257
    }
258
 
259
}