You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

209 lines
6.2 KiB

<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Local lib code
*
* @package tool_recyclebin
* @copyright 2015 Skylar Kelty <S.Kelty@kent.ac.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die;
/**
* Adds a recycle bin link to the course admin menu.
*
* @param navigation_node $navigation The navigation node to extend
* @param stdClass $course The course to object for the tool
* @param context $context The context of the course
* @return void|null return null if we don't want to display the node.
*/
function tool_recyclebin_extend_navigation_course($navigation, $course, $context) {
global $PAGE;
// Only add this settings item on non-site course pages.
if (!$PAGE->course || $PAGE->course->id == SITEID || !\tool_recyclebin\course_bin::is_enabled()) {
return null;
}
$coursebin = new \tool_recyclebin\course_bin($context->instanceid);
// Check we can view the recycle bin.
if (!$coursebin->can_view()) {
return null;
}
$url = null;
$settingnode = null;
$url = new moodle_url('/admin/tool/recyclebin/index.php', array(
'contextid' => $context->id
));
// If we are set to auto-hide, check the number of items.
$autohide = get_config('tool_recyclebin', 'autohide');
if ($autohide) {
$items = $coursebin->get_items();
if (empty($items)) {
return null;
}
}
// Add the recyclebin link.
$pluginname = get_string('pluginname', 'tool_recyclebin');
$node = navigation_node::create(
$pluginname,
$url,
navigation_node::NODETYPE_LEAF,
'tool_recyclebin',
'tool_recyclebin',
new pix_icon('trash', $pluginname, 'tool_recyclebin')
);
if ($PAGE->url->compare($url, URL_MATCH_BASE)) {
$node->make_active();
}
$navigation->add_node($node);
}
/**
* Adds a recycle bin link to the course admin menu.
*
* @param navigation_node $navigation The navigation node to extend
* @param context $context The context of the course
* @return void|null return null if we don't want to display the node.
*/
function tool_recyclebin_extend_navigation_category_settings($navigation, $context) {
global $PAGE;
// Check if it is enabled.
if (!\tool_recyclebin\category_bin::is_enabled()) {
return null;
}
$categorybin = new \tool_recyclebin\category_bin($context->instanceid);
// Check we can view the recycle bin.
if (!$categorybin->can_view()) {
return null;
}
$url = null;
$settingnode = null;
// Add a link to the category recyclebin.
$url = new moodle_url('/admin/tool/recyclebin/index.php', array(
'contextid' => $context->id
));
// If we are set to auto-hide, check the number of items.
$autohide = get_config('tool_recyclebin', 'autohide');
if ($autohide) {
$items = $categorybin->get_items();
if (empty($items)) {
return null;
}
}
// Add the recyclebin link.
$pluginname = get_string('pluginname', 'tool_recyclebin');
$node = navigation_node::create(
$pluginname,
$url,
navigation_node::NODETYPE_LEAF,
'tool_recyclebin',
'tool_recyclebin',
new pix_icon('trash', $pluginname, 'tool_recyclebin')
);
if ($PAGE->url->compare($url, URL_MATCH_BASE)) {
$node->make_active();
}
$navigation->add_node($node);
}
/**
* Hook called before we delete a course module.
*
* @param \stdClass $cm The course module record.
*/
function tool_recyclebin_pre_course_module_delete($cm) {
if (\tool_recyclebin\course_bin::is_enabled()) {
$coursebin = new \tool_recyclebin\course_bin($cm->course);
$coursebin->store_item($cm);
}
}
/**
* Hook called to check whether async course module deletion should be performed or not.
*
* @return true if background deletion is required (is the recyclebin is enabled), false otherwise.
*/
function tool_recyclebin_course_module_background_deletion_recommended() {
if (\tool_recyclebin\course_bin::is_enabled()) {
return true;
}
}
/**
* Hook called before we delete a course.
*
* @param \stdClass $course The course record.
*/
function tool_recyclebin_pre_course_delete($course) {
// It is possible that the course deletion which triggered this hook
// was from an in progress course restore. In that case we do not want
// it in the recycle bin.
if (isset($course->deletesource) && $course->deletesource == 'restore') {
return;
}
// Delete all the items in the course recycle bin, regardless if it enabled or not.
// It may have been enabled, then disabled later on, so may still have content.
$coursebin = new \tool_recyclebin\course_bin($course->id);
$coursebin->delete_all_items();
if (\tool_recyclebin\category_bin::is_enabled()) {
$categorybin = new \tool_recyclebin\category_bin($course->category);
$categorybin->store_item($course);
}
}
/**
* Hook called before we delete a category.
*
* @param \stdClass $category The category record.
*/
function tool_recyclebin_pre_course_category_delete($category) {
// Delete all the items in the category recycle bin, regardless if it enabled or not.
// It may have been enabled, then disabled later on, so may still have content.
$categorybin = new \tool_recyclebin\category_bin($category->id);
$categorybin->delete_all_items();
}
/**
* Map icons for font-awesome themes.
*/
function tool_recyclebin_get_fontawesome_icon_map() {
return [
'tool_recyclebin:trash' => 'fa-trash'
];
}