function forumng_delete_instance($id, $ociskip = true) { require_once dirname(__FILE__) . '/forum.php'; try { $forum = forum::get_from_id($id, forum::CLONE_DIRECT); // avoid deleting OCI specific forum if running in upload block if ($ociskip) { global $restore; if (isset($restore) && $restore->restoreto == 0 && strpos($_SERVER['HTTP_REFERER'], 'blocks/versions/upload.php') !== false) { if ($forum->get_name() == get_string('newunitforumname', 'createcourse')) { //Unit forum echo ' found forumng ' . $forum->get_id() . ' ' . $forum->get_name(); return true; } } } $forum->delete_all_data(); if (forum::search_installed()) { $cm = $forum->get_course_module(); ousearch_document::delete_module_instance_data($cm); } } catch (Exception $e) { return false; } return delete_records('forumng', 'id', $id); }
function ouwiki_delete_instance($id) { if (ouwiki_search_installed()) { $moduleid = get_field('modules', 'id', 'name', 'ouwiki'); $cm = get_record('course_modules', 'module', $moduleid, 'instance', $id); if (!$cm) { error('Can\'t find coursemodule'); } ousearch_document::delete_module_instance_data($cm); } global $CFG; // Subqueries that find all versions and pages associated with this wiki $versionquery = "\nSELECT\n v.id\nFROM\n {$CFG->prefix}ouwiki_subwikis s\n INNER JOIN {$CFG->prefix}ouwiki_pages p ON p.subwikiid=s.id\n INNER JOIN {$CFG->prefix}ouwiki_versions v ON v.pageid=p.id\nWHERE\n s.wikiid={$id}"; $sectionquery = "\nSELECT\n sc.id\nFROM\n {$CFG->prefix}ouwiki_subwikis s\n INNER JOIN {$CFG->prefix}ouwiki_pages p ON p.subwikiid=s.id\n INNER JOIN {$CFG->prefix}ouwiki_sections sc ON sc.pageid=p.id\nWHERE\n s.wikiid={$id}"; $pagequery = "\nSELECT\n p.id\nFROM\n {$CFG->prefix}ouwiki_subwikis s\n INNER JOIN {$CFG->prefix}ouwiki_pages p ON p.subwikiid=s.id\nWHERE\n s.wikiid={$id}"; $subwikiquery = "\nSELECT\n s.id\nFROM\n {$CFG->prefix}ouwiki_subwikis s\nWHERE\n s.wikiid={$id}"; // Delete everything, bottom-up $ok = true; $ok = delete_records_select('ouwiki_links', "fromversionid IN ({$versionquery})") && $ok; $ok = delete_records_select('ouwiki_comments', "sectionid IN ({$sectionquery})") && $ok; $ok = delete_records_select('ouwiki_versions', "pageid IN ({$pagequery})") && $ok; $ok = delete_records_select('ouwiki_locks', "pageid IN ({$pagequery})") && $ok; $ok = delete_records_select('ouwiki_sections', "pageid IN ({$pagequery})") && $ok; $ok = delete_records_select('ouwiki_pages', "subwikiid IN ({$subwikiquery})") && $ok; $ok = delete_records_select('ouwiki_subwikis', "wikiid={$id}") && $ok; $ok = delete_records("ouwiki", "id", "{$id}") && $ok; return $ok; }
/** * 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) { if (!($oublog = get_record('oublog', 'id', $oublogid))) { return false; } if ($oublog->global) { error('You can\'t delete the global blog'); } if ($instances = get_records('oublog_instances', 'oublogid', $oublog->id)) { foreach ($instances as $oubloginstancesid => $bloginstance) { // tags delete_records('oublog_taginstances', 'oubloginstancesid', $oubloginstancesid); if ($posts = get_records('oublog_posts', 'oubloginstancesid', $oubloginstancesid)) { foreach ($posts as $postid => $post) { // comments delete_records('oublog_comments', 'postid', $postid); // edits delete_records('oublog_edits', 'postid', $postid); } // posts delete_records('oublog_posts', 'oubloginstancesid', $oubloginstancesid); } } } // links delete_records('oublog_links', 'oublogid', $oublog->id); // instances delete_records('oublog_instances', 'oublogid', $oublog->id); // Fulltext search data require_once dirname(__FILE__) . '/locallib.php'; if (oublog_search_installed()) { $moduleid = get_field('modules', 'id', 'name', 'oublog'); $cm = get_record('course_modules', 'module', $moduleid, 'instance', $oublog->id); if (!$cm) { error('Can\'t find coursemodule'); } ousearch_document::delete_module_instance_data($cm); } // oublog return delete_records('oublog', 'id', $oublog->id); }
/** * Update all documents for ousearch. * @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 */ static function search_update_all($feedback = false, $courseid = 0, $cmid = 0) { global $CFG; // If cmid is specified, only retrieve that one if ($cmid) { $cmrestrict = "cm.id = {$cmid} AND"; } else { $cmrestrict = ''; } // Get module-instances that need updating $cms = get_records_sql("\nSELECT\n cm.id, cm.course, cm.instance, f.name\nFROM\n {$CFG->prefix}forumng f\n INNER JOIN {$CFG->prefix}course_modules cm ON cm.instance=f.id\nWHERE\n {$cmrestrict}\n cm.module = (SELECT id FROM {$CFG->prefix}modules m WHERE name='forumng')" . ($courseid ? " AND f.course={$courseid}" : '')); $cms = $cms ? $cms : 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 reset the time limit. // Store the existing limit; we will set this existing value again // each time around the loop. Note: Despite the name, ini_get returns // the most recently set time limit, not the one from php.ini. $timelimitbefore = ini_get('max_execution_time'); // Loop around updating foreach ($cms as $cm) { forum_utils::start_transaction(); // Wipe existing search data, if any ousearch_document::delete_module_instance_data($cm); // Get all discussions for this forum $discussions = get_records('forumng_discussions', 'forumid', $cm->instance, '', 'id, postid'); $discussions = $discussions ? $discussions : array(); 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 = forum_discussion::get_from_id($discussionrec->id, forum::CLONE_DIRECT, -1); $root = $discussion->get_root_post(); $root->search_update(); $root->search_update_children(); print '. '; flush(); } forum_utils::finish_transaction(); if ($feedback) { print '</li>'; } } }