- Grading enabled.... finally.

This commit is contained in:
willcast
2003-11-21 18:42:38 +00:00
parent 21e98e21c9
commit 63dd5fb281
17 changed files with 620 additions and 39 deletions
+13 -1
View File
@@ -5,11 +5,12 @@
$string['addcomment'] = 'Add comment';
$string['addentry'] = 'Add a new entry';
$string['addingcomment'] = 'Add a comment';
$string['aliases'] = 'Alias(es)';
$string['aliases'] = 'Keyword(s)';
$string['allcategories'] = 'All Categories';
$string['allentries'] = 'ALL';
$string['allowcomments'] = 'Allow comments on entries';
$string['allowduplicatedentries'] = 'Duplicated entries allowed';
$string['allowratings'] = 'Allow entries to be rated?';
$string['answer'] = 'Answer';
$string['approve'] = 'Approve';
$string['areyousuredelete'] = 'Are you sure you want to delete this entry?';
@@ -91,6 +92,7 @@ $string['exportedentry'] = 'Exported entry';
$string['exportedfile'] = 'Exported file';
$string['exportentries'] = 'Export entries';
$string['exportglossary'] = 'Export glossary';
$string['exportentries'] = 'Export entries';
$string['exporttomainglossary'] = 'Export to main glossary';
$string['filetoimport'] = 'File to import';
$string['fillfields'] = 'Concept and definition are mandatory fields.';
@@ -121,10 +123,20 @@ $string['numberofentries'] = 'Number of entries';
$string['onebyline'] = '(one by line)';
$string['printerfriendly'] = 'Printer-friendly version';
$string['question'] = 'Question';
$string['rate'] = 'Rate';
$string['rating'] = 'Rating';
$string['ratingeveryone'] = 'Everyone can rate entries';
$string['ratingno'] = 'No ratings';
$string['ratingonlyteachers'] = 'Only $a can rate entries';
$string['ratings'] = 'Ratings';
$string['ratingssaved'] = 'Ratings saved';
$string['ratingsuse'] = 'Use ratings';
$string['ratingtime'] = 'Restrict ratings to entries with dates in this range:';
$string['rejectedentries'] = 'Rejected entries';
$string['rejectionrpt'] = 'Rejection Report';
$string['searchindefinition'] = 'Search full text';
$string['secondaryglossary'] = 'Secondary glossary';
$string['sendinratings'] = 'Send in my latest ratings';
$string['showall'] = 'Show \'ALL\' link';
$string['showalphabet'] = 'Show alphabet';
$string['showspecial'] = 'Show \'Special\' link';
+6 -13
View File
@@ -1,14 +1,5 @@
Things that are in the inkpot yet:
==================================
- Adding a way to specify default values for display formats:
* Default view
* Default Order
* Show (or do not) the group breaks.
* Default view for automatic links, entry view, etc.
* What else? Post in http://moodle.org/mod/forum/view.php?id=742
- Allow grading of entries
* Evaluation
* Self-evaluation?
@@ -16,7 +7,9 @@ Things that are in the inkpot yet:
********* IN BETA RIGHT NOW *********
- Allow to export/import entries (in beta now)
- Add Alias to concepts in order to use dynalinks on them. (in beta now)
- Allow to set default values for glossaries and entries settings (done)
- Add printer friendly version of glossaries (in beta)
- Adding a way to specify default values for display formats:
* Default view
* Default Order
* Show (or do not) the group breaks.
* Default view for automatic links, entry view, etc.
* What else? Post in http://moodle.org/mod/forum/view.php?id=742
+4
View File
@@ -58,6 +58,10 @@
fwrite ($bf,full_tag("ENTBYPAGE",4,false,$glossary->entbypage));
fwrite ($bf,full_tag("TIMECREATED",4,false,$glossary->timecreated));
fwrite ($bf,full_tag("TIMEMODIFIED",4,false,$glossary->timemodified));
fwrite ($bf,full_tag("ASSESSED",4,false,$glossary->assessed));
fwrite ($bf,full_tag("ASSESSTIMESTART",4,false,$glossary->assesstimestart));
fwrite ($bf,full_tag("ASSESSTIMEFINISH",4,false,$glossary->assesstimefinish));
fwrite ($bf,full_tag("SCALE",4,false,$glossary->scale));
backup_glossary_entries($bf,$preferences,$glossary->id, $preferences->mods["glossary"]->userinfo);
+21 -2
View File
@@ -214,12 +214,31 @@ function glossary_upgrade($oldversion) {
(fid, relatedview, defaultmode, defaulthook, sortkey, sortorder, showgroup, visible)
VALUES (5,5,'letter','ALL','CREATION','asc',1,1)");
// Entry list
execute_sql(" INSERT INTO {$CFG->prefix}glossary_displayformats
execute_sql("INSERT INTO {$CFG->prefix}glossary_displayformats
(fid, relatedview, defaultmode, defaulthook, sortkey, sortorder, showgroup, visible)
VALUES (6,0,'letter','ALL','CREATION','asc',1,1)");
}
return true;
if ($oldversion < 2003112100) {
table_column("glossary", "", "assessed", "integer", "10", "unsigned", "0");
table_column("glossary", "", "assesstimestart", "integer", "10", "unsigned", "0", "", "assessed");
table_column("glossary", "", "assesstimefinish", "integer", "10", "unsigned", "0", "", "assesstimestart");
execute_sql("CREATE TABLE {$CFG->prefix}glossary_ratings (
`id` int(10) unsigned NOT NULL auto_increment,
`userid` int(10) unsigned NOT NULL default '0',
`entryid` int(10) unsigned NOT NULL default '0',
`time` int(10) unsigned NOT NULL default '0',
`rating` tinyint(4) NOT NULL default '0',
PRIMARY KEY (`id`)
) COMMENT='Contains user ratings for entries'");
}
if ($oldversion < 2003112101) {
table_column("glossary", "", "scale", "integer", "10", "signed", "0", "", "assesstimefinish");
}
return true;
}
?>
+18
View File
@@ -25,6 +25,10 @@ CREATE TABLE prefix_glossary (
defaultapproval tinyint(2) unsigned NOT NULL default '1',
globalglossary tinyint(2) unsigned NOT NULL default '0',
entbypage tinyint(3) unsigned NOT NULL default '10',
assessed int(10) unsigned NOT NULL default '0',
assesstimestart int(10) unsigned NOT NULL default '0',
assesstimefinish int(10) unsigned NOT NULL default '0',
scale int(10) NOT NULL default '0',
timecreated int(10) unsigned NOT NULL default '0',
timemodified int(10) unsigned NOT NULL default '0',
PRIMARY KEY (id)
@@ -115,6 +119,20 @@ CREATE TABLE prefix_glossary_displayformats (
PRIMARY KEY (id)
) TYPE=MyISAM COMMENT='Setting of the display formats';
#
# Table structure for table `forum_ratings`
#
CREATE TABLE prefix_glossary_ratings (
id int(10) unsigned NOT NULL auto_increment,
userid int(10) unsigned NOT NULL default '0',
entryid int(10) unsigned NOT NULL default '0',
time int(10) unsigned NOT NULL default '0',
rating tinyint(4) NOT NULL default '0',
PRIMARY KEY (id)
) COMMENT='Contains user ratings for entries';
# --------------------------------------------------------
#
# Dumping data for table `log_display`
#
+5 -1
View File
@@ -1,6 +1,6 @@
<?PHP // $Id$
function glossary_print_entry_by_format($course, $cm, $glossary, $entry, $mode="",$hook="",$printicons=1) {
function glossary_print_entry_by_format($course, $cm, $glossary, $entry, $mode="",$hook="",$printicons=1,$ratings=NULL) {
global $THEME, $CFG, $USER;
$colour = $THEME->cellheading2;
@@ -12,6 +12,7 @@ function glossary_print_entry_by_format($course, $cm, $glossary, $entry, $mode="
echo "\n<tr>";
echo "\n<td bgcolor=\"$colour\" width=35 valign=top class=\"forumpostpicture\">";
$return = false;
if ($entry) {
print_user_picture($user->id, $course->id, $user->picture);
@@ -36,6 +37,8 @@ function glossary_print_entry_by_format($course, $cm, $glossary, $entry, $mode="
glossary_print_entry_definition($entry);
glossary_print_entry_lower_section($course, $cm, $glossary, $entry,$mode,$hook,$printicons);
echo ' ';
$return = glossary_print_entry_ratings($course, $entry, $ratings);
} else {
echo "<center>";
@@ -45,6 +48,7 @@ function glossary_print_entry_by_format($course, $cm, $glossary, $entry, $mode="
echo "</td></tr>";
echo "</table>\n";
return $return;
}
?>
+5
View File
@@ -12,6 +12,7 @@ function glossary_print_entry_by_format($course, $cm, $glossary, $entry, $mode="
echo "\n<tr>";
echo "\n<td bgcolor=\"$colour\" width=35 valign=top class=\"forumpostpicture\">";
$return = false;
if ($entry) {
print_user_picture($user->id, $course->id, $user->picture);
echo "</td>";
@@ -41,6 +42,8 @@ function glossary_print_entry_by_format($course, $cm, $glossary, $entry, $mode="
glossary_print_entry_definition($entry);
glossary_print_entry_lower_section($course, $cm, $glossary, $entry,$mode,$hook,$printicons);
echo ' ';
$return = glossary_print_entry_ratings($course, $entry, $ratings);
} else {
echo "<center>";
@@ -50,6 +53,8 @@ function glossary_print_entry_by_format($course, $cm, $glossary, $entry, $mode="
echo "</td></tr>";
echo "</table>\n";
return $return;
}
?>
+4 -2
View File
@@ -2,7 +2,7 @@
function glossary_print_entry_by_format($course, $cm, $glossary, $entry,$mode="",$hook="",$printicons=1) {
global $THEME, $USER;
$return = false;
if ( $entry ) {
$colour = $THEME->cellheading2;
@@ -23,6 +23,8 @@ function glossary_print_entry_by_format($course, $cm, $glossary, $entry,$mode=""
glossary_print_entry_lower_section($course, $cm, $glossary, $entry, $mode, $hook,$printicons);
echo ' ';
$return = glossary_print_entry_ratings($course, $entry, $ratings);
echo '</td></tr></table>';
} else {
@@ -30,7 +32,7 @@ function glossary_print_entry_by_format($course, $cm, $glossary, $entry,$mode=""
print_string("noentry", "glossary");
echo '</center>';
}
return $return;
}
?>
+4 -1
View File
@@ -4,6 +4,7 @@ function glossary_print_entry_by_format($course, $cm, $glossary, $entry,$mode=""
global $THEME, $USER;
$colour = $THEME->cellheading2;
$return = false;
echo "\n<table border=1 cellspacing=0 width=95% valign=top cellpadding=10>";
@@ -21,6 +22,8 @@ function glossary_print_entry_by_format($course, $cm, $glossary, $entry,$mode=""
glossary_print_entry_definition($entry);
glossary_print_entry_lower_section($course, $cm, $glossary, $entry, $mode, $hook,$printicons);
echo ' ';
$return = glossary_print_entry_ratings($course, $entry, $ratings);
} else {
echo "<center>";
print_string("noentry", "glossary");
@@ -29,7 +32,7 @@ function glossary_print_entry_by_format($course, $cm, $glossary, $entry,$mode=""
echo "</td></tr>";
echo "</table>\n";
return $return;
}
?>
+2 -1
View File
@@ -4,6 +4,7 @@ function glossary_print_entry_by_format($course, $cm, $glossary, $entry,$mode=""
global $THEME, $USER;
$colour = "#FFFFFF";
$return = false;
echo "\n<table class=\"generalbox\" border=0 cellspacing=0 width=95% valign=top cellpadding=10>";
@@ -27,7 +28,7 @@ function glossary_print_entry_by_format($course, $cm, $glossary, $entry,$mode=""
echo "</td></tr>";
echo "</table>\n";
return $return;
}
?>
+301 -15
View File
@@ -27,6 +27,20 @@ function glossary_add_instance($glossary) {
/// will create a new instance and return the id number
/// of the new instance.
if (!$glossary->userating) {
$glossary->assessed = 0;
}
if (!empty($glossary->ratingtime)) {
$glossary->assesstimestart = make_timestamp($glossary->startyear, $glossary->startmonth, $glossary->startday,
$glossary->starthour, $glossary->startminute, 0);
$glossary->assesstimefinish = make_timestamp($glossary->finishyear, $glossary->finishmonth, $glossary->finishday,
$glossary->finishhour, $glossary->finishminute, 0);
} else {
$glossary->assesstimestart = 0;
$glossary->assesstimefinish = 0;
}
if ( !isset($glossary->globalglossary) ) {
$glossary->globalglossary = 0;
} elseif ( !isadmin() ) {
@@ -54,6 +68,20 @@ global $CFG;
$glossary->timemodified = time();
$glossary->id = $glossary->instance;
if (!$glossary->userating) {
$glossary->assessed = 0;
}
if (!empty($glossary->ratingtime)) {
$glossary->assesstimestart = make_timestamp($glossary->startyear, $glossary->startmonth, $glossary->startday,
$glossary->starthour, $glossary->startminute, 0);
$glossary->assesstimefinish = make_timestamp($glossary->finishyear, $glossary->finishmonth, $glossary->finishday,
$glossary->finishhour, $glossary->finishminute, 0);
} else {
$glossary->assesstimestart = 0;
$glossary->assesstimefinish = 0;
}
$return = update_record("glossary", $glossary);
if ($return and $glossary->defaultapproval) {
execute_sql("update {$CFG->prefix}glossary_entries SET approved = 1 where approved != 1 and glossaryid = " . $glossary->id,false);
@@ -117,8 +145,8 @@ function glossary_user_outline($course, $user, $mod, $glossary) {
if ($entries = glossary_get_user_entries($glossary->id, $user->id)) {
$result->info = count($entries) . ' ' . get_string("entries", "glossary");
$lastpost = array_pop($entries);
$result->time = $lastpost->timemodified;
$lastentry = array_pop($entries);
$result->time = $lastentry->timemodified;
return $result;
}
return NULL;
@@ -236,10 +264,66 @@ function glossary_cron () {
function glossary_grades($glossaryid) {
/// Must return an array of grades for a given instance of this module,
/// indexed by user. It also returns a maximum allowed grade.
if (!$glossary = get_record("glossary", "id", $glossaryid)) {
return false;
}
if (!$glossary->assessed) {
return false;
}
$scalemenu = make_grades_menu($glossary->scale);
$return->grades = NULL;
$return->maxgrade = NULL;
$currentuser = 0;
$ratingsuser = array();
if ($ratings = glossary_get_user_grades($glossaryid)) {
foreach ($ratings as $rating) { // Ordered by user
if ($currentuser and $rating->userid != $currentuser) {
if (!empty($ratingsuser)) {
if ($glossary->scale < 0) {
$return->grades[$currentuser] = glossary_get_ratings_mean(0, $scalemenu, $ratingsuser);
$return->grades[$currentuser] .= "<br />".glossary_get_ratings_summary(0, $scalemenu, $ratingsuser);
} else {
$total = 0;
$count = 0;
foreach ($ratingsuser as $ra) {
$total += $ra;
$count ++;
}
$return->grades[$currentuser] = format_float($total/$count, 2);
}
} else {
$return->grades[$currentuser] = "";
}
$ratingsuser = array();
}
$ratingsuser[] = $rating->rating;
$currentuser = $rating->userid;
}
if (!empty($ratingsuser)) {
if ($glossary->scale < 0) {
$return->grades[$currentuser] = glossary_get_ratings_mean(0, $scalemenu, $ratingsuser);
$return->grades[$currentuser] .= "<br />".glossary_get_ratings_summary(0, $scalemenu, $ratingsuser);
} else {
$total = 0;
$count = 0;
foreach ($ratingsuser as $ra) {
$total += $ra;
$count ++;
}
$return->grades[$currentuser] = format_float((float)$total/(float)$count, 2);
}
} else {
$return->grades[$currentuser] = "";
}
} else {
$return->grades = array();
}
if ($glossary->scale < 0) {
$return->maxgrade = "";
} else {
$return->maxgrade = $glossary->scale;
}
return $return;
}
@@ -313,11 +397,11 @@ global $CFG;
}
return get_records_sql("SELECT $pivot ge.*
FROM {$CFG->prefix}glossary_entries ge, {$CFG->prefix}glossary_entries_categories c
WHERE (ge.id = c.entryid and c.categoryid = $hook) and
WHERE (ge.id = c.entryidid and c.categoryid = $hook) and
(ge.glossaryid = $glossary->id or ge.sourceglossaryid = $glossary->id) $where $orderby");
}
function glossary_print_entry($course, $cm, $glossary, $entry, $mode="",$hook="",$printicons = 1, $displayformat = -1) {
function glossary_print_entry($course, $cm, $glossary, $entry, $mode="",$hook="",$printicons = 1, $displayformat = -1, $ratings = NULL) {
global $THEME, $USER, $CFG;
if ( $displayformat < 0 ) {
$displayformat = $glossary->displayformat;
@@ -341,14 +425,14 @@ function glossary_print_entry($course, $cm, $glossary, $entry, $mode="",$hook=""
}
if ( !$basicformat and $permissiongranted or $displayformat >= 2) {
glossary_print_entry_by_format($course, $cm, $glossary, $entry,$mode,$hook,$printicons);
return glossary_print_entry_by_format($course, $cm, $glossary, $entry,$mode,$hook,$printicons,$ratings);
} else {
switch ( $displayformat ) {
case GLOSSARY_FORMAT_SIMPLE:
glossary_print_entry_by_default($course, $cm, $glossary, $entry,$mode,$hook,$printicons);
return glossary_print_entry_by_default($course, $cm, $glossary, $entry,$mode,$hook,$printicons,$ratings);
break;
case GLOSSARY_FORMAT_CONTINUOUS:
glossary_print_entry_continuous($course, $cm, $glossary, $entry,$mode,$hook,$printicons);
return glossary_print_entry_continuous($course, $cm, $glossary, $entry,$mode,$hook,$printicons,$ratings);
break;
}
}
@@ -451,7 +535,7 @@ function glossary_print_entry_icons($course, $cm, $glossary, $entry,$mode="",$ho
$return .= " <a title=\"" . get_string("addcomment","glossary") . "\" href=\"comment.php?id=$cm->id&eid=$entry->id\"><img src=\"comment.gif\" height=16 width=16 border=0></a> ";
}
if ($isteacher or $glossary->studentcanpost and $entry->userid == $USER->id) {
if ($isteacher or $glossary->studentcanentry and $entry->userid == $USER->id) {
// only teachers can export entries so check it out
if ($isteacher and !$ismainglossary and !$importedentry) {
$mainglossary = get_record("glossary","mainglossary",1,"course",$course->id);
@@ -548,7 +632,7 @@ function glossary_print_entry_approval($cm, $entry, $mode) {
}
}
function glossary_print_entry_by_default($course, $cm, $glossary, $entry,$mode="",$hook="",$printicons=1) {
function glossary_print_entry_by_default($course, $cm, $glossary, $entry,$mode="",$hook="",$printicons=1, $ratings=NULL) {
global $THEME, $USER;
$colour = $THEME->cellheading2;
@@ -562,12 +646,16 @@ function glossary_print_entry_by_default($course, $cm, $glossary, $entry,$mode="
echo ":</b> ";
glossary_print_entry_definition($entry);
glossary_print_entry_lower_section($course, $cm, $glossary, $entry,$mode,$hook,$printicons);
echo ' ';
$return = glossary_print_entry_ratings($course, $entry, $ratings);
echo "</td>";
echo "</TR>";
return $return;
}
function glossary_print_entry_continuous($course, $cm, $glossary, $entry,$mode="",$hook="",$printicons=1) {
function glossary_print_entry_continuous($course, $cm, $glossary, $entry,$mode="",$hook="",$printicons=1, $ratings = NULL) {
global $THEME, $USER;
$return = false;
if ($entry) {
glossary_print_entry_approval($cm, $entry, $mode);
glossary_print_entry_attachment($entry,"html","right");
@@ -579,7 +667,9 @@ function glossary_print_entry_continuous($course, $cm, $glossary, $entry,$mode="
$icons = glossary_print_entry_icons($course, $cm, $glossary, $entry, $mode, $hook,"html");
echo "($icons)";
}
$return = glossary_print_entry_ratings($course, $entry, $ratings);
}
return $return;
}
function glossary_search_entries($searchterms, $glossary, $includedefinition) {
@@ -599,8 +689,8 @@ function glossary_search_entries($searchterms, $glossary, $includedefinition) {
$onlyvisibletable = "";
}
/// Some differences in syntax for PostgreSQL
if ($CFG->dbtype == "postgres7") {
/// Some differences in syntax for entrygreSQL
if ($CFG->dbtype == "entrygres7") {
$LIKE = "ILIKE"; // case-insensitive
$NOTLIKE = "NOT ILIKE"; // case-insensitive
$REGEXP = "~*";
@@ -1274,6 +1364,34 @@ function glossary_print_comment($course, $cm, $glossary, $entry, $comment) {
echo "</td></tr></table>";
}
function glossary_print_entry_ratings($course, $entry, $ratings = NULL) {
global $USER;
$ratingsmenuused = false;
if (!empty($ratings) and !empty($USER->id)) {
$useratings = true;
if ($ratings->assesstimestart and $ratings->assesstimefinish) {
if ($entry->timecreated < $ratings->assesstimestart or $entry->timecreated > $ratings->assesstimefinish) {
$useratings = false;
}
}
if ($useratings) {
if (isteacher($course->id)) {
glossary_print_ratings_mean($entry->id, $ratings->scale);
if ($USER->id != $entry->userid) {
glossary_print_rating_menu($entry->id, $USER->id, $ratings->scale);
$ratingsmenuused = true;
}
} else if ($USER->id == $entry->userid) {
glossary_print_ratings_mean($entry->id, $ratings->scale);
} else if (!empty($ratings->allow) ) {
glossary_print_rating_menu($entry->id, $USER->id, $ratings->scale);
$ratingsmenuused = true;
}
}
}
return $ratingsmenuused;
}
function glossary_print_dynaentry($courseid, $entries, $displayformat = -1) {
global $THEME, $USER;
@@ -1314,7 +1432,7 @@ global $CFG;
$status = fwrite ($h,glossary_start_tag("INFO",1,true));
fwrite ($h,glossary_full_tag("NAME",2,false,$glossary->name));
fwrite ($h,glossary_full_tag("INTRO",2,false,$glossary->intro));
fwrite ($h,glossary_full_tag("STUDENTCANPOST",2,false,$glossary->studentcanpost));
fwrite ($h,glossary_full_tag("STUDENTCANentry",2,false,$glossary->studentcanentry));
fwrite ($h,glossary_full_tag("ALLOWDUPLICATEDENTRIES",2,false,$glossary->allowduplicatedentries));
fwrite ($h,glossary_full_tag("SHOWSPECIAL",2,false,$glossary->showspecial));
fwrite ($h,glossary_full_tag("SHOWALPHABET",2,false,$glossary->showalphabet));
@@ -1507,4 +1625,172 @@ function glossary_check_dir_exists($dir,$create=false) {
}
return $status;
}
/*
* Adding grading functions
*/
function glossary_get_ratings($entryid, $sort="u.firstname ASC") {
/// Returns a list of ratings for a particular entry - sorted.
global $CFG;
return get_records_sql("SELECT u.*, r.rating, r.time
FROM {$CFG->prefix}glossary_ratings r,
{$CFG->prefix}user u
WHERE r.entryid = '$entryid'
AND r.userid = u.id
ORDER BY $sort");
}
function glossary_get_user_grades($glossaryid) {
/// Get all user grades for a glossary
global $CFG;
return get_records_sql("SELECT r.id, e.userid, r.rating
FROM {$CFG->prefix}glossary_entries e,
{$CFG->prefix}glossary_ratings r
WHERE e.glossaryid = '$glossaryid'
AND r.entryid = e.id
ORDER by e.userid ");
}
function glossary_count_unrated_entries($glossaryid, $userid) {
// How many unrated entries are in the given glossary for a given user?
global $CFG;
if ($entries = get_record_sql("SELECT count(*) as num
FROM {$CFG->prefix}glossary_entries
WHERE glossaryid = '$glossaryid'
AND userid <> '$userid' ")) {
if ($rated = get_record_sql("SELECT count(*) as num
FROM {$CFG->prefix}glossary_entries e,
{$CFG->prefix}glossary_ratings r
WHERE e.glossaryid = '$glossaryid'
AND e.id = r.entryid
AND r.userid = '$userid'")) {
$difference = $entries->num - $rated->num;
if ($difference > 0) {
return $difference;
} else {
return 0; // Just in case there was a counting error
}
} else {
return $entries->num;
}
} else {
return 0;
}
}
function glossary_print_ratings_mean($entryid, $scale) {
/// Print the multiple ratings on a entry given to the current user by others.
/// Scale is an array of ratings
static $strrate;
$mean = glossary_get_ratings_mean($entryid, $scale);
if ($mean !== "") {
if (empty($strratings)) {
$strratings = get_string("ratings", "glossary");
}
echo "$strratings: ";
link_to_popup_window ("/mod/glossary/report.php?id=$entryid", "ratings", $mean, 400, 600);
}
}
function glossary_get_ratings_mean($entryid, $scale, $ratings=NULL) {
/// Return the mean rating of a entry given to the current user by others.
/// Scale is an array of possible ratings in the scale
/// Ratings is an optional simple array of actual ratings (just integers)
if (!$ratings) {
$ratings = array();
if ($rates = get_records("glossary_ratings", "entryid", $entryid)) {
foreach ($rates as $rate) {
$ratings[] = $rate->rating;
}
}
}
$count = count($ratings);
if ($count == 0) {
return "";
} else if ($count == 1) {
return $scale[$ratings[0]];
} else {
$total = 0;
foreach ($ratings as $rating) {
$total += $rating;
}
$mean = round( ((float)$total/(float)$count) + 0.001); // Little fudge factor so that 0.5 goes UP
if (isset($scale[$mean])) {
return $scale[$mean]." ($count)";
} else {
return "$mean ($count)"; // Should never happen, hopefully
}
}
}
function glossary_get_ratings_summary($entryid, $scale, $ratings=NULL) {
/// Return a summary of entry ratings given to the current user by others.
/// Scale is an array of possible ratings in the scale
/// Ratings is an optional simple array of actual ratings (just integers)
if (!$ratings) {
$ratings = array();
if ($rates = get_records("glossary_ratings", "entryid", $entryid)) {
foreach ($rates as $rate) {
$rating[] = $rate->rating;
}
}
}
if (!$count = count($ratings)) {
return "";
}
foreach ($scale as $key => $scaleitem) {
$sumrating[$key] = 0;
}
foreach ($ratings as $rating) {
$sumrating[$rating]++;
}
$summary = "";
foreach ($scale as $key => $scaleitem) {
$summary = $sumrating[$key].$summary;
if ($key > 1) {
$summary = "/$summary";
}
}
return $summary;
}
function glossary_print_rating_menu($entryid, $userid, $scale) {
/// Print the menu of ratings as part of a larger form.
/// If the entry has already been - set that value.
/// Scale is an array of ratings
static $strrate;
if (!$rating = get_record("glossary_ratings", "userid", $userid, "entryid", $entryid)) {
$rating->rating = 0;
}
if (empty($strrate)) {
$strrate = get_string("rate", "glossary");
}
choose_from_menu($scale, $entryid, $rating->rating, "$strrate...");
}
?>
+77
View File
@@ -322,6 +322,83 @@ if (!$mainglossary or $mainglossary->id == $form->instance ) {
</select> <?php helpbutton("shows", get_string("showall", "glossary"), "glossary") ?>
</TD>
</TR>
<tr>
<td align=right valign=top><p><b><?php print_string("allowratings", "glossary") ?>:</b></p></td>
<td>
<?php
echo "<script>";
echo " var subitemstime = ['startday','startmonth','startyear','starthour', 'startminute',".
"'finishday','finishmonth','finishyear','finishhour','finishminute'];";
echo " var subitemsall = ['assessed', 'ratingtime', 'scale', 'startday','startmonth','startyear','starthour', 'startminute',".
"'finishday','finishmonth','finishyear','finishhour','finishminute'];";
echo "</script>";
echo "<input name=\"userating\" type=checkbox value=1 ";
echo " onclick=\"return lockoptions('form','userating', subitemsall)\" ";
if ($form->assessed) {
echo " checked ";
}
echo ">";
echo get_string("ratingsuse", "glossary").":";
echo "<br />";
// The odd order below was to maintain backward compatibility
unset($options);
$options[2] = get_string("ratingonlyteachers", "glossary", moodle_strtolower($course->teachers));
$options[1] = get_string("ratingeveryone", "glossary");
echo get_string("users").":";
choose_from_menu($options, "assessed", $form->assessed, "");
echo "<br />";
echo get_string("grade").":";
print_grade_menu($course->id, "scale", $form->scale, false);
echo "<br />";
echo "<input name=\"ratingtime\" type=checkbox value=1 ";
echo " onclick=\"return lockoptions('form','ratingtime', subitemstime)\" ";
if ($form->assesstimestart and $form->assesstimefinish and $form->assessed) {
$form->ratingtime = 1;
echo " checked ";
}
echo ">";
print_string("ratingtime", "glossary");
echo "<table align=left><tr><td align=right nowrap>";
echo get_string("from").":";
print_date_selector("startday", "startmonth", "startyear", $form->assesstimestart);
print_time_selector("starthour", "startminute", $form->assesstimestart);
echo "<br />";
echo get_string("to").":";
print_date_selector("finishday", "finishmonth", "finishyear", $form->assesstimefinish);
print_time_selector("finishhour", "finishminute", $form->assesstimefinish);
echo "<br />";
echo "</td></tr></table>";
echo "<input type=\"hidden\" name=\"hratingtime\" value=0>";
echo "<input type=\"hidden\" name=\"hassessed\" value=0>";
echo "<input type=\"hidden\" name=\"hscale\" value=0>";
echo "<input type=\"hidden\" name=\"hstartday\" value=0>";
echo "<input type=\"hidden\" name=\"hstartmonth\" value=0>";
echo "<input type=\"hidden\" name=\"hstartyear\" value=0>";
echo "<input type=\"hidden\" name=\"hstarthour\" value=0>";
echo "<input type=\"hidden\" name=\"hstartminute\" value=0>";
echo "<input type=\"hidden\" name=\"hfinishday\" value=0>";
echo "<input type=\"hidden\" name=\"hfinishmonth\" value=0>";
echo "<input type=\"hidden\" name=\"hfinishyear\" value=0>";
echo "<input type=\"hidden\" name=\"hfinishhour\" value=0>";
echo "<input type=\"hidden\" name=\"hfinishminute\" value=0>";
echo "<script>";
echo "lockoptions('form','userating', subitemsall);";
echo "</script>";
if (empty($form->ratingtime)) {
echo "<script>";
echo "lockoptions('form','ratingtime', subitemstime);";
echo "</script>";
}
?>
</td>
</tr>
</TABLE>
<!-- These hidden variables are always the same -->
<INPUT type="hidden" name=course value="<?php p($form->course) ?>">
+53
View File
@@ -0,0 +1,53 @@
<?PHP
// Collect ratings, store them, then return to where we came from
require_once("../../config.php");
require_once("lib.php");
if (isguest()) {
error("Guests are not allowed to rate entries.", $_SERVER["HTTP_REFERER"]);
}
require_variable($id); // The course these ratings are part of
if (! $course = get_record("course", "id", $id)) {
error("Course ID was incorrect");
}
require_login($course->id);
if ($data = data_submitted("$CFG->wwwroot/mod/glossary/view.php")) { // form submitted
foreach ($data as $entry => $rating) {
if ($entry == "id") {
continue;
}
if ($oldrating = get_record("glossary_ratings", "userid", $USER->id, "entryid", $entry)) {
if ($rating != $oldrating->rating) {
$oldrating->rating = $rating;
$oldrating->time = time();
if (! update_record("glossary_ratings", $oldrating)) {
error("Could not update an old rating ($entry = $rating)");
}
}
} else if ($rating) {
unset($newrating);
$newrating->userid = $USER->id;
$newrating->time = time();
$newrating->entryid = $entry;
$newrating->rating = $rating;
if (! insert_record("glossary_ratings", $newrating)) {
error("Could not insert a new rating ($entry = $rating)");
}
}
}
redirect($_SERVER["HTTP_REFERER"], get_string("ratingssaved", "glossary"));
} else {
error("This page was not accessed correctly");
}
?>
+68
View File
@@ -0,0 +1,68 @@
<?PHP
// For a given entry, shows a report of all the ratings it has
require_once("../../config.php");
require_once("lib.php");
require_variable($id);
global $USER;
if (! $entry = get_record("glossary_entries", "id", $id)) {
error("Entry ID was incorrect");
}
if (! $glossary = get_record("glossary", "id", $entry->glossaryid)) {
error("Glossary ID was incorrect");
}
if (! $course = get_record("course", "id", $glossary->course)) {
error("Course ID was incorrect");
}
if (!isteacher($course->id) and $USER->id != $entry->userid) {
error("You can only look at results for your own entries");
}
if (!isset($sort)) {
$sort = "r.time";
}
$scalemenu = make_grades_menu($glossary->scale);
$strratings = get_string("ratings", "glossary");
$strrating = get_string("rating", "glossary");
$strname = get_string("name");
$strtime = get_string("time");
print_header("$strratings: $entry->subject");
if (!$ratings = glossary_get_ratings($entry->id, $sort)) {
error("No ratings for this entry: \"$entry->subject\"");
} else {
echo "<table border=0 cellpadding=3 cellspacing=3 class=generalbox width=100%>";
echo "<tr>";
echo "<th>&nbsp;</th>";
echo "<th><a href=report.php?id=$entry->id&sort=u.firstname>$strname</a>";
echo "<th width=100%><a href=report.php?id=$entry->id&sort=r.rating>$strrating</a>";
echo "<th><a href=report.php?id=$entry->id&sort=r.time>$strtime</a>";
foreach ($ratings as $rating) {
if (isteacher($glossary->course, $rating->id)) {
echo "<tr bgcolor=\"$THEME->cellcontent2\">";
} else {
echo "<tr bgcolor=\"$THEME->cellcontent\">";
}
echo "<td>";
print_user_picture($rating->id, $glossary->course, $rating->picture);
echo "<td nowrap><p><font size=-1>$rating->firstname $rating->lastname</p>";
echo "<td nowrap align=center><p><font size=-1>".$scalemenu[$rating->rating]."</p>";
echo "<td nowrap align=center><p><font size=-1>".userdate($rating->time)."</p>";
echo "</tr>\n";
}
echo "</table>";
echo "<br />";
}
close_window_button();
?>
+5
View File
@@ -63,6 +63,11 @@
$glossary->timecreated = backup_todb($info['MOD']['#']['TIMECREATED']['0']['#']);
$glossary->timemodified = backup_todb($info['MOD']['#']['TIMEMODIFIED']['0']['#']);
$glossary->assessed = backup_todb($info['MOD']['#']['ASSESSED']['0']['#']);
$glossary->assesstimestart = backup_todb($info['MOD']['#']['ASSESSTIMESTART']['0']['#']);
$glossary->assesstimefinish = backup_todb($info['MOD']['#']['ASSESSTIMEFINISH']['0']['#']);
$glossary->scale = backup_todb($info['MOD']['#']['SCALE']['0']['#']);
//The structure is equal to the db, so insert the glossary
$newid = insert_record ("glossary",$glossary);
+1 -1
View File
@@ -5,7 +5,7 @@
/// This fragment is called by moodle_needs_upgrading() and /admin/index.php
/////////////////////////////////////////////////////////////////////////////////
$module->version = 2003111800; // The current module version (Date: YYYYMMDDXX)
$module->version = 2003112101; // The current module version (Date: YYYYMMDDXX)
$module->cron = 0; // Period for cron to check this module (secs)
$release = "0.5 development"; // User-friendly version number
+33 -2
View File
@@ -2,6 +2,7 @@
/// This page prints a particular instance of glossary
require_once("../../config.php");
require_once("lib.php");
global $CFG, $THEME, $USER;
$debug = 0;
$CFG->startpagetime = microtime();
@@ -40,7 +41,6 @@
}
/// setting the defaut number of entries per page if not set
global $CFG, $THEME, $USER;
if ( !$entriesbypage = $glossary->entbypage ) {
$entriesbypage = $CFG->glossary_entbypage;
@@ -275,6 +275,23 @@
}
echo $paging;
$ratings = NULL;
$ratingsmenuused = false;
if ($glossary->assessed and !empty($USER->id)) {
if ($ratings->scale = make_grades_menu($glossary->scale)) {
$ratings->assesstimestart = $glossary->assesstimestart;
$ratings->assesstimefinish = $glossary->assesstimefinish;
if ($glossary->assessed == 2 and !isteacher($course->id)) {
$ratings->allow = false;
} else {
$ratings->allow = true;
}
echo "<form name=form method=post action=rate.php>";
echo "<input type=hidden name=id value=\"$course->id\">";
}
}
foreach ($allentries as $entry) {
/// Setting the pivot for the current entry
$pivot = $entry->pivot;
@@ -383,7 +400,9 @@
}
/// and finally print the entry.
glossary_print_entry($course, $cm, $glossary, $entry, $mode, $hook,1,$displayformat);
if ( glossary_print_entry($course, $cm, $glossary, $entry, $mode, $hook,1,$displayformat,$ratings) ) {
$ratingsmenuused = true;
}
$entriesshown++;
}
@@ -399,6 +418,18 @@
if ( !$entriesshown ) {
print_simple_box('<center>' . get_string("noentries","glossary") . '</center>',"center","95%");
}
if ($ratingsmenuused) {
echo "<center><input type=\"submit\" value=\"".get_string("sendinratings", "glossary")."\">";
if ($glossary->scale < 0) {
if ($scale = get_record("scale", "id", abs($glossary->scale))) {
print_scale_menu_helpbutton($course->id, $scale );
}
}
echo "</center>";
echo "</form>";
}
if ( $paging ) {
echo "<hr />$paging";
}