/** * 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; }
/** * 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; }
/** * 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(); } }