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   * This file contains the definition for the library class for online comment submission plugin
  19   *
  20   * @package assignsubmission_comments
  21   * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
  22   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23   */
  24  
  25   defined('MOODLE_INTERNAL') || die();
  26  
  27   require_once($CFG->dirroot . '/comment/lib.php');
  28   require_once($CFG->dirroot . '/mod/assign/submissionplugin.php');
  29  
  30  /**
  31   * Library class for comment submission plugin extending submission plugin base class
  32   *
  33   * @package assignsubmission_comments
  34   * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
  35   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  36   */
  37  class assign_submission_comments extends assign_submission_plugin {
  38  
  39      /**
  40       * Get the name of the online comment submission plugin
  41       * @return string
  42       */
  43      public function get_name() {
  44          return get_string('pluginname', 'assignsubmission_comments');
  45      }
  46  
  47      /**
  48       * Display AJAX based comment in the submission status table
  49       *
  50       * @param stdClass $submission
  51       * @param bool $showviewlink - If the comments are long this is
  52       *                             set to true so they can be shown in a separate page
  53       * @return string
  54       */
  55      public function view_summary(stdClass $submission, & $showviewlink) {
  56  
  57          // Never show a link to view full submission.
  58          $showviewlink = false;
  59          // Need to used this init() otherwise it does not have the javascript includes.
  60          comment::init();
  61  
  62          $options = new stdClass();
  63          $options->area    = 'submission_comments';
  64          $options->course    = $this->assignment->get_course();
  65          $options->context = $this->assignment->get_context();
  66          $options->itemid  = $submission->id;
  67          $options->component = 'assignsubmission_comments';
  68          $options->showcount = true;
  69          $options->displaycancel = true;
  70  
  71          $comment = new comment($options);
  72  
  73          $o = $this->assignment->get_renderer()->container($comment->output(true), 'commentscontainer');
  74          return $o;
  75      }
  76  
  77      /**
  78       * Always return true because the submission comments are not part of the submission form.
  79       *
  80       * @param stdClass $submission
  81       * @return bool
  82       */
  83      public function is_empty(stdClass $submission) {
  84          return true;
  85      }
  86  
  87      /**
  88       * Return true if this plugin can upgrade an old Moodle 2.2 assignment of this type
  89       * and version.
  90       *
  91       * @param string $type old assignment subtype
  92       * @param int $version old assignment version
  93       * @return bool True if upgrade is possible
  94       */
  95      public function can_upgrade($type, $version) {
  96  
  97          if ($type == 'upload' && $version >= 2011112900) {
  98              return true;
  99          }
 100          return false;
 101      }
 102  
 103  
 104      /**
 105       * Upgrade the settings from the old assignment to the new plugin based one
 106       *
 107       * @param context $oldcontext - the context for the old assignment
 108       * @param stdClass $oldassignment - the data for the old assignment
 109       * @param string $log - can be appended to by the upgrade
 110       * @return bool was it a success? (false will trigger a rollback)
 111       */
 112      public function upgrade_settings(context $oldcontext, stdClass $oldassignment, & $log) {
 113          if ($oldassignment->assignmenttype == 'upload') {
 114              // Disable if allow notes was not enabled.
 115              if (!$oldassignment->var2) {
 116                  $this->disable();
 117              }
 118          }
 119          return true;
 120      }
 121  
 122      /**
 123       * Upgrade the submission from the old assignment to the new one
 124       *
 125       * @param context $oldcontext The context for the old assignment
 126       * @param stdClass $oldassignment The data record for the old assignment
 127       * @param stdClass $oldsubmission The data record for the old submission
 128       * @param stdClass $submission The new submission record
 129       * @param string $log Record upgrade messages in the log
 130       * @return bool true or false - false will trigger a rollback
 131       */
 132      public function upgrade(context $oldcontext,
 133                              stdClass $oldassignment,
 134                              stdClass $oldsubmission,
 135                              stdClass $submission,
 136                              & $log) {
 137  
 138          if ($oldsubmission->data1 != '') {
 139  
 140              // Need to used this init() otherwise it does not have the javascript includes.
 141              comment::init();
 142  
 143              $options = new stdClass();
 144              $options->area = 'submission_comments_upgrade';
 145              $options->course = $this->assignment->get_course();
 146              $options->context = $this->assignment->get_context();
 147              $options->itemid = $submission->id;
 148              $options->component = 'assignsubmission_comments';
 149              $options->showcount = true;
 150              $options->displaycancel = true;
 151  
 152              $comment = new comment($options);
 153              $comment->add($oldsubmission->data1);
 154              $comment->set_view_permission(true);
 155  
 156              return $comment->output(true);
 157          }
 158  
 159          return true;
 160      }
 161  
 162      /**
 163       * The submission comments plugin has no submission component so should not be counted
 164       * when determining whether to show the edit submission link.
 165       * @return boolean
 166       */
 167      public function allow_submissions() {
 168          return false;
 169      }
 170  
 171      /**
 172       * Automatically enable or disable this plugin based on "$CFG->commentsenabled"
 173       *
 174       * @return bool
 175       */
 176      public function is_enabled() {
 177          global $CFG;
 178  
 179          return (!empty($CFG->usecomments));
 180      }
 181  
 182      /**
 183       * Automatically hide the setting for the submission plugin.
 184       *
 185       * @return bool
 186       */
 187      public function is_configurable() {
 188          return false;
 189      }
 190  
 191      /**
 192       * Return the plugin configs for external functions.
 193       *
 194       * @return array the list of settings
 195       * @since Moodle 3.2
 196       */
 197      public function get_config_for_external() {
 198          return (array) $this->get_config();
 199      }
 200  }