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

Contents of /fenglin/bbs/search_article_v2.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (show annotations)
Wed Jan 21 13:37:51 2026 UTC (7 weeks, 6 days ago) by sysadm
Branch: MAIN
Changes since 1.3: +1 -0 lines
Add search by UID

1 <?php
2 require_once "../lib/db_open.inc.php";
3 require_once "../conf/solr.conf.php";
4 require_once "./session_init.inc.php";
5 require_once "./theme.inc.php";
6
7 force_login();
8
9 $result_set = array(
10 "return" => array(
11 "code" => 0,
12 "message" => "",
13 "errorFields" => array(),
14 )
15 );
16
17 $uid = (isset($_GET["uid"]) ? intval($_GET["uid"]) : 0);
18 $username = (isset($_GET["username"]) ? trim($_GET["username"]) : "");
19 $nickname = (isset($_GET["nickname"]) ? trim($_GET["nickname"]) : "");
20 $title = (isset($_GET["title"]) ? trim($_GET["title"]) : "");
21 $content = (isset($_GET["content"]) ? trim($_GET["content"]) : "");
22
23 if (!isset($_GET["begin_dt"]) || ($begin_dt = DateTimeImmutable::createFromFormat("Y-m-d", $_GET["begin_dt"], $_SESSION["BBS_user_tz"])) == false)
24 {
25 $begin_dt = new DateTimeImmutable("-1 month", $_SESSION["BBS_user_tz"]);
26 }
27 if (!isset($_GET["end_dt"]) || ($end_dt = DateTimeImmutable::createFromFormat("Y-m-d", $_GET["end_dt"], $_SESSION["BBS_user_tz"])) == false)
28 {
29 $end_dt = new DateTimeImmutable("1 day", $_SESSION["BBS_user_tz"]);
30 }
31
32 $sid = (isset($_GET["sid"]) ? intval($_GET["sid"]) : 0);
33 $ex = (isset($_GET["ex"]) && $_GET["ex"] == "1" ? 1 : 0);
34 $reply = (isset($_GET["reply"]) && $_GET["reply"] == "1" ? 1 : 0);
35 $use_nick = (isset($_GET["use_nick"]) && $_GET["use_nick"] == "1" ? 1 : 0);
36 $original = (isset($_GET["original"]) && $_GET["original"] == "1" ? 1 : 0);
37 $page = (isset($_GET["page"]) ? intval($_GET["page"]) : 1);
38 $rpp = (isset($_GET["rpp"]) ? intval($_GET["rpp"]) : 10);
39
40 $sid_list = "(-1)";
41 if ($sid > 0)
42 {
43 if ($_SESSION["BBS_priv"]->checkpriv($sid, S_LIST))
44 {
45 $sid_list = $sid;
46 }
47 }
48 else
49 {
50 $rs = mysqli_query($db_conn, "SELECT SID FROM section_config WHERE enable" .
51 ($sid < 0 ? " AND CID = " . (-$sid) : ""));
52 if ($rs == false)
53 {
54 $result_set["return"]["code"] = -2;
55 $result_set["return"]["message"] = "Query section error: " . mysqli_error($db_conn);
56
57 mysqli_close($db_conn);
58 exit(json_encode($result_set));
59 }
60
61 while ($row = mysqli_fetch_array($rs))
62 {
63 if ($_SESSION["BBS_priv"]->checkpriv($row["SID"], S_LIST))
64 {
65 $sid_list .= (" OR " . $row["SID"]);
66 }
67 }
68 mysqli_free_result($rs);
69 }
70
71 // Initialize Solr client
72 $solr_client = new SolrClient($solr_options);
73
74 $query_str = "" .
75 ($sid_list == "(-1)" ? "" : "SectionId:($sid_list) AND ") .
76 ($reply ? "" : "TopicId:0 AND ") .
77 ($uid == 0 ? "" : "PostUserId:($uid) AND ") .
78 ($username == "" ? "" : "PostUserName:($username) AND ") .
79 ($nickname == "" ? "" : "PostUserNickName:($nickname) AND ") .
80 ($ex == 1 ? "Excerption:1 AND " : "") .
81 ($original ? "Transship:0 AND " : "") .
82 "PostDateTime:[" . $begin_dt->setTimezone(new DateTimeZone("UTC"))->format("Y-m-d\T00:00:00\Z") . " TO " .
83 $end_dt->setTimezone(new DateTimeZone("UTC"))->format("Y-m-d\T23:59:59\Z") . "] AND " .
84 ($title == "" ? "" : "ArticleTitle:($title) AND ") .
85 ($content == "" ? "" : "Content:($content) AND ") .
86 "*:*";
87
88 // Query count of articles
89 $solr_query = new SolrQuery();
90 $solr_query->setQuery($query_str);
91 $solr_query->addField("ArticleId");
92 $solr_query->addSortField("PostDateTime", SolrQuery::ORDER_DESC);
93 try
94 {
95 $solr_res = $solr_client->query($solr_query);
96 }
97 catch (Exception $e)
98 {
99 $result_set["return"]["code"] = -3;
100 $result_set["return"]["message"] = "Solr query error";
101
102 exit(json_encode($result_set));
103 }
104 $solr_obj = $solr_res->getResponse();
105
106 if ($solr_obj->responseHeader->status != 0)
107 {
108 $result_set["return"]["code"] = -3;
109 $result_set["return"]["message"] = "Solr query error: " . $solr_obj->responseHeader->status;
110
111 exit(json_encode($result_set));
112 }
113
114 $toa = $solr_obj->response->numFound;
115
116 unset($solr_query);
117
118 if (!in_array($rpp, $BBS_list_rpp_options))
119 {
120 $rpp = $BBS_list_rpp_options[0];
121 }
122
123 $page_total = ceil($toa / $rpp);
124 if ($page > $page_total)
125 {
126 $page = $page_total;
127 }
128
129 if ($page <= 0)
130 {
131 $page = 1;
132 }
133
134 // Fill up result data
135 $result_set["data"] = array(
136 "uid" => $uid,
137 "sid" => $sid,
138 "ex" => $ex,
139 "reply" => $reply,
140 "use_nick" => $use_nick,
141 "original" => $original,
142 "username" => $username,
143 "nickname" => $nickname,
144 "title" => $title,
145 "content" => $content,
146 "begin_dt" => $begin_dt,
147 "end_dt" => $end_dt,
148 "favorite" => 0,
149 "trash" => 0,
150 "toa" => $toa,
151 "page" => $page,
152 "rpp" => $rpp,
153 "page_total" => $page_total,
154
155 "articles" => array(),
156 );
157
158 // Query article IDs
159 $solr_query = new SolrQuery();
160 $solr_query->setQuery($query_str);
161 $solr_query->addField("ArticleId");
162 $solr_query->addSortField("PostDateTime", SolrQuery::ORDER_DESC);
163 $solr_query->setStart(($page - 1) * $rpp);
164 $solr_query->setRows($rpp);
165 try
166 {
167 $solr_res = $solr_client->query($solr_query);
168 }
169 catch (Exception $e)
170 {
171 $result_set["return"]["code"] = -3;
172 $result_set["return"]["message"] = "Solr query error";
173
174 exit(json_encode($result_set));
175 }
176 $solr_obj = $solr_res->getResponse();
177
178 if ($solr_obj->responseHeader->status != 0)
179 {
180 $result_set["return"]["code"] = -3;
181 $result_set["return"]["message"] = "Solr query error: " . $solr_obj->responseHeader->status;
182
183 exit(json_encode($result_set));
184 }
185
186 // print_r($solr_obj);
187 // exit();
188
189 $aid_list = "-1";
190
191 if ($solr_obj->response->docs !== false)
192 {
193 foreach ($solr_obj->response->docs as $doc)
194 {
195 $aid_list .= (", " . $doc["ArticleId"]);
196 }
197 }
198
199 unset($solr_query);
200 unset($solr_client);
201
202 // Query articles
203 $sql = "SELECT bbs.*, section_class.cname, section_class.title AS c_title,
204 section_config.sname, section_config.title AS s_title FROM bbs
205 INNER JOIN section_config ON bbs.SID = section_config.SID
206 INNER JOIN section_class ON section_config.CID = section_class.CID" .
207 " WHERE bbs.AID in ($aid_list)" .
208 " ORDER BY sub_dt DESC";
209
210 $rs = mysqli_query($db_conn, $sql);
211 if ($rs == false)
212 {
213 $result_set["return"]["code"] = -2;
214 $result_set["return"]["message"] = "Query article list error: " . mysqli_error($db_conn);
215
216 mysqli_close($db_conn);
217 exit(json_encode($result_set));
218 }
219
220 $visited_aid_list = array();
221
222 if ($_SESSION["BBS_uid"] > 0)
223 {
224 $aid_list = "-1";
225
226 while ($row = mysqli_fetch_array($rs))
227 {
228 if ((new DateTimeImmutable("-" . $BBS_new_article_period . " day")) < (new DateTimeImmutable($row["sub_dt"])))
229 {
230 $aid_list .= (", " . $row["AID"]);
231 }
232 else
233 {
234 array_push($visited_aid_list, $row["AID"]);
235 }
236 }
237
238 mysqli_data_seek($rs, 0);
239
240 if ($aid_list != "-1")
241 {
242 $sql = "SELECT AID FROM view_article_log WHERE AID IN ($aid_list) AND UID = " . $_SESSION["BBS_uid"];
243
244 $rs_view = mysqli_query($db_conn, $sql);
245 if ($rs_view == false)
246 {
247 $result_set["return"]["code"] = -2;
248 $result_set["return"]["message"] = "Query view_article_log error: " . mysqli_error($db_conn);
249
250 mysqli_close($db_conn);
251 exit(json_encode($result_set));
252 }
253
254 while ($row_view = mysqli_fetch_array($rs_view))
255 {
256 array_push($visited_aid_list, $row_view["AID"]);
257 }
258
259 mysqli_free_result($rs_view);
260 }
261 }
262
263 $author_list = array();
264
265 while ($row = mysqli_fetch_array($rs))
266 {
267 array_push($result_set["data"]["articles"], array(
268 "aid" => $row["AID"],
269 "tid" => $row["TID"],
270 "title" => $row["title"],
271 "sub_dt" => (new DateTimeImmutable($row["sub_dt"]))->setTimezone($_SESSION["BBS_user_tz"]),
272 "length" => $row["length"],
273 "icon" => $row["icon"],
274 "uid" => $row["UID"],
275 "username" => $row["username"],
276 "nickname" => $row["nickname"],
277 "reply_count" => $row["reply_count"],
278 "view_count" => $row["view_count"],
279 "transship" => $row["transship"],
280 "lock" => $row["lock"],
281 "ontop" => $row["ontop"],
282 "excerption" => $row["excerption"],
283 "gen_ex" => $row["gen_ex"],
284 "last_reply_dt" => (new DateTimeImmutable($row["last_reply_dt"]))->setTimezone($_SESSION["BBS_user_tz"]),
285 "last_reply_uid" => $row["last_reply_UID"],
286 "last_reply_username" => $row["last_reply_username"],
287 "last_reply_nickname" => $row["last_reply_nickname"],
288 "class_name" => $row["cname"],
289 "class_title" => $row["c_title"],
290 "section_name" => $row["sname"],
291 "section_title" => $row["s_title"],
292 "visited" => (($_SESSION["BBS_uid"] > 0 && ($row["UID"] == $_SESSION["BBS_uid"] || in_array($row["AID"], $visited_aid_list))) ? 1 : 0),
293 ));
294
295 if (!isset($author_list[$row["UID"]]))
296 {
297 $author_list[$row["UID"]] = true;
298 }
299 if (!isset($author_list[$row["last_reply_UID"]]))
300 {
301 $author_list[$row["last_reply_UID"]] = true;
302 }
303 }
304 mysqli_free_result($rs);
305
306 $uid_list = "-1";
307 foreach ($author_list as $uid => $status)
308 {
309 $uid_list .= (", " . $uid);
310 }
311 unset($author_list);
312
313 $author_list = array();
314
315 $sql = "SELECT UID FROM user_list WHERE UID IN ($uid_list) AND enable";
316
317 $rs = mysqli_query($db_conn, $sql);
318 if ($rs == false)
319 {
320 $result_set["return"]["code"] = -2;
321 $result_set["return"]["message"] = "Query user list error: " . mysqli_error($db_conn);
322
323 mysqli_close($db_conn);
324 exit(json_encode($result_set));
325 }
326
327 while ($row = mysqli_fetch_array($rs))
328 {
329 $author_list[$row["UID"]] = true;
330 }
331 mysqli_free_result($rs);
332
333 $result_set["data"]["author_list"] = $author_list;
334 unset($author_list);
335
336 mysqli_close($db_conn);
337
338 // Cleanup
339 unset($uid);
340 unset($sid);
341 unset($ex);
342 unset($reply);
343 unset($use_nick);
344 unset($original);
345 unset($username);
346 unset($nickname);
347 unset($title);
348 unset($content);
349 unset($begin_dt);
350 unset($end_dt);
351 unset($search_topic);
352 unset($toa);
353 unset($page);
354 unset($rpp);
355 unset($page_total);
356
357 // Output with theme view
358 $theme_view_file = get_theme_file("view/search_article", $_SESSION["BBS_theme_name"]);
359 if ($theme_view_file == null)
360 {
361 exit(json_encode($result_set)); // Output data in Json
362 }
363 include $theme_view_file;

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