if ($id) { $cm = get_coursemodule_from_id('oublog', $id, 0, false, MUST_EXIST); $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); $oublog = $DB->get_record('oublog', array('id' => $cm->instance), '*', MUST_EXIST); $PAGE->set_cm($cm); } $context = context_module::instance($cm->id); require_course_login($course, true, $cm); require_sesskey(); // participation capability check $canview = oublog_can_view_participation($course, $oublog, $cm, $groupid); if ($canview != OUBLOG_USER_PARTICIPATION) { print_error('nopermissiontoshow'); } // grading capability check if (!oublog_can_grade($course, $oublog, $cm, $groupid)) { print_error('nopermissiontoshow'); } $mode = ''; if (!empty($_POST['menu'])) { $gradeinfo = $_POST['menu']; $oldgrades = oublog_get_participation($oublog, $context, $groupid, $cm, $course); } else { if ($userid && !empty($_POST['grade'])) { $gradeinfo[$userid] = $_POST['grade']; $user = oublog_get_user_participation($oublog, $context, $userid, $groupid, $cm, $course); $oldgrades = array($userid => $user); } } // update grades if (!empty($gradeinfo)) {
/** * Returns user participation to view in userparticipation.php * * @param object $oublog current oublog object * @param object $context current context * @param int $userid required userid term for participation being viewed * @param int $groupid optional group id term * @param object $cm course-module object * @param object $course current course object * @param int $start optional start date * @param int $end optional end date * @param bool $getposts Return post data * @param bool $getcomments Return comment data * @param int $limitfrom limit posts/comments from * @param int $limitnum number of posts/comments (data only) to limit to * @param bool $getgrades return grade info * @return array user participation */ function oublog_get_user_participation($oublog, $context, $userid, $groupid = 0, $cm, $course, $start = null, $end = null, $getposts = true, $getcomments = true, $limitfrom = null, $limitnum = null, $getgrades = false) { global $DB; $testgroupid = $groupid; if ($oublog->individual > 0) { $testgroupid = 0; } $groupcheck = $testgroupid ? 'AND groupid = :groupid' : ''; $period = $cperiod = ''; if ($start) { $period = 'AND timeposted > :timestart '; } if ($end) { $period .= 'AND timeposted < :timeend '; } $postssql = 'SELECT id, title, message, timeposted FROM {oublog_posts} WHERE oubloginstancesid = ( SELECT id FROM {oublog_instances} WHERE oublogid = :oublogid AND userid = :userid ) AND timedeleted IS NULL ' . $groupcheck . $period . ' ORDER BY timeposted DESC'; if ($start) { $cperiod = 'AND c.timeposted > :timestart '; } if ($end) { $cperiod .= 'AND c.timeposted < :timeend '; } $authornamefields = get_all_user_name_fields(true, 'a'); $postauthornamefields = get_all_user_name_fields(true, 'pa', '', 'poster'); $commentssql = 'SELECT c.id, c.postid, c.title, c.message, c.timeposted, a.id AS authorid, ' . $authornamefields . ',' . $postauthornamefields . ', p.title AS posttitle, p.timeposted AS postdate FROM {user} a, {oublog_comments} c INNER JOIN {oublog_posts} p ON (c.postid = p.id) INNER JOIN {oublog_instances} bi ON (bi.id = p.oubloginstancesid) INNER JOIN {user} pa on bi.userid = pa.id WHERE bi.oublogid = :oublogid AND a.id = bi.userid AND p.timedeleted IS NULL ' . $groupcheck . $cperiod . ' AND c.userid = :userid AND c.timedeleted IS NULL ORDER BY c.timeposted DESC'; $params = array('oublogid' => $oublog->id, 'userid' => $userid, 'groupid' => $testgroupid, 'timestart' => $start, 'timeend' => $end); $fields = user_picture::fields(); $fields .= ',username,idnumber'; $user = $DB->get_record('user', array('id' => $userid), $fields, MUST_EXIST); $participation = new stdClass(); $participation->user = $user; $participation->numposts = $DB->get_field_sql("SELECT COUNT(1) FROM ({$postssql}) as p", $params); if ($getposts) { $participation->posts = $DB->get_records_sql($postssql, $params, $limitfrom, $limitnum); } else { $participation->posts = array(); } $participation->numcomments = $DB->get_field_sql("SELECT COUNT(1) FROM ({$commentssql}) as p", $params); if ($getcomments) { $participation->comments = $DB->get_records_sql($commentssql, $params, $limitfrom, $limitnum); } else { $participation->comments = array(); } if ($getgrades && oublog_can_grade($course, $oublog, $cm, $groupid)) { $gradinginfo = grade_get_grades($course->id, 'mod', 'oublog', $oublog->id, array($userid)); $participation->gradeobj = $gradinginfo->items[0]->grades[$userid]; } return $participation; }