예제 #1
0
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));
}
예제 #2
0
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'));
 }
예제 #4
0
 /**
  * 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>';
         }
     }
 }
예제 #5
0
/**
 * 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));
}