Skip to content

Commit

Permalink
OUwiki: Fix user reports ISSUE44 #113476
Browse files Browse the repository at this point in the history
  • Loading branch information
owenbarritt authored and sammarshallou committed Feb 1, 2016
1 parent ae8afd3 commit 6d47524
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 31 deletions.
2 changes: 1 addition & 1 deletion lang/en/ouwiki.php
Original file line number Diff line number Diff line change
Expand Up @@ -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.';

Expand Down
145 changes: 117 additions & 28 deletions lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 '<div class="ouwiki_user_complete_report">';
if (empty($usergroups)) {
$subwiki = ouwiki_get_subwiki($course, $wiki, $mod, $context, 0, $user->id, true);
$canview = ouwiki_can_view_participation($course, $wiki, $subwiki, $mod, $USER->id);
list($newuser, $changes) = ouwiki_get_user_participation($user->id, $subwiki);
echo $ouwikioutput->ouwiki_render_user_participation($user, $changes, $mod, $course, $wiki,
$subwiki, '', 0, '', $canview, $context, $fullname,
false, '');
} else {
foreach ($usergroups as $group) {
$subwiki = ouwiki_get_subwiki($course, $wiki, $mod, $context, $group->id, $user->id, true);
$canview = ouwiki_can_view_participation($course, $wiki, $subwiki, $mod, $USER->id);
list($newuser, $changes) = ouwiki_get_user_participation($user->id, $subwiki);
echo $OUTPUT->heading(get_string('group') . ': ' . $group->name, 5);
echo $ouwikioutput->ouwiki_render_user_participation($user, $changes, $mod, $course, $wiki,
$subwiki, '', $group->id, '', $canview, $context, $fullname,
false, $group->name);
}
}
echo '</div>';
}

/**
* Serves the ouwiki attachments. Implements needed access control ;-)
*
Expand Down
4 changes: 2 additions & 2 deletions version.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

$plugin->version = 2015101500;
$plugin->version = 2015101501;
$plugin->requires = 2014051200;
$plugin->component = 'mod_ouwiki';
$plugin->maturity = MATURITY_STABLE;
$plugin->release = '2.9 r1';
$plugin->release = '2.9 r2';

0 comments on commit 6d47524

Please sign in to comment.