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

Annotation of /fenglin/bbs/search_article_v2.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (hide 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 sysadm 1.1 <?php
2     require_once "../lib/db_open.inc.php";
3 sysadm 1.2 require_once "../conf/solr.conf.php";
4 sysadm 1.1 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 sysadm 1.4 ($uid == 0 ? "" : "PostUserId:($uid) AND ") .
78 sysadm 1.1 ($username == "" ? "" : "PostUserName:($username) AND ") .
79     ($nickname == "" ? "" : "PostUserNickName:($nickname) AND ") .
80     ($ex == 1 ? "Excerption:1 AND " : "") .
81 sysadm 1.3 ($original ? "Transship:0 AND " : "") .
82 sysadm 1.1 "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