PageRenderTime 54ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 1ms

/admin/bans.php

https://bitbucket.org/gencer/punbb
PHP | 588 lines | 439 code | 115 blank | 34 comment | 110 complexity | 6bb54128ba18d9b81b9a427a82e381cc MD5 | raw file
Possible License(s): GPL-2.0
  1. <?php
  2. /**
  3. * Ban management page.
  4. *
  5. * Allows administrators and moderators to create, modify, and delete bans.
  6. *
  7. * @copyright (C) 2008-2012 PunBB, partially based on code (C) 2008-2009 FluxBB.org
  8. * @license http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
  9. * @package PunBB
  10. */
  11. if (!defined('FORUM_ROOT'))
  12. define('FORUM_ROOT', '../');
  13. require FORUM_ROOT.'include/common.php';
  14. require FORUM_ROOT.'include/common_admin.php';
  15. ($hook = get_hook('aba_start')) ? eval($hook) : null;
  16. if ($forum_user['g_id'] != FORUM_ADMIN && ($forum_user['g_moderator'] != '1' || $forum_user['g_mod_ban_users'] == '0'))
  17. message($lang_common['No permission']);
  18. // Load the admin.php language file
  19. require FORUM_ROOT.'lang/'.$forum_user['language'].'/admin_common.php';
  20. require FORUM_ROOT.'lang/'.$forum_user['language'].'/admin_bans.php';
  21. // Add/edit a ban (stage 1)
  22. if (isset($_REQUEST['add_ban']) || isset($_GET['edit_ban']))
  23. {
  24. if (isset($_GET['add_ban']) || isset($_POST['add_ban']))
  25. {
  26. // If the id of the user to ban was provided through GET (a link from profile.php)
  27. if (isset($_GET['add_ban']))
  28. {
  29. $add_ban = intval($_GET['add_ban']);
  30. if ($add_ban < 2)
  31. message($lang_common['Bad request']);
  32. $user_id = $add_ban;
  33. ($hook = get_hook('aba_add_ban_selected')) ? eval($hook) : null;
  34. $query = array(
  35. 'SELECT' => 'u.group_id, u.username, u.email, u.registration_ip',
  36. 'FROM' => 'users AS u',
  37. 'WHERE' => 'u.id='.$user_id
  38. );
  39. ($hook = get_hook('aba_add_ban_qr_get_user_by_id')) ? eval($hook) : null;
  40. $result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
  41. $banned_user_info = $forum_db->fetch_row($result);
  42. if (!$banned_user_info)
  43. {
  44. message($lang_admin_bans['No user id message']);
  45. }
  46. list($group_id, $ban_user, $ban_email, $ban_ip) = $banned_user_info;
  47. }
  48. else // Otherwise the username is in POST
  49. {
  50. $ban_user = forum_trim($_POST['new_ban_user']);
  51. ($hook = get_hook('aba_add_ban_form_submitted')) ? eval($hook) : null;
  52. if ($ban_user != '')
  53. {
  54. $query = array(
  55. 'SELECT' => 'u.id, u.group_id, u.username, u.email, u.registration_ip',
  56. 'FROM' => 'users AS u',
  57. 'WHERE' => 'u.username=\''.$forum_db->escape($ban_user).'\' AND u.id>1'
  58. );
  59. ($hook = get_hook('aba_add_ban_qr_get_user_by_username')) ? eval($hook) : null;
  60. $result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
  61. $banned_user_info = $forum_db->fetch_row($result);
  62. if (!$banned_user_info)
  63. {
  64. message($lang_admin_bans['No user username message']);
  65. }
  66. list($user_id, $group_id, $ban_user, $ban_email, $ban_ip) = $banned_user_info;
  67. }
  68. }
  69. // Make sure we're not banning an admin
  70. if (isset($group_id) && $group_id == FORUM_ADMIN)
  71. message($lang_admin_bans['User is admin message']);
  72. // If we have a $user_id, we can try to find the last known IP of that user
  73. if (isset($user_id))
  74. {
  75. $query = array(
  76. 'SELECT' => 'p.poster_ip',
  77. 'FROM' => 'posts AS p',
  78. 'WHERE' => 'p.poster_id='.$user_id,
  79. 'ORDER BY' => 'p.posted DESC',
  80. 'LIMIT' => '1'
  81. );
  82. ($hook = get_hook('aba_add_ban_qr_get_last_known_ip')) ? eval($hook) : null;
  83. $result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
  84. $ban_ip_from_db = $forum_db->result($result);
  85. if ($ban_ip_from_db)
  86. {
  87. $ban_ip = $ban_ip_from_db;
  88. }
  89. }
  90. $mode = 'add';
  91. }
  92. else // We are editing a ban
  93. {
  94. $ban_id = intval($_GET['edit_ban']);
  95. if ($ban_id < 1)
  96. message($lang_common['Bad request']);
  97. ($hook = get_hook('aba_edit_ban_selected')) ? eval($hook) : null;
  98. $query = array(
  99. 'SELECT' => 'b.username, b.ip, b.email, b.message, b.expire',
  100. 'FROM' => 'bans AS b',
  101. 'WHERE' => 'b.id='.$ban_id
  102. );
  103. ($hook = get_hook('aba_edit_ban_qr_get_ban_data')) ? eval($hook) : null;
  104. $result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
  105. $banned_user_info = $forum_db->fetch_row($result);
  106. if (!$banned_user_info)
  107. {
  108. message($lang_common['Bad request']);
  109. }
  110. list($ban_user, $ban_ip, $ban_email, $ban_message, $ban_expire) = $banned_user_info;
  111. // We just use GMT for expire dates, as its a date rather than a day I don't think its worth worrying about
  112. $ban_expire = ($ban_expire != '') ? gmdate('Y-m-d', $ban_expire) : '';
  113. $mode = 'edit';
  114. }
  115. // Setup the form
  116. $forum_page['group_count'] = $forum_page['item_count'] = $forum_page['fld_count'] = 0;
  117. // Setup breadcrumbs
  118. $forum_page['crumbs'] = array(
  119. array($forum_config['o_board_title'], forum_link($forum_url['index'])),
  120. array($lang_admin_common['Forum administration'], forum_link($forum_url['admin_index']))
  121. );
  122. if ($forum_user['g_id'] == FORUM_ADMIN)
  123. $forum_page['crumbs'][] = array($lang_admin_common['Users'], forum_link($forum_url['admin_users']));
  124. $forum_page['crumbs'][] = array($lang_admin_common['Bans'], forum_link($forum_url['admin_bans']));
  125. $forum_page['crumbs'][] = $lang_admin_bans['Ban advanced'];
  126. ($hook = get_hook('aba_add_edit_ban_pre_header_load')) ? eval($hook) : null;
  127. define('FORUM_PAGE_SECTION', 'users');
  128. define('FORUM_PAGE', 'admin-bans');
  129. require FORUM_ROOT.'header.php';
  130. // START SUBST - <!-- forum_main -->
  131. ob_start();
  132. ($hook = get_hook('aba_add_edit_ban_output_start')) ? eval($hook) : null;
  133. ?>
  134. <div class="main-subhead">
  135. <h2 class="hn"><span><?php echo $lang_admin_bans['Ban advanced heading'] ?></span></h2>
  136. </div>
  137. <div class="main-content main-frm">
  138. <div class="ct-box warn-box">
  139. <p class="warn"><?php echo $lang_admin_bans['Ban IP warning'] ?></p>
  140. </div>
  141. <form class="frm-form" method="post" accept-charset="utf-8" action="<?php echo forum_link($forum_url['admin_bans']) ?>">
  142. <div class="hidden">
  143. <input type="hidden" name="csrf_token" value="<?php echo generate_form_token(forum_link($forum_url['admin_bans'])) ?>" />
  144. <input type="hidden" name="mode" value="<?php echo $mode ?>" />
  145. <?php if ($mode == 'edit'): ?>
  146. <input type="hidden" name="ban_id" value="<?php echo $ban_id ?>" />
  147. <?php endif; ?>
  148. </div>
  149. <?php ($hook = get_hook('aba_add_edit_ban_pre_criteria_fieldset')) ? eval($hook) : null; ?>
  150. <fieldset class="frm-group group<?php echo ++$forum_page['group_count'] ?>">
  151. <legend class="group-legend"><span><?php echo $lang_admin_bans['Ban criteria legend'] ?></span></legend>
  152. <?php ($hook = get_hook('aba_add_edit_ban_pre_username')) ? eval($hook) : null; ?>
  153. <div class="sf-set set<?php echo ++$forum_page['item_count'] ?>">
  154. <div class="sf-box text">
  155. <label for="fld<?php echo ++$forum_page['fld_count'] ?>"><span><?php echo $lang_admin_bans['Username to ban label'] ?></span></label><br />
  156. <span class="fld-input"><input type="text" id="fld<?php echo $forum_page['fld_count'] ?>" name="ban_user" size="40" maxlength="25" value="<?php if (isset($ban_user)) echo forum_htmlencode($ban_user); ?>" /></span>
  157. </div>
  158. </div>
  159. <?php ($hook = get_hook('aba_add_edit_ban_pre_email')) ? eval($hook) : null; ?>
  160. <div class="sf-set set<?php echo ++$forum_page['item_count'] ?>">
  161. <div class="sf-box text">
  162. <label for="fld<?php echo ++$forum_page['fld_count'] ?>"><span><?php echo $lang_admin_bans['E-mail/domain to ban label'] ?></span> <small><?php echo $lang_admin_bans['E-mail/domain help'] ?></small></label><br />
  163. <span class="fld-input"><input type="text" id="fld<?php echo $forum_page['fld_count'] ?>" name="ban_email" size="40" maxlength="80" value="<?php if (isset($ban_email)) echo forum_htmlencode(strtolower($ban_email)); ?>" /></span>
  164. </div>
  165. </div>
  166. <?php ($hook = get_hook('aba_add_edit_ban_pre_ip')) ? eval($hook) : null; ?>
  167. <div class="sf-set set<?php echo ++$forum_page['item_count'] ?>">
  168. <div class="sf-box text">
  169. <label for="fld<?php echo ++$forum_page['fld_count'] ?>"><span><?php echo $lang_admin_bans['IP-addresses to ban label'] ?></span> <small><?php echo $lang_admin_bans['IP-addresses help']; if ($ban_user != '' && isset($user_id)) echo ' '.$lang_admin_bans['IP-addresses help stats'].'<a href="'.forum_link($forum_url['admin_users']).'?ip_stats='.$user_id.'">'.$lang_admin_bans['IP-addresses help link'].'</a>' ?></small></label><br />
  170. <span class="fld-input"><input type="text" id="fld<?php echo $forum_page['fld_count'] ?>" name="ban_ip" size="40" maxlength="255" value="<?php if (isset($ban_ip)) echo $ban_ip; ?>" /></span>
  171. </div>
  172. </div>
  173. <?php ($hook = get_hook('aba_add_edit_ban_pre_message')) ? eval($hook) : null; ?>
  174. <div class="sf-set set<?php echo ++$forum_page['item_count'] ?>">
  175. <div class="sf-box text">
  176. <label for="fld<?php echo ++$forum_page['fld_count'] ?>"><span><?php echo $lang_admin_bans['Ban message label'] ?></span> <small><?php echo $lang_admin_bans['Ban message help'] ?></small></label><br />
  177. <span class="fld-input"><input type="text" id="fld<?php echo $forum_page['fld_count'] ?>" name="ban_message" size="40" maxlength="255" value="<?php if (isset($ban_message)) echo forum_htmlencode($ban_message); ?>" /></span>
  178. </div>
  179. </div>
  180. <?php ($hook = get_hook('aba_add_edit_ban_pre_expire')) ? eval($hook) : null; ?>
  181. <div class="sf-set set<?php echo ++$forum_page['item_count'] ?>">
  182. <div class="sf-box text">
  183. <label for="fld<?php echo ++$forum_page['fld_count'] ?>"><span><?php echo $lang_admin_bans['Expire date label'] ?></span> <small><?php echo $lang_admin_bans['Expire date help'] ?></small></label><br />
  184. <span class="fld-input"><input type="text" id="fld<?php echo $forum_page['fld_count'] ?>" name="ban_expire" size="20" maxlength="10" value="<?php if (isset($ban_expire)) echo $ban_expire; ?>" /></span>
  185. </div>
  186. </div>
  187. <?php ($hook = get_hook('aba_add_edit_ban_criteria_pre_fieldset_end')) ? eval($hook) : null; ?>
  188. </fieldset>
  189. <?php ($hook = get_hook('aba_add_edit_ban_criteria_fieldset_end')) ? eval($hook) : null; ?>
  190. <div class="frm-buttons">
  191. <span class="submit primary"><input type="submit" name="add_edit_ban" value=" <?php echo $lang_admin_bans['Save ban'] ?>" /></span>
  192. </div>
  193. </form>
  194. </div>
  195. <?php
  196. ($hook = get_hook('aba_add_edit_ban_end')) ? eval($hook) : null;
  197. $tpl_temp = forum_trim(ob_get_contents());
  198. $tpl_main = str_replace('<!-- forum_main -->', $tpl_temp, $tpl_main);
  199. ob_end_clean();
  200. // END SUBST - <!-- forum_main -->
  201. require FORUM_ROOT.'footer.php';
  202. }
  203. // Add/edit a ban (stage 2)
  204. else if (isset($_POST['add_edit_ban']))
  205. {
  206. $ban_user = forum_trim($_POST['ban_user']);
  207. $ban_ip = forum_trim($_POST['ban_ip']);
  208. $ban_email = strtolower(forum_trim($_POST['ban_email']));
  209. $ban_message = forum_trim($_POST['ban_message']);
  210. $ban_expire = forum_trim($_POST['ban_expire']);
  211. if ($ban_user == '' && $ban_ip == '' && $ban_email == '')
  212. message($lang_admin_bans['Must enter message']);
  213. else if (strtolower($ban_user) == 'guest')
  214. message($lang_admin_bans['Can\'t ban guest user']);
  215. ($hook = get_hook('aba_add_edit_ban_form_submitted')) ? eval($hook) : null;
  216. // Validate IP/IP range (it's overkill, I know)
  217. if ($ban_ip != '')
  218. {
  219. $ban_ip = preg_replace('/[\s]{2,}/', ' ', $ban_ip);
  220. $addresses = explode(' ', $ban_ip);
  221. $addresses = array_map('trim', $addresses);
  222. for ($i = 0; $i < count($addresses); ++$i)
  223. {
  224. if (strpos($addresses[$i], ':') !== false)
  225. {
  226. $octets = explode(':', $addresses[$i]);
  227. for ($c = 0; $c < count($octets); ++$c)
  228. {
  229. $octets[$c] = ltrim($octets[$c], "0");
  230. if ($c > 7 || (!empty($octets[$c]) && !ctype_xdigit($octets[$c])) || intval($octets[$c], 16) > 65535)
  231. message($lang_admin_bans['Invalid IP message']);
  232. }
  233. $cur_address = implode(':', $octets);
  234. $addresses[$i] = $cur_address;
  235. }
  236. else
  237. {
  238. $octets = explode('.', $addresses[$i]);
  239. for ($c = 0; $c < count($octets); ++$c)
  240. {
  241. $octets[$c] = (strlen($octets[$c]) > 1) ? ltrim($octets[$c], "0") : $octets[$c];
  242. if ($c > 3 || !ctype_digit($octets[$c]) || intval($octets[$c]) > 255)
  243. message($lang_admin_bans['Invalid IP message']);
  244. }
  245. $cur_address = implode('.', $octets);
  246. $addresses[$i] = $cur_address;
  247. }
  248. }
  249. $ban_ip = implode(' ', $addresses);
  250. }
  251. if (!defined('FORUM_EMAIL_FUNCTIONS_LOADED'))
  252. require FORUM_ROOT.'include/email.php';
  253. if ($ban_email != '' && !is_valid_email($ban_email))
  254. {
  255. if (!preg_match('/^[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/', $ban_email))
  256. message($lang_admin_bans['Invalid e-mail message']);
  257. }
  258. if ($ban_expire != '' && $ban_expire != 'Never')
  259. {
  260. $ban_expire = strtotime($ban_expire);
  261. if ($ban_expire == -1 || $ban_expire <= time())
  262. message($lang_admin_bans['Invalid expire message']);
  263. }
  264. else
  265. $ban_expire = 'NULL';
  266. $ban_user = ($ban_user != '') ? '\''.$forum_db->escape($ban_user).'\'' : 'NULL';
  267. $ban_ip = ($ban_ip != '') ? '\''.$forum_db->escape($ban_ip).'\'' : 'NULL';
  268. $ban_email = ($ban_email != '') ? '\''.$forum_db->escape($ban_email).'\'' : 'NULL';
  269. $ban_message = ($ban_message != '') ? '\''.$forum_db->escape($ban_message).'\'' : 'NULL';
  270. if ($_POST['mode'] == 'add')
  271. {
  272. $query = array(
  273. 'INSERT' => 'username, ip, email, message, expire, ban_creator',
  274. 'INTO' => 'bans',
  275. 'VALUES' => $ban_user.', '.$ban_ip.', '.$ban_email.', '.$ban_message.', '.$ban_expire.', '.$forum_user['id']
  276. );
  277. ($hook = get_hook('aba_add_edit_ban_qr_add_ban')) ? eval($hook) : null;
  278. $forum_db->query_build($query) or error(__FILE__, __LINE__);
  279. }
  280. else
  281. {
  282. $query = array(
  283. 'UPDATE' => 'bans',
  284. 'SET' => 'username='.$ban_user.', ip='.$ban_ip.', email='.$ban_email.', message='.$ban_message.', expire='.$ban_expire,
  285. 'WHERE' => 'id='.intval($_POST['ban_id'])
  286. );
  287. ($hook = get_hook('aba_qr_update_ban')) ? eval($hook) : null;
  288. $forum_db->query_build($query) or error(__FILE__, __LINE__);
  289. }
  290. // Regenerate the bans cache
  291. if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))
  292. require FORUM_ROOT.'include/cache.php';
  293. generate_bans_cache();
  294. $forum_flash->add_info((($_POST['mode'] == 'edit') ? $lang_admin_bans['Ban edited'] : $lang_admin_bans['Ban added']));
  295. ($hook = get_hook('aba_add_edit_ban_pre_redirect')) ? eval($hook) : null;
  296. redirect(forum_link($forum_url['admin_bans']), (($_POST['mode'] == 'edit') ? $lang_admin_bans['Ban edited'] : $lang_admin_bans['Ban added']));
  297. }
  298. // Remove a ban
  299. else if (isset($_GET['del_ban']))
  300. {
  301. $ban_id = intval($_GET['del_ban']);
  302. if ($ban_id < 1)
  303. message($lang_common['Bad request']);
  304. // Validate the CSRF token
  305. if (!isset($_POST['csrf_token']) && (!isset($_GET['csrf_token']) || $_GET['csrf_token'] !== generate_form_token('del_ban'.$ban_id)))
  306. csrf_confirm_form();
  307. ($hook = get_hook('aba_del_ban_form_submitted')) ? eval($hook) : null;
  308. $query = array(
  309. 'DELETE' => 'bans',
  310. 'WHERE' => 'id='.$ban_id
  311. );
  312. ($hook = get_hook('aba_del_ban_qr_delete_ban')) ? eval($hook) : null;
  313. $forum_db->query_build($query) or error(__FILE__, __LINE__);
  314. // Regenerate the bans cache
  315. if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))
  316. require FORUM_ROOT.'include/cache.php';
  317. generate_bans_cache();
  318. $forum_flash->add_info($lang_admin_bans['Ban removed']);
  319. ($hook = get_hook('aba_del_ban_pre_redirect')) ? eval($hook) : null;
  320. redirect(forum_link($forum_url['admin_bans']), $lang_admin_bans['Ban removed']);
  321. }
  322. // Setup the form
  323. $forum_page['group_count'] = $forum_page['item_count'] = $forum_page['fld_count'] = 0;
  324. $forum_page['form_action'] = forum_link($forum_url['admin_bans']).'&amp;action=more';
  325. $forum_page['hidden_fields'] = array(
  326. 'csrf_token' => '<input type="hidden" name="csrf_token" value="'.generate_form_token($forum_page['form_action']).'" />'
  327. );
  328. // Setup breadcrumbs
  329. $forum_page['crumbs'] = array(
  330. array($forum_config['o_board_title'], forum_link($forum_url['index'])),
  331. array($lang_admin_common['Forum administration'], forum_link($forum_url['admin_index']))
  332. );
  333. if ($forum_user['g_id'] == FORUM_ADMIN)
  334. $forum_page['crumbs'][] = array($lang_admin_common['Users'], forum_link($forum_url['admin_users']));
  335. $forum_page['crumbs'][] = array($lang_admin_common['Bans'], forum_link($forum_url['admin_bans']));
  336. // Fetch user count
  337. $query = array(
  338. 'SELECT' => 'COUNT(id)',
  339. 'FROM' => 'bans'
  340. );
  341. $result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
  342. $forum_page['num_bans'] = $forum_db->result($result);
  343. $forum_page['num_pages'] = ceil($forum_page['num_bans'] / $forum_user['disp_topics']);
  344. $forum_page['page'] = (!isset($_GET['p']) || !is_numeric($_GET['p']) || $_GET['p'] <= 1 || $_GET['p'] > $forum_page['num_pages']) ? 1 : intval($_GET['p']);
  345. $forum_page['start_from'] = $forum_user['disp_topics'] * ($forum_page['page'] - 1);
  346. $forum_page['finish_at'] = min(($forum_page['start_from'] + $forum_user['disp_topics']), ($forum_page['num_bans']));
  347. // Generate paging
  348. $forum_page['page_post']['paging']='<p class="paging"><span class="pages">'.$lang_common['Pages'].'</span> '.paginate($forum_page['num_pages'], $forum_page['page'], $forum_url['admin_bans'], $lang_common['Paging separator'], null, true).'</p>';
  349. // Navigation links for header and page numbering for title/meta description
  350. if ($forum_page['page'] < $forum_page['num_pages'])
  351. {
  352. $forum_page['nav']['last'] = '<link rel="last" href="'.forum_sublink($forum_url['admin_bans'], $forum_url['page'], $forum_page['num_pages']).'" title="'.$lang_common['Page'].' '.$forum_page['num_pages'].'" />';
  353. $forum_page['nav']['next'] = '<link rel="next" href="'.forum_sublink($forum_url['admin_bans'], $forum_url['page'], ($forum_page['page'] + 1)).'" title="'.$lang_common['Page'].' '.($forum_page['page'] + 1).'" />';
  354. }
  355. if ($forum_page['page'] > 1)
  356. {
  357. $forum_page['nav']['prev'] = '<link rel="prev" href="'.forum_sublink($forum_url['admin_bans'], $forum_url['page'], ($forum_page['page'] - 1)).'" title="'.$lang_common['Page'].' '.($forum_page['page'] - 1).'" />';
  358. $forum_page['nav']['first'] = '<link rel="first" href="'.forum_link($forum_url['admin_bans']).'" title="'.$lang_common['Page'].' 1" />';
  359. }
  360. ($hook = get_hook('aba_pre_header_load')) ? eval($hook) : null;
  361. define('FORUM_PAGE_SECTION', 'users');
  362. define('FORUM_PAGE', 'admin-bans');
  363. require FORUM_ROOT.'header.php';
  364. // START SUBST - <!-- forum_main -->
  365. ob_start();
  366. ($hook = get_hook('aba_main_output_start')) ? eval($hook) : null;
  367. ?>
  368. <div class="main-subhead">
  369. <h2 class="hn"><span><?php echo $lang_admin_bans['New ban heading'] ?></span></h2>
  370. </div>
  371. <div class="main-content main-frm">
  372. <div class="ct-box">
  373. <p><?php echo $lang_admin_bans['Advanced ban info'] ?></p>
  374. </div>
  375. <form class="frm-form" method="post" accept-charset="utf-8" action="<?php echo $forum_page['form_action'] ?>">
  376. <div class="hidden">
  377. <?php echo implode("\n\t\t\t\t", $forum_page['hidden_fields'])."\n" ?>
  378. </div>
  379. <fieldset class="frm-group group<?php echo ++$forum_page['group_count'] ?>">
  380. <legend class="group-legend"><strong><?php echo $lang_admin_bans['New ban legend'] ?></strong></legend>
  381. <div class="sf-set set<?php echo ++$forum_page['item_count'] ?>">
  382. <div class="sf-box text">
  383. <label for="fld<?php echo ++$forum_page['fld_count'] ?>"><span><?php echo $lang_admin_bans['Username to ban label'] ?></span></label><br />
  384. <span class="fld-input"><input type="text" id="fld<?php echo $forum_page['fld_count'] ?>" name="new_ban_user" size="25" maxlength="25" /></span>
  385. </div>
  386. </div>
  387. </fieldset>
  388. <div class="frm-buttons">
  389. <span class="submit primary"><input type="submit" name="add_ban" value=" <?php echo $lang_admin_bans['Add ban'] ?> " /></span>
  390. </div>
  391. </form>
  392. </div>
  393. <?php
  394. // Reset counters
  395. $forum_page['group_count'] = $forum_page['item_count'] = 0;
  396. ?>
  397. <div class="main-subhead">
  398. <h2 class="hn"><span><?php echo $lang_admin_bans['Existing bans heading'] ?></span></h2>
  399. </div>
  400. <div class="main-content main-frm">
  401. <?php
  402. if ($forum_page['num_bans'] > 0)
  403. {
  404. ?>
  405. <div class="ct-group">
  406. <?php
  407. // Grab the bans
  408. $query = array(
  409. 'SELECT' => 'b.*, u.username AS ban_creator_username',
  410. 'FROM' => 'bans AS b',
  411. 'JOINS' => array(
  412. array(
  413. 'LEFT JOIN' => 'users AS u',
  414. 'ON' => 'u.id=b.ban_creator'
  415. )
  416. ),
  417. 'ORDER BY' => 'b.id',
  418. 'LIMIT' => $forum_page['start_from'].', '.$forum_page['finish_at']
  419. );
  420. $result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
  421. $forum_page['item_num'] = 0;
  422. while ($cur_ban = $forum_db->fetch_assoc($result))
  423. {
  424. $forum_page['ban_info'] = array();
  425. $forum_page['ban_creator'] = ($cur_ban['ban_creator_username'] != '') ? '<a href="'.forum_link($forum_url['user'], $cur_ban['ban_creator']).'">'.forum_htmlencode($cur_ban['ban_creator_username']).'</a>' : $lang_admin_common['Unknown'];
  426. if ($cur_ban['username'] != '')
  427. $forum_page['ban_info']['username'] = '<li><span>'.$lang_admin_bans['Username'].'</span> <strong>'.forum_htmlencode($cur_ban['username']).'</strong></li>';
  428. if ($cur_ban['email'] != '')
  429. $forum_page['ban_info']['email'] = '<li><span>'.$lang_admin_bans['E-mail'].'</span> <strong>'.forum_htmlencode($cur_ban['email']).'</strong></li>';
  430. if ($cur_ban['ip'] != '')
  431. $forum_page['ban_info']['ip'] = '<li><span>'.$lang_admin_bans['IP-ranges'].'</span> <strong>'.$cur_ban['ip'].'</strong></li>';
  432. if ($cur_ban['expire'] != '')
  433. $forum_page['ban_info']['expire'] = '<li><span>'.$lang_admin_bans['Expires'].'</span> <strong>'.format_time($cur_ban['expire'], 1).'</strong></li>';
  434. if ($cur_ban['message'] != '')
  435. $forum_page['ban_info']['message'] ='<li><span>'.$lang_admin_bans['Message'].'</span> <strong>'.forum_htmlencode($cur_ban['message']).'</strong></li>';
  436. ($hook = get_hook('aba_view_ban_pre_display')) ? eval($hook) : null;
  437. ?>
  438. <div class="ct-set set<?php echo ++$forum_page['item_num'] ?>">
  439. <div class="ct-box">
  440. <div class="ct-legend">
  441. <h3><span><?php printf($lang_admin_bans['Current ban head'], $forum_page['ban_creator']) ?></span></h3>
  442. <p><?php printf($lang_admin_bans['Edit or remove'], '<a href="'.forum_link($forum_url['admin_bans']).'&amp;edit_ban='.$cur_ban['id'].'">'.$lang_admin_bans['Edit ban'].'</a>', '<a href="'.forum_link($forum_url['admin_bans']).'&amp;del_ban='.$cur_ban['id'].'&amp;csrf_token='.generate_form_token('del_ban'.$cur_ban['id']).'">'.$lang_admin_bans['Remove ban'].'</a>') ?></p>
  443. </div>
  444. <?php if (!empty($forum_page['ban_info'])): ?>
  445. <ul>
  446. <?php echo implode("\n", $forum_page['ban_info'])."\n" ?>
  447. </ul>
  448. <?php endif; ?>
  449. </div>
  450. </div>
  451. <?php
  452. }
  453. ?>
  454. </div>
  455. <?php
  456. }
  457. else
  458. {
  459. ?>
  460. <div class="ct-box">
  461. <p><?php echo $lang_admin_bans['No bans'] ?></p>
  462. </div>
  463. <?php
  464. }
  465. ?>
  466. </div>
  467. <?php
  468. ($hook = get_hook('aba_end')) ? eval($hook) : null;
  469. $tpl_temp = forum_trim(ob_get_contents());
  470. $tpl_main = str_replace('<!-- forum_main -->', $tpl_temp, $tpl_main);
  471. ob_end_clean();
  472. // END SUBST - <!-- forum_main -->
  473. require FORUM_ROOT.'footer.php';