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>';
         }
     }
 }