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

Annotation of /fenglin/bbs/list.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.7 - (hide annotations)
Sun Apr 27 04:18:22 2025 UTC (10 months, 2 weeks ago) by sysadm
Branch: MAIN
Changes since 1.6: +5 -5 lines
Trim trailing whitespaces

1 sysadm 1.6 <?php
2 sysadm 1.1 require_once "../lib/db_open.inc.php";
3     require_once "./session_init.inc.php";
4 sysadm 1.3 require_once "./section_list_gen.inc.php";
5 sysadm 1.1 require_once "./message.inc.php";
6 sysadm 1.3 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 sysadm 1.4 if (!in_array($rpp, $BBS_list_rpp_options))
29     {
30     $rpp = $BBS_list_rpp_options[0];
31     }
32    
33 sysadm 1.3 if (!$_SESSION["BBS_priv"]->checkpriv($sid, S_LIST))
34     {
35     force_login();
36     }
37    
38     switch($sort)
39 sysadm 1.1 {
40 sysadm 1.3 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 sysadm 1.1 break;
49 sysadm 1.3 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 sysadm 1.1 }
71    
72 sysadm 1.3 if($row = mysqli_fetch_array($rs))
73 sysadm 1.1 {
74 sysadm 1.3 $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 sysadm 1.1 }
80     else
81     {
82 sysadm 1.3 $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 sysadm 1.1 }
131    
132 sysadm 1.3 $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 sysadm 1.1
171 sysadm 1.3 mysqli_close($db_conn);
172     exit(json_encode($result_set));
173     }
174 sysadm 1.1
175     while ($row = mysqli_fetch_array($rs))
176     {
177 sysadm 1.3 array_push($result_set["data"]["section_masters"], array(
178     "uid" => $row["UID"],
179     "username" => $row["username"],
180     "major" => $row["major"],
181     ));
182 sysadm 1.7 }
183 sysadm 1.3 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 sysadm 1.1 }
203    
204 sysadm 1.3 $visited_aid_list = array();
205    
206     if ($_SESSION["BBS_uid"] > 0)
207 sysadm 1.1 {
208 sysadm 1.3 $aid_list = "-1";
209 sysadm 1.1
210 sysadm 1.3 while ($row = mysqli_fetch_array($rs))
211 sysadm 1.1 {
212 sysadm 1.3 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 sysadm 1.1 }
221 sysadm 1.7
222 sysadm 1.3 mysqli_data_seek($rs, 0);
223    
224     if ($aid_list != "-1")
225 sysadm 1.1 {
226 sysadm 1.3 $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 sysadm 1.7
234 sysadm 1.3 mysqli_close($db_conn);
235     exit(json_encode($result_set));
236     }
237 sysadm 1.7
238 sysadm 1.3 while ($row_view = mysqli_fetch_array($rs_view))
239     {
240     array_push($visited_aid_list, $row_view["AID"]);
241     }
242 sysadm 1.7
243 sysadm 1.3 mysqli_free_result($rs_view);
244 sysadm 1.1 }
245     }
246    
247 sysadm 1.5 $author_list = array();
248    
249 sysadm 1.3 while ($row = mysqli_fetch_array($rs))
250     {
251     array_push($result_set["data"]["articles"], array(
252     "aid" => $row["AID"],
253     "tid" => $row["TID"],
254     "title" => $row["title"],
255     "sub_dt" => (new DateTimeImmutable($row["sub_dt"]))->setTimezone($_SESSION["BBS_user_tz"]),
256     "length" => $row["length"],
257     "icon" => $row["icon"],
258     "uid" => $row["UID"],
259     "username" => $row["username"],
260     "nickname" => $row["nickname"],
261     "reply_count" => $row["reply_count"],
262     "view_count" => $row["view_count"],
263     "transship" => $row["transship"],
264     "lock" => $row["lock"],
265     "ontop" => $row["ontop"],
266     "excerption" => $row["excerption"],
267     "gen_ex" => $row["gen_ex"],
268     "last_reply_dt" => (new DateTimeImmutable($row["last_reply_dt"]))->setTimezone($_SESSION["BBS_user_tz"]),
269     "last_reply_uid" => $row["last_reply_UID"],
270     "last_reply_username" => $row["last_reply_username"],
271     "last_reply_nickname" => $row["last_reply_nickname"],
272     "visited" => (($_SESSION["BBS_uid"] > 0 && in_array($row["AID"], $visited_aid_list)) ? 1 : 0),
273     ));
274 sysadm 1.5
275     if (!isset($author_list[$row["UID"]]))
276     {
277     $author_list[$row["UID"]] = true;
278     }
279     if (!isset($author_list[$row["last_reply_UID"]]))
280     {
281     $author_list[$row["last_reply_UID"]] = true;
282     }
283 sysadm 1.3 }
284     mysqli_free_result($rs);
285 sysadm 1.1
286 sysadm 1.5 $uid_list = "-1";
287     foreach ($author_list as $uid => $status)
288     {
289     $uid_list .= (", " . $uid);
290     }
291     unset($author_list);
292    
293     $author_list = array();
294    
295     $sql = "SELECT UID FROM user_list WHERE UID IN ($uid_list) AND enable";
296    
297     $rs = mysqli_query($db_conn, $sql);
298     if ($rs == false)
299     {
300     $result_set["return"]["code"] = -2;
301     $result_set["return"]["message"] = "Query user list error: " . mysqli_error($db_conn);
302    
303     mysqli_close($db_conn);
304     exit(json_encode($result_set));
305     }
306    
307     while ($row = mysqli_fetch_array($rs))
308     {
309     $author_list[$row["UID"]] = true;
310     }
311     mysqli_free_result($rs);
312    
313     $result_set["data"]["author_list"] = $author_list;
314     unset($author_list);
315    
316 sysadm 1.3 mysqli_close($db_conn);
317 sysadm 1.1
318 sysadm 1.3 // Cleanup
319     unset($redir);
320     unset($sid);
321     unset($ex);
322     unset($reply);
323     unset($use_nick);
324     unset($sort);
325     unset($search_text);
326     unset($search_topic);
327     unset($page);
328     unset($rpp);
329     unset($page_total);
330    
331     unset($class_title);
332     unset($class_name);
333     unset($section_name);
334     unset($section_title);
335     unset($announcement);
336    
337     unset($section_select_options);
338    
339     // Output with theme view
340     $theme_view_file = get_theme_file("view/list", $_SESSION["BBS_theme_name"]);
341     if ($theme_view_file == null)
342 sysadm 1.1 {
343 sysadm 1.3 exit(json_encode($result_set)); // Output data in Json
344 sysadm 1.1 }
345 sysadm 1.3 include $theme_view_file;
346 sysadm 1.1 ?>

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