$result = $db->sql_query($sql, 3600); $forum_name = $db->sql_fetchfield('forum_name', 0, $result); $db->sql_freeresult($result); get_subforums($forum_ids[0], $forum_ids); } else { $only_cats = true; $subforums = array(); for ($i = 0; $i < ($size = sizeof($forum_ids)); $i++) { $sql = 'SELECT forum_type FROM ' . FORUMS_TABLE . ' WHERE forum_id = ' . $forum_ids[$i]; $result = $db->sql_query($sql, 3600); $forum_type = $db->sql_fetchfield('forum_type', 0, $result); $db->sql_freeresult($result); if ($forum_type == FORUM_CAT) { get_subforums($forum_ids[$i], $subforums); } else { if ($only_cats) { $only_cats = false; } } } $forum_ids = $subforums; } } } } // remove those without permissions or ask for login check_forum_ids($forum_ids); if (!sizeof($forum_ids)) { trigger_error('SYNDICATION_DISABLED');
/** * get all subforums of a specified forum */ function get_subforums($forum_id, &$forums) { global $auth, $db; $sql = 'SELECT forum_id, forum_type, left_id, right_id FROM ' . FORUMS_TABLE . "\n\t\tWHERE parent_id = {$forum_id}\n\t\t\tAND forum_type <> " . FORUM_LINK; $result = $db->sql_query($sql); while ($row = $db->sql_fetchrow($result)) { // postable forum and sufficent permissions if ($row['forum_type'] == FORUM_POST && $auth->acl_get('f_read', $row['forum_id']) && $auth->acl_get('f_syndication', $row['forum_id'])) { $forums[] = (int) $row['forum_id']; } if ($row['right_id'] - $row['left_id'] > 1) { get_subforums($row['forum_id'], $forums); } } $db->sql_freeresult($result); }