--- fenglin/bbs/list.php 2025/04/13 01:03:17 1.4 +++ fenglin/bbs/list.php 2026/02/11 10:59:14 1.11 @@ -1,4 +1,4 @@ - $row["username"], "major" => $row["major"], )); - } + } mysqli_free_result($rs); // Query articles @@ -205,51 +205,70 @@ if ($_SESSION["BBS_uid"] > 0) { - $aid_list = "-1"; + $aid_list = array(-1); while ($row = mysqli_fetch_array($rs)) { if ((new DateTimeImmutable("-" . $BBS_new_article_period . " day")) < (new DateTimeImmutable($row["sub_dt"]))) { - $aid_list .= (", " . $row["AID"]); + array_push($aid_list, $row["AID"]); } else { array_push($visited_aid_list, $row["AID"]); } } - + mysqli_data_seek($rs, 0); - if ($aid_list != "-1") + if (count($aid_list) > 1) { - $sql = "SELECT AID FROM view_article_log WHERE AID IN ($aid_list) AND UID = " . $_SESSION["BBS_uid"]; + $sql = "SELECT AID FROM view_article_log WHERE AID IN (" . + implode(",", $aid_list) . + ") AND UID = " . $_SESSION["BBS_uid"]; $rs_view = mysqli_query($db_conn, $sql); if ($rs_view == false) { $result_set["return"]["code"] = -2; $result_set["return"]["message"] = "Query view_article_log error: " . mysqli_error($db_conn); - + mysqli_close($db_conn); exit(json_encode($result_set)); } - + while ($row_view = mysqli_fetch_array($rs_view)) { array_push($visited_aid_list, $row_view["AID"]); } - + mysqli_free_result($rs_view); } } + $author_list = array(); + while ($row = mysqli_fetch_array($rs)) { + // Rewrite title with "Re: Re: " prefix into "Re: ... " + $title = $row["title"]; + if ($row["TID"] != 0) + { + $j = 0; + while (substr_compare($row["title"], "Re: ", $j, strlen("Re: ")) == 0) + { + $j += strlen("Re: "); + } + if ($j >= strlen("Re: Re: ")) + { + $title = "Re: ... " . substr($row["title"], $j); + } + } + array_push($result_set["data"]["articles"], array( "aid" => $row["AID"], "tid" => $row["TID"], - "title" => $row["title"], + "title" => $title, "sub_dt" => (new DateTimeImmutable($row["sub_dt"]))->setTimezone($_SESSION["BBS_user_tz"]), "length" => $row["length"], "icon" => $row["icon"], @@ -267,11 +286,54 @@ "last_reply_uid" => $row["last_reply_UID"], "last_reply_username" => $row["last_reply_username"], "last_reply_nickname" => $row["last_reply_nickname"], - "visited" => (($_SESSION["BBS_uid"] > 0 && in_array($row["AID"], $visited_aid_list)) ? 1 : 0), + "visited" => (($_SESSION["BBS_uid"] > 0 && ($row["UID"] == $_SESSION["BBS_uid"] || in_array($row["AID"], $visited_aid_list))) ? 1 : 0), )); + + if (!isset($author_list[$row["UID"]])) + { + $author_list[$row["UID"]] = true; + } + if (!isset($author_list[$row["last_reply_UID"]])) + { + $author_list[$row["last_reply_UID"]] = true; + } + + unset($title); } mysqli_free_result($rs); + $uid_list = array(-1); + foreach ($author_list as $uid => $status) + { + array_push($uid_list, $uid); + } + unset($author_list); + + $author_list = array(); + + $sql = "SELECT UID FROM user_list WHERE UID IN (" . + implode(",", $uid_list) . + ") AND enable"; + + $rs = mysqli_query($db_conn, $sql); + if ($rs == false) + { + $result_set["return"]["code"] = -2; + $result_set["return"]["message"] = "Query user list error: " . mysqli_error($db_conn); + + mysqli_close($db_conn); + exit(json_encode($result_set)); + } + + while ($row = mysqli_fetch_array($rs)) + { + $author_list[$row["UID"]] = true; + } + mysqli_free_result($rs); + + $result_set["data"]["author_list"] = $author_list; + unset($author_list); + mysqli_close($db_conn); // Cleanup @@ -302,4 +364,3 @@ exit(json_encode($result_set)); // Output data in Json } include $theme_view_file; -?>