473,398 Members | 2,212 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,398 software developers and data experts.

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')'

I'm getting this error

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')' in /home/neblncbt/public_html/forum/includes/acp/acp_board.php on line 69

Here is the acp_board.php file

Expand|Select|Wrap|Line Numbers
  1. <?php
  2. /**
  3. *
  4. * @package acp
  5. * @version $Id$
  6. * @copyright (c) 2005 phpBB Group
  7. * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  8. *
  9. * @todo add cron intervals to server settings? (database_gc, queue_interval, session_gc, search_gc, cache_gc, warnings_gc)
  10. */
  11.  
  12. /**
  13. * @ignore
  14. */
  15. if (!defined('IN_PHPBB'))
  16. {
  17.     exit;
  18. }
  19.  
  20. /**
  21. * @package acp
  22. */
  23. class acp_board
  24. {
  25.     var $u_action;
  26.     var $new_config = array();
  27.  
  28.     function main($id, $mode)
  29.     {
  30.         global $db, $user, $auth, $template;
  31.         global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
  32.         global $cache;
  33.  
  34.         $user->add_lang('acp/board');
  35.  
  36.         $action    = request_var('action', '');
  37.         $submit = (isset($_POST['submit']) || isset($_POST['allow_quick_reply_enable'])) ? true : false;
  38.  
  39.         $form_key = 'acp_board';
  40.         add_form_key($form_key);
  41.  
  42.         /**
  43.         *    Validation types are:
  44.         *        string, int, bool,
  45.         *        script_path (absolute path in url - beginning with / and no trailing slash),
  46.         *        rpath (relative), rwpath (realtive, writable), path (relative path, but able to escape the root), wpath (writable)
  47.         */
  48.         switch ($mode)
  49.         {
  50.             case 'settings':
  51.                 $display_vars = array(
  52.                     'title'    => 'ACP_BOARD_SETTINGS',
  53.                     'vars'    => array(
  54.                         'legend1'                => 'ACP_BOARD_SETTINGS',
  55.                         'sitename'                => array('lang' => 'SITE_NAME',                'validate' => 'string',    'type' => 'text:40:255', 'explain' => false),
  56.                         'site_desc'                => array('lang' => 'SITE_DESC',                'validate' => 'string',    'type' => 'text:40:255', 'explain' => false),
  57.                         'favicon'                => array('lang' => 'FAVICON_URL',            'validate' => 'string',    'type' => 'text:40:255', 'explain' => false),
  58.                         'board_disable'            => array('lang' => 'DISABLE_BOARD',            'validate' => 'bool',    'type' => 'custom', 'method' => 'board_disable', 'explain' => true),
  59.                         'board_disable_msg'        => false,
  60.                         'default_lang'            => array('lang' => 'DEFAULT_LANGUAGE',        'validate' => 'lang',    'type' => 'select', 'function' => 'language_select', 'params' => array('{CONFIG_VALUE}'), 'explain' => false),
  61.                         'default_dateformat'    => array('lang' => 'DEFAULT_DATE_FORMAT',    'validate' => 'string',    'type' => 'custom', 'method' => 'dateformat_select', 'explain' => true),
  62.                         'board_timezone'        => array('lang' => 'SYSTEM_TIMEZONE',        'validate' => 'string',    'type' => 'select', 'function' => 'tz_select', 'params' => array('{CONFIG_VALUE}', 1), 'explain' => true),
  63.                         'board_dst'                => array('lang' => 'SYSTEM_DST',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  64.                         'default_style'            => array('lang' => 'DEFAULT_STYLE',            'validate' => 'int',    'type' => 'select', 'function' => 'style_select', 'params' => array('{CONFIG_VALUE}', false), 'explain' => false),
  65.                         'override_user_style'    => array('lang' => 'OVERRIDE_STYLE',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  66.  
  67.                         'legend2'                => 'WARNINGS',
  68.                         'warnings_expire_days'
  69.                         'legend3'                    => 'ACP_SUBMIT_CHANGES',
  70.                     )
  71.                 );
  72.             break;
  73.  
  74.             case 'features':
  75.                 $display_vars = array(
  76.                     'title'    => 'ACP_BOARD_FEATURES',
  77.                     'vars'    => array(
  78.                         'legend1'                => 'ACP_BOARD_FEATURES',
  79.                         'allow_privmsg'            => array('lang' => 'BOARD_PM',                'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  80.                         'allow_topic_notify'    => array('lang' => 'ALLOW_TOPIC_NOTIFY',    'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  81.                         'allow_forum_notify'    => array('lang' => 'ALLOW_FORUM_NOTIFY',    'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  82.                         'allow_namechange'        => array('lang' => 'ALLOW_NAME_CHANGE',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  83.                         'allow_attachments'        => array('lang' => 'ALLOW_ATTACHMENTS',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  84.                         'allow_pm_attach'        => array('lang' => 'ALLOW_PM_ATTACHMENTS',    'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  85.                         'allow_pm_report'        => array('lang' => 'ALLOW_PM_REPORT',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  86.                         'allow_bbcode'            => array('lang' => 'ALLOW_BBCODE',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  87.                         'allow_smilies'            => array('lang' => 'ALLOW_SMILIES',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  88.                         'allow_sig'                => array('lang' => 'ALLOW_SIG',                'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  89.                         'allow_nocensors'        => array('lang' => 'ALLOW_NO_CENSORS',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  90.                         'allow_bookmarks'        => array('lang' => 'ALLOW_BOOKMARKS',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  91.                         'allow_birthdays'        => array('lang' => 'ALLOW_BIRTHDAYS',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  92.                         'allow_quick_reply'        => array('lang' => 'ALLOW_QUICK_REPLY',        'validate' => 'bool',    'type' => 'custom', 'method' => 'quick_reply', 'explain' => true),
  93.  
  94.                         'legend2'                => 'ACP_LOAD_SETTINGS',
  95.                         'load_birthdays'        => array('lang' => 'YES_BIRTHDAYS',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  96.                         'load_moderators'        => array('lang' => 'YES_MODERATORS',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  97.                         'load_jumpbox'            => array('lang' => 'YES_JUMPBOX',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  98.                         'load_cpf_memberlist'    => array('lang' => 'LOAD_CPF_MEMBERLIST',    'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  99.                         'load_cpf_viewprofile'    => array('lang' => 'LOAD_CPF_VIEWPROFILE',    'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  100.                         'load_cpf_viewtopic'    => array('lang' => 'LOAD_CPF_VIEWTOPIC',    'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  101.  
  102.                         'legend3'                    => 'ACP_SUBMIT_CHANGES',
  103.                     )
  104.                 );
  105.             break;
  106.  
  107.             case 'avatar':
  108.                 $display_vars = array(
  109.                     'title'    => 'ACP_AVATAR_SETTINGS',
  110.                     'vars'    => array(
  111.                         'legend1'                => 'ACP_AVATAR_SETTINGS',
  112.  
  113.                         'avatar_min_width'        => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
  114.                         'avatar_min_height'        => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
  115.                         'avatar_max_width'        => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
  116.                         'avatar_max_height'        => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
  117.  
  118.                         'allow_avatar'            => array('lang' => 'ALLOW_AVATARS',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  119.                         'allow_avatar_local'    => array('lang' => 'ALLOW_LOCAL',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  120.                         'allow_avatar_remote'    => array('lang' => 'ALLOW_REMOTE',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  121.                         'allow_avatar_upload'    => array('lang' => 'ALLOW_UPLOAD',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  122.                         'allow_avatar_remote_upload'=> array('lang' => 'ALLOW_REMOTE_UPLOAD', 'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  123.                         'avatar_filesize'        => array('lang' => 'MAX_FILESIZE',            'validate' => 'int:0',    'type' => 'text:4:10', 'explain' => true, 'append' => ' ' . $user->lang['BYTES']),
  124.                         'avatar_min'            => array('lang' => 'MIN_AVATAR_SIZE',        'validate' => 'int:0',    'type' => 'dimension:3:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
  125.                         'avatar_max'            => array('lang' => 'MAX_AVATAR_SIZE',        'validate' => 'int:0',    'type' => 'dimension:3:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
  126.                         'avatar_path'            => array('lang' => 'AVATAR_STORAGE_PATH',    'validate' => 'rwpath',    'type' => 'text:20:255', 'explain' => true),
  127.                         'avatar_gallery_path'    => array('lang' => 'AVATAR_GALLERY_PATH',    'validate' => 'rpath',    'type' => 'text:20:255', 'explain' => true)
  128.                     )
  129.                 );
  130.             break;
  131.  
  132.             case 'message':
  133.                 $display_vars = array(
  134.                     'title'    => 'ACP_MESSAGE_SETTINGS',
  135.                     'lang'    => 'ucp',
  136.                     'vars'    => array(
  137.                         'legend1'                => 'GENERAL_SETTINGS',
  138.                         'allow_privmsg'            => array('lang' => 'BOARD_PM',                'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  139.                         'pm_max_boxes'            => array('lang' => 'BOXES_MAX',                'validate' => 'int:0',    'type' => 'text:4:4', 'explain' => true),
  140.                         'pm_max_msgs'            => array('lang' => 'BOXES_LIMIT',            'validate' => 'int:0',    'type' => 'text:4:4', 'explain' => true),
  141.                         'full_folder_action'    => array('lang' => 'FULL_FOLDER_ACTION',    'validate' => 'int',    'type' => 'select', 'method' => 'full_folder_select', 'explain' => true),
  142.                         'pm_edit_time'            => array('lang' => 'PM_EDIT_TIME',            'validate' => 'int:0',    'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']),
  143.                         'pm_max_recipients'        => array('lang' => 'PM_MAX_RECIPIENTS',        'validate' => 'int:0',    'type' => 'text:5:5', 'explain' => true),
  144.  
  145.                         'legend2'                => 'GENERAL_OPTIONS',
  146.                         'allow_mass_pm'            => array('lang' => 'ALLOW_MASS_PM',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  147.                         'auth_bbcode_pm'        => array('lang' => 'ALLOW_BBCODE_PM',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  148.                         'auth_smilies_pm'        => array('lang' => 'ALLOW_SMILIES_PM',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  149.                         'allow_pm_attach'        => array('lang' => 'ALLOW_PM_ATTACHMENTS',    'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  150.                         'allow_sig_pm'            => array('lang' => 'ALLOW_SIG_PM',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  151.                         'print_pm'                => array('lang' => 'ALLOW_PRINT_PM',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  152.                         'forward_pm'            => array('lang' => 'ALLOW_FORWARD_PM',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  153.                         'auth_img_pm'            => array('lang' => 'ALLOW_IMG_PM',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  154.                         'auth_flash_pm'            => array('lang' => 'ALLOW_FLASH_PM',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  155.                         'enable_pm_icons'        => array('lang' => 'ENABLE_PM_ICONS',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  156.  
  157.                         'legend3'                    => 'ACP_SUBMIT_CHANGES',
  158.                     )
  159.                 );
  160.             break;
  161.  
  162.             case 'post':
  163.                 $display_vars = array(
  164.                     'title'    => 'ACP_POST_SETTINGS',
  165.                     'vars'    => array(
  166.                         'legend1'                => 'GENERAL_OPTIONS',
  167.                         'allow_topic_notify'    => array('lang' => 'ALLOW_TOPIC_NOTIFY',    'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  168.                         'allow_forum_notify'    => array('lang' => 'ALLOW_FORUM_NOTIFY',    'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  169.                         'allow_bbcode'            => array('lang' => 'ALLOW_BBCODE',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  170.                         'allow_post_flash'        => array('lang' => 'ALLOW_POST_FLASH',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  171.                         'allow_smilies'            => array('lang' => 'ALLOW_SMILIES',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  172.                         'allow_post_links'        => array('lang' => 'ALLOW_POST_LINKS',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  173.                         'allow_nocensors'        => array('lang' => 'ALLOW_NO_CENSORS',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  174.                         'allow_bookmarks'        => array('lang' => 'ALLOW_BOOKMARKS',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  175.                         'enable_post_confirm'    => array('lang' => 'VISUAL_CONFIRM_POST',    'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  176.                         'allow_quick_reply'        => array('lang' => 'ALLOW_QUICK_REPLY',        'validate' => 'bool',    'type' => 'custom', 'method' => 'quick_reply', 'explain' => true),
  177.  
  178.                         'legend2'                => 'POSTING',
  179.                         'bump_type'                => false,
  180.                         'edit_time'                => array('lang' => 'EDIT_TIME',                'validate' => 'int:0',        'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']),
  181.                         'delete_time'            => array('lang' => 'DELETE_TIME',            'validate' => 'int:0',        'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']),
  182.                         'display_last_edited'    => array('lang' => 'DISPLAY_LAST_EDITED',    'validate' => 'bool',        'type' => 'radio:yes_no', 'explain' => true),
  183.                         'flood_interval'        => array('lang' => 'FLOOD_INTERVAL',        'validate' => 'int:0',        'type' => 'text:3:10', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
  184.                         'bump_interval'            => array('lang' => 'BUMP_INTERVAL',            'validate' => 'int:0',        'type' => 'custom', 'method' => 'bump_interval', 'explain' => true),
  185.                         'topics_per_page'        => array('lang' => 'TOPICS_PER_PAGE',        'validate' => 'int:1',        'type' => 'text:3:4', 'explain' => false),
  186.                         'posts_per_page'        => array('lang' => 'POSTS_PER_PAGE',        'validate' => 'int:1',        'type' => 'text:3:4', 'explain' => false),
  187.                         'smilies_per_page'        => array('lang' => 'SMILIES_PER_PAGE',        'validate' => 'int:1',        'type' => 'text:3:4', 'explain' => false),
  188.                         'hot_threshold'            => array('lang' => 'HOT_THRESHOLD',            'validate' => 'int:0',        'type' => 'text:3:4', 'explain' => true),
  189.                         'max_poll_options'        => array('lang' => 'MAX_POLL_OPTIONS',        'validate' => 'int:2:127',    'type' => 'text:4:4', 'explain' => false),
  190.                         'max_post_chars'        => array('lang' => 'CHAR_LIMIT',            'validate' => 'int:0',        'type' => 'text:4:6', 'explain' => true),
  191.                         'min_post_chars'        => array('lang' => 'MIN_CHAR_LIMIT',        'validate' => 'int:0',        'type' => 'text:4:6', 'explain' => true),
  192.                         'max_post_smilies'        => array('lang' => 'SMILIES_LIMIT',            'validate' => 'int:0',        'type' => 'text:4:4', 'explain' => true),
  193.                         'max_post_urls'            => array('lang' => 'MAX_POST_URLS',            'validate' => 'int:0',        'type' => 'text:5:4', 'explain' => true),
  194.                         'max_post_font_size'    => array('lang' => 'MAX_POST_FONT_SIZE',    'validate' => 'int:0',        'type' => 'text:5:4', 'explain' => true, 'append' => ' %'),
  195.                         'max_quote_depth'        => array('lang' => 'QUOTE_DEPTH_LIMIT',        'validate' => 'int:0',        'type' => 'text:4:4', 'explain' => true),
  196.                         'max_post_img_width'    => array('lang' => 'MAX_POST_IMG_WIDTH',    'validate' => 'int:0',        'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
  197.                         'max_post_img_height'    => array('lang' => 'MAX_POST_IMG_HEIGHT',    'validate' => 'int:0',        'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
  198.  
  199.                         'legend3'                    => 'ACP_SUBMIT_CHANGES',
  200.                     )
  201.                 );
  202.             break;
  203.  
  204.             case 'signature':
  205.                 $display_vars = array(
  206.                     'title'    => 'ACP_SIGNATURE_SETTINGS',
  207.                     'vars'    => array(
  208.                         'legend1'                => 'GENERAL_OPTIONS',
  209.                         'allow_sig'                => array('lang' => 'ALLOW_SIG',                'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  210.                         'allow_sig_bbcode'        => array('lang' => 'ALLOW_SIG_BBCODE',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  211.                         'allow_sig_img'            => array('lang' => 'ALLOW_SIG_IMG',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  212.                         'allow_sig_flash'        => array('lang' => 'ALLOW_SIG_FLASH',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  213.                         'allow_sig_smilies'        => array('lang' => 'ALLOW_SIG_SMILIES',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  214.                         'allow_sig_links'        => array('lang' => 'ALLOW_SIG_LINKS',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  215.  
  216.                         'legend2'                => 'GENERAL_SETTINGS',
  217.                         'max_sig_chars'            => array('lang' => 'MAX_SIG_LENGTH',        'validate' => 'int:0',    'type' => 'text:5:4', 'explain' => true),
  218.                         'max_sig_urls'            => array('lang' => 'MAX_SIG_URLS',            'validate' => 'int:0',    'type' => 'text:5:4', 'explain' => true),
  219.                         'max_sig_font_size'        => array('lang' => 'MAX_SIG_FONT_SIZE',        'validate' => 'int:0',    'type' => 'text:5:4', 'explain' => true, 'append' => ' %'),
  220.                         'max_sig_smilies'        => array('lang' => 'MAX_SIG_SMILIES',        'validate' => 'int:0',    'type' => 'text:5:4', 'explain' => true),
  221.                         'max_sig_img_width'        => array('lang' => 'MAX_SIG_IMG_WIDTH',        'validate' => 'int:0',    'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
  222.                         'max_sig_img_height'    => array('lang' => 'MAX_SIG_IMG_HEIGHT',    'validate' => 'int:0',    'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
  223.  
  224.                         'legend3'                    => 'ACP_SUBMIT_CHANGES',
  225.                     )
  226.                 );
  227.             break;
  228.  
  229.             case 'registration':
  230.                 $display_vars = array(
  231.                     'title'    => 'ACP_REGISTER_SETTINGS',
  232.                     'vars'    => array(
  233.                         'legend1'                => 'GENERAL_SETTINGS',
  234.                         'max_name_chars'        => array('lang' => 'USERNAME_LENGTH', 'validate' => 'int:8:180', 'type' => false, 'method' => false, 'explain' => false,),
  235.                         'max_pass_chars'        => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:8:255', 'type' => false, 'method' => false, 'explain' => false,),
  236.  
  237.                         'require_activation'    => array('lang' => 'ACC_ACTIVATION',    'validate' => 'int',    'type' => 'custom', 'method' => 'select_acc_activation', 'explain' => true),
  238.                         'new_member_post_limit'    => array('lang' => 'NEW_MEMBER_POST_LIMIT', 'validate' => 'int:0:255', 'type' => 'text:4:4', 'explain' => true, 'append' => ' ' . $user->lang['POSTS']),
  239.                         'new_member_group_default'=> array('lang' => 'NEW_MEMBER_GROUP_DEFAULT', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
  240.                         'min_name_chars'        => array('lang' => 'USERNAME_LENGTH',    'validate' => 'int:1',    'type' => 'custom:5:180', 'method' => 'username_length', 'explain' => true),
  241.                         'min_pass_chars'        => array('lang' => 'PASSWORD_LENGTH',    'validate' => 'int:1',    'type' => 'custom', 'method' => 'password_length', 'explain' => true),
  242.                         'allow_name_chars'        => array('lang' => 'USERNAME_CHARS',    'validate' => 'string',    'type' => 'select', 'method' => 'select_username_chars', 'explain' => true),
  243.                         'pass_complex'            => array('lang' => 'PASSWORD_TYPE',        'validate' => 'string',    'type' => 'select', 'method' => 'select_password_chars', 'explain' => true),
  244.                         'chg_passforce'            => array('lang' => 'FORCE_PASS_CHANGE',    'validate' => 'int:0',    'type' => 'text:3:3', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
  245.  
  246.                         'legend2'                => 'GENERAL_OPTIONS',
  247.                         'allow_namechange'        => array('lang' => 'ALLOW_NAME_CHANGE',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  248.                         'allow_emailreuse'        => array('lang' => 'ALLOW_EMAIL_REUSE',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  249.                         'enable_confirm'        => array('lang' => 'VISUAL_CONFIRM_REG',    'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  250.                         'max_login_attempts'    => array('lang' => 'MAX_LOGIN_ATTEMPTS',    'validate' => 'int:0',    'type' => 'text:3:3', 'explain' => true),
  251.                         'max_reg_attempts'        => array('lang' => 'REG_LIMIT',                'validate' => 'int:0',    'type' => 'text:4:4', 'explain' => true),
  252.  
  253.                         'legend3'            => 'COPPA',
  254.                         'coppa_enable'        => array('lang' => 'ENABLE_COPPA',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  255.                         'coppa_mail'        => array('lang' => 'COPPA_MAIL',        'validate' => 'string',    'type' => 'textarea:5:40', 'explain' => true),
  256.                         'coppa_fax'            => array('lang' => 'COPPA_FAX',            'validate' => 'string',    'type' => 'text:25:100', 'explain' => false),
  257.  
  258.                         'legend4'            => 'ACP_SUBMIT_CHANGES',
  259.                     )
  260.                 );
  261.             break;
  262.  
  263.             case 'feed':
  264.                 $display_vars = array(
  265.                     'title'    => 'ACP_FEED_MANAGEMENT',
  266.                     'vars'    => array(
  267.                         'legend1'                    => 'ACP_FEED_GENERAL',
  268.                         'feed_enable'                => array('lang' => 'ACP_FEED_ENABLE',                'validate' => 'bool',    'type' => 'radio:enabled_disabled',    'explain' => true ),
  269.                         'feed_item_statistics'        => array('lang' => 'ACP_FEED_ITEM_STATISTICS',        'validate' => 'bool',    'type' => 'radio:enabled_disabled',    'explain' => true),
  270.                         'feed_http_auth'            => array('lang' => 'ACP_FEED_HTTP_AUTH',            'validate' => 'bool',    'type' => 'radio:enabled_disabled',    'explain' => true),
  271.  
  272.                         'legend2'                    => 'ACP_FEED_POST_BASED',
  273.                         'feed_limit_post'            => array('lang' => 'ACP_FEED_LIMIT',                'validate' => 'int:5',    'type' => 'text:3:4',                'explain' => true),
  274.                         'feed_overall'                => array('lang' => 'ACP_FEED_OVERALL',                'validate' => 'bool',    'type' => 'radio:enabled_disabled',    'explain' => true ),
  275.                         'feed_forum'                => array('lang' => 'ACP_FEED_FORUM',                'validate' => 'bool',    'type' => 'radio:enabled_disabled',    'explain' => true ),
  276.                         'feed_topic'                => array('lang' => 'ACP_FEED_TOPIC',                'validate' => 'bool',    'type' => 'radio:enabled_disabled',    'explain' => true ),
  277.  
  278.                         'legend3'                    => 'ACP_FEED_TOPIC_BASED',
  279.                         'feed_limit_topic'            => array('lang' => 'ACP_FEED_LIMIT',                'validate' => 'int:5',    'type' => 'text:3:4',                'explain' => true),
  280.                         'feed_topics_new'            => array('lang' => 'ACP_FEED_TOPICS_NEW',            'validate' => 'bool',    'type' => 'radio:enabled_disabled',    'explain' => true ),
  281.                         'feed_topics_active'        => array('lang' => 'ACP_FEED_TOPICS_ACTIVE',        'validate' => 'bool',    'type' => 'radio:enabled_disabled',    'explain' => true ),
  282.                         'feed_news_id'                => array('lang' => 'ACP_FEED_NEWS',                    'validate' => 'string',    'type' => 'custom', 'method' => 'select_news_forums', 'explain' => true),
  283.  
  284.                         'legend4'                    => 'ACP_FEED_SETTINGS_OTHER',
  285.                         'feed_overall_forums'        => array('lang'    => 'ACP_FEED_OVERALL_FORUMS',        'validate' => 'bool',    'type' => 'radio:enabled_disabled',    'explain' => true ),
  286.                         'feed_exclude_id'            => array('lang' => 'ACP_FEED_EXCLUDE_ID',            'validate' => 'string',    'type' => 'custom', 'method' => 'select_exclude_forums', 'explain' => true),
  287.                     )
  288.                 );
  289.             break;
  290.  
  291.             case 'cookie':
  292.                 $display_vars = array(
  293.                     'title'    => 'ACP_COOKIE_SETTINGS',
  294.                     'vars'    => array(
  295.                         'legend1'        => 'ACP_COOKIE_SETTINGS',
  296.                         'cookie_domain'    => array('lang' => 'COOKIE_DOMAIN',    'validate' => 'string',    'type' => 'text::255', 'explain' => false),
  297.                         'cookie_name'    => array('lang' => 'COOKIE_NAME',    'validate' => 'string',    'type' => 'text::16', 'explain' => false),
  298.                         'cookie_path'    => array('lang'    => 'COOKIE_PATH',    'validate' => 'string',    'type' => 'text::255', 'explain' => false),
  299.                         'cookie_secure'    => array('lang' => 'COOKIE_SECURE',    'validate' => 'bool',    'type' => 'radio:disabled_enabled', 'explain' => true)
  300.                     )
  301.                 );
  302.             break;
  303.  
  304.             case 'load':
  305.                 $display_vars = array(
  306.                     'title'    => 'ACP_LOAD_SETTINGS',
  307.                     'vars'    => array(
  308.                         'legend1'            => 'GENERAL_SETTINGS',
  309.                         'limit_load'        => array('lang' => 'LIMIT_LOAD',        'validate' => 'string',    'type' => 'text:4:4', 'explain' => true),
  310.                         'session_length'    => array('lang' => 'SESSION_LENGTH',    'validate' => 'int:60',    'type' => 'text:5:10', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
  311.                         'active_sessions'    => array('lang' => 'LIMIT_SESSIONS',    'validate' => 'int:0',    'type' => 'text:4:4', 'explain' => true),
  312.                         'load_online_time'    => array('lang' => 'ONLINE_LENGTH',        'validate' => 'int:0',    'type' => 'text:4:3', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']),
  313.  
  314.                         'legend2'                => 'GENERAL_OPTIONS',
  315.                         'load_db_track'            => array('lang' => 'YES_POST_MARKING',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  316.                         'load_db_lastread'        => array('lang' => 'YES_READ_MARKING',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  317.                         'load_anon_lastread'    => array('lang' => 'YES_ANON_READ_MARKING',    'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  318.                         'load_online'            => array('lang' => 'YES_ONLINE',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  319.                         'load_online_guests'    => array('lang' => 'YES_ONLINE_GUESTS',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  320.                         'load_onlinetrack'        => array('lang' => 'YES_ONLINE_TRACK',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  321.                         'load_birthdays'        => array('lang' => 'YES_BIRTHDAYS',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  322.                         'load_unreads_search'    => array('lang' => 'YES_UNREAD_SEARCH',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  323.                         'load_moderators'        => array('lang' => 'YES_MODERATORS',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  324.                         'load_jumpbox'            => array('lang' => 'YES_JUMPBOX',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  325.                         'load_user_activity'    => array('lang' => 'LOAD_USER_ACTIVITY',    'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  326.                         'load_tplcompile'        => array('lang' => 'RECOMPILE_STYLES',    'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  327.  
  328.                         'legend3'                => 'CUSTOM_PROFILE_FIELDS',
  329.                         'load_cpf_memberlist'    => array('lang' => 'LOAD_CPF_MEMBERLIST',    'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  330.                         'load_cpf_viewprofile'    => array('lang' => 'LOAD_CPF_VIEWPROFILE',    'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  331.                         'load_cpf_viewtopic'    => array('lang' => 'LOAD_CPF_VIEWTOPIC',    'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => false),
  332.  
  333.                         'legend4'                    => 'ACP_SUBMIT_CHANGES',
  334.                     )
  335.                 );
  336.             break;
  337.  
  338.             case 'auth':
  339.                 $display_vars = array(
  340.                     'title'    => 'ACP_AUTH_SETTINGS',
  341.                     'vars'    => array(
  342.                         'legend1'        => 'ACP_AUTH_SETTINGS',
  343.                         'auth_method'    => array('lang' => 'AUTH_METHOD',    'validate' => 'string',    'type' => 'select', 'method' => 'select_auth_method', 'explain' => false)
  344.                     )
  345.                 );
  346.             break;
  347.  
  348.             case 'server':
  349.                 $display_vars = array(
  350.                     'title'    => 'ACP_SERVER_SETTINGS',
  351.                     'vars'    => array(
  352.                         'legend1'                => 'ACP_SERVER_SETTINGS',
  353.                         'gzip_compress'            => array('lang' => 'ENABLE_GZIP',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  354.  
  355.                         'legend2'                => 'PATH_SETTINGS',
  356.                         'smilies_path'            => array('lang' => 'SMILIES_PATH',        'validate' => 'rpath',    'type' => 'text:20:255', 'explain' => true),
  357.                         'icons_path'            => array('lang' => 'ICONS_PATH',        'validate' => 'rpath',    'type' => 'text:20:255', 'explain' => true),
  358.                         'upload_icons_path'        => array('lang' => 'UPLOAD_ICONS_PATH',    'validate' => 'rpath',    'type' => 'text:20:255', 'explain' => true),
  359.                         'ranks_path'            => array('lang' => 'RANKS_PATH',        'validate' => 'rpath',    'type' => 'text:20:255', 'explain' => true),
  360.                         'legend3'                => 'SERVER_URL_SETTINGS',
  361.                         'force_server_vars'        => array('lang' => 'FORCE_SERVER_VARS',    'validate' => 'bool',            'type' => 'radio:yes_no', 'explain' => true),
  362.                         'server_protocol'        => array('lang' => 'SERVER_PROTOCOL',    'validate' => 'string',            'type' => 'text:10:10', 'explain' => true),
  363.                         'server_name'            => array('lang' => 'SERVER_NAME',        'validate' => 'string',            'type' => 'text:40:255', 'explain' => true),
  364.                         'server_port'            => array('lang' => 'SERVER_PORT',        'validate' => 'int:0',            'type' => 'text:5:5', 'explain' => true),
  365.                         'script_path'            => array('lang' => 'SCRIPT_PATH',        'validate' => 'script_path',    'type' => 'text::255', 'explain' => true),
  366.  
  367.                         'legend4'                    => 'ACP_SUBMIT_CHANGES',
  368.                     )
  369.                 );
  370.             break;
  371.  
  372.             case 'security':
  373.                 $display_vars = array(
  374.                     'title'    => 'ACP_SECURITY_SETTINGS',
  375.                     'vars'    => array(
  376.                         'legend1'                => 'ACP_SECURITY_SETTINGS',
  377.                         'allow_autologin'        => array('lang' => 'ALLOW_AUTOLOGIN',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  378.                         'max_autologin_time'    => array('lang' => 'AUTOLOGIN_LENGTH',        'validate' => 'int:0',    'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
  379.                         'ip_check'                => array('lang' => 'IP_VALID',                'validate' => 'int',    'type' => 'custom', 'method' => 'select_ip_check', 'explain' => true),
  380.                         'browser_check'            => array('lang' => 'BROWSER_VALID',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  381.                         'forwarded_for_check'    => array('lang' => 'FORWARDED_FOR_VALID',    'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  382.                         'referer_validation'    => array('lang' => 'REFERER_VALID',        'validate' => 'int:0:3','type' => 'custom', 'method' => 'select_ref_check', 'explain' => true),
  383.                         'check_dnsbl'            => array('lang' => 'CHECK_DNSBL',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  384.                         'email_check_mx'        => array('lang' => 'EMAIL_CHECK_MX',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  385.                         'pass_complex'            => array('lang' => 'PASSWORD_TYPE',            'validate' => 'string',    'type' => 'select', 'method' => 'select_password_chars', 'explain' => true),
  386.                         'chg_passforce'            => array('lang' => 'FORCE_PASS_CHANGE',        'validate' => 'int:0',    'type' => 'text:3:3', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
  387.                         'max_login_attempts'    => array('lang' => 'MAX_LOGIN_ATTEMPTS',    'validate' => 'int:0',    'type' => 'text:3:3', 'explain' => true),
  388.                         'tpl_allow_php'            => array('lang' => 'TPL_ALLOW_PHP',            'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  389.                         'form_token_lifetime'    => array('lang' => 'FORM_TIME_MAX',            'validate' => 'int:-1',    'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
  390.                         'form_token_sid_guests'    => array('lang' => 'FORM_SID_GUESTS',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  391.  
  392.                     )
  393.                 );
  394.             break;
  395.  
  396.             case 'email':
  397.                 $display_vars = array(
  398.                     'title'    => 'ACP_EMAIL_SETTINGS',
  399.                     'vars'    => array(
  400.                         'legend1'                => 'GENERAL_SETTINGS',
  401.                         'email_enable'            => array('lang' => 'ENABLE_EMAIL',            'validate' => 'bool',    'type' => 'radio:enabled_disabled', 'explain' => true),
  402.                         'board_email_form'        => array('lang' => 'BOARD_EMAIL_FORM',        'validate' => 'bool',    'type' => 'radio:enabled_disabled', 'explain' => true),
  403.                         'email_function_name'    => array('lang' => 'EMAIL_FUNCTION_NAME',    'validate' => 'string',    'type' => 'text:20:50', 'explain' => true),
  404.                         'email_package_size'    => array('lang' => 'EMAIL_PACKAGE_SIZE',    'validate' => 'int:0',    'type' => 'text:5:5', 'explain' => true),
  405.                         'board_contact'            => array('lang' => 'CONTACT_EMAIL',            'validate' => 'string',    'type' => 'text:25:100', 'explain' => true),
  406.                         'board_email'            => array('lang' => 'ADMIN_EMAIL',            'validate' => 'string',    'type' => 'text:25:100', 'explain' => true),
  407.                         'board_email_sig'        => array('lang' => 'EMAIL_SIG',                'validate' => 'string',    'type' => 'textarea:5:30', 'explain' => true),
  408.                         'board_hide_emails'        => array('lang' => 'BOARD_HIDE_EMAILS',        'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  409.  
  410.                         'legend2'                => 'SMTP_SETTINGS',
  411.                         'smtp_delivery'            => array('lang' => 'USE_SMTP',                'validate' => 'bool',    'type' => 'radio:yes_no', 'explain' => true),
  412.                         'smtp_host'                => array('lang' => 'SMTP_SERVER',            'validate' => 'string',    'type' => 'text:25:50', 'explain' => false),
  413.                         'smtp_port'                => array('lang' => 'SMTP_PORT',                'validate' => 'int:0',    'type' => 'text:4:5', 'explain' => true),
  414.                         'smtp_auth_method'        => array('lang' => 'SMTP_AUTH_METHOD',        'validate' => 'string',    'type' => 'select', 'method' => 'mail_auth_select', 'explain' => true),
  415.                         'smtp_username'            => array('lang' => 'SMTP_USERNAME',            'validate' => 'string',    'type' => 'text:25:255', 'explain' => true),
  416.                         'smtp_password'            => array('lang' => 'SMTP_PASSWORD',            'validate' => 'string',    'type' => 'password:25:255', 'explain' => true),
  417.  
  418.                         'legend3'                    => 'ACP_SUBMIT_CHANGES',
  419.                     )
  420.                 );
  421.             break;
  422.  
  423.             default:
  424.                 trigger_error('NO_MODE', E_USER_ERROR);
  425.             break;
  426.         }
  427.  
  428.         if (isset($display_vars['lang']))
  429.         {
  430.             $user->add_lang($display_vars['lang']);
  431.         }
  432.  
  433.         $this->new_config = $config;
  434.         $cfg_array = (isset($_REQUEST['config'])) ? utf8_normalize_nfc(request_var('config', array('' => ''), true)) : $this->new_config;
  435.         $error = array();
  436.  
  437.         // We validate the complete config if whished
  438.         validate_config_vars($display_vars['vars'], $cfg_array, $error);
  439.  
  440.         if ($submit && !check_form_key($form_key))
  441.         {
  442.             $error[] = $user->lang['FORM_INVALID'];
  443.         }
  444.         // Do not write values if there is an error
  445.         if (sizeof($error))
  446.         {
  447.             $submit = false;
  448.         }
  449.  
  450.         // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to...
  451.         foreach ($display_vars['vars'] as $config_name => $null)
  452.         {
  453.             if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false)
  454.             {
  455.                 continue;
  456.             }
  457.  
  458.             if ($config_name == 'auth_method' || $config_name == 'feed_news_id' || $config_name == 'feed_exclude_id')
  459.             {
  460.                 continue;
  461.             }
  462.  
  463.             $this->new_config[$config_name] = $config_value = $cfg_array[$config_name];
  464.  
  465.             if ($config_name == 'email_function_name')
  466.             {
  467.                 $this->new_config['email_function_name'] = trim(str_replace(array('(', ')'), array('', ''), $this->new_config['email_function_name']));
  468.                 $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'];
  469.                 $config_value = $this->new_config['email_function_name'];
  470.             }
  471.  
  472.             if ($submit)
  473.             {
  474.                 set_config($config_name, $config_value);
  475.  
  476.                 if ($config_name == 'allow_quick_reply' && isset($_POST['allow_quick_reply_enable']))
  477.                 {
  478.                     enable_bitfield_column_flag(FORUMS_TABLE, 'forum_flags', log(FORUM_FLAG_QUICK_REPLY, 2));
  479.                 }
  480.             }
  481.         }
  482.  
  483.         // Store news and exclude ids
  484.         if ($mode == 'feed' && $submit)
  485.         {
  486.             $cache->destroy('_feed_news_forum_ids');
  487.             $cache->destroy('_feed_excluded_forum_ids');
  488.  
  489.             $this->store_feed_forums(FORUM_OPTION_FEED_NEWS, 'feed_news_id');
  490.             $this->store_feed_forums(FORUM_OPTION_FEED_EXCLUDE, 'feed_exclude_id');
  491.         }
  492.  
  493.         if ($mode == 'auth')
  494.         {
  495.             // Retrieve a list of auth plugins and check their config values
  496.             $auth_plugins = array();
  497.  
  498.             $dp = @opendir($phpbb_root_path . 'includes/auth');
  499.  
  500.             if ($dp)
  501.             {
  502.                 while (($file = readdir($dp)) !== false)
  503.                 {
  504.                     if (preg_match('#^auth_(.*?)\.' . $phpEx . '$#', $file))
  505.                     {
  506.                         $auth_plugins[] = basename(preg_replace('#^auth_(.*?)\.' . $phpEx . '$#', '\1', $file));
  507.                     }
  508.                 }
  509.                 closedir($dp);
  510.  
  511.                 sort($auth_plugins);
  512.             }
  513.  
  514.             $updated_auth_settings = false;
  515.             $old_auth_config = array();
  516.             foreach ($auth_plugins as $method)
  517.             {
  518.                 if ($method && file_exists($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx))
  519.                 {
  520.                     include_once($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx);
  521.  
  522.                     $method = 'acp_' . $method;
  523.                     if (function_exists($method))
  524.                     {
  525.                         if ($fields = $method($this->new_config))
  526.                         {
  527.                             // Check if we need to create config fields for this plugin and save config when submit was pressed
  528.                             foreach ($fields['config'] as $field)
  529.                             {
  530.                                 if (!isset($config[$field]))
  531.                                 {
  532.                                     set_config($field, '');
  533.                                 }
  534.  
  535.                                 if (!isset($cfg_array[$field]) || strpos($field, 'legend') !== false)
  536.                                 {
  537.                                     continue;
  538.                                 }
  539.  
  540.                                 $old_auth_config[$field] = $this->new_config[$field];
  541.                                 $config_value = $cfg_array[$field];
  542.                                 $this->new_config[$field] = $config_value;
  543.  
  544.                                 if ($submit)
  545.                                 {
  546.                                     $updated_auth_settings = true;
  547.                                     set_config($field, $config_value);
  548.                                 }
  549.                             }
  550.                         }
  551.                         unset($fields);
  552.                     }
  553.                 }
  554.             }
  555.  
  556.             if ($submit && (($cfg_array['auth_method'] != $this->new_config['auth_method']) || $updated_auth_settings))
  557.             {
  558.                 $method = basename($cfg_array['auth_method']);
  559.                 if ($method && in_array($method, $auth_plugins))
  560.                 {
  561.                     include_once($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx);
  562.  
  563.                     $method = 'init_' . $method;
  564.                     if (function_exists($method))
  565.                     {
  566.                         if ($error = $method())
  567.                         {
  568.                             foreach ($old_auth_config as $config_name => $config_value)
  569.                             {
  570.                                 set_config($config_name, $config_value);
  571.                             }
  572.                             trigger_error($error . adm_back_link($this->u_action), E_USER_WARNING);
  573.                         }
  574.                     }
  575.                     set_config('auth_method', basename($cfg_array['auth_method']));
  576.                 }
  577.                 else
  578.                 {
  579.                     trigger_error('NO_AUTH_PLUGIN', E_USER_ERROR);
  580.                 }
  581.             }
  582.         }
  583.  
  584.         if ($submit)
  585.         {
  586.             add_log('admin', 'LOG_CONFIG_' . strtoupper($mode));
  587.  
  588.             trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
  589.         }
  590.  
  591.         $this->tpl_name = 'acp_board';
  592.         $this->page_title = $display_vars['title'];
  593.  
  594.         $template->assign_vars(array(
  595.             'L_TITLE'            => $user->lang[$display_vars['title']],
  596.             'L_TITLE_EXPLAIN'    => $user->lang[$display_vars['title'] . '_EXPLAIN'],
  597.  
  598.             'S_ERROR'            => (sizeof($error)) ? true : false,
  599.             'ERROR_MSG'            => implode('<br />', $error),
  600.  
  601.             'U_ACTION'            => $this->u_action)
  602.         );
  603.  
  604.         // Output relevant page
  605.         foreach ($display_vars['vars'] as $config_key => $vars)
  606.         {
  607.             if (!is_array($vars) && strpos($config_key, 'legend') === false)
  608.             {
  609.                 continue;
  610.             }
  611.  
  612.             if (strpos($config_key, 'legend') !== false)
  613.             {
  614.                 $template->assign_block_vars('options', array(
  615.                     'S_LEGEND'        => true,
  616.                     'LEGEND'        => (isset($user->lang[$vars])) ? $user->lang[$vars] : $vars)
  617.                 );
  618.  
  619.                 continue;
  620.             }
  621.  
  622.             $type = explode(':', $vars['type']);
  623.  
  624.             $l_explain = '';
  625.             if ($vars['explain'] && isset($vars['lang_explain']))
  626.             {
  627.                 $l_explain = (isset($user->lang[$vars['lang_explain']])) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain'];
  628.             }
  629.             else if ($vars['explain'])
  630.             {
  631.                 $l_explain = (isset($user->lang[$vars['lang'] . '_EXPLAIN'])) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : '';
  632.             }
  633.  
  634.             $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars);
  635.  
  636.             if (empty($content))
  637.             {
  638.                 continue;
  639.             }
  640.  
  641.             $template->assign_block_vars('options', array(
  642.                 'KEY'            => $config_key,
  643.                 'TITLE'            => (isset($user->lang[$vars['lang']])) ? $user->lang[$vars['lang']] : $vars['lang'],
  644.                 'S_EXPLAIN'        => $vars['explain'],
  645.                 'TITLE_EXPLAIN'    => $l_explain,
  646.                 'CONTENT'        => $content,
  647.                 )
  648.             );
  649.  
  650.             unset($display_vars['vars'][$config_key]);
  651.         }
  652.  
  653.         if ($mode == 'auth')
  654.         {
  655.             $template->assign_var('S_AUTH', true);
  656.  
  657.             foreach ($auth_plugins as $method)
  658.             {
  659.                 if ($method && file_exists($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx))
  660.                 {
  661.                     $method = 'acp_' . $method;
  662.                     if (function_exists($method))
  663.                     {
  664.                         $fields = $method($this->new_config);
  665.  
  666.                         if ($fields['tpl'])
  667.                         {
  668.                             $template->assign_block_vars('auth_tpl', array(
  669.                                 'TPL'    => $fields['tpl'])
  670.                             );
  671.                         }
  672.                         unset($fields);
  673.                     }
  674.                 }
  675.             }
  676.         }
  677.     }
  678.  
  679.     /**
  680.     * Select auth method
  681.     */
  682.     function select_auth_method($selected_method, $key = '')
  683.     {
  684.         global $phpbb_root_path, $phpEx;
  685.  
  686.         $auth_plugins = array();
  687.  
  688.         $dp = @opendir($phpbb_root_path . 'includes/auth');
  689.  
  690.         if (!$dp)
  691.         {
  692.             return '';
  693.         }
  694.  
  695.         while (($file = readdir($dp)) !== false)
  696.         {
  697.             if (preg_match('#^auth_(.*?)\.' . $phpEx . '$#', $file))
  698.             {
  699.                 $auth_plugins[] = preg_replace('#^auth_(.*?)\.' . $phpEx . '$#', '\1', $file);
  700.             }
  701.         }
  702.         closedir($dp);
  703.  
  704.         sort($auth_plugins);
  705.  
  706.         $auth_select = '';
  707.         foreach ($auth_plugins as $method)
  708.         {
  709.             $selected = ($selected_method == $method) ? ' selected="selected"' : '';
  710.             $auth_select .= '<option value="' . $method . '"' . $selected . '>' . ucfirst($method) . '</option>';
  711.         }
  712.  
  713.         return $auth_select;
  714.     }
  715.  
  716.     /**
  717.     * Select mail authentication method
  718.     */
  719.     function mail_auth_select($selected_method, $key = '')
  720.     {
  721.         global $user;
  722.  
  723.         $auth_methods = array('PLAIN', 'LOGIN', 'CRAM-MD5', 'DIGEST-MD5', 'POP-BEFORE-SMTP');
  724.         $s_smtp_auth_options = '';
  725.  
  726.         foreach ($auth_methods as $method)
  727.         {
  728.             $s_smtp_auth_options .= '<option value="' . $method . '"' . (($selected_method == $method) ? ' selected="selected"' : '') . '>' . $user->lang['SMTP_' . str_replace('-', '_', $method)] . '</option>';
  729.         }
  730.  
  731.         return $s_smtp_auth_options;
  732.     }
  733.  
  734.     /**
  735.     * Select full folder action
  736.     */
  737.     function full_folder_select($value, $key = '')
  738.     {
  739.         global $user;
  740.  
  741.         return '<option value="1"' . (($value == 1) ? ' selected="selected"' : '') . '>' . $user->lang['DELETE_OLDEST_MESSAGES'] . '</option><option value="2"' . (($value == 2) ? ' selected="selected"' : '') . '>' . $user->lang['HOLD_NEW_MESSAGES_SHORT'] . '</option>';
  742.     }
  743.  
  744.     /**
  745.     * Select ip validation
  746.     */
  747.     function select_ip_check($value, $key = '')
  748.     {
  749.         $radio_ary = array(4 => 'ALL', 3 => 'CLASS_C', 2 => 'CLASS_B', 0 => 'NO_IP_VALIDATION');
  750.  
  751.         return h_radio('config[ip_check]', $radio_ary, $value, $key);
  752.     }
  753.  
  754.     /**
  755.     * Select referer validation
  756.     */
  757.     function select_ref_check($value, $key = '')
  758.     {
  759.         $radio_ary = array(REFERER_VALIDATE_PATH => 'REF_PATH', REFERER_VALIDATE_HOST => 'REF_HOST', REFERER_VALIDATE_NONE => 'NO_REF_VALIDATION');
  760.  
  761.         return h_radio('config[referer_validation]', $radio_ary, $value, $key);
  762.     }
  763.  
  764.     /**
  765.     * Select account activation method
  766.     */
  767.     function select_acc_activation($value, $key = '')
  768.     {
  769.         global $user, $config;
  770.  
  771.         $radio_ary = array(USER_ACTIVATION_DISABLE => 'ACC_DISABLE', USER_ACTIVATION_NONE => 'ACC_NONE');
  772.         if ($config['email_enable'])
  773.         {
  774.             $radio_ary += array(USER_ACTIVATION_SELF => 'ACC_USER', USER_ACTIVATION_ADMIN => 'ACC_ADMIN');
  775.         }
  776.  
  777.         return h_radio('config[require_activation]', $radio_ary, $value, $key);
  778.     }
  779.  
  780.     /**
  781.     * Maximum/Minimum username length
  782.     */
  783.     function username_length($value, $key = '')
  784.     {
  785.         global $user;
  786.  
  787.         return '<input id="' . $key . '" type="text" size="3" maxlength="3" name="config[min_name_chars]" value="' . $value . '" /> ' . $user->lang['MIN_CHARS'] . '&nbsp;&nbsp;<input type="text" size="3" maxlength="3" name="config[max_name_chars]" value="' . $this->new_config['max_name_chars'] . '" /> ' . $user->lang['MAX_CHARS'];
  788.     }
  789.  
  790.     /**
  791.     * Allowed chars in usernames
  792.     */
  793.     function select_username_chars($selected_value, $key)
  794.     {
  795.         global $user;
  796.  
  797.         $user_char_ary = array('USERNAME_CHARS_ANY', 'USERNAME_ALPHA_ONLY', 'USERNAME_ALPHA_SPACERS', 'USERNAME_LETTER_NUM', 'USERNAME_LETTER_NUM_SPACERS', 'USERNAME_ASCII');
  798.         $user_char_options = '';
  799.         foreach ($user_char_ary as $user_type)
  800.         {
  801.             $selected = ($selected_value == $user_type) ? ' selected="selected"' : '';
  802.             $user_char_options .= '<option value="' . $user_type . '"' . $selected . '>' . $user->lang[$user_type] . '</option>';
  803.         }
  804.  
  805.         return $user_char_options;
  806.     }
  807.  
  808.     /**
  809.     * Maximum/Minimum password length
  810.     */
  811.     function password_length($value, $key)
  812.     {
  813.         global $user;
  814.  
  815.         return '<input id="' . $key . '" type="text" size="3" maxlength="3" name="config[min_pass_chars]" value="' . $value . '" /> ' . $user->lang['MIN_CHARS'] . '&nbsp;&nbsp;<input type="text" size="3" maxlength="3" name="config[max_pass_chars]" value="' . $this->new_config['max_pass_chars'] . '" /> ' . $user->lang['MAX_CHARS'];
  816.     }
  817.  
  818.     /**
  819.     * Required chars in passwords
  820.     */
  821.     function select_password_chars($selected_value, $key)
  822.     {
  823.         global $user;
  824.  
  825.         $pass_type_ary = array('PASS_TYPE_ANY', 'PASS_TYPE_CASE', 'PASS_TYPE_ALPHA', 'PASS_TYPE_SYMBOL');
  826.         $pass_char_options = '';
  827.         foreach ($pass_type_ary as $pass_type)
  828.         {
  829.             $selected = ($selected_value == $pass_type) ? ' selected="selected"' : '';
  830.             $pass_char_options .= '<option value="' . $pass_type . '"' . $selected . '>' . $user->lang[$pass_type] . '</option>';
  831.         }
  832.  
  833.         return $pass_char_options;
  834.     }
  835.  
  836.     /**
  837.     * Select bump interval
  838.     */
  839.     function bump_interval($value, $key)
  840.     {
  841.         global $user;
  842.  
  843.         $s_bump_type = '';
  844.         $types = array('m' => 'MINUTES', 'h' => 'HOURS', 'd' => 'DAYS');
  845.         foreach ($types as $type => $lang)
  846.         {
  847.             $selected = ($this->new_config['bump_type'] == $type) ? ' selected="selected"' : '';
  848.             $s_bump_type .= '<option value="' . $type . '"' . $selected . '>' . $user->lang[$lang] . '</option>';
  849.         }
  850.  
  851.         return '<input id="' . $key . '" type="text" size="3" maxlength="4" name="config[bump_interval]" value="' . $value . '" />&nbsp;<select name="config[bump_type]">' . $s_bump_type . '</select>';
  852.     }
  853.  
  854.     /**
  855.     * Board disable option and message
  856.     */
  857.     function board_disable($value, $key)
  858.     {
  859.         global $user;
  860.  
  861.         $radio_ary = array(1 => 'YES', 0 => 'NO');
  862.  
  863.         return h_radio('config[board_disable]', $radio_ary, $value) . '<br /><input id="' . $key . '" type="text" name="config[board_disable_msg]" maxlength="255" size="40" value="' . $this->new_config['board_disable_msg'] . '" />';
  864.     }
  865.  
  866.     /**
  867.     * Global quick reply enable/disable setting and button to enable in all forums
  868.     */
  869.     function quick_reply($value, $key)
  870.     {
  871.         global $user;
  872.  
  873.         $radio_ary = array(1 => 'YES', 0 => 'NO');
  874.  
  875.         return h_radio('config[allow_quick_reply]', $radio_ary, $value) .
  876.             '<br /><br /><input class="button2" type="submit" id="' . $key . '_enable" name="' . $key . '_enable" value="' . $user->lang['ALLOW_QUICK_REPLY_BUTTON'] . '" />';
  877.     }
  878.  
  879.  
  880.     /**
  881.     * Select default dateformat
  882.     */
  883.     function dateformat_select($value, $key)
  884.     {
  885.         global $user, $config;
  886.  
  887.         // Let the format_date function operate with the acp values
  888.         $old_tz = $user->timezone;
  889.         $old_dst = $user->dst;
  890.  
  891.         $user->timezone = $config['board_timezone'] * 3600;
  892.         $user->dst = $config['board_dst'] * 3600;
  893.  
  894.         $dateformat_options = '';
  895.  
  896.         foreach ($user->lang['dateformats'] as $format => $null)
  897.         {
  898.             $dateformat_options .= '<option value="' . $format . '"' . (($format == $value) ? ' selected="selected"' : '') . '>';
  899.             $dateformat_options .= $user->format_date(time(), $format, false) . ((strpos($format, '|') !== false) ? $user->lang['VARIANT_DATE_SEPARATOR'] . $user->format_date(time(), $format, true) : '');
  900.             $dateformat_options .= '</option>';
  901.         }
  902.  
  903.         $dateformat_options .= '<option value="custom"';
  904.         if (!isset($user->lang['dateformats'][$value]))
  905.         {
  906.             $dateformat_options .= ' selected="selected"';
  907.         }
  908.         $dateformat_options .= '>' . $user->lang['CUSTOM_DATEFORMAT'] . '</option>';
  909.  
  910.         // Reset users date options
  911.         $user->timezone = $old_tz;
  912.         $user->dst = $old_dst;
  913.  
  914.         return "<select name=\"dateoptions\" id=\"dateoptions\" onchange=\"if (this.value == 'custom') { document.getElementById('" . addslashes($key) . "').value = '" . addslashes($value) . "'; } else { document.getElementById('" . addslashes($key) . "').value = this.value; }\">$dateformat_options</select>
  915.         <input type=\"text\" name=\"config[$key]\" id=\"$key\" value=\"$value\" maxlength=\"30\" />";
  916.     }
  917.  
  918.     /**
  919.     * Select multiple forums
  920.     */
  921.     function select_news_forums($value, $key)
  922.     {
  923.         global $user, $config;
  924.  
  925.         $forum_list = make_forum_select(false, false, true, true, true, false, true);
  926.  
  927.         // Build forum options
  928.         $s_forum_options = '<select id="' . $key . '" name="' . $key . '[]" multiple="multiple">';
  929.         foreach ($forum_list as $f_id => $f_row)
  930.         {
  931.             $f_row['selected'] = phpbb_optionget(FORUM_OPTION_FEED_NEWS, $f_row['forum_options']);
  932.  
  933.             $s_forum_options .= '<option value="' . $f_id . '"' . (($f_row['selected']) ? ' selected="selected"' : '') . (($f_row['disabled']) ? ' disabled="disabled" class="disabled-option"' : '') . '>' . $f_row['padding'] . $f_row['forum_name'] . '</option>';
  934.         }
  935.         $s_forum_options .= '</select>';
  936.  
  937.         return $s_forum_options;
  938.     }
  939.  
  940.     function select_exclude_forums($value, $key)
  941.     {
  942.         global $user, $config;
  943.  
  944.         $forum_list = make_forum_select(false, false, true, true, true, false, true);
  945.  
  946.         // Build forum options
  947.         $s_forum_options = '<select id="' . $key . '" name="' . $key . '[]" multiple="multiple">';
  948.         foreach ($forum_list as $f_id => $f_row)
  949.         {
  950.             $f_row['selected'] = phpbb_optionget(FORUM_OPTION_FEED_EXCLUDE, $f_row['forum_options']);
  951.  
  952.             $s_forum_options .= '<option value="' . $f_id . '"' . (($f_row['selected']) ? ' selected="selected"' : '') . (($f_row['disabled']) ? ' disabled="disabled" class="disabled-option"' : '') . '>' . $f_row['padding'] . $f_row['forum_name'] . '</option>';
  953.         }
  954.         $s_forum_options .= '</select>';
  955.  
  956.         return $s_forum_options;
  957.     }
  958.  
  959.     function store_feed_forums($option, $key)
  960.     {
  961.         global $db, $cache;
  962.  
  963.         // Get key
  964.         $values = request_var($key, array(0 => 0));
  965.  
  966.         // Empty option bit for all forums
  967.         $sql = 'UPDATE ' . FORUMS_TABLE . '
  968.             SET forum_options = forum_options - ' . (1 << $option) . '
  969.             WHERE ' . $db->sql_bit_and('forum_options', $option, '<> 0');
  970.         $db->sql_query($sql);
  971.  
  972.         // Already emptied for all...
  973.         if (sizeof($values))
  974.         {
  975.             // Set for selected forums
  976.             $sql = 'UPDATE ' . FORUMS_TABLE . '
  977.                 SET forum_options = forum_options + ' . (1 << $option) . '
  978.                 WHERE ' . $db->sql_in_set('forum_id', $values);
  979.             $db->sql_query($sql);
  980.         }
  981.  
  982.         // Empty sql cache for forums table because options changed
  983.         $cache->destroy('sql', FORUMS_TABLE);
  984.     }
  985.  
  986. }
  987.  
  988. ?>
Jan 2 '11 #1
5 1916
Dormilich
8,658 Expert Mod 8TB
there’s a missing comma at line 68.
Jan 3 '11 #2
HaLo2FrEeEk
404 256MB
To expand on that, line 68:

Expand|Select|Wrap|Line Numbers
  1.                         'warnings_expire_days'
You don't set a value at all. If you don't want it to have a value, do this:

Expand|Select|Wrap|Line Numbers
  1.                         'warnings_expire_days' => '',
No more error.

Also, in the future, read your error messages. It said:

in [filename] on line 69

Which means that your error happens somewhere on or before line 69. There was no reason to post 988 lines of code.
Jan 4 '11 #3
Dormilich
8,658 Expert Mod 8TB
Expand|Select|Wrap|Line Numbers
  1. 'warnings_expire_days'
You don't set a value at all.
'warnings_expire_days' is the value.
Jan 4 '11 #4
HaLo2FrEeEk
404 256MB
I'm on my phone, so I can't scroll through the code, but from what I remember, warnings_expire_days is the key in an associative array, it hasn't been given a value.
Jan 5 '11 #5
Dormilich
8,658 Expert Mod 8TB
if you don’t give the "key" a value, the key becomes the value itself. a value can exist without key (in this case the next available index number is used as key) but a key can’t exist without value. if a key has "no value", you should assign NULL.
Jan 5 '11 #6

Sign in to post your reply or Sign up for a free account.

Similar topics

8
by: Wescotte | last post by:
The error message Parse error: syntax error, unexpected $end in FILE on line X is one I run into frequently and I know the cause is I missed an ending quote. Is there an easy way to determine...
3
by: basswhizz | last post by:
Hi everyone im a high school student and I'm having trouble with one of my projects could you please help!! I'm getting this error message. Parse error: syntax error, unexpected...
36
by: rhys | last post by:
My Gurus and Angels -- Please pardon this old-school programmer, only recently enlightened to open-source, having been trapped in the convenience of proprietary lingos for way too long. My...
3
by: sclarkstone | last post by:
Im getting this error; Parse error: syntax error, unexpected T_STRING, expecting ':' or ';' with this line; header ('postcodesearch.php?e=nw&pcode=',); I cant find whats wrong, can anyone...
3
paulrajj
by: paulrajj | last post by:
hi to all, i am getting syntax error on my code.. Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in D:\xampp\htdocs\Dummy\paulraj\matrim\exam.php on line 62 ...
10
by: benicio | last post by:
Parse error: syntax error, unexpected T_STRING, expecting '(' in C:\wamp\www\study_group\includes\functions.php on line 19 I got this error and this syntax is from 8 to 19th line. <?php ...
2
by: TanjaPetro | last post by:
Hello to everyone. I changed a few files on my site and when I tried to log into the admin area I got this message: Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting...
1
by: karine | last post by:
Hi, I keep getting this error message "Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ']' in /home/env49986/public_html/welcome.php on line 16" below is the code ...
4
by: 9139530 | last post by:
Hey, I'm getting the error: Parse error: syntax error, unexpected T_VARIABLE in Z:\home\baza\www\get2.php on line 7 with this code (have 2 pages , html-from page (reguser.php) and...
1
by: Carrie Kemp | last post by:
I am having an error that reads the code that is in question is: $list_data->save($dataFile); How would I fix this?
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.