1<?php 2/** 3 * Word censor management page. 4 * 5 * Allows administrators and moderators to add, modify, and delete the word censors used by the software when censoring is enabled. 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 12 13if (!defined('FORUM_ROOT')) 14 define('FORUM_ROOT', '../'); 15require FORUM_ROOT.'include/common.php'; 16require FORUM_ROOT.'include/common_admin.php'; 17 18($hook = get_hook('acs_start')) ? eval($hook) : null; 19 20if (!$forum_user['is_admmod']) 21 message($lang_common['No permission']); 22 23// Load the admin.php language file 24require FORUM_ROOT.'lang/'.$forum_user['language'].'/admin_common.php'; 25require FORUM_ROOT.'lang/'.$forum_user['language'].'/admin_censoring.php'; 26 27 28// Add a censor word 29if (isset($_POST['add_word'])) 30{ 31 $search_for = forum_trim($_POST['new_search_for']); 32 $replace_with = forum_trim($_POST['new_replace_with']); 33 34 if ($search_for == '' || $replace_with == '') 35 message($lang_admin_censoring['Must enter text message']); 36 37 ($hook = get_hook('acs_add_word_form_submitted')) ? eval($hook) : null; 38 39 $query = array( 40 'INSERT' => 'search_for, replace_with', 41 'INTO' => 'censoring', 42 'VALUES' => '\''.$forum_db->escape($search_for).'\', \''.$forum_db->escape($replace_with).'\'' 43 ); 44 45 ($hook = get_hook('acs_add_word_qr_add_censor')) ? eval($hook) : null; 46 $forum_db->query_build($query) or error(__FILE__, __LINE__); 47 48 // Regenerate the censor cache 49 if (!defined('FORUM_CACHE_FUNCTIONS_LOADED')) 50 require FORUM_ROOT.'include/cache.php'; 51 52 generate_censors_cache(); 53 54 // Add flash message 55 $forum_flash->add_info($lang_admin_censoring['Censor word added']); 56 57 ($hook = get_hook('acs_add_word_pre_redirect')) ? eval($hook) : null; 58 59 redirect(forum_link($forum_url['admin_censoring']), $lang_admin_censoring['Censor word added']); 60} 61 62 63// Update a censor word 64else if (isset($_POST['update'])) 65{ 66 $id = intval(key($_POST['update'])); 67 68 $search_for = forum_trim($_POST['search_for'][$id]); 69 $replace_with = forum_trim($_POST['replace_with'][$id]); 70 71 if ($search_for == '' || $replace_with == '') 72 message($lang_admin_censoring['Must enter text message']); 73 74 ($hook = get_hook('acs_update_form_submitted')) ? eval($hook) : null; 75 76 $query = array( 77 'UPDATE' => 'censoring', 78 'SET' => 'search_for=\''.$forum_db->escape($search_for).'\', replace_with=\''.$forum_db->escape($replace_with).'\'', 79 'WHERE' => 'id='.$id 80 ); 81 82 ($hook = get_hook('acs_update_qr_update_censor')) ? eval($hook) : null; 83 $forum_db->query_build($query) or error(__FILE__, __LINE__); 84 85 // Regenerate the censor cache 86 if (!defined('FORUM_CACHE_FUNCTIONS_LOADED')) 87 require FORUM_ROOT.'include/cache.php'; 88 89 generate_censors_cache(); 90 91 // Add flash message 92 $forum_flash->add_info($lang_admin_censoring['Censor word updated']); 93 94 ($hook = get_hook('acs_update_pre_redirect')) ? eval($hook) : null; 95 96 redirect(forum_link($forum_url['admin_censoring']), $lang_admin_censoring['Censor word updated']); 97} 98 99 100// Remove a censor word 101else if (isset($_POST['remove'])) 102{ 103 $id = intval(key($_POST['remove'])); 104 105 ($hook = get_hook('acs_remove_form_submitted')) ? eval($hook) : null; 106 107 $query = array( 108 'DELETE' => 'censoring', 109 'WHERE' => 'id='.$id 110 ); 111 112 ($hook = get_hook('acs_remove_qr_delete_censor')) ? eval($hook) : null; 113 $forum_db->query_build($query) or error(__FILE__, __LINE__); 114 115 // Regenerate the censor cache 116 if (!defined('FORUM_CACHE_FUNCTIONS_LOADED')) 117 require FORUM_ROOT.'include/cache.php'; 118 119 generate_censors_cache(); 120 121 // Add flash message 122 $forum_flash->add_info($lang_admin_censoring['Censor word removed']); 123 124 ($hook = get_hook('acs_remove_pre_redirect')) ? eval($hook) : null; 125 126 redirect(forum_link($forum_url['admin_censoring']), $lang_admin_censoring['Censor word removed']); 127} 128 129 130// Load the cached censors 131if (file_exists(FORUM_CACHE_DIR.'cache_censors.php')) 132 include FORUM_CACHE_DIR.'cache_censors.php'; 133 134if (!defined('FORUM_CENSORS_LOADED')) 135{ 136 if (!defined('FORUM_CACHE_FUNCTIONS_LOADED')) 137 require FORUM_ROOT.'include/cache.php'; 138 139 generate_censors_cache(); 140 require FORUM_CACHE_DIR.'cache_censors.php'; 141} 142 143 144// Setup the form 145$forum_page['group_count'] = $forum_page['item_count'] = $forum_page['fld_count'] = 0; 146 147// Setup breadcrumbs 148$forum_page['crumbs'] = array( 149 array($forum_config['o_board_title'], forum_link($forum_url['index'])), 150 array($lang_admin_common['Forum administration'], forum_link($forum_url['admin_index'])) 151); 152if ($forum_user['g_id'] == FORUM_ADMIN) 153 $forum_page['crumbs'][] = array($lang_admin_common['Settings'], forum_link($forum_url['admin_settings_setup'])); 154$forum_page['crumbs'][] = array($lang_admin_common['Censoring'], forum_link($forum_url['admin_censoring'])); 155 156 157($hook = get_hook('acs_pre_header_load')) ? eval($hook) : null; 158 159define('FORUM_PAGE_SECTION', 'settings'); 160define('FORUM_PAGE', 'admin-censoring'); 161require FORUM_ROOT.'header.php'; 162 163// START SUBST - <!-- forum_main --> 164ob_start(); 165 166($hook = get_hook('acs_main_output_start')) ? eval($hook) : null; 167 168?> 169 <div class="main-subhead"> 170 <h2 class="hn"><span><?php echo $lang_admin_censoring['Censored word head'] ?></span></h2> 171 </div> 172 <div class="main-content main-frm"> 173 <form class="frm-form" method="post" accept-charset="utf-8" action="<?php echo forum_link($forum_url['admin_censoring']) ?>?action=foo"> 174 <div class="hidden"> 175 <input type="hidden" name="csrf_token" value="<?php echo generate_form_token(forum_link($forum_url['admin_censoring']).'?action=foo') ?>" /> 176 </div> 177 <div class="ct-box" id="info-censored-intro"> 178 <p><?php echo $lang_admin_censoring['Add censored word intro']; if ($forum_user['g_id'] == FORUM_ADMIN) printf(' '.$lang_admin_censoring['Add censored word extra'], '<a class="nowrap" href="'.forum_link($forum_url['admin_settings_features']).'">'.$lang_admin_common['Settings'].' → '.$lang_admin_common['Features'].'</a>') ?></p> 179 </div> 180 <fieldset class="frm-group frm-hdgroup group<?php echo ++$forum_page['group_count'] ?>"> 181 <legend class="group-legend"><span><?php echo $lang_admin_censoring['Add censored word legend'] ?></span></legend> 182<?php ($hook = get_hook('acs_pre_add_word_fieldset')) ? eval($hook) : null; ?> 183 <fieldset class="mf-set set<?php echo ++$forum_page['item_count'] ?><?php echo ($forum_page['item_count'] == 1) ? ' mf-head' : ' mf-extra' ?>"> 184 <legend><span><?php echo $lang_admin_censoring['Add new word legend'] ?></span></legend> 185 <div class="mf-box"> 186<?php ($hook = get_hook('acs_pre_add_search_for')) ? eval($hook) : null; ?> 187 <div class="mf-field mf-field1"> 188 <label for="fld<?php echo ++$forum_page['fld_count'] ?>"><span class="fld-label"><?php echo $lang_admin_censoring['Censored word label'] ?></span></label><br /> 189 <span class="fld-input"><input type="text" id="fld<?php echo $forum_page['fld_count'] ?>" name="new_search_for" size="24" maxlength="60" required /></span> 190 </div> 191<?php ($hook = get_hook('acs_pre_add_replace_with')) ? eval($hook) : null; ?> 192 <div class="mf-field"> 193 <label for="fld<?php echo ++$forum_page['fld_count'] ?>"><span class="fld-label"><?php echo $lang_admin_censoring['Replacement label'] ?></span></label><br /> 194 <span class="fld-input"><input type="text" id="fld<?php echo $forum_page['fld_count'] ?>" name="new_replace_with" size="24" maxlength="60" required /></span> 195 </div> 196<?php ($hook = get_hook('acs_pre_add_submit')) ? eval($hook) : null; ?> 197 <div class="mf-field"> 198 <span class="submit"><input type="submit" name="add_word" value=" <?php echo $lang_admin_censoring['Add word'] ?> " /></span> 199 </div> 200 </div> 201<?php ($hook = get_hook('acs_pre_add_word_fieldset_end')) ? eval($hook) : null; ?> 202 </fieldset> 203<?php ($hook = get_hook('acs_add_word_fieldset_end')) ? eval($hook) : null; ?> 204 </fieldset> 205 </form> 206<?php 207 208if (!empty($forum_censors)) 209{ 210 // Reset 211 $forum_page['group_count'] = $forum_page['item_count'] = 0; 212 213?> 214 <form class="frm-form" method="post" accept-charset="utf-8" action="<?php echo forum_link($forum_url['admin_censoring']) ?>?action=foo"> 215 <div class="hidden"> 216 <input type="hidden" name="csrf_token" value="<?php echo generate_form_token(forum_link($forum_url['admin_censoring']).'?action=foo') ?>" /> 217 </div> 218 <fieldset class="frm-group group<?php echo ++$forum_page['group_count'] ?>"> 219 <legend class="group-legend"><span><?php echo $lang_admin_censoring['Edit censored word legend'] ?></span></legend> 220<?php 221 222 foreach ($forum_censors as $censor_key => $cur_word) 223 { 224 225 ?> 226<?php ($hook = get_hook('acs_pre_edit_word_fieldset')) ? eval($hook) : null; ?> 227 <fieldset class="mf-set mf-extra set<?php echo ++$forum_page['item_count'] ?><?php echo ($forum_page['item_count'] == 1) ? ' mf-head' : ' mf-extra' ?>"> 228 <legend><span><?php echo $lang_admin_censoring['Existing censored word legend'] ?></span></legend> 229 <div class="mf-box"> 230<?php ($hook = get_hook('acs_pre_edit_search_for')) ? eval($hook) : null; ?> 231 <div class="mf-field mf-field1"> 232 <label for="fld<?php echo ++$forum_page['fld_count'] ?>"><span><?php echo $lang_admin_censoring['Censored word label'] ?></span></label><br /> 233 <span class="fld-input"><input type="text" id="fld<?php echo $forum_page['fld_count'] ?>" name="search_for[<?php echo $cur_word['id'] ?>]" value="<?php echo forum_htmlencode($cur_word['search_for']) ?>" size="24" maxlength="60" required /></span> 234 </div> 235<?php ($hook = get_hook('acs_pre_edit_replace_with')) ? eval($hook) : null; ?> 236 <div class="mf-field"> 237 <label for="fld<?php echo ++$forum_page['fld_count'] ?>"><span><?php echo $lang_admin_censoring['Replacement label'] ?></span></label><br /> 238 <span class="fld-input"><input type="text" id="fld<?php echo $forum_page['fld_count'] ?>" name="replace_with[<?php echo $cur_word['id'] ?>]" value="<?php echo forum_htmlencode($cur_word['replace_with']) ?>" size="24" maxlength="60" required /></span> 239 </div> 240<?php ($hook = get_hook('acs_pre_edit_submit')) ? eval($hook) : null; ?> 241 <div class="mf-field"> 242 <span class="submit"><input type="submit" name="update[<?php echo $cur_word['id'] ?>]" value="<?php echo $lang_admin_common['Update'] ?>" /> <input type="submit" name="remove[<?php echo $cur_word['id'] ?>]" value="<?php echo $lang_admin_common['Remove'] ?>" formnovalidate /></span> 243 </div> 244 </div> 245<?php ($hook = get_hook('acs_pre_edit_word_fieldset_end')) ? eval($hook) : null; ?> 246 </fieldset> 247<?php ($hook = get_hook('acs_edit_word_fieldset_end')) ? eval($hook) : null; ?> 248<?php 249 250 } 251 252?> 253 </fieldset> 254 </form> 255 </div> 256<?php 257 258} 259else 260{ 261 262?> 263 <div class="frm-form"> 264 <div class="ct-box"> 265 <p><?php echo $lang_admin_censoring['No censored words'] ?></p> 266 </div> 267 </div> 268 </div> 269<?php 270 271} 272 273($hook = get_hook('acs_end')) ? eval($hook) : null; 274 275$tpl_temp = forum_trim(ob_get_contents()); 276$tpl_main = str_replace('<!-- forum_main -->', $tpl_temp, $tpl_main); 277ob_end_clean(); 278// END SUBST - <!-- forum_main --> 279 280require FORUM_ROOT.'footer.php'; 281