$c->avatar = $OUTPUT->user_picture($u, array('size'=>18));
$c->userid = $u->id;
- $candelete = $this->can_delete($c->id);
- if (($USER->id == $u->id) || !empty($candelete)) {
+ if ($this->can_delete($c)) {
$c->delete = true;
}
$comments[] = $c;
/**
* Delete a comment
*
- * @param int $commentid
+ * @param int|stdClass $comment The id of a comment, or a comment record.
* @return bool
*/
- public function delete($commentid) {
- global $DB, $USER;
- $candelete = has_capability('moodle/comment:delete', $this->context);
- if (!$comment = $DB->get_record('comments', array('id'=>$commentid))) {
+ public function delete($comment) {
+ global $DB;
+ if (is_object($comment)) {
+ $commentid = $comment->id;
+ } else {
+ $commentid = $comment;
+ $comment = $DB->get_record('comments', ['id' => $commentid]);
+ }
+
+ if (!$comment) {
throw new comment_exception('dbupdatefailed');
}
- if (!($USER->id == $comment->userid || !empty($candelete))) {
+ if (!$this->can_delete($comment)) {
throw new comment_exception('nopermissiontocomment');
}
$DB->delete_records('comments', array('id'=>$commentid));
}
/**
- * Returns true if the user can delete this comment
- * @param int $commentid
+ * Returns true if the user can delete this comment.
+ *
+ * The user can delete comments if it is one they posted and they can still make posts,
+ * or they have the capability to delete comments.
+ *
+ * A database call is avoided if a comment record is passed.
+ *
+ * @param int|stdClass $comment The id of a comment, or a comment record.
* @return bool
*/
- public function can_delete($commentid) {
+ public function can_delete($comment) {
+ global $USER, $DB;
+ if (is_object($comment)) {
+ $commentid = $comment->id;
+ } else {
+ $commentid = $comment;
+ }
+
$this->validate(array('commentid'=>$commentid));
- return has_capability('moodle/comment:delete', $this->context);
+
+ if (!is_object($comment)) {
+ // Get the comment record from the database.
+ $comment = $DB->get_record('comments', array('id' => $commentid), 'id, userid', MUST_EXIST);
+ }
+
+ $hascapability = has_capability('moodle/comment:delete', $this->context);
+ $owncomment = $USER->id == $comment->userid;
+
+ return ($hascapability || ($owncomment && $this->can_post()));
}
/**
$string['noparticipatorycms'] = 'Sorry, but you have no participatory course modules to report on';
$string['nopermissions'] = 'Sorry, but you do not currently have permissions to do that ({$a}).';
$string['nopermissiontocomment'] = 'You can\'t add comments';
-$string['nopermissiontodelentry'] = 'You can\'t delete other people\'s entries!';
+$string['nopermissiontodelentry'] = 'You can\'t delete this comment!';
$string['nopermissiontoeditcomment'] = 'You can\'t edit other people\'s comments!';
$string['nopermissiontohide'] = 'No permission to hide!';
$string['nopermissiontoimportact'] = 'You do not have the required permissions to import activities to this course';