Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.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   * Class for exporting plan data.
  19   *
  20   * @package    core_competency
  21   * @copyright  2015 Damyon Wiese
  22   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23   */
  24  namespace core_competency\external;
  25  defined('MOODLE_INTERNAL') || die();
  26  
  27  use core_user;
  28  use renderer_base;
  29  use stdClass;
  30  use moodle_url;
  31  use core_competency\url;
  32  use core_comment\external\comment_area_exporter;
  33  use core_user\external\user_summary_exporter;
  34  
  35  /**
  36   * Class for exporting plan data.
  37   *
  38   * @copyright  2015 Damyon Wiese
  39   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  40   */
  41  class plan_exporter extends \core\external\persistent_exporter {
  42  
  43      protected static function define_class() {
  44          return \core_competency\plan::class;
  45      }
  46  
  47      protected static function define_related() {
  48          return array('template' => 'core_competency\\template?');
  49      }
  50  
  51      protected function get_other_values(renderer_base $output) {
  52          $classname = static::define_class();
  53          $status = $this->persistent->get('status');
  54  
  55          $values = new stdClass();
  56  
  57          $values->statusname = $this->persistent->get_statusname();
  58          $values->isbasedontemplate = $this->persistent->is_based_on_template();
  59  
  60          $values->canmanage = $this->persistent->can_manage();
  61          $values->canrequestreview = $this->persistent->can_request_review();
  62          $values->canreview = $this->persistent->can_review();
  63          $values->canbeedited = $this->persistent->can_be_edited();
  64  
  65          $values->isactive = $status == $classname::STATUS_ACTIVE;
  66          $values->isdraft = $status == $classname::STATUS_DRAFT;
  67          $values->iscompleted = $status == $classname::STATUS_COMPLETE;
  68          $values->isinreview = $status == $classname::STATUS_IN_REVIEW;
  69          $values->iswaitingforreview = $status == $classname::STATUS_WAITING_FOR_REVIEW;
  70  
  71          $values->isreopenallowed = $values->canmanage && $values->iscompleted;
  72          $values->iscompleteallowed = $values->canmanage && $values->isactive;
  73          $values->isunlinkallowed = $values->canmanage && !$values->iscompleted && $values->isbasedontemplate;
  74  
  75          $values->isrequestreviewallowed = false;
  76          $values->iscancelreviewrequestallowed = false;
  77          $values->isstartreviewallowed = false;
  78          $values->isstopreviewallowed = false;
  79          $values->isapproveallowed = false;
  80          $values->isunapproveallowed = false;
  81          if (!$values->isbasedontemplate) {
  82              $values->isrequestreviewallowed = $values->canrequestreview && $values->isdraft;
  83              $values->iscancelreviewrequestallowed = $values->canrequestreview && $values->iswaitingforreview;
  84              $values->isstartreviewallowed = $values->canreview && $values->iswaitingforreview;
  85              $values->isstopreviewallowed = $values->canreview && $values->isinreview;
  86              $values->isapproveallowed = $values->canreview && !$values->iscompleted && !$values->isactive;
  87              $values->isunapproveallowed = $values->canreview && $values->isactive;
  88          }
  89  
  90          $values->duedateformatted = userdate($this->persistent->get('duedate'));
  91  
  92          if ($this->persistent->is_based_on_template()) {
  93              $exporter = new template_exporter($this->related['template']);
  94              $values->template = $exporter->export($output);
  95          }
  96  
  97          if (!empty($values->isinreview)) {
  98              // TODO Make this more efficient.
  99              $userexporter = new user_summary_exporter(core_user::get_user($this->persistent->get('reviewerid'), '*', MUST_EXIST));
 100              $values->reviewer = $userexporter->export($output);
 101          }
 102  
 103          $commentareaexporter = new comment_area_exporter($this->persistent->get_comment_object());
 104          $values->commentarea = $commentareaexporter->export($output);
 105          $values->url = url::plan($this->persistent->get('id'))->out(false);
 106  
 107          return (array) $values;
 108      }
 109  
 110      public static function define_other_properties() {
 111          return array(
 112              'statusname' => array(
 113                  'type' => PARAM_RAW,
 114              ),
 115              'isbasedontemplate' => array(
 116                  'type' => PARAM_BOOL,
 117              ),
 118              'canmanage' => array(
 119                  'type' => PARAM_BOOL,
 120              ),
 121              'canrequestreview' => array(
 122                  'type' => PARAM_BOOL,
 123              ),
 124              'canreview' => array(
 125                  'type' => PARAM_BOOL,
 126              ),
 127              'canbeedited' => array(
 128                  'type' => PARAM_BOOL,
 129              ),
 130              'isactive' => array(
 131                  'type' => PARAM_BOOL
 132              ),
 133              'isdraft' => array(
 134                  'type' => PARAM_BOOL
 135              ),
 136              'iscompleted' => array(
 137                  'type' => PARAM_BOOL
 138              ),
 139              'isinreview' => array(
 140                  'type' => PARAM_BOOL
 141              ),
 142              'iswaitingforreview' => array(
 143                  'type' => PARAM_BOOL
 144              ),
 145              'isreopenallowed' => array(
 146                  'type' => PARAM_BOOL
 147              ),
 148              'iscompleteallowed' => array(
 149                  'type' => PARAM_BOOL
 150              ),
 151              'isunlinkallowed' => array(
 152                  'type' => PARAM_BOOL
 153              ),
 154              'isrequestreviewallowed' => array(
 155                  'type' => PARAM_BOOL
 156              ),
 157              'iscancelreviewrequestallowed' => array(
 158                  'type' => PARAM_BOOL
 159              ),
 160              'isstartreviewallowed' => array(
 161                  'type' => PARAM_BOOL
 162              ),
 163              'isstopreviewallowed' => array(
 164                  'type' => PARAM_BOOL
 165              ),
 166              'isapproveallowed' => array(
 167                  'type' => PARAM_BOOL
 168              ),
 169              'isunapproveallowed' => array(
 170                  'type' => PARAM_BOOL
 171              ),
 172              'duedateformatted' => array(
 173                  'type' => PARAM_TEXT
 174              ),
 175              'commentarea' => array(
 176                  'type' => comment_area_exporter::read_properties_definition(),
 177              ),
 178              'reviewer' => array(
 179                  'type' => user_summary_exporter::read_properties_definition(),
 180                  'optional' => true
 181              ),
 182              'template' => array(
 183                  'type' => template_exporter::read_properties_definition(),
 184                  'optional' => true,
 185              ),
 186              'url' => array(
 187                  'type' => PARAM_URL
 188              )
 189          );
 190      }
 191  }