MDL-27548 comments: component now recorded

This commit is contained in:
Sam Hemelryk 2014-11-13 11:38:41 +13:00
parent ca0e301c7b
commit 686d05619b
5 changed files with 92 additions and 14 deletions

View File

@ -48,7 +48,14 @@ class comment {
private $courseid;
/** @var stdClass course module object, only be used to help find pluginname automatically */
private $cm;
/** @var string The component that this comment is for. It is STRONGLY recommended to set this. */
/**
* The component that this comment is for.
*
* It is STRONGLY recommended to set this.
* Added as a database field in 2.9, old comments will have a null component.
*
* @var string
*/
private $component;
/** @var string This is calculated by normalising the component */
private $pluginname;
@ -241,10 +248,11 @@ class comment {
}
// setup variables for non-js interface
self::$nonjs = optional_param('nonjscomment', '', PARAM_ALPHANUM);
self::$comment_itemid = optional_param('comment_itemid', '', PARAM_INT);
self::$comment_itemid = optional_param('comment_itemid', '', PARAM_INT);
self::$comment_component = optional_param('comment_component', '', PARAM_COMPONENT);
self::$comment_context = optional_param('comment_context', '', PARAM_INT);
self::$comment_page = optional_param('comment_page', '', PARAM_INT);
self::$comment_area = optional_param('comment_area', '', PARAM_AREA);
self::$comment_page = optional_param('comment_page', '', PARAM_INT);
self::$comment_area = optional_param('comment_area', '', PARAM_AREA);
$page->requires->string_for_js('addcomment', 'moodle');
$page->requires->string_for_js('deletecomment', 'moodle');
@ -259,6 +267,7 @@ class comment {
* invalidates permission checks.
* A coding_error is now thrown if code attempts to change the component.
*
* @throws coding_exception if you try to change the component after it has been set.
* @param string $component
*/
public function set_component($component) {
@ -320,6 +329,7 @@ class comment {
'nonjscomment' => true,
'comment_itemid' => $this->itemid,
'comment_context' => $this->context->id,
'comment_component' => $this->get_component(),
'comment_area' => $this->commentarea,
));
$link->remove_params(array('comment_page'));
@ -525,10 +535,19 @@ class comment {
$perpage = (!empty($CFG->commentsperpage))?$CFG->commentsperpage:15;
$start = $page * $perpage;
$ufields = user_picture::fields('u');
list($componentwhere, $component) = $this->get_component_select_sql('c');
if ($component) {
$params['component'] = $component;
}
$sql = "SELECT $ufields, c.id AS cid, c.content AS ccontent, c.format AS cformat, c.timecreated AS ctimecreated
FROM {comments} c
JOIN {user} u ON u.id = c.userid
WHERE c.contextid = :contextid AND c.commentarea = :commentarea AND c.itemid = :itemid
WHERE c.contextid = :contextid AND
c.commentarea = :commentarea AND
c.itemid = :itemid AND
$componentwhere
ORDER BY c.timecreated DESC";
$params['contextid'] = $this->contextid;
$params['commentarea'] = $this->commentarea;
@ -568,6 +587,25 @@ class comment {
return $comments;
}
/**
* Returns an SQL fragment and param for selecting on component.
* @param string $alias
* @return array
*/
protected function get_component_select_sql($alias = '') {
$component = $this->get_component();
if ($alias) {
$alias = $alias.'.';
}
if (empty($component)) {
$componentwhere = "{$alias}component IS NULL";
$component = null;
} else {
$componentwhere = "({$alias}component IS NULL OR {$alias}component = :component)";
}
return array($componentwhere, $component);
}
/**
* Returns the number of comments associated with the details of this object
*
@ -577,7 +615,18 @@ class comment {
public function count() {
global $DB;
if ($this->totalcommentcount === null) {
$this->totalcommentcount = $DB->count_records('comments', array('itemid' => $this->itemid, 'commentarea' => $this->commentarea, 'contextid' => $this->context->id));
list($where, $component) = $this->get_component_select_sql();
$where .= ' AND itemid = :itemid AND commentarea = :commentarea AND contextid = :contextid';
$params = array(
'itemid' => $this->itemid,
'commentarea' => $this->commentarea,
'contextid' => $this->context->id,
);
if ($component) {
$params['component'] = $component;
}
$this->totalcommentcount = $DB->count_records_select('comments', $where, $params);
}
return $this->totalcommentcount;
}
@ -636,6 +685,7 @@ class comment {
$newcmt->contextid = $this->contextid;
$newcmt->commentarea = $this->commentarea;
$newcmt->itemid = $this->itemid;
$newcmt->component = !empty($this->component) ? $this->component : null;
$newcmt->content = $content;
$newcmt->format = $format;
$newcmt->userid = $USER->id;
@ -780,10 +830,11 @@ class comment {
return '';
}
$html = '';
if (!(self::$comment_itemid == $this->itemid &&
self::$comment_context == $this->context->id &&
self::$comment_area == $this->commentarea)) {
self::$comment_area == $this->commentarea &&
self::$comment_component == $this->component
)) {
$page = 0;
}
$comments = $this->get_comments($page);
@ -913,11 +964,22 @@ class comment {
}
/**
* Returns the component associated with the comment
* Returns the component associated with the comment.
*
* @return string
*/
public function get_component() {
return $this->component;
}
/**
* Do not call! I am a deprecated method because of the typo in my name.
* @deprecated since 2.9
* @see comment::get_component()
* @return string
*/
public function get_compontent() {
return $this->component;
return $this->get_component();
}
/**

View File

@ -62,7 +62,7 @@ class comment_manager {
$comments = array();
$usernamefields = get_all_user_name_fields(true, 'u');
$sql = "SELECT c.id, c.contextid, c.itemid, c.commentarea, c.userid, c.content, $usernamefields, c.timecreated
$sql = "SELECT c.id, c.contextid, c.itemid, c.component, c.commentarea, c.userid, c.content, $usernamefields, c.timecreated
FROM {comments} c
JOIN {user} u
ON u.id=c.userid

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<XMLDB PATH="lib/db" VERSION="20141017" COMMENT="XMLDB file for core Moodle tables"
<XMLDB PATH="lib/db" VERSION="20141113" COMMENT="XMLDB file for core Moodle tables"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../lib/xmldb/xmldb.xsd"
>
@ -2479,6 +2479,7 @@
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
<FIELD NAME="contextid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="component" TYPE="char" LENGTH="255" NOTNULL="false" SEQUENCE="false" COMMENT="The plugin this comment belongs to."/>
<FIELD NAME="commentarea" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="itemid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="content" TYPE="text" NOTNULL="true" SEQUENCE="false"/>
@ -3081,4 +3082,4 @@
</KEYS>
</TABLE>
</TABLES>
</XMLDB>
</XMLDB>

View File

@ -4058,5 +4058,20 @@ function xmldb_main_upgrade($oldversion) {
// Moodle v2.8.0 release upgrade line.
// Put any upgrade step following this.
if ($oldversion < 2014112800.00) {
// Define field component to be added to comments.
$table = new xmldb_table('comments');
$field = new xmldb_field('component', XMLDB_TYPE_CHAR, '255', null, null, null, null, 'contextid');
// Conditionally launch add field component.
if (!$dbman->field_exists($table, $field)) {
$dbman->add_field($table, $field);
}
// Main savepoint reached.
upgrade_main_savepoint(true, 2014112800.00);
}
return true;
}

View File

@ -29,7 +29,7 @@
defined('MOODLE_INTERNAL') || die();
$version = 2014112000.00; // YYYYMMDD = weekly release date of this DEV branch.
$version = 2014112800.00; // YYYYMMDD = weekly release date of this DEV branch.
// RR = release increments - 00 in DEV branches.
// .XX = incremental changes.