. /** * Local lib code * * @package tool_recyclebin * @copyright 2015 Skylar Kelty * @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' ]; }