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

Annotation of /fenglin/bbs/list.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (hide 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 sysadm 1.1 <?
2     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     if (!$_SESSION["BBS_priv"]->checkpriv($sid, S_LIST))
29     {
30     force_login();
31     }
32    
33     switch($sort)
34 sysadm 1.1 {
35 sysadm 1.3 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 sysadm 1.1 break;
44 sysadm 1.3 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 sysadm 1.1 }
66    
67 sysadm 1.3 if($row = mysqli_fetch_array($rs))
68 sysadm 1.1 {
69 sysadm 1.3 $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 sysadm 1.1 }
75     else
76     {
77 sysadm 1.3 $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 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     }
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 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.3
222     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    
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 sysadm 1.1 }
245     }
246    
247 sysadm 1.3 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 sysadm 1.1
275 sysadm 1.3 mysqli_close($db_conn);
276 sysadm 1.1
277 sysadm 1.3 // 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 sysadm 1.1 {
302 sysadm 1.3 exit(json_encode($result_set)); // Output data in Json
303 sysadm 1.1 }
304 sysadm 1.3 include $theme_view_file;
305 sysadm 1.1 ?>

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