/** * 取得论坛板块的信息 * @param: NULL * @return: array * @access: private */ private function &getBBSLayout() { $bbs_layout = array(); $bbs_layout_id = LayoutUtil::getLayoutInfoByParentId($this->db); foreach ($bbs_layout_id as $rows) { $bbs_id = $rows['id']; $bbs_title = $rows['title']; //查询二级子论坛 $sub_bbs_layout_id = LayoutUtil::getLayoutInfoByParentId($this->db, $bbs_id); $sub_array = array(); foreach ($sub_bbs_layout_id as $sub_rows) { $sub_id = $sub_rows['id']; //注意:$sub_bbs_id是一个数组 $sub_bbs_id = array(); LayoutUtil::getChildId($this->db, $sub_id, $sub_bbs_id); array_push($sub_bbs_id, $sub_id); /** * 如果已经将论坛锁住,则不判断是否有新帖 */ /** * $layout_status == 0 || $layout_status is null 则为开放 * $layout_status == 1 则需要验证 * $layout_status == 2 则为关闭 */ $layout_status = LayoutUtil::getLayoutStatus($this->db, $sub_id); /** * 判断是否有新帖子 * 判断有新帖子的流程是: * 如果用户已经登录,则找出用户的作后动作的时间 * 如果用户没有登录,则显示没有新帖子 */ $image = 'nonewtopic.gif'; if ($layout_status == 2) { $image = 'lock.gif'; } else { if (LayoutUtil::isClosedbyParent($this->db, $sub_id)) { $image = 'lock.gif'; } else { if (isset($_SESSION['user'])) { if (LayoutUtil::haveNewTopic($this->db, $_SESSION['user']['name'], $sub_bbs_id)) { /** * 求出最后时间后,需要我们找出当前子论坛下各个子论坛的id */ $image = 'havenewtopic.gif'; } } } } //求出论坛及子论坛下面的查看的人数 $view_number = LayoutUtil::getViewNumber($this->db, $sub_bbs_id); //求出论坛和子论坛下的所有的主题 $topic_number = LayoutUtil::getTopicNumber($this->db, $sub_bbs_id); //求出论坛下所有的回复数 $reply_number = LayoutUtil::getReplyNumber($this->db, $sub_bbs_id); //求论坛里最后发表的帖子 $temp_rows = LayoutUtil::getLastPostTopic($this->db, $sub_id); $last_id = $temp_rows['id']; $last_title = $temp_rows['title']; $last_time = $temp_rows['last_access_date']; $last_time = set_locale_time($last_time); $short_title = utf8_substr($last_title, 0, 10); //求版主列表的字符串 $manager_list_array = LayoutUtil::getManagerList($this->db, $sub_id); $manager_str = ""; foreach ($manager_list_array as $temp_rows) { $manager_str .= "<option value=" . $temp_rows['user_id'] . ">"; $manager_str .= $temp_rows['user_name'] . "</option>\n"; } $sub_array[] = array('id' => $sub_rows['id'], 'title' => $sub_rows['title'], 'content' => ConvertString(stripslashes($sub_rows['description']), ROOT_URL, IMAGE_URL . 'express/'), 'image' => $image, 'viewnumber' => $view_number, 'topic_number' => $topic_number, 'reply_number' => $reply_number, 'topicid' => $last_id, 'topic_title' => $last_title, 'short_title' => $short_title, 'last_time' => $last_time, 'managerlist' => $manager_str); } $bbs_layout[] = array('id' => $bbs_id, 'title' => $bbs_title, 'subbbs' => $sub_array); } return $bbs_layout; }
/** * 取得查询后的帖子的情况 * @param: &$id Database Connection * @param: $id 论坛板块的id * @return; array * @acess: public * @static */ public static function &getCacheSubjectInfo(&$db, $pre_page, $offset_page, $q) { /*{{{*/ $sql = 'select id, title, author, subject_status, express, is_best, click_number, reply_number,' . ' last_access_date from bbs_subject ' . $q . ' order by last_access_date desc'; $info_array = array(); $res = $db->CacheSelectLimit(1800, $sql, $pre_page, $offset_page); $now_user_id = UserUtil::getUserId($db, $_SESSION['user']['name']); while ($rows = $res->FetchRow()) { $user_id = UserUtil::getUserId($db, $rows['author']); //看状态。 //==0, 开放 //==1, 需要验证 //==2, 帖子被关闭 //如果被关闭,则不需看是否有新帖 $status_image = 'no_topic.gif'; if ($rows['subject_status'] == 2) { $status_image = 'topic_lock.gif'; } else { if (!isset($_SESSION['user'])) { $status_iamge = 'no_topic.gif'; } else { if (TopicUtil::haveNewReply($db, $rows['id'], $now_user_id)) { $status_image = 'new_topic.gif'; } else { $status_image = 'no_topic.gif'; } } } $last_user_name = ''; $last_user_id = ''; $total_page = 0; $find_number = 0; if ($rows['reply_number'] > 0) { $temp_sql = 'select author from bbs_reply where subject_id=? order by id desc '; $temp_res = $db->SelectLimit($temp_sql, 1, 0, array($rows['id'])); $temp_rows = $temp_res->FetchRow(); $last_user_name = $temp_rows['author']; $last_user_id = UserUtil::getUserId($db, $last_user_name); $temp_sql = 'select count(*) as num from bbs_reply where subject_id=?'; $temp_sth = $db->Prepare($temp_sql); $temp_res = $db->Execute($temp_sth, array($rows['id'])); $temp_rows = $temp_res->FetchRow(); $total_number = $temp_rows['num']; $total_page = ceil(($total_number + 1) / 10); if ($total_page > 10) { $find_number = ($total_number + 1) % 10; } else { $find_number = $total_number + 1; } } $temp_sql = 'select count(*) as num from bbs_subject_attach where subject_id=?'; $temp_sth = $db->Prepare($temp_sql); $temp_res = $db->Execute($temp_sth, array($rows['id'])); $temp_rows = $temp_res->FetchRow(); $is_have_attach = $temp_rows['num']; $title = ""; if ($rows['is_best']) { $title .= " <font color=red>[" . LU_IS_BEST . "]</font>"; } $title .= $rows['title']; $info_array[] = array('image' => $status_image, 'id' => $rows['id'], 'title' => $title, 'have_new_reply' => $status_image == 'new_topic.gif' ? 1 : 0, 'userid' => $user_id, 'username' => $rows['author'], 'clicks_number' => $rows['click_number'], 'reply_number' => $rows['reply_number'], 'last_time' => set_locale_time($rows['last_access_date']), 'last_username' => $last_user_name, 'last_userid' => $last_user_id, 'last_page' => $total_page, 'last_number' => $find_number, 'have_attach' => $is_have_attach, 'express' => $rows['express']); } return $info_array; }
/** * 取得帖子的信息 * @param: &$db * @param: $id * @param: $pre_page * @param: $offset_page * @return: $topic_array * @access: public * @static */ public static function getTopicInfo(&$db, $id, $pre_page = 10, $offset_page = 0) { /*{{{*/ $topic_array = array(); $topic_status = self::getTopicStatus($db, $id); //如果显示第一页,则必须给出主题 if ($offset_page == 0) { $sql = 'select title, express, author, content, post_date, is_edit, ' . ' edit_user, edit_time, subject_status, is_best, is_top from bbs_subject where id=?'; $sth = $db->Prepare($sql); $res = $db->Execute($sth, array($id)); $rows = $res->FetchRow(); $posttime = set_locale_time($rows['post_date']); $user_name = $rows['author']; $user_id = UserUtil::getUserId($db, $user_name); $user_header = UserUtil::getUserHeader($db, $user_id); $user_info = UserUtil::getUserInfo($db, $user_id); $register_date = $user_info['register_date']; $user_level = $user_info['user_level']; $user_address = $user_info['user_hometown']; $user_topic_number = $user_info['user_topic']; $user_sign = ConvertString($user_info['user_sign'], ROOT_URL, IMAGE_URL . 'express/'); $is_edit = 0; $edit_user = ''; $edit_time = ''; if ($rows['is_edit']) { $is_edit = 1; $edit_user = $rows['edit_user']; $edit_time = $rows['edit_time']; } $user_online = UserUtil::isOnline($db, $user_id); $user_can_be_edit = 0; if (!$_SESSION['user']['name']) { $user_can_be_edit = 0; } else { if (strtolower($_SESSION['user']['name']) == strtolower($user_name)) { $user_can_be_edit = 1; } else { if (strtolower($_SESSION['user']['name']) != strtolower($user_name)) { //判断用户是否是这个版块的版主。 $dep = UserUtil::getUserDep($db, $_SESSION['user']['name']); if ($dep == 1 || $dep == 2) { $user_can_be_edit = 1; } else { if ($dep == 3) { $temp_layout_id = self::getLayoutId($db, $id); $user_can_be_edit = UserUtil::isThisLayoutAdmin($db, $id, $temp_layout_id, $_SESSION['user']['name']); } } } } } //判断是否有附件 //如果有附件,则使用代码替换 $content = ''; if ($topic_status == 2) { $content = TU_TOPIC_WAS_LOCKED; } else { $content = $rows['content'] . self::haveAttach($db, $id); if ($is_edit) { $attach_string = TU_SUB_TITLE . $edit_user . TU_FROM . $edit_time . TU_EDIT; $content .= "\n\n" . $attach_string; } } $title = $rows['title']; $title = htmlspecialchars($title); if ($rows['is_best']) { $title = "<font color=red>[" . BEST_LABEL . "]</font>" . $title; } if ($rows['is_top']) { $title = "<font color=red>[" . TOP_LABEL . "]</font>" . $title; } $topic_array[] = array('id' => $id, 'posttime' => $posttime, 'sort_number' => 1, 'user_name' => $user_name, 'user_id' => $user_id, 'user_header' => $user_header, 'user_sign' => $user_sign, 'register_date' => $register_date, 'user_level' => $user_level, 'user_address' => $user_address, 'user_topic_number' => $user_topic_number, 'title' => $title, 'content' => ConvertString($content, ROOT_URL, IMAGE_URL . 'express/'), 'online' => $user_online, 'can_be_edit' => $user_can_be_edit, 'is_topic' => 1, 'express' => $rows['express']); $pre_page = $pre_page - 1; } else { if ($offset_page >= 1) { $offset_page = $offset_page - 1; } } //再查回复的帖子 $sql = 'select id, title, express,author, content, post_date, is_edit, edit_user, ' . ' edit_time, reply_status from bbs_reply where subject_id=? ' . ' order by id asc'; $res = $db->SelectLimit($sql, $pre_page, $offset_page, array($id)); while ($rows = $res->FetchRow()) { $posttime = set_locale_time($rows['post_date']); $sort_number = $sort_begin; $user_name = $rows['author']; $user_id = UserUtil::getUserId($db, $user_name); $user_header = UserUtil::getUserHeader($db, $user_id); $user_info = UserUtil::getUserInfo($db, $user_id); $register_date = $user_info['register_date']; $user_level = $user_info['user_level']; $user_address = $user_info['user_hometown']; $user_topic_number = $user_info['user_topic']; $user_sign = ConvertString($user_info['user_sign'], ROOT_URL, IMAGE_URL . 'express/'); $is_edit = 0; $edit_user = ''; $edit_time = ''; if ($rows['is_edit']) { $is_edit = 1; $edit_user = $rows['edit_user']; $edit_time = $rows['edit_time']; } $user_online = UserUtil::isOnline($db, $user_id); $user_can_be_edit = 0; if (!$_SESSION['user']['name']) { $user_can_be_edit = 0; } else { if (strtolower($_SESSION['user']['name']) == strtolower($user_name)) { $user_can_be_edit = 1; } else { if (strtolower($_SESSION['user']['name']) != strtolower($user_name)) { //判断用户是否是这个版块的版主。 $dep = UserUtil::getUserDep($db, $_SESSION['user']['name']); if ($dep == 1 || $dep == 2) { $user_can_be_edit = 1; } else { if ($dep == 3) { $temp_layout_id = self::getLayoutId($db, $id); $user_can_be_edit = UserUtil::isThisLayoutAdmin($db, $id, $temp_layout_id, $_SESSION['user']['name']); } } } } } $sort_number = self::getSortNumber($db, $id, $rows['id']); $content = ''; $had_closed = 0; if ($rows['reply_status']) { $had_closed = 1; } if ($rows['reply_status'] || $topic_status == 2) { //如果回帖状态被设定,则表示改帖被关闭或者屏蔽 $content = TU_TOPIC_WAS_LOCKED; } else { $content = $rows['content'] . self::haveReplyAttach($db, $rows['id']); if ($is_edit) { $attach_string = TU_SUB_TITLE . $edit_user . TU_FROM . $edit_time . TU_EDIT; $content .= "\n\n" . $attach_string; } } $title = htmlspecialchars($rows['title']); $topic_array[] = array('id' => $rows['id'], 'posttime' => $posttime, 'sort_number' => $sort_number, 'user_name' => $user_name, 'user_id' => $user_id, 'user_header' => $user_header, 'user_sign' => $user_sign, 'register_date' => $register_date, 'user_level' => $user_level, 'user_address' => $user_address, 'user_topic_number' => $user_topic_number, 'title' => $title, 'content' => ConvertString($content, ROOT_URL, IMAGE_URL . 'express/'), 'online' => $user_online, 'can_be_edit' => $user_can_be_edit, 'is_topic' => 0, 'express' => $rows['express'], 'had_closed' => $had_closed); } return $topic_array; }