diff --git a/lang/en/ouwiki.php b/lang/en/ouwiki.php index e02267a..4068a83 100644 --- a/lang/en/ouwiki.php +++ b/lang/en/ouwiki.php @@ -291,7 +291,7 @@ $string['addnewsection']='Add new section to this page'; $string['createdbyon'] = 'created by {$a->name} on {$a->date}'; -$string['numedits'] = '{$a} edit(s)'; +$string['numedits'] = '{$a} edits'; $string['overviewnumentrysince1'] = 'new wiki entry since last login.'; $string['overviewnumentrysince'] = 'new wiki entries since last login.'; diff --git a/lib.php b/lib.php index cb74c38..3f390b5 100644 --- a/lib.php +++ b/lib.php @@ -490,44 +490,133 @@ function ouwiki_print_overview($courses, &$htmlarray) { /** * Returns summary information about what a user has done, * for user activity reports. - * @param $course - * @param $user - * @param $mod - * @param $wiki - * @return object + * + * @param stdClass $course + * @param stdClass $user + * @param stdClass $mod + * @param stdClass $wiki + * @return stdClass A standard object with 2 variables: info (number of edits for this user) and time (last modified) */ function ouwiki_user_outline($course, $user, $mod, $wiki) { - global $DB; + global $DB, $CFG; + + // Get user grades. + require_once("$CFG->libdir/gradelib.php"); + $grades = grade_get_grades($course->id, 'mod', 'ouwiki', $wiki->id, $user->id); + if (empty($grades->items[0]->grades)) { + $grade = false; + } else { + $grade = reset($grades->items[0]->grades); + if ($grade->str_grade == '-') { + $grade = false; + } + } + + // Get user edits. + $params = array( + 'userid' => $user->id, + 'ouwikiid' => $wiki->id + ); + + $vsql = "SELECT v.id AS versionid, v.timecreated + FROM {ouwiki_pages} p + JOIN {ouwiki_subwikis} s ON s.id = p.subwikiid + JOIN {ouwiki_versions} v ON v.pageid = p.id + WHERE v.userid = :userid + AND s.wikiid = :ouwikiid + AND v.deletedat IS NULL + ORDER BY v.timecreated ASC"; + $versions = $DB->get_records_sql($vsql, $params); $result = null; - $logsview = $DB->get_records_select('log', "userid = ? AND module = 'ouwiki' - AND action = 'view' AND cmid = ?", array($user->id, $mod->id), "time ASC"); - $logsedit = $DB->get_records_select('log', "userid = ? AND module = 'ouwiki' - AND action = 'edit' AND cmid = ?", array($user->id, $mod->id), "time ASC"); - if ($logsview) { - $numviews = count($logsview); - $lastlog = array_pop($logsview); - $result = new object(); - $result->info = get_string('numviews', '', $numviews); - $result->time = $lastlog->time; - } - if ($logsedit) { - if ($logsview) { - $numviews = count($logsedit); - $lastlog = array_pop($logsedit); - $result->info .= ', and '.get_string('numedits', 'ouwiki', $numviews); - $result->time = $lastlog->time > $result->time ? $lastlog->time : $result->time; + + if (!empty($versions)) { + $result = new stdClass(); + $result->info = get_string('numedits', 'ouwiki', count($versions)); + + if ($grade) { + $result->info .= ', ' . get_string('grade') . ': ' . $grade->str_long_grade; + } + + $timecreated = end($versions)->timecreated; + + $result->time = $timecreated; + } else if ($grade) { + $result = new stdClass(); + $result->info = get_string('grade') . ': ' . $grade->str_long_grade; + // If grade was last modified by the user themselves use date graded. Otherwise use date submitted. + if ($grade->usermodified == $user->id || empty($grade->datesubmitted)) { + $result->time = $grade->dategraded; } else { - $numviews = count($logsedit); - $lastlog = array_pop($logsedit); - $result = new object(); - $result->info = get_string('numedits', 'ouwiki', $numviews); - $result->time = $lastlog->time; + $result->time = $grade->datesubmitted; } } + return $result; } +/** + * Prints detailed summary information about what a user has done, + * for user activity reports. + * + * @param stdClass $course + * @param stdClass $user + * @param stdClass $mod + * @param stdClass $wiki + */ +function ouwiki_user_complete($course, $user, $mod, $wiki) { + global $DB, $CFG, $OUTPUT, $USER, $PAGE; + + require_once("$CFG->libdir/gradelib.php"); + require_once("$CFG->dirroot/mod/ouwiki/locallib.php"); + + $grades = grade_get_grades($course->id, 'mod', 'ouwiki', $wiki->id, $user->id); + if (!empty($grades->items[0]->grades)) { + $grade = reset($grades->items[0]->grades); + if ($grade != '-') { + echo $OUTPUT->container(get_string('grade') . ': ' . $grade->str_long_grade); + if ($grade->str_feedback) { + echo $OUTPUT->container(get_string('feedback') . ': ' . $grade->str_feedback); + } + } + } + + $usergroups = array(); + if ($wiki->subwikis == 1) { + $wikigroups = groups_get_activity_allowed_groups($mod); + foreach ($wikigroups as $mygroup) { + if (groups_is_member($mygroup->id, $user->id)) { + $usergroups[] = $mygroup; + } + } + } + + $context = context_module::instance($mod->id); + $fullname = fullname($user, has_capability('moodle/site:viewfullnames', $context)); + + $ouwikioutput = $PAGE->get_renderer('mod_ouwiki'); + echo '