Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.0.x will end 8 May 2023 (12 months).
  • Bug fixes for security issues in 4.0.x will end 13 November 2023 (18 months).
  • PHP version: minimum PHP 7.3.0 Note: the minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is also supported.

Differences Between: [Versions 310 and 400]

   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   * Output tracker.
  19   *
  20   * @package    tool_uploadcourse
  21   * @copyright  2013 Frédéric Massart
  22   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23   */
  24  
  25  defined('MOODLE_INTERNAL') || die();
  26  require_once($CFG->libdir . '/weblib.php');
  27  
  28  /**
  29   * Class output tracker.
  30   *
  31   * @package    tool_uploadcourse
  32   * @copyright  2013 Frédéric Massart
  33   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  34   */
  35  class tool_uploadcourse_tracker {
  36  
  37      /**
  38       * Constant to output nothing.
  39       */
  40      const NO_OUTPUT = 0;
  41  
  42      /**
  43       * Constant to output HTML.
  44       */
  45      const OUTPUT_HTML = 1;
  46  
  47      /**
  48       * Constant to output plain text.
  49       */
  50      const OUTPUT_PLAIN = 2;
  51  
  52      /**
  53       * @var array columns to display.
  54       */
  55      protected $columns = array('line', 'result', 'id', 'shortname', 'fullname', 'idnumber', 'status');
  56  
  57      /**
  58       * @var int row number.
  59       */
  60      protected $rownb = 0;
  61  
  62      /**
  63       * @var int chosen output mode.
  64       */
  65      protected $outputmode;
  66  
  67      /**
  68       * @var object output buffer.
  69       */
  70      protected $buffer;
  71  
  72      /**
  73       * Constructor.
  74       *
  75       * @param int $outputmode desired output mode.
  76       */
  77      public function __construct($outputmode = self::NO_OUTPUT) {
  78          $this->outputmode = $outputmode;
  79          if ($this->outputmode == self::OUTPUT_PLAIN) {
  80              $this->buffer = new progress_trace_buffer(new text_progress_trace());
  81          }
  82      }
  83  
  84      /**
  85       * Finish the output.
  86       *
  87       * @return void
  88       */
  89      public function finish() {
  90          if ($this->outputmode == self::NO_OUTPUT) {
  91              return;
  92          }
  93  
  94          if ($this->outputmode == self::OUTPUT_HTML) {
  95              echo html_writer::end_tag('table');
  96          }
  97      }
  98  
  99      /**
 100       * Output the results.
 101       *
 102       * @param int $total total courses.
 103       * @param int $created count of courses created.
 104       * @param int $updated count of courses updated.
 105       * @param int $deleted count of courses deleted.
 106       * @param int $errors count of errors.
 107       * @return void
 108       */
 109      public function results($total, $created, $updated, $deleted, $errors) {
 110          if ($this->outputmode == self::NO_OUTPUT) {
 111              return;
 112          }
 113  
 114          $message = array(
 115              get_string('coursestotal', 'tool_uploadcourse', $total),
 116              get_string('coursescreated', 'tool_uploadcourse', $created),
 117              get_string('coursesupdated', 'tool_uploadcourse', $updated),
 118              get_string('coursesdeleted', 'tool_uploadcourse', $deleted),
 119              get_string('courseserrors', 'tool_uploadcourse', $errors)
 120          );
 121  
 122          if ($this->outputmode == self::OUTPUT_PLAIN) {
 123              foreach ($message as $msg) {
 124                  $this->buffer->output($msg);
 125              }
 126          } else if ($this->outputmode == self::OUTPUT_HTML) {
 127              $buffer = new progress_trace_buffer(new html_list_progress_trace());
 128              foreach ($message as $msg) {
 129                  $buffer->output($msg);
 130              }
 131              $buffer->finished();
 132          }
 133      }
 134  
 135      /**
 136       * Output one more line.
 137       *
 138       * @param int $line line number.
 139       * @param bool $outcome success or not?
 140       * @param array $status array of statuses.
 141       * @param array $data extra data to display.
 142       * @return void
 143       */
 144      public function output($line, $outcome, $status, $data) {
 145          global $OUTPUT;
 146          if ($this->outputmode == self::NO_OUTPUT) {
 147              return;
 148          }
 149  
 150          if ($this->outputmode == self::OUTPUT_PLAIN) {
 151              $message = array(
 152                  $line,
 153                  $outcome ? 'OK' : 'NOK',
 154                  isset($data['id']) ? $data['id'] : '',
 155                  isset($data['shortname']) ? $data['shortname'] : '',
 156                  isset($data['fullname']) ? $data['fullname'] : '',
 157                  isset($data['idnumber']) ? $data['idnumber'] : ''
 158              );
 159              $this->buffer->output(implode("\t", $message));
 160              if (!empty($status)) {
 161                  foreach ($status as $st) {
 162                      $this->buffer->output($st, 1);
 163                  }
 164              }
 165          } else if ($this->outputmode == self::OUTPUT_HTML) {
 166              $ci = 0;
 167              $this->rownb++;
 168              if (is_array($status)) {
 169                  $status = implode(html_writer::empty_tag('br'), $status);
 170              }
 171              if ($outcome) {
 172                  $outcome = $OUTPUT->pix_icon('i/valid', '');
 173              } else {
 174                  $outcome = $OUTPUT->pix_icon('i/invalid', '');
 175              }
 176  
 177              echo html_writer::start_tag('tr', array('class' => 'r' . $this->rownb % 2));
 178              echo html_writer::tag('td', $line, array('class' => 'c' . $ci++));
 179              echo html_writer::tag('td', $outcome, array('class' => 'c' . $ci++));
 180              echo html_writer::tag('td', isset($data['id']) ? $data['id'] : '', array('class' => 'c' . $ci++));
 181  
 182              // Ensure our data is suitable for HTML output.
 183              echo html_writer::tag('td', isset($data['shortname']) ? s($data['shortname']) : '', array('class' => 'c' . $ci++));
 184              echo html_writer::tag('td', isset($data['fullname']) ? s($data['fullname']) : '', array('class' => 'c' . $ci++));
 185              echo html_writer::tag('td', isset($data['idnumber']) ? s($data['idnumber']) : '', array('class' => 'c' . $ci++));
 186              echo html_writer::tag('td', $status, array('class' => 'c' . $ci++));
 187              echo html_writer::end_tag('tr');
 188          }
 189      }
 190  
 191      /**
 192       * Start the output.
 193       *
 194       * @return void
 195       */
 196      public function start() {
 197          if ($this->outputmode == self::NO_OUTPUT) {
 198              return;
 199          }
 200  
 201          if ($this->outputmode == self::OUTPUT_PLAIN) {
 202              $columns = array_flip($this->columns);
 203              unset($columns['status']);
 204              $columns = array_flip($columns);
 205              $this->buffer->output(implode("\t", $columns));
 206          } else if ($this->outputmode == self::OUTPUT_HTML) {
 207              $ci = 0;
 208              echo html_writer::start_tag('table', array('class' => 'generaltable boxaligncenter flexible-wrap',
 209                  'summary' => get_string('uploadcoursesresult', 'tool_uploadcourse')));
 210              echo html_writer::start_tag('tr', array('class' => 'heading r' . $this->rownb));
 211              echo html_writer::tag('th', get_string('csvline', 'tool_uploadcourse'),
 212                  array('class' => 'c' . $ci++, 'scope' => 'col'));
 213              echo html_writer::tag('th', get_string('result', 'tool_uploadcourse'), array('class' => 'c' . $ci++, 'scope' => 'col'));
 214              echo html_writer::tag('th', get_string('id', 'tool_uploadcourse'), array('class' => 'c' . $ci++, 'scope' => 'col'));
 215              echo html_writer::tag('th', get_string('shortname'), array('class' => 'c' . $ci++, 'scope' => 'col'));
 216              echo html_writer::tag('th', get_string('fullname'), array('class' => 'c' . $ci++, 'scope' => 'col'));
 217              echo html_writer::tag('th', get_string('idnumber'), array('class' => 'c' . $ci++, 'scope' => 'col'));
 218              echo html_writer::tag('th', get_string('status'), array('class' => 'c' . $ci++, 'scope' => 'col'));
 219              echo html_writer::end_tag('tr');
 220          }
 221      }
 222  
 223  }