require_once $CFG->libdir . '/adminlib.php'; require_once 'lib.php'; $context = get_context_instance(CONTEXT_SYSTEM); require_capability('moodle/comment:delete', $context); $PAGE->requires->yui_lib('yahoo')->in_head(); $PAGE->requires->yui_lib('dom')->in_head(); $PAGE->requires->yui_lib('event')->in_head(); $PAGE->requires->yui_lib('animation')->in_head(); $PAGE->requires->yui_lib('json')->in_head(); $PAGE->requires->yui_lib('connection')->in_head(); $PAGE->requires->js('comment/admin.js')->in_head(); $action = optional_param('action', '', PARAM_ALPHA); $commentid = optional_param('commentid', 0, PARAM_INT); $commentids = optional_param('commentids', '', PARAM_ALPHANUMEXT); $page = optional_param('page', 0, PARAM_INT); $manager = new comment_manager(); if (!empty($action)) { confirm_sesskey(); } if ($action === 'delete') { // delete a single comment if (!empty($commentid)) { if ($manager->delete_comment($commentid)) { redirect($CFG->httpswwwroot . '/comment/', get_string('deleted')); } else { $err = 'cannotdeletecomment'; } } // delete a list of comments if (!empty($commentids)) { if ($manager->delete_comments($commentids)) {
/** * Check module updates since a given time. * This function checks for updates in the module config, file areas, completion, grades, comments and ratings. * * @param cm_info $cm course module data * @param int $from the time to check * @param array $fileareas additional file ares to check * @param array $filter if we need to filter and return only selected updates * @return stdClass object with the different updates * @since Moodle 3.2 */ function course_check_module_updates_since($cm, $from, $fileareas = array(), $filter = array()) { global $DB, $CFG, $USER; $context = $cm->context; $mod = $DB->get_record($cm->modname, array('id' => $cm->instance), '*', MUST_EXIST); $updates = new stdClass(); $course = get_course($cm->course); $component = 'mod_' . $cm->modname; // Check changes in the module configuration. if (isset($mod->timemodified) and (empty($filter) or in_array('configuration', $filter))) { $updates->configuration = (object) array('updated' => false); if ($updates->configuration->updated = $mod->timemodified > $from) { $updates->configuration->timeupdated = $mod->timemodified; } } // Check for updates in files. if (plugin_supports('mod', $cm->modname, FEATURE_MOD_INTRO)) { $fileareas[] = 'intro'; } if (!empty($fileareas) and (empty($filter) or in_array('fileareas', $filter))) { $fs = get_file_storage(); $files = $fs->get_area_files($context->id, $component, $fileareas, false, "filearea, timemodified DESC", false, $from); foreach ($fileareas as $filearea) { $updates->{$filearea . 'files'} = (object) array('updated' => false); } foreach ($files as $file) { $updates->{$file->get_filearea() . 'files'}->updated = true; $updates->{$file->get_filearea() . 'files'}->itemids[] = $file->get_id(); } } // Check completion. $supportcompletion = plugin_supports('mod', $cm->modname, FEATURE_COMPLETION_HAS_RULES); $supportcompletion = $supportcompletion or plugin_supports('mod', $cm->modname, FEATURE_COMPLETION_TRACKS_VIEWS); if ($supportcompletion and (empty($filter) or in_array('completion', $filter))) { $updates->completion = (object) array('updated' => false); $completion = new completion_info($course); // Use wholecourse to cache all the modules the first time. $completiondata = $completion->get_data($cm, true); if ($updates->completion->updated = !empty($completiondata->timemodified) && $completiondata->timemodified > $from) { $updates->completion->timemodified = $completiondata->timemodified; } } // Check grades. $supportgrades = plugin_supports('mod', $cm->modname, FEATURE_GRADE_HAS_GRADE); $supportgrades = $supportgrades or plugin_supports('mod', $cm->modname, FEATURE_GRADE_OUTCOMES); if ($supportgrades and (empty($filter) or (in_array('gradeitems', $filter) or in_array('outcomes', $filter)))) { require_once $CFG->libdir . '/gradelib.php'; $grades = grade_get_grades($course->id, 'mod', $cm->modname, $mod->id, $USER->id); if (empty($filter) or in_array('gradeitems', $filter)) { $updates->gradeitems = (object) array('updated' => false); foreach ($grades->items as $gradeitem) { foreach ($gradeitem->grades as $grade) { if ($grade->datesubmitted > $from or $grade->dategraded > $from) { $updates->gradeitems->updated = true; $updates->gradeitems->itemids[] = $gradeitem->id; } } } } if (empty($filter) or in_array('outcomes', $filter)) { $updates->outcomes = (object) array('updated' => false); foreach ($grades->outcomes as $outcome) { foreach ($outcome->grades as $grade) { if ($grade->datesubmitted > $from or $grade->dategraded > $from) { $updates->outcomes->updated = true; $updates->outcomes->itemids[] = $outcome->id; } } } } } // Check comments. if (plugin_supports('mod', $cm->modname, FEATURE_COMMENT) and (empty($filter) or in_array('comments', $filter))) { $updates->comments = (object) array('updated' => false); require_once $CFG->dirroot . '/comment/lib.php'; require_once $CFG->dirroot . '/comment/locallib.php'; $manager = new comment_manager(); $comments = $manager->get_component_comments_since($course, $context, $component, $from, $cm); if (!empty($comments)) { $updates->comments->updated = true; $updates->comments->itemids = array_keys($comments); } } // Check ratings. if (plugin_supports('mod', $cm->modname, FEATURE_RATE) and (empty($filter) or in_array('ratings', $filter))) { $updates->ratings = (object) array('updated' => false); require_once $CFG->dirroot . '/rating/lib.php'; $manager = new rating_manager(); $ratings = $manager->get_component_ratings_since($context, $component, $from); if (!empty($ratings)) { $updates->ratings->updated = true; $updates->ratings->itemids = array_keys($ratings); } } return $updates; }
$action = ''; } if ($action === 'delete') { // Delete a single comment. if (!empty($commentid)) { if (!$confirm) { echo $OUTPUT->header(); $optionsyes = array('course' => $courseid, 'action' => 'delete', 'commentid' => $commentid, 'confirm' => 1, 'sesskey' => sesskey()); $optionsno = array('course' => $courseid, 'sesskey' => sesskey()); $buttoncontinue = new single_button(new moodle_url($url, $optionsyes), get_string('delete')); $buttoncancel = new single_button(new moodle_url($url, $optionsno), get_string('cancel')); echo $OUTPUT->confirm(get_string('confirmdeletecomments', 'admin'), $buttoncontinue, $buttoncancel); echo $OUTPUT->footer(); die; } else { $manager = new comment_manager(); if ($manager->delete_comment($commentid)) { redirect(new moodle_url($url, $arr)); } else { $err = 'cannotdeletecomment'; } } } } echo $OUTPUT->header(); $tabl = new flexible_table('admin-comments-compatible'); if ($userid == 0) { echo html_writer::tag('h3', $course->fullname); $comments = report_comments_getcoursecomments($courseid, $sort); $tabl->define_columns(array('date', 'author', 'content', 'action')); $tabl->define_headers(array(get_string('date'), get_string('author', 'search'), get_string('content'), get_string('action')));