acl_get('a_bbcode')) { return; } $module['POST']['BBCODES'] = basename(__FILE__) . $SID; return; } define('IN_PHPBB', 1); // Include files $phpbb_root_path = '../'; $phpEx = substr(strrchr(__FILE__, '.'), 1); require('pagestart.' . $phpEx); // Do we have general permissions? if (!$auth->acl_get('a_bbcode')) { trigger_error($user->lang['NO_ADMIN']); } // Set up general vars $mode = (!empty($_REQUEST['mode'])) ? $_REQUEST['mode'] : ''; $bbcode_id = (!empty($_REQUEST['bbcode'])) ? intval($_REQUEST['bbcode']) : 0; // Set up mode-specific vars switch ($mode) { case 'add': $bbcode_match = $bbcode_tpl = ''; break; case 'edit': $sql = 'SELECT bbcode_match, bbcode_tpl FROM ' . BBCODES_TABLE . ' WHERE bbcode_id = ' . $bbcode_id; $result = $db->sql_query($sql); if (!$row = $db->sql_fetchrow($result)) { trigger_error('BBCODE_NOT_EXIST'); } $bbcode_match = $row['bbcode_match']; $bbcode_tpl = htmlspecialchars($row['bbcode_tpl']); break; case 'modify': $sql = 'SELECT bbcode_id FROM ' . BBCODES_TABLE . ' WHERE bbcode_id = ' . $bbcode_id; $result = $db->sql_query($sql); if (!$row = $db->sql_fetchrow($result)) { trigger_error('BBCODE_NOT_EXIST'); } // No break here case 'create': $bbcode_match = htmlspecialchars(stripslashes($_POST['bbcode_match'])); $bbcode_tpl = stripslashes($_POST['bbcode_tpl']); break; } // Do major work switch ($mode) { case 'edit': case 'add': adm_page_header($user->lang['BBCODES']); ?>
lang['BBCODES_EXPLAIN'] ?>
lang['BBCODES']); $data = build_regexp($bbcode_match, $bbcode_tpl); $sql_ary = array( 'bbcode_tag' => $data['bbcode_tag'], 'bbcode_match' => $bbcode_match, 'bbcode_tpl' => $bbcode_tpl, 'first_pass_match' => $data['first_pass_match'], 'first_pass_replace' => $data['first_pass_replace'], 'second_pass_match' => $data['second_pass_match'], 'second_pass_replace' => $data['second_pass_replace'] ); if ($mode == 'create') { // TODO: look for SQL incompatibilities // NOTE: I'm sure there was another simpler (and obvious) way of finding a suitable bbcode_id $sql = 'SELECT b1.bbcode_id FROM ' . BBCODES_TABLE . ' b1, ' . BBCODES_TABLE . ' b2 WHERE b2.bbcode_id > b1.bbcode_id GROUP BY b1.bbcode_id HAVING MIN(b2.bbcode_id) > b1.bbcode_id + 1 ORDER BY b1.bbcode_id ASC'; $result = $db->sql_query_limit($sql, 1); if ($row = $db->sql_fetchrow($result)) { $bbcode_id = $row['bbcode_id'] + 1; } else { $sql = 'SELECT MIN(bbcode_id) AS min_id, MAX(bbcode_id) AS max_id FROM ' . BBCODES_TABLE; $result = $db->sql_query($sql); $row = $db->sql_fetchrow($result); if (empty($row['min_id']) || $row['min_id'] >= NUM_CORE_BBCODES) { $bbcode_id = NUM_CORE_BBCODES + 1; } else { $bbcode_id = $row['max_id'] + 1; } } if ($bbcode_id > 31) { trigger_error('TOO_MANY_BBCODES'); } $sql_ary['bbcode_id'] = (int) $bbcode_id; $db->sql_query('INSERT INTO ' . BBCODES_TABLE . $db->sql_build_array('INSERT', $sql_ary)); $lang = 'BBCODE_ADDED'; $log_action = 'LOG_BBCODE_ADD'; } else { $db->sql_query('UPDATE ' . BBCODES_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . ' WHERE bbcode_id = ' . $bbcode_id); $lang = 'BBCODE_EDITED'; $log_action = 'LOG_BBCODE_EDIT'; } add_log('admin', $log_action, $data['bbcode_tag']); trigger_error($lang); break; case 'delete': $sql = 'SELECT bbcode_tag FROM ' . BBCODES_TABLE . " WHERE bbcode_id = $bbcode_id"; $result = $db->sql_query($sql); if ($row = $db->sql_fetchrow($result)) { $db->sql_query('DELETE FROM ' . BBCODES_TABLE . " WHERE bbcode_id = $bbcode_id"); add_log('admin', 'LOG_BBCODE_DELETE', $row['bbcode_tag']); } // No break here default: adm_page_header($user->lang['BBCODES']); ?>lang['BBCODES_EXPLAIN'] ?>
array( '!([a-z0-9]+://)?(.*?[^ \t\n\r<"]*)!ise' => "(('\$1') ? '\$1\$2' : 'http://\$2')" ), 'LOCAL_URL' => array( '!([^:]+/[^ \t\n\r<"]*)!' => '$1' ), 'EMAIL' => array( '!([a-z0-9]+[a-z0-9\-\._]*@(?:(?:[0-9]{1,3}\.){3,5}[0-9]{1,3}|[a-z0-9]+[a-z0-9\-\._]*\.[a-z]+))!i' => '$1' ), 'TEXT' => array( '!(.*?)!es' => "str_replace('\\\"', '"', str_replace('\\'', ''', '\$1'))" ), 'COLOR' => array( '!([a-z]+|#[0-9abcdef]+!i' => '$1' ), 'NUMBER' => array( '!([0-9]+)!' => '$1' ) ); if (preg_match_all('/\{(' . implode('|', array_keys($tokens)) . ')[0-9]*\}/i', $msg_bbcode, $m)) { $pad = 0; $modifiers = 'i'; foreach ($m[0] as $n => $token) { $token_type = $m[1][$n]; reset($tokens[$token_type]); list($match, $replace) = each($tokens[$token_type]); // Pad backreference numbers from tokens if (preg_match_all('/(? $bbcode_tag, 'first_pass_match' => $fp_match, 'first_pass_replace' => $fp_replace, 'second_pass_match' => $sp_match, 'second_pass_replace' => $sp_replace ); } // End Functions // ----------------------------- ?>