rating MDL-21657 more changes based on Petr's feedback

This commit is contained in:
Andrew Davis
2010-03-18 03:47:12 +00:00
parent dd884a3ac5
commit 8b69c341c0
7 changed files with 37 additions and 52 deletions
+11 -21
View File
@@ -3051,7 +3051,7 @@ WHERE gradeitemid IS NOT NULL AND grademax IS NOT NULL");
upgrade_main_savepoint($result, 2010021800);
}
if ($result && $oldversion < 2010031602) {
if ($result && $oldversion < 2010031800) {
//drop the erroneously created ratings table
$table = new xmldb_table('ratings');
if ($dbman->table_exists($table)) {
@@ -3060,6 +3060,9 @@ WHERE gradeitemid IS NOT NULL AND grademax IS NOT NULL");
//create the rating table (replaces module specific rating implementations)
$table = new xmldb_table('rating');
if ($dbman->table_exists($table)) {
$dbman->drop_table($table);
}
/// Adding fields to table rating
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
@@ -3086,7 +3089,7 @@ WHERE gradeitemid IS NOT NULL AND grademax IS NOT NULL");
$dbman->create_table($table);
}
//migrate ratings out of the modules into the central rating table
//pull in the ratings from the modules into the central rating table
//migrate forumratings
//forum ratings only have a single time column so use it for both time created and modified
@@ -3099,38 +3102,25 @@ INNER JOIN {forum} f on f.id=d.forum';
//migrate glossary_ratings
//glossary ratings only have a single time column so use it for both time created and modified
$ratingssql = 'SELECT r.id AS rid, r.entryid AS itemid, r.rating, r.userid, r.time AS timecreated, r.time AS timemodified, g.id AS mid, g.scale
FROM {glossary_ratings} r INNER JOIN {glossary_entries} ge ON ge.id=r.entryid
$ratingssql = 'SELECT r.id AS rid, r.entryid AS itemid, r.rating, r.userid, r.time AS timecreated, r.time AS timemodified, g.scale, g.id AS mid
FROM {glossary_ratings} r
INNER JOIN {glossary_entries} ge ON ge.id=r.entryid
INNER JOIN {glossary} g ON g.id=ge.glossaryid';
$result = $result && upgrade_module_ratings($ratingssql,'glossary');
//migrate data_ratings
//data ratings didnt store time created and modified so Im using the times from the record the rating was attached to
$ratingssql = 'SELECT r.id AS rid, r.recordid AS itemid, r.rating, r.userid, re.timecreated, re.timemodified, d.scale, d.id AS mid
FROM {data_ratings} r INNER JOIN {data_records} re ON r.recordid=re.id
FROM {data_ratings} r
INNER JOIN {data_records} re ON r.recordid=re.id
INNER JOIN {data} d ON d.id=re.dataid';
$result = $result && upgrade_module_ratings($ratingssql,'data');
//todo set permissions based on current value of glossary.assessed
//todo drop forum_ratings, data_ratings and glossary_ratings
upgrade_main_savepoint($result, 2010031602);
upgrade_main_savepoint($result, 2010031800);
}
//upgrade.php was out of step with install.xml for 16 hours. Its theoretically possible someone could
//have done a fresh install during that time with version 2010031602 and wound up with a table called 'ratings'
if ($result && $oldversion < 2010031700) {
$table = new xmldb_table('ratings');
if ( $dbman->table_exists($table) ) {
$dbman->rename_table($table, 'rating');
}
upgrade_main_savepoint($result, 2010031700);
}
return $result;
}
+4 -4
View File
@@ -1245,7 +1245,7 @@ class core_renderer extends renderer_base {
$strrate = get_string("rate", "rating");
$strratings = ''; //the string we'll return
if($rating->settings->permissions[RATING_VIEW] || $rating->settings->permissions[RATING_VIEW_ALL]) {
if($rating->settings->permissions->canview || $rating->settings->permissions->canviewall) {
switch ($rating->settings->aggregationmethod) {
case RATING_AGGREGATE_AVERAGE :
$strratings .= get_string("aggregateavg", "forum");
@@ -1283,11 +1283,11 @@ class core_renderer extends renderer_base {
$aggstr = "{$ratingstr} / $scalemax ({$rating->count}) ";
if ($rating->settings->permissions[RATING_VIEW_ALL]) {
if ($rating->settings->permissions->canviewall) {
$link = new moodle_url("/rating/index.php?contextid={$rating->context->id}&itemid={$rating->itemid}&scaleid={$rating->scaleid}");
$action = new popup_action('click', $link, 'ratings', array('height' => 400, 'width' => 600));
$strratings .= $this->action_link($link, $aggstr, $action);
} else if ($rating->settings->permissions[RATING_VIEW_ALL]) {
} else if ($rating->settings->permissions->canview) {
$strratings .= $aggstr;
}
}
@@ -1295,7 +1295,7 @@ class core_renderer extends renderer_base {
//todo andrew alter the below if to deny guest users the ability to post ratings.
//Petr to define "guest"
$formstart = null;
if($rating->settings->permissions[RATING_POST]) {
if($rating->settings->permissions->canrate) {
//dont use $rating->userid below as it will be null if the user hasnt already rated the item
$formstart = <<<END
<form id="postrating{$rating->itemid}" class="postratingform" method="post" action="rating/rate.php">
+2
View File
@@ -257,6 +257,8 @@ function xmldb_glossary_upgrade($oldversion) {
upgrade_mod_savepoint($result, 2009110800, 'glossary');
}
//todo andrew set rating permissions based on current value of glossary.assessed
return $result;
}
+2 -3
View File
@@ -40,11 +40,10 @@ if ($sort !== 0) {
}
$PAGE->set_url($url);
$permissions = rating::get_rating_permissions(context);
if (!$permissions[RATING_VIEW]) {
if ( !has_capability(RATING_VIEW,$context) ) {
print_error('noviewrate', 'rating');
}
if (!$permissions[RATING_VIEW_ALL] and $USER->id != $item->userid) {
if ( !has_capability(RATING_VIEW,$context) and $USER->id != $item->userid) {
print_error('noviewanyrate', 'rating');
}
+15 -15
View File
@@ -23,9 +23,9 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('RATING_VIEW','view');
define('RATING_VIEW_ALL','viewall');
define('RATING_POST','post');
define('RATING_VIEW','moodle/rating:view');
define('RATING_VIEW_ALL','moodle/rating:viewall');
define('RATING_RATE','moodle/rating:rate');
define('RATING_UNSET_RATING', -999);
@@ -69,6 +69,12 @@ class rating implements renderable {
*/
public $userid;
/**
* settings for this rating. Necessary to render the rating.
* @var stdclass
*/
public $settings;
/**
* Constructor.
* @param context $context the current context object
@@ -243,8 +249,6 @@ class rating implements renderable {
$ratingsrecords = $DB->get_records_sql($sql, $params);
//now create the rating sub objects
$permissions = rating::get_rating_permissions($context);
$scaleobj = new stdClass();
$scalemax = null;
@@ -268,12 +272,17 @@ class rating implements renderable {
$scalemax = $scaleid;
}
//should $settings and $settings->permissions be declared as proper classes?
$settings = new stdclass(); //settings that are common to all ratings objects in this context
$settings->scale = $scaleobj; //the scale to use now
$settings->permissions = $permissions;
$settings->aggregationmethod = $aggregate;
$settings->returnurl = $returnurl;
$settings->permissions = new stdclass();
$settings->permissions->canview = has_capability(RATING_VIEW,$context);
$settings->permissions->canviewall = has_capability(RATING_VIEW_ALL,$context);
$settings->permissions->canrate = has_capability(RATING_RATE,$context);
$rating = null;
foreach($items as $item) {
$rating = null;
@@ -317,13 +326,4 @@ class rating implements renderable {
}
return $items;
}
/**
* Static method that retrieves the current user's permissions to do with ratings
* @param context $contextid the current context
* @return returns the array of permissions
*/
public static function get_rating_permissions($context) {
return array(RATING_VIEW=>has_capability('moodle/rating:view',$context), RATING_VIEW_ALL=>has_capability('moodle/rating:viewall',$context), RATING_POST=>has_capability('moodle/rating:rate',$context));
}
} //end rating class definition
+2 -8
View File
@@ -48,8 +48,7 @@ if( !isloggedin() && !$returnurl ){ //session has expired and its an ajax reques
list($context, $course, $cm) = get_context_info_array($contextid);
require_login($course, false, $cm);
$permissions = rating::get_rating_permissions($context);
if( !$permissions[RATING_POST] ) {
if( !has_capability(RATING_RATE,$context) ) {
if( $returnurl ) { //if its a non-ajax request
echo $OUTPUT->header();
echo get_string('ratepermissiondenied', 'ratings');
@@ -67,12 +66,7 @@ if( !$permissions[RATING_POST] ) {
$userid = $USER->id;
$PAGE->set_url('/lib/rate.php', array(
'contextid'=>$contextid,
'itemid'=>$itemid,
'scaleid'=>$scaleid,
'rating'=>$userrating,
'userid'=>$userid,
'returnurl'=>$returnurl,
'contextid'=>$contextid
));
//todo how can we validate the forum post,glossary entry or whatever id?
+1 -1
View File
@@ -6,7 +6,7 @@
// This is compared against the values stored in the database to determine
// whether upgrades should be performed (see lib/db/*.php)
$version = 2010031700; // YYYYMMDD = date of the last version bump
$version = 2010031800; // YYYYMMDD = date of the last version bump
// XX = daily increments
$release = '2.0 dev (Build: 20100318)'; // Human-friendly version name