diff --git a/lib.php b/lib.php index 541827c..0a94c1c 100644 --- a/lib.php +++ b/lib.php @@ -148,7 +148,11 @@ function block_grade_me_tree($course) { $coursemoduleid = $item['meta']['coursemoduleid']; unset($item['meta']); - $modulelink = $CFG->wwwroot . '/mod/' . $itemmodule . '/view.php?id=' . $coursemoduleid; + if ($itemmodule == 'wholeforum') { + $modulelink = $CFG->wwwroot . '/mod/forum/view.php?id=' . $coursemoduleid; + } else { + $modulelink = $CFG->wwwroot . '/mod/' . $itemmodule . '/view.php?id=' . $coursemoduleid; + } $gradelink = $CFG->wwwroot; if ($itemmodule == 'quiz') { $gradelink .= '/mod/quiz/report.php?id=' . $coursemoduleid; @@ -156,13 +160,17 @@ function block_grade_me_tree($course) { $gradelink = $modulelink; } $moduletitle = get_string('link_mod', 'block_grade_me', array('mod_name' => $itemmodule)); - $moduleicon = $OUTPUT->pix_icon('icon', $moduletitle, $itemmodule, array('class' => 'gm_icon')); + if ($itemmodule == 'wholeforum') { + $moduleicon = $OUTPUT->pix_icon('icon', $moduletitle, 'forum', array('class' => 'gm_icon')); + } else { + $moduleicon = $OUTPUT->pix_icon('icon', $moduletitle, $itemmodule, array('class' => 'gm_icon')); + } - $text .= '
' . "\n"; // Open module. + $text .= '
' . "\n"; // Open module. $text .= '
' . "\n"; $text .= '' . "\n"; @@ -195,6 +203,8 @@ function block_grade_me_tree($course) { } else if ($itemmodule == 'lesson') { $submissionlink .= '/mod/lesson/essay.php?id=' . $coursemoduleid . '&mode=grade&attemptid=' . $submissionid . '&sesskey=' . sesskey(); + } else if ($itemmodule == 'wholeforum') { + $submissionlink = $gradelink; } unset($submission['meta']); @@ -319,6 +329,7 @@ function block_grade_me_cache_grade_data() { $sql = "SELECT gi.id itemid, gi.itemname itemname, gi.itemtype itemtype, gi.itemmodule itemmodule, gi.iteminstance iteminstance, gi.sortorder itemsortorder, c.id courseid, c.shortname coursename, + gi.itemnumber itemnumber, cm.id coursemoduleid FROM {grade_items} gi LEFT JOIN {course} c ON gi.courseid = c.id @@ -331,6 +342,9 @@ function block_grade_me_cache_grade_data() { $paramscourse = array_merge($paramscourse, $inparams); $rs = $DB->get_recordset_sql($sql, $paramscourse); foreach ($rs as $rec) { + if ($rec->itemmodule == 'forum' && $rec->itemnumber == 1) { + $rec->itemmodule = 'wholeforum'; + } $values = array( 'itemtype' => $rec->itemtype, 'itemmodule' => $rec->itemmodule, diff --git a/plugins/wholeforum/wholeforum_plugin.php b/plugins/wholeforum/wholeforum_plugin.php new file mode 100644 index 0000000..f431915 --- /dev/null +++ b/plugins/wholeforum/wholeforum_plugin.php @@ -0,0 +1,53 @@ +. + +function block_grade_me_required_capability_wholeforum() { + $enabledplugins['wholeforum'] = array( + 'capability' => 'mod/forum:grade', + 'default_on' => false, + 'versiondependencies' => 'ANY_VERSION' + ); + return $enabledplugins; +} + +/** + * Build SQL query for the forum plugin + * + * @param array $gradebookusers ID's of gradebook users + * @return array|bool SQL query and parameters or false on failure + */ +function block_grade_me_query_wholeforum($gradebookusers) { + global $USER, $DB; + + if (empty($gradebookusers)) { + return false; + } + list($insql, $inparams) = $DB->get_in_or_equal($gradebookusers); + + $query = ", fp.id submissionid, fp.userid, fp.modified timesubmitted + FROM {forum_posts} fp + JOIN {forum_discussions} fd ON fd.id = fp.discussion + JOIN {forum} f ON f.id = fd.forum + JOIN {grade_items} gi ON gi.iteminstance = f.id + AND gi.itemmodule = 'forum' AND gi.itemnumber = 1 + LEFT JOIN {grade_grades} gg ON gg.itemid = gi.id AND gg.userid = fp.userid + LEFT JOIN {block_grade_me} bgm ON bgm.courseid = f.course AND bgm.iteminstance = f.id + WHERE fp.userid $insql + AND f.grade_forum != 0 + AND gg.finalgrade IS NULL "; + + return array($query, $inparams); +} diff --git a/settings.php b/settings.php index 3abf80e..6f34901 100644 --- a/settings.php +++ b/settings.php @@ -46,6 +46,13 @@ $settingname = 'block_grade_me_enable' . $plugin; $default = (isset($a[$plugin]) && isset($a[$plugin]['default_on'])) ? $a[$plugin]['default_on'] : false; $settings->add(new admin_setting_configcheckbox($settingname, $langshowmod, $langshowdesc, $default)); + } else if ($plugin == 'wholeforum' && \core_plugin_manager::instance()->get_plugin_info('forum')) { + $langmodname = get_string('grade_forum_name', 'forum'); + $langshowmod = get_string('settings_enablepre', 'block_grade_me') . ' ' . $langmodname; + $langshowdesc = get_string('settings_configenablepre', 'block_grade_me', ['plugin_name' => $langmodname]); + $settingname = 'block_grade_me_enable' . $plugin; + $default = (isset($a[$plugin]) && isset($a[$plugin]['default_on'])) ? $a[$plugin]['default_on'] : false; + $settings->add(new admin_setting_configcheckbox($settingname, $langshowmod, $langshowdesc, $default)); } } }