| 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 |  * 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 | }
 |