[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/mod/assign/submission/comments/ -> lib.php (source)

   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 moodle hooks for the submission comments 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  defined('MOODLE_INTERNAL') || die();
  25  
  26  /**
  27   *
  28   * Callback method for data validation---- required method for AJAXmoodle based comment API
  29   *
  30   * @param stdClass $options
  31   * @return bool
  32   */
  33  function assignsubmission_comments_comment_validate(stdClass $options) {
  34      global $USER, $CFG, $DB;
  35  
  36      if ($options->commentarea != 'submission_comments' &&
  37              $options->commentarea != 'submission_comments_upgrade') {
  38          throw new comment_exception('invalidcommentarea');
  39      }
  40      if (!$submission = $DB->get_record('assign_submission', array('id'=>$options->itemid))) {
  41          throw new comment_exception('invalidcommentitemid');
  42      }
  43      $context = $options->context;
  44  
  45      require_once($CFG->dirroot . '/mod/assign/locallib.php');
  46      $assignment = new assign($context, null, null);
  47  
  48      if ($assignment->get_instance()->id != $submission->assignment) {
  49          throw new comment_exception('invalidcontext');
  50      }
  51      $canview = false;
  52      if ($submission->userid) {
  53          $canview = $assignment->can_view_submission($submission->userid);
  54      } else {
  55          $canview = $assignment->can_view_group_submission($submission->groupid);
  56      }
  57      if (!$canview) {
  58          throw new comment_exception('nopermissiontocomment');
  59      }
  60  
  61      return true;
  62  }
  63  
  64  /**
  65   * Permission control method for submission plugin ---- required method for AJAXmoodle based comment API
  66   *
  67   * @param stdClass $options
  68   * @return array
  69   */
  70  function assignsubmission_comments_comment_permissions(stdClass $options) {
  71      global $USER, $CFG, $DB;
  72  
  73      if ($options->commentarea != 'submission_comments' &&
  74              $options->commentarea != 'submission_comments_upgrade') {
  75          throw new comment_exception('invalidcommentarea');
  76      }
  77      if (!$submission = $DB->get_record('assign_submission', array('id'=>$options->itemid))) {
  78          throw new comment_exception('invalidcommentitemid');
  79      }
  80      $context = $options->context;
  81  
  82      require_once($CFG->dirroot . '/mod/assign/locallib.php');
  83      $assignment = new assign($context, null, null);
  84  
  85      if ($assignment->get_instance()->id != $submission->assignment) {
  86          throw new comment_exception('invalidcontext');
  87      }
  88  
  89      if ($assignment->get_instance()->teamsubmission &&
  90          !$assignment->can_view_group_submission($submission->groupid)) {
  91          return array('post' => false, 'view' => false);
  92      }
  93  
  94      if (!$assignment->get_instance()->teamsubmission &&
  95          !$assignment->can_view_submission($submission->userid)) {
  96          return array('post' => false, 'view' => false);
  97      }
  98  
  99      return array('post' => true, 'view' => true);
 100  }
 101  
 102  /**
 103   * Callback called by comment::get_comments() and comment::add(). Gives an opportunity to enforce blind-marking.
 104   *
 105   * @param array $comments
 106   * @param stdClass $options
 107   * @return array
 108   * @throws comment_exception
 109   */
 110  function assignsubmission_comments_comment_display($comments, $options) {
 111      global $CFG, $DB, $USER;
 112  
 113      if ($options->commentarea != 'submission_comments' &&
 114          $options->commentarea != 'submission_comments_upgrade') {
 115          throw new comment_exception('invalidcommentarea');
 116      }
 117      if (!$submission = $DB->get_record('assign_submission', array('id'=>$options->itemid))) {
 118          throw new comment_exception('invalidcommentitemid');
 119      }
 120      $context = $options->context;
 121      $cm = $options->cm;
 122      $course = $options->courseid;
 123  
 124      require_once($CFG->dirroot . '/mod/assign/locallib.php');
 125      $assignment = new assign($context, $cm, $course);
 126  
 127      if ($assignment->get_instance()->id != $submission->assignment) {
 128          throw new comment_exception('invalidcontext');
 129      }
 130  
 131      if ($assignment->is_blind_marking() && !empty($comments)) {
 132          // Blind marking is being used, may need to map unique anonymous ids to the comments.
 133          $usermappings = array();
 134          $hiddenuserstr = trim(get_string('hiddenuser', 'assign'));
 135          $guestuser = guest_user();
 136  
 137          foreach ($comments as $comment) {
 138              // Anonymize the comments.
 139              if (empty($usermappings[$comment->userid])) {
 140                  // The blind-marking information for this commenter has not been generated; do so now.
 141                  $anonid = $assignment->get_uniqueid_for_user($comment->userid);
 142                  $commenter = new stdClass();
 143                  $commenter->firstname = $hiddenuserstr;
 144                  $commenter->lastname = $anonid;
 145                  $commenter->picture = 0;
 146                  $commenter->id = $guestuser->id;
 147                  $commenter->email = $guestuser->email;
 148                  $commenter->imagealt = $guestuser->imagealt;
 149  
 150                  // Temporarily store blind-marking information for use in later comments if necessary.
 151                  $usermappings[$comment->userid]->fullname = fullname($commenter);
 152                  $usermappings[$comment->userid]->avatar = $assignment->get_renderer()->user_picture($commenter,
 153                          array('size'=>18, 'link' => false));
 154              }
 155  
 156              // Set blind-marking information for this comment.
 157              $comment->fullname = $usermappings[$comment->userid]->fullname;
 158              $comment->avatar = $usermappings[$comment->userid]->avatar;
 159              $comment->profileurl = null;
 160          }
 161      }
 162  
 163      return $comments;
 164  }
 165  
 166  /**
 167   * Callback to force the userid for all comments to be the userid of the submission and NOT the global $USER->id. This
 168   * is required by the upgrade code. Note the comment area is used to identify upgrades.
 169   *
 170   * @param stdClass $comment
 171   * @param stdClass $param
 172   */
 173  function assignsubmission_comments_comment_add(stdClass $comment, stdClass $param) {
 174  
 175      global $DB;
 176      if ($comment->commentarea == 'submission_comments_upgrade') {
 177          $submissionid = $comment->itemid;
 178          $submission = $DB->get_record('assign_submission', array('id' => $submissionid));
 179  
 180          $comment->userid = $submission->userid;
 181          $comment->commentarea = 'submission_comments';
 182      }
 183  }
 184  


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1