function settings($id, $mode) { global $config, $db, $user, $auth, $template; global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix; $submit = isset($_POST['submit']) ? true : false; $action = request_var('action', ''); $this->tpl_name = 'acp_board'; $this->page_title = $user->lang['ACP_BLOGS']; blog_plugins::plugin_do('acp_main_start'); $settings = array('legend0' => 'VERSION', 'user_blog_version' => array('lang' => 'VERSION', 'type' => 'custom', 'method' => 'blog_version', 'explain' => false), 'legend1' => 'BLOG_SETTINGS', 'user_blog_enable' => array('lang' => 'ENABLE_USER_BLOG', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'user_blog_enable_plugins' => array('lang' => 'ENABLE_USER_BLOG_PLUGINS', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'user_blog_subscription_enabled' => array('lang' => 'ENABLE_SUBSCRIPTIONS', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'user_blog_enable_zebra' => array('lang' => 'BLOG_ENABLE_ZEBRA', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'user_blog_seo' => array('lang' => 'BLOG_ENABLE_SEO', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'user_blog_search' => array('lang' => 'BLOG_ENABLE_SEARCH', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'user_blog_user_permissions' => array('lang' => 'BLOG_ENABLE_USER_PERMISSIONS', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'user_blog_enable_ratings' => array('lang' => 'BLOG_ENABLE_RATINGS', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'user_blog_enable_attachments' => array('lang' => 'BLOG_ENABLE_ATTACHMENTS', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'user_blog_enable_feeds' => array('lang' => 'BLOG_ENABLE_FEEDS', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => false), 'legend2' => 'BLOG_POST_VIEW_SETTINGS', 'user_blog_guest_captcha' => array('lang' => 'BLOG_GUEST_CAPTCHA', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'user_blog_custom_profile_enable' => array('lang' => 'ENABLE_BLOG_CUSTOM_PROFILES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'user_blog_links_output_block' => array('lang' => 'OUTPUT_CPLINKS_BLOCK', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'user_blog_always_show_blog_url' => array('lang' => 'BLOG_ALWAYS_SHOW_URL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'user_blog_text_limit' => array('lang' => 'DEFAULT_TEXT_LIMIT', 'validate' => 'int', 'type' => 'text:5:5', 'explain' => true), 'user_blog_user_text_limit' => array('lang' => 'USER_TEXT_LIMIT', 'validate' => 'int', 'type' => 'text:5:5', 'explain' => true), 'user_blog_inform' => array('lang' => 'BLOG_INFORM', 'validate' => 'string', 'type' => 'text:25:100', 'explain' => true), 'user_blog_message_from' => array('lang' => 'BLOG_MESSAGE_FROM', 'validate' => 'string', 'type' => 'text:5:5', 'explain' => true), 'user_blog_min_rating' => array('lang' => 'BLOG_MIN_RATING', 'validate' => 'int', 'type' => 'text:5:5', 'explain' => true), 'user_blog_max_rating' => array('lang' => 'BLOG_MAX_RATING', 'validate' => 'int', 'type' => 'text:5:5', 'explain' => true), 'user_blog_quick_reply' => array('lang' => 'BLOG_QUICK_REPLY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend3' => 'BLOG_ATTACHMENT_SETTINGS', 'user_blog_max_attachments' => array('lang' => 'BLOG_MAX_ATTACHMENTS', 'validate' => 'int', 'type' => 'text:5:5', 'explain' => true)); blog_plugins::plugin_do_ref('acp_main_settings', $settings); $this->new_config = $config; $cfg_array = isset($_REQUEST['config']) ? utf8_normalize_nfc(request_var('config', array('' => ''), true)) : $this->new_config; $error = array(); // We validate the complete config if whished validate_config_vars($settings, $cfg_array, $error); // Do not write values if there is an error if (sizeof($error)) { $submit = false; } $template->assign_vars(array('L_TITLE' => $user->lang['BLOG_SETTINGS'], 'L_TITLE_EXPLAIN' => $user->lang['BLOG_SETTINGS_EXPLAIN'], 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error), 'U_ACTION' => $this->u_action)); foreach ($settings as $config_key => $vars) { if ($submit) { if (!isset($cfg_array[$config_key]) || strpos($config_key, 'legend') !== false) { continue; } $this->new_config[$config_key] = $config_value = $cfg_array[$config_key]; set_config($config_key, $config_value); } else { if ((!is_array($vars) || !isset($this->new_config[$config_key])) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars))); } } if ($submit) { add_log('admin', 'LOG_BLOG_CONFIG'); trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } }
/** * @param array $default_settings * @return array|void */ public function get_submitted_settings(array $default_settings) { if (!function_exists('validate_config_vars')) { include $this->phpbb_root_path . 'includes/functions_acp.' . $this->php_ext; } $cfg_array = utf8_normalize_nfc($this->request->variable('config', array('' => ''), true)); $errors = array(); validate_config_vars($default_settings, $cfg_array, $errors); if (sizeof($errors)) { return array('errors' => join("\n", $errors)); } $this->_get_multi_select($cfg_array, $default_settings); return array_intersect_key($cfg_array, $default_settings); }
/** * Build Confirm * * @param string $title The title of the page * @param string $explain The explanation of the page * @param array $display_vars The array holding all of the settings/information - like how admin_board is setup * @param string $submit_type The type of submit buttons you want shown. Currently supported: 'submit/reset' or 'yes/no' * @param string $action The page you want to submit to. Leave as self to be the current page. */ function blog_confirm($title, $explain, $display_vars, $submit_type = 'submit/reset', $action = 'self') { global $template, $user; $submit = isset($_POST['submit']) ? true : false; $error = $settings = array(); if ($submit) { // check the form key if (!check_form_key('confirm')) { $error[] = $user->lang['FORM_INVALID']; } $settings = request_var('setting', array('' => '')); validate_config_vars($display_vars, $settings, $error); if (!sizeof($error)) { return $settings; } else { $template->assign_vars(array('S_ERROR' => true, 'ERROR_MSG' => implode($error, '<br />'))); } } // Add the form key add_form_key('confirm'); if ($action === 'self') { global $blog_urls; if (isset($blog_urls['self'])) { $action = $blog_urls['self']; } else { $action = $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING']; } } $template->assign_vars(array('L_TITLE' => isset($user->lang[$title]) ? $user->lang[$title] : $title, 'L_TITLE_EXPLAIN' => isset($user->lang[$explain]) ? $user->lang[$explain] : $explain, 'U_ACTION' => $action, 'S_YES_NO' => $submit_type == 'submit/reset' ? false : true)); foreach ($display_vars as $key => $vars) { if (strpos($key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $default = isset($settings[$key]) ? $settings[$key] : $vars['default']; $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $template->assign_block_vars('options', array('KEY' => $key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => build_blog_cfg_template($type, $key, $default))); } $template->set_filenames(array('body' => 'blog/blog_confirm.html')); return 'build'; }
function main($id, $mode) { global $db, $user, $template, $cache; global $config, $pbwow_config, $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix; // Some basic includes if (!function_exists('db_theme_data')) { include $phpbb_root_path . 'includes/acp/acp_styles.' . $phpEx; } if (!class_exists('phpbb_db_tools')) { include $phpbb_root_path . 'includes/db/db_tools.' . $phpEx; } $db_tool = new phpbb_db_tools($db); $user->add_lang('mods/lang_pbwow_acp'); if (isset($display_vars['lang'])) { $user->add_lang($display_vars['lang']); } $this->tpl_name = 'acp_pbwow2'; // Some constants $module_version = '2.0.9'; $dbtable = defined('PBWOW2_CONFIG_TABLE') ? PBWOW2_CONFIG_TABLE : ''; $legacy_dbtable = defined('PBWOW_CONFIG_TABLE') ? PBWOW_CONFIG_TABLE : ''; $topics_table = TOPICS_TABLE; $chars_table = defined('PBWOW2_CHARS_TABLE') ? PBWOW2_CHARS_TABLE : ''; $allow_fopen = ini_get('allow_url_fopen') ? true : false; $constantsokay = $dbokay = $legacy_constants = $legacy_db_active = $legacy_topics_mod = false; $style_version = $imageset_version = $template_version = $theme_version = ''; // Check if constants have been set correctly // if yes, check if the config table exists // if yes, load the config variables if ($dbtable == $table_prefix . 'pbwow2_config') { $constantsokay = true; if ($db_tool->sql_table_exists($dbtable)) { $dbokay = true; $pbwow_config = $this->get_pbwow_config(); $this->new_config = $pbwow_config; if (!isset($pbwow_config['pbwow2_version'])) { if (isset($config['pbwow2_version']) && !empty($config['pbwow2_version'])) { $pbwow_config['pbwow2_version'] = $config['pbwow2_version']; } } } } if ($chars_table == $table_prefix . 'pbwow2_chars') { $chars_constokay = true; if ($db_tool->sql_table_exists($chars_table)) { $chars_dbokay = true; } } if ($mode == 'overview') { $cpflist = $this->get_cpf_list(); $style_root = $phpbb_root_path . 'styles/pbwow2/'; if (file_exists($style_root . 'style.cfg')) { $values = parse_cfg_file($style_root . 'style.cfg'); $style_version = isset($values['version']) ? $values['version'] : ''; } if (file_exists($style_root . 'imageset/imageset.cfg')) { $values = parse_cfg_file($style_root . 'imageset/imageset.cfg'); $imageset_version = isset($values['version']) ? $values['version'] : ''; } if (file_exists($style_root . 'template/template.cfg')) { $values = parse_cfg_file($style_root . 'template/template.cfg'); $template_version = isset($values['version']) ? $values['version'] : ''; } if (file_exists($style_root . 'theme/theme.cfg')) { $values = parse_cfg_file($style_root . 'theme/theme.cfg'); $theme_version = isset($values['version']) ? $values['version'] : ''; } $versions = $this->obtain_pbwow_version_info(request_var('versioncheck_force', false), true); // Check if old constants are still being used if (!empty($legacy_dbtable)) { $legacy_constants = true; } // Check if old table still exists if ($db_tool->sql_table_exists($legacy_dbtable) || $db_tool->sql_table_exists($table_prefix . 'pbwow_config')) { $legacy_db_active = true; } // Check if topics table has been modded if ($db_tool->sql_column_exists(TOPICS_TABLE, 'topic_first_poster_rank_img') || $db_tool->sql_column_exists(TOPICS_TABLE, 'topic_first_poster_rank_title')) { $legacy_topics_mod = true; } } /** * Validation types are: * string, int, bool, * script_path (absolute path in url - beginning with / and no trailing slash), * rpath (relative), rwpath (realtive, writeable), path (relative path, but able to escape the root), wpath (writeable) */ switch ($mode) { case 'overview': $display_vars = array('title' => 'ACP_PBWOW2_OVERVIEW_TITLE', 'vars' => array()); break; case 'config': $display_vars = array('title' => 'ACP_PBWOW_CONFIG_TITLE', 'vars' => array('legend1' => 'ACP_PBWOW_LOGO', 'logo_size_width' => array('lang' => 'PBWOW_LOGO_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'logo_size_height' => array('lang' => 'PBWOW_LOGO_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'logo_enable' => array('lang' => 'PBWOW_LOGO_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'logo_src' => array('lang' => 'PBWOW_LOGO_SRC', 'validate' => 'string', 'type' => 'text:20:255', 'explain' => true), 'logo_size' => array('lang' => 'PBWOW_LOGO_SIZE', 'validate' => 'int:0', 'type' => 'dimension:3:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'logo_margins' => array('lang' => 'PBWOW_LOGO_MARGINS', 'validate' => 'string', 'type' => 'text:20:20', 'explain' => true), 'legend2' => 'ACP_PBWOW_TOPBAR', 'topbar_enable' => array('lang' => 'PBWOW_TOPBAR_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'topbar_code' => array('lang' => 'PBWOW_TOPBAR_CODE', 'type' => 'textarea:6:6', 'explain' => true), 'topbar_fixed' => array('lang' => 'PBWOW_TOPBAR_FIXED', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend3' => 'ACP_PBWOW_HEADERLINKS', 'headerlinks_enable' => array('lang' => 'PBWOW_HEADERLINKS_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'headerlinks_code' => array('lang' => 'PBWOW_HEADERLINKS_CODE', 'type' => 'textarea:6:6', 'explain' => true), 'legend4' => 'ACP_PBWOW_NAVMENU', 'navmenu_enable' => array('lang' => 'PBWOW_NAVMENU_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'legend5' => 'ACP_PBWOW_IE6MESSAGE', 'ie6message_enable' => array('lang' => 'PBWOW_IE6MESSAGE_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'ie6message_code' => array('lang' => 'PBWOW_IE6MESSAGE_CODE', 'type' => 'textarea:6:6', 'explain' => true), 'legend6' => 'ACP_PBWOW_VIDEOBG', 'videobg_enable' => array('lang' => 'PBWOW_VIDEOBG_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'videobg_allpages' => array('lang' => 'PBWOW_VIDEOBG_ALLPAGES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'bg_fixed' => array('lang' => 'PBWOW_BG_FIXED', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend7' => 'ACP_PBWOW_BNETCHARS', 'bnetchars_enable' => array('lang' => 'PBWOW_BNETCHARS_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'bnetchars_cachetime' => array('lang' => 'PBWOW_BNETCHARS_CACHETIME', 'validate' => 'int:0', 'type' => 'text:6:6', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']), 'bnetchars_timeout' => array('lang' => 'PBWOW_BNETCHARS_TIMEOUT', 'validate' => 'int:0', 'type' => 'text:1:1', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']), 'legend8' => 'ACP_PBWOW_TOOLTIPS', 'wowtips_script' => array('lang' => 'PBWOW_WOWTIPS_SCRIPT', 'validate' => 'int', 'type' => 'custom', 'explain' => true, 'method' => 'select_single'), 'd3tips_script' => array('lang' => 'PBWOW_D3TIPS_SCRIPT', 'validate' => 'int', 'type' => 'custom', 'explain' => true, 'method' => 'select_single'), 'zamtips_enable' => array('lang' => 'PBWOW_ZAMTIPS_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'tooltips_region' => array('lang' => 'PBWOW_TOOLTIPS_REGION', 'validate' => 'int', 'type' => 'custom', 'explain' => true, 'method' => 'select_single'), 'tooltips_footer' => array('lang' => 'PBWOW_TOOLTIPS_FOOTER', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'tooltips_local' => array('lang' => 'PBWOW_TOOLTIPS_LOCAL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true))); break; case 'poststyling': $display_vars = array('title' => 'ACP_PBWOW_POSTSTYLING_TITLE', 'vars' => array('legend1' => 'ACP_PBWOW_BLIZZ', 'blizz_enable' => array('lang' => 'PBWOW_BLIZZ_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'blizz_ranks' => array('lang' => 'PBWOW_BLIZZ_RANKS', 'validate' => 'string', 'type' => 'custom', 'explain' => true, 'method' => 'select_ranks'), 'blizz_color' => array('lang' => 'PBWOW_BLIZZ_COLOR', 'validate' => 'string', 'type' => 'text:7:7', 'explain' => true), 'legend2' => 'ACP_PBWOW_PROPASS', 'propass_enable' => array('lang' => 'PBWOW_PROPASS_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'propass_ranks' => array('lang' => 'PBWOW_PROPASS_RANKS', 'validate' => 'string', 'type' => 'custom', 'explain' => true, 'method' => 'select_ranks'), 'propass_color' => array('lang' => 'PBWOW_PROPASS_COLOR', 'validate' => 'string', 'type' => 'text:7:7', 'explain' => true), 'legend3' => 'ACP_PBWOW_RED', 'red_enable' => array('lang' => 'PBWOW_RED_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'red_ranks' => array('lang' => 'PBWOW_RED_RANKS', 'validate' => 'string', 'type' => 'custom', 'explain' => true, 'method' => 'select_ranks'), 'red_color' => array('lang' => 'PBWOW_RED_COLOR', 'validate' => 'string', 'type' => 'text:7:7', 'explain' => true), 'legend4' => 'ACP_PBWOW_GREEN', 'green_enable' => array('lang' => 'PBWOW_GREEN_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'green_ranks' => array('lang' => 'PBWOW_GREEN_RANKS', 'validate' => 'string', 'type' => 'custom', 'explain' => true, 'method' => 'select_ranks'), 'green_color' => array('lang' => 'PBWOW_GREEN_COLOR', 'validate' => 'string', 'type' => 'text:7:7', 'explain' => true))); break; case 'ads': $display_vars = array('title' => 'ACP_PBWOW_ADS_TITLE', 'vars' => array('legend1' => 'ACP_PBWOW_ADS_INDEX', 'ads_index_enable' => array('lang' => 'PBWOW_ADS_INDEX_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'ads_index_code' => array('lang' => 'PBWOW_ADS_INDEX_CODE', 'type' => 'textarea:6:6', 'explain' => true), 'legend2' => 'ACP_PBWOW_ADS_TOP', 'ads_top_enable' => array('lang' => 'PBWOW_ADS_TOP_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'ads_top_code' => array('lang' => 'PBWOW_ADS_TOP_CODE', 'type' => 'textarea:6:6', 'explain' => true), 'legend3' => 'ACP_PBWOW_ADS_BOTTOM', 'ads_bottom_enable' => array('lang' => 'PBWOW_ADS_BOTTOM_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'ads_bottom_code' => array('lang' => 'PBWOW_ADS_BOTTOM_CODE', 'type' => 'textarea:6:6', 'explain' => true), 'legend4' => 'ACP_PBWOW_ADS_SIDE', 'ads_side_enable' => array('lang' => 'PBWOW_ADS_SIDE_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'ads_side_code' => array('lang' => 'PBWOW_ADS_SIDE_CODE', 'type' => 'textarea:6:6', 'explain' => true), 'legend5' => 'ACP_PBWOW_TRACKING', 'tracking_enable' => array('lang' => 'PBWOW_TRACKING_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'tracking_code' => array('lang' => 'PBWOW_TRACKING_CODE', 'type' => 'textarea:6:6', 'explain' => true))); break; } $action = request_var('action', ''); $submit = isset($_POST['submit']) ? true : false; $cfg_array = isset($_REQUEST['config']) ? utf8_normalize_nfc(request_var('config', array('' => ''), true)) : $this->new_config; $error = array(); // We validate the complete config if we want validate_config_vars($display_vars['vars'], $cfg_array, $error); // Do not write values if there is an error if (sizeof($error)) { $submit = false; } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... and then write to config foreach ($display_vars['vars'] as $config_name => $null) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($submit) { $this->set_pbwow_config($config_name, $config_value); } } if ($submit) { if ($action == 'refresh_topic_ranks' && $legacy_topics_mod == true) { $this->refresh_topic_ranks(); $cache->purge(); } if ($action == 'create_topic_ranks' && $legacy_topics_mod == false) { $db_tool->sql_column_add($topics_table, 'topic_first_poster_rank_img', array('VCHAR', '')); $db_tool->sql_column_add($topics_table, 'topic_first_poster_rank_title', array('VCHAR', '')); add_log('admin', 'Topics MOD installed', $user->lang['ACP_PBWOW2_' . strtoupper($mode)]); trigger_error('Topics MOD installed' . adm_back_link($this->u_action)); } if (($action == 'drop_topic_ranks' || $action == 'remove_legacy') && $legacy_topics_mod == true) { $db_tool->sql_column_remove($topics_table, 'topic_first_poster_rank_img'); $db_tool->sql_column_remove($topics_table, 'topic_first_poster_rank_title'); add_log('admin', 'Topics MOD uninstalled', $user->lang['ACP_PBWOW2_' . strtoupper($mode)]); trigger_error('Topics MOD uninstalled' . adm_back_link($this->u_action)); } if ($action == 'refresh_all_themes') { $this->refresh_all_themes(); $cache->purge(); add_log('admin', 'LOG_THEME_REFRESHED', $user->lang['ACP_PBWOW2_' . strtoupper($mode)]); trigger_error('All theme data refreshed' . adm_back_link($this->u_action)); } // Get data from select boxes and store in DB if ($mode == 'poststyling') { $this->store_select_options('blizz_ranks'); $this->store_select_options('propass_ranks'); $this->store_select_options('red_ranks'); $this->store_select_options('green_ranks'); add_log('admin', 'LOG_PBWOW_CONFIG', $user->lang['ACP_PBWOW2_' . strtoupper($mode)]); $cache->purge(); trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } if ($mode == ('config' || 'ads')) { $this->store_select_options('wowtips_script'); $this->store_select_options('d3tips_script'); $this->store_select_options('tooltips_region'); add_log('admin', 'LOG_PBWOW_CONFIG', $user->lang['ACP_PBWOW2_' . strtoupper($mode)]); $cache->purge(); trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } } $this->page_title = $display_vars['title']; $title_explain = $user->lang[$display_vars['title'] . '_EXPLAIN']; $template->assign_vars(array('L_TITLE' => $user->lang[$display_vars['title']], 'L_TITLE_EXPLAIN' => $title_explain, 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error), 'S_CONSTANTSOKAY' => $constantsokay ? true : false, 'PBWOW_DBTABLE' => $dbtable, 'S_DBOKAY' => $dbokay ? true : false, 'L_PBWOW_DB_GOOD' => sprintf($user->lang['PBWOW_DB_GOOD'], $dbtable), 'L_PBWOW_DB_BAD' => sprintf($user->lang['PBWOW_DB_BAD'], $dbtable), 'L_PBWOW_RANKS_CREATE_EXPLAIN' => sprintf($user->lang['PBWOW_RANKS_CREATE_EXPLAIN'], $topics_table, $topics_table), 'L_PBWOW_CHARSDB_GOOD' => sprintf($user->lang['PBWOW_CHARSDB_GOOD'], $chars_table), 'L_PBWOW_CHARSDB_BAD' => sprintf($user->lang['PBWOW_CHARSDB_BAD'], $chars_table), 'TOPICS_TABLE' => $topics_table, 'U_ACTION' => $this->u_action)); if ($mode == 'overview') { $template->assign_vars(array('S_INDEX' => true, 'DB_VERSION' => isset($pbwow_config['pbwow2_version']) ? $pbwow_config['pbwow2_version'] : '', 'MODULE_VERSION' => isset($module_version) ? $module_version : '', 'STYLE_VERSION' => $style_version, 'IMAGESET_VERSION' => $imageset_version, 'TEMPLATE_VERSION' => $template_version, 'THEME_VERSION' => $theme_version, 'S_CHECK_V' => empty($versions) ? false : true, 'DB_VERSION_V' => isset($versions['db_version']['version']) ? $versions['db_version']['version'] : '', 'MODULE_VERSION_V' => isset($versions['module_version']['version']) ? $versions['module_version']['version'] : '', 'ATEMPLATE_VERSION_V' => isset($versions['atemplate_version']['version']) ? $versions['atemplate_version']['version'] : '', 'STYLE_VERSION_V' => isset($versions['style_version']['version']) ? $versions['style_version']['version'] : '', 'IMAGESET_VERSION_V' => isset($versions['imageset_version']['version']) ? $versions['imageset_version']['version'] : '', 'TEMPLATE_VERSION_V' => isset($versions['template_version']['version']) ? $versions['template_version']['version'] : '', 'THEME_VERSION_V' => isset($versions['theme_version']['version']) ? $versions['theme_version']['version'] : '', 'U_VERSIONCHECK_FORCE' => append_sid($this->u_action . '&versioncheck_force=1'), 'S_ALLOW_FOPEN' => $allow_fopen, 'S_CPF_ON_MEMBERLIST' => $config['load_cpf_memberlist'] == 1 ? true : false, 'S_CPF_ON_VIEWPROFILE' => $config['load_cpf_viewprofile'] == 1 ? true : false, 'S_CPF_ON_VIEWTOPIC' => $config['load_cpf_viewtopic'] == 1 ? true : false, 'S_CPF_PBGUILD' => isset($cpflist['pbguild']) && $cpflist['pbguild']['field_no_view'] == 0 ? true : false, 'S_CPF_PBREALM' => isset($cpflist['pbrealm']) && $cpflist['pbrealm']['field_no_view'] == 0 ? true : false, 'S_CPF_PBLEVEL' => isset($cpflist['pblevel']) && $cpflist['pblevel']['field_no_view'] == 0 ? true : false, 'S_CPF_PBRACE' => isset($cpflist['pbrace']) && $cpflist['pbrace']['field_no_view'] == 0 ? true : false, 'S_CPF_PBGENDER' => isset($cpflist['pbgender']) && $cpflist['pbgender']['field_no_view'] == 0 ? true : false, 'S_CPF_PBCLASS' => isset($cpflist['pbclass']) && $cpflist['pbclass']['field_no_view'] == 0 ? true : false, 'S_CPF_PBPVPRANK' => isset($cpflist['pbpvprank']) && $cpflist['pbpvprank']['field_no_view'] == 0 ? true : false, 'S_CPF_PBARMORYCHARLINK' => isset($cpflist['pbarmorycharlink']) && $cpflist['pbarmorycharlink']['field_no_view'] == 0 ? true : false, 'S_CPF_PBARMORYGUILDLINK' => isset($cpflist['pbarmoryguildlink']) && $cpflist['pbarmoryguildlink']['field_no_view'] == 0 ? true : false, 'S_CPF_PBDCLASS' => isset($cpflist['pbdclass']) && $cpflist['pbguild']['pbdclass'] == 0 ? true : false, 'S_CPF_PBDGENDER' => isset($cpflist['pbdgender']) && $cpflist['pbguild']['pbdgender'] == 0 ? true : false, 'S_CPF_PBDFOLLOWER' => isset($cpflist['pbdfollower']) && $cpflist['pbguild']['pbdfollower'] == 0 ? true : false, 'S_BNETCHARS_ACTIVE' => isset($pbwow_config['bnetchars_enable']) && $pbwow_config['bnetchars_enable'] ? true : false, 'S_BNETCHARS_CONSTOKAY' => $chars_constokay ? true : false, 'S_BNETCHARS_DBOKAY' => $chars_dbokay ? true : false, 'S_CPF_PBBNETHOST' => isset($cpflist['pbbnethost']) && $cpflist['pbbnethost']['field_no_view'] == 0 ? true : false, 'S_CPF_PBBNETREALM' => isset($cpflist['pbbnetrealm']) && $cpflist['pbbnetrealm']['field_no_view'] == 0 ? true : false, 'S_CPF_PBBNETNAME' => isset($cpflist['pbbnetname']) && $cpflist['pbbnetname']['field_no_view'] == 0 ? true : false, 'S_CPF_PBNETAVATAR' => isset($cpflist['pbbnetavatar']) && $cpflist['pbbnetavatar']['field_no_view'] == 0 ? true : false, 'S_LEGACY_CONSTANTS' => $legacy_constants, 'S_LEGACY_DB_ACTIVE' => $legacy_db_active, 'S_LEGACY_TOPICS_MOD' => $legacy_topics_mod)); } // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars); if (empty($content)) { continue; } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $content)); unset($display_vars['vars'][$config_key]); } }
/** * Abstracted method to generate acp configuration pages out of a list of display vars, using * the function build_cfg_template(). * Build configuration template for acp configuration pages * * @param array $display_vars The display vars for this acp site */ protected function generate_stuff_for_cfg_template($display_vars) { $this->new_config = $this->config; $cfg_array = $this->request->is_set('config') ? $this->request->variable('config', ['' => ''], true) : $this->new_config; $error = isset($error) ? $error : []; validate_config_vars($display_vars['vars'], $cfg_array, $error); foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $this->template->assign_block_vars('options', ['S_LEGEND' => true, 'LEGEND' => isset($this->user->lang[$vars]) ? $this->user->lang[$vars] : $vars]); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($this->user->lang[$vars['lang_explain']]) ? $this->user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($this->user->lang[$vars['lang'] . '_EXPLAIN']) ? $this->user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars); if (empty($content)) { continue; } $this->template->assign_block_vars('options', ['KEY' => $config_key, 'TITLE' => isset($this->user->lang[$vars['lang']]) ? $this->user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $content]); //unset($display_vars['vars'][$config_key]); } $this->template->assign_vars(['S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error), 'U_ACTION' => $this->u_action]); }
function main($id, $mode) { global $db, $user, $auth, $template, $cache; global $config, $phpbb_admin_path, $phpbb_root_path, $phpEx; $user->add_lang(array('posting', 'viewtopic', 'acp/attachments')); $error = $notify = array(); $submit = isset($_POST['submit']) ? true : false; $action = request_var('action', ''); $form_key = 'acp_attach'; add_form_key($form_key); if ($submit && !check_form_key($form_key)) { trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING); } switch ($mode) { case 'attach': $l_title = 'ACP_ATTACHMENT_SETTINGS'; break; case 'extensions': $l_title = 'ACP_MANAGE_EXTENSIONS'; break; case 'ext_groups': $l_title = 'ACP_EXTENSION_GROUPS'; break; case 'orphan': $l_title = 'ACP_ORPHAN_ATTACHMENTS'; break; default: trigger_error('NO_MODE', E_USER_ERROR); break; } $this->tpl_name = 'acp_attachments'; $this->page_title = $l_title; $template->assign_vars(array('L_TITLE' => $user->lang[$l_title], 'L_TITLE_EXPLAIN' => $user->lang[$l_title . '_EXPLAIN'], 'U_ACTION' => $this->u_action)); switch ($mode) { case 'attach': include_once $phpbb_root_path . 'includes/functions_posting.' . $phpEx; $sql = 'SELECT group_name, cat_id FROM ' . EXTENSION_GROUPS_TABLE . ' WHERE cat_id > 0 ORDER BY cat_id'; $result = $db->sql_query($sql); $s_assigned_groups = array(); while ($row = $db->sql_fetchrow($result)) { $s_assigned_groups[$row['cat_id']][] = $row['group_name']; } $db->sql_freeresult($result); $l_legend_cat_images = $user->lang['SETTINGS_CAT_IMAGES'] . ' [' . $user->lang['ASSIGNED_GROUP'] . ': ' . (!empty($s_assigned_groups[ATTACHMENT_CATEGORY_IMAGE]) ? implode(', ', $s_assigned_groups[ATTACHMENT_CATEGORY_IMAGE]) : $user->lang['NO_EXT_GROUP']) . ']'; $display_vars = array('title' => 'ACP_ATTACHMENT_SETTINGS', 'vars' => array('legend1' => 'ACP_ATTACHMENT_SETTINGS', 'img_max_width' => array('lang' => 'MAX_IMAGE_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'img_max_height' => array('lang' => 'MAX_IMAGE_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'img_link_width' => array('lang' => 'IMAGE_LINK_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'img_link_height' => array('lang' => 'IMAGE_LINK_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'allow_attachments' => array('lang' => 'ALLOW_ATTACHMENTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_pm_attach' => array('lang' => 'ALLOW_PM_ATTACHMENTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'upload_path' => array('lang' => 'UPLOAD_DIR', 'validate' => 'wpath', 'type' => 'text:25:100', 'explain' => true), 'display_order' => array('lang' => 'DISPLAY_ORDER', 'validate' => 'bool', 'type' => 'custom', 'method' => 'display_order', 'explain' => true), 'attachment_quota' => array('lang' => 'ATTACH_QUOTA', 'validate' => 'string', 'type' => 'custom', 'method' => 'max_filesize', 'explain' => true), 'max_filesize' => array('lang' => 'ATTACH_MAX_FILESIZE', 'validate' => 'string', 'type' => 'custom', 'method' => 'max_filesize', 'explain' => true), 'max_filesize_pm' => array('lang' => 'ATTACH_MAX_PM_FILESIZE', 'validate' => 'string', 'type' => 'custom', 'method' => 'max_filesize', 'explain' => true), 'max_attachments' => array('lang' => 'MAX_ATTACHMENTS', 'validate' => 'int', 'type' => 'text:3:3', 'explain' => false), 'max_attachments_pm' => array('lang' => 'MAX_ATTACHMENTS_PM', 'validate' => 'int', 'type' => 'text:3:3', 'explain' => false), 'secure_downloads' => array('lang' => 'SECURE_DOWNLOADS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'secure_allow_deny' => array('lang' => 'SECURE_ALLOW_DENY', 'validate' => 'int', 'type' => 'custom', 'method' => 'select_allow_deny', 'explain' => true), 'secure_allow_empty_referer' => array('lang' => 'SECURE_EMPTY_REFERRER', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'check_attachment_content' => array('lang' => 'CHECK_CONTENT', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend2' => $l_legend_cat_images, 'img_display_inlined' => array('lang' => 'DISPLAY_INLINED', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'img_create_thumbnail' => array('lang' => 'CREATE_THUMBNAIL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'img_max_thumb_width' => array('lang' => 'MAX_THUMB_WIDTH', 'validate' => 'int', 'type' => 'text:7:15', 'explain' => true, 'append' => ' px'), 'img_min_thumb_filesize' => array('lang' => 'MIN_THUMB_FILESIZE', 'validate' => 'int', 'type' => 'text:7:15', 'explain' => true, 'append' => ' ' . $user->lang['BYTES']), 'img_imagick' => array('lang' => 'IMAGICK_PATH', 'validate' => 'string', 'type' => 'text:20:200', 'explain' => true, 'append' => ' <span>[ <a href="' . $this->u_action . '&action=imgmagick">' . $user->lang['SEARCH_IMAGICK'] . '</a> ]</span>'), 'img_max' => array('lang' => 'MAX_IMAGE_SIZE', 'validate' => 'int', 'type' => 'dimension:3:4', 'explain' => true, 'append' => ' px'), 'img_link' => array('lang' => 'IMAGE_LINK_SIZE', 'validate' => 'int', 'type' => 'dimension:3:4', 'explain' => true, 'append' => ' px'))); $this->new_config = $config; $cfg_array = isset($_REQUEST['config']) ? request_var('config', array('' => '')) : $this->new_config; $error = array(); // We validate the complete config if whished validate_config_vars($display_vars['vars'], $cfg_array, $error); // Do not write values if there is an error if (sizeof($error)) { $submit = false; } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $null) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if (in_array($config_name, array('attachment_quota', 'max_filesize', 'max_filesize_pm'))) { $size_var = request_var($config_name, ''); $this->new_config[$config_name] = $config_value = $size_var == 'kb' ? round($config_value * 1024) : ($size_var == 'mb' ? round($config_value * 1048576) : $config_value); } if ($submit) { set_config($config_name, $config_value); } } $this->perform_site_list(); if ($submit) { add_log('admin', 'LOG_CONFIG_ATTACH'); // Check Settings $this->test_upload($error, $this->new_config['upload_path'], false); if (!sizeof($error)) { trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } } $template->assign_var('S_ATTACHMENT_SETTINGS', true); if ($action == 'imgmagick') { $this->new_config['img_imagick'] = $this->search_imagemagick(); } // We strip eventually manual added convert program, we only want the patch if ($this->new_config['img_imagick']) { // Change path separator $this->new_config['img_imagick'] = str_replace('\\', '/', $this->new_config['img_imagick']); $this->new_config['img_imagick'] = str_replace(array('convert', '.exe'), array('', ''), $this->new_config['img_imagick']); // Check for trailing slash if (substr($this->new_config['img_imagick'], -1) !== '/') { $this->new_config['img_imagick'] .= '/'; } } $supported_types = get_supported_image_types(); // Check Thumbnail Support if (!$this->new_config['img_imagick'] && (!isset($supported_types['format']) || !sizeof($supported_types['format']))) { $this->new_config['img_create_thumbnail'] = 0; } $template->assign_vars(array('U_SEARCH_IMAGICK' => $this->u_action . '&action=imgmagick', 'S_THUMBNAIL_SUPPORT' => !$this->new_config['img_imagick'] && (!isset($supported_types['format']) || !sizeof($supported_types['format'])) ? false : true)); // Secure Download Options - Same procedure as with banning $allow_deny = $this->new_config['secure_allow_deny'] ? 'ALLOWED' : 'DISALLOWED'; $sql = 'SELECT * FROM ' . SITELIST_TABLE; $result = $db->sql_query($sql); $defined_ips = ''; $ips = array(); while ($row = $db->sql_fetchrow($result)) { $value = $row['site_ip'] ? $row['site_ip'] : $row['site_hostname']; if ($value) { $defined_ips .= '<option' . ($row['ip_exclude'] ? ' class="sep"' : '') . ' value="' . $row['site_id'] . '">' . $value . '</option>'; $ips[$row['site_id']] = $value; } } $db->sql_freeresult($result); $template->assign_vars(array('S_SECURE_DOWNLOADS' => $this->new_config['secure_downloads'], 'S_DEFINED_IPS' => $defined_ips != '' ? true : false, 'S_WARNING' => sizeof($error) ? true : false, 'WARNING_MSG' => implode('<br />', $error), 'DEFINED_IPS' => $defined_ips, 'L_SECURE_TITLE' => $user->lang['DEFINE_' . $allow_deny . '_IPS'], 'L_IP_EXCLUDE' => $user->lang['EXCLUDE_FROM_' . $allow_deny . '_IP'], 'L_REMOVE_IPS' => $user->lang['REMOVE_' . $allow_deny . '_IPS'])); // Output relevant options foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars); if (empty($content)) { continue; } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => $user->lang[$vars['lang']], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $content)); unset($display_vars['vars'][$config_key]); } break; case 'extensions': if ($submit || isset($_POST['add_extension_check'])) { if ($submit) { // Change Extensions ? $extension_change_list = request_var('extension_change_list', array(0)); $group_select_list = request_var('group_select', array(0)); // Generate correct Change List $extensions = array(); for ($i = 0, $size = sizeof($extension_change_list); $i < $size; $i++) { $extensions[$extension_change_list[$i]]['group_id'] = $group_select_list[$i]; } $sql = 'SELECT * FROM ' . EXTENSIONS_TABLE . ' ORDER BY extension_id'; $result = $db->sql_query($sql); while ($row = $db->sql_fetchrow($result)) { if ($row['group_id'] != $extensions[$row['extension_id']]['group_id']) { $sql = 'UPDATE ' . EXTENSIONS_TABLE . ' SET group_id = ' . (int) $extensions[$row['extension_id']]['group_id'] . ' WHERE extension_id = ' . $row['extension_id']; $db->sql_query($sql); add_log('admin', 'LOG_ATTACH_EXT_UPDATE', $row['extension']); } } $db->sql_freeresult($result); // Delete Extension? $extension_id_list = request_var('extension_id_list', array(0)); if (sizeof($extension_id_list)) { $sql = 'SELECT extension FROM ' . EXTENSIONS_TABLE . ' WHERE ' . $db->sql_in_set('extension_id', $extension_id_list); $result = $db->sql_query($sql); $extension_list = ''; while ($row = $db->sql_fetchrow($result)) { $extension_list .= $extension_list == '' ? $row['extension'] : ', ' . $row['extension']; } $db->sql_freeresult($result); $sql = 'DELETE FROM ' . EXTENSIONS_TABLE . ' WHERE ' . $db->sql_in_set('extension_id', $extension_id_list); $db->sql_query($sql); add_log('admin', 'LOG_ATTACH_EXT_DEL', $extension_list); } } // Add Extension? $add_extension = strtolower(request_var('add_extension', '')); $add_extension_group = request_var('add_group_select', 0); $add = isset($_POST['add_extension_check']) ? true : false; if ($add_extension && $add) { if (!sizeof($error)) { $sql = 'SELECT extension_id FROM ' . EXTENSIONS_TABLE . "\n\t\t\t\t\t\t\t\tWHERE extension = '" . $db->sql_escape($add_extension) . "'"; $result = $db->sql_query($sql); if ($row = $db->sql_fetchrow($result)) { $error[] = sprintf($user->lang['EXTENSION_EXIST'], $add_extension); } $db->sql_freeresult($result); if (!sizeof($error)) { $sql_ary = array('group_id' => $add_extension_group, 'extension' => $add_extension); $db->sql_query('INSERT INTO ' . EXTENSIONS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary)); add_log('admin', 'LOG_ATTACH_EXT_ADD', $add_extension); } } } if (!sizeof($error)) { $notify[] = $user->lang['EXTENSIONS_UPDATED']; } $cache->destroy('_extensions'); } $template->assign_vars(array('S_EXTENSIONS' => true, 'ADD_EXTENSION' => isset($add_extension) ? $add_extension : '', 'GROUP_SELECT_OPTIONS' => isset($_POST['add_extension_check']) ? $this->group_select('add_group_select', $add_extension_group, 'extension_group') : $this->group_select('add_group_select', false, 'extension_group'))); $sql = 'SELECT * FROM ' . EXTENSIONS_TABLE . ' ORDER BY group_id, extension'; $result = $db->sql_query($sql); if ($row = $db->sql_fetchrow($result)) { $old_group_id = $row['group_id']; do { $s_spacer = false; $current_group_id = $row['group_id']; if ($old_group_id != $current_group_id) { $s_spacer = true; $old_group_id = $current_group_id; } $template->assign_block_vars('extensions', array('S_SPACER' => $s_spacer, 'EXTENSION_ID' => $row['extension_id'], 'EXTENSION' => $row['extension'], 'GROUP_OPTIONS' => $this->group_select('group_select[]', $row['group_id']))); } while ($row = $db->sql_fetchrow($result)); } $db->sql_freeresult($result); break; case 'ext_groups': $template->assign_var('S_EXTENSION_GROUPS', true); if ($submit) { $action = request_var('action', ''); $group_id = request_var('g', 0); if ($action != 'add' && $action != 'edit') { trigger_error('NO_MODE', E_USER_ERROR); } if (!$group_id && $action == 'edit') { trigger_error($user->lang['NO_EXT_GROUP_SPECIFIED'] . adm_back_link($this->u_action), E_USER_WARNING); } if ($group_id) { $sql = 'SELECT * FROM ' . EXTENSION_GROUPS_TABLE . "\n\t\t\t\t\t\t\tWHERE group_id = {$group_id}"; $result = $db->sql_query($sql); $ext_row = $db->sql_fetchrow($result); $db->sql_freeresult($result); if (!$ext_row) { trigger_error($user->lang['NO_EXT_GROUP_SPECIFIED'] . adm_back_link($this->u_action), E_USER_WARNING); } } else { $ext_row = array(); } $group_name = utf8_normalize_nfc(request_var('group_name', '', true)); $new_group_name = $action == 'add' ? $group_name : ($ext_row['group_name'] != $group_name ? $group_name : ''); if (!$group_name) { $error[] = $user->lang['NO_EXT_GROUP_NAME']; } // Check New Group Name if ($new_group_name) { $sql = 'SELECT group_id FROM ' . EXTENSION_GROUPS_TABLE . "\n\t\t\t\t\t\t\tWHERE LOWER(group_name) = '" . $db->sql_escape(utf8_strtolower($new_group_name)) . "'"; $result = $db->sql_query($sql); if ($db->sql_fetchrow($result)) { $error[] = sprintf($user->lang['EXTENSION_GROUP_EXIST'], $new_group_name); } $db->sql_freeresult($result); } if (!sizeof($error)) { // Ok, build the update/insert array $upload_icon = request_var('upload_icon', 'no_image'); $size_select = request_var('size_select', 'b'); $forum_select = request_var('forum_select', false); $allowed_forums = request_var('allowed_forums', array(0)); $allow_in_pm = isset($_POST['allow_in_pm']) ? true : false; $max_filesize = request_var('max_filesize', 0); $max_filesize = $size_select == 'kb' ? round($max_filesize * 1024) : ($size_select == 'mb' ? round($max_filesize * 1048576) : $max_filesize); $allow_group = isset($_POST['allow_group']) ? true : false; if ($max_filesize == $config['max_filesize']) { $max_filesize = 0; } if (!sizeof($allowed_forums)) { $forum_select = false; } $group_ary = array('group_name' => $group_name, 'cat_id' => request_var('special_category', ATTACHMENT_CATEGORY_NONE), 'allow_group' => $allow_group ? 1 : 0, 'upload_icon' => $upload_icon == 'no_image' ? '' : $upload_icon, 'max_filesize' => $max_filesize, 'allowed_forums' => $forum_select ? serialize($allowed_forums) : '', 'allow_in_pm' => $allow_in_pm ? 1 : 0); if ($action == 'add') { $group_ary['download_mode'] = INLINE_LINK; } $sql = $action == 'add' ? 'INSERT INTO ' . EXTENSION_GROUPS_TABLE . ' ' : 'UPDATE ' . EXTENSION_GROUPS_TABLE . ' SET '; $sql .= $db->sql_build_array($action == 'add' ? 'INSERT' : 'UPDATE', $group_ary); $sql .= $action == 'edit' ? " WHERE group_id = {$group_id}" : ''; $db->sql_query($sql); if ($action == 'add') { $group_id = $db->sql_nextid(); } add_log('admin', 'LOG_ATTACH_EXTGROUP_' . strtoupper($action), $group_name); } $extension_list = request_var('extensions', array(0)); if ($action == 'edit' && sizeof($extension_list)) { $sql = 'UPDATE ' . EXTENSIONS_TABLE . "\n\t\t\t\t\t\t\tSET group_id = 0\n\t\t\t\t\t\t\tWHERE group_id = {$group_id}"; $db->sql_query($sql); } if (sizeof($extension_list)) { $sql = 'UPDATE ' . EXTENSIONS_TABLE . "\n\t\t\t\t\t\t\tSET group_id = {$group_id}\n\t\t\t\t\t\t\tWHERE " . $db->sql_in_set('extension_id', $extension_list); $db->sql_query($sql); } $cache->destroy('_extensions'); if (!sizeof($error)) { $notify[] = $user->lang['SUCCESS_EXTENSION_GROUP_' . strtoupper($action)]; } } $cat_lang = array(ATTACHMENT_CATEGORY_NONE => $user->lang['NO_FILE_CAT'], ATTACHMENT_CATEGORY_IMAGE => $user->lang['CAT_IMAGES'], ATTACHMENT_CATEGORY_WM => $user->lang['CAT_WM_FILES'], ATTACHMENT_CATEGORY_RM => $user->lang['CAT_RM_FILES'], ATTACHMENT_CATEGORY_FLASH => $user->lang['CAT_FLASH_FILES'], ATTACHMENT_CATEGORY_QUICKTIME => $user->lang['CAT_QUICKTIME_FILES']); $group_id = request_var('g', 0); $action = isset($_POST['add']) ? 'add' : $action; switch ($action) { case 'delete': if (confirm_box(true)) { $sql = 'SELECT group_name FROM ' . EXTENSION_GROUPS_TABLE . "\n\t\t\t\t\t\t\t\tWHERE group_id = {$group_id}"; $result = $db->sql_query($sql); $group_name = (string) $db->sql_fetchfield('group_name'); $db->sql_freeresult($result); $sql = 'DELETE FROM ' . EXTENSION_GROUPS_TABLE . "\n\t\t\t\t\t\t\t\tWHERE group_id = {$group_id}"; $db->sql_query($sql); // Set corresponding Extensions to a pending Group $sql = 'UPDATE ' . EXTENSIONS_TABLE . "\n\t\t\t\t\t\t\t\tSET group_id = 0\n\t\t\t\t\t\t\t\tWHERE group_id = {$group_id}"; $db->sql_query($sql); add_log('admin', 'LOG_ATTACH_EXTGROUP_DEL', $group_name); $cache->destroy('_extensions'); trigger_error($user->lang['EXTENSION_GROUP_DELETED'] . adm_back_link($this->u_action)); } else { confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array('i' => $id, 'mode' => $mode, 'group_id' => $group_id, 'action' => 'delete'))); } break; case 'edit': if (!$group_id) { trigger_error($user->lang['NO_EXT_GROUP_SPECIFIED'] . adm_back_link($this->u_action), E_USER_WARNING); } $sql = 'SELECT * FROM ' . EXTENSION_GROUPS_TABLE . "\n\t\t\t\t\t\t\tWHERE group_id = {$group_id}"; $result = $db->sql_query($sql); $ext_group_row = $db->sql_fetchrow($result); $db->sql_freeresult($result); $forum_ids = !$ext_group_row['allowed_forums'] ? array() : unserialize(trim($ext_group_row['allowed_forums'])); // no break; // no break; case 'add': if ($action == 'add') { $ext_group_row = array('group_name' => utf8_normalize_nfc(request_var('group_name', '', true)), 'cat_id' => 0, 'allow_group' => 1, 'allow_in_pm' => 1, 'upload_icon' => '', 'max_filesize' => 0); $forum_ids = array(); } $extensions = array(); $sql = 'SELECT * FROM ' . EXTENSIONS_TABLE . "\n\t\t\t\t\t\t\tWHERE group_id = {$group_id}\n\t\t\t\t\t\t\t\tOR group_id = 0\n\t\t\t\t\t\t\tORDER BY extension"; $result = $db->sql_query($sql); $extensions = $db->sql_fetchrowset($result); $db->sql_freeresult($result); if ($ext_group_row['max_filesize'] == 0) { $ext_group_row['max_filesize'] = (int) $config['max_filesize']; } $size_format = $ext_group_row['max_filesize'] >= 1048576 ? 'mb' : ($ext_group_row['max_filesize'] >= 1024 ? 'kb' : 'b'); $ext_group_row['max_filesize'] = get_formatted_filesize($ext_group_row['max_filesize'], false); $img_path = $config['upload_icons_path']; $filename_list = ''; $no_image_select = false; $imglist = filelist($phpbb_root_path . $img_path); if (sizeof($imglist)) { $imglist = array_values($imglist); $imglist = $imglist[0]; foreach ($imglist as $key => $img) { if (!$ext_group_row['upload_icon']) { $no_image_select = true; $selected = ''; } else { $selected = $ext_group_row['upload_icon'] == $img ? ' selected="selected"' : ''; } if (strlen($img) > 255) { continue; } $filename_list .= '<option value="' . htmlspecialchars($img) . '"' . $selected . '>' . htmlspecialchars($img) . '</option>'; } } $i = 0; $assigned_extensions = ''; foreach ($extensions as $num => $row) { if ($row['group_id'] == $group_id && $group_id) { $assigned_extensions .= $i ? ', ' . $row['extension'] : $row['extension']; $i++; } } $s_extension_options = ''; foreach ($extensions as $row) { $s_extension_options .= '<option' . (!$row['group_id'] ? ' class="disabled"' : '') . ' value="' . $row['extension_id'] . '"' . ($row['group_id'] == $group_id && $group_id ? ' selected="selected"' : '') . '>' . $row['extension'] . '</option>'; } $template->assign_vars(array('PHPBB_ROOT_PATH' => $phpbb_root_path, 'IMG_PATH' => $img_path, 'ACTION' => $action, 'GROUP_ID' => $group_id, 'GROUP_NAME' => $ext_group_row['group_name'], 'ALLOW_GROUP' => $ext_group_row['allow_group'], 'ALLOW_IN_PM' => $ext_group_row['allow_in_pm'], 'UPLOAD_ICON_SRC' => $phpbb_root_path . $img_path . '/' . $ext_group_row['upload_icon'], 'EXTGROUP_FILESIZE' => $ext_group_row['max_filesize'], 'ASSIGNED_EXTENSIONS' => $assigned_extensions, 'S_CATEGORY_SELECT' => $this->category_select('special_category', $group_id, 'category'), 'S_EXT_GROUP_SIZE_OPTIONS' => size_select_options($size_format), 'S_EXTENSION_OPTIONS' => $s_extension_options, 'S_FILENAME_LIST' => $filename_list, 'S_EDIT_GROUP' => true, 'S_NO_IMAGE' => $no_image_select, 'S_FORUM_IDS' => sizeof($forum_ids) ? true : false, 'U_EXTENSIONS' => append_sid("{$phpbb_admin_path}index.{$phpEx}", "i={$id}&mode=extensions"), 'U_BACK' => $this->u_action, 'L_LEGEND' => $user->lang[strtoupper($action) . '_EXTENSION_GROUP'])); $s_forum_id_options = ''; /** @todo use in-built function **/ $sql = 'SELECT forum_id, forum_name, parent_id, forum_type, left_id, right_id FROM ' . FORUMS_TABLE . ' ORDER BY left_id ASC'; $result = $db->sql_query($sql, 600); $right = $cat_right = $padding_inc = 0; $padding = $forum_list = $holding = ''; $padding_store = array('0' => ''); while ($row = $db->sql_fetchrow($result)) { if ($row['forum_type'] == FORUM_CAT && $row['left_id'] + 1 == $row['right_id']) { // Non-postable forum with no subforums, don't display continue; } if (!$auth->acl_get('f_list', $row['forum_id'])) { // if the user does not have permissions to list this forum skip continue; } if ($row['left_id'] < $right) { $padding .= ' '; $padding_store[$row['parent_id']] = $padding; } else { if ($row['left_id'] > $right + 1) { $padding = empty($padding_store[$row['parent_id']]) ? '' : $padding_store[$row['parent_id']]; } } $right = $row['right_id']; $selected = in_array($row['forum_id'], $forum_ids) ? ' selected="selected"' : ''; if ($row['left_id'] > $cat_right) { // make sure we don't forget anything $s_forum_id_options .= $holding; $holding = ''; } if ($row['right_id'] - $row['left_id'] > 1) { $cat_right = max($cat_right, $row['right_id']); $holding .= '<option value="' . $row['forum_id'] . '"' . ($row['forum_type'] == FORUM_POST ? ' class="sep"' : '') . $selected . '>' . $padding . $row['forum_name'] . '</option>'; } else { $s_forum_id_options .= $holding . '<option value="' . $row['forum_id'] . '"' . ($row['forum_type'] == FORUM_POST ? ' class="sep"' : '') . $selected . '>' . $padding . $row['forum_name'] . '</option>'; $holding = ''; } } if ($holding) { $s_forum_id_options .= $holding; } $db->sql_freeresult($result); unset($padding_store); $template->assign_vars(array('S_FORUM_ID_OPTIONS' => $s_forum_id_options)); break; } $sql = 'SELECT * FROM ' . EXTENSION_GROUPS_TABLE . ' ORDER BY allow_group DESC, allow_in_pm DESC, group_name'; $result = $db->sql_query($sql); $old_allow_group = $old_allow_pm = 1; while ($row = $db->sql_fetchrow($result)) { $s_add_spacer = $old_allow_group != $row['allow_group'] || $old_allow_pm != $row['allow_in_pm'] ? true : false; $template->assign_block_vars('groups', array('S_ADD_SPACER' => $s_add_spacer, 'S_ALLOWED_IN_PM' => $row['allow_in_pm'] ? true : false, 'S_GROUP_ALLOWED' => $row['allow_group'] ? true : false, 'U_EDIT' => $this->u_action . "&action=edit&g={$row['group_id']}", 'U_DELETE' => $this->u_action . "&action=delete&g={$row['group_id']}", 'GROUP_NAME' => $row['group_name'], 'CATEGORY' => $cat_lang[$row['cat_id']])); $old_allow_group = $row['allow_group']; $old_allow_pm = $row['allow_in_pm']; } $db->sql_freeresult($result); break; case 'orphan': if ($submit) { $delete_files = isset($_POST['delete']) ? array_keys(request_var('delete', array('' => 0))) : array(); $add_files = isset($_POST['add']) ? array_keys(request_var('add', array('' => 0))) : array(); $post_ids = request_var('post_id', array('' => 0)); if (sizeof($delete_files)) { $sql = 'SELECT * FROM ' . ATTACHMENTS_TABLE . ' WHERE ' . $db->sql_in_set('attach_id', $delete_files) . ' AND is_orphan = 1'; $result = $db->sql_query($sql); $delete_files = array(); while ($row = $db->sql_fetchrow($result)) { phpbb_unlink($row['physical_filename'], 'file'); if ($row['thumbnail']) { phpbb_unlink($row['physical_filename'], 'thumbnail'); } $delete_files[$row['attach_id']] = $row['real_filename']; } $db->sql_freeresult($result); } if (sizeof($delete_files)) { $sql = 'DELETE FROM ' . ATTACHMENTS_TABLE . ' WHERE ' . $db->sql_in_set('attach_id', array_keys($delete_files)); $db->sql_query($sql); add_log('admin', 'LOG_ATTACH_ORPHAN_DEL', implode(', ', $delete_files)); $notify[] = sprintf($user->lang['LOG_ATTACH_ORPHAN_DEL'], implode(', ', $delete_files)); } $upload_list = array(); foreach ($add_files as $attach_id) { if (!isset($delete_files[$attach_id]) && !empty($post_ids[$attach_id])) { $upload_list[$attach_id] = $post_ids[$attach_id]; } } unset($add_files); if (sizeof($upload_list)) { $template->assign_var('S_UPLOADING_FILES', true); $sql = 'SELECT forum_id, forum_name FROM ' . FORUMS_TABLE; $result = $db->sql_query($sql); $forum_names = array(); while ($row = $db->sql_fetchrow($result)) { $forum_names[$row['forum_id']] = $row['forum_name']; } $db->sql_freeresult($result); $sql = 'SELECT forum_id, topic_id, post_id, poster_id FROM ' . POSTS_TABLE . ' WHERE ' . $db->sql_in_set('post_id', $upload_list); $result = $db->sql_query($sql); $post_info = array(); while ($row = $db->sql_fetchrow($result)) { $post_info[$row['post_id']] = $row; } $db->sql_freeresult($result); // Select those attachments we want to change... $sql = 'SELECT * FROM ' . ATTACHMENTS_TABLE . ' WHERE ' . $db->sql_in_set('attach_id', array_keys($upload_list)) . ' AND is_orphan = 1'; $result = $db->sql_query($sql); $files_added = $space_taken = 0; while ($row = $db->sql_fetchrow($result)) { $post_row = $post_info[$upload_list[$row['attach_id']]]; $template->assign_block_vars('upload', array('FILE_INFO' => sprintf($user->lang['UPLOADING_FILE_TO'], $row['real_filename'], $post_row['post_id']), 'S_DENIED' => !$auth->acl_get('f_attach', $post_row['forum_id']) ? true : false, 'L_DENIED' => !$auth->acl_get('f_attach', $post_row['forum_id']) ? sprintf($user->lang['UPLOAD_DENIED_FORUM'], $forum_names[$row['forum_id']]) : '')); if (!$auth->acl_get('f_attach', $post_row['forum_id'])) { continue; } // Adjust attachment entry $sql_ary = array('in_message' => 0, 'is_orphan' => 0, 'poster_id' => $post_row['poster_id'], 'post_msg_id' => $post_row['post_id'], 'topic_id' => $post_row['topic_id']); $sql = 'UPDATE ' . ATTACHMENTS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . ' WHERE attach_id = ' . $row['attach_id']; $db->sql_query($sql); $sql = 'UPDATE ' . POSTS_TABLE . ' SET post_attachment = 1 WHERE post_id = ' . $post_row['post_id']; $db->sql_query($sql); $sql = 'UPDATE ' . TOPICS_TABLE . ' SET topic_attachment = 1 WHERE topic_id = ' . $post_row['topic_id']; $db->sql_query($sql); $space_taken += $row['filesize']; $files_added++; add_log('admin', 'LOG_ATTACH_FILEUPLOAD', $post_row['post_id'], $row['real_filename']); } $db->sql_freeresult($result); if ($files_added) { set_config('upload_dir_size', $config['upload_dir_size'] + $space_taken, true); set_config('num_files', $config['num_files'] + $files_added, true); } } } $template->assign_vars(array('S_ORPHAN' => true)); // Just get the files with is_orphan set and older than 3 hours $sql = 'SELECT * FROM ' . ATTACHMENTS_TABLE . ' WHERE is_orphan = 1 AND filetime < ' . (time() - 3 * 60 * 60) . ' ORDER BY filetime DESC'; $result = $db->sql_query($sql); while ($row = $db->sql_fetchrow($result)) { $template->assign_block_vars('orphan', array('FILESIZE' => get_formatted_filesize($row['filesize']), 'FILETIME' => $user->format_date($row['filetime']), 'REAL_FILENAME' => basename($row['real_filename']), 'PHYSICAL_FILENAME' => basename($row['physical_filename']), 'ATTACH_ID' => $row['attach_id'], 'POST_IDS' => !empty($post_ids[$row['attach_id']]) ? $post_ids[$row['attach_id']] : '', 'U_FILE' => append_sid($phpbb_root_path . 'download/file.' . $phpEx, 'mode=view&id=' . $row['attach_id']))); } $db->sql_freeresult($result); break; } if (sizeof($error)) { $template->assign_vars(array('S_WARNING' => true, 'WARNING_MSG' => implode('<br />', $error))); } if (sizeof($notify)) { $template->assign_vars(array('S_NOTIFY' => true, 'NOTIFY_MSG' => implode('<br />', $notify))); } }
function main($id, $mode) { global $db, $user, $auth, $template; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx; $action = request_var('action', ''); $submit = isset($_POST['submit']) ? true : false; $form_key = 'acp_thanks_reput'; add_form_key($form_key); /** * Validation types are: * string, int, bool, * script_path (absolute path in url - beginning with / and no trailing slash), * rpath (relative), rwpath (realtive, writable), path (relative path, but able to escape the root), wpath (writable) */ $display_vars = array('title' => 'ACP_THANKS_REPUT_SETTINGS', 'vars' => array('legend' => 'GENERAL_OPTIONS', 'thanks_post_reput_view' => array('lang' => 'THANKS_POST_REPUT_VIEW', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'thanks_topic_reput_view' => array('lang' => 'THANKS_TOPIC_REPUT_VIEW', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'thanks_topic_reput_view_column' => array('lang' => 'THANKS_TOPIC_REPUT_VIEW_COLUMN', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'thanks_forum_reput_view' => array('lang' => 'THANKS_FORUM_REPUT_VIEW', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'thanks_forum_reput_view_column' => array('lang' => 'THANKS_FORUM_REPUT_VIEW_COLUMN', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'thanks_number_digits' => array('lang' => 'THANKS_NUMBER_DIGITS', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => false), 'thanks_number_row_reput' => array('lang' => 'THANKS_NUMBER_ROW_REPUT', 'validate' => 'int:0', 'type' => 'text:4:6', 'explain' => true), 'legend1' => 'GRAPHIC_OPTIONS', 'thanks_reput_graphic' => array('lang' => 'THANKS_REPUT_GRAPHIC', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'thanks_reput_height' => array('lang' => 'THANKS_REPUT_HEIGHT', 'validate' => 'int:1:25', 'type' => 'text:4:6', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'thanks_reput_level' => array('lang' => 'THANKS_REPUT_LEVEL', 'validate' => 'int:4:13', 'type' => 'text:4:4', 'explain' => false), 'thanks_reput_image' => array('lang' => 'THANKS_REPUT_IMAGE', 'validate' => 'string', 'type' => 'text:25:255', 'explain' => true, 'append' => '<br /><img src="' . ($config['thanks_reput_image'] ? $phpbb_root_path . $config['thanks_reput_image'] : '') . '" alt="' . $user->lang['THANKS_REPUT_IMAGE'] . '"/>'), 'thanks_reput_image_back' => array('lang' => 'THANKS_REPUT_IMAGE_BACK', 'validate' => 'string', 'type' => 'text:25:255', 'explain' => true, 'append' => '<br /><img src="' . ($config['thanks_reput_image_back'] ? $phpbb_root_path . $config['thanks_reput_image_back'] : '') . '" alt="' . $user->lang['THANKS_REPUT_IMAGE_BACK'] . '"/>'), 'legend2' => 'GRAPHIC_DEFAULT')); if (isset($display_vars['lang'])) { $user->add_lang($display_vars['lang']); } $this->new_config = $config; $cfg_array = isset($_REQUEST['config']) ? utf8_normalize_nfc(request_var('config', array('' => ''), true)) : $this->new_config; $error = array(); // We validate the complete config if whished validate_config_vars($display_vars['vars'], $cfg_array, $error); if ($submit && !check_form_key($form_key)) { $error[] = $user->lang['FORM_INVALID']; } // Do not write values if there is an error if (sizeof($error)) { $submit = false; } if (!empty($cfg_array['thanks_reput_image']) && !file_exists($phpbb_root_path . $config['thanks_reput_image'])) { $error[] = $user->lang['THANKS_REPUT_IMAGE_NOEXIST']; } if (!empty($cfg_array['thanks_reput_image_back']) && !file_exists($phpbb_root_path . $config['thanks_reput_image_back'])) { $error[] = $user->lang['THANKS_REPUT_IMAGE_BACK_NOEXIST']; } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $null) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($submit) { set_config($config_name, $config_value); } } if ($submit) { add_log('admin', 'LOG_CONFIG_' . strtoupper($mode)); trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } $this->tpl_name = 'acp_thanks_reput'; $this->page_title = $display_vars['title']; $template->assign_vars(array('L_TITLE' => $user->lang[$display_vars['title']], 'L_TITLE_EXPLAIN' => $user->lang[$display_vars['title'] . '_EXPLAIN'], 'GRAPHIC_STAR_BLUE_EXAMPLE' => $phpbb_root_path . $user->lang['GRAPHIC_STAR_BLUE'], 'GRAPHIC_STAR_GOLD_EXAMPLE' => $phpbb_root_path . $user->lang['GRAPHIC_STAR_GOLD'], 'GRAPHIC_STAR_BACK_EXAMPLE' => $phpbb_root_path . $user->lang['GRAPHIC_STAR_BACK'], 'GRAPHIC_BLOCK_RED_EXAMPLE' => $phpbb_root_path . $user->lang['GRAPHIC_BLOCK_RED'], 'GRAPHIC_BLOCK_BACK_EXAMPLE' => $phpbb_root_path . $user->lang['GRAPHIC_BLOCK_BACK'], 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error), 'U_ACTION' => $this->u_action)); // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars); if (empty($content)) { continue; } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $content)); unset($display_vars['vars'][$config_key]); } }
function main($id, $mode) { global $config, $user, $template, $request, $phpbb_container; $this->user = $user; $this->tpl_name = 'acp_board'; $this->page_title = 'ACP_PMWELCOME_SETTINGS'; $submit = $request->is_set_post('submit'); $form_key = 'pmwelcome'; add_form_key($form_key); $display_vars = array('title' => 'ACP_PMWELCOME', 'vars' => array('legend1' => 'ACP_PMWELCOME_SETTINGS', 'pmwelcome_user' => array('lang' => 'ACP_PMWELCOME_USER', 'validate' => 'int:0:255', 'type' => 'number:0:255', 'explain' => true), 'pmwelcome_subject' => array('lang' => 'ACP_PMWELCOME_SUBJECT', 'validate' => 'string', 'type' => 'text:50:250', 'explain' => false), 'pmwelcome_post_text' => array('lang' => 'ACP_PMWELCOME_TEXT', 'validate' => '', 'type' => 'textarea:15:30', 'explain' => true), 'legend2' => 'ACP_SUBMIT_CHANGES')); if (isset($display_vars['lang'])) { $user->add_lang($display_vars['lang']); } $this->new_config = $config; $cfg_array = $request->is_set('config') ? utf8_normalize_nfc($request->variable('config', array('' => ''), true)) : $this->new_config; $error = array(); // We validate the complete config if wished validate_config_vars($display_vars['vars'], $cfg_array, $error); if ($submit && !check_form_key($form_key)) { $error[] = $user->lang['FORM_INVALID']; } // Do not write values if there is an error if (sizeof($error)) { $submit = false; } /* config text class && Anvar */ $config_text = $phpbb_container->get('config_text'); $text_ary = array('pmwelcome_post_text'); // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $null) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($submit) { /* Add config text && Anvar */ if (in_array($config_name, $text_ary)) { $config_text->set($config_name, $config_value); } else { $config->set($config_name, $config_value); } } } if ($submit) { trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } $this->page_title = $display_vars['title']; $template->assign_vars(array('L_TITLE' => $user->lang[$display_vars['title']], 'L_TITLE_EXPLAIN' => $user->lang[$display_vars['title'] . '_EXPLAIN'], 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error), 'U_ACTION' => $this->u_action)); // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } /* Get config text && Anvar */ if (in_array($config_key, $text_ary)) { $this->new_config[$config_key] = $config_text->get($config_key); } $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars); if (empty($content)) { continue; } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $content)); unset($display_vars['vars'][$config_key]); } }
function main($id, $mode) { global $config, $request, $template, $user; $this->page_title = 'ACP_POSTS_MERGING'; $this->tpl_name = 'acp_posts_merging'; $submit = isset($_POST['submit']) ? true : false; $form_key = 'config_posts_merging'; add_form_key($form_key); $display_vars = array('title' => 'ACP_POSTS_MERGING', 'vars' => array('legend1' => 'ACP_POSTS_MERGING', 'merge_interval' => array('lang' => 'MERGE_INTERVAL', 'validate' => 'int', 'type' => 'text:3:4', 'explain' => true, 'append' => ' ' . $user->lang['HOURS']), 'merge_no_forums' => array('lang' => 'MERGE_NO_FORUMS', 'validate' => 'string', 'type' => 'text:5:255', 'explain' => true), 'merge_no_topics' => array('lang' => 'MERGE_NO_TOPICS', 'validate' => 'string', 'type' => 'text:5:255', 'explain' => true), 'legend2' => 'ACP_SUBMIT_CHANGES')); if (isset($display_vars['lang'])) { $user->add_lang($display_vars['lang']); } $this->new_config = $config; $cfg_array = isset($_REQUEST['config']) ? utf8_normalize_nfc($request->variable('config', array('' => ''), true)) : $this->new_config; $error = array(); // We validate the complete config if wished validate_config_vars($display_vars['vars'], $cfg_array, $error); if ($submit && !check_form_key($form_key)) { $error[] = $user->lang['FORM_INVALID']; } // Do not write values if there is an error if (sizeof($error)) { $submit = false; } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $null) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($submit) { $config->set($config_name, $config_value); } } if ($submit) { trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars); if (empty($content)) { continue; } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $content)); unset($display_vars['vars'][$config_key]); } }
function saveConfig($display_vars) { global $db, $user, $auth, $template, $config, $error; if (!is_array($error)) { $error = array(); } $submit = request_var('submit', ''); $form_key = 'acp_raidattendance'; add_form_key($form_key); if (isset($display_vars['lang'])) { $user->add_lang($display_vars['lang']); } $this->new_config = $config; $cfg_array = request_var('config', array('' => '')); $cfg_array = sizeof($cfg_array) > 1 ? utf8_normalize_nfc($cfg_array) : $this->new_config; // We validate the complete config if whished validate_config_vars($display_vars['vars'], $cfg_array, $error); if ($submit && !check_form_key($form_key)) { $error[] = $user->lang['FORM_INVALID']; } // Do not write values if there is an error if (sizeof($error)) { $submit = false; } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... // Add the "names"... foreach ($display_vars['vars'] as $config_name => $null) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } if ($config_name == 'auth_method') { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($submit) { set_config($config_name, $config_value); } } // Save non-"normal" configs if ($submit) { for ($ix = 0; $ix < 10; ++$ix) { $config_name = 'raidattendance_raider_rank' . $ix . '_name'; $config_value = $cfg_array[$config_name]; set_config($config_name, $config_value); } // save the raids $this->saveRaidSetup(); add_log('admin', 'LOG_CONFIG_RAIDATTENDANCE_SETTINGS'); trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } $this->page_title = $display_vars['title']; $template->assign_vars(array('L_TITLE' => $user->lang[$display_vars['title']], 'L_TITLE_EXPLAIN' => $user->lang[$display_vars['title'] . '_EXPLAIN'], 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error), 'U_ACTION' => $this->u_action)); // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars); if (empty($content)) { continue; } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $content)); unset($display_vars['vars'][$config_key]); } }
function main($id, $mode) { global $request, $user, $auth, $template; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx, $phpbb_container; $user->add_lang('acp/board'); $factory = $phpbb_container->get('captcha.factory'); $captchas = $factory->get_captcha_types(); $selected = request_var('select_captcha', $config['captcha_plugin']); $selected = isset($captchas['available'][$selected]) || isset($captchas['unavailable'][$selected]) ? $selected : $config['captcha_plugin']; $configure = request_var('configure', false); // Oh, they are just here for the view if (isset($_GET['captcha_demo'])) { $this->deliver_demo($selected); } // Delegate if ($configure) { $config_captcha = $factory->get_instance($selected); $config_captcha->acp_page($id, $this); } else { $config_vars = array('enable_confirm' => array('tpl' => 'REG_ENABLE', 'default' => false, 'validate' => 'bool', 'lang' => 'VISUAL_CONFIRM_REG'), 'enable_post_confirm' => array('tpl' => 'POST_ENABLE', 'default' => false, 'validate' => 'bool', 'lang' => 'VISUAL_CONFIRM_POST'), 'confirm_refresh' => array('tpl' => 'CONFIRM_REFRESH', 'default' => false, 'validate' => 'bool', 'lang' => 'VISUAL_CONFIRM_REFRESH'), 'max_reg_attempts' => array('tpl' => 'REG_LIMIT', 'default' => 0, 'validate' => 'int:0:99999', 'lang' => 'REG_LIMIT'), 'max_login_attempts' => array('tpl' => 'MAX_LOGIN_ATTEMPTS', 'default' => 0, 'validate' => 'int:0:99999', 'lang' => 'MAX_LOGIN_ATTEMPTS')); $this->tpl_name = 'acp_captcha'; $this->page_title = 'ACP_VC_SETTINGS'; $form_key = 'acp_captcha'; add_form_key($form_key); $submit = request_var('main_submit', false); $error = $cfg_array = array(); if ($submit) { foreach ($config_vars as $config_var => $options) { $cfg_array[$config_var] = $request->variable($config_var, $options['default']); } validate_config_vars($config_vars, $cfg_array, $error); if (!check_form_key($form_key)) { $error[] = $user->lang['FORM_INVALID']; } if ($error) { $submit = false; } } if ($submit) { foreach ($cfg_array as $key => $value) { $config->set($key, $value); } if ($selected !== $config['captcha_plugin']) { // sanity check if (isset($captchas['available'][$selected])) { $old_captcha = $factory->get_instance($config['captcha_plugin']); $old_captcha->uninstall(); set_config('captcha_plugin', $selected); $new_captcha = $factory->get_instance($config['captcha_plugin']); $new_captcha->install(); add_log('admin', 'LOG_CONFIG_VISUAL'); } else { trigger_error($user->lang['CAPTCHA_UNAVAILABLE'] . adm_back_link($this->u_action), E_USER_WARNING); } } trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } else { $captcha_select = ''; foreach ($captchas['available'] as $value => $title) { $current = $selected !== false && $value == $selected ? ' selected="selected"' : ''; $captcha_select .= '<option value="' . $value . '"' . $current . '>' . $user->lang($title) . '</option>'; } foreach ($captchas['unavailable'] as $value => $title) { $current = $selected !== false && $value == $selected ? ' selected="selected"' : ''; $captcha_select .= '<option value="' . $value . '"' . $current . ' class="disabled-option">' . $user->lang($title) . '</option>'; } $demo_captcha = $factory->get_instance($selected); foreach ($config_vars as $config_var => $options) { $template->assign_var($options['tpl'], isset($_POST[$config_var]) ? request_var($config_var, $options['default']) : $config[$config_var]); } $template->assign_vars(array('CAPTCHA_PREVIEW_TPL' => $demo_captcha->get_demo_template($id), 'S_CAPTCHA_HAS_CONFIG' => $demo_captcha->has_config(), 'CAPTCHA_SELECT' => $captcha_select, 'ERROR_MSG' => implode('<br />', $error), 'U_ACTION' => $this->u_action)); } } }
/** * @dataProvider data_validate_path_windows */ public function test_validate_path_windows($path, $validation_type, $expected) { if (strtolower(substr(PHP_OS, 0, 3)) !== 'win') { $this->markTestSkipped('Unable to test windows specific paths on other OS.'); } $error = array(); $config_ary = array('path' => $path); validate_config_vars(array('path' => array('lang' => 'FOOBAR', 'validate' => $validation_type)), $config_ary, $error); if ($expected === true) { $this->assertEmpty($error); } else { $this->assertEquals(array($expected), $error); } }
public function main($id, $mode) { $submit = isset($_POST['submit']) ? true : false; $form_key = 'acp_portal'; add_form_key($form_key); /** * Validation types are: * string, int, bool, * script_path (absolute path in url - beginning with / and no trailing slash), * rpath (relative), rwpath (realtive, writeable), path (relative path, but able to escape the root), wpath (writeable) */ switch ($mode) { case 'config': $display_vars = array('title' => 'ACP_PORTAL_GENERAL_TITLE', 'vars' => array('legend1' => 'ACP_PORTAL_CONFIG_INFO', 'board3_enable' => array('lang' => 'PORTAL_ENABLE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'board3_left_column' => array('lang' => 'PORTAL_LEFT_COLUMN', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'board3_right_column' => array('lang' => 'PORTAL_RIGHT_COLUMN', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'board3_version_check' => array('lang' => 'PORTAL_VERSION_CHECK', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'board3_phpbb_menu' => array('lang' => 'PORTAL_PHPBB_MENU', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'board3_display_jumpbox' => array('lang' => 'PORTAL_DISPLAY_JUMPBOX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend2' => 'ACP_PORTAL_COLUMN_WIDTH_SETTINGS', 'board3_left_column_width' => array('lang' => 'PORTAL_LEFT_COLUMN_WIDTH', 'validate' => 'int', 'type' => 'text:3:3', 'explain' => true), 'board3_right_column_width' => array('lang' => 'PORTAL_RIGHT_COLUMN_WIDTH', 'validate' => 'int', 'type' => 'text:3:3', 'explain' => true))); $module_id = request_var('module_id', 0); if ($module_id) { $sql = 'SELECT * FROM ' . PORTAL_MODULES_TABLE . ' WHERE module_id = ' . (int) $module_id; $result = $this->db->sql_query_limit($sql, 1); $module_data = $this->db->sql_fetchrow($result); $this->db->sql_freeresult($result); if ($module_data !== false) { $class = 'portal_' . $module_data['module_classname'] . '_module'; if (!class_exists($class)) { include $this->phpbb_root_path . 'portal/modules/portal_' . $module_data['module_classname'] . '.' . $this->php_ex; } if (!class_exists($class)) { trigger_error('CLASS_NOT_FOUND', E_USER_ERROR); } $this->c_class = new $class(); if ($this->c_class->language) { $this->user->add_lang('mods/portal/' . $this->c_class->language); } $module_name = $this->user->lang[$this->c_class->name]; $display_vars = $this->c_class->get_template_acp($module_id); $this->template->assign_vars(array('MODULE_NAME' => isset($this->c_class->hide_name) && $this->c_class->hide_name == true ? '' : $module_data['module_name'], 'MODULE_IMAGE' => $module_data['module_image_src'], 'MODULE_IMAGE_WIDTH' => $module_data['module_image_width'], 'MODULE_IMAGE_HEIGHT' => $module_data['module_image_height'], 'MODULE_IMAGE_SRC' => $module_data['module_image_src'] ? $this->phpbb_root_path . 'styles/' . $this->user->theme['theme_path'] . '/theme/images/portal/' . $module_data['module_image_src'] : '', 'MODULE_ENABLED' => $module_data['module_status'] ? true : false, 'MODULE_SHOW_IMAGE' => in_array(column_num_string($module_data['module_column']), array('center', 'top', 'bottom')) ? false : true)); if ($module_data['module_classname'] != 'custom') { $groups_ary = explode(',', $module_data['module_group_ids']); // get group info from database and assign the block vars $sql = 'SELECT group_id, group_name FROM ' . GROUPS_TABLE . ' ORDER BY group_id ASC'; $result = $this->db->sql_query($sql); while ($row = $this->db->sql_fetchrow($result)) { $this->template->assign_block_vars('permission_setting', array('SELECTED' => in_array($row['group_id'], $groups_ary) ? true : false, 'GROUP_NAME' => isset($this->user->lang['G_' . $row['group_name']]) ? $this->user->lang['G_' . $row['group_name']] : $row['group_name'], 'GROUP_ID' => $row['group_id'])); } $this->db->sql_freeresult($result); } $this->template->assign_var('SHOW_MODULE_OPTIONS', true); } } else { // only show the mod version check if we are on the General Settings page mod_version_check(); } $this->new_config = $this->config; $cfg_array = isset($_REQUEST['config']) ? utf8_normalize_nfc(request_var('config', array('' => ''), true)) : $this->new_config; $error = array(); // We validate the complete config if whished validate_config_vars($display_vars['vars'], $cfg_array, $error); if ($submit && !check_form_key($form_key)) { $error[] = $this->user->lang['FORM_INVALID']; } // Do not write values if there is an error if (sizeof($error)) { $submit = false; } // Reset module $reset_module = request_var('module_reset', 0); if ($reset_module) { $this->reset_module($id, $mode, $module_id, $module_data); } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $null) { if ($submit && (isset($null['type']) && $null['type'] == 'custom' || isset($null['submit_type']) && $null['submit_type'] == 'custom')) { $func = array($this->c_class, $null['submit']); if (method_exists($this->c_class, $null['submit'])) { $args = $module_id != 0 ? array($config_name, $module_id) : $config_name; call_user_func_array($func, $args); } else { $args = $module_id != 0 ? array($cfg_array[$config_name], $config_name, $module_id) : $config_name; call_user_func_array($null['submit'], $args); } } if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } if (isset($null['type']) && $null['type'] == 'custom') { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($submit) { set_config($config_name, $config_value); } } if ($submit) { $module_permission = request_var('permission-setting', array(0 => '')); $groups_ary = array(); $img_error = ''; // get groups and check if the selected groups actually exist $sql = 'SELECT group_id FROM ' . GROUPS_TABLE . ' ORDER BY group_id ASC'; $result = $this->db->sql_query($sql); while ($row = $this->db->sql_fetchrow($result)) { $groups_ary[] = $row['group_id']; } $this->db->sql_freeresult($result); $module_permission = array_intersect($module_permission, $groups_ary); $module_permission = implode(',', $module_permission); $sql_ary = array('module_image_src' => request_var('module_image', ''), 'module_image_width' => request_var('module_img_width', 0), 'module_image_height' => request_var('module_img_height', 0), 'module_group_ids' => $module_permission, 'module_status' => request_var('module_status', B3_MODULE_ENABLED)); if (!(isset($this->c_class->hide_name) && $this->c_class->hide_name == true)) { $sql_ary['module_name'] = utf8_normalize_nfc(request_var('module_name', '', true)); } // check if module image file actually exists $img_error = check_file_src($sql_ary['module_image_src'], '', $module_id, false); $sql = 'UPDATE ' . PORTAL_MODULES_TABLE . ' SET ' . $this->db->sql_build_array('UPDATE', $sql_ary) . ' WHERE module_id = ' . (int) $module_id; $this->db->sql_query($sql); $this->cache->destroy('portal_modules'); $this->cache->destroy('sql', CONFIG_TABLE); if (isset($module_name)) { if ($module_data['module_classname'] !== 'custom') { add_log('admin', 'LOG_PORTAL_CONFIG', $module_name); } } else { add_log('admin', 'LOG_PORTAL_CONFIG', $this->user->lang['ACP_PORTAL_' . strtoupper($mode) . '_INFO']); } trigger_error($this->user->lang['CONFIG_UPDATED'] . (!empty($img_error) ? '<br /><br />' . $this->user->lang['MODULE_IMAGE_ERROR'] . '<br />' . $img_error : '') . adm_back_link($module_id ? append_sid("{$this->phpbb_root_path}adm/index.{$this->php_ex}", 'i=portal&mode=modules') : $this->u_action)); } // show custom HTML files on the settings page of the modules instead of the standard board3 portal one, if chosen by module if (!isset($this->c_class->custom_acp_tpl) || empty($this->c_class->custom_acp_tpl)) { $this->tpl_name = 'portal/acp_portal_config'; } else { $this->tpl_name = 'portal/' . $this->c_class->custom_acp_tpl; } $this->page_title = $display_vars['title']; $this->template->assign_vars(array('L_TITLE' => $this->user->lang[$display_vars['title']], 'L_TITLE_EXPLAIN' => isset($this->user->lang[$display_vars['title'] . '_EXP']) ? $this->user->lang[$display_vars['title'] . '_EXP'] : '', 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error), 'U_ACTION' => $this->u_action . ($module_id ? '&module_id=' . $module_id : ''))); // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $this->template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($this->user->lang[$vars]) ? $this->user->lang[$vars] : $vars)); continue; } $this->new_config[$config_key] = $this->config[$config_key]; $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain']) { $l_explain = isset($this->user->lang[$vars['lang'] . '_EXP']) ? $this->user->lang[$vars['lang'] . '_EXP'] : ''; } if ($vars['type'] != 'custom') { $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars); } else { $args = array($this->new_config[$config_key], $config_key, $module_id); if (!is_array($vars['method'])) { $func = array($this->c_class, $vars['method']); } else { $func = $vars['method']; } $content = call_user_func_array($func, $args); } if (empty($content)) { continue; } $this->template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($this->user->lang[$vars['lang']]) ? $this->user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $content)); unset($display_vars['vars'][$config_key]); } break; case 'modules': $action = request_var('action', ''); $module_id = request_var('module_id', ''); // Create an array of already installed modules $portal_modules = obtain_portal_modules(); $installed_modules = $module_column = array(); foreach ($portal_modules as $cur_module) { $installed_modules[] = $cur_module['module_classname']; // Create an array with the columns the module is in $module_column[$cur_module['module_classname']][] = column_num_string($cur_module['module_column']); } if ($action == 'move_up') { $this->move_module_up($module_id); } elseif ($action == 'move_down') { $this->move_module_down($module_id); } elseif ($action == 'move_right') { $this->move_module_right($module_id); } elseif ($action == 'move_left') { $this->move_module_left($module_id); } elseif ($action == 'delete') { $this->module_delete($id, $mode, $action, $module_id); } $add_module = key(request_var('add', array('' => ''))); $add_column = request_var('add_column', column_string_num($add_module)); if ($add_column) { $submit = isset($_POST['submit']) ? true : false; $directory = $this->phpbb_root_path . 'portal/modules/'; if ($submit) { $module_classname = request_var('module_classname', ''); $class = 'portal_' . $module_classname . '_module'; $column_string = column_num_string($add_column); // do we want to add the module to the side columns or to the center columns? if (in_array($column_string, array('left', 'right'))) { // does the module already exist in the side columns? if (isset($module_column[$module_classname]) && (in_array('left', $module_column[$module_classname]) || in_array('right', $module_column[$module_classname]))) { $submit = false; } } elseif (in_array($column_string, array('center', 'top', 'bottom'))) { // does the module already exist in the center columns? if (isset($module_column[$module_classname]) && (in_array('center', $module_column[$module_classname]) || in_array('top', $module_column[$module_classname]) || in_array('bottom', $module_column[$module_classname]))) { $submit = false; } } // do not install if module already exists in that column if (!$submit && $module_classname != 'custom') { trigger_error($this->user->lang['MODULE_ADD_ONCE'] . adm_back_link($this->u_action), E_USER_WARNING); } if (!class_exists($class)) { include $directory . 'portal_' . $module_classname . '.' . $this->php_ex; } if (!class_exists($class)) { trigger_error('CLASS_NOT_FOUND', E_USER_ERROR); } $sql = 'SELECT module_order FROM ' . PORTAL_MODULES_TABLE . ' WHERE module_column = ' . $add_column . ' ORDER BY module_order DESC'; $result = $this->db->sql_query_limit($sql, 1); $module_order = 1 + (int) $this->db->sql_fetchfield('module_order'); $this->db->sql_freeresult($result); $this->c_class = new $class(); $sql_ary = array('module_classname' => $module_classname, 'module_column' => $add_column, 'module_order' => $module_order, 'module_name' => $this->c_class->name, 'module_image_src' => $this->c_class->image_src, 'module_group_ids' => '', 'module_image_height' => 16, 'module_image_width' => 16, 'module_status' => B3_MODULE_ENABLED); $sql = 'INSERT INTO ' . PORTAL_MODULES_TABLE . ' ' . $this->db->sql_build_array('INSERT', $sql_ary); $this->db->sql_query($sql); $module_id = $this->db->sql_nextid(); $error = $this->c_class->install($module_id); $this->cache->purge(); // make sure we don't get errors after re-adding a module // if something went wrong, handle the errors accordingly and undo the above query if (sizeof($error) && $error != true) { if (is_array($error)) { foreach ($error as $cur_error) { $error_output = $cur_error . '<br />'; } } else { $error_output = $error; } $sql = 'DELETE FROM ' . PORTAL_MODULES_TABLE . ' WHERE module_id = ' . (int) $module_id; trigger_error($error_output . adm_back_link($this->u_action)); } meta_refresh(3, append_sid("{$this->phpbb_admin_path}index.{$this->php_ex}", 'i=portal&mode=config&module_id=' . $module_id)); trigger_error($this->user->lang['SUCCESS_ADD'] . adm_back_link($this->u_action)); } $this->template->assign_var('S_EDIT', true); $fileinfo = array(); $dh = @opendir($directory); if (!$dh) { return $fileinfo; } while (($file = readdir($dh)) !== false) { // Is module? if (preg_match('/^portal_.+\\.' . $this->php_ex . '$/', $file)) { $class = str_replace(".{$this->php_ex}", '', $file) . '_module'; $module_class = str_replace(array('portal_', ".{$this->php_ex}"), '', $file); $column_string = column_num_string($add_column); // do we want to add the module to the side columns or to the center columns? if ($module_class != 'custom') { if (in_array($column_string, array('left', 'right'))) { // does the module already exist in the side columns? if (isset($module_column[$module_class]) && (in_array('left', $module_column[$module_class]) || in_array('right', $module_column[$module_class]))) { continue; } } elseif (in_array($column_string, array('center', 'top', 'bottom'))) { // does the module already exist in the center columns? if (isset($module_column[$module_class]) && (in_array('center', $module_column[$module_class]) || in_array('top', $module_column[$module_class]) || in_array('bottom', $module_column[$module_class]))) { continue; } } } if (!class_exists($class)) { include $directory . $file; } // Get module title tag if (class_exists($class)) { $this->c_class = new $class(); if ($this->c_class->columns & column_string_const($add_module)) { if ($this->c_class->language) { $this->user->add_lang('mods/portal/' . $this->c_class->language); } $fileinfo[] = array('module' => substr($class, 7, -7), 'name' => $this->user->lang[$this->c_class->name]); } } } } closedir($dh); // we sort the $fileinfo array by the name of the modules foreach ($fileinfo as $key => $cur_file) { $name_ary[$key] = $cur_file['name']; } array_multisort($name_ary, SORT_REGULAR, $fileinfo); $options = ''; foreach ($fileinfo as $module) { $options .= '<option value="' . $module['module'] . '">' . $module['name'] . '</option>'; } $s_hidden_fields = build_hidden_fields(array('add_column' => column_string_num($add_module))); $this->template->assign_vars(array('S_MODULE_NAMES' => $options, 'S_HIDDEN_FIELDS' => $s_hidden_fields)); } else { $directory = $this->phpbb_root_path . 'portal/modules/'; $portal_modules = obtain_portal_modules(); foreach ($portal_modules as $row) { $class = 'portal_' . $row['module_classname'] . '_module'; if (!class_exists($class)) { include $directory . 'portal_' . $row['module_classname'] . '.' . $this->php_ex; } if (!class_exists($class)) { trigger_error('CLASS_NOT_FOUND', E_USER_ERROR); } $this->c_class = new $class(); if ($this->c_class->language) { $this->user->add_lang('mods/portal/' . $this->c_class->language); } $template_column = column_num_string($row['module_column']); // find out of we can move modules to the left or right if ($this->c_class->columns & column_string_const(column_num_string($row['module_column'] + 1)) || $this->c_class->columns & column_string_const(column_num_string($row['module_column'] + 2)) && $row['module_column'] != 2) { /** * check if we can actually move * this only applies to modules in the center column as the side modules * will automatically skip the center column when moving if they need to */ if ($row['module_classname'] != 'custom') { $column_string = column_num_string($row['module_column'] + 1); // move 1 right if ($column_string == 'right' && isset($module_column[$row['module_classname']]) && (in_array('left', $module_column[$row['module_classname']]) || in_array('right', $module_column[$row['module_classname']]))) { $move_right = false; } else { $move_right = true; } } else { $move_right = true; } } else { $move_right = false; } if ($this->c_class->columns & column_string_const(column_num_string($row['module_column'] - 1)) || $this->c_class->columns & column_string_const(column_num_string($row['module_column'] - 2)) && $row['module_column'] != 2) { /** * check if we can actually move * this only applies to modules in the center column as the side modules * will automatically skip the center column when moving if they need to */ if ($row['module_classname'] != 'custom') { $column_string = column_num_string($row['module_column'] - 1); // move 1 left if ($column_string == 'left' && isset($module_column[$row['module_classname']]) && (in_array('left', $module_column[$row['module_classname']]) || in_array('right', $module_column[$row['module_classname']]))) { $move_left = false; } else { $move_left = true; } } else { $move_left = true; } } else { $move_left = false; } $this->template->assign_block_vars('modules_' . $template_column, array('MODULE_NAME' => isset($this->user->lang[$row['module_name']]) ? $this->user->lang[$row['module_name']] : $row['module_name'], 'MODULE_IMAGE' => $row['module_image_src'] ? '<img src="' . $this->phpbb_root_path . 'styles/' . $this->user->theme['theme_path'] . '/theme/images/portal/' . $row['module_image_src'] . '" alt="' . $row['module_name'] . '" />' : '', 'MODULE_ENABLED' => $row['module_status'] ? true : false, 'U_DELETE' => $this->u_action . '&module_id=' . $row['module_id'] . '&module_classname=' . $row['module_classname'] . '&action=delete', 'U_EDIT' => append_sid("{$this->phpbb_admin_path}index.{$this->php_ex}", 'i=portal&mode=config&module_id=' . $row['module_id']), 'U_MOVE_UP' => $this->u_action . '&module_id=' . $row['module_id'] . '&action=move_up', 'U_MOVE_DOWN' => $this->u_action . '&module_id=' . $row['module_id'] . '&action=move_down', 'U_MOVE_RIGHT' => $move_right ? $this->u_action . '&module_id=' . $row['module_id'] . '&action=move_right' : '', 'U_MOVE_LEFT' => $move_left ? $this->u_action . '&module_id=' . $row['module_id'] . '&action=move_left' : '')); } $this->template->assign_vars(array('ICON_MOVE_LEFT' => '<img src="' . $this->phpbb_admin_path . 'images/icon_left.gif" alt="' . $this->user->lang['MOVE_LEFT'] . '" title="' . $this->user->lang['MOVE_LEFT'] . '" />', 'ICON_MOVE_LEFT_DISABLED' => '<img src="' . $this->phpbb_admin_path . 'images/icon_left_disabled.gif" alt="' . $this->user->lang['MOVE_LEFT'] . '" title="' . $this->user->lang['MOVE_LEFT'] . '" />', 'ICON_MOVE_RIGHT' => '<img src="' . $this->phpbb_admin_path . 'images/icon_right.gif" alt="' . $this->user->lang['MOVE_RIGHT'] . '" title="' . $this->user->lang['MOVE_RIGHT'] . '" />', 'ICON_MOVE_RIGHT_DISABLED' => '<img src="' . $this->phpbb_admin_path . 'images/icon_right_disabled.gif" alt="' . $this->user->lang['MOVE_RIGHT'] . '" title="' . $this->user->lang['MOVE_RIGHT'] . '" />')); } $this->tpl_name = 'portal/acp_portal_modules'; $this->page_title = 'ACP_PORTAL_MODULES'; break; case 'upload_module': $error = array(); if ($submit) { if (!check_form_key('acp_portal_module_upload')) { trigger_error($this->user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING); } include $this->phpbb_root_path . 'portal/includes/functions_upload.' . $this->php_ex; // Default upload path is portal/upload/ $upload_path = $this->phpbb_root_path . 'portal/upload/'; $portal_upload = new portal_upload($upload_path, $this->u_action); $this->tpl_name = 'portal/acp_portal_upload_module'; $this->page_title = $this->user->lang['ACP_PORTAL_UPLOAD']; } else { // start the page $this->template->assign_vars(array('U_UPLOAD' => $this->u_action, 'S_FORM_ENCTYPE' => ' enctype="multipart/form-data"')); add_form_key('acp_portal_module_upload'); $this->tpl_name = 'portal/acp_portal_upload_module'; $this->page_title = $this->user->lang['ACP_PORTAL_UPLOAD']; $this->template->assign_vars(array('L_TITLE' => $this->user->lang['ACP_PORTAL_UPLOAD'], 'L_TITLE_EXPLAIN' => '', 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error), 'U_ACTION' => $this->u_action)); } break; default: trigger_error('NO_MODE', E_USER_ERROR); break; } }
function main($id, $mode) { global $db, $user, $auth, $template, $request, $phpbb_log; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx; // Set up general vars $action = $request->variable('action', ''); $submit = isset($_POST['submit']) ? true : false; $this->tpl_name = 'acp_hidebbcode'; $form_key = 'acp_hidebbcode'; add_form_key($form_key); switch ($mode) { case 'settings': $display_vars = array('title' => 'HIDEBB_SETTINGS', 'vars' => array('legend1' => 'GENERAL_SETTINGS', 'hidebbcode_unhide_reply' => array('lang' => 'HIDEBB_REPLY_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'hidebbcode_unhide_tfp' => array('lang' => 'HIDEBB_TFP_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'hidebbcode_hide_attach' => array('lang' => 'HIDEBB_HIDE_ATTACH', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'legend2' => 'ACP_SUBMIT_CHANGES')); break; default: trigger_error('NO_MODE', E_USER_ERROR); break; } if (isset($display_vars['lang'])) { $user->add_lang($display_vars['lang']); } $this->new_config = $config; $cfg_array = isset($_REQUEST['config']) ? utf8_normalize_nfc($request->variable('config', array('' => ''), true)) : $this->new_config; $error = array(); // We validate the complete config if whished validate_config_vars($display_vars['vars'], $cfg_array, $error); // Lets check if the path entered isn't valid and if we're gonna complain if ($submit && $mode == 'settings') { // Checks } if ($submit && !check_form_key($form_key)) { $error[] = $user->lang['FORM_INVALID']; } // Do not write values if there is an error if (sizeof($error)) { $submit = false; } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $null) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($submit) { $config->set($config_name, $config_value); } } if (sizeof($error)) { $submit = false; } if ($submit) { $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_CONFIG_HIDEBBCODE'); trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } $this->page_title = $display_vars['title']; $template->assign_vars(array('L_TITLE' => $user->lang[$display_vars['title']], 'L_TITLE_EXPLAIN' => $user->lang[$display_vars['title'] . '_EXPLAIN'], 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error))); $template->assign_var('U_ACTION', $this->u_action); // Output relevant page set in $display_vars foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars); if (empty($content)) { continue; } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $content)); unset($display_vars['vars'][$config_key]); } }
public function infraction_general() { global $auth, $db, $user, $template; global $config, $phpbb_root_path, $phpEx, $phpbb_admin_path; $action = request_var('action', ''); $submit = isset($_POST['submit']) || isset($_POST['allow_quick_reply_enable']) ? true : false; $form_key = 'acp_infractions'; add_form_key($form_key); $display_vars = array('title' => 'ACP_INFRACTION_GENERAL', 'vars' => array('legend1' => 'ACP_INFRACTION_GENERAL', 'infractions_hard_delete' => array('lang' => 'INFRACTION_DELETE_TYPE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'infractions_deleted_keep_time' => array('lang' => 'INFRACTION_DELETE_KEEP_TIME', 'validate' => 'int', 'type' => 'text:40:40', 'explain' => true), 'infractions_pm_sig' => array('lang' => 'INFRACTION_PM_SIG', 'validate' => 'string', 'type' => 'textarea:4:40', 'explain' => true))); // --------- if (isset($display_vars['lang'])) { $user->add_lang($display_vars['lang']); } $this->new_config = $config; $cfg_array = isset($_REQUEST['config']) ? utf8_normalize_nfc(request_var('config', array('' => ''), true)) : $this->new_config; $error = array(); // We validate the complete config if whished validate_config_vars($display_vars['vars'], $cfg_array, $error); if ($submit && !check_form_key($form_key)) { $error[] = $user->lang['FORM_INVALID']; } // Do not write values if there is an error if (sizeof($error)) { $submit = false; } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $null) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } if ($config_name == 'auth_method' || $config_name == 'feed_news_id' || $config_name == 'feed_exclude_id') { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($config_name == 'email_function_name') { $this->new_config['email_function_name'] = trim(str_replace(array('(', ')'), array('', ''), $this->new_config['email_function_name'])); $this->new_config['email_function_name'] = empty($this->new_config['email_function_name']) || !function_exists($this->new_config['email_function_name']) ? 'mail' : $this->new_config['email_function_name']; $config_value = $this->new_config['email_function_name']; } if ($submit) { set_config($config_name, $config_value); if ($config_name == 'allow_quick_reply' && isset($_POST['allow_quick_reply_enable'])) { enable_bitfield_column_flag(FORUMS_TABLE, 'forum_flags', log(FORUM_FLAG_QUICK_REPLY, 2)); } } } // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars); if (empty($content)) { continue; } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $content)); unset($display_vars['vars'][$config_key]); } if ($submit) { add_log('admin', 'INFRACTION_LOG_UPDATED'); trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } }
function main($id, $mode) { global $config, $db, $user, $auth, $template, $cache; global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix, $phpbb_seo; // Start the phpbb_seo class if (empty($phpbb_seo)) { include_once $phpbb_root_path . 'phpbb_seo/phpbb_seo_class.' . $phpEx; $phpbb_seo = new phpbb_seo(); } $user->add_lang('mods/acp_phpbb_seo'); $action = request_var('action', ''); $submit = isset($_POST['submit']) ? true : false; $form_key = 'acp_board'; add_form_key($form_key); $display_vars = array(); // --> Zero Dupe if (@isset($phpbb_seo->seo_opt['zero_dupe'])) { $this->multiple_options['zero_dupe']['post_redir_values'] = array('off' => 'off', 'post' => 'post', 'guest' => 'guest', 'all' => 'all'); // do not change $this->multiple_options['zero_dupe']['post_redir_lang'] = array('off' => $user->lang['ACP_ZERO_DUPE_OFF'], 'post' => $user->lang['ACP_ZERO_DUPE_MSG'], 'guest' => $user->lang['ACP_ZERO_DUPE_GUEST'], 'all' => $user->lang['ACP_ZERO_DUPE_ALL']); // do not change } // <-- Mod rewrite selector if ($phpbb_seo->modrtype == 1) { $this->seo_unset_opts = array('cache_layer', 'rem_ids'); } elseif (!$phpbb_seo->seo_opt['cache_layer']) { $this->seo_unset_opts = array('rem_ids'); } $this->modrtype_lang = $this->set_phpbb_seo_links(); $this->multiple_options['modrtype_lang'] = $this->modrtype_lang['titles']; if (@isset($phpbb_seo->seo_opt['modrtype'])) { $this->multiple_options['modrtype_values'] = array(1 => 1, 2 => 2, 3 => 3); // do not change; } // <-- Mod rewrite selector foreach ($this->seo_unset_opts as $opt) { if ($optkey = array_search($opt, $phpbb_seo->cache_config['dynamic_options'])) { unset($phpbb_seo->cache_config['dynamic_options'][$optkey]); } } // We need shorter URLs with Virtual Folder Trick if ($phpbb_seo->seo_opt['virtual_folder']) { $this->lengh_limit = 20; $this->word_limit = 3; } else { $this->lengh_limit = 30; $this->word_limit = 5; } $related_installed = false; switch ($mode) { case 'settings': $this->write_type = 'forum'; $display_vars['title'] = 'ACP_PHPBB_SEO_CLASS'; $user->lang['ACP_PHPBB_SEO_CLASS_EXPLAIN'] = sprintf($user->lang['ACP_PHPBB_SEO_CLASS_EXPLAIN'], $this->modrtype_lang['ulink'], $this->modrtype_lang['uforumlink'], '</p><hr/><p><b>' . $user->lang['ACP_PHPBB_SEO_MODE'] . ' : ' . $this->modrtype_lang['link'] . ' - ' . $phpbb_seo->version . ' ( ' . $this->modrtype_lang['forumlink'] . ' )</b></p><hr/><p>'); $display_vars['vars'] = array(); $i = 2; $display_vars['vars']['legend1'] = 'ACP_PHPBB_SEO_CLASS'; foreach ($phpbb_seo->cache_config['dynamic_options'] as $optionname => $optionvalue) { if (@is_bool($phpbb_seo->seo_opt[$optionvalue])) { if ($optionvalue == 'virtual_root' && !$phpbb_seo->seo_path['phpbb_script']) { continue; } $display_vars['vars'][$optionvalue] = array('lang' => $optionvalue, 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true, 'lang_explain' => $optionvalue . '_explain'); $this->new_config[$optionvalue] = $phpbb_seo->seo_opt[$optionvalue]; } elseif (@isset($this->multiple_options[$optionvalue . '_values'])) { $this->dyn_select[$optionvalue] = $this->multiple_options[$optionvalue . '_values']; $display_vars['vars'][$optionvalue] = array('lang' => $optionvalue, 'validate' => 'string', 'type' => 'select', 'method' => 'select_string', 'explain' => true, 'lang_explain' => $optionvalue . '_explain'); $this->new_config[$optionvalue] = $phpbb_seo->seo_opt[$optionvalue]; } elseif (is_array($optionvalue)) { $display_vars['vars']['legend' . $i] = $optionname; $i++; foreach ($optionvalue as $key => $value) { $this->array_type_cfg[$optionname . '_' . $key] = array('main' => $optionname, 'sub' => $key); if (is_bool($value)) { $display_vars['vars'][$optionname . '_' . $key] = array('lang' => $optionname . '_' . $key, 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true, 'lang_explain' => $optionname . '_' . $key . '_explain'); $this->new_config[$optionname . '_' . $key] = $phpbb_seo->seo_opt[$optionname][$key]; } elseif (@isset($this->multiple_options[$optionname][$key . '_values'])) { $this->dyn_select[$optionname . '_' . $key] = $this->multiple_options[$optionname][$key . '_values']; $display_vars['vars'][$optionname . '_' . $key] = array('lang' => $optionname . '_' . $key, 'validate' => 'string', 'type' => 'select', 'method' => 'select_string', 'explain' => true, 'lang_explain' => $optionname . '_' . $key . '_explain'); $this->new_config[$optionname . '_' . $key] = $phpbb_seo->seo_opt[$optionname][$key]; } else { $display_vars['vars'][$optionname . '_' . $key] = array('lang' => $optionname . '_' . $key, 'validate' => 'string:0:50', 'type' => 'text:50:50', 'explain' => true, 'lang_explain' => $optionname . '_' . $key . '_explain'); $this->new_config[$optionname . '_' . $key] = $phpbb_seo->seo_opt[$optionname][$key]; } } } } break; case 'forum_url': // used for cache $this->write_type = 'forum'; $forbidden = array($phpbb_seo->seo_static['forum'], $phpbb_seo->seo_static['global_announce'], $phpbb_seo->seo_static['user'], $phpbb_seo->seo_static['topic'], $phpbb_seo->seo_static['atopic'], $phpbb_seo->seo_static['utopic'], $phpbb_seo->seo_static['leaders'], $phpbb_seo->seo_static['post'], $phpbb_seo->seo_static['group'], $phpbb_seo->seo_static['npost'], $phpbb_seo->seo_static['index']); if ($phpbb_seo->modrtype == 1 || !$phpbb_seo->seo_opt['cache_layer']) { trigger_error($user->lang['ACP_NO_FORUM_URL'] . preg_replace('`(&|&|\\?)mode=forum_url`i', '', adm_back_link($this->u_action))); break; } $display_vars['title'] = 'ACP_FORUM_URL'; $user->lang['ACP_FORUM_URL_EXPLAIN'] .= '</p><hr/><p><b>' . $user->lang['ACP_PHPBB_SEO_VERSION'] . ' : ' . $this->modrtype_lang['link'] . ' - ' . $phpbb_seo->version . ' ( ' . $this->modrtype_lang['forumlink'] . ' )</b></p><hr/><p>'; $display_vars['vars'] = array(); $display_vars['vars']['legend1'] = 'ACP_FORUM_URL'; $sql = "SELECT forum_id, forum_name\n\t\t\t\t\tFROM " . FORUMS_TABLE . "\n\t\t\t\t\tORDER BY left_id ASC"; $result = $db->sql_query($sql); $forum_url_title = $error_cust = ''; while ($row = $db->sql_fetchrow($result)) { $this->forum_ids[$row['forum_id']] = $row['forum_name']; } $db->sql_freeresult($result); // take care of deleted forums foreach ($phpbb_seo->cache_config['forum'] as $fid => $null) { if (!isset($this->forum_ids[$fid])) { unset($phpbb_seo->cache_config['forum'][$fid]); } } foreach ($this->forum_ids as $forum_id => $forum_name) { $error_cust = ''; // Is the URL cached already ? if (empty($phpbb_seo->cache_config['forum'][$forum_id])) { // Suggest the one from the title $forum_url_title = $phpbb_seo->format_url($forum_name, $phpbb_seo->seo_static['forum']); if (!in_array($forum_url_title, $forbidden)) { if (array_search($forum_url_title, $phpbb_seo->cache_config['forum'])) { $this->new_config['forum_url' . $forum_id] = $forum_url_title . $phpbb_seo->seo_delim['forum'] . $forum_id; $error_cust = '<li> ' . sprintf($user->lang['SEO_ADVICE_DUPE'], $forum_url_title) . '</li>'; } else { $this->new_config['forum_url' . $forum_id] = $forum_url_title . (@$phpbb_seo->cache_config['settings']['rem_ids'] ? '' : $phpbb_seo->seo_delim['forum'] . $forum_id); } } else { $this->new_config['forum_url' . $forum_id] = $forum_url_title . $phpbb_seo->seo_delim['forum'] . $forum_id; $error_cust = '<li> ' . sprintf($user->lang['SEO_ADVICE_RESERVED'], $forum_url_title) . '</li>'; } $title = '<b style="color:red">' . $forum_name . ' - ID ' . $forum_id . '</b>'; $status_msg = '<b style="color:red">' . $user->lang['SEO_CACHE_URL_NOT_OK'] . '</b>'; $status_msg .= '<br/><span style="color:red">' . $user->lang['SEO_CACHE_URL'] . ' :</span> ' . $this->new_config['forum_url' . $forum_id] . $phpbb_seo->seo_ext['forum']; $display_vars['vars']['forum_url' . $forum_id] = array('lang' => $title, 'validate' => 'string', 'type' => 'custom', 'method' => 'forum_url_input', 'explain' => true, 'lang_explain_custom' => $status_msg, 'append' => $this->seo_advices($this->new_config['forum_url' . $forum_id], $forum_id, false, $error_cust)); } else { // Cached $this->new_config['forum_url' . $forum_id] = $phpbb_seo->cache_config['forum'][$forum_id]; $title = '<b style="color:green">' . $forum_name . ' - ID ' . $forum_id . '</b>'; $status_msg = '<span style="color:green">' . $user->lang['SEO_CACHE_URL_OK'] . ' :</span> <b style="color:green">' . $this->new_config['forum_url' . $forum_id] . '</b>'; $status_msg .= '<br/><span style="color:green">' . $user->lang['SEO_CACHE_URL'] . ' :</span> ' . $this->new_config['forum_url' . $forum_id] . $phpbb_seo->seo_ext['forum']; $display_vars['vars']['forum_url' . $forum_id] = array('lang' => $title, 'validate' => 'string:0:100', 'type' => 'custom', 'method' => 'forum_url_input', 'explain' => true, 'lang_explain_custom' => $status_msg, 'append' => $this->seo_advices($this->new_config['forum_url' . $forum_id], $forum_id, true)); } } break; case 'htaccess': $this->write_type = 'htaccess'; $display_vars['title'] = 'ACP_HTACCESS'; $user->lang['ACP_HTACCESS_EXPLAIN'] .= '</p><hr/><p><b>' . $user->lang['ACP_PHPBB_SEO_VERSION'] . ' : ' . $this->modrtype_lang['link'] . ' - ' . $phpbb_seo->version . ' ( ' . $this->modrtype_lang['forumlink'] . ' )</b></p><p>'; $display_vars['vars'] = array(); $display_vars['vars']['legend1'] = 'ACP_HTACCESS'; $display_vars['vars']['save'] = array('lang' => 'SEO_HTACCESS_SAVE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true); $display_vars['vars']['more_options'] = array('lang' => 'SEO_MORE_OPTION', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true); $this->new_config['save'] = false; $cfg_array = isset($_REQUEST['config']) ? utf8_normalize_nfc(request_var('config', array('' => ''), true)) : $this->new_config; $this->new_config['more_options'] = isset($cfg_array['more_options']) ? $cfg_array['more_options'] : false; $this->new_config['slash'] = isset($cfg_array['slash']) ? $cfg_array['slash'] : false; $this->new_config['wslash'] = isset($cfg_array['wslash']) ? $cfg_array['wslash'] : false; $this->new_config['rbase'] = isset($cfg_array['rbase']) ? $cfg_array['rbase'] : false; if ($this->new_config['more_options']) { $display_vars['vars']['slash'] = array('lang' => 'SEO_HTACCESS_SLASH', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true); $display_vars['vars']['wslash'] = array('lang' => 'SEO_HTACCESS_WSLASH', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true); if ($phpbb_seo->seo_path['phpbb_script'] && !$phpbb_seo->seo_opt['virtual_root']) { $display_vars['vars']['rbase'] = array('lang' => 'SEO_HTACCESS_RBASE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true); } } // Dirty yet simple templating $user->lang['ACP_HTACCESS_EXPLAIN'] .= $this->seo_htaccess(); break; case 'extended': $display_vars = array('title' => 'ACP_SEO_EXTENDED', 'vars' => array('legend1' => 'SEO_EXTERNAL_LINKS', 'seo_ext_links' => array('lang' => 'SEO_EXTERNAL_LINKS', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true, 'default' => 1), 'seo_ext_subdomain' => array('lang' => 'SEO_EXTERNAL_SUBDOMAIN', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true, 'default' => 0), 'seo_ext_classes' => array('lang' => 'SEO_EXTERNAL_CLASSES', 'validate' => 'string', 'type' => 'text:40:250', 'explain' => true, 'default' => ''))); // Related topics if (file_exists($phpbb_root_path . "phpbb_seo/phpbb_seo_related.{$phpEx}")) { $related_installed = true; $user->add_lang('mods/phpbb_seo_related_install'); $display_vars['vars'] += array('legend2' => 'RELATED_TOPICS', 'seo_related' => array('lang' => 'SEO_RELATED', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true, 'append' => !empty($config['seo_related']) ? '<br/>' . (!empty($config['seo_related_fulltext']) ? $user->lang['FULLTEXT_INSTALLED'] : $user->lang['FULLTEXT_NOT_INSTALLED']) : '', 'default' => 0), 'seo_related_check_ignore' => array('lang' => 'SEO_RELATED_CHECK_IGNORE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true, 'default' => 0), 'seo_related_limit' => array('lang' => 'SEO_RELATED_LIMIT', 'validate' => 'int:2:25', 'type' => 'text:3:4', 'explain' => true, 'default' => 5), 'seo_related_allforums' => array('lang' => 'SEO_RELATED_ALLFORUMS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true, 'default' => 0)); } // dynamic meta tag mod if (class_exists('seo_meta')) { $display_vars['vars'] += array('legend3' => 'SEO_META', 'seo_meta_title' => array('lang' => 'SEO_META_TITLE', 'validate' => 'string:0:225', 'type' => 'text:40:250', 'explain' => true, 'default' => $config['sitename']), 'seo_meta_desc' => array('lang' => 'SEO_META_DESC', 'validate' => 'string:0:225', 'type' => 'text:40:250', 'explain' => true, 'default' => $config['site_desc']), 'seo_meta_desc_limit' => array('lang' => 'SEO_META_DESC_LIMIT', 'validate' => 'int:5:40', 'type' => 'text:3:4', 'explain' => true, 'default' => 25), 'seo_meta_bbcode_filter' => array('lang' => 'SEO_META_BBCODE_FILTER', 'validate' => 'string:0:225', 'type' => 'text:40:250', 'explain' => true, 'default' => 'img|url|flash|code'), 'seo_meta_keywords' => array('lang' => 'SEO_META_KEYWORDS', 'validate' => 'string:0:225', 'type' => 'text:40:250', 'explain' => true, 'default' => $config['site_desc']), 'seo_meta_keywords_limit' => array('lang' => 'SEO_META_KEYWORDS_LIMIT', 'validate' => 'int:5:40', 'type' => 'text:3:4', 'explain' => true, 'default' => 15), 'seo_meta_min_len' => array('lang' => 'SEO_META_MIN_LEN', 'validate' => 'int:0:10', 'type' => 'text:3:4', 'explain' => true, 'default' => 2), 'seo_meta_check_ignore' => array('lang' => 'SEO_META_CHECK_IGNORE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true, 'default' => 0), 'seo_meta_lang' => array('lang' => 'SEO_META_LANG', 'validate' => 'lang', 'type' => 'select', 'method' => 'language_select', 'params' => array('{CONFIG_VALUE}'), 'explain' => true, 'default' => $config['default_lang']), 'seo_meta_copy' => array('lang' => 'SEO_META_COPY', 'validate' => 'string:0:225', 'type' => 'text:40:250', 'explain' => true, 'default' => $config['sitename']), 'seo_meta_file_filter' => array('lang' => 'SEO_META_FILE_FILTER', 'validate' => 'string:0:225', 'type' => 'text:40:250', 'explain' => true, 'default' => 'ucp'), 'seo_meta_get_filter' => array('lang' => 'SEO_META_GET_FILTER', 'validate' => 'string:0:225', 'type' => 'text:40:250', 'explain' => true, 'default' => 'style,hilit,sid'), 'seo_meta_robots' => array('lang' => 'SEO_META_ROBOTS', 'validate' => 'string:0:225', 'type' => 'text:25:150', 'explain' => true, 'default' => 'index,follow'), 'seo_meta_noarchive' => array('lang' => 'SEO_META_NOARCHIVE', 'validate' => 'string:0:225', 'multiple_validate' => 'int', 'type' => 'custom', 'method' => 'select_multiple', 'params' => array('{CONFIG_VALUE}', '{KEY}', $this->forum_select()), 'explain' => true, 'default' => '')); } // Optimal title if (isset($user->lang['Page'])) { $display_vars['vars'] += array('legend4' => 'SEO_PAGE_TITLES', 'seo_append_sitename' => array('lang' => 'SEO_APPEND_SITENAME', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true, 'default' => 0)); } // install if necessary foreach ($display_vars['vars'] as $config_name => $config_setup) { if (strpos($config_name, 'legend') !== false) { continue; } if (!isset($config[$config_name])) { set_config($config_name, $config_setup['default']); unset($display_vars['vars'][$config_name]['default']); } } $this->new_config = $config; break; default: trigger_error('NO_MODE', E_USER_ERROR); break; } $error = array(); $seo_msg = array(); $cfg_array = isset($_REQUEST['config']) ? utf8_normalize_nfc(request_var('config', array('' => ''), true)) : $this->new_config; if ($submit && !check_form_key($form_key)) { $error[] = $user->lang['FORM_INVALID']; } // We validate the complete config if whished validate_config_vars($display_vars['vars'], $cfg_array, $error); // Do not write values if there is an error if (!empty($error)) { $submit = false; } $additional_notes = ''; // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $cfg_setup) { if (!isset($cfg_array[$config_name]) && @$cfg_setup['method'] != 'select_multiple' || strpos($config_name, 'legend') !== false) { continue; } // Handle multiple select options if (!empty($cfg_setup['method']) && $cfg_setup['method'] == 'select_multiple') { if (isset($_POST['multiple_' . $config_name])) { $m_values = utf8_normalize_nfc(request_var('multiple_' . $config_name, array('' => ''))); $validate_int = !empty($cfg_setup['multiple_validate']) && $cfg_setup['multiple_validate'] == 'int' ? true : false; foreach ($m_values as $k => $v) { if ($validate_int) { $v = max(0, (int) $v); } if (empty($v)) { unset($m_values[$k]); } else { $m_values[$k] = $v; } } sort($m_values); $this->new_config[$config_name] = $m_values; $config_value = implode(',', $m_values); if (strlen($config_value) > 255) { $error[] = sprintf($user->lang['SETTING_TOO_LONG'], $user->lang[$cfg_setup['lang']], 255); } $submit = empty($error); } else { if ($submit) { $this->new_config[$config_name] = array(); $config_value = ''; } else { $config_value = $this->new_config[$config_name]; $this->new_config[$config_name] = !empty($config_value) ? explode(',', $config_value) : array(); } } } else { $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; } if ($submit) { // In case we deal with forum URLs if ($mode == 'forum_url' && preg_match('`^forum_url([0-9]+)$`', $config_name, $matches)) { // Check if this is an actual forum_id if (isset($this->forum_ids[$matches[1]])) { $forum_id = intval($matches[1]); $config_value = $phpbb_seo->format_url($config_value, $phpbb_seo->seo_static['forum']); // Remove delim if required while (preg_match('`^[a-z0-9_-]+' . $phpbb_seo->seo_delim['forum'] . '[0-9]+$`i', $config_value)) { $config_value = preg_replace('`^([a-z0-9_-]+)' . $phpbb_seo->seo_delim['forum'] . '[0-9]+$`i', '\\1', $config_value); if (@$phpbb_seo->cache_config['settings']['rem_ids']) { $seo_msg['SEO_ADVICE_DELIM_REM'] = '<li> ' . $user->lang['SEO_ADVICE_DELIM_REM'] . '</li>'; } } // Forums cannot end with the pagination param while (preg_match('`^[a-z0-9_-]+' . $phpbb_seo->seo_delim['start'] . '[0-9]+$`i', $config_value)) { $config_value = preg_replace('`^([a-z0-9_-]+)' . $phpbb_seo->seo_delim['start'] . '[0-9]+$`i', "\\1", $config_value); $seo_msg['SEO_ADVICE_START'] = '<li> ' . $user->lang['SEO_ADVICE_START'] . '</li>'; } // Only update if the value is not a static one for forums if (!in_array($config_value, $forbidden)) { // and updated (sic) if ($config_value != @$phpbb_seo->cache_config['forum'][$forum_id]) { // and if not already set if (!array_search($config_value, $phpbb_seo->cache_config['forum'])) { $phpbb_seo->cache_config['forum'][$forum_id] = $config_value . (@$phpbb_seo->cache_config['settings']['rem_ids'] ? '' : $phpbb_seo->seo_delim['forum'] . $forum_id); } else { $seo_msg['SEO_ADVICE_DUPE_' . $forum_id] = '<li> ' . sprintf($user->lang['SEO_ADVICE_DUPE'], $config_value) . '</li>'; } } } else { $seo_msg['SEO_ADVICE_RESERVED_' . $forum_id] = '<li> ' . sprintf($user->lang['SEO_ADVICE_RESERVED'], $config_value) . '</li>'; } } } elseif ($mode == 'settings') { if (isset($this->array_type_cfg[$config_name]) && isset($phpbb_seo->seo_opt[$this->array_type_cfg[$config_name]['main']][$this->array_type_cfg[$config_name]['sub']])) { if (is_bool($phpbb_seo->seo_opt[$this->array_type_cfg[$config_name]['main']][$this->array_type_cfg[$config_name]['sub']])) { $phpbb_seo->cache_config['settings'][$this->array_type_cfg[$config_name]['main']][$this->array_type_cfg[$config_name]['sub']] = $config_value == 1 ? true : false; } elseif (is_numeric($phpbb_seo->seo_opt[$this->array_type_cfg[$config_name]['main']][$this->array_type_cfg[$config_name]['sub']])) { $phpbb_seo->cache_config['settings'][$this->array_type_cfg[$config_name]['main']][$this->array_type_cfg[$config_name]['sub']] = intval($config_value); } elseif (is_string($phpbb_seo->seo_opt[$this->array_type_cfg[$config_name]['main']][$this->array_type_cfg[$config_name]['sub']])) { $phpbb_seo->cache_config['settings'][$this->array_type_cfg[$config_name]['main']][$this->array_type_cfg[$config_name]['sub']] = $config_value; } } elseif (isset($phpbb_seo->seo_opt[$config_name])) { if (is_bool($phpbb_seo->seo_opt[$config_name])) { $phpbb_seo->cache_config['settings'][$config_name] = $config_value == 1 ? true : false; } elseif (is_numeric($phpbb_seo->seo_opt[$config_name])) { $phpbb_seo->cache_config['settings'][$config_name] = intval($config_value); } elseif (is_string($phpbb_seo->seo_opt[$config_name])) { $phpbb_seo->cache_config['settings'][$config_name] = $config_value; } } // Let's make sure that the proper field was added to the topic table if ($config_name === 'sql_rewrite' && $config_value == 1 && !$phpbb_seo->seo_opt['sql_rewrite']) { if (!class_exists('phpbb_db_tools')) { require $phpbb_root_path . 'includes/db/db_tools.' . $phpEx; } $db_tools = new phpbb_db_tools($db); $db_tools->db->sql_return_on_error(true); if (!$db_tools->sql_column_exists(TOPICS_TABLE, 'topic_url')) { $db_tools->sql_column_add(TOPICS_TABLE, 'topic_url', array('VCHAR', '')); } $additional_notes = sprintf($user->lang['SYNC_TOPIC_URL_NOTE'], '<a href="' . $phpbb_seo->seo_path['phpbb_url'] . 'phpbb_seo/sync_url.' . $phpEx . '" onclick="window.open(this.href); return false;">', '</a>'); if ($db_tools->db->sql_error_triggered) { $error[] = '<b>' . $user->lang['sql_rewrite'] . '</b> : ' . $user->lang['SEO_SQL_ERROR'] . ' [ ' . $db_tools->db->sql_layer . ' ] : ' . $db_tools->db->sql_error_returned['message'] . ' [' . $db_tools->db->sql_error_returned['code'] . ']' . '<br/>' . $user->lang['SEO_SQL_TRY_MANUALLY'] . '<br/>' . $db_tools->db->sql_error_sql; $submit = false; } $db_tools->db->sql_return_on_error(false); } // Let's make sure the proper index is added for the no dupe (in case it is installed and activated) if ($config_name === 'no_dupe_on' && $config_value == 1 && !$phpbb_seo->seo_opt['no_dupe']['on']) { if (!class_exists('phpbb_db_tools')) { require $phpbb_root_path . 'includes/db/db_tools.' . $phpEx; } // in case we already started the phpbb_db_tools class above if (empty($db_tools)) { $db_tools = new phpbb_db_tools($db); } $db_tools->db->sql_return_on_error(true); $indexes = $db_tools->sql_list_index(TOPICS_TABLE); $drop_index_name = 'topic_last_post_id'; $add_index_name = 'topic_lpid'; if (in_array($drop_index_name, $indexes)) { $db_tools->sql_index_drop(TOPICS_TABLE, $drop_index_name); } if (!in_array($add_index_name, $indexes)) { // Try to override some limits - maybe it helps some... @set_time_limit(0); @ini_set('memory_limit', '128M'); $db_tools->sql_create_index(TOPICS_TABLE, $add_index_name, array('topic_last_post_id')); } if ($db_tools->db->sql_error_triggered) { $error[] = '<b>' . $user->lang['no_dupe'] . '</b> : ' . $user->lang['SEO_SQL_ERROR'] . ' [ ' . $db_tools->db->sql_layer . ' ] : ' . $db_tools->db->sql_error_returned['message'] . ' [' . $db_tools->db->sql_error_returned['code'] . ']' . '<br/>' . $user->lang['SEO_SQL_TRY_MANUALLY'] . '<br/>' . $db_tools->db->sql_error_sql; $submit = false; } $db_tools->db->sql_return_on_error(false); } } elseif ($mode == 'extended') { if ($related_installed && $config_name === 'seo_related') { $fulltext = 0; $nothing_to_do = false; if ($db->sql_layer == 'mysql4' || $db->sql_layer == 'mysqli') { $add = $remove = $alter = false; if ($config_value && !$config['seo_related']) { $alter = $add = true; } if (!$config_value && $config['seo_related']) { $alter = $remove = true; } // let's go if ($alter) { // Try to override some limits - maybe it helps some... @set_time_limit(0); @ini_set('memory_limit', '128M'); // use db_tools to check the index if (!class_exists('phpbb_db_tools')) { require $phpbb_root_path . 'includes/db/db_tools.' . $phpEx; } if (empty($db_tools)) { $db_tools = new phpbb_db_tools($db); } $indexes = $db_tools->sql_list_index(TOPICS_TABLE); if (in_array('topic_tft', $indexes)) { $nothing_to_do = $add ? true : false; $fulltext = 1; } else { $nothing_to_do = $remove ? true : false; $fulltext = 0; } // do not use db_tools since it does not support to add FullText indexes if (!$nothing_to_do) { // Here we use quite a basic approach to make sure that the index is not refused for bad reasons if ($add) { $sql = 'ALTER TABLE ' . TOPICS_TABLE . ' ADD FULLTEXT topic_tft (topic_title)'; } else { $sql = 'ALTER TABLE ' . TOPICS_TABLE . ' DROP INDEX topic_tft'; } $db->sql_return_on_error(true); $db->sql_query($sql); if ($db->sql_error_triggered) { $error[] = '<b>' . $user->lang['RELATED_TOPICS'] . '</b> : ' . $user->lang['SEO_SQL_ERROR'] . ' [ ' . $db->sql_layer . ' ] : ' . $db->sql_error_returned['message'] . ' [' . $db->sql_error_returned['code'] . ']' . '<br/>' . $user->lang['SEO_SQL_TRY_MANUALLY'] . '<br/>' . $db->sql_error_sql; $submit = false; $config_value = 0; } // make *sure* about the index ! $indexes = $db_tools->sql_list_index(TOPICS_TABLE); $fulltext = in_array('topic_tft', $indexes) ? 1 : 0; $db->sql_return_on_error(false); } } } if ($alter) { set_config('seo_related_fulltext', $fulltext); } } set_config($config_name, $config_value); } } } if (sizeof($error)) { $submit = false; } if ($submit) { if ($mode == 'htaccess') { if ($this->new_config['save']) { $this->write_cache($this->write_type); add_log('admin', 'SEO_LOG_CONFIG_' . strtoupper($mode)); } } elseif ($mode == 'extended') { add_log('admin', 'SEO_LOG_CONFIG_' . strtoupper($mode)); trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } else { if ($this->write_cache($this->write_type)) { ksort($phpbb_seo->cache_config[$this->write_type]); add_log('admin', 'SEO_LOG_CONFIG_' . strtoupper($mode)); $msg = !empty($seo_msg) ? '<br /><h1 style="color:red;text-align:left;">' . $user->lang['SEO_VALIDATE_INFO'] . '</h1><ul style="text-align:left;">' . implode(' ', $seo_msg) . '</ul><br />' : ''; global $msg_long_text; $msg_long_text = $user->lang['SEO_CACHE_MSG_OK'] . $msg . adm_back_link($this->u_action); if ($additional_notes) { $msg_long_text .= "<br/><br/>{$additional_notes}"; } trigger_error(false); } else { trigger_error($user->lang['SEO_CACHE_MSG_FAIL'] . adm_back_link($this->u_action)); } } } $this->tpl_name = 'acp_board'; $this->page_title = $display_vars['title']; $phpbb_seo->seo_end(); $l_title_explain = $user->lang[$display_vars['title'] . '_EXPLAIN']; if ($mode != 'extended') { $l_title_explain .= $mode == 'htaccess' ? '' : $this->check_cache_folder($phpbb_root_path . $phpbb_seo->seo_opt['cache_folder']); } $template->assign_vars(array('L_TITLE' => $user->lang[$display_vars['title']], 'L_TITLE_EXPLAIN' => $l_title_explain, 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error), 'U_ACTION' => $this->u_action)); // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } elseif ($vars['explain'] && isset($vars['lang_explain_custom'])) { $l_explain = $vars['lang_explain_custom']; } elseif ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars))); unset($display_vars['vars'][$config_key]); } }
function main($id, $mode) { global $config, $request, $template, $user, $db; $this->page_title = 'ACP_ULOGIN_TITLE'; $this->tpl_name = 'acp_ulogin'; $submit = isset($_POST['submit']) ? true : false; $form_key = 'config_ulogin'; add_form_key($form_key); $display_vars = array('title' => 'ACP_ULOGIN_TITLE', 'vars' => array('legend1' => 'ACP_ULOGIN_ID', 'ulogin_id1' => array('lang' => 'ULOGIN_ID1', 'validate' => 'string', 'type' => 'text:8:8', 'explain' => true), 'ulogin_id2' => array('lang' => 'ULOGIN_ID2', 'validate' => 'string', 'type' => 'text:8:8', 'explain' => true), 'legend2' => 'ACP_ULOGIN_GROUP', 'ulogin_group_id' => array('lang' => 'ULOGIN_GROUP_ID', 'validate' => 'int', 'type' => 'custom', 'method' => 'get_groups', 'explain' => true), 'legend3' => 'ACP_SUBMIT_CHANGES')); if (isset($display_vars['lang'])) { $user->add_lang($display_vars['lang']); } $this->new_config = $config; $cfg_array = isset($_REQUEST['config']) ? utf8_normalize_nfc($request->variable('config', array('' => ''), true)) : $this->new_config; $error = array(); // We validate the complete config if wished validate_config_vars($display_vars['vars'], $cfg_array, $error); if ($submit && !check_form_key($form_key)) { $error[] = $user->lang['FORM_INVALID']; } // Do not write values if there is an error if (sizeof($error)) { $submit = false; } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $null) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($submit) { $config->set($config_name, $config_value); } } if ($submit) { trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } $this->page_title = $display_vars['title']; $template->assign_vars(array('L_TITLE' => $user->lang[$display_vars['title']], 'L_TITLE_EXPLAIN' => $user->lang[$display_vars['title'] . '_EXPLAIN'], 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error))); // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars); if (empty($content)) { continue; } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $content)); unset($display_vars['vars'][$config_key]); } }
function main($id, $mode) { global $cache, $config, $request, $template, $user; global $phpbb_log, $phpbb_root_path, $table_prefix, $phpbb_container; $db_tools = $phpbb_container->get('dbal.tools'); $this->fields_table = $phpbb_container->getParameter('tables.profile_fields'); $this->pbwow_config_table = $phpbb_container->getParameter('tables.pbwow3_config'); $this->pbwow_chars_table = $phpbb_container->getParameter('tables.pbwow3_chars'); $user->add_lang('acp/board'); $this->tpl_name = 'acp_pbwow3'; $allow_curl = function_exists('curl_init'); $legacy_dbtable1 = defined('PBWOW_CONFIG_TABLE') ? PBWOW_CONFIG_TABLE : ''; $legacy_dbtable2 = defined('PBWOW2_CONFIG_TABLE') ? PBWOW2_CONFIG_TABLE : ''; $constantsokay = $dbokay = $legacy_constants = $legacy_db_active = $chars_constokay = $chars_dbokay = $new_config = $ext_version = false; // Check if constants have been set correctly // if yes, check if the config table exists // if yes, load the config variables if ($this->pbwow_config_table == $table_prefix . 'pbwow3_config') { $constantsokay = true; if ($db_tools->sql_table_exists($this->pbwow_config_table)) { $dbokay = true; $this->get_pbwow_config(); $new_config = $this->pbwow_config; } } if ($this->pbwow_chars_table == $table_prefix . 'pbwow3_chars') { $chars_constokay = true; if ($db_tools->sql_table_exists($this->pbwow_chars_table)) { $chars_dbokay = true; } } // Detect if a game has been enabled/disabled in the overview. This must be done before we retrieve the $cplist $cpf_game_toggle = $request->variable('game', ''); if (!empty($cpf_game_toggle)) { $activate = $request->variable('enable', ''); $this->toggle_game_cpf($cpf_game_toggle, $activate); } // Detect Battle.net characters table flush $charsdb_flush = $request->variable('charsdb_flush', ''); if ($charsdb_flush && $chars_dbokay) { $this->charsdb_flush(); } if ($mode == 'overview') { // Get the PBWoW extension version from the composer.json file $ext_manager = $phpbb_container->get('ext.manager'); $ext_meta_manager = $ext_manager->create_extension_metadata_manager('paybas/pbwow', $template); $ext_meta_data = $ext_meta_manager->get_metadata('version'); $ext_version = isset($ext_meta_data['version']) ? $ext_meta_data['version'] : ''; $cpflist = $this->get_profile_fields_list(); $style_root = $phpbb_root_path . 'styles/pbwow3/'; // Get the PBWoW style version from the style.cfg file if (file_exists($style_root . 'style.cfg')) { $values = parse_cfg_file($style_root . 'style.cfg'); $style_version = isset($values['style_version']) ? $values['style_version'] : ''; } $versions = $this->obtain_remote_version($request->variable('versioncheck_force', false), true); // Check if old constants are still being used if (!empty($legacy_dbtable1) || !empty($legacy_dbtable2)) { $legacy_constants = true; } // Check if old table still exists if ($db_tools->sql_table_exists($legacy_dbtable1) || $db_tools->sql_table_exists($table_prefix . 'pbwow_config') || $db_tools->sql_table_exists($legacy_dbtable2) || $db_tools->sql_table_exists($table_prefix . 'pbwow2_config')) { $legacy_db_active = true; } } /** * Config vars */ switch ($mode) { case 'overview': $display_vars = array('title' => 'PBWOW_OVERVIEW_TITLE', 'vars' => array()); break; case 'config': $display_vars = array('title' => 'PBWOW_CONFIG_TITLE', 'vars' => array('legend1' => 'PBWOW_LOGO', 'logo_size_width' => array('lang' => 'PBWOW_LOGO_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'logo_size_height' => array('lang' => 'PBWOW_LOGO_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'logo_enable' => array('lang' => 'PBWOW_LOGO_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'logo_src' => array('lang' => 'PBWOW_LOGO_SRC', 'validate' => 'string', 'type' => 'text:20:255', 'explain' => true), 'logo_size' => array('lang' => 'PBWOW_LOGO_SIZE', 'validate' => 'int:0', 'type' => 'dimension:0', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'logo_margins' => array('lang' => 'PBWOW_LOGO_MARGINS', 'validate' => 'string', 'type' => 'text:20:20', 'explain' => true), 'legend2' => 'PBWOW_TOPBAR', 'topbar_enable' => array('lang' => 'PBWOW_TOPBAR_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'topbar_code' => array('lang' => 'PBWOW_TOPBAR_CODE', 'type' => 'textarea:6:6', 'explain' => true), 'topbar_fixed' => array('lang' => 'PBWOW_TOPBAR_FIXED', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend3' => 'PBWOW_HEADERLINKS', 'headerlinks_enable' => array('lang' => 'PBWOW_HEADERLINKS_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'headerlinks_code' => array('lang' => 'PBWOW_HEADERLINKS_CODE', 'type' => 'textarea:6:6', 'explain' => true), 'legend4' => 'PBWOW_VIDEOBG', 'videobg_enable' => array('lang' => 'PBWOW_VIDEOBG_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'videobg_allpages' => array('lang' => 'PBWOW_VIDEOBG_ALLPAGES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'fixedbg' => array('lang' => 'PBWOW_FIXEDBG', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend5' => 'PBWOW_AVATARS', 'avatars_enable' => array('lang' => 'PBWOW_AVATARS_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'avatars_path' => array('lang' => 'PBWOW_AVATARS_PATH', 'validate' => 'string', 'type' => 'text:20:255', 'explain' => true), 'smallranks_enable' => array('lang' => 'PBWOW_SMALLRANKS_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'legend6' => 'PBWOW_BNETCHARS', 'bnetchars_enable' => array('lang' => 'PBWOW_BNETCHARS_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'bnet_apikey' => array('lang' => 'PBWOW_BNET_APIKEY', 'validate' => 'string', 'type' => 'text:32:64', 'explain' => true), 'bnetchars_cachetime' => array('lang' => 'PBWOW_BNETCHARS_CACHETIME', 'validate' => 'int:0', 'type' => 'text:6:6', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']), 'bnetchars_timeout' => array('lang' => 'PBWOW_BNETCHARS_TIMEOUT', 'validate' => 'int:0', 'type' => 'text:1:1', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']), 'legend7' => 'PBWOW_ADS_INDEX', 'ads_index_enable' => array('lang' => 'PBWOW_ADS_INDEX_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'ads_index_code' => array('lang' => 'PBWOW_ADS_INDEX_CODE', 'type' => 'textarea:6:6', 'explain' => true))); break; default: $display_vars = array('title' => 'ACP_PBWOW3_CATEGORY', 'vars' => array()); break; } $submit = $request->is_set_post('submit'); $cfg_array = isset($_REQUEST['config']) ? utf8_normalize_nfc($request->variable('config', array('' => ''), true)) : $new_config; $error = array(); // We validate the complete config if we want validate_config_vars($display_vars['vars'], $cfg_array, $error); // Do not write values if there is an error if (sizeof($error)) { $submit = false; } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... and then write to config foreach ($display_vars['vars'] as $config_name => $null) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } $new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($submit) { $this->set_pbwow_config($config_name, $config_value); // Enable/disable Battle.net profile fields when the API is enabled/disabled if ($config_name == 'bnetchars_enable') { $this->toggle_game_cpf('bnet', $config_value); } } } if ($submit) { if ($mode != 'overview') { $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_PBWOW_CONFIG'); $cache->purge(); trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } } $this->page_title = $display_vars['title']; $title_explain = $user->lang[$display_vars['title'] . '_EXPLAIN']; $template->assign_vars(array('L_TITLE' => $user->lang[$display_vars['title']], 'L_TITLE_EXPLAIN' => $title_explain, 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error), 'S_CONSTANTSOKAY' => $constantsokay ? true : false, 'PBWOW_DBTABLE' => $this->pbwow_config_table, 'S_DBOKAY' => $dbokay ? true : false, 'S_CURL_DANGER' => isset($this->pbwow_config['bnetchars_enable']) && $this->pbwow_config['bnetchars_enable'] && !$allow_curl, 'L_PBWOW_DB_GOOD' => sprintf($user->lang['PBWOW_DB_GOOD'], $this->pbwow_config_table), 'L_PBWOW_DB_BAD' => sprintf($user->lang['PBWOW_DB_BAD'], $this->pbwow_config_table), 'L_PBWOW_CHARSDB_GOOD' => sprintf($user->lang['PBWOW_CHARSDB_GOOD'], $this->pbwow_chars_table), 'L_PBWOW_CHARSDB_BAD' => sprintf($user->lang['PBWOW_CHARSDB_BAD'], $this->pbwow_chars_table), 'U_ACTION' => $this->u_action)); if ($mode == 'overview') { $pb_bnet_host = isset($cpflist['pb_bnet_host']) && $cpflist['pb_bnet_host']['field_active'] && !$cpflist['pb_bnet_host']['field_no_view'] ? true : false; $pb_bnet_realm = isset($cpflist['pb_bnet_realm']) && $cpflist['pb_bnet_realm']['field_active'] && !$cpflist['pb_bnet_realm']['field_no_view'] ? true : false; $pb_bnet_name = isset($cpflist['pb_bnet_name']) && $cpflist['pb_bnet_name']['field_active'] && !$cpflist['pb_bnet_name']['field_no_view'] ? true : false; $pb_bnet_url = isset($cpflist['pb_bnet_url']) && $cpflist['pb_bnet_url']['field_active'] && !$cpflist['pb_bnet_url']['field_no_view'] ? true : false; $pb_bnet_avatar = isset($cpflist['pb_bnet_avatar']) && $cpflist['pb_bnet_avatar']['field_active'] && !$cpflist['pb_bnet_avatar']['field_no_view'] ? true : false; $pb_wow_race = isset($cpflist['pb_wow_race']) && $cpflist['pb_wow_race']['field_active'] && !$cpflist['pb_wow_race']['field_no_view'] ? true : false; $pb_wow_gender = isset($cpflist['pb_wow_gender']) && $cpflist['pb_wow_gender']['field_active'] && !$cpflist['pb_wow_gender']['field_no_view'] ? true : false; $pb_wow_class = isset($cpflist['pb_wow_class']) && $cpflist['pb_wow_class']['field_active'] && !$cpflist['pb_wow_class']['field_no_view'] ? true : false; $pb_wow_level = isset($cpflist['pb_wow_level']) && $cpflist['pb_wow_level']['field_active'] && !$cpflist['pb_wow_level']['field_no_view'] ? true : false; $pb_wow_guild = isset($cpflist['pb_wow_guild']) && $cpflist['pb_wow_guild']['field_active'] && !$cpflist['pb_wow_guild']['field_no_view'] ? true : false; $pb_diablo_class = isset($cpflist['pb_diablo_class']) && $cpflist['pb_diablo_class']['field_active'] && !$cpflist['pb_diablo_class']['field_no_view'] ? true : false; $pb_diablo_gender = isset($cpflist['pb_diablo_gender']) && $cpflist['pb_diablo_gender']['field_active'] && !$cpflist['pb_diablo_gender']['field_no_view'] ? true : false; $pb_diablo_follower = isset($cpflist['pb_diablo_follower']) && $cpflist['pb_diablo_follower']['field_active'] && !$cpflist['pb_diablo_follower']['field_no_view'] ? true : false; $pb_wildstar_race = isset($cpflist['pb_wildstar_race']) && $cpflist['pb_wildstar_race']['field_active'] && !$cpflist['pb_wildstar_race']['field_no_view'] ? true : false; $pb_wildstar_gender = isset($cpflist['pb_wildstar_gender']) && $cpflist['pb_wildstar_gender']['field_active'] && !$cpflist['pb_wildstar_gender']['field_no_view'] ? true : false; $pb_wildstar_class = isset($cpflist['pb_wildstar_class']) && $cpflist['pb_wildstar_class']['field_active'] && !$cpflist['pb_wildstar_class']['field_no_view'] ? true : false; $pb_wildstar_path = isset($cpflist['pb_wildstar_path']) && $cpflist['pb_wildstar_path']['field_active'] && !$cpflist['pb_wildstar_path']['field_no_view'] ? true : false; $pb_wow_enabled = $pb_wow_race && $pb_wow_gender && $pb_wow_class && $pb_wow_level && $pb_wow_guild; $pb_diablo_enabled = $pb_diablo_class && $pb_diablo_gender && $pb_diablo_follower; $pb_wildstar_enabled = $pb_wildstar_race && $pb_wildstar_gender && $pb_wildstar_class && $pb_wildstar_path; $pb_wow_activate_url = $this->u_action . '&game=wow&enable=' . ($pb_wow_enabled ? '0' : '1'); $pb_diablo_activate_url = $this->u_action . '&game=diablo&enable=' . ($pb_diablo_enabled ? '0' : '1'); $pb_wildstar_activate_url = $this->u_action . '&game=wildstar&enable=' . ($pb_wildstar_enabled ? '0' : '1'); $pb_charsdb_flush_url = $this->u_action . '&charsdb_flush=1'; $template->assign_vars(array('S_INDEX' => true, 'S_CHECK_V' => empty($versions) ? false : true, 'EXT_VERSION' => $ext_version, 'EXT_VERSION_V' => isset($versions['ext_version']['version']) ? $versions['ext_version']['version'] : '', 'STYLE_VERSION' => isset($style_version) ? $style_version : '', 'STYLE_VERSION_V' => isset($versions['style_version']['version']) ? $versions['style_version']['version'] : '', 'U_VERSIONCHECK_FORCE' => append_sid($this->u_action . '&versioncheck_force=1'), 'S_ALLOW_CURL' => $allow_curl, 'S_CPF_ON_MEMBERLIST' => $config['load_cpf_memberlist'] == 1 ? true : false, 'S_CPF_ON_VIEWPROFILE' => $config['load_cpf_viewprofile'] == 1 ? true : false, 'S_CPF_ON_VIEWTOPIC' => $config['load_cpf_viewtopic'] == 1 ? true : false, 'S_PB_WOW' => $pb_wow_enabled, 'S_PB_DIABLO' => $pb_diablo_enabled, 'S_PB_WILDSTAR' => $pb_wildstar_enabled, 'U_PB_WOW' => $pb_wow_activate_url, 'U_PB_DIABLO' => $pb_diablo_activate_url, 'U_PB_WILDSTAR' => $pb_wildstar_activate_url, 'S_BNETCHARS_ACTIVE' => isset($this->pbwow_config['bnetchars_enable']) && $this->pbwow_config['bnetchars_enable'] ? true : false, 'S_BNETCHARS_CONSTOKAY' => $chars_constokay ? true : false, 'S_BNETCHARS_DBOKAY' => $chars_dbokay ? true : false, 'BNET_APIKEY' => isset($this->pbwow_config['bnet_apikey']) ? $this->pbwow_config['bnet_apikey'] : false, 'U_CHARSDB_FLUSH' => $pb_charsdb_flush_url, 'S_PB_BNET_HOST' => $pb_bnet_host, 'S_PB_BNET_REALM' => $pb_bnet_realm, 'S_PB_BNET_NAME' => $pb_bnet_name, 'S_PB_BNET_URL' => $pb_bnet_url, 'S_PB_BNET_AVATAR' => $pb_bnet_avatar, 'S_PB_WOW_RACE' => $pb_wow_race, 'S_PB_WOW_GENDER' => $pb_wow_gender, 'S_PB_WOW_CLASS' => $pb_wow_class, 'S_PB_WOW_LEVEL' => $pb_wow_level, 'S_PB_WOW_GUILD' => $pb_wow_guild, 'S_PB_DIABLO_CLASS' => $pb_diablo_class, 'S_PB_DIABLO_GENDER' => $pb_diablo_gender, 'S_PB_DIABLO_FOLLOWER' => $pb_diablo_follower, 'S_PB_WILDSTAR_RACE' => $pb_wildstar_race, 'S_PB_WILDSTAR_GENDER' => $pb_wildstar_gender, 'S_PB_WILDSTAR_CLASS' => $pb_wildstar_class, 'S_PB_WILDSTAR_PATH' => $pb_wildstar_path, 'S_LEGACY_CONSTANTS' => $legacy_constants, 'S_LEGACY_DB_ACTIVE' => $legacy_db_active)); } // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $content = build_cfg_template($type, $config_key, $new_config, $config_key, $vars); if (empty($content)) { continue; } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $content)); unset($display_vars['vars'][$config_key]); } }
public function main($id, $mode) { global $user, $template, $request; global $config, $phpbb_dispatcher, $phpbb_log; $user->add_lang_ext('paul999/tfa', 'acp_tfa'); $user->add_lang('acp/board'); $submit = $request->is_set('submit'); $form_key = 'acp_tfa'; add_form_key($form_key); $display_vars = array('title' => 'ACP_TFA_SETTINGS', 'vars' => array('legend1' => 'ACP_TFA_SETTINGS', 'tfa_mode' => array('lang' => 'TFA_MODE', 'validate' => 'int', 'type' => 'select', 'method' => 'select_tfa_method', 'explain' => true), 'legend4' => 'ACP_SUBMIT_CHANGES')); /** * Event to add and/or modify acp_board configurations * * @event paul999.tfa.tfa_config_edit_add * @var array display_vars Array of config values to display and process * @var string mode Mode of the config page we are displaying * @var boolean submit Do we display the form or process the submission * @since 1.0.0-b2 */ $vars = array('display_vars', 'mode', 'submit'); extract($phpbb_dispatcher->trigger_event('paul999.tfa.tfa_config_edit_add', compact($vars))); $this->new_config = $config; // Copied from acp_board.php $cfg_array = $request->is_set('config') ? utf8_normalize_nfc($request->variable('config', array('' => ''), true)) : $this->new_config; $error = array(); // We validate the complete config if wished validate_config_vars($display_vars['vars'], $cfg_array, $error); if ($submit && !check_form_key($form_key)) { $error[] = $user->lang('FORM_INVALID'); } // Do not write values if there is an error if (sizeof($error)) { $submit = false; } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $null) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($submit) { $config->set($config_name, $config_value); } } if ($submit) { $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_TFA_CONFIG_' . strtoupper($mode)); $message = $user->lang('CONFIG_UPDATED'); $message_type = E_USER_NOTICE; trigger_error($message . adm_back_link($this->u_action), $message_type); } if (!$request->is_secure()) { $error[] = $user->lang('TFA_REQUIRES_SSL'); } $this->tpl_name = 'acp_board'; $this->page_title = $display_vars['title']; $template->assign_vars(array('L_TITLE' => $user->lang($display_vars['title']), 'L_TITLE_EXPLAIN' => $user->lang($display_vars['title'] . '_EXPLAIN'), 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error), 'U_ACTION' => $this->u_action)); // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => array_key_exists($vars, $user->lang) ? $user->lang($vars) : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && array_key_exists($vars['lang'] . '_EXPLAIN', $user->lang)) { $l_explain = $user->lang($vars['lang'] . '_EXPLAIN'); } $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars); if (empty($content)) { continue; } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => array_key_exists($vars['lang'], $user->lang) ? $user->lang($vars['lang']) : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $content)); unset($display_vars['vars'][$config_key]); } }
/** * Display the options a user can configure for this extension * * @return null * @access public */ public function display_settings() { // Create a form key for preventing CSRF attacks add_form_key('acp_video'); // Is the form being submitted to us? if ($this->request->is_set_post('submit')) { if (!check_form_key('acp_video')) { trigger_error($this->user->lang['FORM_INVALID'] . adm_back_link($this->u_action)); } // Set the options the user configured $this->set_options(); // Add option settings change action to the admin log $this->phpbb_log->add('admin', $this->user->data['user_id'], $this->user->ip, 'ACP_VIDEO_SETTINGS'); } // Set the options the user configured $display_vars = array('vars' => array('legend1' => 'ACP_VIDEO_GENERAL_SETTINGS', 'video_width' => array('lang' => 'ACP_VIDEO_WIDTH', 'validate' => 'string', 'type' => 'text:4:4', 'explain' => true, 'append' => ' ' . $this->user->lang['PIXEL']), 'video_height' => array('lang' => 'ACP_VIDEO_HEIGHT', 'validate' => 'string', 'type' => 'text:4:4', 'explain' => true, 'append' => ' ' . $this->user->lang['PIXEL']), 'google_api_key' => array('lang' => 'ACP_GOOGLE_KEY', 'validate' => 'string', 'type' => 'text:40:40', 'explain' => true), 'enable_video_statics_on_index' => array('lang' => 'ACP_ENABLE_VIDEO_STATICS_ON_INDEX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'enable_comments' => array('lang' => 'ACP_ENABLE_COMMENTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'comments_per_page' => array('lang' => 'ACP_COMMENTS_PER_PAGE', 'validate' => 'int:1', 'type' => 'text:3:4', 'explain' => true), 'legend5' => 'ACP_SUBMIT_CHANGES')); $this->new_config = $this->config; $cfg_array = isset($_REQUEST['config']) ? utf8_normalize_nfc($this->request->variable('config', array('' => ''), true)) : $this->new_config; $error = array(); if (sizeof($error)) { $submit = false; } validate_config_vars($display_vars['vars'], $cfg_array, $error); $submit = isset($_POST['submit']) ? true : false; $form_name = 'acp_video'; foreach ($display_vars['vars'] as $config_name => $null) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($submit) { if (!$this->config->set($config_name, $config_value)) { $error = true; } } } foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $this->template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($this->user->lang[$vars]) ? $this->user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($this->user->lang[$vars['lang_explain']]) ? $this->user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($this->user->lang[$vars['lang'] . '_EXPLAIN']) ? $this->user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars); if (empty($content)) { continue; } $this->template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($this->user->lang[$vars['lang']]) ? $this->user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $content)); unset($display_vars['vars'][$config_key]); } }
function main($id, $mode) { global $db, $user, $auth, $template, $request; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $cache, $phpbb_container, $phpbb_dispatcher, $phpbb_log; $user->add_lang('acp/board'); $action = $request->variable('action', ''); $submit = isset($_POST['submit']) || isset($_POST['allow_quick_reply_enable']) ? true : false; $form_key = 'acp_board'; add_form_key($form_key); /** * Validation types are: * string, int, bool, * script_path (absolute path in url - beginning with / and no trailing slash), * rpath (relative), rwpath (realtive, writable), path (relative path, but able to escape the root), wpath (writable) */ switch ($mode) { case 'settings': $display_vars = array('title' => 'ACP_BOARD_SETTINGS', 'vars' => array('legend1' => 'ACP_BOARD_SETTINGS', 'sitename' => array('lang' => 'SITE_NAME', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => false), 'site_desc' => array('lang' => 'SITE_DESC', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => false), 'site_home_url' => array('lang' => 'SITE_HOME_URL', 'validate' => 'string', 'type' => 'url:40:255', 'explain' => true), 'site_home_text' => array('lang' => 'SITE_HOME_TEXT', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => true), 'board_index_text' => array('lang' => 'BOARD_INDEX_TEXT', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => true), 'board_disable' => array('lang' => 'DISABLE_BOARD', 'validate' => 'bool', 'type' => 'custom', 'method' => 'board_disable', 'explain' => true), 'board_disable_msg' => false, 'default_lang' => array('lang' => 'DEFAULT_LANGUAGE', 'validate' => 'lang', 'type' => 'select', 'function' => 'language_select', 'params' => array('{CONFIG_VALUE}'), 'explain' => false), 'default_dateformat' => array('lang' => 'DEFAULT_DATE_FORMAT', 'validate' => 'string', 'type' => 'custom', 'method' => 'dateformat_select', 'explain' => true), 'board_timezone' => array('lang' => 'SYSTEM_TIMEZONE', 'validate' => 'timezone', 'type' => 'custom', 'method' => 'timezone_select', 'explain' => true), 'legend2' => 'BOARD_STYLE', 'default_style' => array('lang' => 'DEFAULT_STYLE', 'validate' => 'int', 'type' => 'select', 'function' => 'style_select', 'params' => array('{CONFIG_VALUE}', false), 'explain' => true), 'guest_style' => array('lang' => 'GUEST_STYLE', 'validate' => 'int', 'type' => 'select', 'function' => 'style_select', 'params' => array($this->guest_style_get(), false), 'explain' => true), 'override_user_style' => array('lang' => 'OVERRIDE_STYLE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend3' => 'WARNINGS', 'warnings_expire_days' => array('lang' => 'WARNINGS_EXPIRE', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']), 'legend4' => 'ACP_SUBMIT_CHANGES')); break; case 'features': $display_vars = array('title' => 'ACP_BOARD_FEATURES', 'vars' => array('legend1' => 'ACP_BOARD_FEATURES', 'allow_privmsg' => array('lang' => 'BOARD_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_topic_notify' => array('lang' => 'ALLOW_TOPIC_NOTIFY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_forum_notify' => array('lang' => 'ALLOW_FORUM_NOTIFY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_namechange' => array('lang' => 'ALLOW_NAME_CHANGE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_attachments' => array('lang' => 'ALLOW_ATTACHMENTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_pm_attach' => array('lang' => 'ALLOW_PM_ATTACHMENTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_pm_report' => array('lang' => 'ALLOW_PM_REPORT', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_bbcode' => array('lang' => 'ALLOW_BBCODE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_smilies' => array('lang' => 'ALLOW_SMILIES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig' => array('lang' => 'ALLOW_SIG', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_board_notifications' => array('lang' => 'ALLOW_BOARD_NOTIFICATIONS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_nocensors' => array('lang' => 'ALLOW_NO_CENSORS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_bookmarks' => array('lang' => 'ALLOW_BOOKMARKS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_birthdays' => array('lang' => 'ALLOW_BIRTHDAYS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'display_last_subject' => array('lang' => 'DISPLAY_LAST_SUBJECT', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_quick_reply' => array('lang' => 'ALLOW_QUICK_REPLY', 'validate' => 'bool', 'type' => 'custom', 'method' => 'quick_reply', 'explain' => true), 'legend2' => 'ACP_LOAD_SETTINGS', 'load_birthdays' => array('lang' => 'YES_BIRTHDAYS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_moderators' => array('lang' => 'YES_MODERATORS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_jumpbox' => array('lang' => 'YES_JUMPBOX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_memberlist' => array('lang' => 'LOAD_CPF_MEMBERLIST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_pm' => array('lang' => 'LOAD_CPF_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_viewprofile' => array('lang' => 'LOAD_CPF_VIEWPROFILE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_viewtopic' => array('lang' => 'LOAD_CPF_VIEWTOPIC', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'legend3' => 'ACP_SUBMIT_CHANGES')); break; case 'avatar': /* @var $phpbb_avatar_manager \phpbb\avatar\manager */ $phpbb_avatar_manager = $phpbb_container->get('avatar.manager'); $avatar_drivers = $phpbb_avatar_manager->get_all_drivers(); $avatar_vars = array(); foreach ($avatar_drivers as $current_driver) { $driver = $phpbb_avatar_manager->get_driver($current_driver, false); /* * First grab the settings for enabling/disabling the avatar * driver and afterwards grab additional settings the driver * might have. */ $avatar_vars += $phpbb_avatar_manager->get_avatar_settings($driver); $avatar_vars += $driver->prepare_form_acp($user); } $display_vars = array('title' => 'ACP_AVATAR_SETTINGS', 'vars' => array('legend1' => 'ACP_AVATAR_SETTINGS', 'avatar_min_width' => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'avatar_min_height' => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'avatar_max_width' => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'avatar_max_height' => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'allow_avatar' => array('lang' => 'ALLOW_AVATARS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'avatar_min' => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => 'dimension:0', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'avatar_max' => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => 'dimension:0', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']))); if (!empty($avatar_vars)) { $display_vars['vars'] += $avatar_vars; } break; case 'message': $display_vars = array('title' => 'ACP_MESSAGE_SETTINGS', 'lang' => 'ucp', 'vars' => array('legend1' => 'GENERAL_SETTINGS', 'allow_privmsg' => array('lang' => 'BOARD_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'pm_max_boxes' => array('lang' => 'BOXES_MAX', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true), 'pm_max_msgs' => array('lang' => 'BOXES_LIMIT', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true), 'full_folder_action' => array('lang' => 'FULL_FOLDER_ACTION', 'validate' => 'int', 'type' => 'select', 'method' => 'full_folder_select', 'explain' => true), 'pm_edit_time' => array('lang' => 'PM_EDIT_TIME', 'validate' => 'int:0:99999', 'type' => 'number:0:99999', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']), 'pm_max_recipients' => array('lang' => 'PM_MAX_RECIPIENTS', 'validate' => 'int:0:99999', 'type' => 'number:0:99999', 'explain' => true), 'legend2' => 'GENERAL_OPTIONS', 'allow_mass_pm' => array('lang' => 'ALLOW_MASS_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'auth_bbcode_pm' => array('lang' => 'ALLOW_BBCODE_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'auth_smilies_pm' => array('lang' => 'ALLOW_SMILIES_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_pm_attach' => array('lang' => 'ALLOW_PM_ATTACHMENTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig_pm' => array('lang' => 'ALLOW_SIG_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'print_pm' => array('lang' => 'ALLOW_PRINT_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'forward_pm' => array('lang' => 'ALLOW_FORWARD_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'auth_img_pm' => array('lang' => 'ALLOW_IMG_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'auth_flash_pm' => array('lang' => 'ALLOW_FLASH_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'enable_pm_icons' => array('lang' => 'ENABLE_PM_ICONS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'legend3' => 'ACP_SUBMIT_CHANGES')); break; case 'post': $display_vars = array('title' => 'ACP_POST_SETTINGS', 'vars' => array('legend1' => 'GENERAL_OPTIONS', 'allow_topic_notify' => array('lang' => 'ALLOW_TOPIC_NOTIFY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_forum_notify' => array('lang' => 'ALLOW_FORUM_NOTIFY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_bbcode' => array('lang' => 'ALLOW_BBCODE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_post_flash' => array('lang' => 'ALLOW_POST_FLASH', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_smilies' => array('lang' => 'ALLOW_SMILIES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_post_links' => array('lang' => 'ALLOW_POST_LINKS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_nocensors' => array('lang' => 'ALLOW_NO_CENSORS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_bookmarks' => array('lang' => 'ALLOW_BOOKMARKS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'enable_post_confirm' => array('lang' => 'VISUAL_CONFIRM_POST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_quick_reply' => array('lang' => 'ALLOW_QUICK_REPLY', 'validate' => 'bool', 'type' => 'custom', 'method' => 'quick_reply', 'explain' => true), 'legend2' => 'POSTING', 'bump_type' => false, 'edit_time' => array('lang' => 'EDIT_TIME', 'validate' => 'int:0:99999', 'type' => 'number:0:99999', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']), 'delete_time' => array('lang' => 'DELETE_TIME', 'validate' => 'int:0:99999', 'type' => 'number:0:99999', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']), 'display_last_edited' => array('lang' => 'DISPLAY_LAST_EDITED', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'flood_interval' => array('lang' => 'FLOOD_INTERVAL', 'validate' => 'int:0:9999999999', 'type' => 'number:0:9999999999', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']), 'bump_interval' => array('lang' => 'BUMP_INTERVAL', 'validate' => 'int:0', 'type' => 'custom', 'method' => 'bump_interval', 'explain' => true), 'topics_per_page' => array('lang' => 'TOPICS_PER_PAGE', 'validate' => 'int:1:9999', 'type' => 'number:1:9999', 'explain' => false), 'posts_per_page' => array('lang' => 'POSTS_PER_PAGE', 'validate' => 'int:1:9999', 'type' => 'number:1:9999', 'explain' => false), 'smilies_per_page' => array('lang' => 'SMILIES_PER_PAGE', 'validate' => 'int:1:9999', 'type' => 'number:1:9999', 'explain' => false), 'hot_threshold' => array('lang' => 'HOT_THRESHOLD', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true), 'max_poll_options' => array('lang' => 'MAX_POLL_OPTIONS', 'validate' => 'int:2:127', 'type' => 'number:2:127', 'explain' => false), 'max_post_chars' => array('lang' => 'CHAR_LIMIT', 'validate' => 'int:0:999999', 'type' => 'number:0:999999', 'explain' => true), 'min_post_chars' => array('lang' => 'MIN_CHAR_LIMIT', 'validate' => 'int:1:999999', 'type' => 'number:1:999999', 'explain' => true), 'max_post_smilies' => array('lang' => 'SMILIES_LIMIT', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true), 'max_post_urls' => array('lang' => 'MAX_POST_URLS', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true), 'max_post_font_size' => array('lang' => 'MAX_POST_FONT_SIZE', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true, 'append' => ' %'), 'max_quote_depth' => array('lang' => 'QUOTE_DEPTH_LIMIT', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true), 'max_post_img_width' => array('lang' => 'MAX_POST_IMG_WIDTH', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'max_post_img_height' => array('lang' => 'MAX_POST_IMG_HEIGHT', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'legend3' => 'ACP_SUBMIT_CHANGES')); break; case 'signature': $display_vars = array('title' => 'ACP_SIGNATURE_SETTINGS', 'vars' => array('legend1' => 'GENERAL_OPTIONS', 'allow_sig' => array('lang' => 'ALLOW_SIG', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig_bbcode' => array('lang' => 'ALLOW_SIG_BBCODE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig_img' => array('lang' => 'ALLOW_SIG_IMG', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig_flash' => array('lang' => 'ALLOW_SIG_FLASH', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig_smilies' => array('lang' => 'ALLOW_SIG_SMILIES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig_links' => array('lang' => 'ALLOW_SIG_LINKS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend2' => 'GENERAL_SETTINGS', 'max_sig_chars' => array('lang' => 'MAX_SIG_LENGTH', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true), 'max_sig_urls' => array('lang' => 'MAX_SIG_URLS', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true), 'max_sig_font_size' => array('lang' => 'MAX_SIG_FONT_SIZE', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true, 'append' => ' %'), 'max_sig_smilies' => array('lang' => 'MAX_SIG_SMILIES', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true), 'max_sig_img_width' => array('lang' => 'MAX_SIG_IMG_WIDTH', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'max_sig_img_height' => array('lang' => 'MAX_SIG_IMG_HEIGHT', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'legend3' => 'ACP_SUBMIT_CHANGES')); break; case 'registration': $display_vars = array('title' => 'ACP_REGISTER_SETTINGS', 'vars' => array('legend1' => 'GENERAL_SETTINGS', 'max_name_chars' => array('lang' => 'USERNAME_LENGTH', 'validate' => 'int:8:180', 'type' => false, 'method' => false, 'explain' => false), 'max_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:8:255', 'type' => false, 'method' => false, 'explain' => false), 'require_activation' => array('lang' => 'ACC_ACTIVATION', 'validate' => 'int', 'type' => 'select', 'method' => 'select_acc_activation', 'explain' => true), 'new_member_post_limit' => array('lang' => 'NEW_MEMBER_POST_LIMIT', 'validate' => 'int:0:255', 'type' => 'number:0:255', 'explain' => true, 'append' => ' ' . $user->lang['POSTS']), 'new_member_group_default' => array('lang' => 'NEW_MEMBER_GROUP_DEFAULT', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'min_name_chars' => array('lang' => 'USERNAME_LENGTH', 'validate' => 'int:1', 'type' => 'custom:5:180', 'method' => 'username_length', 'explain' => true), 'min_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:1', 'type' => 'custom', 'method' => 'password_length', 'explain' => true), 'allow_name_chars' => array('lang' => 'USERNAME_CHARS', 'validate' => 'string', 'type' => 'select', 'method' => 'select_username_chars', 'explain' => true), 'pass_complex' => array('lang' => 'PASSWORD_TYPE', 'validate' => 'string', 'type' => 'select', 'method' => 'select_password_chars', 'explain' => true), 'chg_passforce' => array('lang' => 'FORCE_PASS_CHANGE', 'validate' => 'int:0:999', 'type' => 'number:0:999', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']), 'legend2' => 'GENERAL_OPTIONS', 'allow_namechange' => array('lang' => 'ALLOW_NAME_CHANGE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_emailreuse' => array('lang' => 'ALLOW_EMAIL_REUSE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'enable_confirm' => array('lang' => 'VISUAL_CONFIRM_REG', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'max_login_attempts' => array('lang' => 'MAX_LOGIN_ATTEMPTS', 'validate' => 'int:0:999', 'type' => 'number:0:999', 'explain' => true), 'max_reg_attempts' => array('lang' => 'REG_LIMIT', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true), 'legend3' => 'COPPA', 'coppa_enable' => array('lang' => 'ENABLE_COPPA', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'coppa_mail' => array('lang' => 'COPPA_MAIL', 'validate' => 'string', 'type' => 'textarea:5:40', 'explain' => true), 'coppa_fax' => array('lang' => 'COPPA_FAX', 'validate' => 'string', 'type' => 'text:25:100', 'explain' => false), 'legend4' => 'ACP_SUBMIT_CHANGES')); break; case 'feed': $display_vars = array('title' => 'ACP_FEED_MANAGEMENT', 'vars' => array('legend1' => 'ACP_FEED_GENERAL', 'feed_enable' => array('lang' => 'ACP_FEED_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_item_statistics' => array('lang' => 'ACP_FEED_ITEM_STATISTICS', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_http_auth' => array('lang' => 'ACP_FEED_HTTP_AUTH', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'legend2' => 'ACP_FEED_POST_BASED', 'feed_limit_post' => array('lang' => 'ACP_FEED_LIMIT', 'validate' => 'int:5:9999', 'type' => 'number:5:9999', 'explain' => true), 'feed_overall' => array('lang' => 'ACP_FEED_OVERALL', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_forum' => array('lang' => 'ACP_FEED_FORUM', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_topic' => array('lang' => 'ACP_FEED_TOPIC', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'legend3' => 'ACP_FEED_TOPIC_BASED', 'feed_limit_topic' => array('lang' => 'ACP_FEED_LIMIT', 'validate' => 'int:5:9999', 'type' => 'number:5:9999', 'explain' => true), 'feed_topics_new' => array('lang' => 'ACP_FEED_TOPICS_NEW', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_topics_active' => array('lang' => 'ACP_FEED_TOPICS_ACTIVE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_news_id' => array('lang' => 'ACP_FEED_NEWS', 'validate' => 'string', 'type' => 'custom', 'method' => 'select_news_forums', 'explain' => true), 'legend4' => 'ACP_FEED_SETTINGS_OTHER', 'feed_overall_forums' => array('lang' => 'ACP_FEED_OVERALL_FORUMS', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_exclude_id' => array('lang' => 'ACP_FEED_EXCLUDE_ID', 'validate' => 'string', 'type' => 'custom', 'method' => 'select_exclude_forums', 'explain' => true))); break; case 'cookie': $display_vars = array('title' => 'ACP_COOKIE_SETTINGS', 'vars' => array('legend1' => 'ACP_COOKIE_SETTINGS', 'cookie_domain' => array('lang' => 'COOKIE_DOMAIN', 'validate' => 'string', 'type' => 'text::255', 'explain' => false), 'cookie_name' => array('lang' => 'COOKIE_NAME', 'validate' => 'string', 'type' => 'text::16', 'explain' => false), 'cookie_path' => array('lang' => 'COOKIE_PATH', 'validate' => 'string', 'type' => 'text::255', 'explain' => false), 'cookie_secure' => array('lang' => 'COOKIE_SECURE', 'validate' => 'bool', 'type' => 'radio:disabled_enabled', 'explain' => true))); break; case 'load': $display_vars = array('title' => 'ACP_LOAD_SETTINGS', 'vars' => array('legend1' => 'GENERAL_SETTINGS', 'limit_load' => array('lang' => 'LIMIT_LOAD', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true), 'session_length' => array('lang' => 'SESSION_LENGTH', 'validate' => 'int:60:9999999999', 'type' => 'number:60:9999999999', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']), 'active_sessions' => array('lang' => 'LIMIT_SESSIONS', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true), 'load_online_time' => array('lang' => 'ONLINE_LENGTH', 'validate' => 'int:0:999', 'type' => 'number:0:999', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']), 'read_notification_expire_days' => array('lang' => 'READ_NOTIFICATION_EXPIRE_DAYS', 'validate' => 'int:0', 'type' => 'number:0', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']), 'legend2' => 'GENERAL_OPTIONS', 'load_notifications' => array('lang' => 'LOAD_NOTIFICATIONS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_db_track' => array('lang' => 'YES_POST_MARKING', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_db_lastread' => array('lang' => 'YES_READ_MARKING', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_anon_lastread' => array('lang' => 'YES_ANON_READ_MARKING', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_online' => array('lang' => 'YES_ONLINE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_online_guests' => array('lang' => 'YES_ONLINE_GUESTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_onlinetrack' => array('lang' => 'YES_ONLINE_TRACK', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_birthdays' => array('lang' => 'YES_BIRTHDAYS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_unreads_search' => array('lang' => 'YES_UNREAD_SEARCH', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_moderators' => array('lang' => 'YES_MODERATORS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_jumpbox' => array('lang' => 'YES_JUMPBOX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_user_activity' => array('lang' => 'LOAD_USER_ACTIVITY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_tplcompile' => array('lang' => 'RECOMPILE_STYLES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_cdn' => array('lang' => 'ALLOW_CDN', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_live_searches' => array('lang' => 'ALLOW_LIVE_SEARCHES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend3' => 'CUSTOM_PROFILE_FIELDS', 'load_cpf_memberlist' => array('lang' => 'LOAD_CPF_MEMBERLIST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_pm' => array('lang' => 'LOAD_CPF_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_viewprofile' => array('lang' => 'LOAD_CPF_VIEWPROFILE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_viewtopic' => array('lang' => 'LOAD_CPF_VIEWTOPIC', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'legend4' => 'ACP_SUBMIT_CHANGES')); break; case 'auth': $display_vars = array('title' => 'ACP_AUTH_SETTINGS', 'vars' => array('legend1' => 'ACP_AUTH_SETTINGS', 'auth_method' => array('lang' => 'AUTH_METHOD', 'validate' => 'string', 'type' => 'select:1:toggable', 'method' => 'select_auth_method', 'explain' => false))); break; case 'server': $display_vars = array('title' => 'ACP_SERVER_SETTINGS', 'vars' => array('legend1' => 'ACP_SERVER_SETTINGS', 'gzip_compress' => array('lang' => 'ENABLE_GZIP', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'use_system_cron' => array('lang' => 'USE_SYSTEM_CRON', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend2' => 'PATH_SETTINGS', 'enable_mod_rewrite' => array('lang' => 'MOD_REWRITE_ENABLE', 'validate' => 'bool', 'type' => 'custom', 'method' => 'enable_mod_rewrite', 'explain' => true), 'smilies_path' => array('lang' => 'SMILIES_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true), 'icons_path' => array('lang' => 'ICONS_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true), 'upload_icons_path' => array('lang' => 'UPLOAD_ICONS_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true), 'ranks_path' => array('lang' => 'RANKS_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true), 'legend3' => 'SERVER_URL_SETTINGS', 'force_server_vars' => array('lang' => 'FORCE_SERVER_VARS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'server_protocol' => array('lang' => 'SERVER_PROTOCOL', 'validate' => 'string', 'type' => 'text:10:10', 'explain' => true), 'server_name' => array('lang' => 'SERVER_NAME', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => true), 'server_port' => array('lang' => 'SERVER_PORT', 'validate' => 'int:0:99999', 'type' => 'number:0:99999', 'explain' => true), 'script_path' => array('lang' => 'SCRIPT_PATH', 'validate' => 'script_path', 'type' => 'text::255', 'explain' => true), 'legend4' => 'ACP_SUBMIT_CHANGES')); break; case 'security': $display_vars = array('title' => 'ACP_SECURITY_SETTINGS', 'vars' => array('legend1' => 'ACP_SECURITY_SETTINGS', 'allow_autologin' => array('lang' => 'ALLOW_AUTOLOGIN', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_password_reset' => array('lang' => 'ALLOW_PASSWORD_RESET', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'max_autologin_time' => array('lang' => 'AUTOLOGIN_LENGTH', 'validate' => 'int:0:99999', 'type' => 'number:0:99999', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']), 'ip_check' => array('lang' => 'IP_VALID', 'validate' => 'int', 'type' => 'custom', 'method' => 'select_ip_check', 'explain' => true), 'browser_check' => array('lang' => 'BROWSER_VALID', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'forwarded_for_check' => array('lang' => 'FORWARDED_FOR_VALID', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'referer_validation' => array('lang' => 'REFERRER_VALID', 'validate' => 'int:0:3', 'type' => 'custom', 'method' => 'select_ref_check', 'explain' => true), 'check_dnsbl' => array('lang' => 'CHECK_DNSBL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'email_check_mx' => array('lang' => 'EMAIL_CHECK_MX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'max_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:8:255', 'type' => false, 'method' => false, 'explain' => false), 'min_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:1', 'type' => 'custom', 'method' => 'password_length', 'explain' => true), 'pass_complex' => array('lang' => 'PASSWORD_TYPE', 'validate' => 'string', 'type' => 'select', 'method' => 'select_password_chars', 'explain' => true), 'chg_passforce' => array('lang' => 'FORCE_PASS_CHANGE', 'validate' => 'int:0:999', 'type' => 'number:0:999', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']), 'max_login_attempts' => array('lang' => 'MAX_LOGIN_ATTEMPTS', 'validate' => 'int:0:999', 'type' => 'number:0:999', 'explain' => true), 'ip_login_limit_max' => array('lang' => 'IP_LOGIN_LIMIT_MAX', 'validate' => 'int:0:999', 'type' => 'number:0:999', 'explain' => true), 'ip_login_limit_time' => array('lang' => 'IP_LOGIN_LIMIT_TIME', 'validate' => 'int:0:99999', 'type' => 'number:0:99999', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']), 'ip_login_limit_use_forwarded' => array('lang' => 'IP_LOGIN_LIMIT_USE_FORWARDED', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'tpl_allow_php' => array('lang' => 'TPL_ALLOW_PHP', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'form_token_lifetime' => array('lang' => 'FORM_TIME_MAX', 'validate' => 'int:-1:99999', 'type' => 'number:-1:99999', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']), 'form_token_sid_guests' => array('lang' => 'FORM_SID_GUESTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true))); break; case 'email': $display_vars = array('title' => 'ACP_EMAIL_SETTINGS', 'vars' => array('legend1' => 'GENERAL_SETTINGS', 'email_enable' => array('lang' => 'ENABLE_EMAIL', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'board_email_form' => array('lang' => 'BOARD_EMAIL_FORM', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'email_function_name' => array('lang' => 'EMAIL_FUNCTION_NAME', 'validate' => 'string', 'type' => 'text:20:50', 'explain' => true), 'email_package_size' => array('lang' => 'EMAIL_PACKAGE_SIZE', 'validate' => 'int:0', 'type' => 'number:0:99999', 'explain' => true), 'board_contact' => array('lang' => 'CONTACT_EMAIL', 'validate' => 'email', 'type' => 'email:25:100', 'explain' => true), 'board_contact_name' => array('lang' => 'CONTACT_EMAIL_NAME', 'validate' => 'string', 'type' => 'text:25:50', 'explain' => true), 'board_email' => array('lang' => 'ADMIN_EMAIL', 'validate' => 'email', 'type' => 'email:25:100', 'explain' => true), 'board_email_sig' => array('lang' => 'EMAIL_SIG', 'validate' => 'string', 'type' => 'textarea:5:30', 'explain' => true), 'board_hide_emails' => array('lang' => 'BOARD_HIDE_EMAILS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend2' => 'SMTP_SETTINGS', 'smtp_delivery' => array('lang' => 'USE_SMTP', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'smtp_host' => array('lang' => 'SMTP_SERVER', 'validate' => 'string', 'type' => 'text:25:50', 'explain' => false), 'smtp_port' => array('lang' => 'SMTP_PORT', 'validate' => 'int:0:99999', 'type' => 'number:0:99999', 'explain' => true), 'smtp_auth_method' => array('lang' => 'SMTP_AUTH_METHOD', 'validate' => 'string', 'type' => 'select', 'method' => 'mail_auth_select', 'explain' => true), 'smtp_username' => array('lang' => 'SMTP_USERNAME', 'validate' => 'string', 'type' => 'text:25:255', 'explain' => true), 'smtp_password' => array('lang' => 'SMTP_PASSWORD', 'validate' => 'string', 'type' => 'password:25:255', 'explain' => true), 'legend3' => 'ACP_SUBMIT_CHANGES')); break; default: trigger_error('NO_MODE', E_USER_ERROR); break; } /** * Event to add and/or modify acp_board configurations * * @event core.acp_board_config_edit_add * @var array display_vars Array of config values to display and process * @var string mode Mode of the config page we are displaying * @var boolean submit Do we display the form or process the submission * @since 3.1.0-a4 */ $vars = array('display_vars', 'mode', 'submit'); extract($phpbb_dispatcher->trigger_event('core.acp_board_config_edit_add', compact($vars))); if (isset($display_vars['lang'])) { $user->add_lang($display_vars['lang']); } $this->new_config = $config; $cfg_array = isset($_REQUEST['config']) ? $request->variable('config', array('' => ''), true) : $this->new_config; $error = array(); // We validate the complete config if wished validate_config_vars($display_vars['vars'], $cfg_array, $error); if ($submit && !check_form_key($form_key)) { $error[] = $user->lang['FORM_INVALID']; } // Do not write values if there is an error if (sizeof($error)) { $submit = false; } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $data) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } if ($config_name == 'auth_method' || $config_name == 'feed_news_id' || $config_name == 'feed_exclude_id') { continue; } if ($config_name == 'guest_style') { if (isset($cfg_array[$config_name])) { $this->guest_style_set($cfg_array[$config_name]); } continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($config_name == 'email_function_name') { $this->new_config['email_function_name'] = trim(str_replace(array('(', ')'), array('', ''), $this->new_config['email_function_name'])); $this->new_config['email_function_name'] = empty($this->new_config['email_function_name']) || !function_exists($this->new_config['email_function_name']) ? 'mail' : $this->new_config['email_function_name']; $config_value = $this->new_config['email_function_name']; } if ($submit) { if (strpos($data['type'], 'password') === 0 && $config_value === '********') { // Do not update password fields if the content is ********, // because that is the password replacement we use to not // send the password to the output continue; } $config->set($config_name, $config_value); if ($config_name == 'allow_quick_reply' && isset($_POST['allow_quick_reply_enable'])) { enable_bitfield_column_flag(FORUMS_TABLE, 'forum_flags', log(FORUM_FLAG_QUICK_REPLY, 2)); } } } // Store news and exclude ids if ($mode == 'feed' && $submit) { $cache->destroy('_feed_news_forum_ids'); $cache->destroy('_feed_excluded_forum_ids'); $this->store_feed_forums(FORUM_OPTION_FEED_NEWS, 'feed_news_id'); $this->store_feed_forums(FORUM_OPTION_FEED_EXCLUDE, 'feed_exclude_id'); } if ($mode == 'auth') { // Retrieve a list of auth plugins and check their config values /* @var $auth_providers \phpbb\auth\provider_collection */ $auth_providers = $phpbb_container->get('auth.provider_collection'); $updated_auth_settings = false; $old_auth_config = array(); foreach ($auth_providers as $provider) { /** @var \phpbb\auth\provider\provider_interface $provider */ if ($fields = $provider->acp()) { // Check if we need to create config fields for this plugin and save config when submit was pressed foreach ($fields as $field) { if (!isset($config[$field])) { $config->set($field, ''); } if (!isset($cfg_array[$field]) || strpos($field, 'legend') !== false) { continue; } if (substr($field, -9) === '_password' && $cfg_array[$field] === '********') { // Do not update password fields if the content is ********, // because that is the password replacement we use to not // send the password to the output continue; } $old_auth_config[$field] = $this->new_config[$field]; $config_value = $cfg_array[$field]; $this->new_config[$field] = $config_value; if ($submit) { $updated_auth_settings = true; $config->set($field, $config_value); } } } unset($fields); } if ($submit && ($cfg_array['auth_method'] != $this->new_config['auth_method'] || $updated_auth_settings)) { $method = basename($cfg_array['auth_method']); if (array_key_exists('auth.provider.' . $method, $auth_providers)) { $provider = $auth_providers['auth.provider.' . $method]; if ($error = $provider->init()) { foreach ($old_auth_config as $config_name => $config_value) { $config->set($config_name, $config_value); } trigger_error($error . adm_back_link($this->u_action), E_USER_WARNING); } $config->set('auth_method', basename($cfg_array['auth_method'])); } else { trigger_error('NO_AUTH_PLUGIN', E_USER_ERROR); } } } if ($submit) { $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_CONFIG_' . strtoupper($mode)); $message = $user->lang('CONFIG_UPDATED'); $message_type = E_USER_NOTICE; if (!$config['email_enable'] && in_array($mode, array('email', 'registration')) && in_array($config['require_activation'], array(USER_ACTIVATION_SELF, USER_ACTIVATION_ADMIN))) { $message .= '<br /><br />' . $user->lang('ACC_ACTIVATION_WARNING'); $message_type = E_USER_WARNING; } trigger_error($message . adm_back_link($this->u_action), $message_type); } $this->tpl_name = 'acp_board'; $this->page_title = $display_vars['title']; $template->assign_vars(array('L_TITLE' => $user->lang[$display_vars['title']], 'L_TITLE_EXPLAIN' => $user->lang[$display_vars['title'] . '_EXPLAIN'], 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error), 'U_ACTION' => $this->u_action)); // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars); if (empty($content)) { continue; } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $content)); unset($display_vars['vars'][$config_key]); } if ($mode == 'auth') { $template->assign_var('S_AUTH', true); foreach ($auth_providers as $provider) { $auth_tpl = $provider->get_acp_template($this->new_config); if ($auth_tpl) { if (array_key_exists('BLOCK_VAR_NAME', $auth_tpl)) { foreach ($auth_tpl['BLOCK_VARS'] as $block_vars) { $template->assign_block_vars($auth_tpl['BLOCK_VAR_NAME'], $block_vars); } } $template->assign_vars($auth_tpl['TEMPLATE_VARS']); $template->assign_block_vars('auth_tpl', array('TEMPLATE_FILE' => $auth_tpl['TEMPLATE_FILE'])); } } } }
/** * Constructor */ function main($id, $mode) { global $config, $db, $user, $auth, $template, $cache; global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix, $phpbb_seo, $_action_types; require_once $phpbb_root_path . 'gym_sitemaps/includes/gym_common.' . $phpEx; // Start the phpbb_seo class if (!is_object($phpbb_seo)) { if (file_exists($phpbb_root_path . 'phpbb_seo/phpbb_seo_class.' . $phpEx)) { require_once $phpbb_root_path . 'phpbb_seo/phpbb_seo_class.' . $phpEx; } else { require_once $phpbb_root_path . 'gym_sitemaps/includes/phpbb_seo_class_light.' . $phpEx; } $phpbb_seo = new phpbb_seo(); } $user->add_lang('gym_sitemaps/acp/gym_common'); // action=(module|cache|modrewrite...)&module=(main|forum| ...) $action = request_var('action', 'main'); $module = request_var('module', 'main'); // maction =(settings|maintenance|save)&action=(module|cache|modrewrite...)&module=(main|forum| ...) $maction = request_var('maction', ''); $mactions = array('settings', 'maintenance', 'install'); $maction = in_array($maction, $mactions) ? $maction : ''; $submit = isset($_POST['submit']) ? true : false; $this->modes = $_action_types; $this->override_type = $_override_types; $this->override = array(); // Filter allowed modes $this->mode = $mode; $this->module = $module; $this->action = $action; $this->maction = $maction; $this->set_phpbb_seo_links(); // Get gym config obtain_gym_config('main', $this->gym_config); $this->new_config = $this->gym_config; // define common validation arrays $this->dyn_select['modrtype'] = array(0 => 'GYM_MODREWRITE_NONE', 1 => 'GYM_MODREWRITE_SIMPLE', 2 => 'GYM_MODREWRITE_MIXED', 3 => 'GYM_MODREWRITE_ADVANCED'); $this->dyn_select['gzip_level'] = array(1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9); $this->dyn_select['sort'] = array('DESC' => 'GYM_DESC', 'ASC' => 'GYM_ASC'); $this->dyn_select['override'] = array(OVERRIDE_GLOBAL => 'GYM_OVERRIDE_GLOBAL', OVERRIDE_OTYPE => 'GYM_OVERRIDE_OTYPE', OVERRIDE_MODULE => 'GYM_OVERRIDE_MODULE'); $this->dyn_select['sumarize_method'] = array('chars' => 'GYM_METHOD_CHARS', 'words' => 'GYM_METHOD_WORDS', 'lines' => 'GYM_METHOD_LINES'); $this->dyn_select['gym_auth'] = array('admin' => 'GYM_AUTH_ADMIN', 'globalmod' => 'GYM_AUTH_GLOBALMOD', 'reg' => 'GYM_AUTH_REG', 'guest' => 'GYM_AUTH_GUEST', 'all' => 'GYM_AUTH_ALL', 'none' => 'GYM_AUTH_NONE'); $this->dyn_select['rss_linking_types'] = array('n' => 'RSS_LINKING_NEWS', 'nd' => 'RSS_LINKING_NEWS_DIGEST', 'r' => 'RSS_LINKING_REGULAR', 'rd' => 'RSS_LINKING_REGULAR_DIGEST'); // Get the module list // Populate the $this->gym_modules[$mode][$module] array $this->gym_get_modules($mode); // Load the relevant modules acp options // Populate the $this->gym_modules_acp[$mode][$module] array $this->gym_module_acp($mode, $module); // Acp options array for this case $display_vars = $error = array(); // salt the form $form_key = 'acp_gym'; add_form_key($form_key); // check form salt if ($submit && !check_form_key($form_key)) { $error[] = $user->lang['FORM_INVALID']; $submit = false; } // Cache management if ($maction === 'maintenance') { $display_vars = $this->gym_maintenance($mode, $module, $action, $submit); $submit = false; } elseif ($maction === 'settings') { // settings management $display_vars = $this->gym_set_default($mode, $module, $action, $submit); $submit = false; } elseif ($maction === 'install') { // module install $display_vars = $this->gym_install($mode, $module, $action, $submit); $submit = false; } else { if (!in_array($mode, $this->modes) || !in_array($module, $this->gym_modules[$mode])) { trigger_error('NO_MODE', E_USER_ERROR); } else { $script_to_check = array(); if (empty($this->gym_modules_acp[$mode][$module][$action]['display_vars'])) { $action = $this->action = 'main'; } // here we'll check if the GYM script urls are consistent if (!$submit) { $this->check_scripts($error, $this->gym_config, $mode); } $display_vars = $this->gym_modules_acp[$mode][$module][$action]['display_vars']; // Check if we do not have a new module needing a new config key $clear_cache = false; foreach ($display_vars['vars'] as $key => $value) { if (!isset($this->gym_config[$key]) && strpos($key, 'legend') === false) { $clear_cache = true; if (isset($this->gym_modules_acp[$mode][$module][$action]['default'][$key])) { $this->new_config[$key] = $this->gym_modules_acp[$mode][$module][$action]['default'][$key]; set_gym_config($key, $this->new_config[$key], $mode, $this->gym_config); } } } if ($clear_cache) { $this->remove_cache('config'); } } } // Load the module's language files foreach ($this->gym_modules_acp[$mode] as $active_modules => $null) { if (!empty($this->gym_modules_acp[$mode][$active_modules]['info']['lang_file'])) { $user->add_lang('gym_sitemaps/acp/' . $this->gym_modules_acp[$mode][$active_modules]['info']['lang_file']); } } $cfg_array = isset($_REQUEST['config']) ? utf8_normalize_nfc(request_var('config', array('' => ''), true)) : $this->new_config; // We validate the complete config if whished validate_config_vars($display_vars['vars'], $cfg_array, $error); // check script urls if necessary if ($submit && isset($cfg_array[$mode . '_url'])) { // will enforce trailing slashes automatically $this->check_scripts($error, $cfg_array, $mode); } // Do not write values if there is an error if (sizeof($error)) { $submit = false; } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $cfg_setup) { if (!isset($cfg_array[$config_name]) && @$cfg_setup['method'] != 'select_multiple_string' || strpos($config_name, 'legend') !== false) { continue; } // Handle multiple select options if (!empty($cfg_setup['method']) && $cfg_setup['method'] == 'select_multiple_string') { if (isset($_POST['multiple_' . $config_name])) { $m_values = utf8_normalize_nfc(request_var('multiple_' . $config_name, array('' => ''))); $validate_int = $cfg_setup['multiple_validate'] == 'int' ? true : false; foreach ($m_values as $k => $v) { if ($validate_int) { $v = (int) $v; } if (empty($v)) { unset($m_values[$k]); } else { $m_values[$k] = $v; } } sort($m_values); $this->new_config[$config_name] = $m_values; $config_value = implode(',', $m_values); if (strlen($config_value) > 255) { $error[] = sprintf($user->lang['SETTING_TOO_LONG'], $user->lang[$cfg_setup['lang']], 255); } $submit = empty($error); } else { if ($submit) { $this->new_config[$config_name] = array(); $config_value = ''; } else { $config_value = $this->new_config[$config_name]; $this->new_config[$config_name] = !empty($config_value) ? explode(',', $config_value) : array(); } } } else { $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; } if ($submit) { set_gym_config($config_name, $config_value, $mode, $this->gym_config); } } if ($submit) { $this->remove_cache('config'); add_log('admin', 'GYM_LOG_CONFIG_' . strtoupper($mode)); trigger_error($user->lang['CONFIG_UPDATED'] . $this->back_to_prev()); } $this->tpl_name = 'acp_gym_sitemaps'; $this->page_title = $display_vars['title']; // add the maitenance links $maintenance_links = ''; $maintenance_links .= '<a href="' . $this->u_action . '&maction=maintenance&action=' . $action . '&module=' . $module . '"><b style="color:red;">' . $user->lang['GYM_MAINTENANCE'] . '</b></a><b> • </b>'; $maintenance_links .= '<a href="' . $this->u_action . '&maction=settings&action=' . $action . '&module=' . $module . '"><b style="color:red;">' . $user->lang['GYM_SETTINGS'] . '</b></a>'; $install_link = $mode !== 'main' ? '<b> • </b><a href="' . $this->u_action . '&maction=install&action=' . $action . '&module=' . $module . '"><b style="color:red;">' . $user->lang['GYM_INSTALL'] . '</b></a>' : ''; if ($action === 'gzip') { // Adjust language variable a bit $user->lang['GYM_GZIP_EXPLAIN'] = sprintf($user->lang['GYM_GZIP_EXPLAIN'], $config['gzip_compress'] ? $user->lang['GYM_GZIP_FORCED'] : $user->lang['GYM_GZIP_CONFIGURABLE']); } $lang_key = 'GYM_' . strtoupper($mode); $l_mode_title = $this->safe_lang($lang_key); $l_mode_title_explain = $this->safe_lang($lang_key . '_EXPLAIN'); $lang_key = $this->gym_modules_acp[$mode][$module]['info']['title_lang']; $l_module_title = $this->safe_lang($lang_key); $l_module_title_explain = $this->safe_lang($lang_key . '_EXPLAIN'); $l_title = $this->safe_lang($display_vars['title']); $l_title_explain = $this->safe_lang($display_vars['title'] . '_EXPLAIN'); $l_title_explain .= $action === 'cache' && $mode !== 'html' ? $this->check_cache_folder($phpbb_root_path . 'gym_sitemaps/cache') : ''; $template->assign_vars(array('L_MODE_TITLE' => $l_mode_title, 'L_MODE_ITLE_EXPLAIN' => $l_mode_title_explain, 'L_MODULE_TITLE' => $l_module_title, 'L_MODULE_ITLE_EXPLAIN' => $l_module_title_explain, 'L_TITLE' => $l_title, 'L_TITLE_EXPLAIN' => $l_title_explain, 'GYM_VERSION' => $this->gym_config['gym_version'], 'INSTALL_LINK' => $install_link, 'MAINTENANCE_LINKS' => $maintenance_links, 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error), 'S_SUBMIT_BUTTON' => !empty($this->gym_modules_acp[$mode][$module][$action]['default']), 'U_ACTION' => $this->u_action . '&maction=' . $maction . '&action=' . $action . '&module=' . $module)); $this->gym_module_menu($mode, $module, $action); $this->gym_menu($mode, $module, $action); // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => $this->safe_lang($vars))); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = $this->safe_lang($vars['lang_explain']); } elseif ($vars['explain']) { $l_explain = $this->safe_lang($vars['lang'] . '_EXPLAIN'); } // Add overriding infos $form = true; if (isset($vars['overriding']) && $vars['overriding']) { $vars['append'] = $this->is_overriden($mode, $module, $action, $config_key, $vars); //$form = $vars['append'] == $this->safe_lang('GYM_COULD_OVERRIDE') ? true : false; } $content = ''; $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => $this->safe_lang($vars['lang']), 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $form ? build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars) : $vars['append'])); unset($display_vars['vars'][$config_key]); } }
function main($id, $mode) { global $db, $user, $template; global $config, $pbwow_config, $phpbb_root_path, $phpbb_admin_path, $phpEx; if (!function_exists('db_theme_data')) { include $phpbb_root_path . 'includes/acp/acp_styles.' . $phpEx; } $user->add_lang('mods/lang_pbwow_acp'); $constantsokay = false; $dbtable = PBWOW_CONFIG_TABLE; $dbokay = false; if ($dbtable != 'PBWOW_CONFIG_TABLE') { $constantsokay = true; if ($this->sql_table_exists($dbtable)) { $pbwow_config = $this->obtain_pbwow_config(); $this->new_config = $pbwow_config; $dbokay = true; } } $topics_table_modded = false; $topics_table = TOPICS_TABLE; $topics_field1 = 'topic_first_poster_rank_img'; $topics_field2 = 'topic_first_poster_rank_title'; if ($this->sql_field_exists($topics_table, $topics_field1) && $this->sql_field_exists($topics_table, $topics_field2)) { $topics_table_modded = true; } $action = request_var('action', ''); $submit = isset($_POST['submit']) ? true : false; /** * Validation types are: * string, int, bool, * script_path (absolute path in url - beginning with / and no trailing slash), * rpath (relative), rwpath (realtive, writeable), path (relative path, but able to escape the root), wpath (writeable) */ switch ($mode) { case 'index': $display_vars = array('title' => 'ACP_PBWOW_INDEX_TITLE', 'vars' => array()); break; case 'config': $display_vars = array('title' => 'ACP_PBWOW_CONFIG_TITLE', 'vars' => array('legend1' => 'ACP_PBWOW_TOPNAV', 'pbwow_topnav_code' => array('lang' => 'PBWOW_TOPNAV_CODE', 'type' => 'textarea:6:6', 'explain' => true), 'legend2' => 'ACP_PBWOW_IE6MESSAGE', 'pbwow_ie6message_enable' => array('lang' => 'PBWOW_IE6MESSAGE_ENABLE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'pbwow_ie6message_code' => array('lang' => 'PBWOW_IE6MESSAGE_CODE', 'type' => 'textarea:6:6', 'explain' => true), 'legend3' => 'ACP_PBWOW_BLIZZ', 'pbwow_blizz_enable' => array('lang' => 'PBWOW_BLIZZ_ENABLE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'pbwow_blizz_ranks' => array('lang' => 'PBWOW_BLIZZ_RANKS', 'validate' => 'string', 'type' => 'custom', 'explain' => true, 'method' => 'select_ranks'), 'legend4' => 'ACP_PBWOW_PROPASS', 'pbwow_propass_enable' => array('lang' => 'PBWOW_PROPASS_ENABLE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'pbwow_propass_ranks' => array('lang' => 'PBWOW_PROPASS_RANKS', 'validate' => 'string', 'type' => 'custom', 'explain' => true, 'method' => 'select_ranks'))); break; case 'ads': $display_vars = array('title' => 'ACP_PBWOW_ADS_TITLE', 'vars' => array('legend1' => 'ACP_PBWOW_ADS_INDEX', 'pbwow_ads_index_enable' => array('lang' => 'PBWOW_ADS_INDEX_ENABLE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'pbwow_ads_index_code' => array('lang' => 'PBWOW_ADS_INDEX_CODE', 'type' => 'textarea:6:6', 'explain' => true), 'legend2' => 'ACP_PBWOW_ADS_TOP', 'pbwow_ads_top_enable' => array('lang' => 'PBWOW_ADS_TOP_ENABLE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'pbwow_ads_top_code' => array('lang' => 'PBWOW_ADS_TOP_CODE', 'type' => 'textarea:6:6', 'explain' => true), 'legend3' => 'ACP_PBWOW_ADS_SIDE', 'pbwow_ads_side_enable' => array('lang' => 'PBWOW_ADS_SIDE_ENABLE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'pbwow_ads_side_code' => array('lang' => 'PBWOW_ADS_SIDE_CODE', 'type' => 'textarea:6:6', 'explain' => true))); break; } if (isset($display_vars['lang'])) { $user->add_lang($display_vars['lang']); } $cfg_array = isset($_REQUEST['config']) ? utf8_normalize_nfc(request_var('config', array('' => ''), true)) : $this->new_config; $error = array(); // We validate the complete config if whished validate_config_vars($display_vars['vars'], $cfg_array, $error); // Do not write values if there is an error if (sizeof($error)) { $submit = false; } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $null) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') || ($mode == 'links' && strpos($config_name, 'portal_link_')) !== false) { continue; } if ($config_name == 'portal_attachments_filetype' || $config_name == 'portal_news_forum' || $config_name == 'portal_global_announcements_forum' || $config_name == 'portal_recent_forum' || $config_name == 'portal_attachments_forum_ids' || $config_name == 'portal_poll_topic_id') { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($submit) { $this->set_pbwow_config($config_name, $config_value); } } if ($submit) { if ($action == 'refresh_topic_ranks' && $topics_table_modded == true) { $this->refresh_topic_ranks(); } if ($action == 'create_topic_ranks' && $topics_table_modded == false) { $this->sql_field_add($topics_table, $topics_field1); $this->sql_field_add($topics_table, $topics_field2); } if ($action == 'create_config_table' && $constantsokay == true && $dbokay == false) { $this->install_pbwow($dbtable); } if ($action == 'refresh_all_themes') { $this->refresh_all_themes(); } // Get data from select boxes and store in DB switch ($mode) { case 'config': $this->store_selected_ranks('pbwow_blizz_ranks'); $this->store_selected_ranks('pbwow_propass_ranks'); break; default: } add_log('admin', 'LOG_PBWOW_CONFIG', $user->lang['ACP_PBWOW_' . strtoupper($mode) . '_INFO']); trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } ################################################## ################################################## ################################################## ################################################## ################################################## $this->tpl_name = 'acp_pbwow'; $this->page_title = $display_vars['title']; $allCPF = $this->getAllCPF(); $title_explain = $user->lang[$display_vars['title'] . '_EXPLAIN']; $template->assign_vars(array('L_TITLE' => $user->lang[$display_vars['title']], 'L_TITLE_EXPLAIN' => $title_explain, 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error), 'S_VERSIONCHECK' => $display_vars['title'] == 'ACP_PBWOW_INDEX_TITLE' ? true : false, 'S_CONSTANTSOKAY' => $constantsokay ? true : false, 'PBWOW_DBTABLE' => $dbtable, 'S_DBOKAY' => $dbokay ? true : false, 'PBWOW_VERSION' => isset($pbwow_config['pbwow_version']) ? $pbwow_config['pbwow_version'] : 'No version value found in database!', 'S_TOPICS_MODDED' => $topics_table_modded ? true : false, 'TOPICS_TABLE' => $topics_table, 'S_CPF_PBGUILD' => in_array('pbguild', $allCPF) ? true : false, 'S_CPF_PBREALM' => in_array('pbrealm', $allCPF) ? true : false, 'S_CPF_PBLEVEL' => in_array('pblevel', $allCPF) ? true : false, 'S_CPF_PBRACE' => in_array('pbrace', $allCPF) ? true : false, 'S_CPF_PBGENDER' => in_array('pbgender', $allCPF) ? true : false, 'S_CPF_PBCLASS' => in_array('pbclass', $allCPF) ? true : false, 'S_CPF_PBPVPRANK' => in_array('pbpvprank', $allCPF) ? true : false, 'S_CPF_PBARMORYCHARLINK' => in_array('pbarmorycharlink', $allCPF) ? true : false, 'S_CPF_PBARMORYGUILDLINK' => in_array('pbarmoryguildlink', $allCPF) ? true : false, 'U_ACTION' => $this->u_action)); // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars))); unset($display_vars['vars'][$config_key]); } }
function main($id, $mode) { global $db, $user, $auth, $template; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx; $user->add_lang('acp/board'); $action = request_var('action', ''); $submit = isset($_POST['submit']) ? true : false; $form_key = 'acp_board'; add_form_key($form_key); /** * Validation types are: * string, int, bool, * script_path (absolute path in url - beginning with / and no trailing slash), * rpath (relative), rwpath (realtive, writable), path (relative path, but able to escape the root), wpath (writable) */ switch ($mode) { case 'settings': $display_vars = array('title' => 'ACP_BOARD_SETTINGS', 'vars' => array('legend1' => 'ACP_BOARD_SETTINGS', 'sitename' => array('lang' => 'SITE_NAME', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => false), 'site_desc' => array('lang' => 'SITE_DESC', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => false), 'board_disable' => array('lang' => 'DISABLE_BOARD', 'validate' => 'bool', 'type' => 'custom', 'method' => 'board_disable', 'explain' => true), 'board_disable_msg' => false, 'default_lang' => array('lang' => 'DEFAULT_LANGUAGE', 'validate' => 'lang', 'type' => 'select', 'function' => 'language_select', 'params' => array('{CONFIG_VALUE}'), 'explain' => false), 'default_dateformat' => array('lang' => 'DEFAULT_DATE_FORMAT', 'validate' => 'string', 'type' => 'custom', 'method' => 'dateformat_select', 'explain' => true), 'board_timezone' => array('lang' => 'SYSTEM_TIMEZONE', 'validate' => 'string', 'type' => 'select', 'function' => 'tz_select', 'params' => array('{CONFIG_VALUE}', 1), 'explain' => false), 'board_dst' => array('lang' => 'SYSTEM_DST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'default_style' => array('lang' => 'DEFAULT_STYLE', 'validate' => 'int', 'type' => 'select', 'function' => 'style_select', 'params' => array('{CONFIG_VALUE}', false), 'explain' => false), 'override_user_style' => array('lang' => 'OVERRIDE_STYLE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend2' => 'WARNINGS', 'warnings_expire_days' => array('lang' => 'WARNINGS_EXPIRE', 'validate' => 'int', 'type' => 'text:3:4', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']), 'legend3' => 'ACP_SUBMIT_CHANGES')); break; case 'features': $display_vars = array('title' => 'ACP_BOARD_FEATURES', 'vars' => array('legend1' => 'ACP_BOARD_FEATURES', 'allow_privmsg' => array('lang' => 'BOARD_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_topic_notify' => array('lang' => 'ALLOW_TOPIC_NOTIFY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_forum_notify' => array('lang' => 'ALLOW_FORUM_NOTIFY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_namechange' => array('lang' => 'ALLOW_NAME_CHANGE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_attachments' => array('lang' => 'ALLOW_ATTACHMENTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_pm_attach' => array('lang' => 'ALLOW_PM_ATTACHMENTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_pm_report' => array('lang' => 'ALLOW_PM_REPORT', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_bbcode' => array('lang' => 'ALLOW_BBCODE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_smilies' => array('lang' => 'ALLOW_SMILIES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig' => array('lang' => 'ALLOW_SIG', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_nocensors' => array('lang' => 'ALLOW_NO_CENSORS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_bookmarks' => array('lang' => 'ALLOW_BOOKMARKS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_birthdays' => array('lang' => 'ALLOW_BIRTHDAYS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'board_trashcan' => array('lang' => 'BOARD_TRASHCAN', 'validate' => 'int', 'type' => 'select', 'explain' => true, 'function' => 'make_forum_select'), 'allow_quick_reply' => array('lang' => 'ALLOW_QUICK_REPLY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend2' => 'ACP_LOAD_SETTINGS', 'load_birthdays' => array('lang' => 'YES_BIRTHDAYS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_moderators' => array('lang' => 'YES_MODERATORS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_jumpbox' => array('lang' => 'YES_JUMPBOX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_memberlist' => array('lang' => 'LOAD_CPF_MEMBERLIST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_viewprofile' => array('lang' => 'LOAD_CPF_VIEWPROFILE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_viewtopic' => array('lang' => 'LOAD_CPF_VIEWTOPIC', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_global_announcements_home' => array('lang' => 'LOAD_GLOBAL_ANNOUNCEMENTS_HOME', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_global_announcements_topic' => array('lang' => 'LOAD_GLOBAL_ANNOUNCEMENTS_TOPIC', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'legend3' => 'ACP_SUBMIT_CHANGES')); break; case 'avatar': $display_vars = array('title' => 'ACP_AVATAR_SETTINGS', 'vars' => array('legend1' => 'ACP_AVATAR_SETTINGS', 'avatar_min_width' => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'avatar_min_height' => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'avatar_max_width' => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'avatar_max_height' => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'allow_avatar' => array('lang' => 'ALLOW_AVATARS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_avatar_local' => array('lang' => 'ALLOW_LOCAL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_avatar_remote' => array('lang' => 'ALLOW_REMOTE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_avatar_upload' => array('lang' => 'ALLOW_UPLOAD', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_avatar_remote_upload' => array('lang' => 'ALLOW_REMOTE_UPLOAD', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'avatar_filesize' => array('lang' => 'MAX_FILESIZE', 'validate' => 'int:0', 'type' => 'text:4:10', 'explain' => true, 'append' => ' ' . $user->lang['BYTES']), 'avatar_min' => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => 'dimension:3:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'avatar_max' => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => 'dimension:3:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'avatar_path' => array('lang' => 'AVATAR_STORAGE_PATH', 'validate' => 'rwpath', 'type' => 'text:20:255', 'explain' => true), 'avatar_gallery_path' => array('lang' => 'AVATAR_GALLERY_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true))); break; case 'message': $display_vars = array('title' => 'ACP_MESSAGE_SETTINGS', 'lang' => 'ucp', 'vars' => array('legend1' => 'GENERAL_SETTINGS', 'allow_privmsg' => array('lang' => 'BOARD_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'pm_max_boxes' => array('lang' => 'BOXES_MAX', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true), 'pm_max_msgs' => array('lang' => 'BOXES_LIMIT', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true), 'full_folder_action' => array('lang' => 'FULL_FOLDER_ACTION', 'validate' => 'int', 'type' => 'select', 'method' => 'full_folder_select', 'explain' => true), 'pm_edit_time' => array('lang' => 'PM_EDIT_TIME', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']), 'pm_max_recipients' => array('lang' => 'PM_MAX_RECIPIENTS', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true), 'legend2' => 'GENERAL_OPTIONS', 'allow_mass_pm' => array('lang' => 'ALLOW_MASS_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'auth_bbcode_pm' => array('lang' => 'ALLOW_BBCODE_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'auth_smilies_pm' => array('lang' => 'ALLOW_SMILIES_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_pm_attach' => array('lang' => 'ALLOW_PM_ATTACHMENTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig_pm' => array('lang' => 'ALLOW_SIG_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'print_pm' => array('lang' => 'ALLOW_PRINT_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'forward_pm' => array('lang' => 'ALLOW_FORWARD_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'auth_img_pm' => array('lang' => 'ALLOW_IMG_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'auth_flash_pm' => array('lang' => 'ALLOW_FLASH_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'enable_pm_icons' => array('lang' => 'ENABLE_PM_ICONS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'legend3' => 'ACP_SUBMIT_CHANGES')); break; case 'post': $display_vars = array('title' => 'ACP_POST_SETTINGS', 'vars' => array('legend1' => 'GENERAL_OPTIONS', 'allow_topic_notify' => array('lang' => 'ALLOW_TOPIC_NOTIFY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_forum_notify' => array('lang' => 'ALLOW_FORUM_NOTIFY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_bbcode' => array('lang' => 'ALLOW_BBCODE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_post_flash' => array('lang' => 'ALLOW_POST_FLASH', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_smilies' => array('lang' => 'ALLOW_SMILIES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_post_links' => array('lang' => 'ALLOW_POST_LINKS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_nocensors' => array('lang' => 'ALLOW_NO_CENSORS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_bookmarks' => array('lang' => 'ALLOW_BOOKMARKS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'enable_post_confirm' => array('lang' => 'VISUAL_CONFIRM_POST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_quick_reply' => array('lang' => 'ALLOW_QUICK_REPLY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend2' => 'POSTING', 'bump_type' => false, 'edit_time' => array('lang' => 'EDIT_TIME', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']), 'delete_time' => array('lang' => 'DELETE_TIME', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']), 'display_last_edited' => array('lang' => 'DISPLAY_LAST_EDITED', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'flood_interval' => array('lang' => 'FLOOD_INTERVAL', 'validate' => 'int:0', 'type' => 'text:3:10', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']), 'bump_interval' => array('lang' => 'BUMP_INTERVAL', 'validate' => 'int:0', 'type' => 'custom', 'method' => 'bump_interval', 'explain' => true), 'topics_per_page' => array('lang' => 'TOPICS_PER_PAGE', 'validate' => 'int:1', 'type' => 'text:3:4', 'explain' => false), 'posts_per_page' => array('lang' => 'POSTS_PER_PAGE', 'validate' => 'int:1', 'type' => 'text:3:4', 'explain' => false), 'smilies_per_page' => array('lang' => 'SMILIES_PER_PAGE', 'validate' => 'int:1', 'type' => 'text:3:4', 'explain' => false), 'hot_threshold' => array('lang' => 'HOT_THRESHOLD', 'validate' => 'int:0', 'type' => 'text:3:4', 'explain' => true), 'max_poll_options' => array('lang' => 'MAX_POLL_OPTIONS', 'validate' => 'int:2:127', 'type' => 'text:4:4', 'explain' => false), 'max_post_chars' => array('lang' => 'CHAR_LIMIT', 'validate' => 'int:0', 'type' => 'text:4:6', 'explain' => true), 'min_post_chars' => array('lang' => 'MIN_CHAR_LIMIT', 'validate' => 'int:0', 'type' => 'text:4:6', 'explain' => true), 'max_post_smilies' => array('lang' => 'SMILIES_LIMIT', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true), 'max_post_urls' => array('lang' => 'MAX_POST_URLS', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true), 'max_post_font_size' => array('lang' => 'MAX_POST_FONT_SIZE', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true, 'append' => ' %'), 'max_quote_depth' => array('lang' => 'QUOTE_DEPTH_LIMIT', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true), 'max_post_img_width' => array('lang' => 'MAX_POST_IMG_WIDTH', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'max_post_img_height' => array('lang' => 'MAX_POST_IMG_HEIGHT', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'legend3' => 'ACP_SUBMIT_CHANGES')); break; case 'signature': $display_vars = array('title' => 'ACP_SIGNATURE_SETTINGS', 'vars' => array('legend1' => 'GENERAL_OPTIONS', 'allow_sig' => array('lang' => 'ALLOW_SIG', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig_bbcode' => array('lang' => 'ALLOW_SIG_BBCODE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig_img' => array('lang' => 'ALLOW_SIG_IMG', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig_flash' => array('lang' => 'ALLOW_SIG_FLASH', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig_smilies' => array('lang' => 'ALLOW_SIG_SMILIES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig_links' => array('lang' => 'ALLOW_SIG_LINKS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend2' => 'GENERAL_SETTINGS', 'max_sig_chars' => array('lang' => 'MAX_SIG_LENGTH', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true), 'max_sig_urls' => array('lang' => 'MAX_SIG_URLS', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true), 'max_sig_font_size' => array('lang' => 'MAX_SIG_FONT_SIZE', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true, 'append' => ' %'), 'max_sig_smilies' => array('lang' => 'MAX_SIG_SMILIES', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true), 'max_sig_img_width' => array('lang' => 'MAX_SIG_IMG_WIDTH', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'max_sig_img_height' => array('lang' => 'MAX_SIG_IMG_HEIGHT', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'legend3' => 'ACP_SUBMIT_CHANGES')); break; case 'registration': $display_vars = array('title' => 'ACP_REGISTER_SETTINGS', 'vars' => array('legend1' => 'GENERAL_SETTINGS', 'max_name_chars' => array('lang' => 'USERNAME_LENGTH', 'validate' => 'int:8:180', 'type' => false, 'method' => false, 'explain' => false), 'max_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:8:255', 'type' => false, 'method' => false, 'explain' => false), 'require_activation' => array('lang' => 'ACC_ACTIVATION', 'validate' => 'int', 'type' => 'custom', 'method' => 'select_acc_activation', 'explain' => true), 'new_member_post_limit' => array('lang' => 'NEW_MEMBER_POST_LIMIT', 'validate' => 'int:0:255', 'type' => 'text:4:4', 'explain' => true, 'append' => ' ' . $user->lang['POSTS']), 'new_member_group_default' => array('lang' => 'NEW_MEMBER_GROUP_DEFAULT', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'min_name_chars' => array('lang' => 'USERNAME_LENGTH', 'validate' => 'int:1', 'type' => 'custom:5:180', 'method' => 'username_length', 'explain' => true), 'min_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:1', 'type' => 'custom', 'method' => 'password_length', 'explain' => true), 'allow_name_chars' => array('lang' => 'USERNAME_CHARS', 'validate' => 'string', 'type' => 'select', 'method' => 'select_username_chars', 'explain' => true), 'pass_complex' => array('lang' => 'PASSWORD_TYPE', 'validate' => 'string', 'type' => 'select', 'method' => 'select_password_chars', 'explain' => true), 'chg_passforce' => array('lang' => 'FORCE_PASS_CHANGE', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']), 'legend2' => 'GENERAL_OPTIONS', 'allow_namechange' => array('lang' => 'ALLOW_NAME_CHANGE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_emailreuse' => array('lang' => 'ALLOW_EMAIL_REUSE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'enable_confirm' => array('lang' => 'VISUAL_CONFIRM_REG', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'max_login_attempts' => array('lang' => 'MAX_LOGIN_ATTEMPTS', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true), 'max_reg_attempts' => array('lang' => 'REG_LIMIT', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true), 'legend3' => 'COPPA', 'coppa_enable' => array('lang' => 'ENABLE_COPPA', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'coppa_mail' => array('lang' => 'COPPA_MAIL', 'validate' => 'string', 'type' => 'textarea:5:40', 'explain' => true), 'coppa_fax' => array('lang' => 'COPPA_FAX', 'validate' => 'string', 'type' => 'text:25:100', 'explain' => false), 'legend4' => 'ACP_SUBMIT_CHANGES')); break; case 'feed': $display_vars = array('title' => 'ACP_FEED_MANAGEMENT', 'vars' => array('legend1' => 'ACP_FEED_GENERAL', 'feed_enable' => array('lang' => 'ACP_FEED_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_item_statistics' => array('lang' => 'ACP_FEED_ITEM_STATISTICS', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_limit' => array('lang' => 'ACP_FEED_LIMIT', 'validate' => 'int:5', 'type' => 'text:3:4', 'explain' => true), 'feed_overall_forums' => array('lang' => 'ACP_FEED_OVERALL_FORUMS', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_overall_forums_limit' => array('lang' => 'ACP_FEED_OVERALL_FORUMS_LIMIT', 'validate' => 'int:5', 'type' => 'text:3:4', 'explain' => false), 'feed_overall_topics' => array('lang' => 'ACP_FEED_OVERALL_TOPIC', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_overall_topics_limit' => array('lang' => 'ACP_FEED_OVERALL_TOPIC_LIMIT', 'validate' => 'int:5', 'type' => 'text:3:4', 'explain' => false), 'feed_forum' => array('lang' => 'ACP_FEED_FORUM', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_topic' => array('lang' => 'ACP_FEED_TOPIC', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_news_id' => array('lang' => 'ACP_FEED_NEWS', 'validate' => 'string', 'type' => 'custom', 'method' => 'select_news_forums', 'explain' => true), 'feed_exclude_id' => array('lang' => 'ACP_FEED_EXCLUDE_ID', 'validate' => 'string', 'type' => 'custom', 'method' => 'select_exclude_forums', 'explain' => true))); break; case 'cookie': $display_vars = array('title' => 'ACP_COOKIE_SETTINGS', 'vars' => array('legend1' => 'ACP_COOKIE_SETTINGS', 'cookie_domain' => array('lang' => 'COOKIE_DOMAIN', 'validate' => 'string', 'type' => 'text::255', 'explain' => false), 'cookie_name' => array('lang' => 'COOKIE_NAME', 'validate' => 'string', 'type' => 'text::16', 'explain' => false), 'cookie_path' => array('lang' => 'COOKIE_PATH', 'validate' => 'string', 'type' => 'text::255', 'explain' => false), 'cookie_secure' => array('lang' => 'COOKIE_SECURE', 'validate' => 'bool', 'type' => 'radio:disabled_enabled', 'explain' => true))); break; case 'load': $display_vars = array('title' => 'ACP_LOAD_SETTINGS', 'vars' => array('legend1' => 'GENERAL_SETTINGS', 'limit_load' => array('lang' => 'LIMIT_LOAD', 'validate' => 'string', 'type' => 'text:4:4', 'explain' => true), 'session_length' => array('lang' => 'SESSION_LENGTH', 'validate' => 'int:60', 'type' => 'text:5:10', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']), 'active_sessions' => array('lang' => 'LIMIT_SESSIONS', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true), 'load_online_time' => array('lang' => 'ONLINE_LENGTH', 'validate' => 'int:0', 'type' => 'text:4:3', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']), 'legend2' => 'GENERAL_OPTIONS', 'load_db_track' => array('lang' => 'YES_POST_MARKING', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_db_lastread' => array('lang' => 'YES_READ_MARKING', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_anon_lastread' => array('lang' => 'YES_ANON_READ_MARKING', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_online' => array('lang' => 'YES_ONLINE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_online_guests' => array('lang' => 'YES_ONLINE_GUESTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_onlinetrack' => array('lang' => 'YES_ONLINE_TRACK', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_birthdays' => array('lang' => 'YES_BIRTHDAYS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_moderators' => array('lang' => 'YES_MODERATORS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_jumpbox' => array('lang' => 'YES_JUMPBOX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_user_activity' => array('lang' => 'LOAD_USER_ACTIVITY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_tplcompile' => array('lang' => 'RECOMPILE_STYLES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend3' => 'CUSTOM_PROFILE_FIELDS', 'load_cpf_memberlist' => array('lang' => 'LOAD_CPF_MEMBERLIST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_viewprofile' => array('lang' => 'LOAD_CPF_VIEWPROFILE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_viewtopic' => array('lang' => 'LOAD_CPF_VIEWTOPIC', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'legend4' => 'ACP_SUBMIT_CHANGES')); break; case 'auth': $display_vars = array('title' => 'ACP_AUTH_SETTINGS', 'vars' => array('legend1' => 'ACP_AUTH_SETTINGS', 'auth_method' => array('lang' => 'AUTH_METHOD', 'validate' => 'string', 'type' => 'select', 'method' => 'select_auth_method', 'explain' => false))); break; case 'server': $display_vars = array('title' => 'ACP_SERVER_SETTINGS', 'vars' => array('legend1' => 'ACP_SERVER_SETTINGS', 'gzip_compress' => array('lang' => 'ENABLE_GZIP', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend2' => 'PATH_SETTINGS', 'smilies_path' => array('lang' => 'SMILIES_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true), 'icons_path' => array('lang' => 'ICONS_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true), 'upload_icons_path' => array('lang' => 'UPLOAD_ICONS_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true), 'ranks_path' => array('lang' => 'RANKS_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true), 'legend3' => 'SERVER_URL_SETTINGS', 'force_server_vars' => array('lang' => 'FORCE_SERVER_VARS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'server_protocol' => array('lang' => 'SERVER_PROTOCOL', 'validate' => 'string', 'type' => 'text:10:10', 'explain' => true), 'server_name' => array('lang' => 'SERVER_NAME', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => true), 'server_port' => array('lang' => 'SERVER_PORT', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true), 'script_path' => array('lang' => 'SCRIPT_PATH', 'validate' => 'script_path', 'type' => 'text::255', 'explain' => true), 'legend4' => 'ACP_SUBMIT_CHANGES')); break; case 'security': $display_vars = array('title' => 'ACP_SECURITY_SETTINGS', 'vars' => array('legend1' => 'ACP_SECURITY_SETTINGS', 'allow_autologin' => array('lang' => 'ALLOW_AUTOLOGIN', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'max_autologin_time' => array('lang' => 'AUTOLOGIN_LENGTH', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']), 'ip_check' => array('lang' => 'IP_VALID', 'validate' => 'int', 'type' => 'custom', 'method' => 'select_ip_check', 'explain' => true), 'browser_check' => array('lang' => 'BROWSER_VALID', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'forwarded_for_check' => array('lang' => 'FORWARDED_FOR_VALID', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'referer_validation' => array('lang' => 'REFERER_VALID', 'validate' => 'int:0:3', 'type' => 'custom', 'method' => 'select_ref_check', 'explain' => true), 'check_dnsbl' => array('lang' => 'CHECK_DNSBL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'email_check_mx' => array('lang' => 'EMAIL_CHECK_MX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'pass_complex' => array('lang' => 'PASSWORD_TYPE', 'validate' => 'string', 'type' => 'select', 'method' => 'select_password_chars', 'explain' => true), 'chg_passforce' => array('lang' => 'FORCE_PASS_CHANGE', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']), 'max_login_attempts' => array('lang' => 'MAX_LOGIN_ATTEMPTS', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true), 'tpl_allow_php' => array('lang' => 'TPL_ALLOW_PHP', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'form_token_lifetime' => array('lang' => 'FORM_TIME_MAX', 'validate' => 'int:-1', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']), 'form_token_sid_guests' => array('lang' => 'FORM_SID_GUESTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true))); break; case 'email': $display_vars = array('title' => 'ACP_EMAIL_SETTINGS', 'vars' => array('legend1' => 'GENERAL_SETTINGS', 'email_enable' => array('lang' => 'ENABLE_EMAIL', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'board_email_form' => array('lang' => 'BOARD_EMAIL_FORM', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'email_function_name' => array('lang' => 'EMAIL_FUNCTION_NAME', 'validate' => 'string', 'type' => 'text:20:50', 'explain' => true), 'email_package_size' => array('lang' => 'EMAIL_PACKAGE_SIZE', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true), 'board_contact' => array('lang' => 'CONTACT_EMAIL', 'validate' => 'string', 'type' => 'text:25:100', 'explain' => true), 'board_email' => array('lang' => 'ADMIN_EMAIL', 'validate' => 'string', 'type' => 'text:25:100', 'explain' => true), 'board_email_sig' => array('lang' => 'EMAIL_SIG', 'validate' => 'string', 'type' => 'textarea:5:30', 'explain' => true), 'board_hide_emails' => array('lang' => 'BOARD_HIDE_EMAILS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend2' => 'SMTP_SETTINGS', 'smtp_delivery' => array('lang' => 'USE_SMTP', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'smtp_host' => array('lang' => 'SMTP_SERVER', 'validate' => 'string', 'type' => 'text:25:50', 'explain' => false), 'smtp_port' => array('lang' => 'SMTP_PORT', 'validate' => 'int:0', 'type' => 'text:4:5', 'explain' => true), 'smtp_auth_method' => array('lang' => 'SMTP_AUTH_METHOD', 'validate' => 'string', 'type' => 'select', 'method' => 'mail_auth_select', 'explain' => true), 'smtp_username' => array('lang' => 'SMTP_USERNAME', 'validate' => 'string', 'type' => 'text:25:255', 'explain' => true), 'smtp_password' => array('lang' => 'SMTP_PASSWORD', 'validate' => 'string', 'type' => 'password:25:255', 'explain' => true), 'legend3' => 'ACP_SUBMIT_CHANGES')); break; default: trigger_error('NO_MODE', E_USER_ERROR); break; } if (isset($display_vars['lang'])) { $user->add_lang($display_vars['lang']); } $this->new_config = $config; $cfg_array = isset($_REQUEST['config']) ? utf8_normalize_nfc(request_var('config', array('' => ''), true)) : $this->new_config; $error = array(); // We validate the complete config if whished validate_config_vars($display_vars['vars'], $cfg_array, $error); if ($submit && !check_form_key($form_key)) { $error[] = $user->lang['FORM_INVALID']; } // Do not write values if there is an error if (sizeof($error)) { $submit = false; } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $null) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } if ($config_name == 'auth_method' || $config_name == 'feed_news_id' || $config_name == 'feed_exclude_id') { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($config_name == 'email_function_name') { $this->new_config['email_function_name'] = trim(str_replace(array('(', ')'), array('', ''), $this->new_config['email_function_name'])); $this->new_config['email_function_name'] = empty($this->new_config['email_function_name']) || !function_exists($this->new_config['email_function_name']) ? 'mail' : $this->new_config['email_function_name']; $config_value = $this->new_config['email_function_name']; } if ($submit) { set_config($config_name, $config_value); } } // Store news and exclude ids if ($mode == 'feed' && $submit) { $this->store_feed_forums(FORUM_OPTION_FEED_NEWS, 'feed_news_id'); $this->store_feed_forums(FORUM_OPTION_FEED_EXCLUDE, 'feed_exclude_id'); } if ($mode == 'auth') { // Retrieve a list of auth plugins and check their config values $auth_plugins = array(); $dp = @opendir($phpbb_root_path . 'includes/auth'); if ($dp) { while (($file = readdir($dp)) !== false) { if (preg_match('#^auth_(.*?)\\.' . $phpEx . '$#', $file)) { $auth_plugins[] = basename(preg_replace('#^auth_(.*?)\\.' . $phpEx . '$#', '\\1', $file)); } } closedir($dp); sort($auth_plugins); } $updated_auth_settings = false; $old_auth_config = array(); foreach ($auth_plugins as $method) { if ($method && file_exists($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx)) { include_once $phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx; $method = 'acp_' . $method; if (function_exists($method)) { if ($fields = $method($this->new_config)) { // Check if we need to create config fields for this plugin and save config when submit was pressed foreach ($fields['config'] as $field) { if (!isset($config[$field])) { set_config($field, ''); } if (!isset($cfg_array[$field]) || strpos($field, 'legend') !== false) { continue; } $old_auth_config[$field] = $this->new_config[$field]; $config_value = $cfg_array[$field]; $this->new_config[$field] = $config_value; if ($submit) { $updated_auth_settings = true; set_config($field, $config_value); } } } unset($fields); } } } if ($submit && ($cfg_array['auth_method'] != $this->new_config['auth_method'] || $updated_auth_settings)) { $method = basename($cfg_array['auth_method']); if ($method && in_array($method, $auth_plugins)) { include_once $phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx; $method = 'init_' . $method; if (function_exists($method)) { if ($error = $method()) { foreach ($old_auth_config as $config_name => $config_value) { set_config($config_name, $config_value); } trigger_error($error . adm_back_link($this->u_action), E_USER_WARNING); } } set_config('auth_method', basename($cfg_array['auth_method'])); } else { trigger_error('NO_AUTH_PLUGIN', E_USER_ERROR); } } } if ($submit) { add_log('admin', 'LOG_CONFIG_' . strtoupper($mode)); trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } $this->tpl_name = 'acp_board'; $this->page_title = $display_vars['title']; $template->assign_vars(array('L_TITLE' => $user->lang[$display_vars['title']], 'L_TITLE_EXPLAIN' => $user->lang[$display_vars['title'] . '_EXPLAIN'], 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error), 'U_ACTION' => $this->u_action)); // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars); if (empty($content)) { continue; } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $content)); unset($display_vars['vars'][$config_key]); } if ($mode == 'auth') { $template->assign_var('S_AUTH', true); foreach ($auth_plugins as $method) { if ($method && file_exists($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx)) { $method = 'acp_' . $method; if (function_exists($method)) { $fields = $method($this->new_config); if ($fields['tpl']) { $template->assign_block_vars('auth_tpl', array('TPL' => $fields['tpl'])); } unset($fields); } } } } }
function main($id, $mode) { global $db, $user, $auth, $template; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx; global $cache; $user->add_lang('acp/board'); $action = request_var('action', ''); $submit = isset($_POST['submit']) || isset($_POST['allow_quick_reply_enable']) ? true : false; $form_key = 'acp_board'; add_form_key($form_key); /** * Validation types are: * string, int, bool, * script_path (absolute path in url - beginning with / and no trailing slash), * rpath (relative), rwpath (realtive, writable), path (relative path, but able to escape the root), wpath (writable) */ switch ($mode) { case 'settings': $display_vars = array('title' => 'ACP_BOARD_SETTINGS', 'vars' => array('legend1' => 'ACP_BOARD_SETTINGS', 'sitename' => array('lang' => 'SITE_NAME', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => false), 'site_desc' => array('lang' => 'SITE_DESC', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => false), 'board_disable' => array('lang' => 'DISABLE_BOARD', 'validate' => 'bool', 'type' => 'custom', 'method' => 'board_disable', 'explain' => true), 'board_disable_msg' => false, 'default_lang' => array('lang' => 'DEFAULT_LANGUAGE', 'validate' => 'lang', 'type' => 'select', 'function' => 'language_select', 'params' => array('{CONFIG_VALUE}'), 'explain' => false), 'default_dateformat' => array('lang' => 'DEFAULT_DATE_FORMAT', 'validate' => 'string', 'type' => 'custom', 'method' => 'dateformat_select', 'explain' => true), 'board_timezone' => array('lang' => 'SYSTEM_TIMEZONE', 'validate' => 'string', 'type' => 'select', 'function' => 'tz_select', 'params' => array('{CONFIG_VALUE}', 1), 'explain' => true), 'board_dst' => array('lang' => 'SYSTEM_DST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'default_style' => array('lang' => 'DEFAULT_STYLE', 'validate' => 'int', 'type' => 'select', 'function' => 'style_select', 'params' => array('{CONFIG_VALUE}', false), 'explain' => false), 'override_user_style' => array('lang' => 'OVERRIDE_STYLE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend2' => 'WARNINGS', 'warnings_expire_days' => array('lang' => 'WARNINGS_EXPIRE', 'validate' => 'int', 'type' => 'text:3:4', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']), 'legend3' => 'ACP_SUBMIT_CHANGES')); break; case 'features': $display_vars = array('title' => 'ACP_BOARD_FEATURES', 'vars' => array('legend1' => 'ACP_BOARD_FEATURES', 'allow_privmsg' => array('lang' => 'BOARD_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_topic_notify' => array('lang' => 'ALLOW_TOPIC_NOTIFY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_forum_notify' => array('lang' => 'ALLOW_FORUM_NOTIFY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_namechange' => array('lang' => 'ALLOW_NAME_CHANGE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_attachments' => array('lang' => 'ALLOW_ATTACHMENTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_pm_attach' => array('lang' => 'ALLOW_PM_ATTACHMENTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_pm_report' => array('lang' => 'ALLOW_PM_REPORT', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_bbcode' => array('lang' => 'ALLOW_BBCODE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_smilies' => array('lang' => 'ALLOW_SMILIES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig' => array('lang' => 'ALLOW_SIG', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_nocensors' => array('lang' => 'ALLOW_NO_CENSORS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_bookmarks' => array('lang' => 'ALLOW_BOOKMARKS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_birthdays' => array('lang' => 'ALLOW_BIRTHDAYS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_quick_reply' => array('lang' => 'ALLOW_QUICK_REPLY', 'validate' => 'bool', 'type' => 'custom', 'method' => 'quick_reply', 'explain' => true), 'legend2' => 'ACP_LOAD_SETTINGS', 'load_birthdays' => array('lang' => 'YES_BIRTHDAYS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_moderators' => array('lang' => 'YES_MODERATORS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_jumpbox' => array('lang' => 'YES_JUMPBOX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_memberlist' => array('lang' => 'LOAD_CPF_MEMBERLIST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_viewprofile' => array('lang' => 'LOAD_CPF_VIEWPROFILE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_viewtopic' => array('lang' => 'LOAD_CPF_VIEWTOPIC', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'legend3' => 'ACP_SUBMIT_CHANGES')); break; case 'avatar': $display_vars = array('title' => 'ACP_AVATAR_SETTINGS', 'vars' => array('legend1' => 'ACP_AVATAR_SETTINGS', 'avatar_min_width' => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'avatar_min_height' => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'avatar_max_width' => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'avatar_max_height' => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false), 'allow_avatar' => array('lang' => 'ALLOW_AVATARS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_avatar_local' => array('lang' => 'ALLOW_LOCAL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_avatar_remote' => array('lang' => 'ALLOW_REMOTE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_avatar_upload' => array('lang' => 'ALLOW_UPLOAD', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_avatar_remote_upload' => array('lang' => 'ALLOW_REMOTE_UPLOAD', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'avatar_filesize' => array('lang' => 'MAX_FILESIZE', 'validate' => 'int:0', 'type' => 'text:4:10', 'explain' => true, 'append' => ' ' . $user->lang['BYTES']), 'avatar_min' => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => 'dimension:3:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'avatar_max' => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => 'dimension:3:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'avatar_path' => array('lang' => 'AVATAR_STORAGE_PATH', 'validate' => 'rwpath', 'type' => 'text:20:255', 'explain' => true), 'avatar_gallery_path' => array('lang' => 'AVATAR_GALLERY_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true))); break; case 'message': $display_vars = array('title' => 'ACP_MESSAGE_SETTINGS', 'lang' => 'ucp', 'vars' => array('legend1' => 'GENERAL_SETTINGS', 'allow_privmsg' => array('lang' => 'BOARD_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'pm_max_boxes' => array('lang' => 'BOXES_MAX', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true), 'pm_max_msgs' => array('lang' => 'BOXES_LIMIT', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true), 'full_folder_action' => array('lang' => 'FULL_FOLDER_ACTION', 'validate' => 'int', 'type' => 'select', 'method' => 'full_folder_select', 'explain' => true), 'pm_edit_time' => array('lang' => 'PM_EDIT_TIME', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']), 'pm_max_recipients' => array('lang' => 'PM_MAX_RECIPIENTS', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true), 'legend2' => 'GENERAL_OPTIONS', 'allow_mass_pm' => array('lang' => 'ALLOW_MASS_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'auth_bbcode_pm' => array('lang' => 'ALLOW_BBCODE_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'auth_smilies_pm' => array('lang' => 'ALLOW_SMILIES_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_pm_attach' => array('lang' => 'ALLOW_PM_ATTACHMENTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig_pm' => array('lang' => 'ALLOW_SIG_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'print_pm' => array('lang' => 'ALLOW_PRINT_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'forward_pm' => array('lang' => 'ALLOW_FORWARD_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'auth_img_pm' => array('lang' => 'ALLOW_IMG_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'auth_flash_pm' => array('lang' => 'ALLOW_FLASH_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'enable_pm_icons' => array('lang' => 'ENABLE_PM_ICONS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'legend3' => 'ACP_SUBMIT_CHANGES')); break; case 'post': $display_vars = array('title' => 'ACP_POST_SETTINGS', 'vars' => array('legend1' => 'GENERAL_OPTIONS', 'allow_topic_notify' => array('lang' => 'ALLOW_TOPIC_NOTIFY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_forum_notify' => array('lang' => 'ALLOW_FORUM_NOTIFY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_bbcode' => array('lang' => 'ALLOW_BBCODE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_post_flash' => array('lang' => 'ALLOW_POST_FLASH', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_smilies' => array('lang' => 'ALLOW_SMILIES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_post_links' => array('lang' => 'ALLOW_POST_LINKS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_nocensors' => array('lang' => 'ALLOW_NO_CENSORS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_bookmarks' => array('lang' => 'ALLOW_BOOKMARKS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'enable_post_confirm' => array('lang' => 'VISUAL_CONFIRM_POST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'allow_quick_reply' => array('lang' => 'ALLOW_QUICK_REPLY', 'validate' => 'bool', 'type' => 'custom', 'method' => 'quick_reply', 'explain' => true), 'legend2' => 'POSTING', 'bump_type' => false, 'edit_time' => array('lang' => 'EDIT_TIME', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']), 'delete_time' => array('lang' => 'DELETE_TIME', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']), 'display_last_edited' => array('lang' => 'DISPLAY_LAST_EDITED', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'flood_interval' => array('lang' => 'FLOOD_INTERVAL', 'validate' => 'int:0', 'type' => 'text:3:10', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']), 'bump_interval' => array('lang' => 'BUMP_INTERVAL', 'validate' => 'int:0', 'type' => 'custom', 'method' => 'bump_interval', 'explain' => true), 'topics_per_page' => array('lang' => 'TOPICS_PER_PAGE', 'validate' => 'int:1', 'type' => 'text:3:4', 'explain' => false), 'posts_per_page' => array('lang' => 'POSTS_PER_PAGE', 'validate' => 'int:1', 'type' => 'text:3:4', 'explain' => false), 'smilies_per_page' => array('lang' => 'SMILIES_PER_PAGE', 'validate' => 'int:1', 'type' => 'text:3:4', 'explain' => false), 'hot_threshold' => array('lang' => 'HOT_THRESHOLD', 'validate' => 'int:0', 'type' => 'text:3:4', 'explain' => true), 'max_poll_options' => array('lang' => 'MAX_POLL_OPTIONS', 'validate' => 'int:2:127', 'type' => 'text:4:4', 'explain' => false), 'max_post_chars' => array('lang' => 'CHAR_LIMIT', 'validate' => 'int:0', 'type' => 'text:4:6', 'explain' => true), 'min_post_chars' => array('lang' => 'MIN_CHAR_LIMIT', 'validate' => 'int:1', 'type' => 'text:4:6', 'explain' => true), 'max_post_smilies' => array('lang' => 'SMILIES_LIMIT', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true), 'max_post_urls' => array('lang' => 'MAX_POST_URLS', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true), 'max_post_font_size' => array('lang' => 'MAX_POST_FONT_SIZE', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true, 'append' => ' %'), 'max_quote_depth' => array('lang' => 'QUOTE_DEPTH_LIMIT', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true), 'max_post_img_width' => array('lang' => 'MAX_POST_IMG_WIDTH', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'max_post_img_height' => array('lang' => 'MAX_POST_IMG_HEIGHT', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'legend3' => 'ACP_SUBMIT_CHANGES')); //-- MOD : AOS Who Visited a Topic - Start -----------------------------------------------// include $phpbb_root_path . 'includes/who_visited_a_topic.' . $phpEx; aos_display_acp_options($display_vars); //-- MOD : AOS Who Visited a Topic - End -------------------------------------------------// break; case 'signature': $display_vars = array('title' => 'ACP_SIGNATURE_SETTINGS', 'vars' => array('legend1' => 'GENERAL_OPTIONS', 'allow_sig' => array('lang' => 'ALLOW_SIG', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig_bbcode' => array('lang' => 'ALLOW_SIG_BBCODE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig_img' => array('lang' => 'ALLOW_SIG_IMG', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig_flash' => array('lang' => 'ALLOW_SIG_FLASH', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig_smilies' => array('lang' => 'ALLOW_SIG_SMILIES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_sig_links' => array('lang' => 'ALLOW_SIG_LINKS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend2' => 'GENERAL_SETTINGS', 'max_sig_chars' => array('lang' => 'MAX_SIG_LENGTH', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true), 'max_sig_urls' => array('lang' => 'MAX_SIG_URLS', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true), 'max_sig_font_size' => array('lang' => 'MAX_SIG_FONT_SIZE', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true, 'append' => ' %'), 'max_sig_smilies' => array('lang' => 'MAX_SIG_SMILIES', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true), 'max_sig_img_width' => array('lang' => 'MAX_SIG_IMG_WIDTH', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'max_sig_img_height' => array('lang' => 'MAX_SIG_IMG_HEIGHT', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'legend3' => 'EDIT_VARIABLE_SETTINGS', 'board_timezone' => array('lang' => 'SYSTEM_TIMEZONE', 'validate' => 'string', 'type' => 'select', 'function' => 'tz_select1', 'params' => array('{CONFIG_VALUE}', 1), 'explain' => true), 'current_hit' => array('lang' => 'MAX_SIG_VARIABLE_CURRENT_HIT', 'validate' => 'string', 'type' => 'custom', 'method' => 'current_hit', 'explain' => true), 'maximum_hit' => array('lang' => 'MAX_SIG_VARIABLE_MAXIMUM_HIT', 'validate' => 'string', 'type' => 'custom', 'method' => 'maximum_hit', 'explain' => true), 'change_good_condition' => array('lang' => 'MAX_SIG_VARIABLE_GOOD_CONDITION', 'validate' => 'string', 'type' => 'custom', 'method' => 'change_good_condition', 'explain' => true), 'change_bad_condition' => array('lang' => 'MAX_SIG_VARIABLE_BAD_CONDITION', 'validate' => 'string', 'type' => 'custom', 'method' => 'change_bad_condition', 'explain' => true), 'change_gear' => array('lang' => 'MAX_SIG_VARIABLE_GEAR', 'validate' => 'string', 'type' => 'custom', 'method' => 'change_gear', 'explain' => true), 'change_level' => array('lang' => 'MAX_SIG_VARIABLE_LAVEL', 'validate' => 'string', 'type' => 'custom', 'method' => 'change_level', 'explain' => true), 'change_min_level' => array('lang' => 'MAX_SIG_VARIABLE_LAVEL_MIN', 'validate' => 'string', 'type' => 'custom', 'method' => 'change_min_level', 'explain' => true), 'change_max_level' => array('lang' => 'MAX_SIG_VARIABLE_LAVEL_MAX', 'validate' => 'string', 'type' => 'custom', 'method' => 'change_max_level', 'explain' => true), 'change_min_ability' => array('lang' => 'MAX_SIG_VARIABLE_MIN_ABILITY', 'validate' => 'string', 'type' => 'custom', 'method' => 'change_min_ability', 'explain' => true), 'change_max_ability' => array('lang' => 'MAX_SIG_VARIABLE_MAX_ABILITY', 'validate' => 'string', 'type' => 'custom', 'method' => 'change_max_ability', 'explain' => true), 'change_gear' => array('lang' => 'MAX_SIG_VARIABLE_GEAR', 'validate' => 'string', 'type' => 'custom', 'method' => 'change_gear', 'explain' => true), 'change_spell' => array('lang' => 'MAX_SIG_VARIABLE_SPELL', 'validate' => 'string', 'type' => 'custom', 'method' => 'change_spell', 'explain' => true), 'legend4' => 'NEW_VARIABLE_SETTINGS', 'new_current_hit' => array('lang' => 'MAX_SIG_NEW_VARIABLE_CURRENT_HIT', 'validate' => '', 'type' => 'text:5:4', 'explain' => true), 'new_maximum_hit' => array('lang' => 'MAX_SIG_NEW_VARIABLE_MAXIMUM_HIT', 'validate' => '', 'type' => 'text:5:4', 'explain' => true), 'new_good_condition' => array('lang' => 'MAX_SIG_NEW_VARIABLE_GOOD_CONDITION', 'validate' => '', 'type' => 'text:5:15', 'explain' => true), 'new_bad_condition' => array('lang' => 'MAX_SIG_NEW_VARIABLE_BAD_CONDITION', 'validate' => '', 'type' => 'text:5:15', 'explain' => true), 'new_level' => array('lang' => 'MAX_SIG_NEW_VARIABLE_NEW_LEVEL', 'validate' => '', 'type' => 'text:5:4', 'explain' => true), 'new_minimum_level' => array('lang' => 'MAX_SIG_NEW_VARIABLE_NEW_LEVEL_MIN', 'validate' => '', 'type' => 'text:5:4', 'explain' => true), 'new_maximum_level' => array('lang' => 'MAX_SIG_NEW_VARIABLE_NEW_LEVEL_MAX', 'validate' => '', 'type' => 'text:5:15', 'explain' => true), 'new_minimum_ability' => array('lang' => 'MAX_SIG_NEW_VARIABLE_MINIMUM_ABILITY', 'validate' => '', 'type' => 'text:5:15', 'explain' => true), 'new_maximum_ability' => array('lang' => 'MAX_SIG_NEW_VARIABLE_MAXIMUM_ABILITY', 'validate' => '', 'type' => 'text:5:15', 'explain' => true), 'new_gear' => array('lang' => 'MAX_SIG_NEW_VARIABLE_GEAR', 'validate' => '', 'type' => 'text:5:15', 'explain' => true), 'new_spell' => array('lang' => 'MAX_ADD_NEW_SPELL', 'validate' => '', 'type' => 'text:5:15', 'explain' => true), 'legend6' => 'ACP_SUBMIT_CHANGES')); break; case 'registration': $display_vars = array('title' => 'ACP_REGISTER_SETTINGS', 'vars' => array('legend1' => 'GENERAL_SETTINGS', 'max_name_chars' => array('lang' => 'USERNAME_LENGTH', 'validate' => 'int:8:180', 'type' => false, 'method' => false, 'explain' => false), 'max_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:8:255', 'type' => false, 'method' => false, 'explain' => false), 'require_activation' => array('lang' => 'ACC_ACTIVATION', 'validate' => 'int', 'type' => 'select', 'method' => 'select_acc_activation', 'explain' => true), 'new_member_post_limit' => array('lang' => 'NEW_MEMBER_POST_LIMIT', 'validate' => 'int:0:255', 'type' => 'text:4:4', 'explain' => true, 'append' => ' ' . $user->lang['POSTS']), 'new_member_group_default' => array('lang' => 'NEW_MEMBER_GROUP_DEFAULT', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'min_name_chars' => array('lang' => 'USERNAME_LENGTH', 'validate' => 'int:1', 'type' => 'custom:5:180', 'method' => 'username_length', 'explain' => true), 'min_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:1', 'type' => 'custom', 'method' => 'password_length', 'explain' => true), 'allow_name_chars' => array('lang' => 'USERNAME_CHARS', 'validate' => 'string', 'type' => 'select', 'method' => 'select_username_chars', 'explain' => true), 'pass_complex' => array('lang' => 'PASSWORD_TYPE', 'validate' => 'string', 'type' => 'select', 'method' => 'select_password_chars', 'explain' => true), 'chg_passforce' => array('lang' => 'FORCE_PASS_CHANGE', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']), 'legend2' => 'GENERAL_OPTIONS', 'allow_namechange' => array('lang' => 'ALLOW_NAME_CHANGE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'allow_emailreuse' => array('lang' => 'ALLOW_EMAIL_REUSE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'enable_confirm' => array('lang' => 'VISUAL_CONFIRM_REG', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'max_login_attempts' => array('lang' => 'MAX_LOGIN_ATTEMPTS', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true), 'max_reg_attempts' => array('lang' => 'REG_LIMIT', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true), 'legend3' => 'COPPA', 'coppa_enable' => array('lang' => 'ENABLE_COPPA', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'coppa_mail' => array('lang' => 'COPPA_MAIL', 'validate' => 'string', 'type' => 'textarea:5:40', 'explain' => true), 'coppa_fax' => array('lang' => 'COPPA_FAX', 'validate' => 'string', 'type' => 'text:25:100', 'explain' => false), 'legend4' => 'ACP_SUBMIT_CHANGES')); break; case 'feed': $display_vars = array('title' => 'ACP_FEED_MANAGEMENT', 'vars' => array('legend1' => 'ACP_FEED_GENERAL', 'feed_enable' => array('lang' => 'ACP_FEED_ENABLE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_item_statistics' => array('lang' => 'ACP_FEED_ITEM_STATISTICS', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_http_auth' => array('lang' => 'ACP_FEED_HTTP_AUTH', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'legend2' => 'ACP_FEED_POST_BASED', 'feed_limit_post' => array('lang' => 'ACP_FEED_LIMIT', 'validate' => 'int:5', 'type' => 'text:3:4', 'explain' => true), 'feed_overall' => array('lang' => 'ACP_FEED_OVERALL', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_forum' => array('lang' => 'ACP_FEED_FORUM', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_topic' => array('lang' => 'ACP_FEED_TOPIC', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'legend3' => 'ACP_FEED_TOPIC_BASED', 'feed_limit_topic' => array('lang' => 'ACP_FEED_LIMIT', 'validate' => 'int:5', 'type' => 'text:3:4', 'explain' => true), 'feed_topics_new' => array('lang' => 'ACP_FEED_TOPICS_NEW', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_topics_active' => array('lang' => 'ACP_FEED_TOPICS_ACTIVE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_news_id' => array('lang' => 'ACP_FEED_NEWS', 'validate' => 'string', 'type' => 'custom', 'method' => 'select_news_forums', 'explain' => true), 'legend4' => 'ACP_FEED_SETTINGS_OTHER', 'feed_overall_forums' => array('lang' => 'ACP_FEED_OVERALL_FORUMS', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'feed_exclude_id' => array('lang' => 'ACP_FEED_EXCLUDE_ID', 'validate' => 'string', 'type' => 'custom', 'method' => 'select_exclude_forums', 'explain' => true))); break; case 'cookie': $display_vars = array('title' => 'ACP_COOKIE_SETTINGS', 'vars' => array('legend1' => 'ACP_COOKIE_SETTINGS', 'cookie_domain' => array('lang' => 'COOKIE_DOMAIN', 'validate' => 'string', 'type' => 'text::255', 'explain' => false), 'cookie_name' => array('lang' => 'COOKIE_NAME', 'validate' => 'string', 'type' => 'text::16', 'explain' => false), 'cookie_path' => array('lang' => 'COOKIE_PATH', 'validate' => 'string', 'type' => 'text::255', 'explain' => false), 'cookie_secure' => array('lang' => 'COOKIE_SECURE', 'validate' => 'bool', 'type' => 'radio:disabled_enabled', 'explain' => true))); break; case 'load': $display_vars = array('title' => 'ACP_LOAD_SETTINGS', 'vars' => array('legend1' => 'GENERAL_SETTINGS', 'limit_load' => array('lang' => 'LIMIT_LOAD', 'validate' => 'string', 'type' => 'text:4:4', 'explain' => true), 'session_length' => array('lang' => 'SESSION_LENGTH', 'validate' => 'int:60', 'type' => 'text:5:10', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']), 'active_sessions' => array('lang' => 'LIMIT_SESSIONS', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true), 'load_online_time' => array('lang' => 'ONLINE_LENGTH', 'validate' => 'int:0', 'type' => 'text:4:3', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']), 'legend2' => 'GENERAL_OPTIONS', 'load_db_track' => array('lang' => 'YES_POST_MARKING', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_db_lastread' => array('lang' => 'YES_READ_MARKING', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_anon_lastread' => array('lang' => 'YES_ANON_READ_MARKING', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_online' => array('lang' => 'YES_ONLINE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_online_guests' => array('lang' => 'YES_ONLINE_GUESTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_onlinetrack' => array('lang' => 'YES_ONLINE_TRACK', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_birthdays' => array('lang' => 'YES_BIRTHDAYS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_unreads_search' => array('lang' => 'YES_UNREAD_SEARCH', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_moderators' => array('lang' => 'YES_MODERATORS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_jumpbox' => array('lang' => 'YES_JUMPBOX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_user_activity' => array('lang' => 'LOAD_USER_ACTIVITY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'load_tplcompile' => array('lang' => 'RECOMPILE_STYLES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend3' => 'CUSTOM_PROFILE_FIELDS', 'load_cpf_memberlist' => array('lang' => 'LOAD_CPF_MEMBERLIST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_viewprofile' => array('lang' => 'LOAD_CPF_VIEWPROFILE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_viewtopic' => array('lang' => 'LOAD_CPF_VIEWTOPIC', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'legend4' => 'ACP_SUBMIT_CHANGES')); break; case 'auth': $display_vars = array('title' => 'ACP_AUTH_SETTINGS', 'vars' => array('legend1' => 'ACP_AUTH_SETTINGS', 'auth_method' => array('lang' => 'AUTH_METHOD', 'validate' => 'string', 'type' => 'select', 'method' => 'select_auth_method', 'explain' => false))); break; case 'server': $display_vars = array('title' => 'ACP_SERVER_SETTINGS', 'vars' => array('legend1' => 'ACP_SERVER_SETTINGS', 'gzip_compress' => array('lang' => 'ENABLE_GZIP', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend2' => 'PATH_SETTINGS', 'smilies_path' => array('lang' => 'SMILIES_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true), 'icons_path' => array('lang' => 'ICONS_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true), 'upload_icons_path' => array('lang' => 'UPLOAD_ICONS_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true), 'ranks_path' => array('lang' => 'RANKS_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true), 'legend3' => 'SERVER_URL_SETTINGS', 'force_server_vars' => array('lang' => 'FORCE_SERVER_VARS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'server_protocol' => array('lang' => 'SERVER_PROTOCOL', 'validate' => 'string', 'type' => 'text:10:10', 'explain' => true), 'server_name' => array('lang' => 'SERVER_NAME', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => true), 'server_port' => array('lang' => 'SERVER_PORT', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true), 'script_path' => array('lang' => 'SCRIPT_PATH', 'validate' => 'script_path', 'type' => 'text::255', 'explain' => true), 'legend4' => 'ACP_SUBMIT_CHANGES')); break; case 'security': $display_vars = array('title' => 'ACP_SECURITY_SETTINGS', 'vars' => array('legend1' => 'ACP_SECURITY_SETTINGS', 'allow_autologin' => array('lang' => 'ALLOW_AUTOLOGIN', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'max_autologin_time' => array('lang' => 'AUTOLOGIN_LENGTH', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']), 'ip_check' => array('lang' => 'IP_VALID', 'validate' => 'int', 'type' => 'custom', 'method' => 'select_ip_check', 'explain' => true), 'browser_check' => array('lang' => 'BROWSER_VALID', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'forwarded_for_check' => array('lang' => 'FORWARDED_FOR_VALID', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'referer_validation' => array('lang' => 'REFERER_VALID', 'validate' => 'int:0:3', 'type' => 'custom', 'method' => 'select_ref_check', 'explain' => true), 'check_dnsbl' => array('lang' => 'CHECK_DNSBL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'email_check_mx' => array('lang' => 'EMAIL_CHECK_MX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'max_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:8:255', 'type' => false, 'method' => false, 'explain' => false), 'min_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:1', 'type' => 'custom', 'method' => 'password_length', 'explain' => true), 'pass_complex' => array('lang' => 'PASSWORD_TYPE', 'validate' => 'string', 'type' => 'select', 'method' => 'select_password_chars', 'explain' => true), 'chg_passforce' => array('lang' => 'FORCE_PASS_CHANGE', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']), 'max_login_attempts' => array('lang' => 'MAX_LOGIN_ATTEMPTS', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true), 'ip_login_limit_max' => array('lang' => 'IP_LOGIN_LIMIT_MAX', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true), 'ip_login_limit_time' => array('lang' => 'IP_LOGIN_LIMIT_TIME', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']), 'ip_login_limit_use_forwarded' => array('lang' => 'IP_LOGIN_LIMIT_USE_FORWARDED', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'tpl_allow_php' => array('lang' => 'TPL_ALLOW_PHP', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'form_token_lifetime' => array('lang' => 'FORM_TIME_MAX', 'validate' => 'int:-1', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']), 'form_token_sid_guests' => array('lang' => 'FORM_SID_GUESTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true))); break; case 'email': $display_vars = array('title' => 'ACP_EMAIL_SETTINGS', 'vars' => array('legend1' => 'GENERAL_SETTINGS', 'email_enable' => array('lang' => 'ENABLE_EMAIL', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'board_email_form' => array('lang' => 'BOARD_EMAIL_FORM', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true), 'email_function_name' => array('lang' => 'EMAIL_FUNCTION_NAME', 'validate' => 'string', 'type' => 'text:20:50', 'explain' => true), 'email_package_size' => array('lang' => 'EMAIL_PACKAGE_SIZE', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true), 'board_contact' => array('lang' => 'CONTACT_EMAIL', 'validate' => 'email', 'type' => 'text:25:100', 'explain' => true), 'board_email' => array('lang' => 'ADMIN_EMAIL', 'validate' => 'email', 'type' => 'text:25:100', 'explain' => true), 'board_email_sig' => array('lang' => 'EMAIL_SIG', 'validate' => 'string', 'type' => 'textarea:5:30', 'explain' => true), 'board_hide_emails' => array('lang' => 'BOARD_HIDE_EMAILS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend2' => 'SMTP_SETTINGS', 'smtp_delivery' => array('lang' => 'USE_SMTP', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'smtp_host' => array('lang' => 'SMTP_SERVER', 'validate' => 'string', 'type' => 'text:25:50', 'explain' => false), 'smtp_port' => array('lang' => 'SMTP_PORT', 'validate' => 'int:0', 'type' => 'text:4:5', 'explain' => true), 'smtp_auth_method' => array('lang' => 'SMTP_AUTH_METHOD', 'validate' => 'string', 'type' => 'select', 'method' => 'mail_auth_select', 'explain' => true), 'smtp_username' => array('lang' => 'SMTP_USERNAME', 'validate' => 'string', 'type' => 'text:25:255', 'explain' => true), 'smtp_password' => array('lang' => 'SMTP_PASSWORD', 'validate' => 'string', 'type' => 'password:25:255', 'explain' => true), 'legend3' => 'ACP_SUBMIT_CHANGES')); break; default: trigger_error('NO_MODE', E_USER_ERROR); break; } if (isset($display_vars['lang'])) { $user->add_lang($display_vars['lang']); } $this->new_config = $config; //$cfg_array = (isset(request_var('config',''))) ? utf8_normalize_nfc(request_var('config',''), array('' => ''), true)) : $this->new_config; $error = array(); // We validate the complete config if whished validate_config_vars($display_vars['vars'], $cfg_array, $error); if ($submit && !check_form_key($form_key)) { $error[] = $user->lang['FORM_INVALID']; } // Do not write values if there is an error if (sizeof($error)) { $submit = false; } $cout = 1; // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $null) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } if ($config_name == 'auth_method' || $config_name == 'feed_news_id' || $config_name == 'feed_exclude_id') { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($config_name == 'email_function_name') { $this->new_config['email_function_name'] = trim(str_replace(array('(', ')'), array('', ''), $this->new_config['email_function_name'])); $this->new_config['email_function_name'] = empty($this->new_config['email_function_name']) || !function_exists($this->new_config['email_function_name']) ? 'mail' : $this->new_config['email_function_name']; $config_value = $this->new_config['email_function_name']; } if ($submit) { set_config($config_name, $config_value); if ($cout == 1) { set_for_new_variables(); set_good_bad_new_condition(); set_new_level_ability(); set_config_for_change_variables(); set_chnage_good_bad_condition(); set_chnage_levels(); set_chnage_ability(); set_chnage_gear(); set_chnage_spell(); $cout++; } if ($config_name == 'allow_quick_reply' && isset($_POST['allow_quick_reply_enable'])) { enable_bitfield_column_flag(FORUMS_TABLE, 'forum_flags', log(FORUM_FLAG_QUICK_REPLY, 2)); } } } // Store news and exclude ids if ($mode == 'feed' && $submit) { $cache->destroy('_feed_news_forum_ids'); $cache->destroy('_feed_excluded_forum_ids'); $this->store_feed_forums(FORUM_OPTION_FEED_NEWS, 'feed_news_id'); $this->store_feed_forums(FORUM_OPTION_FEED_EXCLUDE, 'feed_exclude_id'); } if ($mode == 'auth') { // Retrieve a list of auth plugins and check their config values $auth_plugins = array(); $dp = @opendir($phpbb_root_path . 'includes/auth'); if ($dp) { while (($file = readdir($dp)) !== false) { if (preg_match('#^auth_(.*?)\\.' . $phpEx . '$#', $file)) { $auth_plugins[] = basename(preg_replace('#^auth_(.*?)\\.' . $phpEx . '$#', '\\1', $file)); } } closedir($dp); sort($auth_plugins); } $updated_auth_settings = false; $old_auth_config = array(); foreach ($auth_plugins as $method) { if ($method && file_exists($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx)) { include_once $phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx; $method = 'acp_' . $method; if (function_exists($method)) { if ($fields = $method($this->new_config)) { // Check if we need to create config fields for this plugin and save config when submit was pressed foreach ($fields['config'] as $field) { if (!isset($config[$field])) { set_config($field, ''); } if (!isset($cfg_array[$field]) || strpos($field, 'legend') !== false) { continue; } $old_auth_config[$field] = $this->new_config[$field]; $config_value = $cfg_array[$field]; $this->new_config[$field] = $config_value; if ($submit) { $updated_auth_settings = true; set_config($field, $config_value); } } } unset($fields); } } } if ($submit && ($cfg_array['auth_method'] != $this->new_config['auth_method'] || $updated_auth_settings)) { $method = basename($cfg_array['auth_method']); if ($method && in_array($method, $auth_plugins)) { include_once $phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx; $method = 'init_' . $method; if (function_exists($method)) { if ($error = $method()) { foreach ($old_auth_config as $config_name => $config_value) { set_config($config_name, $config_value); } trigger_error($error . adm_back_link($this->u_action), E_USER_WARNING); } } set_config('auth_method', basename($cfg_array['auth_method'])); } else { trigger_error('NO_AUTH_PLUGIN', E_USER_ERROR); } } } if ($submit) { add_log('admin', 'LOG_CONFIG_' . strtoupper($mode)); trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } $this->tpl_name = 'acp_board'; $this->page_title = $display_vars['title']; //archi11 code starts :) global $user; global $db; $select_variables = "SELECT * from " . USER_VARIABLES_TABLE . " INNER JOIN " . USERS_TABLE . " ON " . USER_VARIABLES_TABLE . ".user_id = " . USERS_TABLE . ".user_id GROUP BY phpbb_user_variable.user_id "; $result1 = $db->sql_query($select_variables); $variable = ''; $count = 0; $table = '<table><tr><th>Player Name</th><th>Player Information</th><th>Edit</th></tr>'; $tableend = '</table>'; while ($row = $db->sql_fetchrow($result1)) { $id = $row['id']; $player_id = $row['user_id']; $player_name = $row['username']; $image = $row['user_avatar']; $img = ''; if ($image) { $img = "<img src='./download/file.php?avatar=" . $image . "' height=34px>"; } $selected_current_hit = $row['selected_current_hit']; $selected_maximum_hit = $row['selected_maximum_hit']; $seleted_non_lethal = $row['seleted_non_lethal']; if (($selected_current_hit == 0 or !($selected_current_hit == '')) && ($selected_maximum_hit == 0 or !($selected_maximum_hit == '')) && ($seleted_non_lethal == 0 or !($seleted_non_lethal == ''))) { $brh = '[<font color="#138600">'; if ($selected_current_hit == 0 or !($selected_current_hit == '')) { if (!($selected_current_hit == '')) { $brh .= 'HP: ' . $selected_current_hit . '/' . $selected_maximum_hit; } } if ($seleted_non_lethal == 0 or !($seleted_non_lethal == '')) { if (!($seleted_non_lethal == '')) { $brh .= ', NL: '; } $brh .= $seleted_non_lethal; } if (!($seleted_non_lethal == '') or !($selected_current_hit == '')) { $brh .= '</font>]'; } } //bad good condition $good_condition = $row['seleted_good_condition']; $bad_condition = $row['seleted_bad_condition']; $sgc = json_decode($good_condition, true); $sbc = json_decode($bad_condition, true); if (count($sbc) > 1) { $seleted_bad_condition = ''; for ($bc = 0; $bc < count($sbc); $bc++) { if ($bc != count($sbc) - 1) { $seleted_bad_condition .= $sbc[$bc] . ", "; } else { $seleted_bad_condition .= $sbc[$bc]; } } } elseif (count($sbc) == 1) { $seleted_bad_condition .= $sbc[0]; } elseif ($sbc == null) { $seleted_bad_condition = ''; } //seleted good condition if (count($sgc) > 1) { $seleted_good_condition = ''; for ($gc = 0; $gc < count($sgc); $gc++) { if ($gc != count($sgc) - 1) { $seleted_good_condition .= $sgc[$gc] . ", "; } else { $seleted_good_condition .= $sgc[$gc]; } } } elseif (count($sgc) == 1) { $seleted_good_condition .= $sgc[0]; } elseif ($sgc == null) { $seleted_good_condition = ''; } if ($seleted_good_condition or $seleted_good_condition == '' or $seleted_bad_condition or $seleted_bad_condition == '') { if (!($seleted_good_condition == '') or !($seleted_bad_condition == '')) { $con = '['; } if ($seleted_good_condition or $seleted_good_condition == '') { $con .= '<font color="#0070CA ">' . $seleted_good_condition . '</font>'; } if (!($seleted_good_condition == '') and !($seleted_bad_condition == '')) { $con .= ', '; } if ($seleted_bad_condition or $seleted_bad_condition == '') { $con .= '<font color="#FF0000 ">' . $seleted_bad_condition . '</font>'; if (!($seleted_good_condition == '') or !($seleted_bad_condition == '')) { $con .= ']'; } } } //sleted level or levels $level = json_decode($row['level'], true); $level_min = json_decode($row['level_min'], true); $level_max = json_decode($row['level_max'], true); $l = 'L'; if (count($level) > 1 && $level != null) { $levels = ''; for ($lvs = 0; $lvs < count($level); $lvs++) { if ($lvs != count($level) - 1) { $levels .= $l . "" . $level[$lvs] . ": " . $level_min[$lvs] . "/" . $level_max[$lvs] . ", "; } else { $levels .= $l . $level[$lvs] . ": " . $level_min[$lvs] . "/" . $level_max[$lvs]; } } } elseif ($level != null && count($level) == 1) { $levels = $l . $level[0] . ": " . $level_min[0] . "/" . $level_max[0]; } else { $levels = ''; } $lvls = ''; if ($levels and $levels != 'L : /') { $lvls .= '[<font color="#5F497A ">' . $levels . '</font>]'; } if ($levels == 'L: /') { $lvls = ''; } //seleted ability or abilities $ability_name = json_decode($row['ability_name'], true); $min_ability = json_decode($row['min_ability'], true); $max_ability = json_decode($row['max_ability'], true); if (count($ability_name) > 1 && $ability_name != null) { $ability = ''; for ($a = 0; $a < count($ability_name); $a++) { if ($a != count($ability_name) - 1) { $ability .= $ability_name[$a] . ": " . $min_ability[$a] . "/" . $max_ability[$a] . ", "; } else { $ability .= $ability_name[$a] . ": " . $min_ability[$a] . "/" . $max_ability[$a]; } } } elseif ($ability_name[0] != "" && count($ability_name) == 1) { $ability .= $ability_name[0] . ": " . $min_ability[0] . "/" . $max_ability[0]; } else { $ability = ''; } $ablity = ''; if ($ability) { $ablity .= '[<font color="#5F497A ">' . $ability . '</font>]'; } //$variable .= '<tr><td>'.$img.'</td><td><font color="#0658B0" size=3px>' . $row['username'] . '</font></td><td>: ' . $brh.$con.$lvls.$ablity.'</td></tr>'; $variable .= '<tr><td><font color="#0658B0" size=3px>' . $row['username'] . '</font></td><td>: ' . $brh . $con . $lvls . $ablity . '</td><td><a href=./index.php?sid=' . request_var('sid', '') . '&i=board&mode=signature&player=' . $player_id . '&id=' . $id . '&playername=' . $player_name . '><img title="Edit" alt="Edit" src="./images/icon_edit.gif"></a></td></tr>'; unset($ability); unset($con); unset($brh); unset($lvls); } $variabls = $table . $variable . $tableend; $tableid = request_var('id', ''); if (request_var('player', '')) { $players_id = request_var('player', ''); $player_name = request_var('playername', ''); $tableid = request_var('id', ''); $s = "SELECT * from " . USER_VARIABLES_TABLE . " where user_id=" . $players_id . " and id=" . $tableid; $result_post_data = $db->sql_query($s); while ($row = $db->sql_fetchrow($result_post_data)) { $selected_current_hit = $row['selected_current_hit']; $selected_maximum_hit = $row['selected_maximum_hit']; $seleted_non_lethal = $row['seleted_non_lethal']; $seleted_bad_condition = $row['seleted_bad_condition']; $seleted_good_condition = $row['seleted_good_condition']; $levels = $row['level']; $levels_min = $row['level_min']; $levels_max = $row['level_max']; $ability_namey = $row['ability_name']; $min_abilityy = $row['min_ability']; $max_abilityy = $row['max_ability']; $seleted_gear = $row['gear']; $heropoint = $row['hero_point']; $quick_stats = $row['quick_stats']; $quick_skill = $row['quick_skill']; $attack = $row['attack']; $damage = $row['damage']; $critical_multiplier = $row['critical_multiplier']; $off_range = $row['off_range']; $type = $row['type']; $weapon_name = $row['weapon_name']; $user_spell = $row['spell']; } $select_hit = "SELECT * from " . VARIABLES_TABLE; $result1 = $db->sql_query($select_hit); $variables = array(); while ($row = $db->sql_fetchrow($result1)) { $hit_current = $row['current']; $hit_maximum = $row['maximum']; $negative_condition = $row['negative_condition']; $positive_condition = $row['positive_condition']; $level = $row['level']; $level_min = $row['level_min']; $level_max = $row['level_max']; $min_ability = $row['min_ability']; $max_ability = $row['max_ability']; $gear = $row['gear']; $non_lethal = $row['non_lethal']; $hero_points = $row['hero_point']; $quick_skill1 = $row['quick_skill']; $spells = $row['spell']; } $hit_current_data = json_decode($hit_current, true); $hit_maximum_data = json_decode($hit_maximum, true); sort($hit_current_data); sort($hit_maximum_data); $hit_current_data_count = count($hit_current_data); $hit_maximum_data_count = count($hit_maximum_data); $negative_condition_data1 = json_decode($negative_condition, true); $positive_condition_data1 = json_decode($positive_condition, true); $negative_condition_data = array_map('ucfirst', $negative_condition_data1); $positive_condition_data = array_map('ucfirst', $positive_condition_data1); sort($negative_condition_data); sort($positive_condition_data); $negative_condition_data_count = count($negative_condition_data); $positive_condition_data_count = count($positive_condition_data); $level_data = json_decode($level, true); sort($level_data); $level_count = count($level_data); $level_min_data = json_decode($level_min, true); sort($level_min_data); $level_min_data_count = count($level_min_data); $level_max_data = json_decode($level_max, true); sort($level_max_data); $level_max_data_count = count($level_max_data); $min_ability_data = json_decode($min_ability, true); sort($min_ability_data); $min_ability_data_count = count($min_ability_data); $max_ability_data = json_decode($max_ability, true); sort($max_ability_data); $max_ability_data_count = count($max_ability_data); $gear_data1 = json_decode($gear, true); $gear_data = array_map('ucfirst', $gear_data1); sort($gear_data); $gear_data_count = count($gear_data); $non_lethal_data = json_decode($non_lethal, true); sort($non_lethal_data); $non_lethal_data_count = count($non_lethal_data); $quick_s1 = json_decode($quick_skill1, true); $quick_skill_data = @array_map('ucfirst', $quick_s1); @sort($quick_skill_data); $quick_skill_data_count = count($quick_skill_data); $quick_skill_varr = json_decode($quick_skill, true); $quick_skill_var = @array_map('ucfirst', $quick_skill_varr); $s_quick_skill_data = ''; $sel_skill = array(); $sel_skill_val = array(); for ($ss = 0; $ss < count($quick_skill_var); $ss++) { $exp = explode('(', $quick_skill_var[$ss]); $sel_skill[] = $exp[0]; $sel_skill_val[] = $exp[1]; } $increment = 0; $arr_merge = @array_merge($quick_skill_data, $sel_skill); $unique = @array_unique($arr_merge); $values = @array_values($unique); $ar = array(); $ar = @array_diff($values, $sel_skill); for ($gg = 0; $gg < count($values); $gg++) { if ($ar) { foreach ($ar as $key => $val) { if ($values[$gg] == $val) { $selected = 'deselected="deselected"'; break; } } } foreach ($sel_skill as $key => $val) { if ($val == $values[$gg]) { if ($sel_skill_val[$increment] != '') { $value1 = $val . '(' . $sel_skill_val[$increment]; } else { $value1 = $val; } $increment++; $values[$gg] = $value1; $selected = 'selected="selected"'; break; } } $s_quick_skill_data .= "<option value=\"{$values[$gg]}\" {$selected} >{$values[$gg]}</option>"; unset($value1); } $selected; $s_hit_current_data = ''; for ($i = 0; $i < $hit_current_data_count; $i++) { if ($hit_current_data[$i] == $selected_current_hit) { $selected = 'selected="selected"'; } else { $selected = ''; } $s_hit_current_data .= "<option value=\"{$hit_current_data[$i]}\" {$selected} >{$hit_current_data[$i]}</option>"; } $s_hit_maximum_data = ''; for ($i = 0; $i < $hit_maximum_data_count; $i++) { if ($hit_maximum_data[$i] == $selected_maximum_hit) { $selected = ' selected="selected"'; } else { $selected = ''; } $s_hit_maximum_data .= "<option value=\"{$hit_maximum_data[$i]}\"{$selected}>{$hit_maximum_data[$i]}</option>"; } $s_non_lethal_data = ''; for ($i = 0; $i < $non_lethal_data_count; $i++) { if ($non_lethal_data[$i] == $seleted_non_lethal) { $selected = ' selected="selected"'; } else { $selected = ''; } $s_non_lethal_data .= "<option value=\"{$non_lethal_data[$i]}\"{$selected}>{$non_lethal_data[$i]}</option>"; } $hero_points_data = json_decode($hero_points, true); @sort($hero_points_data); $s_hero_points_data = ''; for ($hr = 0; $hr < count($hero_points_data); $hr++) { if ($hero_points_data[$hr] == $heropoint) { $selected = 'selected="selected"'; } else { $selected = ''; } $s_hero_points_data .= "<option value=\"{$hero_points_data[$hr]}\" {$selected} >{$hero_points_data[$hr]}</option>"; } $s_critical_multiplier = "<select name='critical_multiplier' id='critical_multiplier'>"; for ($hr = 1; $hr <= 5; $hr++) { if ($hr == $critical_multiplier) { $selected = 'selected="selected"'; } else { $selected = ''; } $s_critical_multiplier .= '<option value="' . $hr . '" ' . $selected . '>' . $hr . '</option>'; } $s_critical_multiplier .= "</select>"; $array_type = array('B', 'P', 'S', 'M'); $types = json_decode($type, true); if ($types != '') { sort($types); $s_type = ''; for ($tp = 0; $tp < count($array_type); $tp++) { $selected = ''; foreach ($types as $key => $val) { if ($val == $array_type[$tp]) { $selected = 'selected="selected"'; break; } else { $selected = ''; } } $s_type .= "<option value=\"{$array_type[$tp]}\" {$selected} >{$array_type[$tp]}</option>"; } } $s_weapon_name = ''; $weapon_names = json_decode($weapon_name, true); for ($wp = 0; $wp < count($weapon_names); $wp++) { $s_weapon_name .= '<option value="' . $weapon_names[$wp] . '" ' . $selected . '>' . $weapon_names[$wp] . '</option>'; } $bad_condition = json_decode($seleted_bad_condition, true); $s_negative_condition_data = ''; for ($i = 0; $i < $negative_condition_data_count; $i++) { if ($bad_condition) { foreach ($bad_condition as $key => $val) { if ($negative_condition_data[$i] == $val) { $selected = 'selected="selected"'; break; } else { $selected = ''; } } } $s_negative_condition_data .= "<option value=\"{$negative_condition_data[$i]}\" {$selected} >{$negative_condition_data[$i]}</option>"; } $good_condition = json_decode($seleted_good_condition, true); $s_positive_condition_data = ''; for ($i = 0; $i < $positive_condition_data_count; $i++) { if ($good_condition) { foreach ($good_condition as $key => $val) { if ($positive_condition_data[$i] == $val) { $selected = 'selected="selected"'; break; } else { $selected = ''; } } } $s_positive_condition_data .= "<option value=\"{$positive_condition_data[$i]}\"{$selected}>{$positive_condition_data[$i]}</option>"; } $levelss = json_decode($levels, true); $s_level_data = ''; for ($i = 0; $i < $level_count; $i++) { //if (request_var('mode'] == 'edit') { if (count($levelss) == 1) { $variable_level = 'yes'; if ($level_data[$i] == $levelss[0]) { $selected = ' selected="selected"'; } else { $selected = ''; } } $s_level_data .= "<option value=\"{$level_data[$i]}\"{$selected}>{$level_data[$i]}</option>"; } $user_spell1 = json_decode($user_spell, true); $splct = count($user_spell1); $levels1 = json_decode($levels, true); $spells1 = json_decode($spells, true); $spl_count = 0; $spell_options = array(); $arr = @array_unique($levels1); $sel = array(); if ($arr) { foreach ($arr as $key => $val) { $spell_options_create = ''; if (@key_exists($val, $user_spell1)) { $all_spell = @array_values(array_unique(array_merge($user_spell1[$val]['name'], $spells1))); for ($spl = 0; $spl < count($all_spell); $spl++) { foreach ($user_spell1[$val]['name'] as $k => $v) { if ($all_spell[$spl] == $v) { $selected = 'selected="selected"'; break; } else { $selected = ''; } } $spell_options_create .= "<option " . $selected . ">" . $all_spell[$spl] . "</option>"; } if ($spl_count == 0) { $sel[$val] = "<select name='spell_level[]' multiple>" . $spell_options_create . "</select>"; } else { $sel[$val] = "<select name='spell_level" . $spl_count . "[]' multiple>" . $spell_options_create . "</select>"; } $spl_count++; } else { for ($spl = 0; $spl < count($spells1); $spl++) { $spell_options_create .= "<option>" . $spells1[$spl] . "</option>"; } if ($spl_count == 0) { $sel[$val] = "<select name='spell_level[]' multiple>" . $spell_options_create . "</select>"; } else { $sel[$val] = "<select name='spell_level" . $spl_count . "[]' multiple>" . $spell_options_create . "</select>"; } $spl_count++; } } } $selectbox_level = ''; if (count($levelss) > 1) { $increment_variable_spell = '<input type="hidden" name="increment_variable_spell" id="increment_variable_spell" value="' . count($levelss) . '">'; $variable_level = 'no'; for ($j = 0; $j < count($levelss); $j++) { $selectstart = ''; $selectends = ''; $select = ''; $s_level_data_all_options = ''; if ($j == 0) { $lvl = ''; } else { $lvl = $j; } $selectstart .= 'Level : <select name="select_level' . $lvl . '" id="select_level' . $lvl . '" style="width:5em;">'; for ($i = 0; $i < $level_count; $i++) { if ($level_data[$i] == $levelss[$j]) { $selected = 'selected="selected"'; } else { $selected = ''; } $s_level_data_all_options .= "<option value=\"{$level_data[$i]}\" {$selected} >{$level_data[$i]}</option>"; } $selectends .= '</select>'; if ($j != count($levelss) - 1) { $select .= $selectstart . $s_level_data_all_options . $selectends . "<br><br>"; } else { $select .= $selectstart . $s_level_data_all_options . $selectends; } //if ($user_spell != null) { foreach ($sel as $kespel => $valspell) { if ($levelss[$j] == $kespel) { $box = $valspell; break; } else { $box = ''; } } //} $selectbox_level .= " " . $box . " " . $select; } } $sel_count = count($sel); if ($sel_count > 1) { $spell_variable = 'no'; } elseif ($sel_count == 1) { $spell_variable = 'yes'; $spell_one = $sel[0]; } $levelss_min = json_decode($levels_min, true); $s_level_min_select_box = ''; for ($i = 0; $i < $level_min_data_count; $i++) { //if (request_var('mode'] == 'edit') { if (count($levelss_min) == 1) { if ($level_min_data[$i] == $levelss_min[0]) { $selected = ' selected="selected"'; } else { $selected = ''; } } $s_level_min_data .= "<option value=\"{$level_min_data[$i]}\"{$selected}>{$level_min_data[$i]}</option>"; } $selectbox_level_min = ''; if (count($levelss_min) > 1) { for ($j = 0; $j < count($levelss_min); $j++) { $selectstart = ''; $selectends = ''; $select = ''; $s_level_data_all_options = ''; if ($j == 0) { $lvl = ''; } else { $lvl = $j; } $selectstart .= '   Current/Max : <select name="select_level_min' . $lvl . '" id="select_level_min' . $lvl . '" style="width:5em;">'; for ($i = 0; $i < $level_min_data_count; $i++) { if ($level_min_data[$i] == $levelss_min[$j]) { $selected = 'selected="selected"'; } else { $selected = ''; } $s_level_data_all_options .= "<option value=\"{$level_min_data[$i]}\" {$selected} >{$level_min_data[$i]}</option>"; } $selectends .= '</select>'; if ($j != count($levelss_min) - 1) { $select .= $selectstart . $s_level_data_all_options . $selectends . "/" . "<br><br><br><br><br>"; } else { $select .= $selectstart . $s_level_data_all_options . $selectends . "/"; } $selectbox_level_min .= $select; } } $levelss_max = json_decode($levels_max, true); $s_level_max_data = ''; for ($i = 0; $i < $level_max_data_count; $i++) { if (count($levelss_max) == 1) { if ($level_max_data[$i] == $levelss_max[0]) { $selected = ' selected="selected"'; } else { $selected = ''; } } $s_level_max_data .= "<option value=\"{$level_max_data[$i]}\"{$selected}>{$level_max_data[$i]}</option>"; } $s_level_max_data .= "<option value=\"{$level_max_data[$i]}\"{$selected}>{$level_max_data[$i]}</option>"; $delete_last_level_ability = $post_id . '_' . $user->data["user_id"] . '_' . '0'; $selectbox_level_max = ''; $button_level = ''; if (count($levelss_min) > 1) { for ($j = 0; $j < count($levelss_max); $j++) { $selectstart = ''; $selectends = ''; $select = ''; $s_level_data_all_options = ''; if ($j == 0) { $lvl = ''; } else { $lvl = $j; } $selectstart .= '<select name="select_level_max' . $lvl . '" id="select_level_max' . $lvl . '" style="width:5em;;">'; for ($i = 0; $i < $level_max_data_count; $i++) { if ($level_max_data[$i] == $levelss_max[$j]) { $value = $level_max_data[$i]; $ivalue = $j; $selected = 'selected="selected"'; } else { $selected = ''; } $s_level_data_all_options .= "<option value=\"{$level_max_data[$i]}\" {$selected} >{$level_max_data[$i]}</option>"; } $name = $post_id . '_' . $user->data["user_id"] . '_' . $ivalue; $selectends .= '</select>'; if ($j < count($levelss_max) - 1) { //$style = 'style="height: 53px;"'; $style = 'style="height: 80px;"'; } else { $style = ''; } $button_level .= '<div ' . $style . '><input type="button" name=' . $name . ' id=' . $value . ' value="-" class=button1 addaditinal onclick="return remove_level1(this);" style="width: 25px;height: 22px;"></div>'; if ($j != count($levelss_max) - 1) { $select .= $selectstart . $s_level_data_all_options . $selectends . "<br><br><br><br><br>"; } else { $select .= $selectstart . $s_level_data_all_options . $selectends; } $selectbox_level_max .= $select; } } $ability_names = json_decode($ability_namey, true); $edit_ability_namey = ''; if (count($ability_names) != 0) { for ($j = 0; $j < count($ability_names); $j++) { $selectstart = ''; $selectends = ''; $select = ''; if ($j == 0) { $lvl = ''; $nl = '<br>'; } else { $lvl = $j; $nl = ''; } $name = $ability_names[$j]; $selectstart .= '' . $nl . 'Name : <input type="text" name=ability' . $lvl . ' value=' . str_replace(" ", " ", $name) . ' ><br><br>'; $edit_ability_namey .= $selectstart; } } $min_abilityyy = json_decode($min_abilityy, true); $s_min_ability = ''; for ($i = 0; $i < $min_ability_data_count; $i++) { if (count($min_abilityyy) == 1) { $variable_ability = 'yes'; if ($min_ability_data[$i] == $min_abilityyy[0]) { $selected = ' selected="selected"'; } else { $selected = ''; } } $s_min_ability .= "<option value=\"{$min_ability_data[$i]}\"{$selected}>{$min_ability_data[$i]}</option>"; } $selectbox_min_ability = ''; if (count($min_abilityyy) > 1) { $increment_variable_ability = '<input type="hidden" name="increment_variable_ability" id="increment_variable_ability" value="' . count($min_abilityyy) . '">'; $variable_ability = 'no'; for ($j = 0; $j < count($min_abilityyy); $j++) { $selectstart = ''; $select = ''; $s_level_data_all_options = ''; if ($j == 0) { $lvl = ''; } else { $lvl = $j; } $selectstart .= ' Min/Max : <select name="min_ability' . $lvl . '" id="min_ability' . $lvl . '" style="width:4em;height:21px;">'; for ($i = 0; $i < $min_ability_data_count; $i++) { if ($min_ability_data[$i] == $min_abilityyy[$j]) { $selected = 'selected="selected"'; } else { $selected = ''; } $s_level_data_all_options .= "<option value=\"{$min_ability_data[$i]}\" {$selected} >{$min_ability_data[$i]}</option>"; } $selectends .= '</select>'; if ($j != count($min_abilityyy) - 1) { $select .= $selectstart . $s_level_data_all_options . $selectends . "/" . "<br><br>"; } else { $select .= $selectstart . $s_level_data_all_options . $selectends . "/"; } $selectbox_min_ability .= $select; } } $max_abilityyy = json_decode($max_abilityy, true); $s_max_ability = ''; for ($i = 0; $i < $max_ability_data_count; $i++) { if (count($max_abilityyy) == 1) { if ($max_ability_data[$i] == $max_abilityyy[0]) { $selected = ' selected="selected"'; } else { $selected = ''; } } $s_max_ability .= "<option value=\"{$max_ability_data[$i]}\"{$selected}>{$max_ability_data[$i]}</option>"; } $selectbox_max_ability = ''; $button_ability = '<br>'; if (count($max_abilityyy) > 1) { for ($j = 0; $j < count($max_abilityyy); $j++) { $selectstart = ''; $selectends = ''; $select = ''; $s_level_data_all_options = ''; if ($j == 0) { $lvl = ''; } else { $lvl = $j; } $selectstart .= '<select name="max_ability' . $lvl . '" id="max_ability' . $lvl . '" style="width:4em;height:21px;">'; for ($i = 0; $i < $max_ability_data_count; $i++) { if ($max_ability_data[$i] == $max_abilityyy[$j]) { $value = $max_ability_data[$i]; $ivalue = $j; $selected = 'selected="selected"'; } else { $selected = ''; } $s_level_data_all_options .= "<option value=\"{$max_ability_data[$i]}\" {$selected} >{$max_ability_data[$i]}</option>"; } $name = $post_id . '_' . $user->data["user_id"] . '_' . $ivalue; $selectends .= '</select>'; $button_ability .= ' <input type="button" name=' . $name . ' id=' . $value . ' value="-" class=button1 addaditinal onclick="return remove_ability1(this);" style="width: 25px;height: 22px;"><br><br>'; if ($j != count($max_abilityyy) - 1) { $select .= $selectstart . $s_level_data_all_options . $selectends . "<br><br>"; } else { $select .= $selectstart . $s_level_data_all_options . $selectends; } $selectbox_max_ability .= $select; } } $seleted_gears = json_decode($seleted_gear, true); $s_gear_data = ''; $sel_gear = array(); $sel_val = array(); for ($g = 0; $g < count($seleted_gears); $g++) { $exp = explode('(', $seleted_gears[$g]); $sel_gear[] = $exp[0]; $sel_val[] = $exp[1]; } $increment = 0; $arr_merge = array_merge($gear_data, $sel_gear); $unique = array_unique($arr_merge); $values = array_values($unique); $ar = array(); $ar = array_diff($values, $sel_gear); for ($gg = 0; $gg < count($values); $gg++) { if ($ar) { foreach ($ar as $key => $val) { if ($values[$gg] == $val) { $selected = 'deselected="deselected"'; break; } } } foreach ($sel_gear as $key => $val) { if ($val == $values[$gg]) { if ($sel_val[$increment] != '') { $value1 = $val . '(' . $sel_val[$increment]; } else { $value1 = $val; } $increment++; $values[$gg] = $value1; $selected = 'selected="selected"'; break; } } $s_gear_data .= "<option value=\"{$values[$gg]}\" {$selected} >{$values[$gg]}</option>"; unset($value1); } } else { $players_id = null; $tableid = null; } if (request_var('submit_variable', '')) { if (request_var('increment_variable_spell', '') and request_var('increment_variable_spell', '') != 1) { $level = array(); $level_min = array(); $level_max = array(); $spell = array(); for ($i = 1; $i < request_var('increment_variable_spell', ''); $i++) { $level[] = request_var('select_level' . $i . '', ''); $level_min[] = request_var('select_level_min' . $i . '', ''); $level_max[] = request_var('select_level_max' . $i . '', ''); } for ($i = 1; $i < request_var('increment_variable_spell', ''); $i++) { $lvl = request_var('select_level' . $i . '', ''); $spell = request_var('spell_level' . $i . '', ''); $spell_details[$lvl] = array('name' => $spell); unset($lvl); } $level1 = array_merge(array(request_var('select_level', '')), $level); $level_min1 = array_merge(array(request_var('select_level_min', '')), $level_min); $level_max1 = array_merge(array(request_var('select_level_max', '')), $level_max); $l = json_encode($level1, JSON_FORCE_OBJECT); $lmin = json_encode($level_min1, JSON_FORCE_OBJECT); $lmax = json_encode($level_max1, JSON_FORCE_OBJECT); $fl = request_var('select_level', ''); $fs = request_var('spell_level', ''); $spell_details1 = array("{$fl}" => array('name' => $fs)); $merge = $spell_details + $spell_details1; $spell_variable = json_encode($merge, JSON_FORCE_OBJECT); } else { $l = json_encode(array(request_var('select_level', '')), JSON_FORCE_OBJECT); $lmin = json_encode(array(request_var('select_level_min', '')), JSON_FORCE_OBJECT); $lmax = json_encode(array(request_var('select_level_max', '')), JSON_FORCE_OBJECT); $fl = request_var('select_level', ''); $fs = request_var('spell_level', ''); $spell_details1 = array("{$fl}" => array('name' => $fs)); $spell_variable = json_decode($spell_details1, JSON_FORCE_OBJECT); } if (request_var('increment_variable_ability', '') and request_var('increment_variable_ability', '') > 1) { $ability = array(); $ability_min = array(); $ability_max = array(); for ($i = 1; $i < request_var('increment_variable_ability', ''); $i++) { $ability[] = request_var('ability' . $i . '', ''); $ability_min[] = request_var('min_ability' . $i . '', ''); $ability_max[] = request_var('max_ability' . $i . '', ''); } $ability1 = array_merge(array(request_var('ability', '')), $ability); $ability_min1 = array_merge(array(request_var('min_ability', '')), $ability_min); $ability_max1 = array_merge(array(request_var('max_ability', '')), $ability_max); $a = json_encode($ability1, JSON_FORCE_OBJECT); $amin = json_encode($ability_min1, JSON_FORCE_OBJECT); $amax = json_encode($ability_max1, JSON_FORCE_OBJECT); } else { $a = json_encode(array(request_var('ability', '')), JSON_FORCE_OBJECT); $amin = json_encode(array(request_var('min_ability', '')), JSON_FORCE_OBJECT); $amax = json_encode(array(request_var('max_ability', '')), JSON_FORCE_OBJECT); } $arr_gear_quality1 = array(); if (request_var('gear', '') != '') { $gear_quality = json_encode(request_var('gear', ''), JSON_FORCE_OBJECT); } else { $gear_quality = ''; } $data_update_post = array('selected_current_hit' => request_var('select_current_count', ''), 'selected_maximum_hit' => request_var('select_maximum_count', ''), 'seleted_non_lethal' => request_var('select_non_lethal', ''), 'seleted_bad_condition' => json_encode(request_var('negative_condition', ''), JSON_FORCE_OBJECT), 'seleted_good_condition' => json_encode(request_var('positive_condition', ''), JSON_FORCE_OBJECT), 'level' => $l, 'level_min' => $lmin, 'level_max' => $lmax, 'ability_name' => $a, 'min_ability' => $amin, 'max_ability' => $amax, 'gear' => $gear_quality, 'spell' => $spell_variable); $sql = 'UPDATE ' . USER_VARIABLES_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $data_update_post) . ' WHERE user_id = ' . request_var('players', ''); $db->sql_query($sql); $submitted = 1; $sid = request_var('sid', ''); } //archi11 code ends :) $template->assign_vars(array('L_TITLE' => $user->lang[$display_vars['title']], 'L_TITLE_EXPLAIN' => $user->lang[$display_vars['title'] . '_EXPLAIN'], 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error), 'U_ACTION' => $this->u_action, 'MODE' => $mode, 'CHANGE_PLAYER_INFO' => 'Change Player Information', 'TABLE' => $tablestart, 'TABLE_START' => $variabls, 'PLAYER_ID' => $players_id, "PLAYER_NAME" => $player_name, 'S_HIT_CURRENT_COUNT' => $s_hit_current_data, 'S_HIT_MAXIMUM_COUNT' => $s_hit_maximum_data, 'S_NEGATIVE_CONDITION' => $s_negative_condition_data, 'S_POSITIVE_CONDITION' => $s_positive_condition_data, 'S_LEVEL' => $s_level_data, 'S_LEVEL_MIN' => $s_level_min_data, 'S_LEVEL_MAX' => $s_level_max_data, 'S_MIN_ABILITY' => $s_min_ability, 'S_MAX_ABILITY' => $s_max_ability, 'S_GEAR' => $s_gear_data, 'S_NON_LETHAL' => $s_non_lethal_data, 'S_VARIABLE_LEVEL' => $variable_level, 'S_VARIABLE_ABILITY' => $variable_ability, 'S_EDIT_LEVEL' => $selectbox_level, 'S_EDIT_MIN_LEVEL' => $selectbox_level_min, 'S_EDIT_MAX_LEVEL' => $selectbox_level_max, 'S_SPELL_COUNT' => $spell_variable, 'S_SPELL_VARIABLE' => $spell_one, 'S_EDIT_ABILITY_NAME' => $edit_ability_namey, 'S_EDIT_MIN_ABILITY' => $selectbox_min_ability, 'S_EDIT_MAX_ABILITY' => $selectbox_max_ability, 'S_INCREMENR_SPELL' => $increment_variable_spell, 'S_INCREMENR_ABILITY' => $increment_variable_ability, 'S_HERO_POINT' => $s_hero_points_data, 'S_QUICK_STATS' => $quick_stats, 'S_QUICK_SKILL' => $s_quick_skill_data, 'BUTTON_LEVEL' => $button_level, 'S_WEAPON_NAME' => $s_weapon_name, 'BUTTON_ABILITY' => $button_ability, 'USER_ID' => $user->data["user_id"], 'POST_ID' => $post_id, 'LAST_LEVEL_NAME' => $delete_last_level_ability, 'SUCCESS' => $submitted, 'INFORMATION' => 'Information', 'MESSAGE' => 'Configuration updated successfully.', 'LINK' => '<< Back to previous page', 'SID' => $sid)); // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars); if (empty($content)) { continue; } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $content)); unset($display_vars['vars'][$config_key]); } if ($mode == 'auth') { $template->assign_var('S_AUTH', true); foreach ($auth_plugins as $method) { if ($method && file_exists($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx)) { $method = 'acp_' . $method; if (function_exists($method)) { $fields = $method($this->new_config); if ($fields['tpl']) { $template->assign_block_vars('auth_tpl', array('TPL' => $fields['tpl'])); } unset($fields); } } } } }
function main($id, $mode) { global $config, $request, $template, $user, $phpbb_container; global $phpbb_root_path, $phpEx; $config_text = $phpbb_container->get('config_text'); $this->page_title = 'ACP_POSTS_MERGING'; $this->tpl_name = 'acp_posts_merging'; $submit = isset($_POST['submit']) ? true : false; $preview = isset($_POST['preview']) ? true : false; $form_key = 'config_posts_merging'; add_form_key($form_key); $display_vars = array('title' => 'ACP_POSTS_MERGING', 'vars' => array('legend1' => 'GENERAL_OPTIONS', 'merge_interval' => array('lang' => 'MERGE_INTERVAL', 'validate' => 'int:0', 'type' => 'number:0:9999', 'explain' => true, 'append' => ' ' . $user->lang['HOURS']), 'merge_no_forums' => array('lang' => 'MERGE_NO_FORUMS', 'validate' => 'string', 'type' => 'custom', 'method' => 'select_merge_no_forums', 'explain' => true), 'merge_no_topics' => array('lang' => 'MERGE_NO_TOPICS', 'validate' => 'string', 'type' => 'text:5:255', 'explain' => true), 'legend2' => 'MERGE_SEPARATOR')); if (isset($display_vars['lang'])) { $user->add_lang($display_vars['lang']); } $user->add_lang(array('posting')); $this->new_config = $config; $cfg_array = isset($_REQUEST['config']) ? $request->variable('config', array('' => ''), true) : $this->new_config; $cfg_array['merge_no_forums'] = $submit ? implode(',', $request->variable('merge_no_forums', array('' => ''))) : $cfg_array['merge_no_forums']; $posts_merging_separator_text = $request->variable('posts_merging_separator_text', '', true); $error = array(); // We validate the complete config if wished validate_config_vars($display_vars['vars'], $cfg_array, $error); if ($submit && !check_form_key($form_key)) { $error[] = $user->lang['FORM_INVALID']; } // Do not write values if there is an error if (sizeof($error)) { $submit = false; } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $null) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($submit) { $config->set($config_name, $config_value); } } if ($submit) { $config_text->set('posts_merging_separator_text', $posts_merging_separator_text); trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars); if (empty($content)) { continue; } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $content)); unset($display_vars['vars'][$config_key]); } $posts_merging_separator_text = $posts_merging_separator_text ?: $config_text->get('posts_merging_separator_text'); include_once $phpbb_root_path . 'includes/functions_display.' . $phpEx; /* * Constant preview */ include_once $phpbb_root_path . 'includes/message_parser.' . $phpEx; // Prepare message separator $user->add_lang_ext('rxu/PostsMerging', 'posts_merging'); // Calculate the time interval $helper = $phpbb_container->get('rxu.PostsMerging.helper'); $current_time = time(); $interval = $helper->get_time_interval(strtotime('3 hours 17 minutes 56 seconds'), $current_time); $time = array(); $time[] = $interval->h ? $user->lang('D_HOURS', $interval->h) : null; $time[] = $interval->i ? $user->lang('D_MINUTES', $interval->i) : null; $time[] = $interval->s ? $user->lang('D_SECONDS', $interval->s) : null; // Allow using language variables like {L_LANG_VAR} $posts_merging_separator_text_prewiew = preg_replace_callback('/{L_([A-Z0-9_]+)}/', function ($matches) { global $user; return $user->lang($matches[1]); }, $posts_merging_separator_text); // Eval linefeeds and generate the separator, time interval included $posts_merging_separator_text_prewiew = sprintf(str_replace('\\n', "\n", $posts_merging_separator_text_prewiew), implode(' ', $time)); $message_parser = new \parse_message($posts_merging_separator_text_prewiew); // Allowing Quote BBCode $message_parser->parse(true, true, true, true, true, true, true, true); // Now parse it for displaying $separator_preview = $message_parser->format_display(true, true, true, false); unset($message_parser); $template->assign_vars(array('SEPARATOR_PREVIEW' => $separator_preview)); /* * Constant preview end */ $template->assign_vars(array('POSTS_MERGING_SEPARATOR_TEXT' => $posts_merging_separator_text, 'S_SMILIES_ALLOWED' => true, 'S_BBCODE_IMG' => true, 'S_BBCODE_FLASH' => true, 'S_LINKS_ALLOWED' => true, 'U_ACTION' => $this->u_action)); // Assigning custom bbcodes display_custom_bbcodes(); }
/** * Build Frontend with supplied options * @version 3.0.7 */ function abbc3_details() { global $user, $template, $cache, $config, $phpbb_root_path; $this->page_title = 'ABBCODES_SETINGS'; // $isfounder = ($user->data['user_type'] == USER_FOUNDER) ? true : false; $display_vars = array('title' => 'ABBCODES_SETINGS', 'lang' => array('mods/abbcode', 'mods/info_acp_abbcodes'), 'vars' => array('legend1' => 'GENERAL_OPTIONS', 'ABBC3_MOD' => array('lang' => 'ABBCODES_DISABLE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'ABBC3_BG' => array('lang' => 'ABBCODES_BG', 'validate' => 'string', 'type' => 'custom', 'function' => 'image_select', 'params' => array($this->dir . '/images/bg', '{CONFIG_VALUE}', 'config[ABBC3_BG]', true, $this->u_action, 'ABBC3_BG'), 'explain' => true), 'ABBC3_TAB' => array('lang' => 'ABBCODES_TAB', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true, 'append' => ' <span>[ <img src="' . $this->dir . '/images/dots.gif" alt="" /> ]</span>'), 'ABBC3_BOXRESIZE' => array('lang' => 'ABBCODES_BOXRESIZE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'ABBC3_UCP_MODE' => array('lang' => 'ABBCODES_UCP_MODE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'legend2' => 'ABBCODES_WIZARD', 'ABBC3_WIZARD_width' => false, 'ABBC3_WIZARD_height' => false, 'ABBC3_WIZARD_MODE' => array('lang' => 'ABBCODES_WIZARD_MODE', 'validate' => 'int', 'type' => 'custom', 'function' => 'get_radio', 'params' => array('config[ABBC3_WIZARD_MODE]', $user->lang['ABBCODES_WIZARD_SELECTOR'], $config['ABBC3_WIZARD_MODE'], 'ABBC3_WIZARD_MODE'), 'explain' => false), 'ABBC3_WIZARD' => array('lang' => 'ABBCODES_WIZARD_SIZE', 'validate' => 'int', 'type' => 'dimension:3:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'legend3' => 'ABBCODES_RESIZER', 'ABBC3_RESIZE' => array('lang' => 'ABBCODES_RESIZE', 'type' => 'string', 'explain' => true, 'append' => ' <span id="ABBC3_RESIZE">' . $user->lang['ABBCODES_JAVASCRIPT_EXPLAIN'] . '</span>'), 'ABBC3_RESIZE_METHOD' => array('lang' => 'ABBCODES_RESIZE_METHOD', 'validate' => 'string', 'type' => 'custom', 'function' => 'method_select', 'params' => array('{CONFIG_VALUE}', 'config[ABBC3_RESIZE_METHOD]', 'ABBC3_RESIZE_METHOD'), 'explain' => true), 'ABBC3_RESIZE_BAR' => array('lang' => 'ABBCODES_RESIZE_BAR', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'ABBC3_MAX_IMG_WIDTH' => array('lang' => 'ABBCODES_MAX_IMAGE_WIDTH', 'validate' => 'int', 'type' => 'text:7:15', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'ABBC3_MAX_IMG_HEIGHT' => array('lang' => 'ABBCODES_MAX_IMAGE_HEIGHT', 'validate' => 'int', 'type' => 'text:7:15', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'ABBC3_MAX_THUM_WIDTH' => array('lang' => 'ABBCODES_MAX_THUMB_WIDTH', 'validate' => 'int', 'type' => 'text:7:15', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'ABBC3_RESIZE_SIGNATURE' => array('lang' => 'ABBCODES_RESIZE_SIGNATURE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'ABBC3_MAX_SIG_WIDTH' => array('lang' => 'ABBCODES_SIG_IMAGE_WIDTH', 'validate' => 'int', 'type' => 'text:7:15', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'ABBC3_MAX_SIG_HEIGHT' => array('lang' => 'ABBCODES_SIG_IMAGE_HEIGHT', 'validate' => 'int', 'type' => 'text:7:15', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'legend4' => 'ABBC3_BBVIDEO_TAG', 'ABBC3_VIDEO' => array('lang' => 'ABBCODES_VIDEO_SIZE', 'validate' => 'int', 'type' => 'dimension:3:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']), 'ABBC3_VIDEO_width' => false, 'ABBC3_VIDEO_height' => false, 'ABBC3_VIDEO_OPTIONS' => array('lang' => 'ABBCODES_VIDEO_ALLOWED', 'validate' => 'string', 'type' => 'custom', 'function' => 'video_select', 'params' => array('{CONFIG_VALUE}', 'allowed_videos[]', $this->u_action, 'ABBC3_VIDEO_OPTIONS'), 'explain' => true), 'ABBC3_VIDEO_WMODE' => array('lang' => 'ABBCODES_VIDEO_WMODE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true))); if (isset($display_vars['lang'])) { $user->add_lang($display_vars['lang']); } $this->new_config = $config; $cfg_array = isset($_REQUEST['config']) ? request_var('config', array('' => '')) : $this->new_config; $error = array(); // We validate the complete config if whished validate_config_vars($display_vars['vars'], $cfg_array, $error); // Do not write values if there is an error if (sizeof($error)) { $this->submit = false; } // Grab global variables, re-cache if necessary if ($this->submit) { $config = $cache->obtain_config(); } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $null) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($this->submit) { set_config($config_name, $config_value); } } if ($this->submit) { $allowed_videos = request_var('allowed_videos', array(0)); $allowed_videos_string = implode(';', $allowed_videos); // The config table only stores 255 chars, so we need to prevent any instance where this might be exceeded. if (strlen($allowed_videos_string) > 255) { trigger_error($user->lang['ABBCODES_VIDEO_ERROR'] . adm_back_link($this->u_action), E_USER_WARNING); } set_config('ABBC3_VIDEO_OPTIONS', $allowed_videos_string); add_log('admin', 'LOG_CONFIG_ABBCODES'); if (!sizeof($error)) { trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } else { trigger_error($user->lang['LOG_CONFIG_ABBCODES_ERROR'] . adm_back_link($this->u_action), E_USER_WARNING); } } // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars))); unset($display_vars['vars'][$config_key]); } $board_path = generate_board_url() . '/' . str_replace($phpbb_root_path, '', $this->dir) . '/'; $template->assign_vars(array('S_EDIT' => true, 'L_TITLE_EDIT' => $user->lang['ABBCODES_SETINGS'], 'L_TITLE_EXPLAIN' => $user->lang['ABBCODES_SETINGS_EXPLAIN'], 'ICON_BASEDIR' => $this->dir . '/images/bg/', 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error), 'S_FOUNDER' => $user->data['user_type'] == USER_FOUNDER ? true : false, 'NO_FOUNDER' => $user->lang['NO_AUTH_OPERATION'], 'U_ABBC3' => $user->lang['ABBC3_HELP_ABOUT'], 'U_ACTION' => $this->u_action, 'ABBC3_VERSION' => $config['ABBC3_VERSION'], 'ADVANCEDBOX_EXIST' => @file_exists("{$this->dir}/AdvancedBox.js") ? 1 : 0, 'L_NO_EXIST_EXPLAIN_ADVANCEDBOX' => sprintf($user->lang['NO_EXIST_EXPLAIN_ADVANCEDBOX'], $board_path), 'HIGHSLIDE_EXIST' => @file_exists("{$this->dir}/highslide/highslide-full.js") ? 1 : 0, 'L_NO_EXIST_EXPLAIN_HIGHSLIDE' => sprintf($user->lang['NO_EXIST_EXPLAIN_OTHERS'], "highslide-full.js", "4.1.13", "{$board_path}highslide/", "Highslide JS", "http://highslide.com/download.php"), 'LIGHTVIEW_EXIST' => @file_exists("{$this->dir}/lightview/js/lightview.js") ? 1 : 0, 'L_NO_EXIST_EXPLAIN_LIHTVIEW' => sprintf($user->lang['NO_EXIST_EXPLAIN_OTHERS'], "lightview.js", "2.8.0", "{$board_path}lightview/js/", "Lightview", "http://www.nickstakenburg.com/projects/lightview/"), 'PRETTYPHOTO_EXIST' => @file_exists("{$this->dir}/prettyPhoto/js/jquery.prettyPhoto.js") ? 1 : 0, 'L_NO_EXIST_EXPLAIN_PRETTYPHOTO' => sprintf($user->lang['NO_EXIST_EXPLAIN_OTHERS'], "jquery.prettyPhoto.js", "3.1.5", "{$board_path}prettyPhoto/js/", "prettyPhoto", "http://www.no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/"), 'SHADOWBOX_EXIST' => @file_exists("{$this->dir}/shadowbox/shadowbox.js") ? 1 : 0, 'L_NO_EXIST_EXPLAIN_SHADOWBOX' => sprintf($user->lang['NO_EXIST_EXPLAIN_OTHERS'], "shadowbox.js", "3.0.3", "{$board_path}shadowbox/", "Shadowbox", "http://www.shadowbox-js.com/download.html"))); }
function main($id, $mode) { global $db, $user, $auth, $template; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx; $user->add_lang(array('acp/board', 'acp/mods/ajax_shoutbox')); require $phpbb_root_path . 'includes/functions_shoutbox.' . $phpEx; $action = request_var('action', ''); $submit = isset($_POST['submit']) ? true : false; $form_key = 'acp_shoutbox'; add_form_key($form_key); $this->tpl_name = 'acp_shoutbox'; /** * Validation types are: * string, int, bool, * script_path (absolute path in url - beginning with / and no trailing slash), * rpath (relative), rwpath (realtive, writable), path (relative path, but able to escape the root), wpath (writable) */ switch ($mode) { case 'settings': $this->tpl_name = 'acp_board'; $display_vars = array('title' => 'ACP_SHOUTBOX_SETTINGS', 'vars' => array('legend1' => 'GENERAL_SETTINGS', 'as_prune' => array('lang' => 'AS_PRUNE_TIME', 'validate' => 'int', 'type' => 'text:3:10', 'explain' => true, 'append' => ' ' . $user->lang['HOURS']), 'as_max_posts' => array('lang' => 'AS_MAX_POSTS', 'validate' => 'int', 'type' => 'text:3:10', 'explain' => true), 'as_flood_interval' => array('lang' => 'AS_FLOOD_INTERVAL', 'validate' => 'int', 'type' => 'text:3:10', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']), 'as_ie_nr' => array('lang' => 'AS_IE_NR', 'validate' => 'int', 'type' => 'text:3:10', 'explain' => true, 'append' => ' ' . $user->lang['MESSAGES']), 'as_non_ie_nr' => array('lang' => 'AS_NON_IE_NR', 'validate' => 'int', 'type' => 'text:3:10', 'explain' => true, 'append' => ' ' . $user->lang['MESSAGES']))); break; case 'overview': $this->page_title = 'ACP_SHOUTBOX_OVERVIEW'; $action = request_var('action', ''); if ($action) { if (!confirm_box(true)) { switch ($action) { default: $confirm = true; $confirm_lang = 'CONFIRM_OPERATION'; } if ($confirm) { confirm_box(false, $user->lang[$confirm_lang], build_hidden_fields(array('i' => $id, 'mode' => $mode, 'action' => $action))); } } else { switch ($action) { case 'purge': $sql = 'DELETE FROM ' . SHOUTBOX_TABLE; $db->sql_query($sql); add_log('admin', 'LOG_PURGE_SHOUTBOX'); break; } } } // Get current and latest version $errstr = ''; $errno = 0; $info = get_remote_file('www.paulscripts.nl', '/', 'shoutbox.txt', $errstr, $errno); if ($info !== false) { $info = explode("\n", $info); $latest_version = trim($info[0]); $up_to_date = version_compare(str_replace('rc', 'RC', strtolower(VERSION)), str_replace('rc', 'RC', strtolower($latest_version)), '<') ? false : true; if (!$up_to_date) { $template->assign_vars(array('S_ERROR' => true, 'ERROR_MSG' => sprintf($user->lang['NEW_VERSION'], VERSION, $latest_version, trim($info[1])))); } } else { $template->assign_vars(array('S_ERROR' => true, 'ERROR_MSG' => sprintf($user->lang['UNABLE_CONNECT'], $errstr))); } $sql = 'SELECT COUNT(shout_id) as total FROM ' . SHOUTBOX_TABLE; $result = $db->sql_query($sql); $total_posts = $db->sql_fetchfield('total', $result); $template->assign_vars(array('TOTAL_POSTS' => $total_posts, 'AS_VERSION' => VERSION, 'U_ACTION' => append_sid($this->u_action))); break; default: trigger_error('NO_MODE', E_USER_ERROR); break; } if ($mode == 'settings') { if (isset($display_vars['lang'])) { $user->add_lang($display_vars['lang']); } $this->new_config = $config; $cfg_array = isset($_REQUEST['config']) ? utf8_normalize_nfc(request_var('config', array('' => ''), true)) : $this->new_config; $error = array(); // We validate the complete config if whished validate_config_vars($display_vars['vars'], $cfg_array, $error); if ($submit && !check_form_key($form_key)) { $error[] = $user->lang['FORM_INVALID']; } // Do not write values if there is an error if (sizeof($error)) { $submit = false; } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $null) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($submit) { set_config($config_name, $config_value); } } if ($submit) { add_log('admin', 'LOG_AS_CONFIG_' . strtoupper($mode)); trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } $this->tpl_name = 'acp_board'; $this->page_title = $display_vars['title']; $template->assign_vars(array('L_TITLE' => $user->lang[$display_vars['title']], 'L_TITLE_EXPLAIN' => $user->lang[$display_vars['title'] . '_EXPLAIN'], 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error), 'U_ACTION' => $this->u_action)); // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars))); unset($display_vars['vars'][$config_key]); } } }
function main($id, $mode) { global $config, $user, $template, $request; $this->user = $user; $this->tpl_name = 'acp_board'; $this->page_title = 'ACP_SCREEN_SETTINGS'; $submit = $request->is_set_post('submit'); $form_key = 'top_screen'; add_form_key($form_key); $display_vars = array('title' => 'ACP_RATING_SCREEN', 'vars' => array('legend1' => 'ACP_SCREEN_SETTINGS', 'top_screen_stats' => array('lang' => 'ACP_SCREEN_STATS', 'validate' => 'int:0:600', 'type' => 'number:0:600', 'explain' => true, 'lang_explain' => 'ACP_SCREEN_EXPLAIN'), 'top_screen_rating' => array('lang' => 'ACP_SCREEN_RATING', 'validate' => 'int:0:90', 'type' => 'number:0:90', 'explain' => true, 'lang_explain' => 'ACP_SCREEN_EXPLAIN'), 'top_screen_update' => array('lang' => 'ACP_SCREEN_UPDATE', 'validate' => 'int:0:90', 'type' => 'number:0:90', 'explain' => true), 'top_screen_link' => array('lang' => 'ACP_SCREEN_LINK', 'validate' => 'string', 'type' => 'text:70:220', 'explain' => true), 'top_screen_default' => array('lang' => 'ACP_SCREEN_DEFAULT', 'validate' => 'string', 'type' => 'text:60:100', 'explain' => true), 'top_screen_extension' => array('lang' => 'ACP_SCREEN_EXTENSION', 'validate' => 'string', 'type' => 'select', 'method' => 'select_extension', 'explain' => true), 'legend2' => 'ACP_SUBMIT_CHANGES')); if (isset($display_vars['lang'])) { $user->add_lang($display_vars['lang']); } $this->new_config = $config; $cfg_array = $request->is_set('config') ? utf8_normalize_nfc($request->variable('config', array('' => ''), true)) : $this->new_config; $error = array(); // We validate the complete config if wished validate_config_vars($display_vars['vars'], $cfg_array, $error); if ($submit && !check_form_key($form_key)) { $error[] = $user->lang['FORM_INVALID']; } // Do not write values if there is an error if (sizeof($error)) { $submit = false; } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $null) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($submit) { $config->set($config_name, $config_value); } } if ($submit) { trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action)); } $this->page_title = $display_vars['title']; $template->assign_vars(array('L_TITLE' => $user->lang[$display_vars['title']], 'L_TITLE_EXPLAIN' => $user->lang[$display_vars['title'] . '_EXPLAIN'], 'S_ERROR' => sizeof($error) ? true : false, 'ERROR_MSG' => implode('<br />', $error), 'U_ACTION' => $this->u_action)); // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('S_LEGEND' => true, 'LEGEND' => isset($user->lang[$vars]) ? $user->lang[$vars] : $vars)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : ''; } } $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars); if (empty($content)) { continue; } $template->assign_block_vars('options', array('KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang[$vars['lang']] : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain, 'CONTENT' => $content)); unset($display_vars['vars'][$config_key]); } }
function main($id, $mode) { global $db, $user, $auth, $template, $config, $phpbb_root_path, $phpEx, $phpbb_log, $phpbb_container, $table_prefix, $request; $user->add_lang_ext('phpbbservices/digests', array('info_acp_common')); $submit = isset($_POST['submit']) ? true : false; $form_key = 'phpbbservices/digests'; add_form_key($form_key); /** * Validation types are: * string, int, bool, * script_path (absolute path in url - beginning with / and no trailing slash), * rpath (relative), rwpath (realtive, writable), path (relative path, but able to escape the root), wpath (writable) */ switch ($mode) { case 'digests_general': $display_vars = array('title' => 'ACP_DIGESTS_GENERAL_SETTINGS', 'vars' => array('legend1' => '', 'phpbbservices_digests_enable_log' => array('lang' => 'DIGESTS_ENABLE_LOG', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'phpbbservices_digests_show_email' => array('lang' => 'DIGESTS_SHOW_EMAIL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'phpbbservices_digests_enable_auto_subscriptions' => array('lang' => 'DIGESTS_ENABLE_AUTO_SUBSCRIPTIONS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'phpbbservices_digests_registration_field' => array('lang' => 'DIGESTS_REGISTRATION_FIELD', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'phpbbservices_digests_block_images' => array('lang' => 'DIGESTS_BLOCK_IMAGES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'phpbbservices_digests_notify_on_admin_changes' => array('lang' => 'DIGESTS_NOTIFY_ON_ADMIN_CHANGES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'phpbbservices_digests_weekly_digest_day' => array('lang' => 'DIGESTS_WEEKLY_DIGESTS_DAY', 'validate' => 'int:0:6', 'type' => 'select', 'method' => 'dow_select', 'explain' => false), 'phpbbservices_digests_max_items' => array('lang' => 'DIGESTS_MAX_ITEMS', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true), 'phpbbservices_digests_enable_custom_stylesheets' => array('lang' => 'DIGESTS_ENABLE_CUSTOM_STYLESHEET', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'phpbbservices_digests_custom_stylesheet_path' => array('lang' => 'DIGESTS_CUSTOM_STYLESHEET_PATH', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => true), 'phpbbservices_digests_from_email_address' => array('lang' => 'DIGESTS_FROM_EMAIL_ADDRESS', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => true), 'phpbbservices_digests_from_email_name' => array('lang' => 'DIGESTS_FROM_EMAIL_NAME', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => true), 'phpbbservices_digests_reply_to_email_address' => array('lang' => 'DIGESTS_REPLY_TO_EMAIL_ADDRESS', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => true), 'phpbbservices_digests_users_per_page' => array('lang' => 'DIGESTS_USERS_PER_PAGE', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true), 'phpbbservices_digests_include_forums' => array('lang' => 'DIGESTS_INCLUDE_FORUMS', 'validate' => 'string', 'type' => 'text:15:255', 'explain' => true), 'phpbbservices_digests_exclude_forums' => array('lang' => 'DIGESTS_EXCLUDE_FORUMS', 'validate' => 'string', 'type' => 'text:15:255', 'explain' => true), 'phpbbservices_digests_time_zone' => array('lang' => 'DIGESTS_TIME_ZONE', 'validate' => 'int:-12:12', 'type' => 'text:5:5', 'explain' => true))); break; case 'digests_user_defaults': $display_vars = array('title' => 'ACP_DIGESTS_USER_DEFAULT_SETTINGS', 'vars' => array('legend1' => '', 'phpbbservices_digests_user_digest_registration' => array('lang' => 'DIGESTS_USER_DIGESTS_REGISTRATION', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'phpbbservices_digests_user_digest_type' => array('lang' => 'DIGESTS_USER_DIGESTS_TYPE', 'validate' => 'string', 'type' => 'select', 'method' => 'digest_type_select', 'explain' => false), 'phpbbservices_digests_user_digest_format' => array('lang' => 'DIGESTS_USER_DIGESTS_STYLE', 'validate' => 'string', 'type' => 'select', 'method' => 'digest_style_select', 'explain' => false), 'phpbbservices_digests_user_digest_send_hour_gmt' => array('lang' => 'DIGESTS_USER_DIGESTS_SEND_HOUR_GMT', 'validate' => 'int:-1:23', 'type' => 'select', 'method' => 'digest_send_hour_gmt', 'explain' => false), 'phpbbservices_digests_user_digest_filter_type' => array('lang' => 'DIGESTS_USER_DIGESTS_FILTER_TYPE', 'validate' => 'string', 'type' => 'select', 'method' => 'digest_filter_type', 'explain' => false), 'phpbbservices_digests_user_check_all_forums' => array('lang' => 'DIGESTS_USER_DIGESTS_CHECK_ALL_FORUMS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'phpbbservices_digests_user_digest_max_posts' => array('lang' => 'DIGESTS_USER_DIGESTS_MAX_POSTS', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true), 'phpbbservices_digests_user_digest_min_words' => array('lang' => 'DIGESTS_USER_DIGESTS_MIN_POSTS', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true), 'phpbbservices_digests_user_digest_new_posts_only' => array('lang' => 'DIGESTS_USER_DIGESTS_NEW_POSTS_ONLY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'phpbbservices_digests_user_digest_show_mine' => array('lang' => 'DIGESTS_USER_DIGESTS_SHOW_MINE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'phpbbservices_digests_user_digest_remove_foes' => array('lang' => 'DIGESTS_USER_DIGESTS_SHOW_FOES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'phpbbservices_digests_user_digest_show_pms' => array('lang' => 'DIGESTS_USER_DIGESTS_SHOW_PMS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'phpbbservices_digests_user_digest_pm_mark_read' => array('lang' => 'DIGESTS_USER_DIGESTS_PM_MARK_READ', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'phpbbservices_digests_user_digest_sortby' => array('lang' => 'DIGESTS_USER_DIGESTS_SORT_ORDER', 'validate' => 'string', 'type' => 'select', 'method' => 'digest_post_sort_order', 'explain' => false), 'phpbbservices_digests_user_digest_max_display_words' => array('lang' => 'DIGESTS_USER_DIGESTS_MAX_DISPLAY_WORDS', 'validate' => 'int:-1', 'type' => 'text:5:5', 'explain' => true), 'phpbbservices_digests_user_digest_send_on_no_posts' => array('lang' => 'DIGESTS_USER_DIGESTS_SEND_ON_NO_POSTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'phpbbservices_digests_user_digest_reset_lastvisit' => array('lang' => 'DIGESTS_USER_DIGESTS_RESET_LASTVISIT', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'phpbbservices_digests_user_digest_attachments' => array('lang' => 'DIGESTS_USER_DIGESTS_ATTACHMENTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'phpbbservices_digests_user_digest_block_images' => array('lang' => 'DIGESTS_USER_DIGESTS_BLOCK_IMAGES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'phpbbservices_digests_user_digest_toc' => array('lang' => 'DIGESTS_USER_DIGESTS_TOC', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false))); break; case 'digests_edit_subscribers': $display_vars = array('title' => 'ACP_DIGESTS_EDIT_SUBSCRIBERS', 'vars' => array('legend1' => '')); // Grab some URL parameters $member = $request->variable('member', '', true); $start = $request->variable('start', 0); $subscribe = $request->variable('subscribe', 'a', true); $sortby = $request->variable('sortby', 'u', true); $sortorder = $request->variable('sortorder', 'a', true); // Translate time zone information $template->assign_vars(array('L_DIGESTS_HOUR_SENT' => $user->lang('DIGESTS_HOUR_SENT', $config['phpbbservices_digests_time_zone']), 'L_DIGESTS_BASED_ON' => $user->lang('DIGESTS_BASED_ON', $config['phpbbservices_digests_time_zone']), 'S_EDIT_SUBSCRIBERS' => true)); // Set up subscription filter $all_selected = $stopped_subscribing = $subscribe_selected = $unsubscribe_selected = ''; switch ($subscribe) { case 'u': $subscribe_sql = "user_digest_type = 'NONE' AND user_digest_has_unsubscribed = 0 AND "; $unsubscribe_selected = ' selected="selected"'; $context = $user->lang('DIGESTS_UNSUBSCRIBED'); break; case 't': $subscribe_sql = "user_digest_type = 'NONE' AND user_digest_has_unsubscribed = 1 AND"; $stopped_subscribing = ' selected="selected"'; $context = $user->lang('DIGESTS_STOPPED_SUBSCRIBING'); break; case 's': $subscribe_sql = "user_digest_type <> 'NONE' AND user_digest_send_hour_gmt >= 0 AND user_digest_send_hour_gmt < 24 AND user_digest_has_unsubscribed = 0 AND"; $subscribe_selected = ' selected="selected"'; $context = $user->lang('DIGESTS_SUBSCRIBED'); break; case 'a': default: $subscribe_sql = ''; $all_selected = ' selected="selected"'; $context = $user->lang('DIGESTS_ALL'); break; } // Set up sort by column $last_sent_selected = $has_unsubscribed_selected = $username_selected = $frequency_selected = $format_selected = $hour_selected = $lastvisit_selected = $email_selected = ''; switch ($sortby) { case 'f': $sort_by_sql = 'user_digest_type %s, lower(username) %s'; $frequency_selected = ' selected="selected"'; break; case 'e': $sort_by_sql = 'user_email %s, lower(username) %s'; $email_selected = ' selected="selected"'; break; case 's': $sort_by_sql = 'user_digest_format %s, lower(username) %s'; $format_selected = ' selected="selected"'; break; case 'h': $sort_by_sql = 'send_hour_board %s, lower(username) %s'; $hour_selected = ' selected="selected"'; break; case 'l': $sort_by_sql = 'user_lastvisit %s, lower(username) %s'; $lastvisit_selected = ' selected="selected"'; break; case 'b': $sort_by_sql = 'user_digest_has_unsubscribed %s, lower(username) %s'; $has_unsubscribed_selected = ' selected="selected"'; break; case 't': $sort_by_sql = 'user_digest_last_sent %s, lower(username) %s'; $last_sent_selected = ' selected="selected"'; break; case 'u': default: $sort_by_sql = 'lower(username) %s'; $username_selected = ' selected="selected"'; break; } // Set up sort order $ascending_selected = $descending_selected = ''; switch ($sortorder) { case 'd': $order_by_sql = 'DESC'; $descending_selected = ' selected="selected"'; break; case 'a': default: $order_by_sql = 'ASC'; $ascending_selected = ' selected="selected"'; break; } // Set up member search SQL $match_any_chars = $db->get_any_char(); $member_sql = $member != '' ? " username_clean " . $db->sql_like_expression($match_any_chars . utf8_case_fold_nfc($member) . $match_any_chars) . " AND " : ''; // Get the total rows for pagination purposes $sql_array = array('SELECT' => 'count(*) AS total_users', 'FROM' => array(USERS_TABLE => 'u'), 'WHERE' => "{$subscribe_sql} {$member_sql} user_type <> " . USER_IGNORE); $sql = $db->sql_build_query('SELECT', $sql_array); $result = $db->sql_query($sql); // Get the total users, this is a single row, single field. $total_users = $db->sql_fetchfield('total_users'); // Free the result $db->sql_freeresult($result); // Create pagination logic $pagination = $phpbb_container->get('pagination'); $base_url = "index.php?i=-phpbbservices-digests-acp-main_module&mode=digests_edit_subscribers&sortby={$sortby}"; $base_url = append_sid($base_url); $pagination->generate_template_pagination($base_url, 'pagination', 'start', $total_users, $config['phpbbservices_digests_users_per_page'], $start); // Stealing some code from my Smartfeed extension so I can get a list of forums that a particular user can access // We need to know which auth_option_id corresponds to the forum read privilege (f_read) and forum list (f_list) privilege. $auth_options = array('f_read', 'f_list'); $sql_array = array('SELECT' => 'auth_option, auth_option_id', 'FROM' => array(ACL_OPTIONS_TABLE => 'o'), 'WHERE' => $db->sql_in_set('auth_option', $auth_options)); $sql = $db->sql_build_query('SELECT', $sql_array); $result = $db->sql_query($sql); $read_id = ''; while ($row = $db->sql_fetchrow($result)) { if ($row['auth_option'] == 'f_read') { $read_id = $row['auth_option_id']; } } $db->sql_freeresult($result); // Query be gone! // Fill in some non-block template variables $template->assign_vars(array('ALL_SELECTED' => $all_selected, 'ASCENDING_SELECTED' => $ascending_selected, 'DESCENDING_SELECTED' => $descending_selected, 'DIGESTS_HTML_VALUE' => constants::DIGESTS_HTML_VALUE, 'DIGESTS_HTML_CLASSIC_VALUE' => constants::DIGESTS_HTML_CLASSIC_VALUE, 'DIGESTS_PLAIN_VALUE' => constants::DIGESTS_PLAIN_VALUE, 'DIGESTS_PLAIN_CLASSIC_VALUE' => constants::DIGESTS_PLAIN_CLASSIC_VALUE, 'DIGESTS_FORMAT_TEXT_VALUE' => constants::DIGESTS_TEXT_VALUE, 'EMAIL_SELECTED' => $email_selected, 'FORMAT_SELECTED' => $format_selected, 'FREQUENCY_SELECTED' => $frequency_selected, 'HAS_UNSUBSCRIBED_SELECTED' => $has_unsubscribed_selected, 'HOUR_SELECTED' => $hour_selected, 'IMAGE_PATH' => $phpbb_root_path . 'ext/phpbbservices/digests/adm/images/', 'LAST_SENT_SELECTED' => $last_sent_selected, 'LASTVISIT_SELECTED' => $lastvisit_selected, 'L_CONTEXT' => $context, 'MEMBER' => $member, 'STOPPED_SUBSCRIBING_SELECTED' => $stopped_subscribing, 'SUBSCRIBE_SELECTED' => $subscribe_selected, 'TOTAL_USERS' => $user->lang('DIGESTS_LIST_USERS', (int) $total_users), 'UNSUBSCRIBE_SELECTED' => $unsubscribe_selected, 'USERNAME_SELECTED' => $username_selected)); $board_offset_hours = (int) $config['phpbbservices_digests_time_zone']; $sql_array = array('SELECT' => '*, CASE WHEN user_digest_send_hour_gmt + ' . $board_offset_hours . ' >= 24 THEN user_digest_send_hour_gmt + ' . $board_offset_hours . ' - 24 WHEN user_digest_send_hour_gmt + ' . $board_offset_hours . ' < 0 THEN user_digest_send_hour_gmt + ' . $board_offset_hours . ' + 24 ELSE user_digest_send_hour_gmt + ' . $board_offset_hours . ' END AS send_hour_board', 'FROM' => array(USERS_TABLE => 'u'), 'WHERE' => "{$subscribe_sql} {$member_sql} user_type <> " . USER_IGNORE, 'ORDER_BY' => sprintf($sort_by_sql, $order_by_sql, $order_by_sql)); $sql = $db->sql_build_query('SELECT', $sql_array); $result = $db->sql_query_limit($sql, $config['phpbbservices_digests_users_per_page'], $start); while ($row = $db->sql_fetchrow($result)) { // Make some translations into something more readable switch ($row['user_digest_type']) { case 'DAY': $digest_type = $user->lang('DIGESTS_DAILY'); break; case 'WEEK': $digest_type = $user->lang('DIGESTS_WEEKLY'); break; case 'MNTH': $digest_type = $user->lang('DIGESTS_MONTHLY'); break; default: $digest_type = $user->lang('DIGESTS_UNKNOWN'); break; } switch ($row['user_digest_format']) { case constants::DIGESTS_HTML_VALUE: $digest_format = $user->lang('DIGESTS_FORMAT_HTML'); break; case constants::DIGESTS_HTML_CLASSIC_VALUE: $digest_format = $user->lang('DIGESTS_FORMAT_HTML_CLASSIC'); break; case constants::DIGESTS_PLAIN_VALUE: $digest_format = $user->lang('DIGESTS_FORMAT_PLAIN'); break; case constants::DIGESTS_PLAIN_CLASSIC_VALUE: $digest_format = $user->lang('DIGESTS_FORMAT_PLAIN_CLASSIC'); break; case constants::DIGESTS_TEXT_VALUE: $digest_format = $user->lang('DIGESTS_FORMAT_TEXT'); break; default: $digest_format = $user->lang('DIGESTS_UNKNOWN'); break; } // Calculate a digest send hour in board time $send_hour_board = str_replace('.', ':', floor($row['user_digest_send_hour_gmt']) + $board_offset_hours); if ($send_hour_board >= 24) { $send_hour_board = $send_hour_board - 24; } else { if ($send_hour_board < 0) { $send_hour_board = $send_hour_board + 24; } } // Create an array of GMT offsets from board time zone $board_offset = array(); for ($i = 0; $i < 24; $i++) { if ($i - $board_offset_hours < 0) { $board_offset[$i] = $i - $board_offset_hours + 24; } else { if ($i - $board_offset_hours > 23) { $board_offset[$i] = $i - $board_offset_hours - 24; } else { $board_offset[$i] = $i - $board_offset_hours; } } } $sql_array = array('SELECT' => 'forum_id ', 'FROM' => array($table_prefix . constants::DIGESTS_SUBSCRIBED_FORUMS_TABLE => 'sf'), 'WHERE' => 'user_id = ' . (int) $row['user_id']); $sql2 = $db->sql_build_query('SELECT', $sql_array); $result2 = $db->sql_query($sql2); $subscribed_forums = $db->sql_fetchrowset($result2); $db->sql_freeresult(); $all_by_default = sizeof($subscribed_forums) == 0 ? true : false; $template->assign_block_vars('digests_edit_subscribers', array('1ST' => $row['user_digest_filter_type'] == constants::DIGESTS_FIRST, 'ALL' => $row['user_digest_filter_type'] == constants::DIGESTS_ALL, 'BM' => $row['user_digest_filter_type'] == constants::DIGESTS_BOOKMARKS, 'BOARD_OFFSET_0' => $board_offset[0], 'BOARD_OFFSET_1' => $board_offset[1], 'BOARD_OFFSET_2' => $board_offset[2], 'BOARD_OFFSET_3' => $board_offset[3], 'BOARD_OFFSET_4' => $board_offset[4], 'BOARD_OFFSET_5' => $board_offset[5], 'BOARD_OFFSET_6' => $board_offset[6], 'BOARD_OFFSET_7' => $board_offset[7], 'BOARD_OFFSET_8' => $board_offset[8], 'BOARD_OFFSET_9' => $board_offset[9], 'BOARD_OFFSET_10' => $board_offset[10], 'BOARD_OFFSET_11' => $board_offset[11], 'BOARD_OFFSET_12' => $board_offset[12], 'BOARD_OFFSET_13' => $board_offset[13], 'BOARD_OFFSET_14' => $board_offset[14], 'BOARD_OFFSET_15' => $board_offset[15], 'BOARD_OFFSET_16' => $board_offset[16], 'BOARD_OFFSET_17' => $board_offset[17], 'BOARD_OFFSET_18' => $board_offset[18], 'BOARD_OFFSET_19' => $board_offset[19], 'BOARD_OFFSET_20' => $board_offset[20], 'BOARD_OFFSET_21' => $board_offset[21], 'BOARD_OFFSET_22' => $board_offset[22], 'BOARD_OFFSET_23' => $board_offset[23], 'DIGEST_MAX_SIZE' => $row['user_digest_max_display_words'], 'L_DIGEST_CHANGE_SUBSCRIPTION' => $row['user_digest_type'] != 'NONE' ? $user->lang('DIGESTS_UNSUBSCRIBE') : $user->lang('DIGESTS_SUBSCRIBE_LITERAL'), 'S_ALL_BY_DEFAULT' => $all_by_default, 'S_ATTACHMENTS_NO_CHECKED' => $row['user_digest_attachments'] == 0, 'S_ATTACHMENTS_YES_CHECKED' => $row['user_digest_attachments'] == 1, 'S_BLOCK_IMAGES_NO_CHECKED' => $row['user_digest_block_images'] == 0, 'S_BLOCK_IMAGES_YES_CHECKED' => $row['user_digest_block_images'] == 1, 'S_BOARD_SELECTED' => $row['user_digest_sortby'] == constants::DIGESTS_SORTBY_BOARD, 'S_DIGEST_FILTER_FOES_CHECKED_NO' => $row['user_digest_remove_foes'] == 0, 'S_DIGEST_FILTER_FOES_CHECKED_YES' => $row['user_digest_remove_foes'] == 1, 'S_DIGEST_DAY_CHECKED' => $row['user_digest_type'] == constants::DIGESTS_DAILY_VALUE, 'S_DIGEST_HTML_CHECKED' => $row['user_digest_format'] == constants::DIGESTS_HTML_VALUE, 'S_DIGEST_HTML_CLASSIC_CHECKED' => $row['user_digest_format'] == constants::DIGESTS_HTML_CLASSIC_VALUE, 'S_DIGEST_MONTH_CHECKED' => $row['user_digest_type'] == constants::DIGESTS_MONTHLY_VALUE, 'S_DIGEST_NEW_POSTS_ONLY_CHECKED_NO' => $row['user_digest_new_posts_only'] == 0, 'S_DIGEST_NEW_POSTS_ONLY_CHECKED_YES' => $row['user_digest_new_posts_only'] == 1, 'S_DIGEST_NONE_CHECKED' => $row['user_digest_type'] == constants::DIGESTS_NONE_VALUE, 'S_DIGEST_NO_POST_TEXT_CHECKED_NO' => $row['user_digest_no_post_text'] == 0, 'S_DIGEST_NO_POST_TEXT_CHECKED_YES' => $row['user_digest_no_post_text'] == 1, 'S_DIGEST_PLAIN_CHECKED' => $row['user_digest_format'] == constants::DIGESTS_PLAIN_VALUE, 'S_DIGEST_PLAIN_CLASSIC_CHECKED' => $row['user_digest_format'] == constants::DIGESTS_PLAIN_CLASSIC_VALUE, 'S_DIGEST_PM_MARK_READ_CHECKED_NO' => $row['user_digest_pm_mark_read'] == 0, 'S_DIGEST_PM_MARK_READ_CHECKED_YES' => $row['user_digest_pm_mark_read'] == 1, 'S_DIGEST_POST_ANY' => $row['user_digest_filter_type'] == constants::DIGESTS_ALL, 'S_DIGEST_POST_BM' => $row['user_digest_filter_type'] == constants::DIGESTS_BOOKMARKS, 'S_DIGEST_POST_FIRST' => $row['user_digest_filter_type'] == constants::DIGESTS_FIRST, 'S_DIGEST_PRIVATE_MESSAGES_IN_DIGEST_NO' => $row['user_digest_show_pms'] == 0, 'S_DIGEST_PRIVATE_MESSAGES_IN_DIGEST_YES' => $row['user_digest_show_pms'] == 1, 'S_DIGEST_SEND_HOUR_0_CHECKED' => $send_hour_board == 0, 'S_DIGEST_SEND_HOUR_1_CHECKED' => $send_hour_board == 1, 'S_DIGEST_SEND_HOUR_2_CHECKED' => $send_hour_board == 2, 'S_DIGEST_SEND_HOUR_3_CHECKED' => $send_hour_board == 3, 'S_DIGEST_SEND_HOUR_4_CHECKED' => $send_hour_board == 4, 'S_DIGEST_SEND_HOUR_5_CHECKED' => $send_hour_board == 5, 'S_DIGEST_SEND_HOUR_6_CHECKED' => $send_hour_board == 6, 'S_DIGEST_SEND_HOUR_7_CHECKED' => $send_hour_board == 7, 'S_DIGEST_SEND_HOUR_8_CHECKED' => $send_hour_board == 8, 'S_DIGEST_SEND_HOUR_9_CHECKED' => $send_hour_board == 9, 'S_DIGEST_SEND_HOUR_10_CHECKED' => $send_hour_board == 10, 'S_DIGEST_SEND_HOUR_11_CHECKED' => $send_hour_board == 11, 'S_DIGEST_SEND_HOUR_12_CHECKED' => $send_hour_board == 12, 'S_DIGEST_SEND_HOUR_13_CHECKED' => $send_hour_board == 13, 'S_DIGEST_SEND_HOUR_14_CHECKED' => $send_hour_board == 14, 'S_DIGEST_SEND_HOUR_15_CHECKED' => $send_hour_board == 15, 'S_DIGEST_SEND_HOUR_16_CHECKED' => $send_hour_board == 16, 'S_DIGEST_SEND_HOUR_17_CHECKED' => $send_hour_board == 17, 'S_DIGEST_SEND_HOUR_18_CHECKED' => $send_hour_board == 18, 'S_DIGEST_SEND_HOUR_19_CHECKED' => $send_hour_board == 19, 'S_DIGEST_SEND_HOUR_20_CHECKED' => $send_hour_board == 20, 'S_DIGEST_SEND_HOUR_21_CHECKED' => $send_hour_board == 21, 'S_DIGEST_SEND_HOUR_22_CHECKED' => $send_hour_board == 22, 'S_DIGEST_SEND_HOUR_23_CHECKED' => $send_hour_board == 23, 'S_DIGEST_SEND_ON_NO_POSTS_NO_CHECKED' => $row['user_digest_send_on_no_posts'] == 0, 'S_DIGEST_SEND_ON_NO_POSTS_YES_CHECKED' => $row['user_digest_send_on_no_posts'] == 1, 'S_DIGEST_SHOW_MINE_CHECKED_YES' => $row['user_digest_show_mine'] == 1, 'S_DIGEST_SHOW_MINE_CHECKED_NO' => $row['user_digest_show_mine'] == 0, 'S_DIGEST_TEXT_CHECKED' => $row['user_digest_format'] == constants::DIGESTS_TEXT_VALUE, 'S_DIGEST_WEEK_CHECKED' => $row['user_digest_type'] == constants::DIGESTS_WEEKLY_VALUE, 'S_LASTVISIT_NO_CHECKED' => $row['user_digest_reset_lastvisit'] == 0, 'S_LASTVISIT_YES_CHECKED' => $row['user_digest_reset_lastvisit'] == 1, 'S_POSTDATE_DESC_SELECTED' => $row['user_digest_sortby'] == constants::DIGESTS_SORTBY_POSTDATE_DESC, 'S_POSTDATE_SELECTED' => $row['user_digest_sortby'] == constants::DIGESTS_SORTBY_POSTDATE, 'S_STANDARD_DESC_SELECTED' => $row['user_digest_sortby'] == constants::DIGESTS_SORTBY_STANDARD_DESC, 'S_STANDARD_SELECTED' => $row['user_digest_sortby'] == constants::DIGESTS_SORTBY_STANDARD, 'S_TOC_NO_CHECKED' => $row['user_digest_toc'] == 0, 'S_TOC_YES_CHECKED' => $row['user_digest_toc'] == 1, 'USERNAME' => $row['username'], 'USER_DIGEST_FORMAT' => $digest_format, 'USER_DIGEST_HAS_UNSUBSCRIBED' => $row['user_digest_has_unsubscribed'] ? 'x' : '-', 'USER_DIGEST_LAST_SENT' => $row['user_digest_last_sent'] == 0 ? $user->lang('DIGESTS_NO_DIGESTS_SENT') : date($config['default_dateformat'], $row['user_digest_last_sent'] + 60 * 60 * ($config['phpbbservices_digests_time_zone'] - date('O') / 100)), 'USER_DIGEST_MAX_DISPLAY_WORDS' => $row['user_digest_max_display_words'], 'USER_DIGEST_MAX_POSTS' => $row['user_digest_max_posts'], 'USER_DIGEST_MIN_WORDS' => $row['user_digest_min_words'], 'USER_DIGEST_TYPE' => $digest_type, 'USER_EMAIL' => $row['user_email'], 'USER_ID' => $row['user_id'], 'USER_LAST_VISIT' => $row['user_lastvisit'] == 0 ? $user->lang('DIGESTS_NEVER_VISITED') : date($config['default_dateformat'], $row['user_lastvisit'] + 60 * 60 * ($config['phpbbservices_digests_time_zone'] - date('O') / 100)), 'USER_SUBSCRIBE_UNSUBSCRIBE_FLAG' => $row['user_digest_type'] != 'NONE' ? 'u' : 's')); // Now let's get this user's forum permissions. Note that non-registered, robots etc. get a list of public forums // with read permissions. unset($allowed_forums, $forum_array, $parent_stack); $forum_array = $auth->acl_raw_data_single_user($row['user_id']); foreach ($forum_array as $key => $value) { foreach ($value as $auth_option_id => $auth_setting) { if ($auth_option_id == $read_id) { if ($auth_setting == 1) { $allowed_forums[] = $key; } } } } // Now we will display the forums that this user can read, as well as any parent forums, checking those if any that // the user has subscribed to. if (isset($allowed_forums)) { $sql_array = array('SELECT' => 'forum_name, forum_id, parent_id, forum_type', 'FROM' => array(FORUMS_TABLE => 'f'), 'WHERE' => $db->sql_in_set('forum_id', $allowed_forums) . ' AND forum_type <> ' . FORUM_LINK . "\n\t\t\t\t\t\t\t\t\tAND forum_password = ''", 'ORDER_BY' => 'left_id ASC'); $sql2 = $db->sql_build_query('SELECT', $sql_array); $result2 = $db->sql_query($sql2); $current_level = 0; // How deeply nested are we at the moment $parent_stack = array(); // Holds a stack showing the current parent_id of the forum $parent_stack[] = 0; // 0, the first value in the stack, represents the <div_0> element, a container holding all the categories and forums in the template while ($row2 = $db->sql_fetchrow($result2)) { if ((int) $row2['parent_id'] != (int) end($parent_stack) || end($parent_stack) == 0) { if (in_array($row2['parent_id'], $parent_stack)) { // If parent is in the stack, then pop the stack until the parent is found, otherwise push stack adding the current parent. This creates a </div> while ((int) $row2['parent_id'] != (int) end($parent_stack)) { array_pop($parent_stack); $current_level--; // Need to close a category level here $template->assign_block_vars('digests_edit_subscribers.forums', array('S_DIV_CLOSE' => true, 'S_DIV_OPEN' => false, 'S_PRINT' => false)); } } else { // If the parent is not in the stack, then push the parent_id on the stack. This is also a trigger to indent the block. This creates a <div> array_push($parent_stack, (int) $row2['parent_id']); $current_level++; // Need to add a category level here $template->assign_block_vars('digests_edit_subscribers.forums', array('CAT_ID' => 'div_' . $row2['parent_id'], 'S_DIV_CLOSE' => false, 'S_DIV_OPEN' => true, 'S_PRINT' => false)); } } // This code prints the forum or category, which will exist inside the previously created <div> block // Check this forum's checkbox? Only if they have forum subscriptions if (!$all_by_default) { $check = false; foreach ($subscribed_forums as $this_row) { if ($this_row['forum_id'] == $row2['forum_id']) { $check = true; break; } } } else { $check = true; } $template->assign_block_vars('digests_edit_subscribers.forums', array('FORUM_LABEL' => $row2['forum_name'], 'FORUM_NAME' => 'elt_' . (int) $row2['forum_id'] . '_' . (int) $row2['parent_id'], 'S_FORUM_SUBSCRIBED' => $check, 'S_IS_FORUM' => !($row2['forum_type'] == FORUM_CAT), 'S_PRINT' => true)); } $db->sql_freeresult($result2); // Now out of the loop, it is important to remember to close any open <div> tags. Typically there is at least one. while ((int) $row2['parent_id'] != (int) end($parent_stack)) { array_pop($parent_stack); $current_level--; // Need to close the <div> tag $template->assign_block_vars('digests_edit_subscribers.forums', array('S_DIV_CLOSE' => true, 'S_DIV_OPEN' => false, 'S_PRINT' => false)); } } } $db->sql_freeresult($result); // Query be gone! break; case 'digests_balance_load': $display_vars = array('title' => 'ACP_DIGESTS_BALANCE_LOAD', 'vars' => array('legend1' => '')); // Translate time zone information $template->assign_vars(array('L_DIGESTS_HOUR_SENT' => $user->lang('DIGESTS_HOUR_SENT', $config['phpbbservices_digests_time_zone']), 'S_BALANCE_LOAD' => true)); $sql_array = array('SELECT' => 'user_digest_send_hour_gmt AS hour, count(*) AS hour_count', 'FROM' => array(USERS_TABLE => 'u'), 'WHERE' => "user_digest_type <> '" . constants::DIGESTS_NONE_VALUE . "' AND user_type <> " . USER_IGNORE, 'GROUP_BY' => 'user_digest_send_hour_gmt', 'ORDER_BY' => '1'); $sql = $db->sql_build_query('SELECT', $sql_array); $result = $db->sql_query($sql); $rowset = $db->sql_fetchrowset($result); for ($i = 0; $i < 24; $i++) { // Convert digest hour to GMT $hour_gmt = floor($i - $config['phpbbservices_digests_time_zone']); if ($hour_gmt < 0) { $hour_gmt = $hour_gmt + 24; } else { if ($hour_gmt > 23) { $hour_gmt = $hour_gmt - 24; } } // If there are digest counts for this GMT hour, show it, otherwise show zero (no digests for this GMT hour) $hour_count = 0; if (isset($rowset)) { foreach ($rowset as $row) { if (floor($row['hour']) == $hour_gmt) { $hour_count = $row['hour_count']; break; } } } $template->assign_block_vars('digests_balance_load', array('HOUR' => $i, 'HOUR_COUNT' => $hour_count)); } $db->sql_freeresult($result); // Query be gone! break; case 'digests_mass_subscribe_unsubscribe': $display_vars = array('title' => 'ACP_DIGESTS_MASS_SUBSCRIBE_UNSUBSCRIBE', 'vars' => array('legend1' => '', 'phpbbservices_digests_enable_subscribe_unsubscribe' => array('lang' => 'DIGESTS_ENABLE_SUBSCRIBE_UNSUBSCRIBE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'phpbbservices_digests_subscribe_all' => array('lang' => 'DIGESTS_SUBSCRIBE_ALL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'phpbbservices_digests_include_admins' => array('lang' => 'DIGESTS_INCLUDE_ADMINS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true))); break; case 'digests_reset_cron_run_time': $display_vars = array('title' => 'ACP_DIGESTS_RESET_CRON_RUN_TIME', 'vars' => array('legend1' => '', 'phpbbservices_digests_enable_subscribe_unsubscribe' => array('lang' => 'DIGESTS_RESET_CRON_RUN_TIME', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true))); break; case 'digests_test': $display_vars = array('title' => 'ACP_DIGESTS_TEST', 'vars' => array('legend1' => 'GENERAL_OPTIONS', 'phpbbservices_digests_test' => array('lang' => 'DIGESTS_RUN_TEST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'phpbbservices_digests_test_spool' => array('lang' => 'DIGESTS_RUN_TEST_SPOOL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'phpbbservices_digests_test_clear_spool' => array('lang' => 'DIGESTS_RUN_TEST_CLEAR_SPOOL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'phpbbservices_digests_test_send_to_admin' => array('lang' => 'DIGESTS_RUN_TEST_SEND_TO_ADMIN', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'phpbbservices_digests_test_email_address' => array('lang' => 'DIGESTS_RUN_TEST_EMAIL_ADDRESS', 'validate' => 'string', 'type' => 'email:25:100', 'explain' => true), 'legend2' => 'DIGESTS_RUN_TEST_OPTIONS', 'phpbbservices_digests_test_time_use' => array('lang' => 'DIGESTS_RUN_TEST_TIME_USE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'phpbbservices_digests_test_year' => array('lang' => 'DIGESTS_RUN_TEST_YEAR', 'validate' => 'int:2000:2030', 'type' => 'text:4:4', 'explain' => true), 'phpbbservices_digests_test_month' => array('lang' => 'DIGESTS_RUN_TEST_MONTH', 'validate' => 'int:1:12', 'type' => 'text:2:2', 'explain' => true), 'phpbbservices_digests_test_day' => array('lang' => 'DIGESTS_RUN_TEST_DAY', 'validate' => 'int:1:31', 'type' => 'text:2:2', 'explain' => true), 'phpbbservices_digests_test_hour' => array('lang' => 'DIGESTS_RUN_TEST_HOUR', 'validate' => 'int:0:23', 'type' => 'text:2:2', 'explain' => true))); break; default: trigger_error('NO_MODE', E_USER_ERROR); break; } $this->new_config = $config; $cfg_array = isset($_REQUEST['config']) ? $request->variable('config', array('' => ''), true) : $this->new_config; $error = array(); // We validate the complete config if wished validate_config_vars($display_vars['vars'], $cfg_array, $error); if ($submit && !check_form_key($form_key)) { $error[] = $user->lang('FORM_INVALID'); } // Do not write values if there is an error if (sizeof($error)) { $submit = false; } // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to... foreach ($display_vars['vars'] as $config_name => $data) { if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false) { continue; } $this->new_config[$config_name] = $config_value = $cfg_array[$config_name]; if ($submit) { $config->set($config_name, $config_value); } } if ($submit && $mode == 'digests_edit_subscribers') { // The "selected" input control indicates whether to do mass actions or not. With mass actions only the select control and // the mark checkboxes matter. Other controls are ignored. $selected = $request->variable('selected', 'IGNORE', true); $mass_action = $selected == 'IGNORE' ? false : true; $use_defaults = false; $use_defaults_pass = false; unset($sql_ary, $sql_ary2); // Get the entire request variables as an array for parsing unset($requests_vars); $request_vars = $request->get_super_global(\phpbb\request\request_interface::POST); // If a mass action, we want to remove all post variables with the user-99-col_name pattern. It makes the logic easier by effectively ignoring them. if ($mass_action) { foreach ($request_vars as $key => $value) { if (substr($key, 0, 5) == 'user-' && strpos($key, '-', 5) > 5) { unset($request_vars[$key]); } } } // Now let's sort the request variables so we process one can user at a time ksort($request_vars); // Set some flags $current_user_id = NULL; foreach ($request_vars as $name => $value) { // We only care if the request variable starts with "user-". if (substr($name, 0, 5) == 'user-') { // Parse for the user_id, which is embedded in the form field name. Format is user-99-column_name where 99 // is the user id. The mark switch is in the form user-99. $delimiter_pos = strpos($name, '-', 5); if ($delimiter_pos === false) { // This is the mark all checkbox for a given user $delimiter_pos = strlen($name); } $user_id = substr($name, 5, $delimiter_pos - 5); $var_part = substr($name, $delimiter_pos + 1); if ($current_user_id === NULL) { $current_user_id = $user_id; } else { if ($current_user_id !== $user_id) { // Save this subscriber's digest settings if (isset($sql_ary) && sizeof($sql_ary) > 0) { $sql = 'UPDATE ' . USERS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . ' WHERE user_id = ' . (int) $current_user_id; $db->sql_query($sql); } // If there are any individual forum subscriptions for this user, remove the old ones. $sql = 'DELETE FROM ' . $table_prefix . constants::DIGESTS_SUBSCRIBED_FORUMS_TABLE . ' WHERE user_id = ' . (int) $current_user_id; $db->sql_query($sql); // Now save the individual forum subscriptions, if any if (!$mass_action && isset($sql_ary2) && sizeof($sql_ary2) > 0) { $db->sql_multi_insert($table_prefix . constants::DIGESTS_SUBSCRIBED_FORUMS_TABLE, $sql_ary2); } // Also want to save some information to an array to be used for sending emails to affected users. $digest_notify_list[] = $current_user_id; // We need to set these variables so we can detect if individual forum subscriptions will need to be processed. $current_user_id = $user_id; $use_defaults = false; $use_defaults_pass = false; unset($sql_ary, $sql_ary2); } } if ($mass_action) { // We need to save the digest settings for this mass user. There should only be one request variable for the user. // Do a mass action only if the mark variable for the user_id is checked if ($value == 'on') { switch ($selected) { case constants::DIGESTS_DEFAULT_VALUE: // Use the default digest type $sql_ary['user_digest_type'] = $config['phpbbservices_digests_user_digest_type']; break; case constants::DIGESTS_NONE_VALUE: // Remove user's subscription (mass action) $sql_ary['user_digest_type'] = constants::DIGESTS_NONE_VALUE; break; default: break; } // Create a digest subscription using board defaults $sql_ary['user_digest_format'] = $config['phpbbservices_digests_user_digest_format']; $sql_ary['user_digest_show_mine'] = $config['phpbbservices_digests_user_digest_show_mine'] == 1 ? 0 : 1; $sql_ary['user_digest_send_on_no_posts'] = $config['phpbbservices_digests_user_digest_send_on_no_posts']; $sql_ary['user_digest_send_hour_gmt'] = $config['phpbbservices_digests_user_digest_send_hour_gmt'] == -1 ? rand(0, 23) : $config['phpbbservices_digests_user_digest_send_hour_gmt']; $sql_ary['user_digest_show_pms'] = $config['phpbbservices_digests_user_digest_show_pms']; $sql_ary['user_digest_max_posts'] = $config['phpbbservices_digests_user_digest_max_posts']; $sql_ary['user_digest_min_words'] = $config['phpbbservices_digests_user_digest_min_words']; $sql_ary['user_digest_remove_foes'] = $config['phpbbservices_digests_user_digest_remove_foes']; $sql_ary['user_digest_sortby'] = $config['phpbbservices_digests_user_digest_sortby']; $sql_ary['user_digest_max_display_words'] = $config['phpbbservices_digests_user_digest_max_display_words'] == -1 ? 0 : $config['phpbbservices_digests_user_digest_max_display_words']; $sql_ary['user_digest_reset_lastvisit'] = $config['phpbbservices_digests_user_digest_reset_lastvisit']; $sql_ary['user_digest_filter_type'] = $config['phpbbservices_digests_user_digest_filter_type']; $sql_ary['user_digest_pm_mark_read'] = $config['phpbbservices_digests_user_digest_pm_mark_read']; $sql_ary['user_digest_new_posts_only'] = $config['phpbbservices_digests_user_digest_new_posts_only']; $sql_ary['user_digest_no_post_text'] = $config['phpbbservices_digests_user_digest_max_display_words'] == 0 ? 1 : 0; $sql_ary['user_digest_attachments'] = $config['phpbbservices_digests_user_digest_attachments']; $sql_ary['user_digest_block_images'] = $config['phpbbservices_digests_user_digest_block_images']; $sql_ary['user_digest_toc'] = $config['phpbbservices_digests_user_digest_toc']; } } else { // We need to get these variables so we can detect if individual forum subscriptions will need to be processed. $var = 'user-' . $current_user_id . '-all_forums'; $all_forums = $request->variable($var, '', true); $var = 'user-' . $current_user_id . '-filter_type'; $filter_type = $request->variable($var, '', true); // No mass action, so associate the database columns with its requested value if (!$use_defaults && $var_part == 'digest_type' && $value == constants::DIGESTS_DEFAULT_VALUE) { $use_defaults = true; unset($sql_ary); } if ($use_defaults) { if (!$use_defaults_pass) { // Create a digest subscription using board defaults. but do it only once for the user_id $sql_ary['user_digest_type'] = $config['phpbbservices_digests_user_digest_type']; $sql_ary['user_digest_format'] = $config['phpbbservices_digests_user_digest_format']; $sql_ary['user_digest_show_mine'] = $config['phpbbservices_digests_user_digest_show_mine'] == 1 ? 0 : 1; $sql_ary['user_digest_send_on_no_posts'] = $config['phpbbservices_digests_user_digest_send_on_no_posts']; $sql_ary['user_digest_send_hour_gmt'] = $config['phpbbservices_digests_user_digest_send_hour_gmt'] == -1 ? rand(0, 23) : $config['phpbbservices_digests_user_digest_send_hour_gmt']; $sql_ary['user_digest_show_pms'] = $config['phpbbservices_digests_user_digest_show_pms']; $sql_ary['user_digest_max_posts'] = $config['phpbbservices_digests_user_digest_max_posts']; $sql_ary['user_digest_min_words'] = $config['phpbbservices_digests_user_digest_min_words']; $sql_ary['user_digest_remove_foes'] = $config['phpbbservices_digests_user_digest_remove_foes']; $sql_ary['user_digest_sortby'] = $config['phpbbservices_digests_user_digest_sortby']; $sql_ary['user_digest_max_display_words'] = $config['phpbbservices_digests_user_digest_max_display_words'] == -1 ? 0 : $config['phpbbservices_digests_user_digest_max_display_words']; $sql_ary['user_digest_reset_lastvisit'] = $config['phpbbservices_digests_user_digest_reset_lastvisit']; $sql_ary['user_digest_filter_type'] = $config['phpbbservices_digests_user_digest_filter_type']; $sql_ary['user_digest_pm_mark_read'] = $config['phpbbservices_digests_user_digest_pm_mark_read']; $sql_ary['user_digest_new_posts_only'] = $config['phpbbservices_digests_user_digest_new_posts_only']; $sql_ary['user_digest_no_post_text'] = $config['phpbbservices_digests_user_digest_max_display_words'] == 0 ? 1 : 0; $sql_ary['user_digest_attachments'] = $config['phpbbservices_digests_user_digest_attachments']; $sql_ary['user_digest_block_images'] = $config['phpbbservices_digests_user_digest_block_images']; $sql_ary['user_digest_toc'] = $config['phpbbservices_digests_user_digest_toc']; $use_defaults_pass = true; } } else { switch ($var_part) { case 'digest_type': $sql_ary['user_digest_type'] = $value; break; case 'style': $sql_ary['user_digest_format'] = $value; break; case 'send_hour': $sql_ary['user_digest_send_hour_gmt'] = $value; break; case 'filter_type': $sql_ary['user_digest_filter_type'] = $value; break; case 'max_posts': $sql_ary['user_digest_max_posts'] = $value; break; case 'min_words': $sql_ary['user_digest_min_words'] = $value; break; case 'new_posts_only': $sql_ary['user_digest_new_posts_only'] = $value; break; case 'show_mine': $sql_ary['user_digest_show_mine'] = $value == '0' ? '1' : '0'; break; case 'filter_foes': $sql_ary['user_digest_remove_foes'] = $value; break; case 'pms': $sql_ary['user_digest_show_pms'] = $value; break; case 'mark_read': $sql_ary['user_digest_pm_mark_read'] = $value; break; case 'sortby': $sql_ary['user_digest_sortby'] = $value; break; case 'max_display_words': $sql_ary['user_digest_max_display_words'] = $value; break; case 'no_post_text': $sql_ary['user_digest_no_post_text'] = $value; break; case 'send_on_no_posts': $sql_ary['user_digest_send_on_no_posts'] = $value; break; case 'lastvisit': $sql_ary['user_digest_reset_lastvisit'] = $value; break; case 'attachments': $sql_ary['user_digest_attachments'] = $value; break; case 'blockimages': $sql_ary['user_digest_block_images'] = $value; break; case 'toc': $sql_ary['user_digest_toc'] = $value; break; default: break; } } // Note that if "all_forums" is unchecked and bookmarks is unchecked, there are individual forum subscriptions, so they must be saved. if (substr($var_part, 0, 4) == 'elt_') { // We should save this forum as an individual forum subscription, but only if the all forums checkbox // is not set AND the user should not get posts for bookmarked topics only. // This request variable is a checkbox for a forum for this user. It should be checked or it would // not be in the $request_vars array. $delimiter_pos = strpos($var_part, '_', 4); $forum_id = substr($var_part, 4, $delimiter_pos - 4); if ($all_forums !== 'on' && trim($filter_type) !== constants::DIGESTS_BOOKMARKS) { $sql_ary2[] = array('user_id' => (int) $current_user_id, 'forum_id' => (int) $forum_id); } } } } // $request_vars variable is named user-* } // foreach // Process last user // Save this subscriber's digest settings if (isset($sql_ary) && sizeof($sql_ary) > 0) { $sql = 'UPDATE ' . USERS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . ' WHERE user_id = ' . (int) $current_user_id; $db->sql_query($sql); } // If there are any individual forum subscriptions for this user, remove the old ones. if (!is_null($current_user_id)) { $sql = 'DELETE FROM ' . $table_prefix . constants::DIGESTS_SUBSCRIBED_FORUMS_TABLE . ' WHERE user_id = ' . (int) $current_user_id; $db->sql_query($sql); } // Now save the individual forum subscriptions, if any if (!$mass_action && isset($sql_ary2) && sizeof($sql_ary2) > 0) { $db->sql_multi_insert($table_prefix . constants::DIGESTS_SUBSCRIBED_FORUMS_TABLE, $sql_ary2); } // Also want to save some information to an array to be used for sending emails to affected users. $digest_notify_list[] = $current_user_id; // Notify users whose subscriptions were changed if ($config['phpbbservices_digests_notify_on_admin_changes']) { $this->notify_subscribers($digest_notify_list, 'digests_subscription_edited'); } $message = $user->lang('CONFIG_UPDATED'); } if ($submit && $mode == 'digests_balance_load') { $sql_array = array('SELECT' => 'count(*) AS digests_count', 'FROM' => array(USERS_TABLE => 'u'), 'WHERE' => "user_digest_type <> '" . constants::DIGESTS_NONE_VALUE . "' \n\t\t\t\t\tAND user_type <> " . USER_IGNORE); $sql = $db->sql_build_query('SELECT', $sql_array); $result = $db->sql_query($sql); $row = $db->sql_fetchrow($result); // Determine the average number of subscribers per hour. We need to assume at least one subscriber per hour to avoid // resetting user's preferred digest time unnecessarily. If the average is 3 per hour, the first 3 already subscribed // will not have their digest arrival time changed. $avg_subscribers_per_hour = max(floor($row['digests_count'] / 24), 1); $db->sql_freeresult($result); // Get oversubscribed hours, place in an array $sql_array = array('SELECT' => 'user_digest_send_hour_gmt AS hour, count(*) AS hour_count', 'FROM' => array(USERS_TABLE => 'u'), 'WHERE' => "user_digest_type <> 'NONE' AND user_type <> " . USER_IGNORE, 'GROUP_BY' => 'user_digest_send_hour_gmt', 'HAVING' => 'count(user_digest_send_hour_gmt) > ' . (int) $avg_subscribers_per_hour, 'ORDER_BY' => '1'); $sql = $db->sql_build_query('SELECT', $sql_array); $result = $db->sql_query($sql); $rowset = $db->sql_fetchrowset($result); $oversubscribed_hours = array(); foreach ($rowset as $row) { $oversubscribed_hours[] = $row['hour']; } $db->sql_freeresult($result); // Get a list of subscribers whose hour to get digest should be changed because they exceed the average number of subscribers // allowed in that hour. We will ignore the first $oversubscribed_hours subscribers. $rebalanced = 0; $digest_notify_list = array(); if (sizeof($oversubscribed_hours) > 0) { $sql_array = array('SELECT' => 'user_digest_send_hour_gmt, user_id, username, user_email, user_lang', 'FROM' => array(USERS_TABLE => 'u'), 'WHERE' => "user_digest_type <> '" . constants::DIGESTS_NONE_VALUE . "' AND user_type <> " . USER_IGNORE . ' AND ' . $db->sql_in_set('user_digest_send_hour_gmt', $oversubscribed_hours), 'ORDER_BY' => '1, 2'); $sql = $db->sql_build_query('SELECT', $sql_array); $result = $db->sql_query_limit($sql, 100000, $avg_subscribers_per_hour - 1); // Result sets start with array indexed at zero $rowset = $db->sql_fetchrowset($result); $current_hour = -1; $counted_for_this_hour = 0; // Finally, change the digest send hour for these subscribers to a random hour between 0 and 24. foreach ($rowset as $row) { $digest_notify_list[] = $row['user_id']; if ($current_hour != $row['user_digest_send_hour_gmt']) { $current_hour = $row['user_digest_send_hour_gmt']; $counted_for_this_hour = 0; } $counted_for_this_hour++; if ($counted_for_this_hour > $avg_subscribers_per_hour) { $sql_ary = array('user_digest_send_hour_gmt' => rand(0, 23)); $sql2 = 'UPDATE ' . USERS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . ' WHERE user_id = ' . (int) $row['user_id']; $db->sql_query($sql2); $rebalanced++; } } $db->sql_freeresult($result); // Notify users whose subscriptions were changed if ($config['phpbbservices_digests_notify_on_admin_changes']) { $this->notify_subscribers($digest_notify_list, 'digests_subscription_edited'); } } $message = $user->lang('DIGESTS_REBALANCED', $rebalanced); } if ($submit && $mode == 'digests_mass_subscribe_unsubscribe') { // Did the admin explicitly request a mass subscription or unsubscription action? if ($config['phpbbservices_digests_enable_subscribe_unsubscribe']) { // Determine which user types are to be updated $user_types = array(USER_NORMAL); if ($config['phpbbservices_digests_include_admins']) { $user_types[] = USER_FOUNDER; } // If doing a mass subscription, we don't want to mess up digest subscriptions already in place, so we need to create a snippet of SQL. // If doing a mass unsubscribe, all qualified subscriptions are removed. Note however that except for the digest type, all other settings // are retained. $sql_qualifier = $config['phpbbservices_digests_subscribe_all'] ? " AND user_digest_type = '" . constants::DIGESTS_NONE_VALUE . "'" : " AND user_digest_type != '" . constants::DIGESTS_NONE_VALUE . "'"; $digest_notify_list = array(); if ($config['phpbbservices_digests_notify_on_admin_changes']) { $sql_array = array('SELECT' => 'user_id', 'FROM' => array(USERS_TABLE => 'u'), 'WHERE' => $db->sql_in_set('user_type', $user_types) . $sql_qualifier); $sql = $db->sql_build_query('SELECT', $sql_array); $result = $db->sql_query($sql); $rowset = $db->sql_fetchrowset($result); foreach ($rowset as $row) { $digest_notify_list[] = $row['user_id']; } $db->sql_freeresult($result); // Query be gone! } // Set columns in user table to be updated $sql_ary = array('user_digest_type' => $config['phpbbservices_digests_subscribe_all'] ? $config['phpbbservices_digests_user_digest_type'] : constants::DIGESTS_NONE_VALUE, 'user_digest_format' => $config['phpbbservices_digests_user_digest_format'], 'user_digest_show_mine' => $config['phpbbservices_digests_user_digest_show_mine'] == 1 ? 0 : 1, 'user_digest_send_on_no_posts' => $config['phpbbservices_digests_user_digest_send_on_no_posts'], 'user_digest_send_hour_gmt' => $config['phpbbservices_digests_user_digest_send_hour_gmt'] == -1 ? rand(0, 23) : $config['phpbbservices_digests_user_digest_send_hour_gmt'], 'user_digest_show_pms' => $config['phpbbservices_digests_user_digest_show_pms'], 'user_digest_max_posts' => $config['phpbbservices_digests_user_digest_max_posts'], 'user_digest_min_words' => $config['phpbbservices_digests_user_digest_min_words'], 'user_digest_remove_foes' => $config['phpbbservices_digests_user_digest_remove_foes'], 'user_digest_sortby' => $config['phpbbservices_digests_user_digest_sortby'], 'user_digest_max_display_words' => $config['phpbbservices_digests_user_digest_max_display_words'] == -1 ? 0 : $config['phpbbservices_digests_user_digest_max_display_words'], 'user_digest_reset_lastvisit' => $config['phpbbservices_digests_user_digest_reset_lastvisit'], 'user_digest_filter_type' => $config['phpbbservices_digests_user_digest_filter_type'], 'user_digest_pm_mark_read' => $config['phpbbservices_digests_user_digest_pm_mark_read'], 'user_digest_new_posts_only' => $config['phpbbservices_digests_user_digest_new_posts_only'], 'user_digest_no_post_text' => $config['phpbbservices_digests_user_digest_max_display_words'] == 0 ? 1 : 0, 'user_digest_attachments' => $config['phpbbservices_digests_user_digest_attachments'], 'user_digest_block_images' => $config['phpbbservices_digests_user_digest_block_images'], 'user_digest_toc' => $config['phpbbservices_digests_user_digest_toc']); $sql = 'UPDATE ' . USERS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . ' WHERE ' . $db->sql_in_set('user_type', $user_types) . $sql_qualifier; $result = $db->sql_query($sql); $db->sql_freeresult($result); // Query be gone! // Notify users or subscription or unsubscription if directed if ($config['phpbbservices_digests_notify_on_admin_changes']) { $this->notify_subscribers($digest_notify_list); } if ($config['phpbbservices_digests_subscribe_all']) { $message = $user->lang('DIGESTS_ALL_SUBSCRIBED', sizeof($digest_notify_list)); } else { $message = $user->lang('DIGESTS_ALL_UNSUBSCRIBED', sizeof($digest_notify_list)); } } else { // show no update message $message = $user->lang('DIGESTS_NO_MASS_ACTION'); } } if ($submit && $mode == 'digests_reset_cron_run_time') { $config->set('phpbbservices_digests_cron_task_last_gc', 0); } if ($submit && $mode == 'digests_test') { define('IN_DIGESTS_TEST', true); $continue = true; if (!$config['phpbbservices_digests_test'] && !$config['phpbbservices_digests_test_clear_spool']) { $message = $user->lang('DIGESTS_MAILER_NOT_RUN'); $continue = false; } if ($continue && $config['phpbbservices_digests_test_clear_spool']) { // Clear the digests cache folder of .txt and .html files, if so instructed $all_cleared = true; $directory_found = true; $path = $phpbb_root_path . 'store/ext/phpbbservices/digests'; if (is_dir($path)) { foreach (new \DirectoryIterator($path) as $file_info) { $file_name = $file_info->getFilename(); // Exclude dot files, hidden files and non "real" files, and real files if they don't have the .html or .txt suffix if (substr($file_name, 0, 1) !== '.' && $file_info->isFile() && ($file_info->getExtension() == 'html' || $file_info->getExtension() == 'txt')) { $deleted = unlink($path . '/' . $file_name); // delete file if (!$deleted) { $all_cleared = false; } } } } else { $directory_found = false; } if ($config['phpbbservices_digests_enable_log'] && $directory_found) { if ($all_cleared) { $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_CONFIG_DIGESTS_CACHE_CLEARED'); } else { $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_CONFIG_DIGESTS_CLEAR_SPOOL_ERROR'); } } if (!$all_cleared) { $message_type = E_USER_WARNING; $message = strip_tags($user->lang('LOG_CONFIG_DIGESTS_CLEAR_SPOOL_ERROR')); $continue = false; } } if ($continue && $config['phpbbservices_digests_test_time_use']) { // Make sure run date is valid, if a run date was requested. $good_date = checkdate($config['phpbbservices_digests_test_month'], $config['phpbbservices_digests_test_day'], $config['phpbbservices_digests_test_year']); if (!$good_date) { $message_type = E_USER_WARNING; $message = $user->lang('DIGESTS_ILLOGICAL_DATE'); $continue = false; } } // Get ready to manually mail digests if ($continue) { // Must save the current state or the sidebar will disappear after the mailer call $save_template = serialize($template); // Get the common include files, to pass the reference to mailer $helper = $phpbb_container->get('phpbbservices.digests.common'); // Create a mailer object and call its run method. The logic for sending a digest is embedded in this method, which is normally run as a cron task. $mailer = new \phpbbservices\digests\cron\task\digests($config, $request, $user, $db, $phpEx, $phpbb_root_path, $template, $auth, $table_prefix, $phpbb_log, $helper); $success = $mailer->run(); if (!$success) { $message_type = E_USER_WARNING; $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_CONFIG_DIGESTS_MAILER_RAN_WITH_ERROR'); $message = strip_tags($user->lang('LOG_CONFIG_DIGESTS_MAILER_RAN_WITH_ERROR')); } else { if ($config['phpbbservices_digests_test_spool']) { $message = $user->lang('DIGESTS_MAILER_SPOOLED'); } else { $message = $user->lang('DIGESTS_MAILER_RAN_SUCCESSFULLY'); } } // Restore the sidebar content $template = unserialize($save_template); } } if ($submit) { if (!isset($message_type)) { $message_type = E_USER_NOTICE; } if (!isset($message)) { $message = $user->lang('CONFIG_UPDATED'); } if ($mode !== 'digests_test') { $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_CONFIG_' . strtoupper($mode)); } trigger_error($message . adm_back_link($this->u_action), $message_type); } $this->tpl_name = 'acp_digests'; $this->page_title = $display_vars['title']; $template->assign_vars(array('ERROR_MSG' => is_array($error) ? implode('<br />', $error) : $error, 'L_MESSAGE' => $error, 'L_TITLE' => $user->lang($display_vars['title']), 'L_TITLE_EXPLAIN' => $user->lang($display_vars['title'] . '_EXPLAIN'), 'S_ERROR' => sizeof($error) ? true : false, 'U_ACTION' => $this->u_action)); // Output relevant page foreach ($display_vars['vars'] as $config_key => $vars) { if (!is_array($vars) && strpos($config_key, 'legend') === false) { continue; } if (strpos($config_key, 'legend') !== false) { $template->assign_block_vars('options', array('LEGEND' => sizeof($user->lang[$vars]) > 0 ? $user->lang($vars) : $vars, 'S_LEGEND' => true)); continue; } $type = explode(':', $vars['type']); $l_explain = ''; if ($vars['explain'] && isset($vars['lang_explain'])) { $l_explain = isset($user->lang[$vars['lang_explain']]) ? $user->lang($vars['lang_explain']) : $vars['lang_explain']; } else { if ($vars['explain']) { $l_explain = isset($user->lang[$vars['lang'] . '_EXPLAIN']) ? $user->lang($vars['lang'] . '_EXPLAIN') : ''; } } $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars); if (empty($content)) { continue; } $template->assign_block_vars('options', array('CONTENT' => $content, 'KEY' => $config_key, 'TITLE' => isset($user->lang[$vars['lang']]) ? $user->lang($vars['lang']) : $vars['lang'], 'S_EXPLAIN' => $vars['explain'], 'TITLE_EXPLAIN' => $l_explain)); unset($display_vars['vars'][$config_key]); } }