From 30836b17daa3c42a9314c63bf5d372a993614504 Mon Sep 17 00:00:00 2001 From: Adrian Greeve Date: Thu, 1 Oct 2015 14:37:56 +0800 Subject: [PATCH] MDL-49028 mod_wiki: Fully reset wiki pages. All the wiki pages as well as comments and tags can now be reset. A thank you to Daniel Kosinski and Pascal Maury for providing patches for this improvement. --- mod/wiki/lang/en/wiki.php | 1 + mod/wiki/lib.php | 61 +++++++++++++++++++++++++++------------ 2 files changed, 44 insertions(+), 18 deletions(-) diff --git a/mod/wiki/lang/en/wiki.php b/mod/wiki/lang/en/wiki.php index ea2ebccf303..6e07e93888b 100644 --- a/mod/wiki/lang/en/wiki.php +++ b/mod/wiki/lang/en/wiki.php @@ -43,6 +43,7 @@ $string['defaultformat_help'] = 'This setting determines the default format used * HTML - The HTML editor is available * Creole - A common wiki markup language for which a small edit toolbar is available * Nwiki - Mediawiki-like markup language used in the contributed Nwiki module'; +$string['deleteallpages'] = 'Delete all wiki pages'; $string['deletecomment'] = 'Deleting comment'; $string['deletecommentcheck'] = 'Delete comment'; $string['deletecommentcheckfull'] = 'Are you sure you want to delete the comment?'; diff --git a/mod/wiki/lib.php b/mod/wiki/lib.php index 31298ab5acd..c48ad75e2a8 100644 --- a/mod/wiki/lib.php +++ b/mod/wiki/lib.php @@ -145,6 +145,7 @@ function wiki_reset_userdata($data) { global $CFG,$DB; require_once($CFG->dirroot . '/mod/wiki/pagelib.php'); require_once($CFG->dirroot . '/tag/lib.php'); + require_once($CFG->dirroot . "/mod/wiki/locallib.php"); $componentstr = get_string('modulenameplural', 'wiki'); $status = array(); @@ -156,33 +157,56 @@ function wiki_reset_userdata($data) { $errors = false; foreach ($wikis as $wiki) { - // remove all comments - if (!empty($data->reset_wiki_comments)) { - if (!$cm = get_coursemodule_from_instance('wiki', $wiki->id)) { - continue; - } - $context = context_module::instance($cm->id); - $DB->delete_records_select('comments', "contextid = ? AND commentarea='wiki_page'", array($context->id)); - $status[] = array('component'=>$componentstr, 'item'=>get_string('deleteallcomments'), 'error'=>false); + if (!$cm = get_coursemodule_from_instance('wiki', $wiki->id)) { + continue; } + $context = context_module::instance($cm->id); - if (!empty($data->reset_wiki_tags)) { - # Get subwiki information # - $subwikis = $DB->get_records('wiki_subwikis', array('wikiid' => $wiki->id)); + // Remove tags or all pages. + if (!empty($data->reset_wiki_pages) || !empty($data->reset_wiki_tags)) { + + // Get subwiki information. + $subwikis = wiki_get_subwikis($wiki->id); foreach ($subwikis as $subwiki) { - if ($pages = $DB->get_records('wiki_pages', array('subwikiid' => $subwiki->id))) { - foreach ($pages as $page) { - $tags = tag_get_tags_array('wiki_pages', $page->id); - foreach ($tags as $tagid => $tagname) { - // Delete the related tag_instances related to the wiki page. - $errors = tag_delete_instance('wiki_pages', $page->id, $tagid); - $status[] = array('component' => $componentstr, 'item' => get_string('tagsdeleted', 'wiki'), 'error' => $errors); + // Get existing pages. + if ($pages = wiki_get_page_list($subwiki->id)) { + if (!empty($data->reset_wiki_tags)) { + // Go through each page and delete the tags. + foreach ($pages as $page) { + + $tags = tag_get_tags_array('wiki_pages', $page->id); + foreach ($tags as $tagid => $tagname) { + // Delete the related tag_instances related to the wiki page. + $errors = tag_delete_instance('wiki_pages', $page->id, $tagid); + $status[] = array('component' => $componentstr, 'item' => get_string('tagsdeleted', 'wiki'), + 'error' => $errors); + } } + } else { + // Delete pages. + wiki_delete_pages($context, $pages, $subwiki->id); } } + if (!empty($data->reset_wiki_pages)) { + // Delete any subwikis. + $DB->delete_records('wiki_subwikis', array('id' => $subwiki->id), IGNORE_MISSING); + + // Delete any attached files. + $fs = get_file_storage(); + $fs->delete_area_files($context->id, 'mod_wiki', 'attachments'); + + $status[] = array('component' => $componentstr, 'item' => get_string('deleteallpages', 'wiki'), + 'error' => $errors); + } } } + + // Remove all comments. + if (!empty($data->reset_wiki_comments) || !empty($data->reset_wiki_pages)) { + $DB->delete_records_select('comments', "contextid = ? AND commentarea='wiki_page'", array($context->id)); + $status[] = array('component' => $componentstr, 'item' => get_string('deleteallcomments'), 'error' => false); + } } return $status; } @@ -190,6 +214,7 @@ function wiki_reset_userdata($data) { function wiki_reset_course_form_definition(&$mform) { $mform->addElement('header', 'wikiheader', get_string('modulenameplural', 'wiki')); + $mform->addElement('advcheckbox', 'reset_wiki_pages', get_string('deleteallpages', 'wiki')); $mform->addElement('advcheckbox', 'reset_wiki_tags', get_string('removeallwikitags', 'wiki')); $mform->addElement('advcheckbox', 'reset_wiki_comments', get_string('deleteallcomments')); } -- 2.17.1