예제 #1
0
/**
* search standard API
* @uses $DB
* @param reference $forum a forum instance
* @return an array of searchable documents
*/
function forum_get_content_for_index(&$forum)
{
    global $DB;
    $documents = array();
    if (!$forum) {
        return $documents;
    }
    $posts = forum_get_discussions_fast($forum->id);
    mtrace("Found " . count($posts) . " discussions to analyse in forum " . $forum->name);
    if (!$posts) {
        return $documents;
    }
    $coursemodule = $DB->get_field('modules', 'id', array('name' => 'forum'));
    $cm = $DB->get_record('course_modules', array('course' => $forum->course, 'module' => $coursemodule, 'instance' => $forum->id));
    $context = get_context_instance(CONTEXT_MODULE, $cm->id);
    foreach ($posts as $aPost) {
        $aPost->itemtype = 'head';
        if ($aPost) {
            if (!empty($aPost->message)) {
                echo "*";
                $documents[] = new ForumSearchDocument(get_object_vars($aPost), $forum->id, $forum->course, 'head', $context->id);
            }
            if ($children = forum_get_child_posts_fast($aPost->id, $forum->id)) {
                foreach ($children as $aChild) {
                    echo ".";
                    $aChild->itemtype = 'post';
                    if (strlen($aChild->message) > 0) {
                        $documents[] = new ForumSearchDocument(get_object_vars($aChild), $forum->id, $forum->course, 'post', $context->id);
                    }
                }
            }
        }
    }
    mtrace("Finished discussion");
    return $documents;
}
예제 #2
0
/**
* search standard API
* @param forum a forum instance
* @return an array of searchable documents
*/
function forum_get_content_for_index(&$forum)
{
    $documents = array();
    if (!$forum) {
        return $documents;
    }
    $posts = forum_get_discussions_fast($forum->id);
    if (!$posts) {
        return $documents;
    }
    $coursemodule = get_field('modules', 'id', 'name', 'forum');
    $cm = get_record('course_modules', 'course', $forum->course, 'module', $coursemodule, 'instance', $forum->id);
    $context = get_context_instance(CONTEXT_MODULE, $cm->id);
    foreach ($posts as $aPost) {
        $aPost->itemtype = 'head';
        if ($aPost) {
            if (strlen($aPost->message) > 0) {
                $documents[] = new ForumSearchDocument(get_object_vars($aPost), $forum->id, $forum->course, 'head', $context->id);
            }
            if ($children = forum_get_child_posts_fast($aPost->id, $forum->id)) {
                foreach ($children as $aChild) {
                    $aChild->itemtype = 'post';
                    if (strlen($aChild->message) > 0) {
                        $documents[] = new ForumSearchDocument(get_object_vars($aChild), $forum->id, $forum->course, 'post', $context->id);
                    }
                }
            }
        }
    }
    return $documents;
}
예제 #3
0
/**
 * recursively calls forum_get_child_posts_fast()
 * @return array of whole generation of descendants of a parent post.
 *
 */
function forum_get_child_posts_fast_recurse($parent_id, $forum_id, $recursing = false)
{
    $children = forum_get_child_posts_fast($parent_id, $forum_id);
    // we have children to return, but
    if (count($children) > 0) {
        // first lets check if there are any children under them.
        $foundchildren = array();
        foreach ($children as $child) {
            $subchildren = forum_get_child_posts_fast_recurse($child->id, $forum_id, true);
            $foundchildren = array_merge($foundchildren, $subchildren);
        }
        // merge found children into their parents.
        $allchildren = array_merge($children, $foundchildren);
        return $allchildren;
    } else {
        return array();
    }
}