function forumng_delete_instance($id) { global $DB; require_once dirname(__FILE__) . '/mod_forumng.php'; $cm = get_coursemodule_from_instance('forumng', $id); $forum = mod_forumng::get_from_id($id, mod_forumng::CLONE_DIRECT, true, $cm); $forum->delete_all_data(); if (mod_forumng::search_installed()) { $cm = $forum->get_course_module(); local_ousearch_document::delete_module_instance_data($cm); } if ($forum->is_shared()) { // Find all the clone instances. $clones = $forum->get_clone_details(); $transaction = $DB->start_delegated_transaction(); foreach ($clones as $clone) { try { course_delete_module($clone->context->instanceid); } catch (moodle_exception $e) { notify("Could not delete the Clone\n forumng (coursemoduleid) {$clone->context}->instanceid "); return false; } rebuild_course_cache($clone->courseid, true); } $transaction->allow_commit(); } return $DB->delete_records('forumng', array('id' => $id)); }
function ouwiki_delete_instance($id) { global $DB, $CFG; require_once $CFG->dirroot . '/mod/ouwiki/locallib.php'; $cm = get_coursemodule_from_instance('ouwiki', $id, 0, false, MUST_EXIST); // Delete associated template data. $context = context_module::instance($cm->id); $fs = get_file_storage(); $fs->delete_area_files($context->id, 'mod_ouwiki', 'template', $id); // Delete search data if (ouwiki_search_installed()) { local_ousearch_document::delete_module_instance_data($cm); } // Delete grade $ouwiki = $DB->get_record('ouwiki', array('id' => $cm->instance)); ouwiki_grade_item_delete($ouwiki); // Subqueries that find all versions and pages associated with this wiki // and delete them all bottom up $versions = $DB->get_records_sql("SELECT DISTINCT v.id\n FROM {ouwiki_subwikis} s\n INNER JOIN {ouwiki_pages} p ON p.subwikiid = s.id\n INNER JOIN {ouwiki_versions} v ON v.pageid = p.id\n WHERE s.wikiid = ?", array($id)); if (!empty($versions)) { list($vsql, $vparams) = $DB->get_in_or_equal(array_keys($versions)); $DB->delete_records_select('ouwiki_links', "fromversionid {$vsql}", $vparams); } $pages = $DB->get_records_sql("SELECT p.id\n FROM {ouwiki_subwikis} s\n INNER JOIN {ouwiki_pages} p ON p.subwikiid = s.id\n WHERE s.wikiid = ?", array($id)); if (!empty($pages)) { list($psql, $pparams) = $DB->get_in_or_equal(array_keys($pages)); $DB->delete_records_select('ouwiki_versions', "pageid {$psql}", $pparams); $DB->delete_records_select('ouwiki_locks', "pageid {$psql}", $pparams); $DB->delete_records_select('ouwiki_sections', "pageid {$psql}", $pparams); } $subwikis = $DB->get_records_sql("SELECT s.id\n FROM {ouwiki_subwikis} s\n WHERE s.wikiid = ?", array($id)); if (!empty($subwikis)) { list($swsql, $swparams) = $DB->get_in_or_equal(array_keys($subwikis)); $DB->delete_records_select('ouwiki_pages', "subwikiid {$swsql}", $swparams); } $DB->delete_records_select('ouwiki_subwikis', 'wikiid = ?', array($id)); $DB->delete_records('ouwiki', array('id' => $id)); return true; }
/** * Tests the delete_all_for_cm function. */ public function test_delete_all_for_cm() { global $DB; $this->resetAfterTest(); $course = $this->getDataGenerator()->create_course(); // Create a couple of documents for a specific course-module. $doc = new local_ousearch_document(); $cm1 = (object) array('id' => 15, 'course' => $course->id); $doc->init_module_instance('frog', $cm1); $doc->set_int_refs(7); $doc->update('Document title', 'Document'); $doc = new local_ousearch_document(); $doc->init_module_instance('frog', $cm1); $doc->set_int_refs(3); $doc->update('Document title', 'Document'); // And one document for another one. $doc = new local_ousearch_document(); $cm2 = (object) array('id' => 14, 'course' => $course->id); $doc->init_module_instance('frog', $cm2); $doc->update('Document title', 'Document'); // 3 documents now. $this->assertEquals(3, $DB->count_records('local_ousearch_documents')); // Delete all for cm. local_ousearch_document::delete_module_instance_data($cm1); // 1 document now. $this->assertEquals(1, $DB->count_records('local_ousearch_documents')); }
/** * Update all documents for ousearch. * * If specified, the progress object should be ready to receive indeterminate * progress calls. * * @param bool $feedback If true, prints feedback as HTML list items * @param int $courseid If specified, restricts to particular courseid * @param int $cmid If specified, restricts to particular cmid * @param \core\progress\base $progress Set to a progress object or null */ public static function search_update_all($feedback = false, $courseid = 0, $cmid = 0, \core\progress\base $progress = null) { global $DB; raise_memory_limit(MEMORY_EXTRA); // If cmid is specified, only retrieve that one if ($cmid) { $cmrestrict = "cm.id = ? AND"; $cmrestrictparams = array($cmid); } else { $cmrestrict = ''; $cmrestrictparams = array(); } // Get module-instances that need updating $cms = $DB->get_records_sql("\nSELECT\n cm.id, cm.course, cm.instance, f.name\nFROM\n {forumng} f\n INNER JOIN {course_modules} cm ON cm.instance = f.id\nWHERE\n {$cmrestrict}\n cm.module = (SELECT id FROM {modules} m WHERE name = 'forumng')" . ($courseid ? " AND f.course = ?" : ''), array_merge($cmrestrictparams, $courseid ? array($courseid) : array())); // Print count if ($feedback && !$cmid) { print '<li>' . get_string('search_update_count', 'forumng', '<strong>' . count($cms) . '</strong>') . '</li>'; } // This can take a while, so let's be sure to have a long time limit. $timelimitbefore = 300; // Loop around updating foreach ($cms as $cm) { $transaction = $DB->start_delegated_transaction(); // Wipe existing search data, if any local_ousearch_document::delete_module_instance_data($cm); // Get all discussions for this forum $discussions = $DB->get_records('forumng_discussions', array('forumngid' => $cm->instance), '', 'id, postid'); if ($feedback) { print '<li><strong>' . $cm->name . '</strong> (' . count($discussions) . '):'; } // Process each discussion foreach ($discussions as $discussionrec) { // Ignore discussion with no postid // (This should not happen, where ther is a $discussionrec->id // it also shopuld have a $discussionrec->postid. This if-statement // fixes bug 10497 and would not have any side-effect.) if (!$discussionrec->postid) { continue; } set_time_limit($timelimitbefore); $discussion = mod_forumng_discussion::get_from_id($discussionrec->id, self::CLONE_DIRECT, -1); $root = $discussion->get_root_post(); $root->search_update(); $root->search_update_children(); $root = null; if ($feedback) { echo '. '; flush(); } if ($progress) { $progress->progress(\core\progress\base::INDETERMINATE); } } $transaction->allow_commit(); if ($feedback) { print '</li>'; } } }
/** * Given an ID of an instance of this module, this function will * permanently delete the instance and any data that depends on it. * * @param int $id The ID of the module instance * @return boolena true on success, false on failure. */ function oublog_delete_instance($oublogid) { global $DB, $CFG; if (!($oublog = $DB->get_record('oublog', array('id' => $oublogid)))) { return false; } if ($oublog->global) { print_error('deleteglobalblog', 'oublog'); } if ($instances = $DB->get_records('oublog_instances', array('oublogid' => $oublog->id))) { foreach ($instances as $oubloginstancesid => $bloginstance) { // tags $DB->delete_records('oublog_taginstances', array('oubloginstancesid' => $oubloginstancesid)); if ($posts = $DB->get_records('oublog_posts', array('oubloginstancesid' => $oubloginstancesid))) { foreach ($posts as $postid => $post) { // comments $DB->delete_records('oublog_comments', array('postid' => $postid)); // edits $DB->delete_records('oublog_edits', array('postid' => $postid)); } // posts $DB->delete_records('oublog_posts', array('oubloginstancesid' => $oubloginstancesid)); } } } // links $DB->delete_records('oublog_links', array('oublogid' => $oublog->id)); // instances $DB->delete_records('oublog_instances', array('oublogid' => $oublog->id)); // Fulltext search data require_once dirname(__FILE__) . '/locallib.php'; if (oublog_search_installed()) { $moduleid = $DB->get_field('modules', 'id', array('name' => 'oublog')); $cm = $DB->get_record('course_modules', array('module' => $moduleid, 'instance' => $oublog->id)); if (!$cm) { print_error('invalidcoursemodule'); } local_ousearch_document::delete_module_instance_data($cm); } oublog_grade_item_delete($oublog); // oublog return $DB->delete_records('oublog', array('id' => $oublog->id)); }