Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.2.x will end 22 April 2024 (12 months).
  • Bug fixes for security issues in 4.2.x will end 7 October 2024 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.1.x is supported too.
   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   * Model logs table class.
  19   *
  20   * @package    tool_analytics
  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   */
  24  
  25  namespace tool_analytics\output;
  26  
  27  defined('MOODLE_INTERNAL') || die;
  28  require_once($CFG->libdir . '/tablelib.php');
  29  
  30  /**
  31   * Model logs table class.
  32   *
  33   * @package    tool_analytics
  34   * @copyright  2017 David Monllao {@link http://www.davidmonllao.com}
  35   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  36   */
  37  class model_logs extends \table_sql {
  38  
  39      /**
  40       * @var \core_analytics\model
  41       */
  42      protected $model = null;
  43  
  44      /**
  45       * @var string|false
  46       */
  47      protected $evaluationmode = false;
  48  
  49      /**
  50       * Sets up the table_log parameters.
  51       *
  52       * @param string $uniqueid unique id of form.
  53       * @param \core_analytics\model $model
  54       */
  55      public function __construct($uniqueid, $model) {
  56          global $PAGE;
  57  
  58          parent::__construct($uniqueid);
  59  
  60          $this->model = $model;
  61  
  62          $this->set_attribute('class', 'modellog generaltable generalbox');
  63          $this->set_attribute('aria-live', 'polite');
  64  
  65          $this->define_columns(array('time', 'version', 'evaluationmode', 'indicators', 'timesplitting',
  66              'accuracy', 'info', 'usermodified'));
  67          $this->define_headers(array(
  68              get_string('time'),
  69              get_string('version'),
  70              get_string('evaluationmode', 'tool_analytics'),
  71              get_string('indicators', 'tool_analytics'),
  72              get_string('timesplittingmethod', 'analytics'),
  73              get_string('accuracy', 'tool_analytics'),
  74              get_string('info', 'tool_analytics'),
  75              get_string('fullnameuser'),
  76          ));
  77  
  78          $evaluationmodehelp = new \help_icon('evaluationmode', 'tool_analytics');
  79          $this->define_help_for_headers([null, null, $evaluationmodehelp, null, null, null, null, null]);
  80  
  81          $this->pageable(true);
  82          $this->collapsible(false);
  83          $this->sortable(false);
  84          $this->is_downloadable(false);
  85  
  86          $this->evaluationmode = optional_param('evaluationmode', false, PARAM_ALPHANUM);
  87          if ($this->evaluationmode && $this->evaluationmode != 'configuration' && $this->evaluationmode != 'trainedmodel') {
  88              $this->evaluationmode = '';
  89          }
  90  
  91          $this->define_baseurl($PAGE->url);
  92      }
  93  
  94      /**
  95       * Generate the version column.
  96       *
  97       * @param \stdClass $log log data.
  98       * @return string HTML for the version column
  99       */
 100      public function col_version($log) {
 101          $recenttimestr = get_string('strftimerecent', 'core_langconfig');
 102          return userdate($log->version, $recenttimestr);
 103      }
 104  
 105      /**
 106       * Generate the evaluation mode column.
 107       *
 108       * @param \stdClass $log log data.
 109       * @return string HTML for the evaluationmode column
 110       */
 111      public function col_evaluationmode($log) {
 112          return get_string('evaluationmodecol' . $log->evaluationmode, 'tool_analytics');
 113      }
 114      /**
 115       * Generate the time column.
 116       *
 117       * @param \stdClass $log log data.
 118       * @return string HTML for the time column
 119       */
 120      public function col_time($log) {
 121          $recenttimestr = get_string('strftimerecent', 'core_langconfig');
 122          return userdate($log->timecreated, $recenttimestr);
 123      }
 124  
 125      /**
 126       * Generate the indicators column.
 127       *
 128       * @param \stdClass $log log data.
 129       * @return string HTML for the indicators column
 130       */
 131      public function col_indicators($log) {
 132          $indicatorclasses = json_decode($log->indicators);
 133          $indicators = array();
 134          foreach ($indicatorclasses as $indicatorclass) {
 135              $indicator = \core_analytics\manager::get_indicator($indicatorclass);
 136              if ($indicator) {
 137                  $indicators[] = $indicator->get_name();
 138              } else {
 139                  debugging('Can\'t load ' . $indicatorclass . ' indicator', DEBUG_DEVELOPER);
 140              }
 141          }
 142          return '<ul><li>' . implode('</li><li>', $indicators) . '</li></ul>';
 143      }
 144  
 145      /**
 146       * Generate the context column.
 147       *
 148       * @param \stdClass $log log data.
 149       * @return string HTML for the context column
 150       */
 151      public function col_timesplitting($log) {
 152          $timesplitting = \core_analytics\manager::get_time_splitting($log->timesplitting);
 153          return $timesplitting->get_name();
 154      }
 155  
 156      /**
 157       * Generate the accuracy column.
 158       *
 159       * @param \stdClass $log log data.
 160       * @return string HTML for the accuracy column
 161       */
 162      public function col_accuracy($log) {
 163          return strval(round($log->score * 100, 2)) . '%';
 164      }
 165  
 166      /**
 167       * Generate the info column.
 168       *
 169       * @param \stdClass $log log data.
 170       * @return string HTML for the score column
 171       */
 172      public function col_info($log) {
 173          global $PAGE;
 174  
 175          if (empty($log->info) && empty($log->dir)) {
 176              return '';
 177          }
 178  
 179          $info = array();
 180          if (!empty($log->info)) {
 181              $info = json_decode($log->info);
 182          }
 183          if (!empty($log->dir)) {
 184              $info[] = get_string('predictorresultsin', 'tool_analytics', $log->dir);
 185          }
 186          $PAGE->requires->js_call_amd('tool_analytics/log_info', 'loadInfo', array($log->id, $info));
 187          return \html_writer::link('#', get_string('view'), array('data-model-log-id' => $log->id));
 188      }
 189  
 190      /**
 191       * Generate the usermodified column.
 192       *
 193       * @param \stdClass $log log data.
 194       * @return string HTML for the usermodified column
 195       */
 196      public function col_usermodified($log) {
 197          $user = \core_user::get_user($log->usermodified);
 198          return fullname($user);
 199      }
 200  
 201      /**
 202       * Query the logs table. Store results in the object for use by build_table.
 203       *
 204       * @param int $pagesize size of page for paginated displayed table.
 205       * @param bool $useinitialsbar do you want to use the initials bar.
 206       */
 207      public function query_db($pagesize, $useinitialsbar = true) {
 208          $total = count($this->model->get_logs());
 209          $this->pagesize($pagesize, $total);
 210          $this->rawdata = $this->model->get_logs($this->get_page_start(), $this->get_page_size());
 211  
 212          // Set initial bars.
 213          if ($useinitialsbar) {
 214              $this->initialbars($total > $pagesize);
 215          }
 216      }
 217  }