Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.
   1  <?php
   2  // This file is part of Moodle - http://moodle.org/
   3  //
   4  // Moodle is free software: you can redistribute it and/or modify
   5  // it under the terms of the GNU General Public License as published by
   6  // the Free Software Foundation, either version 3 of the License, or
   7  // (at your option) any later version.
   8  //
   9  // Moodle is distributed in the hope that it will be useful,
  10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  // GNU General Public License for more details.
  13  //
  14  // You should have received a copy of the GNU General Public License
  15  // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
  16  
  17  /**
  18   * Local lib code
  19   *
  20   * @package    tool_recyclebin
  21   * @copyright  2015 Skylar Kelty <S.Kelty@kent.ac.uk>
  22   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23   */
  24  
  25  defined('MOODLE_INTERNAL') || die;
  26  
  27  /**
  28   * Adds a recycle bin link to the course admin menu.
  29   *
  30   * @param navigation_node $navigation The navigation node to extend
  31   * @param stdClass $course The course to object for the tool
  32   * @param context $context The context of the course
  33   * @return void|null return null if we don't want to display the node.
  34   */
  35  function tool_recyclebin_extend_navigation_course($navigation, $course, $context) {
  36      global $PAGE;
  37  
  38      // Only add this settings item on non-site course pages.
  39      if (!$PAGE->course || $PAGE->course->id == SITEID || !\tool_recyclebin\course_bin::is_enabled()) {
  40          return null;
  41      }
  42  
  43      $coursebin = new \tool_recyclebin\course_bin($context->instanceid);
  44  
  45      // Check we can view the recycle bin.
  46      if (!$coursebin->can_view()) {
  47          return null;
  48      }
  49  
  50      $url = null;
  51      $settingnode = null;
  52  
  53      $url = new moodle_url('/admin/tool/recyclebin/index.php', array(
  54          'contextid' => $context->id
  55      ));
  56  
  57      // If we are set to auto-hide, check the number of items.
  58      $autohide = get_config('tool_recyclebin', 'autohide');
  59      if ($autohide) {
  60          $items = $coursebin->get_items();
  61          if (empty($items)) {
  62              return null;
  63          }
  64      }
  65  
  66      // Add the recyclebin link.
  67      $pluginname = get_string('pluginname', 'tool_recyclebin');
  68  
  69      $node = navigation_node::create(
  70          $pluginname,
  71          $url,
  72          navigation_node::NODETYPE_LEAF,
  73          'tool_recyclebin',
  74          'tool_recyclebin',
  75          new pix_icon('trash', $pluginname, 'tool_recyclebin')
  76      );
  77  
  78      if ($PAGE->url->compare($url, URL_MATCH_BASE)) {
  79          $node->make_active();
  80      }
  81  
  82      $navigation->add_node($node);
  83  }
  84  
  85  /**
  86   * Adds a recycle bin link to the course admin menu.
  87   *
  88   * @param navigation_node $navigation The navigation node to extend
  89   * @param context $context The context of the course
  90   * @return void|null return null if we don't want to display the node.
  91   */
  92  function tool_recyclebin_extend_navigation_category_settings($navigation, $context) {
  93      global $PAGE;
  94  
  95      // Check if it is enabled.
  96      if (!\tool_recyclebin\category_bin::is_enabled()) {
  97          return null;
  98      }
  99  
 100      $categorybin = new \tool_recyclebin\category_bin($context->instanceid);
 101  
 102      // Check we can view the recycle bin.
 103      if (!$categorybin->can_view()) {
 104          return null;
 105      }
 106  
 107      $url = null;
 108      $settingnode = null;
 109  
 110      // Add a link to the category recyclebin.
 111      $url = new moodle_url('/admin/tool/recyclebin/index.php', array(
 112          'contextid' => $context->id
 113      ));
 114  
 115      // If we are set to auto-hide, check the number of items.
 116      $autohide = get_config('tool_recyclebin', 'autohide');
 117      if ($autohide) {
 118          $items = $categorybin->get_items();
 119          if (empty($items)) {
 120              return null;
 121          }
 122      }
 123  
 124      // Add the recyclebin link.
 125      $pluginname = get_string('pluginname', 'tool_recyclebin');
 126  
 127      $node = navigation_node::create(
 128          $pluginname,
 129          $url,
 130          navigation_node::NODETYPE_LEAF,
 131          'tool_recyclebin',
 132          'tool_recyclebin',
 133          new pix_icon('trash', $pluginname, 'tool_recyclebin')
 134      );
 135  
 136      if ($PAGE->url->compare($url, URL_MATCH_BASE)) {
 137          $node->make_active();
 138      }
 139  
 140      $navigation->add_node($node);
 141  }
 142  
 143  /**
 144   * Hook called before we delete a course module.
 145   *
 146   * @param \stdClass $cm The course module record.
 147   */
 148  function tool_recyclebin_pre_course_module_delete($cm) {
 149      if (\tool_recyclebin\course_bin::is_enabled()) {
 150          $coursebin = new \tool_recyclebin\course_bin($cm->course);
 151          $coursebin->store_item($cm);
 152      }
 153  }
 154  
 155  /**
 156   * Hook called to check whether async course module deletion should be performed or not.
 157   *
 158   * @return true if background deletion is required (is the recyclebin is enabled), false otherwise.
 159   */
 160  function tool_recyclebin_course_module_background_deletion_recommended() {
 161      if (\tool_recyclebin\course_bin::is_enabled()) {
 162          return true;
 163      }
 164  }
 165  
 166  /**
 167   * Hook called before we delete a course.
 168   *
 169   * @param \stdClass $course The course record.
 170   */
 171  function tool_recyclebin_pre_course_delete($course) {
 172      // It is possible that the course deletion which triggered this hook
 173      // was from an in progress course restore. In that case we do not want
 174      // it in the recycle bin.
 175      if (isset($course->deletesource) && $course->deletesource == 'restore') {
 176          return;
 177      }
 178      // Delete all the items in the course recycle bin, regardless if it enabled or not.
 179      // It may have been enabled, then disabled later on, so may still have content.
 180      $coursebin = new \tool_recyclebin\course_bin($course->id);
 181      $coursebin->delete_all_items();
 182  
 183      if (\tool_recyclebin\category_bin::is_enabled()) {
 184          $categorybin = new \tool_recyclebin\category_bin($course->category);
 185          $categorybin->store_item($course);
 186      }
 187  }
 188  
 189  /**
 190   * Hook called before we delete a category.
 191   *
 192   * @param \stdClass $category The category record.
 193   */
 194  function tool_recyclebin_pre_course_category_delete($category) {
 195      // Delete all the items in the category recycle bin, regardless if it enabled or not.
 196      // It may have been enabled, then disabled later on, so may still have content.
 197      $categorybin = new \tool_recyclebin\category_bin($category->id);
 198      $categorybin->delete_all_items();
 199  }
 200  
 201  /**
 202   * Map icons for font-awesome themes.
 203   */
 204  function tool_recyclebin_get_fontawesome_icon_map() {
 205      return [
 206          'tool_recyclebin:trash' => 'fa-trash'
 207      ];
 208  }