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.

index.php 8.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. <?php
  2. #declare(strict_types=1);
  3. enforce_login();
  4. if (!defined('LOG_ENTRIES_PER_PAGE')) {
  5. define('LOG_ENTRIES_PER_PAGE', 100);
  6. }
  7. View::show_header("Site log");
  8. include SERVER_ROOT.'/sections/log/sphinx.php';
  9. ?>
  10. <div>
  11. <div class="header">
  12. <h2>Site log</h2>
  13. </div>
  14. <div class="box pad">
  15. <form class="search_form" name="log" action="" method="get">
  16. <table cellpadding="6" cellspacing="1" border="0" class="layout" width="100%">
  17. <tr>
  18. <td class="label"><strong>Search for:</strong></td>
  19. <td>
  20. <input type="search" name="search" size="60" <?=(!empty($_GET['search']) ? ' value="'.display_str($_GET['search']).'"' : '')?>
  21. />
  22. &nbsp;
  23. <input type="submit" value="Search log" />
  24. </td>
  25. </tr>
  26. </table>
  27. </form>
  28. </div>
  29. <?php
  30. if ($TotalMatches > LOG_ENTRIES_PER_PAGE) { ?>
  31. <div class="linkbox">
  32. <?php
  33. $Pages = Format::get_pages($Page, $TotalMatches, LOG_ENTRIES_PER_PAGE, 9);
  34. echo $Pages;
  35. ?>
  36. </div>
  37. <?php
  38. }
  39. ?>
  40. <div class="box">
  41. <table cellpadding="6" cellspacing="1" border="0" class="log_table" id="log_table" width="100%">
  42. <tr class="colhead">
  43. <td style="width: 180px;">
  44. <strong>Time</strong>
  45. </td>
  46. <td>
  47. <strong>Message</strong>
  48. </td>
  49. </tr>
  50. <?php if ($QueryStatus) { ?>
  51. <tr class="nobr">
  52. <td colspan="2">Search request failed (<?=$QueryError?>).
  53. </td>
  54. </tr>
  55. <?php } elseif (!$DB->has_results()) { ?>
  56. <tr class="nobr">
  57. <td colspan="2">Nothing found!</td>
  58. </tr>
  59. <?php
  60. }
  61. $Usernames = [];
  62. while (list($ID, $Message, $LogTime) = $DB->next_record()) {
  63. $MessageParts = explode(' ', $Message);
  64. $Message = '';
  65. $Color = $Colon = false;
  66. for ($i = 0, $PartCount = sizeof($MessageParts); $i < $PartCount; $i++) {
  67. if (strpos($MessageParts[$i], 'https://'.SITE_DOMAIN) === 0) {
  68. $Offset = strlen('https://'.SITE_DOMAIN.'/');
  69. $MessageParts[$i] = '<a href="'.substr($MessageParts[$i], $Offset).'">'.substr($MessageParts[$i], $Offset).'</a>';
  70. }
  71. switch ($MessageParts[$i]) {
  72. case 'Torrent':
  73. case 'torrent':
  74. $TorrentID = $MessageParts[$i + 1];
  75. if (is_numeric($TorrentID)) {
  76. $Message = $Message.' '.$MessageParts[$i]." <a href='torrents.php?torrentid=$TorrentID'>$TorrentID</a>";
  77. $i++;
  78. } else {
  79. $Message = $Message.' '.$MessageParts[$i];
  80. }
  81. break;
  82. case 'Request':
  83. case 'request':
  84. $RequestID = $MessageParts[$i + 1];
  85. if (is_numeric($RequestID)) {
  86. $Message = $Message.' '.$MessageParts[$i]." <a href='requests.php?action=view&amp;id=$RequestID'>$RequestID</a>";
  87. $i++;
  88. } else {
  89. $Message = $Message.' '.$MessageParts[$i];
  90. }
  91. break;
  92. case 'Artist':
  93. case 'artist':
  94. $ArtistID = $MessageParts[$i + 1];
  95. if (is_numeric($ArtistID)) {
  96. $Message = $Message.' '.$MessageParts[$i]." <a href='artist.php?id=$ArtistID'>$ArtistID</a>";
  97. $i++;
  98. } else {
  99. $Message = $Message.' '.$MessageParts[$i];
  100. }
  101. break;
  102. case 'group':
  103. case 'Group':
  104. $GroupID = $MessageParts[$i + 1];
  105. if (is_numeric($GroupID)) {
  106. $Message = $Message.' '.$MessageParts[$i]." <a href='torrents.php?id=$GroupID'>$GroupID</a>";
  107. } else {
  108. $Message = $Message.' '.$MessageParts[$i];
  109. }
  110. $i++;
  111. break;
  112. case 'By':
  113. case 'by':
  114. $UserID = 0;
  115. $User = '';
  116. $URL = '';
  117. if ($MessageParts[$i + 1] === 'user') {
  118. $i++;
  119. if (is_numeric($MessageParts[$i + 1])) {
  120. $UserID = $MessageParts[++$i];
  121. }
  122. $URL = "user $UserID (<a href='user.php?id=$UserID'>".substr($MessageParts[++$i], 1, -1).'</a>)';
  123. } elseif (in_array($MessageParts[$i - 1], ['deleted', 'uploaded', 'edited', 'created', 'recovered'])) {
  124. $User = $MessageParts[++$i];
  125. if (substr($User, -1) === ':') {
  126. $User = substr($User, 0, -1);
  127. $Colon = true;
  128. }
  129. if (!isset($Usernames[$User])) {
  130. $DB->query(
  131. "
  132. SELECT
  133. `ID`
  134. FROM
  135. `users_main`
  136. WHERE
  137. `Username` = ?
  138. ",
  139. $User
  140. );
  141. list($UserID) = $DB->next_record();
  142. $Usernames[$User] = $UserID ? $UserID : '';
  143. } else {
  144. $UserID = $Usernames[$User];
  145. }
  146. $URL = $Usernames[$User] ? "<a href='user.php?id=$UserID'>$User</a>".($Colon ? ':' : '') : $User;
  147. if (in_array($MessageParts[$i - 2], ['uploaded', 'edited'])) {
  148. $DB->query(
  149. "
  150. SELECT
  151. `UserID`,
  152. `Anonymous`
  153. FROM
  154. `torrents`
  155. WHERE
  156. `ID` = ?
  157. ",
  158. $MessageParts[1]
  159. );
  160. if ($DB->has_results()) {
  161. list($UploaderID, $AnonTorrent) = $DB->next_record();
  162. if ($AnonTorrent && $UploaderID === $UserID) {
  163. $URL = '<em>Anonymous</em>';
  164. }
  165. }
  166. }
  167. $DB->set_query_id($Log);
  168. }
  169. $Message = "$Message by $URL";
  170. break;
  171. case 'Uploaded':
  172. case 'uploaded':
  173. if ($Color === false) {
  174. $Color = 'green';
  175. }
  176. $Message = $Message.' '.$MessageParts[$i];
  177. break;
  178. case 'Deleted':
  179. case 'deleted':
  180. if ($Color === false || $Color === 'green') {
  181. $Color = 'red';
  182. }
  183. $Message = $Message.' '.$MessageParts[$i];
  184. break;
  185. case 'Edited':
  186. case 'edited':
  187. if ($Color === false) {
  188. $Color = 'blue';
  189. }
  190. $Message = $Message.' '.$MessageParts[$i];
  191. break;
  192. case 'Un-filled':
  193. case 'un-filled':
  194. if ($Color === false) {
  195. $Color = '';
  196. }
  197. $Message = $Message.' '.$MessageParts[$i];
  198. break;
  199. case 'Marked':
  200. case 'marked':
  201. if ($i === 1) {
  202. $User = $MessageParts[$i - 1];
  203. if (!isset($Usernames[$User])) {
  204. $DB->query("
  205. SELECT
  206. `ID`
  207. FROM
  208. `users_main`
  209. WHERE
  210. `Username` = _utf8 '".db_string($User)."' COLLATE utf8_bin
  211. ");
  212. list($UserID) = $DB->next_record();
  213. $Usernames[$User] = $UserID ? $UserID : '';
  214. $DB->set_query_id($Log);
  215. } else {
  216. $UserID = $Usernames[$User];
  217. }
  218. $URL = $Usernames[$User] ? "<a href='user.php?id=$UserID'>$User</a>" : $User;
  219. $Message = $URL.' '.$MessageParts[$i];
  220. } else {
  221. $Message = $Message.' '.$MessageParts[$i];
  222. }
  223. break;
  224. case 'Collage':
  225. case 'collage':
  226. $CollageID = $MessageParts[$i + 1];
  227. if (is_numeric($CollageID)) {
  228. $Message = $Message.' '.$MessageParts[$i]." <a href='collages.php?id=$CollageID'>$CollageID</a>";
  229. $i++;
  230. } else {
  231. $Message = $Message.' '.$MessageParts[$i];
  232. }
  233. break;
  234. default:
  235. $Message = $Message.' '.$MessageParts[$i];
  236. }
  237. } ?>
  238. <tr class="row" id="log_<?=$ID?>">
  239. <td class="nobr">
  240. <?=time_diff($LogTime)?>
  241. </td>
  242. <td>
  243. <span<?php if ($Color) { ?> style="color: <?=$Color?>;"
  244. <?php } ?>><?=$Message?></span>
  245. </td>
  246. </tr>
  247. <?php
  248. }
  249. ?>
  250. </table>
  251. </div>
  252. <?php if (isset($Pages)) { ?>
  253. <div class="linkbox">
  254. <?=$Pages?>
  255. </div>
  256. <?php } ?>
  257. </div>
  258. <?php
  259. View::show_footer();