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.3KB

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