MDL-21676 user_picture refactoring, reenabling email requirement - towards Gravatar support

This commit is contained in:
Petr Skoda
2010-07-04 18:36:34 +00:00
parent 9092c96eda
commit 3a11c09f5b
24 changed files with 185 additions and 156 deletions
+2 -1
View File
@@ -80,7 +80,8 @@ if ($sort == 'firstname' or $sort == 'lastname') {
$orderby = "cl.$sort $dir";
}
$sql = "SELECT u.id, u.firstname, u.lastname, u.picture, u.imagealt,
$ufields = user_picture::fields('u');
$sql = "SELECT $ufields,
cl.timemodified, cl.plugin, cl.name, cl.value, cl.oldvalue
FROM {config_log} cl
JOIN {user} u ON u.id = cl.userid
+3 -3
View File
@@ -32,11 +32,11 @@ class block_messages extends block_base {
$action = null; //this was using popup_action() but popping up a fullsize window seems wrong
$this->content->footer = $OUTPUT->action_link($link, get_string('messages', 'message'), $action);
$users = $DB->get_records_sql("SELECT m.useridfrom AS id, COUNT(m.useridfrom) AS count,
u.firstname, u.lastname, u.picture, u.imagealt, u.lastaccess
$ufields = user_picture::fields('u', array('lastaccess'));
$users = $DB->get_records_sql("SELECT $ufields, COUNT(m.useridfrom) AS count
FROM {user} u, {message} m
WHERE m.useridto = ? AND u.id = m.useridfrom
GROUP BY m.useridfrom, u.firstname,u.lastname,u.picture,u.lastaccess,u.imagealt", array($USER->id));
GROUP BY $ufields", array($USER->id));
//Now, we have in users, the list of users to show
+1 -1
View File
@@ -54,7 +54,7 @@ class block_online_users extends block_base {
$params['currentgroup'] = $currentgroup;
}
$userfields = user_picture::fields('u').', username';
$userfields = user_picture::fields('u', array('username'));
if ($this->page->course->id == SITEID) { // Site-level
$sql = "SELECT $userfields, MAX(u.lastaccess) AS lastaccess
+30 -26
View File
@@ -19,7 +19,7 @@
* Comment is helper class to add/delete comments anywhere in moodle
*
* @package comment
* @copyright 2010 Dongsheng Cai <[email protected]>
* @copyright 2010 Dongsheng Cai <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
@@ -107,7 +107,7 @@ class comment {
} else {
$this->cid = uniqid();
}
// setup context
if (!empty($options->context)) {
$this->context = $options->context;
@@ -132,7 +132,7 @@ class comment {
if (!empty($options->pluginname)) {
$this->pluginname = $options->pluginname;
}
// setup coursemodule
if (!empty($options->cm)) {
$this->cm = $options->cm;
@@ -403,34 +403,38 @@ EOD;
$this->page = $page;
$params = array();
$start = $page * $CFG->commentsperpage;
$sql = "SELECT c.id, c.userid, c.content, c.format, c.timecreated, u.picture, u.imagealt, u.username, u.firstname, u.lastname
FROM {comments} c, {user} u WHERE u.id=c.userid AND c.contextid=? AND c.commentarea=? AND c.itemid=?
ORDER BY c.timecreated DESC";
$params[] = $this->contextid;
$params[] = $this->commentarea;
$params[] = $this->itemid;
$ufields = user_picture::fields('u');
$sql = "SELECT $ufields, c.id AS cid, c.content AS c.content, 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
ORDER BY c.timecreated DESC";
$params['contextid'] = $this->contextid;
$params['commentarea'] = $this->commentarea;
$params['itemid'] = $this->itemid;
$comments = array();
$candelete = has_capability('moodle/comment:delete', $this->context);
if ($records = $DB->get_records_sql($sql, $params, $start, $CFG->commentsperpage)) {
foreach ($records as &$c) {
$url = $CFG->httpswwwroot.'/user/view.php?id='.$c->userid.'&amp;course='.$this->courseid;
$c->username = '<a href="'.$url.'">'.fullname($c).'</a>';
$c->time = userdate($c->timecreated, get_string('strftimerecent', 'langconfig'));
$user = new stdclass;
$user->id = $c->userid;
$user->picture = $c->picture;
$user->firstname = $c->firstname;
$user->lastname = $c->lastname;
$user->imagealt = $c->imagealt;
$c->content = format_text($c->content, $c->format);
$c->avatar = $OUTPUT->user_picture($user, array('size'=>18));
if (($USER->id == $c->userid) || !empty($candelete)) {
$c->delete = true;
}
$comments[] = $c;
$rs = $DB->get_recordset_sql($sql, $params, $start, $CFG->commentsperpage);
foreach ($records as $u) {
$c = new object();
$c->id = $u->cid;
$c->content = $u->ccontent;
$c->format = $u->cformat;
$c->timecreated = $u->ctimecreated;
$url = $CFG->httpswwwroot.'/user/view.php?id='.$c->id.'&amp;course='.$this->courseid;
$c->username = '<a href="'.$url.'">'.fullname($u).'</a>';
$c->time = userdate($c->timecreated, get_string('strftimerecent', 'langconfig'));
$c->content = format_text($c->content, $c->format);
$c->avatar = $OUTPUT->user_picture($u, array('size'=>18));
if (($USER->id == $u->id) || !empty($candelete)) {
$c->delete = true;
}
$comments[] = $c;
}
$rs->close();
if (!empty($this->plugintype)) {
// moodle module will filter comments
$comments = plugin_callback($this->plugintype, $this->pluginname, FEATURE_COMMENT, 'display', array($comments, $this->args), $comments);
+1 -1
View File
@@ -374,7 +374,7 @@ foreach ($users as $user) {
$picture = $OUTPUT->user_picture($user, array('courseid'=>$course->id));
if ($user->lastseen) {
$strlastaccess = format_time(time() - $user->lastaccess);
$strlastaccess = userdate($user->lastseen);
} else {
$strlastaccess = get_string('never');
}
+5 -4
View File
@@ -340,7 +340,8 @@ class grade_report_grader extends grade_report {
// the MAX() magic is required in order to please PG
$sort = "MAX(g.finalgrade) $this->sortorder";
$sql = "SELECT u.id, u.firstname, u.lastname, u.imagealt, u.picture, u.idnumber
$ufields = user_picture::fields('u', array('idnumber'));
$sql = "SELECT $ufields
FROM {user} u
JOIN {role_assignments} ra ON ra.userid = u.id
$this->groupsql
@@ -348,7 +349,7 @@ class grade_report_grader extends grade_report {
WHERE ra.roleid $usql AND u.deleted = 0
$this->groupwheresql
AND ra.contextid ".get_related_contexts_string($this->context)."
GROUP BY u.id, u.firstname, u.lastname, u.imagealt, u.picture, u.idnumber
GROUP BY $ufields
ORDER BY $sort";
} else {
@@ -364,8 +365,8 @@ class grade_report_grader extends grade_report {
$params = array_merge($gbrparams, $this->groupwheresql_params);
$userfields = user_picture::fields('u');
$sql = "SELECT DISTINCT $userfields, u.idnumber
$userfields = user_picture::fields('u', array('idnumber'));
$sql = "SELECT DISTINCT $userfields
FROM {user} u
JOIN {role_assignments} ra ON u.id = ra.userid
$this->groupsql
+3 -3
View File
@@ -2132,7 +2132,7 @@ function print_header($title='', $heading='', $navigation='', $focus='',
$PAGE->set_title($title);
$PAGE->set_heading($heading);
$PAGE->set_cacheable($cache);
$PAGE->set_cacheable($cache);
if ($button == '') {
$button = '&nbsp;';
}
@@ -2197,7 +2197,7 @@ function print_header_simple($title='', $heading='', $navigation='', $focus='',
}
$PAGE->set_title($title);
$PAGE->set_heading($heading);
$PAGE->set_heading($heading);
$PAGE->set_cacheable(true);
$PAGE->set_button($button);
@@ -2663,7 +2663,7 @@ function print_file_picture($path, $courseid=0, $height='', $width='', $link='',
*
* @global object
* @global object
* @param mixed $user Should be a $user object with at least fields id, picture, imagealt, firstname, lastname
* @param mixed $user Should be a $user object with at least fields id, picture, imagealt, firstname, lastname, email
* If any of these are missing, or if a userid is passed, the the database is queried. Avoid this
* if at all possible, particularly for reports. It is very bad for performance.
* @param int $courseid The course id. Used when constructing the link to the user's profile.
+27 -19
View File
@@ -98,13 +98,12 @@ class file_picker implements renderable {
*/
class user_picture implements renderable {
/**
* List of mandatory fields in user record here.
* @var string
* @var array List of mandatory fields in user record here. (do not include TEXT columns because it would break SELECT DISTINCT in MSSQL and ORACLE)
*/
const FIELDS = 'id,picture,firstname,lastname,imagealt'; //TODO: add email, but first update all places that call user_picture(), this is necessary for gravatar support
protected static $fields = array('id', 'picture', 'firstname', 'lastname', 'imagealt', 'email');
/**
* @var object $user A user object with at least fields all columns specified in FIELDS constant set.
* @var object $user A user object with at least fields all columns specified in $fields array constant set.
*/
public $user;
/**
@@ -143,18 +142,13 @@ class user_picture implements renderable {
public function __construct(stdClass $user) {
global $DB;
static $fields = null;
if (is_null($fields)) {
$fields = explode(',', self::FIELDS);
}
if (empty($user->id)) {
throw new coding_exception('User id is required when printing user avatar image.');
}
// only touch the DB if we are missing data and complain loudly...
$needrec = false;
foreach ($fields as $field) {
foreach (self::$fields as $field) {
if (!array_key_exists($field, $user)) {
$needrec = true;
debugging('Missing '.$field.' property in $user object, this is a performance problem that needs to be fixed by a developer. '
@@ -164,7 +158,7 @@ class user_picture implements renderable {
}
if ($needrec) {
$this->user = $DB->get_record('user', array('id'=>$user->id), self::FIELDS, MUST_EXIST);
$this->user = $DB->get_record('user', array('id'=>$user->id), self::fields(), MUST_EXIST);
} else {
$this->user = clone($user);
}
@@ -178,19 +172,33 @@ class user_picture implements renderable {
* id of the result record. Please note it has to be converted back to id before rendering.
*
* @param string $tableprefix name of database table prefix in query
* @param array $extrafields extra fields to be included in result (do not include TEXT columns because it would break SELECT DISTINCT in MSSQL and ORACLE)
* @param string $idalias alias of id field
* @return string
*/
public static function fields($tableprefix = '', $idalias = '') {
if ($tableprefix === '' and $idalias === '') {
return self::FIELDS;
public static function fields($tableprefix = '', array $extrafields = NULL, $idalias = 'id') {
if (!$tableprefix and !$extrafields and !$idalias) {
return implode(',', self::$fields);
}
$fields = explode(',', self::FIELDS);
foreach ($fields as $key=>$field) {
if ($field === 'id' and $idalias !== '') {
$field = "$field AS $idalias";
if ($tableprefix) {
$tableprefix .= '.';
}
$fields = array();
foreach (self::$fields as $field) {
if ($field === 'id' and $idalias and $idalias !== 'id') {
$fields[$field] = "$tableprefix.$field AS $idalias";
} else {
$fields[$field] = $tableprefix.$field;
}
}
// add extra fields if not already there
if ($extrafields) {
foreach ($extrafields as $e) {
if ($e === 'id' or isset($fields[$e])) {
continue;
}
$fields[$e] = $tableprefix.$e;
}
$fields[$key] = "$tableprefix.$field";
}
return implode(',', $fields);
}
+26 -31
View File
@@ -65,7 +65,7 @@ if (!isset($CFG->message_offline_time)) {
function message_print_contact_selector($countunreadtotal, $usergroup, $user1, $user2, $blockedusers, $onlinecontacts, $offlinecontacts, $strangers, $showcontactactionlinks) {
global $PAGE;
echo html_writer::start_tag('div', array('class'=>'contactselector mdl-align'));
//if 0 unread messages and they've requested unread messages then show contacts
@@ -128,7 +128,7 @@ function message_print_participants($context, $courseid, $contactselecturl=null,
global $DB, $USER;
$participants = get_enrolled_users($context);
echo '<table id="message_participants" class="boxaligncenter" cellspacing="2" cellpadding="0" border="0">';
if (!empty($titletodisplay)) {
@@ -166,15 +166,14 @@ function message_get_blocked_users($user1=null, &$user2=null) {
$user2->isblocked = false;
}
$userfields = user_picture::fields('u');
$blockeduserssql = "SELECT $userfields, u.lastaccess, count(m.id) as messagecount
FROM {message_contacts} mc
JOIN {user} u ON u.id = mc.contactid
LEFT OUTER JOIN {message} m ON m.useridfrom = mc.contactid AND m.useridto = :user1id1
WHERE mc.userid = :user1id2 AND mc.blocked = 1
GROUP BY u.id, u.firstname, u.lastname, u.picture,
u.imagealt, u.lastaccess
ORDER BY u.firstname ASC";
$userfields = user_picture::fields('u', array('lastaccess'));
$blockeduserssql = "SELECT $userfields, COUNT(m.id) AS messagecount
FROM {message_contacts} mc
JOIN {user} u ON u.id = mc.contactid
LEFT OUTER JOIN {message} m ON m.useridfrom = mc.contactid AND m.useridto = :user1id1
WHERE mc.userid = :user1id2 AND mc.blocked = 1
GROUP BY $userfields
ORDER BY u.firstname ASC";
$rs = $DB->get_recordset_sql($blockeduserssql, array('user1id1'=>$user1->id, 'user1id2'=>$user1->id));
$blockedusers = array();
@@ -243,17 +242,16 @@ function message_get_contacts($user1=null, &$user2=null) {
// people who are not in our contactlist but have sent us a message
$strangers = array();
$userfields = user_picture::fields('u');
$userfields = user_picture::fields('u', array('lastaccess'));
// get all in our contactlist who are not blocked in our contact list
// and count messages we have waiting from each of them
$contactsql = "SELECT $userfields, u.lastaccess, count(m.id) as messagecount
$contactsql = "SELECT $userfields, COUNT(m.id) AS messagecount
FROM {message_contacts} mc
JOIN {user} u ON u.id = mc.contactid
LEFT OUTER JOIN {message} m ON m.useridfrom = mc.contactid AND m.useridto = ?
WHERE mc.userid = ? AND mc.blocked = 0
GROUP BY u.id, u.firstname, u.lastname, u.picture,
u.imagealt, u.lastaccess
GROUP BY $userfields
ORDER BY u.firstname ASC";
if ($rs = $DB->get_recordset_sql($contactsql, array($user1->id, $user1->id))){
@@ -277,13 +275,12 @@ function message_get_contacts($user1=null, &$user2=null) {
// get messages from anyone who isn't in our contact list and count the number
// of messages we have from each of them
$strangersql = "SELECT $userfields, u.lastaccess, count(m.id) as messagecount
$strangersql = "SELECT $userfields, count(m.id) as messagecount
FROM {message} m
JOIN {user} u ON u.id = m.useridfrom
LEFT OUTER JOIN {message_contacts} mc ON mc.contactid = m.useridfrom AND mc.userid = m.useridto
WHERE mc.id IS NULL AND m.useridto = ?
GROUP BY u.id, u.firstname, u.lastname, u.picture,
u.imagealt, u.lastaccess
GROUP BY $userfields
ORDER BY u.firstname ASC";
if($rs = $DB->get_recordset_sql($strangersql, array($USER->id))){
@@ -512,7 +509,7 @@ function message_print_search($advancedsearch = false, $user1=null) {
global $USER, $PAGE, $OUTPUT;
$frm = data_submitted();
$doingsearch = false;
if ($frm) {
$doingsearch = !empty($frm->combinedsubmit) || !empty($frm->keywords) || (!empty($frm->personsubmit) and !empty($frm->name));
@@ -528,7 +525,7 @@ function message_print_search($advancedsearch = false, $user1=null) {
if ($doingsearch) {
if ($advancedsearch) {
$messagesearch = '';
if (!empty($frm->keywords)) {
$messagesearch = $frm->keywords;
@@ -967,7 +964,7 @@ function message_contact_link($userid, $linktype='add', $return=false, $script=n
$safealttext = s($string);
$safestring = '';
if (!empty($text)) {
if (!empty($text)) {
$safestring = $safealttext;
}
@@ -1095,32 +1092,30 @@ function message_search_users($courseid, $searchtext, $sort='', $exceptions='')
$order = '';
}
$select = 'u.deleted = \'0\' AND u.confirmed = \'1\'';
$fields = 'u.id, u.firstname, u.lastname, u.picture, u.imagealt, mc.id as contactlistid, mc.blocked';
$ufields = user_picture::fields('u');
if (!$courseid or $courseid == SITEID) {
$params = array($USER->id, "%$searchtext%");
return $DB->get_records_sql("SELECT $fields
return $DB->get_records_sql("SELECT $ufields, mc.id as contactlistid, mc.blocked
FROM {user} u
LEFT JOIN {message_contacts} mc
ON mc.contactid = u.id AND mc.userid = ?
WHERE $select
WHERE u.deleted = '0' AND u.confirmed = '1'
AND ($fullname $LIKE ?)
$except
$order", $params);
} else {
//TODO: add enabled enrolment join here (skodak)
$context = get_context_instance(CONTEXT_COURSE, $courseid);
$contextlists = get_related_contexts_string($context);
// everyone who has a role assignement in this course or higher
$params = array($USER->id, "%$searchtext%");
$users = $DB->get_records_sql("SELECT $fields
FROM {user} u
$users = $DB->get_records_sql("SELECT $ufields,
FROM {user} u, mc.id as contactlistid, mc.blocked
JOIN {role_assignments} ra ON ra.userid = u.id
LEFT JOIN {message_contacts} mc
ON mc.contactid = u.id AND mc.userid = ?
WHERE $select
WHERE u.deleted = '0' AND u.confirmed = '1'
AND ra.contextid $contextlists
AND ($fullname $LIKE ?)
$except
@@ -1390,7 +1385,7 @@ function message_get_history($user1, $user2, $limitnum=0) {
ksort($messages);
$messages = array_slice($messages, count($messages)-$limitnum, $limitnum, true);
}
return $messages;
}
+6 -4
View File
@@ -917,10 +917,11 @@ class assignment_base {
$nextid = 0;
if ($users) {
$select = 'SELECT u.id, u.firstname, u.lastname, u.picture, u.imagealt,
$userfields = user_picture::fields('u', array('lastaccess'));
$select = "SELECT $userfields,
s.id AS submissionid, s.grade, s.submissioncomment,
s.timemodified, s.timemarked,
COALESCE(SIGN(SIGN(s.timemarked) + SIGN(s.timemarked - s.timemodified)), 0) AS status ';
COALESCE(SIGN(SIGN(s.timemarked) + SIGN(s.timemarked - s.timemodified)), 0) AS status ";
$sql = 'FROM {user} u '.
'LEFT JOIN {assignment_submissions} s ON u.id = s.userid
AND s.assignment = '.$this->assignment->id.' '.
@@ -1178,10 +1179,11 @@ class assignment_base {
$sort = ' ORDER BY '.$sort;
}
$select = 'SELECT u.id, u.firstname, u.lastname, u.picture, u.imagealt,
$ufields = user_picture::fields('u');
$select = "SELECT $ufields,
s.id AS submissionid, s.grade, s.submissioncomment,
s.timemodified, s.timemarked,
COALESCE(SIGN(SIGN(s.timemarked) + SIGN(s.timemarked - s.timemodified)), 0) AS status ';
COALESCE(SIGN(SIGN(s.timemarked) + SIGN(s.timemarked - s.timemodified)), 0) AS status ";
$sql = 'FROM {user} u '.
'LEFT JOIN {assignment_submissions} s ON u.id = s.userid
AND s.assignment = '.$this->assignment->id.' '.
+8 -7
View File
@@ -539,11 +539,12 @@ function chat_get_users($chatid, $groupid=0, $groupingid=0) {
$groupingjoin = '';
}
return $DB->get_records_sql("SELECT
DISTINCT u.id, u.firstname, u.lastname, u.picture, c.lastmessageping, c.firstping, u.imagealt
FROM {chat_users} c JOIN {user} u ON u.id = c.userid $groupingjoin
WHERE c.chatid = :chatid $groupselect
ORDER BY c.firstping ASC", $params);
$ufields = user_picture::fields('u');
return $DB->get_records_sql("SELECT DISTINCT $ufields, c.lastmessageping, c.firstping
FROM {chat_users} c
JOIN {user} u ON u.id = c.userid $groupingjoin
WHERE c.chatid = :chatid $groupselect
ORDER BY c.firstping ASC", $params);
}
/**
@@ -888,7 +889,7 @@ function chat_format_message($message, $courseid, $currentuser, $chat_lastrow=NU
if (isset($users[$message->userid])) {
$user = $users[$message->userid];
} else if ($user = $DB->get_record('user', array('id'=>$message->userid), 'id,picture,firstname,lastname,imagealt')) {
} else if ($user = $DB->get_record('user', array('id'=>$message->userid), user_image::fields())) {
$users[$message->userid] = $user;
} else {
return NULL;
@@ -917,7 +918,7 @@ function chat_format_message_theme ($message, $courseid, $currentuser, $theme =
if (isset($users[$message->userid])) {
$sender = $users[$message->userid];
} else if ($sender = $DB->get_record('user', array('id'=>$message->userid), 'id,picture,firstname,lastname,imagealt')) {
} else if ($sender = $DB->get_record('user', array('id'=>$message->userid), user_picture::fields())) {
$users[$message->userid] = $sender;
} else {
return NULL;
+2 -2
View File
@@ -520,7 +520,7 @@ function choice_show_results($choice, $course, $cm, $allresponses, $forcepublish
if ($choice->showunanswered) {
echo "<td></td>";
}
foreach ($choice->option as $optionid => $optiontext) {
echo "<td align=\"center\" class=\"col$count count\">";
if ($choice->limitanswers) {
@@ -865,7 +865,7 @@ function choice_get_response_data($choice, $cm, $groupmode) {
/// First get all the users who have access here
/// To start with we assume they are all "unanswered" then move them later
$allresponses[0] = get_enrolled_users($context, 'mod/choice:choose', $currentgroup, 'u.id, u.picture, u.imagealt, u.firstname, u.lastname, u.idnumber', 'u.lastname ASC,u.firstname ASC');
$allresponses[0] = get_enrolled_users($context, 'mod/choice:choose', $currentgroup, user_picture::fields('u', array('idnumber')), 'u.lastname ASC,u.firstname ASC');
/// Get all the recorded responses for this choice
$rawresponses = $DB->get_records('choice_answers', array('choiceid' => $choice->id));
+3 -1
View File
@@ -305,7 +305,8 @@ function feedback_get_recent_mod_activity(&$activities, &$index, $timemodified,
$sqlargs = array();
$sql = " SELECT fk . * , fc . * , u.firstname, u.lastname, u.email, u.picture
//TODO: user user_picture::fields;
$sql = " SELECT fk . * , fc . * , u.firstname, u.lastname, u.email, u.picture, u.email
FROM {feedback_completed} fc
JOIN {feedback} fk ON fk.id = fc.feedback
JOIN {user} u ON u.id = fc.userid ";
@@ -369,6 +370,7 @@ function feedback_get_recent_mod_activity(&$activities, &$index, $timemodified,
$tmpactivity->content->feedbackid = $feedbackitem->id;
$tmpactivity->content->feedbackuserid = $feedbackitem->userid;
//TODO: add all necessary user fields, this is not enough for user_picture
$tmpactivity->user->userid = $feedbackitem->userid;
$tmpactivity->user->fullname = fullname($feedbackitem, $viewfullnames);
$tmpactivity->user->picture = $feedbackitem->picture;
+5 -4
View File
@@ -2014,7 +2014,8 @@ function forum_search_posts($searchterms, $courseid=0, $limitfrom=0, $limitnum=5
u.lastname,
u.email,
u.picture,
u.imagealt
u.imagealt,
u.email
FROM $fromsql
WHERE $selectsql
ORDER BY p.modified DESC";
@@ -5341,7 +5342,7 @@ function forum_print_posts_flat($course, &$cm, $forum, $discussion, $post, $mode
$postread = !empty($post->postread);
forum_print_post($post, $discussion, $forum, $cm, $course, $ownpost, $reply, $link,
forum_print_post($post, $discussion, $forum, $cm, $course, $ownpost, $reply, $link,
'', '', $postread, true, $forumtracked);
}
}
@@ -5374,7 +5375,7 @@ function forum_print_posts_threaded($course, &$cm, $forum, $discussion, $parent,
$postread = !empty($post->postread);
forum_print_post($post, $discussion, $forum, $cm, $course, $ownpost, $reply, $link,
forum_print_post($post, $discussion, $forum, $cm, $course, $ownpost, $reply, $link,
'', '', $postread, true, $forumtracked);
} else {
if (!forum_user_can_see_post($forum, $discussion, $post, NULL, $cm)) {
@@ -5481,7 +5482,7 @@ function forum_get_recent_mod_activity(&$activities, &$index, $timestart, $cours
if (!$posts = $DB->get_records_sql("SELECT p.*, f.type AS forumtype, d.forum, d.groupid,
d.timestart, d.timeend, d.userid AS duserid,
u.firstname, u.lastname, u.email, u.picture, u.imagealt
u.firstname, u.lastname, u.email, u.picture, u.imagealt, u.email
FROM {forum_posts} p
JOIN {forum_discussions} d ON d.id = p.discussion
JOIN {forum} f ON f.id = d.forum
+2 -1
View File
@@ -901,6 +901,7 @@ function quiz_get_recent_mod_activity(&$activities, &$index, $timestart,
$tmpactivity->user->fullname = fullname($attempt, $viewfullnames);
$tmpactivity->user->picture = $attempt->picture;
$tmpactivity->user->imagealt = $attempt->imagealt;
$tmpactivity->user->email = $attempt->email;
$activities[$index++] = $tmpactivity;
}
@@ -1654,7 +1655,7 @@ function quiz_extend_settings_navigation($settings, $quiznode) {
if (has_capability('mod/quiz:manage', $PAGE->cm->context)) {
$editnode = $quiznode->add(get_string('edit'), null, navigation_node::TYPE_CONTAINER, null, 'quizedit');
$url = new moodle_url('/mod/quiz/edit.php', array('cmid'=>$PAGE->cm->id));
$text = get_string("editinga", "moodle", get_string('modulename', 'quiz'));
$editnode->add($text, $url, navigation_node::TYPE_SETTING, null, 'edit', new pix_icon('t/edit', ''));
@@ -125,6 +125,7 @@ class quiz_report_overview_table extends table_sql {
$user->firstname = $attempt->firstname;
$user->imagealt = $attempt->imagealt;
$user->picture = $attempt->picture;
$user->email = $attempt->email;
return $OUTPUT->user_picture($user);
}
+1 -1
View File
@@ -214,7 +214,7 @@ class quiz_overview_report extends quiz_default_report {
}
$fields .='qa.uniqueid AS attemptuniqueid, qa.id AS attempt, ' .
'u.id AS userid, u.idnumber, u.firstname, u.lastname, u.picture, u.imagealt, '.
'u.id AS userid, u.idnumber, u.firstname, u.lastname, u.picture, u.imagealt, u.email, '.
'qa.sumgrades, qa.timefinish, qa.timestart, qa.timefinish - qa.timestart AS duration ';
// This part is the same for all cases - join users and quiz_attempts tables
@@ -80,6 +80,7 @@ class quiz_report_responses_table extends table_sql {
$user->firstname = $attempt->firstname;
$user->imagealt = $attempt->imagealt;
$user->picture = $attempt->picture;
$user->email = $attempt->email;
return $OUTPUT->user_picture($user);
}
+26 -25
View File
@@ -157,7 +157,7 @@
// We only want to show the checkbox to delete attempts
// if the user has permissions and if the report mode is showing attempts.
$candelete = has_capability('mod/scorm:deleteresponses',$contextmodule)
$candelete = has_capability('mod/scorm:deleteresponses',$contextmodule)
&& ($attemptsmode!= SCORM_REPORT_ATTEMPTS_STUDENTS_WITH_NO);
// select the students
$nostudents = false;
@@ -180,14 +180,14 @@
}
$allowedlist = join(',', array_keys($groupstudents));
}
if( !$nostudents ) {
// Now check if asked download of data
if ($download) {
$filename = clean_filename("$course->shortname ".format_string($scorm->name,true));
}
// Define table columns
$columns = array();
$headers = array();
@@ -224,21 +224,21 @@
} else {
$scoes = NULL;
}
if (!$download) {
$table = new flexible_table('mod-scorm-report');
$table->define_columns($columns);
$table->define_headers($headers);
$table->define_baseurl($reporturlwithdisplayoptions->out());
$table->sortable(true);
$table->collapsible(true);
$table->column_suppress('picture');
$table->column_suppress('fullname');
$table->column_suppress('idnumber');
$table->no_sorting('start');
$table->no_sorting('finish');
$table->no_sorting('score');
@@ -249,20 +249,20 @@
}
}
}
$table->column_class('picture', 'picture');
$table->column_class('fullname', 'bold');
$table->column_class('score', 'bold');
$table->set_attribute('cellspacing', '0');
$table->set_attribute('id', 'attempts');
$table->set_attribute('class', 'generaltable generalbox');
// Start working -- this is necessary as soon as the niceties are over
$table->setup();
} else if ($download =='ODS') {
require_once("$CFG->libdir/odslib.class.php");
$filename .= ".ods";
// Creating a workbook
$workbook = new MoodleODSWorkbook("-");
@@ -292,7 +292,7 @@
$formatg->set_color('green');
$formatg->set_align('center');
// Here starts workshhet headers
$colnum = 0;
foreach ($headers as $item) {
$myxls->write(0,$colnum,$item,$formatbc);
@@ -301,7 +301,7 @@
$rownum=1;
} else if ($download =='Excel') {
require_once("$CFG->libdir/excellib.class.php");
$filename .= ".xls";
// Creating a workbook
$workbook = new MoodleExcelWorkbook("-");
@@ -330,7 +330,7 @@
$formatg->set_bold(1);
$formatg->set_color('green');
$formatg->set_align('center');
$colnum = 0;
foreach ($headers as $item) {
$myxls->write(0,$colnum,$item,$formatbc);
@@ -349,8 +349,8 @@
// Construct the SQL
$select = 'SELECT DISTINCT '.$DB->sql_concat('u.id', '\'#\'', 'COALESCE(st.attempt, 0)').' AS uniqueid, ';
$select .= 'st.scormid AS scormid, st.attempt AS attempt, ' .
'u.id AS userid, u.idnumber, u.firstname, u.lastname, u.picture, u.imagealt ';
$select .= 'st.scormid AS scormid, st.attempt AS attempt, ' .
'u.id AS userid, u.idnumber, u.firstname, u.lastname, u.picture, u.imagealt, u.email ';
// This part is the same for all cases - join users and scorm_scoes_track tables
$from = 'FROM '.$CFG->prefix.'user u ';
@@ -369,12 +369,12 @@
$where = ' WHERE u.id IN (' .$allowedlist. ') AND (st.userid IS NOT NULL OR st.userid IS NULL)';
break;
}
$countsql = 'SELECT COUNT(DISTINCT('.$DB->sql_concat('u.id', '\'#\'', 'COALESCE(st.attempt, 0)').')) AS nbresults, ';
$countsql .= 'COUNT(DISTINCT('.$DB->sql_concat('u.id', '\'#\'','st.attempt').')) AS nbattempts, ';
$countsql .= 'COUNT(DISTINCT(u.id)) AS nbusers ';
$countsql .= $from.$where;
if (!$download) {
$sort = $table->get_sql_sort();
}
@@ -405,7 +405,7 @@
}
$table->pagesize($pagesize, $total);
echo '<div class="quizattemptcounts">';
if ( $count->nbresults == $count->nbattempts ) {
echo get_string('reportcountattempts','scorm', $count);
@@ -454,8 +454,9 @@
}
if (in_array('picture', $columns)){
$user = (object)array('id'=>$scouser->userid,
'picture'=>$scouser->picture,
'imagealt'=>$scouser->imagealt,
'picture'=>$scouser->picture,
'imagealt'=>$scouser->imagealt,
'email'=>$scouser->email,
'firstname'=>$scouser->firstname,
'lastname'=>$scouser->lastname);
$row[] = $OUTPUT->user_picture($user, array('courseid'=>$course->id));
@@ -480,7 +481,7 @@
else $row[] = userdate($timetracks->start);
if ($download =='ODS' || $download =='Excel' ) $row[] = userdate($timetracks->finish, get_string('strftimedatetime', 'langconfig'));
else $row[] = userdate($timetracks->finish);
$row[] = scorm_grade_user_attempt($scorm, $scouser->userid, $scouser->attempt);
}
// print out all scores of attempt
@@ -527,7 +528,7 @@
}
}
}
if (!$download) {
$table->add_data($row);
} else if ($download == 'Excel' or $download == 'ODS') {
+7 -4
View File
@@ -204,7 +204,7 @@ class workshop_manual_allocator implements workshop_allocator {
}
// this will hold the information needed to display user names and pictures
$userinfo = $DB->get_records_list('user', 'id', array_keys($participants), '', 'id,lastname,firstname,picture,imagealt');
$userinfo = $DB->get_records_list('user', 'id', array_keys($participants), '', user_picture::fields());
// load the participants' submissions
$submissions = $this->workshop->get_submissions(array_keys($participants));
@@ -216,6 +216,7 @@ class workshop_manual_allocator implements workshop_allocator {
$userinfo[$submission->authorid]->lastname = $submission->authorlastname;
$userinfo[$submission->authorid]->picture = $submission->authorpicture;
$userinfo[$submission->authorid]->imagealt = $submission->authorimagealt;
$userinfo[$submission->authorid]->email = $submission->authoremail;
}
}
@@ -224,7 +225,7 @@ class workshop_manual_allocator implements workshop_allocator {
if ($submissions) {
list($submissionids, $params) = $DB->get_in_or_equal(array_keys($submissions), SQL_PARAMS_NAMED);
$sql = "SELECT a.id AS assessmentid, a.submissionid,
r.id AS reviewerid, r.lastname, r.firstname, r.picture, r.imagealt,
r.id AS reviewerid, r.lastname, r.firstname, r.picture, r.imagealt, e.email,
s.id AS submissionid, s.authorid
FROM {workshop_assessments} a
JOIN {user} r ON (a.reviewerid = r.id)
@@ -239,6 +240,7 @@ class workshop_manual_allocator implements workshop_allocator {
$userinfo[$reviewer->reviewerid]->lastname = $reviewer->lastname;
$userinfo[$reviewer->reviewerid]->picture = $reviewer->picture;
$userinfo[$reviewer->reviewerid]->imagealt = $reviewer->imagealt;
$userinfo[$reviewer->reviewerid]->email = $reviewer->email;
}
}
}
@@ -251,7 +253,7 @@ class workshop_manual_allocator implements workshop_allocator {
$sql = "SELECT a.id AS assessmentid, a.submissionid,
u.id AS reviewerid,
s.id AS submissionid,
e.id AS revieweeid, e.lastname, e.firstname, e.picture, e.imagealt
e.id AS revieweeid, e.lastname, e.firstname, e.picture, e.imagealt, e.email
FROM {user} u
JOIN {workshop_assessments} a ON (a.reviewerid = u.id)
JOIN {workshop_submissions} s ON (a.submissionid = s.id)
@@ -266,6 +268,7 @@ class workshop_manual_allocator implements workshop_allocator {
$userinfo[$reviewee->revieweeid]->lastname = $reviewee->lastname;
$userinfo[$reviewee->revieweeid]->picture = $reviewee->picture;
$userinfo[$reviewee->revieweeid]->imagealt = $reviewee->imagealt;
$userinfo[$reviewee->revieweeid]->email = $reviewee->email;
}
}
}
@@ -340,7 +343,7 @@ class workshop_manual_allocator implements workshop_allocator {
$params['workshopid'] = $this->workshop->id;
$sql = "SELECT author.id AS authorid, author.firstname AS authorfirstname, author.lastname AS authorlastname,
author.picture AS authorpicture, author.imagealt AS authorimagealt,
author.picture AS authorpicture, author.imagealt AS authorimagealt, author.email AS authoremail,
s.id AS submissionid, s.title AS submissiontitle, s.grade AS submissiongrade,
a.id AS assessmentid, a.timecreated AS timeallocated, a.reviewerid,
reviewer.firstname AS reviewerfirstname, reviewer.lastname AS reviewerlastname,
+13 -9
View File
@@ -489,9 +489,9 @@ class workshop {
$sql = 'SELECT s.id, s.workshopid, s.example, s.authorid, s.timecreated, s.timemodified,
s.title, s.grade, s.gradeover, s.gradeoverby, s.published,
u.lastname AS authorlastname, u.firstname AS authorfirstname,
u.picture AS authorpicture, u.imagealt AS authorimagealt,
u.picture AS authorpicture, u.imagealt AS authorimagealt, u.email AS authoremail,
t.lastname AS overlastname, t.firstname AS overfirstname,
t.picture AS overpicture, t.imagealt AS overimagealt
t.picture AS overpicture, t.imagealt AS overimagealt, t.email AS overemail
FROM {workshop_submissions} s
INNER JOIN {user} u ON (s.authorid = u.id)
LEFT JOIN {user} t ON (s.gradeoverby = t.id)
@@ -526,7 +526,7 @@ class workshop {
// from other instances
$sql = 'SELECT s.*,
u.lastname AS authorlastname, u.firstname AS authorfirstname, u.id AS authorid,
u.picture AS authorpicture, u.imagealt AS authorimagealt
u.picture AS authorpicture, u.imagealt AS authorimagealt, u.email AS authoremail
FROM {workshop_submissions} s
INNER JOIN {user} u ON (s.authorid = u.id)
WHERE s.example = 0 AND s.workshopid = :workshopid AND s.id = :id';
@@ -548,7 +548,7 @@ class workshop {
}
$sql = 'SELECT s.*,
u.lastname AS authorlastname, u.firstname AS authorfirstname, u.id AS authorid,
u.picture AS authorpicture, u.imagealt AS authorimagealt
u.picture AS authorpicture, u.imagealt AS authorimagealt, u.email AS authoremail
FROM {workshop_submissions} s
INNER JOIN {user} u ON (s.authorid = u.id)
WHERE s.example = 0 AND s.workshopid = :workshopid AND s.authorid = :authorid';
@@ -567,7 +567,7 @@ class workshop {
$sql = "SELECT s.id, s.authorid, s.timecreated, s.timemodified,
s.title, s.grade, s.gradeover, COALESCE(s.gradeover,s.grade) AS finalgrade,
u.lastname AS authorlastname, u.firstname AS authorfirstname, u.id AS authorid,
u.picture AS authorpicture, u.imagealt AS authorimagealt
u.picture AS authorpicture, u.imagealt AS authorimagealt, u.email AS authoremail
FROM {workshop_submissions} s
INNER JOIN {user} u ON (s.authorid = u.id)
WHERE s.example = 0 AND s.workshopid = :workshopid AND s.published = 1
@@ -778,7 +778,7 @@ class workshop {
s.id AS submissionid, s.title AS submissiontitle, s.timecreated AS submissioncreated,
s.timemodified AS submissionmodified,
author.id AS authorid, author.firstname AS authorfirstname,author.lastname AS authorlastname,
author.picture AS authorpicture, author.imagealt AS authorimagealt
author.picture AS authorpicture, author.imagealt AS authorimagealt, author.email AS authoremail
FROM {workshop_assessments} a
INNER JOIN {user} reviewer ON (a.reviewerid = reviewer.id)
INNER JOIN {workshop_submissions} s ON (a.submissionid = s.id)
@@ -1219,7 +1219,7 @@ class workshop {
$params['workshopid1'] = $this->id;
$params['workshopid2'] = $this->id;
$sqlsort = $sortby . ' ' . $sorthow . ',u.lastname,u.firstname,u.id';
$sql = "SELECT u.id AS userid,u.firstname,u.lastname,u.picture,u.imagealt,
$sql = "SELECT u.id AS userid,u.firstname,u.lastname,u.picture,u.imagealt,u.email,
s.title AS submissiontitle, s.grade AS submissiongrade, ag.gradinggrade
FROM {user} u
LEFT JOIN {workshop_submissions} s ON (s.authorid = u.id AND s.workshopid = :workshopid1 AND s.example = 0)
@@ -1243,6 +1243,7 @@ class workshop {
$userinfo[$participant->userid]->lastname = $participant->lastname;
$userinfo[$participant->userid]->picture = $participant->picture;
$userinfo[$participant->userid]->imagealt = $participant->imagealt;
$userinfo[$participant->userid]->email = $participant->email;
}
}
@@ -1258,6 +1259,7 @@ class workshop {
$userinfo[$submission->gradeoverby]->lastname = $submission->overlastname;
$userinfo[$submission->gradeoverby]->picture = $submission->overpicture;
$userinfo[$submission->gradeoverby]->imagealt = $submission->overimagealt;
$userinfo[$submission->gradeoverby]->email = $submission->overemail;
}
}
@@ -1266,7 +1268,7 @@ class workshop {
if ($submissions) {
list($submissionids, $params) = $DB->get_in_or_equal(array_keys($submissions), SQL_PARAMS_NAMED);
$sql = "SELECT a.id AS assessmentid, a.submissionid, a.grade, a.gradinggrade, a.gradinggradeover, a.weight,
r.id AS reviewerid, r.lastname, r.firstname, r.picture, r.imagealt,
r.id AS reviewerid, r.lastname, r.firstname, r.picture, r.imagealt, r.email,
s.id AS submissionid, s.authorid
FROM {workshop_assessments} a
JOIN {user} r ON (a.reviewerid = r.id)
@@ -1282,6 +1284,7 @@ class workshop {
$userinfo[$reviewer->reviewerid]->lastname = $reviewer->lastname;
$userinfo[$reviewer->reviewerid]->picture = $reviewer->picture;
$userinfo[$reviewer->reviewerid]->imagealt = $reviewer->imagealt;
$userinfo[$reviewer->reviewerid]->email = $reviewer->email;
}
}
}
@@ -1293,7 +1296,7 @@ class workshop {
$params['workshopid'] = $this->id;
$sql = "SELECT a.id AS assessmentid, a.submissionid, a.grade, a.gradinggrade, a.gradinggradeover, a.reviewerid, a.weight,
s.id AS submissionid,
e.id AS authorid, e.lastname, e.firstname, e.picture, e.imagealt
e.id AS authorid, e.lastname, e.firstname, e.picture, e.imagealt, e.email
FROM {user} u
JOIN {workshop_assessments} a ON (a.reviewerid = u.id)
JOIN {workshop_submissions} s ON (a.submissionid = s.id AND s.example = 0)
@@ -1309,6 +1312,7 @@ class workshop {
$userinfo[$reviewee->authorid]->lastname = $reviewee->lastname;
$userinfo[$reviewee->authorid]->picture = $reviewee->picture;
$userinfo[$reviewee->authorid]->imagealt = $reviewee->imagealt;
$userinfo[$reviewee->authorid]->email = $reviewee->email;
}
}
}
+3 -1
View File
@@ -96,7 +96,7 @@ class mod_workshop_renderer extends plugin_renderer_base {
* Display a short summary of the submission
*
* The passed submission object must define at least: id, title, timecreated, timemodified,
* authorid, authorfirstname, authorlastname, authorpicture and authorimagealt. Optional
* authorid, authorfirstname, authorlastname, authorpicture, authorimagealt and email. Optional
* property is status (graded, notgraded).
*
* @param stdclass $submission The submission record
@@ -122,6 +122,7 @@ class mod_workshop_renderer extends plugin_renderer_base {
$author->lastname = $submission->authorlastname;
$author->picture = $submission->authorpicture;
$author->imagealt = $submission->authorimagealt;
$author->email = $submission->authoremail;
$userpic = $this->output->user_picture($author, array('courseid' => $this->page->course->id, 'size' => 35));
$userurl = new moodle_url('/user/view.php',
array('id' => $author->id, 'course' => $this->page->course->id));
@@ -180,6 +181,7 @@ class mod_workshop_renderer extends plugin_renderer_base {
$author->lastname = $submission->authorlastname;
$author->picture = $submission->authorpicture;
$author->imagealt = $submission->authorimagealt;
$author->email = $submission->authoremail;
$userpic = $this->output->user_picture($author, array('courseid' => $this->page->course->id, 'size' => 64));
$userurl = new moodle_url('/user/view.php',
array('id' => $author->id, 'course' => $this->page->course->id));
+2
View File
@@ -259,6 +259,7 @@ case workshop::PHASE_ASSESSMENT:
$submission->authorlastname = $assessment->authorlastname;
$submission->authorpicture = $assessment->authorpicture;
$submission->authorimagealt = $assessment->authorimagealt;
$submission->authoremail = $assessment->authoremail;
if (is_null($assessment->grade)) {
$class = ' notgraded';
$submission->status = 'notgraded';
@@ -342,6 +343,7 @@ case workshop::PHASE_EVALUATION:
$submission->authorlastname = $assessment->authorlastname;
$submission->authorpicture = $assessment->authorpicture;
$submission->authorimagealt = $assessment->authorimagealt;
$submission->authoremail = $assessment->authoremail;
if (is_null($assessment->grade)) {
$class = ' notgraded';
+7 -8
View File
@@ -174,7 +174,7 @@ class rating_manager {
*/
public function delete_ratings($options) {
global $DB;
if( !empty($options->ratingid) ) {
//delete a single rating
$DB->delete_records('rating', array('contextid'=>$options->contextid, 'id'=>$options->ratingid) );
@@ -207,9 +207,8 @@ class rating_manager {
$sortclause = "ORDER BY $options->sort";
}
$userfields = user_picture::fields('u','uid');
$sql = "SELECT r.id, r.rating, r.itemid, r.userid, r.timemodified,
$userfields
$userfields = user_picture::fields('u', null, 'uid');
$sql = "SELECT r.id, r.rating, r.itemid, r.userid, r.timemodified, $userfields
FROM {rating} r
LEFT JOIN {user} u ON r.userid = u.id
WHERE r.contextid = :contextid AND
@@ -350,7 +349,7 @@ class rating_manager {
$plugintype = !empty($options->plugintype) ? $options->plugintype : null;
$pluginname = !empty($options->pluginname) ? $options->pluginname : null;
$pluginpermissionsarray = $this->get_plugin_permissions_array($options->context->id, $plugintype, $pluginname);
$settings->pluginpermissions = new stdclass();
$settings->pluginpermissions->view = $pluginpermissionsarray['view'];
$settings->pluginpermissions->viewany = $pluginpermissionsarray['viewany'];
@@ -462,7 +461,7 @@ class rating_manager {
else if ( !empty($options->modulename) && !empty($options->moduleid) ) {
$modulename = $options->modulename;
$moduleid = $options->moduleid;
//going direct to the db for the context id seems wrong
list($ctxselect, $ctxjoin) = context_instance_preload_sql('cm.id', CONTEXT_MODULE, 'ctx');
$sql = "SELECT cm.* $ctxselect
@@ -485,7 +484,7 @@ class rating_manager {
$sql = "SELECT :userid1 as id, :userid2 AS userid, $aggregationstring(r.rating) AS rawgrade
FROM {rating} r
WHERE r.contextid=:contextid
WHERE r.contextid=:contextid
AND r.itemid IN (SELECT i.id AS itemid FROM {{$itemtable}} i WHERE i.{$itemtableusercolumn} = :userid3)";
$results = $DB->get_records_sql($sql, $params);
@@ -593,7 +592,7 @@ class rating_manager {
return true;
}
}
return false;//item doesn't exist or belongs to the current user
} else {
return true;//callback doesn't exist