Advertisement
slek_12000

acp-board.php

Oct 16th, 2014
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 49.41 KB | None | 0 0
  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. 'board_disable' => array('lang' => 'DISABLE_BOARD', 'validate' => 'bool', 'type' => 'custom', 'method' => 'board_disable', 'explain' => true),
  58. 'board_disable_msg' => false,
  59. 'default_lang' => array('lang' => 'DEFAULT_LANGUAGE', 'validate' => 'lang', 'type' => 'select', 'function' => 'language_select', 'params' => array('{CONFIG_VALUE}'), 'explain' => false),
  60. 'default_dateformat' => array('lang' => 'DEFAULT_DATE_FORMAT', 'validate' => 'string', 'type' => 'custom', 'method' => 'dateformat_select', 'explain' => true),
  61. 'board_timezone' => array('lang' => 'SYSTEM_TIMEZONE', 'validate' => 'string', 'type' => 'select', 'function' => 'tz_select', 'params' => array('{CONFIG_VALUE}', 1), 'explain' => true),
  62. 'board_dst' => array('lang' => 'SYSTEM_DST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
  63. 'default_style' => array('lang' => 'DEFAULT_STYLE', 'validate' => 'int', 'type' => 'select', 'function' => 'style_select', 'params' => array('{CONFIG_VALUE}', false), 'explain' => false),
  64. 'override_user_style' => array('lang' => 'OVERRIDE_STYLE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
  65.  
  66. 'legend2' => 'WARNINGS',
  67. 'warnings_expire_days' => array('lang' => 'WARNINGS_EXPIRE', 'validate' => 'int', 'type' => 'text:3:4', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
  68.  
  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:1', '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' => 'select', '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.  
  361. 'legend3' => 'SERVER_URL_SETTINGS',
  362. 'force_server_vars' => array('lang' => 'FORCE_SERVER_VARS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
  363. 'server_protocol' => array('lang' => 'SERVER_PROTOCOL', 'validate' => 'string', 'type' => 'text:10:10', 'explain' => true),
  364. 'server_name' => array('lang' => 'SERVER_NAME', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => true),
  365. 'server_port' => array('lang' => 'SERVER_PORT', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true),
  366. 'script_path' => array('lang' => 'SCRIPT_PATH', 'validate' => 'script_path', 'type' => 'text::255', 'explain' => true),
  367.  
  368. 'legend4' => 'ACP_SUBMIT_CHANGES',
  369. )
  370. );
  371. break;
  372.  
  373. case 'security':
  374. $display_vars = array(
  375. 'title' => 'ACP_SECURITY_SETTINGS',
  376. 'vars' => array(
  377. 'legend1' => 'ACP_SECURITY_SETTINGS',
  378. 'allow_autologin' => array('lang' => 'ALLOW_AUTOLOGIN', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
  379. 'max_autologin_time' => array('lang' => 'AUTOLOGIN_LENGTH', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
  380. 'ip_check' => array('lang' => 'IP_VALID', 'validate' => 'int', 'type' => 'custom', 'method' => 'select_ip_check', 'explain' => true),
  381. 'browser_check' => array('lang' => 'BROWSER_VALID', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
  382. 'forwarded_for_check' => array('lang' => 'FORWARDED_FOR_VALID', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
  383. 'referer_validation' => array('lang' => 'REFERER_VALID', 'validate' => 'int:0:3','type' => 'custom', 'method' => 'select_ref_check', 'explain' => true),
  384. 'check_dnsbl' => array('lang' => 'CHECK_DNSBL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
  385. 'email_check_mx' => array('lang' => 'EMAIL_CHECK_MX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
  386. 'max_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:8:255', 'type' => false, 'method' => false, 'explain' => false,),
  387. 'min_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:1', 'type' => 'custom', 'method' => 'password_length', 'explain' => true),
  388. 'pass_complex' => array('lang' => 'PASSWORD_TYPE', 'validate' => 'string', 'type' => 'select', 'method' => 'select_password_chars', 'explain' => true),
  389. 'chg_passforce' => array('lang' => 'FORCE_PASS_CHANGE', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
  390. 'max_login_attempts' => array('lang' => 'MAX_LOGIN_ATTEMPTS', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true),
  391. 'ip_login_limit_max' => array('lang' => 'IP_LOGIN_LIMIT_MAX', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true),
  392. 'ip_login_limit_time' => array('lang' => 'IP_LOGIN_LIMIT_TIME', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
  393. 'ip_login_limit_use_forwarded' => array('lang' => 'IP_LOGIN_LIMIT_USE_FORWARDED', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
  394. 'tpl_allow_php' => array('lang' => 'TPL_ALLOW_PHP', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
  395. 'form_token_lifetime' => array('lang' => 'FORM_TIME_MAX', 'validate' => 'int:-1', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
  396. 'form_token_sid_guests' => array('lang' => 'FORM_SID_GUESTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
  397.  
  398. )
  399. );
  400. break;
  401.  
  402. case 'email':
  403. $display_vars = array(
  404. 'title' => 'ACP_EMAIL_SETTINGS',
  405. 'vars' => array(
  406. 'legend1' => 'GENERAL_SETTINGS',
  407. 'email_enable' => array('lang' => 'ENABLE_EMAIL', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true),
  408. 'board_email_form' => array('lang' => 'BOARD_EMAIL_FORM', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true),
  409. 'email_function_name' => array('lang' => 'EMAIL_FUNCTION_NAME', 'validate' => 'string', 'type' => 'text:20:50', 'explain' => true),
  410. 'email_package_size' => array('lang' => 'EMAIL_PACKAGE_SIZE', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true),
  411. 'board_contact' => array('lang' => 'CONTACT_EMAIL', 'validate' => 'email', 'type' => 'text:25:100', 'explain' => true),
  412. 'board_email' => array('lang' => 'ADMIN_EMAIL', 'validate' => 'email', 'type' => 'text:25:100', 'explain' => true),
  413. 'board_email_sig' => array('lang' => 'EMAIL_SIG', 'validate' => 'string', 'type' => 'textarea:5:30', 'explain' => true),
  414. 'board_hide_emails' => array('lang' => 'BOARD_HIDE_EMAILS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
  415.  
  416. 'legend2' => 'SMTP_SETTINGS',
  417. 'smtp_delivery' => array('lang' => 'USE_SMTP', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
  418. 'smtp_host' => array('lang' => 'SMTP_SERVER', 'validate' => 'string', 'type' => 'text:25:50', 'explain' => false),
  419. 'smtp_port' => array('lang' => 'SMTP_PORT', 'validate' => 'int:0', 'type' => 'text:4:5', 'explain' => true),
  420. 'smtp_auth_method' => array('lang' => 'SMTP_AUTH_METHOD', 'validate' => 'string', 'type' => 'select', 'method' => 'mail_auth_select', 'explain' => true),
  421. 'smtp_username' => array('lang' => 'SMTP_USERNAME', 'validate' => 'string', 'type' => 'text:25:255', 'explain' => true),
  422. 'smtp_password' => array('lang' => 'SMTP_PASSWORD', 'validate' => 'string', 'type' => 'password:25:255', 'explain' => true),
  423.  
  424. 'legend3' => 'ACP_SUBMIT_CHANGES',
  425. )
  426. );
  427. break;
  428.  
  429. default:
  430. trigger_error('NO_MODE', E_USER_ERROR);
  431. break;
  432. }
  433.  
  434. if (isset($display_vars['lang']))
  435. {
  436. $user->add_lang($display_vars['lang']);
  437. }
  438.  
  439. $this->new_config = $config;
  440. $cfg_array = (isset($_REQUEST['config'])) ? utf8_normalize_nfc(request_var('config', array('' => ''), true)) : $this->new_config;
  441. $error = array();
  442.  
  443. // We validate the complete config if whished
  444. validate_config_vars($display_vars['vars'], $cfg_array, $error);
  445.  
  446. if ($submit && !check_form_key($form_key))
  447. {
  448. $error[] = $user->lang['FORM_INVALID'];
  449. }
  450. // Do not write values if there is an error
  451. if (sizeof($error))
  452. {
  453. $submit = false;
  454. }
  455.  
  456. // We go through the display_vars to make sure no one is trying to set variables he/she is not allowed to...
  457. foreach ($display_vars['vars'] as $config_name => $null)
  458. {
  459. if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false)
  460. {
  461. continue;
  462. }
  463.  
  464. if ($config_name == 'auth_method' || $config_name == 'feed_news_id' || $config_name == 'feed_exclude_id')
  465. {
  466. continue;
  467. }
  468.  
  469. $this->new_config[$config_name] = $config_value = $cfg_array[$config_name];
  470.  
  471. if ($config_name == 'email_function_name')
  472. {
  473. $this->new_config['email_function_name'] = trim(str_replace(array('(', ')'), array('', ''), $this->new_config['email_function_name']));
  474. $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'];
  475. $config_value = $this->new_config['email_function_name'];
  476. }
  477.  
  478. if ($submit)
  479. {
  480. set_config($config_name, $config_value);
  481.  
  482. if ($config_name == 'allow_quick_reply' && isset($_POST['allow_quick_reply_enable']))
  483. {
  484. enable_bitfield_column_flag(FORUMS_TABLE, 'forum_flags', log(FORUM_FLAG_QUICK_REPLY, 2));
  485. }
  486. }
  487. }
  488.  
  489. // Store news and exclude ids
  490. if ($mode == 'feed' && $submit)
  491. {
  492. $cache->destroy('_feed_news_forum_ids');
  493. $cache->destroy('_feed_excluded_forum_ids');
  494.  
  495. $this->store_feed_forums(FORUM_OPTION_FEED_NEWS, 'feed_news_id');
  496. $this->store_feed_forums(FORUM_OPTION_FEED_EXCLUDE, 'feed_exclude_id');
  497. }
  498.  
  499. if ($mode == 'auth')
  500. {
  501. // Retrieve a list of auth plugins and check their config values
  502. $auth_plugins = array();
  503.  
  504. $dp = @opendir($phpbb_root_path . 'includes/auth');
  505.  
  506. if ($dp)
  507. {
  508. while (($file = readdir($dp)) !== false)
  509. {
  510. if (preg_match('#^auth_(.*?)\.' . $phpEx . '$#', $file))
  511. {
  512. $auth_plugins[] = basename(preg_replace('#^auth_(.*?)\.' . $phpEx . '$#', '\1', $file));
  513. }
  514. }
  515. closedir($dp);
  516.  
  517. sort($auth_plugins);
  518. }
  519.  
  520. $updated_auth_settings = false;
  521. $old_auth_config = array();
  522. foreach ($auth_plugins as $method)
  523. {
  524. if ($method && file_exists($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx))
  525. {
  526. include_once($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx);
  527.  
  528. $method = 'acp_' . $method;
  529. if (function_exists($method))
  530. {
  531. if ($fields = $method($this->new_config))
  532. {
  533. // Check if we need to create config fields for this plugin and save config when submit was pressed
  534. foreach ($fields['config'] as $field)
  535. {
  536. if (!isset($config[$field]))
  537. {
  538. set_config($field, '');
  539. }
  540.  
  541. if (!isset($cfg_array[$field]) || strpos($field, 'legend') !== false)
  542. {
  543. continue;
  544. }
  545.  
  546. $old_auth_config[$field] = $this->new_config[$field];
  547. $config_value = $cfg_array[$field];
  548. $this->new_config[$field] = $config_value;
  549.  
  550. if ($submit)
  551. {
  552. $updated_auth_settings = true;
  553. set_config($field, $config_value);
  554. }
  555. }
  556. }
  557. unset($fields);
  558. }
  559. }
  560. }
  561.  
  562. if ($submit && (($cfg_array['auth_method'] != $this->new_config['auth_method']) || $updated_auth_settings))
  563. {
  564. $method = basename($cfg_array['auth_method']);
  565. if ($method && in_array($method, $auth_plugins))
  566. {
  567. include_once($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx);
  568.  
  569. $method = 'init_' . $method;
  570. if (function_exists($method))
  571. {
  572. if ($error = $method())
  573. {
  574. foreach ($old_auth_config as $config_name => $config_value)
  575. {
  576. set_config($config_name, $config_value);
  577. }
  578. trigger_error($error . adm_back_link($this->u_action), E_USER_WARNING);
  579. }
  580. }
  581. set_config('auth_method', basename($cfg_array['auth_method']));
  582. }
  583. else
  584. {
  585. trigger_error('NO_AUTH_PLUGIN', E_USER_ERROR);
  586. }
  587. }
  588. }
  589.  
  590. if ($submit)
  591. {
  592. add_log('admin', 'LOG_CONFIG_' . strtoupper($mode));
  593.  
  594. trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
  595. }
  596.  
  597. $this->tpl_name = 'acp_board';
  598. $this->page_title = $display_vars['title'];
  599.  
  600. $template->assign_vars(array(
  601. 'L_TITLE' => $user->lang[$display_vars['title']],
  602. 'L_TITLE_EXPLAIN' => $user->lang[$display_vars['title'] . '_EXPLAIN'],
  603.  
  604. 'S_ERROR' => (sizeof($error)) ? true : false,
  605. 'ERROR_MSG' => implode('<br />', $error),
  606.  
  607. 'U_ACTION' => $this->u_action)
  608. );
  609.  
  610. // Output relevant page
  611. foreach ($display_vars['vars'] as $config_key => $vars)
  612. {
  613. if (!is_array($vars) && strpos($config_key, 'legend') === false)
  614. {
  615. continue;
  616. }
  617.  
  618. if (strpos($config_key, 'legend') !== false)
  619. {
  620. $template->assign_block_vars('options', array(
  621. 'S_LEGEND' => true,
  622. 'LEGEND' => (isset($user->lang[$vars])) ? $user->lang[$vars] : $vars)
  623. );
  624.  
  625. continue;
  626. }
  627.  
  628. $type = explode(':', $vars['type']);
  629.  
  630. $l_explain = '';
  631. if ($vars['explain'] && isset($vars['lang_explain']))
  632. {
  633. $l_explain = (isset($user->lang[$vars['lang_explain']])) ? $user->lang[$vars['lang_explain']] : $vars['lang_explain'];
  634. }
  635. else if ($vars['explain'])
  636. {
  637. $l_explain = (isset($user->lang[$vars['lang'] . '_EXPLAIN'])) ? $user->lang[$vars['lang'] . '_EXPLAIN'] : '';
  638. }
  639.  
  640. $content = build_cfg_template($type, $config_key, $this->new_config, $config_key, $vars);
  641.  
  642. if (empty($content))
  643. {
  644. continue;
  645. }
  646.  
  647. $template->assign_block_vars('options', array(
  648. 'KEY' => $config_key,
  649. 'TITLE' => (isset($user->lang[$vars['lang']])) ? $user->lang[$vars['lang']] : $vars['lang'],
  650. 'S_EXPLAIN' => $vars['explain'],
  651. 'TITLE_EXPLAIN' => $l_explain,
  652. 'CONTENT' => $content,
  653. )
  654. );
  655.  
  656. unset($display_vars['vars'][$config_key]);
  657. }
  658.  
  659. if ($mode == 'auth')
  660. {
  661. $template->assign_var('S_AUTH', true);
  662.  
  663. foreach ($auth_plugins as $method)
  664. {
  665. if ($method && file_exists($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx))
  666. {
  667. $method = 'acp_' . $method;
  668. if (function_exists($method))
  669. {
  670. $fields = $method($this->new_config);
  671.  
  672. if ($fields['tpl'])
  673. {
  674. $template->assign_block_vars('auth_tpl', array(
  675. 'TPL' => $fields['tpl'])
  676. );
  677. }
  678. unset($fields);
  679. }
  680. }
  681. }
  682. }
  683. }
  684.  
  685. /**
  686. * Select auth method
  687. */
  688. function select_auth_method($selected_method, $key = '')
  689. {
  690. global $phpbb_root_path, $phpEx;
  691.  
  692. $auth_plugins = array();
  693.  
  694. $dp = @opendir($phpbb_root_path . 'includes/auth');
  695.  
  696. if (!$dp)
  697. {
  698. return '';
  699. }
  700.  
  701. while (($file = readdir($dp)) !== false)
  702. {
  703. if (preg_match('#^auth_(.*?)\.' . $phpEx . '$#', $file))
  704. {
  705. $auth_plugins[] = preg_replace('#^auth_(.*?)\.' . $phpEx . '$#', '\1', $file);
  706. }
  707. }
  708. closedir($dp);
  709.  
  710. sort($auth_plugins);
  711.  
  712. $auth_select = '';
  713. foreach ($auth_plugins as $method)
  714. {
  715. $selected = ($selected_method == $method) ? ' selected="selected"' : '';
  716. $auth_select .= '<option value="' . $method . '"' . $selected . '>' . ucfirst($method) . '</option>';
  717. }
  718.  
  719. return $auth_select;
  720. }
  721.  
  722. /**
  723. * Select mail authentication method
  724. */
  725. function mail_auth_select($selected_method, $key = '')
  726. {
  727. global $user;
  728.  
  729. $auth_methods = array('PLAIN', 'LOGIN', 'CRAM-MD5', 'DIGEST-MD5', 'POP-BEFORE-SMTP');
  730. $s_smtp_auth_options = '';
  731.  
  732. foreach ($auth_methods as $method)
  733. {
  734. $s_smtp_auth_options .= '<option value="' . $method . '"' . (($selected_method == $method) ? ' selected="selected"' : '') . '>' . $user->lang['SMTP_' . str_replace('-', '_', $method)] . '</option>';
  735. }
  736.  
  737. return $s_smtp_auth_options;
  738. }
  739.  
  740. /**
  741. * Select full folder action
  742. */
  743. function full_folder_select($value, $key = '')
  744. {
  745. global $user;
  746.  
  747. 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>';
  748. }
  749.  
  750. /**
  751. * Select ip validation
  752. */
  753. function select_ip_check($value, $key = '')
  754. {
  755. $radio_ary = array(4 => 'ALL', 3 => 'CLASS_C', 2 => 'CLASS_B', 0 => 'NO_IP_VALIDATION');
  756.  
  757. return h_radio('config[ip_check]', $radio_ary, $value, $key);
  758. }
  759.  
  760. /**
  761. * Select referer validation
  762. */
  763. function select_ref_check($value, $key = '')
  764. {
  765. $radio_ary = array(REFERER_VALIDATE_PATH => 'REF_PATH', REFERER_VALIDATE_HOST => 'REF_HOST', REFERER_VALIDATE_NONE => 'NO_REF_VALIDATION');
  766.  
  767. return h_radio('config[referer_validation]', $radio_ary, $value, $key);
  768. }
  769.  
  770. /**
  771. * Select account activation method
  772. */
  773. function select_acc_activation($selected_value, $value)
  774. {
  775. global $user, $config;
  776.  
  777. $act_ary = array(
  778. 'ACC_DISABLE' => USER_ACTIVATION_DISABLE,
  779. 'ACC_NONE' => USER_ACTIVATION_NONE,
  780. );
  781. if ($config['email_enable'])
  782. {
  783. $act_ary['ACC_USER'] = USER_ACTIVATION_SELF;
  784. $act_ary['ACC_ADMIN'] = USER_ACTIVATION_ADMIN;
  785. }
  786. $act_options = '';
  787.  
  788. foreach ($act_ary as $key => $value)
  789. {
  790. $selected = ($selected_value == $value) ? ' selected="selected"' : '';
  791. $act_options .= '<option value="' . $value . '"' . $selected . '>' . $user->lang[$key] . '</option>';
  792. }
  793.  
  794. return $act_options;
  795. }
  796.  
  797. /**
  798. * Maximum/Minimum username length
  799. */
  800. function username_length($value, $key = '')
  801. {
  802. global $user;
  803.  
  804. 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'];
  805. }
  806.  
  807. /**
  808. * Allowed chars in usernames
  809. */
  810. function select_username_chars($selected_value, $key)
  811. {
  812. global $user;
  813.  
  814. $user_char_ary = array('USERNAME_CHARS_ANY', 'USERNAME_ALPHA_ONLY', 'USERNAME_ALPHA_SPACERS', 'USERNAME_LETTER_NUM', 'USERNAME_LETTER_NUM_SPACERS', 'USERNAME_ASCII');
  815. $user_char_options = '';
  816. foreach ($user_char_ary as $user_type)
  817. {
  818. $selected = ($selected_value == $user_type) ? ' selected="selected"' : '';
  819. $user_char_options .= '<option value="' . $user_type . '"' . $selected . '>' . $user->lang[$user_type] . '</option>';
  820. }
  821.  
  822. return $user_char_options;
  823. }
  824.  
  825. /**
  826. * Maximum/Minimum password length
  827. */
  828. function password_length($value, $key)
  829. {
  830. global $user;
  831.  
  832. 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'];
  833. }
  834.  
  835. /**
  836. * Required chars in passwords
  837. */
  838. function select_password_chars($selected_value, $key)
  839. {
  840. global $user;
  841.  
  842. $pass_type_ary = array('PASS_TYPE_ANY', 'PASS_TYPE_CASE', 'PASS_TYPE_ALPHA', 'PASS_TYPE_SYMBOL');
  843. $pass_char_options = '';
  844. foreach ($pass_type_ary as $pass_type)
  845. {
  846. $selected = ($selected_value == $pass_type) ? ' selected="selected"' : '';
  847. $pass_char_options .= '<option value="' . $pass_type . '"' . $selected . '>' . $user->lang[$pass_type] . '</option>';
  848. }
  849.  
  850. return $pass_char_options;
  851. }
  852.  
  853. /**
  854. * Select bump interval
  855. */
  856. function bump_interval($value, $key)
  857. {
  858. global $user;
  859.  
  860. $s_bump_type = '';
  861. $types = array('m' => 'MINUTES', 'h' => 'HOURS', 'd' => 'DAYS');
  862. foreach ($types as $type => $lang)
  863. {
  864. $selected = ($this->new_config['bump_type'] == $type) ? ' selected="selected"' : '';
  865. $s_bump_type .= '<option value="' . $type . '"' . $selected . '>' . $user->lang[$lang] . '</option>';
  866. }
  867.  
  868. 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>';
  869. }
  870.  
  871. /**
  872. * Board disable option and message
  873. */
  874. function board_disable($value, $key)
  875. {
  876. global $user;
  877.  
  878. $radio_ary = array(1 => 'YES', 0 => 'NO');
  879.  
  880. 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'] . '" />';
  881. }
  882.  
  883. /**
  884. * Global quick reply enable/disable setting and button to enable in all forums
  885. */
  886. function quick_reply($value, $key)
  887. {
  888. global $user;
  889.  
  890. $radio_ary = array(1 => 'YES', 0 => 'NO');
  891.  
  892. return h_radio('config[allow_quick_reply]', $radio_ary, $value) .
  893. '<br /><br /><input class="button2" type="submit" id="' . $key . '_enable" name="' . $key . '_enable" value="' . $user->lang['ALLOW_QUICK_REPLY_BUTTON'] . '" />';
  894. }
  895.  
  896.  
  897. /**
  898. * Select default dateformat
  899. */
  900. function dateformat_select($value, $key)
  901. {
  902. global $user, $config;
  903.  
  904. // Let the format_date function operate with the acp values
  905. $old_tz = $user->timezone;
  906. $old_dst = $user->dst;
  907.  
  908. $user->timezone = $config['board_timezone'] * 3600;
  909. $user->dst = $config['board_dst'] * 3600;
  910.  
  911. $dateformat_options = '';
  912.  
  913. foreach ($user->lang['dateformats'] as $format => $null)
  914. {
  915. $dateformat_options .= '<option value="' . $format . '"' . (($format == $value) ? ' selected="selected"' : '') . '>';
  916. $dateformat_options .= $user->format_date(time(), $format, false) . ((strpos($format, '|') !== false) ? $user->lang['VARIANT_DATE_SEPARATOR'] . $user->format_date(time(), $format, true) : '');
  917. $dateformat_options .= '</option>';
  918. }
  919.  
  920. $dateformat_options .= '<option value="custom"';
  921. if (!isset($user->lang['dateformats'][$value]))
  922. {
  923. $dateformat_options .= ' selected="selected"';
  924. }
  925. $dateformat_options .= '>' . $user->lang['CUSTOM_DATEFORMAT'] . '</option>';
  926.  
  927. // Reset users date options
  928. $user->timezone = $old_tz;
  929. $user->dst = $old_dst;
  930.  
  931. 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>
  932. <input type=\"text\" name=\"config[$key]\" id=\"$key\" value=\"$value\" maxlength=\"30\" />";
  933. }
  934.  
  935. /**
  936. * Select multiple forums
  937. */
  938. function select_news_forums($value, $key)
  939. {
  940. global $user, $config;
  941.  
  942. $forum_list = make_forum_select(false, false, true, true, true, false, true);
  943.  
  944. // Build forum options
  945. $s_forum_options = '<select id="' . $key . '" name="' . $key . '[]" multiple="multiple">';
  946. foreach ($forum_list as $f_id => $f_row)
  947. {
  948. $f_row['selected'] = phpbb_optionget(FORUM_OPTION_FEED_NEWS, $f_row['forum_options']);
  949.  
  950. $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>';
  951. }
  952. $s_forum_options .= '</select>';
  953.  
  954. return $s_forum_options;
  955. }
  956.  
  957. function select_exclude_forums($value, $key)
  958. {
  959. global $user, $config;
  960.  
  961. $forum_list = make_forum_select(false, false, true, true, true, false, true);
  962.  
  963. // Build forum options
  964. $s_forum_options = '<select id="' . $key . '" name="' . $key . '[]" multiple="multiple">';
  965. foreach ($forum_list as $f_id => $f_row)
  966. {
  967. $f_row['selected'] = phpbb_optionget(FORUM_OPTION_FEED_EXCLUDE, $f_row['forum_options']);
  968.  
  969. $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>';
  970. }
  971. $s_forum_options .= '</select>';
  972.  
  973. return $s_forum_options;
  974. }
  975.  
  976. function store_feed_forums($option, $key)
  977. {
  978. global $db, $cache;
  979.  
  980. // Get key
  981. $values = request_var($key, array(0 => 0));
  982.  
  983. // Empty option bit for all forums
  984. $sql = 'UPDATE ' . FORUMS_TABLE . '
  985. SET forum_options = forum_options - ' . (1 << $option) . '
  986. WHERE ' . $db->sql_bit_and('forum_options', $option, '<> 0');
  987. $db->sql_query($sql);
  988.  
  989. // Already emptied for all...
  990. if (sizeof($values))
  991. {
  992. // Set for selected forums
  993. $sql = 'UPDATE ' . FORUMS_TABLE . '
  994. SET forum_options = forum_options + ' . (1 << $option) . '
  995. WHERE ' . $db->sql_in_set('forum_id', $values);
  996. $db->sql_query($sql);
  997. }
  998.  
  999. // Empty sql cache for forums table because options changed
  1000. $cache->destroy('sql', FORUMS_TABLE);
  1001. }
  1002.  
  1003. }
  1004.  
  1005. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement