diff --git a/course/recent.php b/course/recent.php index 192ccc23672..11e3d5c1cfc 100644 --- a/course/recent.php +++ b/course/recent.php @@ -119,9 +119,6 @@ if ($param->modid === 'all') { $sections = array($sectionnum => $sections[$sectionnum]); } - -$modinfo->get_groups(); // load all my groups and cache it in modinfo - $activities = array(); $index = 0; diff --git a/mod/assign/lib.php b/mod/assign/lib.php index 67b2ffd3c60..8e031efd186 100644 --- a/mod/assign/lib.php +++ b/mod/assign/lib.php @@ -517,7 +517,7 @@ function assign_print_recent_activity($course, $viewfullnames, $timestart) { $show = array(); $grader = array(); - $showrecentsubmissions = get_config('mod_assign', 'showrecentsubmissions'); + $showrecentsubmissions = get_config('assign', 'showrecentsubmissions'); foreach ($submissions as $submission) { if (!array_key_exists($submission->cmid, $modinfo->get_cms())) { @@ -553,19 +553,14 @@ function assign_print_recent_activity($course, $viewfullnames, $timestart) { continue; } - if (is_null($modinfo->get_groups())) { - // Load all my groups and cache it in modinfo. - $modinfo->groups = groups_get_user_groups($course->id); - } - // This will be slow - show only users that share group with me in this cm. - if (empty($modinfo->groups[$cm->id])) { + if (!$modinfo->get_groups($cm->groupingid)) { continue; } $usersgroups = groups_get_all_groups($course->id, $submission->userid, $cm->groupingid); if (is_array($usersgroups)) { $usersgroups = array_keys($usersgroups); - $intersect = array_intersect($usersgroups, $modinfo->groups[$cm->id]); + $intersect = array_intersect($usersgroups, $modinfo->get_groups($cm->groupingid)); if (empty($intersect)) { continue; } @@ -665,17 +660,9 @@ function assign_get_recent_mod_activity(&$activities, $accessallgroups = has_capability('moodle/site:accessallgroups', $cmcontext); $viewfullnames = has_capability('moodle/site:viewfullnames', $cmcontext); - if (is_null($modinfo->get_groups())) { - // Load all my groups and cache it in modinfo. - $modinfo->groups = groups_get_user_groups($course->id); - } - $showrecentsubmissions = get_config('mod_assign', 'showrecentsubmissions'); + $showrecentsubmissions = get_config('assign', 'showrecentsubmissions'); $show = array(); - $usersgroups = groups_get_all_groups($course->id, $USER->id, $cm->groupingid); - if (is_array($usersgroups)) { - $usersgroups = array_keys($usersgroups); - } foreach ($submissions as $submission) { if ($submission->userid == $USER->id) { $show[] = $submission; @@ -696,11 +683,13 @@ function assign_get_recent_mod_activity(&$activities, } // This will be slow - show only users that share group with me in this cm. - if (empty($modinfo->groups[$cm->id])) { + if (!$modinfo->get_groups($cm->groupingid)) { continue; } + $usersgroups = groups_get_all_groups($course->id, $submission->userid, $cm->groupingid); if (is_array($usersgroups)) { - $intersect = array_intersect($usersgroups, $modinfo->groups[$cm->id]); + $usersgroups = array_keys($usersgroups); + $intersect = array_intersect($usersgroups, $modinfo->get_groups($cm->groupingid)); if (empty($intersect)) { continue; } diff --git a/mod/chat/lib.php b/mod/chat/lib.php index 16f68a3408e..c21236d10e4 100644 --- a/mod/chat/lib.php +++ b/mod/chat/lib.php @@ -289,12 +289,8 @@ function chat_print_recent_activity($course, $viewfullnames, $timestart) { continue; } - if (is_null($modinfo->groups)) { - $modinfo->groups = groups_get_user_groups($course->id); // load all my groups and cache it in modinfo - } - // verify groups in separate mode - if (!$mygroupids = $modinfo->groups[$cm->groupingid]) { + if (!$mygroupids = $modinfo->get_groups($cm->groupingid)) { continue; } diff --git a/mod/feedback/lib.php b/mod/feedback/lib.php index 79457aec493..d30cdf18830 100644 --- a/mod/feedback/lib.php +++ b/mod/feedback/lib.php @@ -385,7 +385,7 @@ function feedback_get_recent_mod_activity(&$activities, &$index, $sqlargs = array(); - $userfields = user_picture::fields('u', null, 'userid'); + $userfields = user_picture::fields('u', null, 'useridagain'); $sql = " SELECT fk . * , fc . * , $userfields FROM {feedback_completed} fc JOIN {feedback} fk ON fk.id = fc.feedback @@ -423,11 +423,6 @@ function feedback_get_recent_mod_activity(&$activities, &$index, $viewfullnames = has_capability('moodle/site:viewfullnames', $cm_context); $groupmode = groups_get_activity_groupmode($cm, $course); - if (is_null($modinfo->groups)) { - // load all my groups and cache it in modinfo - $modinfo->groups = groups_get_user_groups($course->id); - } - $aname = format_string($cm->name, true); foreach ($feedbackitems as $feedbackitem) { if ($feedbackitem->userid != $USER->id) { @@ -440,7 +435,7 @@ function feedback_get_recent_mod_activity(&$activities, &$index, continue; } $usersgroups = array_keys($usersgroups); - $intersect = array_intersect($usersgroups, $modinfo->groups[$cm->id]); + $intersect = array_intersect($usersgroups, $modinfo->get_groups($cm->groupingid)); if (empty($intersect)) { continue; } @@ -459,19 +454,7 @@ function feedback_get_recent_mod_activity(&$activities, &$index, $tmpactivity->content->feedbackid = $feedbackitem->id; $tmpactivity->content->feedbackuserid = $feedbackitem->userid; - $userfields = explode(',', user_picture::fields()); - $tmpactivity->user = new stdClass(); - foreach ($userfields as $userfield) { - if ($userfield == 'id') { - $tmpactivity->user->{$userfield} = $feedbackitem->userid; // aliased in SQL above - } else { - if (!empty($feedbackitem->{$userfield})) { - $tmpactivity->user->{$userfield} = $feedbackitem->{$userfield}; - } else { - $tmpactivity->user->{$userfield} = null; - } - } - } + $tmpactivity->user = user_picture::unalias($feedbackitem, null, 'useridagain'); $tmpactivity->user->fullname = fullname($feedbackitem, $viewfullnames); $activities[$index++] = $tmpactivity; diff --git a/mod/glossary/lib.php b/mod/glossary/lib.php index a4d230e8f4d..123cf92c8e4 100644 --- a/mod/glossary/lib.php +++ b/mod/glossary/lib.php @@ -335,13 +335,16 @@ function glossary_get_recent_mod_activity(&$activities, &$index, $timestart, $co $cm = $modinfo->cms[$cmid]; $context = context_module::instance($cm->id); - if (!has_capability('mod/glossary:view', $context)) { + if (!$cm->uservisible) { return; } $viewfullnames = has_capability('moodle/site:viewfullnames', $context); + // Groups are not yet supported for glossary. See MDL-10728 . + /* $accessallgroups = has_capability('moodle/site:accessallgroups', $context); $groupmode = groups_get_activity_groupmode($cm, $course); + */ $params['timestart'] = $timestart; @@ -361,17 +364,24 @@ function glossary_get_recent_mod_activity(&$activities, &$index, $timestart, $co $groupjoin = ''; } + $approvedselect = ""; + if (!has_capability('mod/glossary:approve', $context)) { + $approvedselect = " AND ge.approved = 1 "; + } + $params['timestart'] = $timestart; $params['glossaryid'] = $cm->instance; - $ufields = user_picture::fields('u', null, 'useridagain'); + $ufields = user_picture::fields('u', null, 'userid'); $entries = $DB->get_records_sql(" - SELECT ge.id AS entryid, ge.*, $ufields + SELECT ge.id AS entryid, ge.glossaryid, ge.concept, ge.definition, ge.approved, + ge.timemodified, $ufields FROM {glossary_entries} ge JOIN {user} u ON u.id = ge.userid $groupjoin WHERE ge.timemodified > :timestart AND ge.glossaryid = :glossaryid + $approvedselect $userselect $groupselect ORDER BY ge.timemodified ASC", $params); @@ -381,6 +391,8 @@ function glossary_get_recent_mod_activity(&$activities, &$index, $timestart, $co } foreach ($entries as $entry) { + // Groups are not yet supported for glossary. See MDL-10728 . + /* $usersgroups = null; if ($entry->userid != $USER->id) { if ($groupmode == SEPARATEGROUPS and !$accessallgroups) { @@ -392,14 +404,15 @@ function glossary_get_recent_mod_activity(&$activities, &$index, $timestart, $co $usersgroups = array(); } } - if (!array_intersect($usersgroups, $modinfo->get_groups($cm->id))) { + if (!array_intersect($usersgroups, $modinfo->get_groups($cm->groupingid))) { continue; } } } + */ $tmpactivity = new stdClass(); - $tmpactivity->user = user_picture::unalias($entry, null, 'useridagain'); + $tmpactivity->user = user_picture::unalias($entry, null, 'userid'); $tmpactivity->user->fullname = fullname($tmpactivity->user, $viewfullnames); $tmpactivity->type = 'glossary'; $tmpactivity->cmid = $cm->id; @@ -411,6 +424,7 @@ function glossary_get_recent_mod_activity(&$activities, &$index, $timestart, $co $tmpactivity->content->entryid = $entry->entryid; $tmpactivity->content->concept = $entry->concept; $tmpactivity->content->definition = $entry->definition; + $tmpactivity->content->approved = $entry->approved; $activities[$index++] = $tmpactivity; } @@ -440,14 +454,20 @@ function glossary_print_recent_mod_activity($activity, $courseid, $detail, $modn echo html_writer::start_tag('div', array('class'=>'glossary-activity-content')); echo html_writer::start_tag('div', array('class'=>'glossary-activity-entry')); - $urlparams = array('g' => $activity->glossaryid, 'mode' => 'entry', 'hook' => $activity->content->entryid); - echo html_writer::tag('a', strip_tags($activity->content->concept), - array('href' => new moodle_url('/mod/glossary/view.php', $urlparams))); + if (isset($activity->content->approved) && !$activity->content->approved) { + $urlparams = array('g' => $activity->glossaryid, 'mode' => 'approval', 'hook' => $activity->content->concept); + $class = array('class' => 'dimmed_text'); + } else { + $urlparams = array('g' => $activity->glossaryid, 'mode' => 'entry', 'hook' => $activity->content->entryid); + $class = array(); + } + echo html_writer::link(new moodle_url('/mod/glossary/view.php', $urlparams), + strip_tags($activity->content->concept), $class); echo html_writer::end_tag('div'); $url = new moodle_url('/user/view.php', array('course'=>$courseid, 'id'=>$activity->user->id)); $name = $activity->user->fullname; - $link = html_writer::link($url, $name); + $link = html_writer::link($url, $name, $class); echo html_writer::start_tag('div', array('class'=>'user')); echo $link .' - '. userdate($activity->timestamp); diff --git a/mod/quiz/lib.php b/mod/quiz/lib.php index 3658df8db6b..537789b7b8e 100644 --- a/mod/quiz/lib.php +++ b/mod/quiz/lib.php @@ -814,15 +814,10 @@ function quiz_refresh_events($courseid = 0) { */ function quiz_get_recent_mod_activity(&$activities, &$index, $timestart, $courseid, $cmid, $userid = 0, $groupid = 0) { - global $CFG, $COURSE, $USER, $DB; + global $CFG, $USER, $DB; require_once($CFG->dirroot . '/mod/quiz/locallib.php'); - if ($COURSE->id == $courseid) { - $course = $COURSE; - } else { - $course = $DB->get_record('course', array('id' => $courseid)); - } - + $course = get_course($courseid); $modinfo = get_fast_modinfo($course); $cm = $modinfo->cms[$cmid]; @@ -869,11 +864,6 @@ function quiz_get_recent_mod_activity(&$activities, &$index, $timestart, $grader = has_capability('mod/quiz:viewreports', $context); $groupmode = groups_get_activity_groupmode($cm, $course); - if (is_null($modinfo->groups)) { - // Load all my groups and cache it in modinfo. - $modinfo->groups = groups_get_user_groups($course->id); - } - $usersgroups = null; $aname = format_string($cm->name, true); foreach ($attempts as $attempt) { @@ -884,16 +874,10 @@ function quiz_get_recent_mod_activity(&$activities, &$index, $timestart, } if ($groupmode == SEPARATEGROUPS and !$accessallgroups) { - if (is_null($usersgroups)) { - $usersgroups = groups_get_all_groups($course->id, - $attempt->userid, $cm->groupingid); - if (is_array($usersgroups)) { - $usersgroups = array_keys($usersgroups); - } else { - $usersgroups = array(); - } - } - if (!array_intersect($usersgroups, $modinfo->groups[$cm->id])) { + $usersgroups = groups_get_all_groups($course->id, + $attempt->userid, $cm->groupingid); + $usersgroups = array_keys($usersgroups); + if (!array_intersect($usersgroups, $modinfo->get_groups($cm->groupingid))) { continue; } } diff --git a/mod/workshop/lib.php b/mod/workshop/lib.php index 21bab06c09e..4ffd60e7194 100644 --- a/mod/workshop/lib.php +++ b/mod/workshop/lib.php @@ -380,7 +380,8 @@ function workshop_print_recent_activity($course, $viewfullnames, $timestart) { WHERE cm.course = ? AND md.name = 'workshop' AND s.example = 0 - AND (s.timemodified > ? OR a.timemodified > ?)"; + AND (s.timemodified > ? OR a.timemodified > ?) + ORDER BY s.timemodified"; $rs = $DB->get_recordset_sql($sql, array($course->id, $timestart, $timestart)); @@ -401,16 +402,14 @@ function workshop_print_recent_activity($course, $viewfullnames, $timestart) { continue; } - if ($viewfullnames) { - // remember all user names we can use later - if (empty($users[$activity->authorid])) { - $u = new stdclass(); - $users[$activity->authorid] = username_load_fields_from_object($u, $activity, 'author'); - } - if ($activity->reviewerid and empty($users[$activity->reviewerid])) { - $u = new stdclass(); - $users[$activity->reviewerid] = username_load_fields_from_object($u, $activity, 'reviewer'); - } + // remember all user names we can use later + if (empty($users[$activity->authorid])) { + $u = new stdclass(); + $users[$activity->authorid] = username_load_fields_from_object($u, $activity, 'author'); + } + if ($activity->reviewerid and empty($users[$activity->reviewerid])) { + $u = new stdclass(); + $users[$activity->reviewerid] = username_load_fields_from_object($u, $activity, 'reviewer'); } $context = context_module::instance($cm->id); @@ -422,7 +421,7 @@ function workshop_print_recent_activity($course, $viewfullnames, $timestart) { $s->authorid = $activity->authorid; $s->timemodified = $activity->submissionmodified; $s->cmid = $activity->cmid; - if (has_capability('mod/workshop:viewauthornames', $context)) { + if ($activity->authorid == $USER->id || has_capability('mod/workshop:viewauthornames', $context)) { $s->authornamevisible = true; } else { $s->authornamevisible = false; @@ -443,18 +442,14 @@ function workshop_print_recent_activity($course, $viewfullnames, $timestart) { break; } - if (is_null($modinfo->groups)) { - $modinfo->groups = groups_get_user_groups($course->id); // load all my groups and cache it in modinfo - } - // this might be slow - show only submissions by users who share group with me in this cm - if (empty($modinfo->groups[$cm->id])) { + if (!$modinfo->get_groups($cm->groupingid)) { break; } $authorsgroups = groups_get_all_groups($course->id, $s->authorid, $cm->groupingid); if (is_array($authorsgroups)) { $authorsgroups = array_keys($authorsgroups); - $intersect = array_intersect($authorsgroups, $modinfo->groups[$cm->id]); + $intersect = array_intersect($authorsgroups, $modinfo->get_groups($cm->groupingid)); if (empty($intersect)) { break; } else { @@ -479,7 +474,7 @@ function workshop_print_recent_activity($course, $viewfullnames, $timestart) { $a->reviewerid = $activity->reviewerid; $a->timemodified = $activity->assessmentmodified; $a->cmid = $activity->cmid; - if (has_capability('mod/workshop:viewreviewernames', $context)) { + if ($activity->reviewerid == $USER->id || has_capability('mod/workshop:viewreviewernames', $context)) { $a->reviewernamevisible = true; } else { $a->reviewernamevisible = false; @@ -500,18 +495,14 @@ function workshop_print_recent_activity($course, $viewfullnames, $timestart) { break; } - if (is_null($modinfo->groups)) { - $modinfo->groups = groups_get_user_groups($course->id); // load all my groups and cache it in modinfo - } - // this might be slow - show only submissions by users who share group with me in this cm - if (empty($modinfo->groups[$cm->id])) { + if (!$modinfo->get_groups($cm->groupingid)) { break; } $reviewersgroups = groups_get_all_groups($course->id, $a->reviewerid, $cm->groupingid); if (is_array($reviewersgroups)) { $reviewersgroups = array_keys($reviewersgroups); - $intersect = array_intersect($reviewersgroups, $modinfo->groups[$cm->id]); + $intersect = array_intersect($reviewersgroups, $modinfo->get_groups($cm->groupingid)); if (empty($intersect)) { break; } else { @@ -538,7 +529,7 @@ function workshop_print_recent_activity($course, $viewfullnames, $timestart) { echo $OUTPUT->heading(get_string('recentsubmissions', 'workshop'), 3); foreach ($submissions as $id => $submission) { $link = new moodle_url('/mod/workshop/submission.php', array('id'=>$id, 'cmid'=>$submission->cmid)); - if ($viewfullnames and $submission->authornamevisible) { + if ($submission->authornamevisible) { $author = $users[$submission->authorid]; } else { $author = null; @@ -550,9 +541,10 @@ function workshop_print_recent_activity($course, $viewfullnames, $timestart) { if (!empty($assessments)) { $shown = true; echo $OUTPUT->heading(get_string('recentassessments', 'workshop'), 3); + core_collator::asort_objects_by_property($assessments, 'timemodified'); foreach ($assessments as $id => $assessment) { $link = new moodle_url('/mod/workshop/assessment.php', array('asid' => $id)); - if ($viewfullnames and $assessment->reviewernamevisible) { + if ($assessment->reviewernamevisible) { $reviewer = $users[$assessment->reviewerid]; } else { $reviewer = null; @@ -643,34 +635,27 @@ function workshop_get_recent_mod_activity(&$activities, &$index, $timestart, $co $context = context_module::instance($cm->id); $grader = has_capability('moodle/grade:viewall', $context); $accessallgroups = has_capability('moodle/site:accessallgroups', $context); - $viewfullnames = has_capability('moodle/site:viewfullnames', $context); $viewauthors = has_capability('mod/workshop:viewauthornames', $context); $viewreviewers = has_capability('mod/workshop:viewreviewernames', $context); - if (is_null($modinfo->groups)) { - $modinfo->groups = groups_get_user_groups($course->id); // load all my groups and cache it in modinfo - } - $submissions = array(); // recent submissions indexed by submission id $assessments = array(); // recent assessments indexed by assessment id $users = array(); foreach ($rs as $activity) { - if ($viewfullnames) { - // remember all user names we can use later - if (empty($users[$activity->authorid])) { - $u = new stdclass(); - $additionalfields = explode(',', user_picture::fields()); - $u = username_load_fields_from_object($u, $activity, 'author', $additionalfields); - $users[$activity->authorid] = $u; - } - if ($activity->reviewerid and empty($users[$activity->reviewerid])) { - $u = new stdclass(); - $additionalfields = explode(',', user_picture::fields()); - $u = username_load_fields_from_object($u, $activity, 'reviewer', $additionalfields); - $users[$activity->reviewerid] = $u; - } + // remember all user names we can use later + if (empty($users[$activity->authorid])) { + $u = new stdclass(); + $additionalfields = explode(',', user_picture::fields()); + $u = username_load_fields_from_object($u, $activity, 'author', $additionalfields); + $users[$activity->authorid] = $u; + } + if ($activity->reviewerid and empty($users[$activity->reviewerid])) { + $u = new stdclass(); + $additionalfields = explode(',', user_picture::fields()); + $u = username_load_fields_from_object($u, $activity, 'reviewer', $additionalfields); + $users[$activity->reviewerid] = $u; } if ($activity->submissionmodified > $timestart and empty($submissions[$activity->submissionid])) { @@ -679,7 +664,7 @@ function workshop_get_recent_mod_activity(&$activities, &$index, $timestart, $co $s->title = $activity->submissiontitle; $s->authorid = $activity->authorid; $s->timemodified = $activity->submissionmodified; - if (has_capability('mod/workshop:viewauthornames', $context)) { + if ($activity->authorid == $USER->id || has_capability('mod/workshop:viewauthornames', $context)) { $s->authornamevisible = true; } else { $s->authornamevisible = false; @@ -701,13 +686,13 @@ function workshop_get_recent_mod_activity(&$activities, &$index, $timestart, $co } // this might be slow - show only submissions by users who share group with me in this cm - if (empty($modinfo->groups[$cm->id])) { + if (!$modinfo->get_groups($cm->groupingid)) { break; } $authorsgroups = groups_get_all_groups($course->id, $s->authorid, $cm->groupingid); if (is_array($authorsgroups)) { $authorsgroups = array_keys($authorsgroups); - $intersect = array_intersect($authorsgroups, $modinfo->groups[$cm->id]); + $intersect = array_intersect($authorsgroups, $modinfo->get_groups($cm->groupingid)); if (empty($intersect)) { break; } else { @@ -732,7 +717,7 @@ function workshop_get_recent_mod_activity(&$activities, &$index, $timestart, $co $a->submissiontitle = $activity->submissiontitle; $a->reviewerid = $activity->reviewerid; $a->timemodified = $activity->assessmentmodified; - if (has_capability('mod/workshop:viewreviewernames', $context)) { + if ($activity->reviewerid == $USER->id || has_capability('mod/workshop:viewreviewernames', $context)) { $a->reviewernamevisible = true; } else { $a->reviewernamevisible = false; @@ -754,13 +739,13 @@ function workshop_get_recent_mod_activity(&$activities, &$index, $timestart, $co } // this might be slow - show only submissions by users who share group with me in this cm - if (empty($modinfo->groups[$cm->id])) { + if (!$modinfo->get_groups($cm->groupingid)) { break; } $reviewersgroups = groups_get_all_groups($course->id, $a->reviewerid, $cm->groupingid); if (is_array($reviewersgroups)) { $reviewersgroups = array_keys($reviewersgroups); - $intersect = array_intersect($reviewersgroups, $modinfo->groups[$cm->id]); + $intersect = array_intersect($reviewersgroups, $modinfo->get_groups($cm->groupingid)); if (empty($intersect)) { break; } else {