BioTorrents.de’s version of Gazelle
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

main.php 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. #declare(strict_types=1);
  3. # todo: Go through line by line
  4. if (isset($LoggedUser['PostsPerPage'])) {
  5. $PerPage = $LoggedUser['PostsPerPage'];
  6. } else {
  7. $PerPage = POSTS_PER_PAGE;
  8. }
  9. // We have to iterate here because if one is empty it breaks the query
  10. $TopicIDs = [];
  11. foreach ($Forums as $Forum) {
  12. if (!empty($Forum['LastPostTopicID'])) {
  13. $TopicIDs[] = $Forum['LastPostTopicID'];
  14. }
  15. }
  16. // Now if we have IDs' we run the query
  17. if (!empty($TopicIDs)) {
  18. $DB->query("
  19. SELECT
  20. l.TopicID,
  21. l.PostID,
  22. CEIL(
  23. (
  24. SELECT COUNT(p.ID)
  25. FROM forums_posts AS p
  26. WHERE p.TopicID = l.TopicID
  27. AND p.ID <= l.PostID
  28. ) / $PerPage
  29. ) AS Page
  30. FROM forums_last_read_topics AS l
  31. WHERE l.TopicID IN(".implode(',', $TopicIDs).")
  32. AND l.UserID = '$LoggedUser[ID]'");
  33. $LastRead = $DB->to_array('TopicID', MYSQLI_ASSOC);
  34. } else {
  35. $LastRead = [];
  36. }
  37. $DB->query("
  38. SELECT RestrictedForums
  39. FROM users_info
  40. WHERE UserID = ".$LoggedUser['ID']);
  41. list($RestrictedForums) = $DB->next_record();
  42. $RestrictedForums = explode(',', $RestrictedForums);
  43. $PermittedForums = array_keys($LoggedUser['PermittedForums']);
  44. $JsonCategories = [];
  45. $JsonCategory = [];
  46. $JsonForums = [];
  47. foreach ($Forums as $Forum) {
  48. list($ForumID, $CategoryID, $ForumName, $ForumDescription, $MinRead, $MinWrite, $MinCreate, $NumTopics, $NumPosts, $LastPostID, $LastAuthorID, $LastTopicID, $LastTime, $SpecificRules, $LastTopic, $Locked, $Sticky) = array_values($Forum);
  49. if ($LoggedUser['CustomForums'][$ForumID] != 1
  50. && ($MinRead > $LoggedUser['Class']
  51. || array_search($ForumID, $RestrictedForums) !== false)
  52. ) {
  53. continue;
  54. }
  55. $ForumDescription = display_str($ForumDescription);
  56. if ($CategoryID != $LastCategoryID) {
  57. if (!empty($JsonForums) && !empty($JsonCategory)) {
  58. $JsonCategory['forums'] = $JsonForums;
  59. $JsonCategories[] = $JsonCategory;
  60. }
  61. $LastCategoryID = $CategoryID;
  62. $JsonCategory = array(
  63. 'categoryID' => (int)$CategoryID,
  64. 'categoryName' => $ForumCats[$CategoryID]
  65. );
  66. $JsonForums = [];
  67. }
  68. if ((!$Locked || $Sticky)
  69. && $LastPostID != 0
  70. && ((empty($LastRead[$LastTopicID]) || $LastRead[$LastTopicID]['PostID'] < $LastPostID)
  71. && strtotime($LastTime) > $LoggedUser['CatchupTime'])
  72. ) {
  73. $Read = 'unread';
  74. } else {
  75. $Read = 'read';
  76. }
  77. $UserInfo = Users::user_info($LastAuthorID);
  78. $JsonForums[] = array(
  79. 'forumId' => (int)$ForumID,
  80. 'forumName' => $ForumName,
  81. 'forumDescription' => $ForumDescription,
  82. 'numTopics' => (float)$NumTopics,
  83. 'numPosts' => (float)$NumPosts,
  84. 'lastPostId' => (float)$LastPostID,
  85. 'lastAuthorId' => (float)$LastAuthorID,
  86. 'lastPostAuthorName' => $UserInfo['Username'],
  87. 'lastTopicId' => (float)$LastTopicID,
  88. 'lastTime' => $LastTime,
  89. 'specificRules' => $SpecificRules,
  90. 'lastTopic' => display_str($LastTopic),
  91. 'read' => $Read === 1,
  92. 'locked' => $Locked === 1,
  93. 'sticky' => $Sticky === 1
  94. );
  95. }
  96. // ...And an extra one to catch the last category.
  97. if (!empty($JsonForums) && !empty($JsonCategory)) {
  98. $JsonCategory['forums'] = $JsonForums;
  99. $JsonCategories[] = $JsonCategory;
  100. }
  101. echo json_encode(
  102. array(
  103. 'status' => 'success',
  104. 'response' => array(
  105. 'categories' => $JsonCategories
  106. )
  107. )
  108. );