1. <?php
  2. /***********************************
  3. * Скрипт вывода банов SourceBans
  4. * Автор Onotole
  5. *
  6. * Скрипт универсальный.
  7. * При правильном подходе заработает
  8. * на любой CMS
  9. * Самое главное - это узнать,
  10. * как пишутся произвольные страницы
  11. * для Вашей CMS
  12. ***********************************/
  13. // Данные базы. Сюда прописывать данные, которые вписаны в databases.cfg
  14. $host = 'localhost'; // Хост БД
  15. $database = 'sourcebans'; // База данных
  16. $user = 'user'; // Пользователь базы
  17. $pass = 'password'; // Пароль пользователя
  18. $prefix = 'sb'; // Префикс таблиц. По умолчанию sb
  19. // Настройки
  20. $limit = 20; // Количество банов для вывода
  21. $showpast = 1; // Выводить ли истекшие баны (0 - не выводить, 1 выводить)
  22. /********************************************************
  23. * Дальше желательно ничего не трогать
  24. ********************************************************/
  25. // Функция преобразования срока бана в человеко-понятный вид
  26. function date2word($dif,$short=false)
  27. {
  28. if($dif == 0)
  29. return 'Навсегда';
  30. $dif = $dif;
  31. if($dif) {
  32. $s = "";
  33. $years=intval($dif/(60*60*24*365));
  34. $dif=$dif-($years*(60*60*24*365));
  35. if($years) {
  36. $s.= $years." лет ";
  37. }
  38. if($years && $short) return $s;
  39. $months=intval($dif/(60*60*24*30));
  40. $dif=$dif-($months*(60*60*24*30));
  41. if($months) {
  42. $s.= $months." мес. ";
  43. }
  44. if($months && $short) return $s;
  45. $weeks=intval($dif/(60*60*24*7));
  46. $dif=$dif-($weeks*(60*60*24*7));
  47. if($weeks) {
  48. $s.= $weeks." нед. ";
  49. }
  50. if($weeks && $short) return $s;
  51. $days=intval($dif/(60*60*24));
  52. $dif=$dif-($days*(60*60*24));
  53. if($days) {
  54. $s.= $days." дн. ";
  55. }
  56. if($days && $short) return $s;
  57. $hours=intval($dif/(60*60));
  58. $dif=$dif-($hours*(60*60));
  59. if($hours) {
  60. $s.= $hours." час. ";
  61. }
  62. if($hours && $short) return $s;
  63. $minutes=intval($dif/(60));
  64. $seconds=$dif-($minutes*60);
  65. if($minutes) {
  66. $s.= $minutes." мин.";
  67. }
  68. if($minutes && $short) return $s;
  69. if($short) return $seconds." сек.";
  70. return $s;
  71. } else {
  72. return;
  73. }
  74. }
  75. // Подключаемся к базе
  76. $db = new PDO("mysql:host={$host};dbname={$database}", $user, $pass);
  77. // Выбираем баны
  78. $bans = $db->query("SELECT * FROM `{$prefix}_bans`".($showpast === 0 ? " WHERE ISNULL(`RemoveType`)" : "")." ORDER BY `bid` DESC LIMIT {$limit}")->fetchAll();
  79. // Выбираем админов, чтобы не делать кучи запросов
  80. $adminsquery = $db->query("SELECT `aid`, `user` FROM `{$prefix}_admins`")->fetchAll();
  81. // Загоняем админов в массив id => user
  82. $admin = array();
  83. foreach($adminsquery as $admins)
  84. {
  85. $admin[$admins['aid']] = $admins['user'];
  86. }
  87. // Функция вывода ника админа по его ID
  88. function getAdmin($id)
  89. {
  90. global $admin;
  91. if(!array_key_exists($id, $admin))
  92. return 'Удален';
  93. return $admin[$id];
  94. }
  95. ?>
  96. <?php
  97. // Далее идет примерный вывод данных в таблице. К самой таблице
  98. // или к ее элементам можете подставлять стили или классы Вашего движка
  99. ?>
  100. <table>
  101. <thead>
  102. <tr>
  103. <th>
  104. Ник
  105. </th>
  106. <th>
  107. Причина
  108. </th>
  109. <th>
  110. Админ
  111. </th>
  112. <th>
  113. Срок
  114. </th>
  115. </tr>
  116. </thead>
  117. <tbody>
  118. <?php foreach($bans as $ban): ?>
  119. <tr>
  120. <td>
  121. <?php echo htmlspecialchars($ban['name'], ENT_QUOTES) ?>
  122. </td>
  123. <td>
  124. <?php echo htmlspecialchars($ban['reason'], ENT_QUOTES) ?>
  125. </td>
  126. <td>
  127. <?php echo getAdmin($ban['aid']) ?>
  128. </td>
  129. <td>
  130. <?php echo date2word($ban['length']) ?>
  131. </td>
  132. </tr>
  133. <?php endforeach; ?>
  134. </tbody>
  135. </table>