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

Contents of /fenglin/bbs/list.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.11 - (show annotations)
Wed Feb 11 10:59:14 2026 UTC (4 weeks, 6 days ago) by sysadm
Branch: MAIN
CVS Tags: HEAD
Changes since 1.10: +11 -7 lines
Replace string concat operation with implode() for xxxx_id_list

1 <?php
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 = array(-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 array_push($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 (count($aid_list) > 1)
225 {
226 $sql = "SELECT AID FROM view_article_log WHERE AID IN (" .
227 implode(",", $aid_list) .
228 ") AND UID = " . $_SESSION["BBS_uid"];
229
230 $rs_view = mysqli_query($db_conn, $sql);
231 if ($rs_view == false)
232 {
233 $result_set["return"]["code"] = -2;
234 $result_set["return"]["message"] = "Query view_article_log error: " . mysqli_error($db_conn);
235
236 mysqli_close($db_conn);
237 exit(json_encode($result_set));
238 }
239
240 while ($row_view = mysqli_fetch_array($rs_view))
241 {
242 array_push($visited_aid_list, $row_view["AID"]);
243 }
244
245 mysqli_free_result($rs_view);
246 }
247 }
248
249 $author_list = array();
250
251 while ($row = mysqli_fetch_array($rs))
252 {
253 // Rewrite title with "Re: Re: " prefix into "Re: ... "
254 $title = $row["title"];
255 if ($row["TID"] != 0)
256 {
257 $j = 0;
258 while (substr_compare($row["title"], "Re: ", $j, strlen("Re: ")) == 0)
259 {
260 $j += strlen("Re: ");
261 }
262 if ($j >= strlen("Re: Re: "))
263 {
264 $title = "Re: ... " . substr($row["title"], $j);
265 }
266 }
267
268 array_push($result_set["data"]["articles"], array(
269 "aid" => $row["AID"],
270 "tid" => $row["TID"],
271 "title" => $title,
272 "sub_dt" => (new DateTimeImmutable($row["sub_dt"]))->setTimezone($_SESSION["BBS_user_tz"]),
273 "length" => $row["length"],
274 "icon" => $row["icon"],
275 "uid" => $row["UID"],
276 "username" => $row["username"],
277 "nickname" => $row["nickname"],
278 "reply_count" => $row["reply_count"],
279 "view_count" => $row["view_count"],
280 "transship" => $row["transship"],
281 "lock" => $row["lock"],
282 "ontop" => $row["ontop"],
283 "excerption" => $row["excerption"],
284 "gen_ex" => $row["gen_ex"],
285 "last_reply_dt" => (new DateTimeImmutable($row["last_reply_dt"]))->setTimezone($_SESSION["BBS_user_tz"]),
286 "last_reply_uid" => $row["last_reply_UID"],
287 "last_reply_username" => $row["last_reply_username"],
288 "last_reply_nickname" => $row["last_reply_nickname"],
289 "visited" => (($_SESSION["BBS_uid"] > 0 && ($row["UID"] == $_SESSION["BBS_uid"] || in_array($row["AID"], $visited_aid_list))) ? 1 : 0),
290 ));
291
292 if (!isset($author_list[$row["UID"]]))
293 {
294 $author_list[$row["UID"]] = true;
295 }
296 if (!isset($author_list[$row["last_reply_UID"]]))
297 {
298 $author_list[$row["last_reply_UID"]] = true;
299 }
300
301 unset($title);
302 }
303 mysqli_free_result($rs);
304
305 $uid_list = array(-1);
306 foreach ($author_list as $uid => $status)
307 {
308 array_push($uid_list, $uid);
309 }
310 unset($author_list);
311
312 $author_list = array();
313
314 $sql = "SELECT UID FROM user_list WHERE UID IN (" .
315 implode(",", $uid_list) .
316 ") AND enable";
317
318 $rs = mysqli_query($db_conn, $sql);
319 if ($rs == false)
320 {
321 $result_set["return"]["code"] = -2;
322 $result_set["return"]["message"] = "Query user list error: " . mysqli_error($db_conn);
323
324 mysqli_close($db_conn);
325 exit(json_encode($result_set));
326 }
327
328 while ($row = mysqli_fetch_array($rs))
329 {
330 $author_list[$row["UID"]] = true;
331 }
332 mysqli_free_result($rs);
333
334 $result_set["data"]["author_list"] = $author_list;
335 unset($author_list);
336
337 mysqli_close($db_conn);
338
339 // Cleanup
340 unset($redir);
341 unset($sid);
342 unset($ex);
343 unset($reply);
344 unset($use_nick);
345 unset($sort);
346 unset($search_text);
347 unset($search_topic);
348 unset($page);
349 unset($rpp);
350 unset($page_total);
351
352 unset($class_title);
353 unset($class_name);
354 unset($section_name);
355 unset($section_title);
356 unset($announcement);
357
358 unset($section_select_options);
359
360 // Output with theme view
361 $theme_view_file = get_theme_file("view/list", $_SESSION["BBS_theme_name"]);
362 if ($theme_view_file == null)
363 {
364 exit(json_encode($result_set)); // Output data in Json
365 }
366 include $theme_view_file;

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