/[LeafOK_CVS]/fenglin/bbs/list.php
ViewVC logotype

Contents of /fenglin/bbs/list.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (show annotations)
Sun Apr 13 01:03:17 2025 UTC (11 months ago) by sysadm
Branch: MAIN
Changes since 1.3: +5 -5 lines
Refine

1 <?
2 require_once "../lib/db_open.inc.php";
3 require_once "./session_init.inc.php";
4 require_once "./section_list_gen.inc.php";
5 require_once "./message.inc.php";
6 require_once "./theme.inc.php";
7
8 $result_set = array(
9 "return" => array(
10 "code" => 0,
11 "message" => "",
12 "errorFields" => array(),
13 )
14 );
15
16 $redir = $_SERVER["SCRIPT_NAME"] .
17 (isset($_SERVER["QUERY_STRING"]) ? "?" . urlencode($_SERVER["QUERY_STRING"]) : "");
18
19 $sid = (isset($_GET["sid"]) ? intval($_GET["sid"]) : $BBS_default_sid);
20 $ex = (isset($_GET["ex"]) && $_GET["ex"] == "1" ? 1 : 0);
21 $reply = (isset($_GET["reply"]) && $_GET["reply"] == "1" ? 1 : 0);
22 $use_nick = (isset($_GET["use_nick"]) && $_GET["use_nick"] == "0" ? 0 : 1);
23 $sort = (isset($_GET["sort"]) ? $_GET["sort"] : "topic");
24 $search_text = (isset($_GET["search_text"]) ? $_GET["search_text"] : "");
25 $page = (isset($_GET["page"]) ? intval($_GET["page"]) : 1);
26 $rpp = (isset($_GET["rpp"]) ? intval($_GET["rpp"]) : 20);
27
28 if (!in_array($rpp, $BBS_list_rpp_options))
29 {
30 $rpp = $BBS_list_rpp_options[0];
31 }
32
33 if (!$_SESSION["BBS_priv"]->checkpriv($sid, S_LIST))
34 {
35 force_login();
36 }
37
38 switch($sort)
39 {
40 case "topic":
41 $sort_sql = "sub_dt DESC"; //sub_dt
42 break;
43 case "reply":
44 $sort_sql = "last_reply_dt DESC";
45 break;
46 case "hot":
47 $sort_sql = "(view_count + reply_count) DESC";
48 break;
49 default:
50 $result_set["return"]["code"] = -1;
51 $result_set["return"]["message"] = "不支持的排序方式";
52
53 mysqli_close($db_conn);
54 exit(json_encode($result_set));
55 }
56
57 $sql = "SELECT section_config.sname, section_config.title AS s_title,
58 section_config.announcement, section_class.title AS c_title, section_class.cname
59 FROM section_config INNER JOIN section_class ON section_config.CID = section_class.CID
60 WHERE section_config.SID = $sid AND section_config.enable AND section_class.enable";
61
62 $rs = mysqli_query($db_conn, $sql);
63 if ($rs == false)
64 {
65 $result_set["return"]["code"] = -2;
66 $result_set["return"]["message"] = "Query data error: " . mysqli_error($db_conn);
67
68 mysqli_close($db_conn);
69 exit(json_encode($result_set));
70 }
71
72 if($row = mysqli_fetch_array($rs))
73 {
74 $class_title = $row["c_title"];
75 $class_name = $row["cname"];
76 $section_name = $row["sname"];
77 $section_title = $row["s_title"];
78 $announcement = $row["announcement"];
79 }
80 else
81 {
82 $result_set["return"]["code"] = -1;
83 $result_set["return"]["message"] = "版块不存在";
84
85 mysqli_close($db_conn);
86 exit(json_encode($result_set));
87 }
88
89 mysqli_free_result($rs);
90
91 $search_topic = mysqli_real_escape_string($db_conn, $search_text);
92
93 $sql = "SELECT count(*) AS article_count FROM bbs WHERE SID = $sid AND visible AND " .
94 ($reply ? "" : " TID = 0 AND ") .
95 ($ex ? " excerption AND " : "") .
96 " title LIKE '%" . $search_topic . "%'";
97
98 $rs = mysqli_query($db_conn, $sql);
99 if ($rs == false)
100 {
101 $result_set["return"]["code"] = -2;
102 $result_set["return"]["message"] = "Query data error: " . mysqli_error($db_conn);
103
104 mysqli_close($db_conn);
105 exit(json_encode($result_set));
106 }
107
108 $toa = 0;
109 if ($row = mysqli_fetch_array($rs))
110 {
111 $toa = $row["article_count"];
112 }
113 mysqli_free_result($rs);
114
115 $page_total = ceil($toa / $rpp);
116 if ($page > $page_total)
117 {
118 $page = $page_total;
119 }
120
121 if ($page <= 0)
122 {
123 $page = 1;
124 }
125
126 if ($_SESSION["BBS_uid"] > 0 && time() - $_SESSION["BBS_last_msg_check"] >= $BBS_check_msg_interval)
127 {
128 $_SESSION["BBS_new_msg"] = check_new_msg($_SESSION["BBS_uid"], $db_conn);
129 $_SESSION["BBS_last_msg_check"] = time();
130 }
131
132 $section_select_options = section_list_gen($db_conn);
133
134 // Fill up result data
135 $result_set["data"] = array(
136 "redir" => $redir,
137 "sid" => $sid,
138 "ex" => $ex,
139 "reply" => $reply,
140 "use_nick" => $use_nick,
141 "sort" => $sort,
142 "search_text" => $search_text,
143 "page" => $page,
144 "rpp" => $rpp,
145 "page_total" => $page_total,
146
147 "class_title" => $class_title,
148 "class_name" => $class_name,
149 "section_name" => $section_name,
150 "section_title" => $section_title,
151 "announcement" => $announcement,
152 "section_masters" => array(),
153
154 "section_select_options" => $section_select_options,
155
156 "articles" => array(),
157 );
158
159 // Query section master
160 $sql = "SELECT user_list.UID, user_list.username, section_master.major FROM section_master
161 INNER JOIN user_list ON section_master.UID = user_list.UID
162 WHERE SID = $sid AND section_master.enable AND (NOW() BETWEEN begin_dt AND end_dt)
163 ORDER BY major DESC";
164
165 $rs = mysqli_query($db_conn, $sql);
166 if ($rs == false)
167 {
168 $result_set["return"]["code"] = -2;
169 $result_set["return"]["message"] = "Query section master error: " . mysqli_error($db_conn);
170
171 mysqli_close($db_conn);
172 exit(json_encode($result_set));
173 }
174
175 while ($row = mysqli_fetch_array($rs))
176 {
177 array_push($result_set["data"]["section_masters"], array(
178 "uid" => $row["UID"],
179 "username" => $row["username"],
180 "major" => $row["major"],
181 ));
182 }
183 mysqli_free_result($rs);
184
185 // Query articles
186 $sql = "SELECT * FROM bbs WHERE SID = $sid AND visible AND ".
187 ($reply ? "" : " TID = 0 AND ") .
188 ($ex ? " excerption AND " : "") .
189 " title LIKE '%" . $search_topic . "%'".
190 " ORDER BY ontop DESC, ".
191 ($reply ? "sub_dt DESC" : $sort_sql).
192 " LIMIT " . (($page - 1) * $rpp) . ", $rpp";
193
194 $rs = mysqli_query($db_conn, $sql);
195 if ($rs == false)
196 {
197 $result_set["return"]["code"] = -2;
198 $result_set["return"]["message"] = "Query article list error: " . mysqli_error($db_conn);
199
200 mysqli_close($db_conn);
201 exit(json_encode($result_set));
202 }
203
204 $visited_aid_list = array();
205
206 if ($_SESSION["BBS_uid"] > 0)
207 {
208 $aid_list = "-1";
209
210 while ($row = mysqli_fetch_array($rs))
211 {
212 if ((new DateTimeImmutable("-" . $BBS_new_article_period . " day")) < (new DateTimeImmutable($row["sub_dt"])))
213 {
214 $aid_list .= (", " . $row["AID"]);
215 }
216 else
217 {
218 array_push($visited_aid_list, $row["AID"]);
219 }
220 }
221
222 mysqli_data_seek($rs, 0);
223
224 if ($aid_list != "-1")
225 {
226 $sql = "SELECT AID FROM view_article_log WHERE AID IN ($aid_list) AND UID = " . $_SESSION["BBS_uid"];
227
228 $rs_view = mysqli_query($db_conn, $sql);
229 if ($rs_view == false)
230 {
231 $result_set["return"]["code"] = -2;
232 $result_set["return"]["message"] = "Query view_article_log error: " . mysqli_error($db_conn);
233
234 mysqli_close($db_conn);
235 exit(json_encode($result_set));
236 }
237
238 while ($row_view = mysqli_fetch_array($rs_view))
239 {
240 array_push($visited_aid_list, $row_view["AID"]);
241 }
242
243 mysqli_free_result($rs_view);
244 }
245 }
246
247 while ($row = mysqli_fetch_array($rs))
248 {
249 array_push($result_set["data"]["articles"], array(
250 "aid" => $row["AID"],
251 "tid" => $row["TID"],
252 "title" => $row["title"],
253 "sub_dt" => (new DateTimeImmutable($row["sub_dt"]))->setTimezone($_SESSION["BBS_user_tz"]),
254 "length" => $row["length"],
255 "icon" => $row["icon"],
256 "uid" => $row["UID"],
257 "username" => $row["username"],
258 "nickname" => $row["nickname"],
259 "reply_count" => $row["reply_count"],
260 "view_count" => $row["view_count"],
261 "transship" => $row["transship"],
262 "lock" => $row["lock"],
263 "ontop" => $row["ontop"],
264 "excerption" => $row["excerption"],
265 "gen_ex" => $row["gen_ex"],
266 "last_reply_dt" => (new DateTimeImmutable($row["last_reply_dt"]))->setTimezone($_SESSION["BBS_user_tz"]),
267 "last_reply_uid" => $row["last_reply_UID"],
268 "last_reply_username" => $row["last_reply_username"],
269 "last_reply_nickname" => $row["last_reply_nickname"],
270 "visited" => (($_SESSION["BBS_uid"] > 0 && in_array($row["AID"], $visited_aid_list)) ? 1 : 0),
271 ));
272 }
273 mysqli_free_result($rs);
274
275 mysqli_close($db_conn);
276
277 // Cleanup
278 unset($redir);
279 unset($sid);
280 unset($ex);
281 unset($reply);
282 unset($use_nick);
283 unset($sort);
284 unset($search_text);
285 unset($search_topic);
286 unset($page);
287 unset($rpp);
288 unset($page_total);
289
290 unset($class_title);
291 unset($class_name);
292 unset($section_name);
293 unset($section_title);
294 unset($announcement);
295
296 unset($section_select_options);
297
298 // Output with theme view
299 $theme_view_file = get_theme_file("view/list", $_SESSION["BBS_theme_name"]);
300 if ($theme_view_file == null)
301 {
302 exit(json_encode($result_set)); // Output data in Json
303 }
304 include $theme_view_file;
305 ?>

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1