Affects Version/s: 2.9
Fix Version/s: None
If you delete an activity or resource in error there is now way to undo / recover the item.
The addition of a “recycle bin” would remedy this. This could be achieved by:
- Adding a deleted field to the course_modules table (course_modules.deleted) with a default value of 0 (not deleted and visible on the course)
- When an item is deleted this field is set with the current timestamp indicating it has been “deleted”
- Extend the course_delete_module function. When the function is first called, it checks if the deleted flag in course_modules is 0, if so then set course_modules.deleted = timenow. When the function is called again, if the flag is > 0 then the rest of the function will continue as normal, without interfering with the existing the processes
- Modify get_course_mods (lib\datalib.php) to exclude deleted items from rendering in the page (and test \ find other areas where the course modules are queried directly)
- Add a link to “recycle bin” in the course administration block
- Add a site admin setting “recycle_bin_retention (or similar) which would accept a value in days
- Add a routine to cron to call delete functions for all items where (timenow – timestamp) > retention period
- Users could delete activities / resources from a course as they do now
- Users could click a link in the course administration block to go to “recycle bin”
- The recycle bin would state “items recoverable for x days” at the top of the page (taken from admin setting)
- Recycle bin would list all recoverable items with:
- Activity / resource title (name)
- date deleted from course (course_modules.deleted timestamp)
- date to clear down (timestamp + retention period)
- button to permanently delete
- button to restore to course
Once items reached their expiry date they would automatically be cleared down by a cron process and removed from the list of recoverable items
We do not believe there would be any impact on course backup / restore beyond capturing the new course_modules.timestap database field as this code would not be checking the field. Thus any courses backed up / restored should do so with files in the recycle bin / “deleted” status.
We do not believe we need additional capabilities beyond course:manageactivites particularly as there are no existing capabilities relating specifically to deletion of activites / resources.
However it may make sense to add a capability for course:recycledelete (or similar) which would control the ability to permanently delete from the recycle bin interface leaving that part of the process to cron.