Exemplo n.º 1
0
function display_forums($parent = 0, $display_moderators = TRUE)
{
    global $db, $board_config, $lang, $images, $userdata, $CPG_SESS, $module_name;
    $tracking_topics = isset($CPG_SESS[$module_name]['track_topics']) ? $CPG_SESS[$module_name]['track_topics'] : array();
    $tracking_forums = isset($CPG_SESS[$module_name]['track_forums']) ? $CPG_SESS[$module_name]['track_forums'] : array();
    # Find which forums are visible for this user
    $tmp_forums = $db->sql_ufetchrowset('SELECT forum_id, auth_view FROM ' . FORUMS_TABLE, SQL_ASSOC);
    $is_auth_ary = auth(AUTH_VIEW, AUTH_LIST_ALL, $userdata, $tmp_forums);
    $c = count($tmp_forums);
    $forums = array();
    for ($i = 0; $i < $c; ++$i) {
        if ($is_auth_ary[$tmp_forums[$i]['forum_id']]['auth_view']) {
            $forums[] = $tmp_forums[$i]['forum_id'];
        }
    }
    if (0 === count($forums)) {
        return array();
    }
    unset($tmp_forums);
    $forums = implode(',', $forums);
    # Define appropriate SQL
    //$where = $parent ? 'AND f.parent_id='.$parent : '';
    $where = '';
    switch (SQL_LAYER) {
        case 'oracle':
            $sql = 'SELECT f.*, p.post_time, p.post_username, u.username, u.user_id
					FROM ' . FORUMS_TABLE . ' f, ' . POSTS_TABLE . ' p, ' . USERS_TABLE . ' u
					WHERE p.post_id = f.forum_last_post_id(+)
						AND u.user_id = p.poster_id(+)
					ORDER BY f.cat_id, f.forum_order';
            break;
        default:
            $sql = 'SELECT f.*, p.post_time, p.post_username, u.username, u.user_id
					FROM (( ' . FORUMS_TABLE . ' f
					LEFT JOIN ' . POSTS_TABLE . ' p ON p.post_id = f.forum_last_post_id )
					LEFT JOIN ' . USERS_TABLE . ' u ON u.user_id = p.poster_id )
					WHERE f.forum_id IN (' . $forums . ') ' . $where . '
					ORDER BY f.cat_id, f.forum_order';
            break;
    }
    $result = $db->sql_query($sql);
    # Save a copy of child forums
    $forums = $childs = array();
    while ($row = $db->sql_fetchrow($result, SQL_ASSOC)) {
        if (!$parent && 0 < $row['parent_id']) {
            $childs[$row['parent_id']][] = $row;
        } elseif ($parent && $row['parent_id'] != $parent) {
            $childs[$row['parent_id']][] = $row;
        } else {
            $forums[] = $row;
        }
        /*	# Lanzer speedup
        		if ($row['post_time'] > $userdata['user_lastvisit']) {
        			$new_topic_data[$row['forum_id']][$row['topic_id']] = $row['post_time'];
        		}	*/
    }
    $db->sql_freeresult($result);
    # Obtain a list of topic ids which contain posts made since user last visited
    if (is_user()) {
        $lastvisit = $userdata['user_lastvisit'];
        if (isset($CPG_SESS[$module_name]['track_all'])) {
            $lastvisit = $CPG_SESS[$module_name]['track_all'];
        }
        $result = $db->sql_query('SELECT t.forum_id, t.topic_id, p.post_time
				FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . ' p
				WHERE p.post_id = t.topic_last_post_id
					AND p.post_time > ' . $lastvisit . '
					AND t.topic_moved_id = 0
				ORDER BY p.post_time DESC');
        $new_topic_data = array();
        while ($topic_data = $db->sql_fetchrow($result, SQL_ASSOC)) {
            $forum_id = $topic_data['forum_id'];
            if (empty($new_topic_data[$forum_id])) {
                if (empty($tracking_topics[$topic_data['topic_id']])) {
                    $new_topic_data[$forum_id] = true;
                } elseif ($tracking_topics[$topic_data['topic_id']] < $topic_data['post_time']) {
                    $new_topic_data[$forum_id] = true;
                }
                if (!empty($tracking_forums[$forum_id])) {
                    $new_topic_data[$forum_id] = $tracking_forums[$forum_id] < $topic_data['post_time'];
                }
            }
        }
        $db->sql_freeresult($result);
    }
    $moderators = $display_moderators ? BoardCache::moderators() : array();
    $c = count($forums);
    for ($i = 0; $i < $c; ++$i) {
        $forum_id = $forums[$i]['forum_id'];
        $forums[$i]['subforums'] = '';
        $forums[$i]['subforums_list'] = '';
        $forums[$i]['subforums_lang'] = '';
        $ftopics = $forums[$i]['forum_topics'];
        $fposts = $forums[$i]['forum_posts'];
        if ($forums[$i]['forum_type'] >= 2) {
            $folder_image = $images['forum_link'];
            $folder_alt = 'link';
        } else {
            if ($forums[$i]['forum_status'] == FORUM_LOCKED) {
                $folder_image = $images['forum_locked'];
                $folder_alt = $lang['Forum_locked'];
            } else {
                $unread_topics = false;
                if (is_user()) {
                    $unread_topics = !empty($new_topic_data[$forum_id]);
                }
                if (!empty($childs[$forum_id])) {
                    $forums[$i]['subforums'] = $childs[$forum_id];
                    $subforums = array();
                    foreach ($childs[$forum_id] as $subforum) {
                        $ftopics += $subforum['forum_topics'];
                        $fposts += $subforum['forum_posts'];
                        if ($subforum['parent_id'] == $forum_id) {
                            if ($subforum['forum_type'] == 2) {
                                $subforums[] = '<a href="' . URL::index($subforum['forum_link']) . '">' . $subforum['forum_name'] . '</a>';
                            } elseif ($subforum['forum_type'] == 3) {
                                $subforums[] = '<a href="' . $subforum['forum_link'] . '">' . $subforum['forum_name'] . '</a>';
                            } else {
                                $subforums[] = '<a href="' . URL::index($module_name . '&amp;viewforum&amp;f=' . $subforum['forum_id']) . '">' . $subforum['forum_name'] . '</a>';
                            }
                        }
                        if ($subforum['post_time'] > $forum_id['post_time'] && $subforum['post_time'] > $forums[$i]['post_time']) {
                            $forums[$i]['post_time'] = $subforum['post_time'];
                            $forums[$i]['username'] = $subforum['username'];
                            $forums[$i]['user_id'] = $subforum['user_id'];
                            $forums[$i]['forum_last_post_id'] = $subforum['forum_last_post_id'];
                        }
                    }
                    $forums[$i]['subforums_list'] = implode(', ', $subforums);
                    $forums[$i]['subforums_lang'] = count($subforums) == 1 ? $lang['Subforum'] : $lang['Subforums'];
                }
                if ($forums[$i]['forum_type'] == 1) {
                    $folder_image = $unread_topics ? $images['forum_new_sub'] : $images['forum_sub'];
                } else {
                    $folder_image = $unread_topics ? $images['forum_new'] : $images['forum'];
                }
                $folder_alt = $unread_topics ? $lang['New_posts'] : $lang['No_new_posts'];
            }
        }
        if (isset($moderators[$forum_id])) {
            $l_moderators = count($moderators[$forum_id]) === 1 ? $lang['Moderator'] : $lang['Moderators'];
            $moderator_list = implode(', ', $moderators[$forum_id]);
        } else {
            $l_moderators = '';
            $moderator_list = '';
        }
        $forums[$i]['post_username'] = $forums[$i]['post_username'] ? $forums[$i]['post_username'] : $lang['Guest'];
        $forums[$i]['folder_image'] = $folder_image;
        $forums[$i]['folder_alt'] = $folder_alt;
        $forums[$i]['l_moderators'] = $l_moderators;
        $forums[$i]['moderator_list'] = $moderator_list;
        $forums[$i]['forum_topics'] = $ftopics;
        $forums[$i]['forum_posts'] = $fposts;
    }
    return $forums;
}
Exemplo n.º 2
0
//
if ($is_auth['auth_mod'] && $board_config['prune_enable']) {
    if ($forum_row['prune_next'] < time() && $forum_row['prune_enable']) {
        require_once 'includes/phpBB/prune.php';
        require_once 'includes/phpBB/functions_admin.php';
        auto_prune($forum_id);
    }
}
//
// End of forum prune
//
//
// Obtain list of moderators of each forum
// First users, then groups ... broken into two queries
//
$moderators = BoardCache::moderators($forum_id);
$l_moderators = count($moderators) === 1 ? $lang['Moderator'] : $lang['Moderators'];
$moderators = !empty($moderators) ? implode(', ', $moderators) : $lang['None'];
// Moderators: None
# Generate a 'Show topics in previous x days' select box. If the topicsdays var is sent
# then get it's value, find the number of topics with dates newer than it (to properly
# handle pagination) and alter the main query
$previous_days = array(0, 1, 7, 14, 30, 91, 182, 364);
$previous_days_text = array($lang['All_Topics'], $lang['1_Day'], $lang['7_Days'], $lang['2_Weeks'], $lang['1_Month'], $lang['3_Months'], $lang['6_Months'], $lang['1_Year']);
if (!empty($_POST['topicdays']) || !empty($_GET['topicdays'])) {
    $topic_days = intval(empty($_POST['topicdays']) ? $_GET['topicdays'] : $_POST['topicdays']);
    $min_topic_time = time() - $topic_days * 86400;
    $sql = "SELECT COUNT(t.topic_id) AS forum_topics\n\t\t\tFROM " . TOPICS_TABLE . " t, " . POSTS_TABLE . " p\n\t\t\tWHERE t.forum_id = {$forum_id}\n\t\t\t\tAND p.post_id = t.topic_last_post_id\n\t\t\t\tAND p.post_time >= {$min_topic_time}";
    $result = $db->sql_query($sql);
    $row = $db->sql_fetchrow($result, SQL_ASSOC);
    $db->sql_freeresult($result);