Files
moodle/admin/tool/recyclebin/lib.php
T
Mark Nelson 93af6a610e MDL-48012 tool_recyclebin: multiple changes before integration
- Added new icon for the recycle bin.
- Fixed issue where the course expiry setting was being used to display
  the expiry messages in the category bin.
- Fixed failing Behat tests.
- Tidied Behat tests.
  - General tidy up.
  - Deleted three Behat feature files.
    - Deleted 'delete_confirmation.feature' as it's testing JS functionality
      that was removed (see comment further down). The 'basic_functionality.feature'
      now tests deleting an activity and a course.
    - Deleted 'description.feature' and added the tested functionality to
      'basic_functionality.feature'.
    - Deleted 'logs_test.feature' and moved testing to PHPUnit tests.
  - Added another scenario for restoring a course.
- Removed protected mod settings - it was discussed that this was not a necessary
  feature. We should not be treating the recycle bin as a backup.
- Renamed events to conform to guidelines.
- Wrote new PHPUnit tests for events.
- Tidied up existing PHPUnit tests and extended them.
- Alphabetised lang file.
- Made changes to strings and string identifiers in the lang file and changed usages in code.
- Changed setting names to better identify their purpose.
- Renamed classes and file names so it's easier to identify their purpose.
- Renamed the 'deleted' column to 'timecreated' for consistency with other
  Moodle tables, and to easily identify what the value represents.
- Changed the columns 'category' and 'course' to 'categoryid' and
  'courseid' respectively.
- Changed the name of the table indexes for consistency with core.
- Removed module.js and any use of it and replaced with Moodle core libraries
  for JS confirmation.
- Removed 'noevent' argument in delete_item().
- Removed unnecessary capabilities - we can use the same capabilties for both
  recycle bins based on the context the capability was given.
- Removed '_' in the capability definitions to keep it consistent with core.
- Set page layout and headings for index.php - varies between the course and
  category recycle bins.
- Deleted styles.css and centred columns using the flexible_table API.
- Fixed IDE and codechecker complaints.
- Made use of the files API, rather than writing directly to
  "$CFG->dataroot . '/recyclebin'".
- Used make_temp_directory rather than expecting it to exist.
- Replaced debugging function calls with calls to the backup API to
  display errors.
- Deleted the temporary backup file after a successful restore, or if it fails.
- If the restore fails for a course, delete the course we created.
- Removed unnecessary '\' characters when not in namespace.
- Used configduration class for expiry times in the settings.
- Cleanup course bin when a course is deleted.
- Cleanup a category bin when a category is deleted.
- Removed unnecessary throw tags.
- Changed default settings.
2016-03-18 14:12:08 +08:00

183 lines
5.4 KiB
PHP

<?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 before we delete a course.
*
* @param \stdClass $course The course record.
*/
function tool_recyclebin_pre_course_delete($course) {
// 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();
}