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

Contents of /fenglin/bbs/list.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (show annotations)
Sat Apr 12 05:02:55 2025 UTC (11 months ago) by sysadm
Branch: MAIN
Changes since 1.2: +272 -481 lines
Refact with theme support

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 (!$_SESSION["BBS_priv"]->checkpriv($sid, S_LIST))
29 {
30 force_login();
31 }
32
33 switch($sort)
34 {
35 case "topic":
36 $sort_sql = "sub_dt DESC"; //sub_dt
37 break;
38 case "reply":
39 $sort_sql = "last_reply_dt DESC";
40 break;
41 case "hot":
42 $sort_sql = "(view_count + reply_count) DESC";
43 break;
44 default:
45 $result_set["return"]["code"] = -1;
46 $result_set["return"]["message"] = "不支持的排序方式";
47
48 mysqli_close($db_conn);
49 exit(json_encode($result_set));
50 }
51
52 $sql = "SELECT section_config.sname, section_config.title AS s_title,
53 section_config.announcement, section_class.title AS c_title, section_class.cname
54 FROM section_config INNER JOIN section_class ON section_config.CID = section_class.CID
55 WHERE section_config.SID = $sid AND section_config.enable AND section_class.enable";
56
57 $rs = mysqli_query($db_conn, $sql);
58 if ($rs == false)
59 {
60 $result_set["return"]["code"] = -2;
61 $result_set["return"]["message"] = "Query data error: " . mysqli_error($db_conn);
62
63 mysqli_close($db_conn);
64 exit(json_encode($result_set));
65 }
66
67 if($row = mysqli_fetch_array($rs))
68 {
69 $class_title = $row["c_title"];
70 $class_name = $row["cname"];
71 $section_name = $row["sname"];
72 $section_title = $row["s_title"];
73 $announcement = $row["announcement"];
74 }
75 else
76 {
77 $result_set["return"]["code"] = -1;
78 $result_set["return"]["message"] = "版块不存在";
79
80 mysqli_close($db_conn);
81 exit(json_encode($result_set));
82 }
83
84 mysqli_free_result($rs);
85
86 $search_topic = mysqli_real_escape_string($db_conn, $search_text);
87
88 $sql = "SELECT count(*) AS article_count FROM bbs WHERE SID = $sid AND visible AND " .
89 ($reply ? "" : " TID = 0 AND ") .
90 ($ex ? " excerption AND " : "") .
91 " title LIKE '%" . $search_topic . "%'";
92
93 $rs = mysqli_query($db_conn, $sql);
94 if ($rs == false)
95 {
96 $result_set["return"]["code"] = -2;
97 $result_set["return"]["message"] = "Query data error: " . mysqli_error($db_conn);
98
99 mysqli_close($db_conn);
100 exit(json_encode($result_set));
101 }
102
103 $toa = 0;
104 if ($row = mysqli_fetch_array($rs))
105 {
106 $toa = $row["article_count"];
107 }
108 mysqli_free_result($rs);
109
110 if (!in_array($rpp, $BBS_list_rpp_options))
111 {
112 $rpp = $BBS_list_rpp_options[0];
113 }
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