PageRenderTime 27ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/phpBB/includes/ucp/ucp_prefs.php

https://github.com/naderman/phpbb-orchestra
PHP | 357 lines | 273 code | 63 blank | 21 comment | 27 complexity | 358ae782d3144b0737bce9922bb8c388 MD5 | raw file
  1. <?php
  2. /**
  3. *
  4. * @package ucp
  5. * @version $Id$
  6. * @copyright (c) 2005 phpBB Group
  7. * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  8. *
  9. */
  10. /**
  11. * @ignore
  12. */
  13. if (!defined('IN_PHPBB'))
  14. {
  15. exit;
  16. }
  17. /**
  18. * ucp_prefs
  19. * Changing user preferences
  20. * @package ucp
  21. */
  22. class ucp_prefs
  23. {
  24. var $u_action;
  25. function main($id, $mode)
  26. {
  27. global $config, $db, $user, $auth, $template, $phpbb_root_path, $phpEx;
  28. $submit = (isset($_POST['submit'])) ? true : false;
  29. $error = $data = array();
  30. $s_hidden_fields = '';
  31. switch ($mode)
  32. {
  33. case 'personal':
  34. add_form_key('ucp_prefs_personal');
  35. $data = array(
  36. 'notifymethod' => request_var('notifymethod', $user->data['user_notify_type']),
  37. 'dateformat' => request_var('dateformat', $user->data['user_dateformat'], true),
  38. 'lang' => basename(request_var('lang', $user->data['user_lang'])),
  39. 'style' => request_var('style', (int) $user->data['user_style']),
  40. 'tz' => request_var('tz', (float) $user->data['user_timezone']),
  41. 'dst' => request_var('dst', (bool) $user->data['user_dst']),
  42. 'viewemail' => request_var('viewemail', (bool) $user->data['user_allow_viewemail']),
  43. 'massemail' => request_var('massemail', (bool) $user->data['user_allow_massemail']),
  44. 'hideonline' => request_var('hideonline', (bool) !$user->data['user_allow_viewonline']),
  45. 'notifypm' => request_var('notifypm', (bool) $user->data['user_notify_pm']),
  46. 'popuppm' => request_var('popuppm', (bool) $user->optionget('popuppm')),
  47. 'allowpm' => request_var('allowpm', (bool) $user->data['user_allow_pm']),
  48. );
  49. if ($data['notifymethod'] == NOTIFY_IM && (!$config['jab_enable'] || !$user->data['user_jabber'] || !@extension_loaded('xml')))
  50. {
  51. // Jabber isnt enabled, or no jabber field filled in. Update the users table to be sure its correct.
  52. $data['notifymethod'] = NOTIFY_BOTH;
  53. }
  54. if ($submit)
  55. {
  56. $data['style'] = ($config['override_user_style']) ? $config['default_style'] : $data['style'];
  57. $error = validate_data($data, array(
  58. 'dateformat' => array('string', false, 1, 30),
  59. 'lang' => array('language_iso_name'),
  60. 'tz' => array('num', false, -14, 14),
  61. ));
  62. if (!check_form_key('ucp_prefs_personal'))
  63. {
  64. $error[] = 'FORM_INVALID';
  65. }
  66. if (!sizeof($error))
  67. {
  68. $user->optionset('popuppm', $data['popuppm']);
  69. $sql_ary = array(
  70. 'user_allow_pm' => $data['allowpm'],
  71. 'user_allow_viewemail' => $data['viewemail'],
  72. 'user_allow_massemail' => $data['massemail'],
  73. 'user_allow_viewonline' => ($auth->acl_get('u_hideonline')) ? !$data['hideonline'] : $user->data['user_allow_viewonline'],
  74. 'user_notify_type' => $data['notifymethod'],
  75. 'user_notify_pm' => $data['notifypm'],
  76. 'user_options' => $user->data['user_options'],
  77. 'user_dst' => $data['dst'],
  78. 'user_dateformat' => $data['dateformat'],
  79. 'user_lang' => $data['lang'],
  80. 'user_timezone' => $data['tz'],
  81. 'user_style' => $data['style'],
  82. );
  83. $sql = 'UPDATE ' . USERS_TABLE . '
  84. SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
  85. WHERE user_id = ' . $user->data['user_id'];
  86. $db->sql_query($sql);
  87. meta_refresh(3, $this->u_action);
  88. $message = $user->lang['PREFERENCES_UPDATED'] . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $this->u_action . '">', '</a>');
  89. trigger_error($message);
  90. }
  91. // Replace "error" strings with their real, localised form
  92. $error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
  93. }
  94. $dateformat_options = '';
  95. foreach ($user->lang['dateformats'] as $format => $null)
  96. {
  97. $dateformat_options .= '<option value="' . $format . '"' . (($format == $data['dateformat']) ? ' selected="selected"' : '') . '>';
  98. $dateformat_options .= $user->format_date(time(), $format, false) . ((strpos($format, '|') !== false) ? $user->lang['VARIANT_DATE_SEPARATOR'] . $user->format_date(time(), $format, true) : '');
  99. $dateformat_options .= '</option>';
  100. }
  101. $s_custom = false;
  102. $dateformat_options .= '<option value="custom"';
  103. if (!isset($user->lang['dateformats'][$data['dateformat']]))
  104. {
  105. $dateformat_options .= ' selected="selected"';
  106. $s_custom = true;
  107. }
  108. $dateformat_options .= '>' . $user->lang['CUSTOM_DATEFORMAT'] . '</option>';
  109. $template->assign_vars(array(
  110. 'ERROR' => (sizeof($error)) ? implode('<br />', $error) : '',
  111. 'S_NOTIFY_EMAIL' => ($data['notifymethod'] == NOTIFY_EMAIL) ? true : false,
  112. 'S_NOTIFY_IM' => ($data['notifymethod'] == NOTIFY_IM) ? true : false,
  113. 'S_NOTIFY_BOTH' => ($data['notifymethod'] == NOTIFY_BOTH) ? true : false,
  114. 'S_VIEW_EMAIL' => $data['viewemail'],
  115. 'S_MASS_EMAIL' => $data['massemail'],
  116. 'S_ALLOW_PM' => $data['allowpm'],
  117. 'S_HIDE_ONLINE' => $data['hideonline'],
  118. 'S_NOTIFY_PM' => $data['notifypm'],
  119. 'S_POPUP_PM' => $data['popuppm'],
  120. 'S_DST' => $data['dst'],
  121. 'DATE_FORMAT' => $data['dateformat'],
  122. 'A_DATE_FORMAT' => addslashes($data['dateformat']),
  123. 'S_DATEFORMAT_OPTIONS' => $dateformat_options,
  124. 'S_CUSTOM_DATEFORMAT' => $s_custom,
  125. 'DEFAULT_DATEFORMAT' => $config['default_dateformat'],
  126. 'A_DEFAULT_DATEFORMAT' => addslashes($config['default_dateformat']),
  127. 'S_LANG_OPTIONS' => language_select($data['lang']),
  128. 'S_STYLE_OPTIONS' => ($config['override_user_style']) ? '' : style_select($data['style']),
  129. 'S_TZ_OPTIONS' => tz_select($data['tz'], true),
  130. 'S_CAN_HIDE_ONLINE' => ($auth->acl_get('u_hideonline')) ? true : false,
  131. 'S_SELECT_NOTIFY' => ($config['jab_enable'] && $user->data['user_jabber'] && @extension_loaded('xml')) ? true : false)
  132. );
  133. break;
  134. case 'view':
  135. add_form_key('ucp_prefs_view');
  136. $data = array(
  137. 'topic_sk' => request_var('topic_sk', (!empty($user->data['user_topic_sortby_type'])) ? $user->data['user_topic_sortby_type'] : 't'),
  138. 'topic_sd' => request_var('topic_sd', (!empty($user->data['user_topic_sortby_dir'])) ? $user->data['user_topic_sortby_dir'] : 'd'),
  139. 'topic_st' => request_var('topic_st', (!empty($user->data['user_topic_show_days'])) ? $user->data['user_topic_show_days'] : 0),
  140. 'post_sk' => request_var('post_sk', (!empty($user->data['user_post_sortby_type'])) ? $user->data['user_post_sortby_type'] : 't'),
  141. 'post_sd' => request_var('post_sd', (!empty($user->data['user_post_sortby_dir'])) ? $user->data['user_post_sortby_dir'] : 'a'),
  142. 'post_st' => request_var('post_st', (!empty($user->data['user_post_show_days'])) ? $user->data['user_post_show_days'] : 0),
  143. 'images' => request_var('images', (bool) $user->optionget('viewimg')),
  144. 'flash' => request_var('flash', (bool) $user->optionget('viewflash')),
  145. 'smilies' => request_var('smilies', (bool) $user->optionget('viewsmilies')),
  146. 'sigs' => request_var('sigs', (bool) $user->optionget('viewsigs')),
  147. 'avatars' => request_var('avatars', (bool) $user->optionget('viewavatars')),
  148. 'wordcensor' => request_var('wordcensor', (bool) $user->optionget('viewcensors')),
  149. );
  150. if ($submit)
  151. {
  152. $error = validate_data($data, array(
  153. 'topic_sk' => array('string', false, 1, 1),
  154. 'topic_sd' => array('string', false, 1, 1),
  155. 'post_sk' => array('string', false, 1, 1),
  156. 'post_sd' => array('string', false, 1, 1),
  157. ));
  158. if (!check_form_key('ucp_prefs_view'))
  159. {
  160. $error[] = 'FORM_INVALID';
  161. }
  162. if (!sizeof($error))
  163. {
  164. $user->optionset('viewimg', $data['images']);
  165. $user->optionset('viewflash', $data['flash']);
  166. $user->optionset('viewsmilies', $data['smilies']);
  167. $user->optionset('viewsigs', $data['sigs']);
  168. $user->optionset('viewavatars', $data['avatars']);
  169. if ($auth->acl_get('u_chgcensors'))
  170. {
  171. $user->optionset('viewcensors', $data['wordcensor']);
  172. }
  173. $sql_ary = array(
  174. 'user_options' => $user->data['user_options'],
  175. 'user_topic_sortby_type' => $data['topic_sk'],
  176. 'user_post_sortby_type' => $data['post_sk'],
  177. 'user_topic_sortby_dir' => $data['topic_sd'],
  178. 'user_post_sortby_dir' => $data['post_sd'],
  179. 'user_topic_show_days' => $data['topic_st'],
  180. 'user_post_show_days' => $data['post_st'],
  181. );
  182. $sql = 'UPDATE ' . USERS_TABLE . '
  183. SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
  184. WHERE user_id = ' . $user->data['user_id'];
  185. $db->sql_query($sql);
  186. meta_refresh(3, $this->u_action);
  187. $message = $user->lang['PREFERENCES_UPDATED'] . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $this->u_action . '">', '</a>');
  188. trigger_error($message);
  189. }
  190. // Replace "error" strings with their real, localised form
  191. $error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
  192. }
  193. $sort_dir_text = array('a' => $user->lang['ASCENDING'], 'd' => $user->lang['DESCENDING']);
  194. // Topic ordering options
  195. $limit_topic_days = array(0 => $user->lang['ALL_TOPICS'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);
  196. $sort_by_topic_text = array('a' => $user->lang['AUTHOR'], 't' => $user->lang['POST_TIME'], 'r' => $user->lang['REPLIES'], 's' => $user->lang['SUBJECT'], 'v' => $user->lang['VIEWS']);
  197. $sort_by_topic_sql = array('a' => 't.topic_first_poster_name', 't' => 't.topic_last_post_time', 'r' => 't.topic_replies', 's' => 't.topic_title', 'v' => 't.topic_views');
  198. // Post ordering options
  199. $limit_post_days = array(0 => $user->lang['ALL_POSTS'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);
  200. $sort_by_post_text = array('a' => $user->lang['AUTHOR'], 't' => $user->lang['POST_TIME'], 's' => $user->lang['SUBJECT']);
  201. $sort_by_post_sql = array('a' => 'u.username_clean', 't' => 'p.post_id', 's' => 'p.post_subject');
  202. $_options = array('topic', 'post');
  203. foreach ($_options as $sort_option)
  204. {
  205. ${'s_limit_' . $sort_option . '_days'} = '<select name="' . $sort_option . '_st">';
  206. foreach (${'limit_' . $sort_option . '_days'} as $day => $text)
  207. {
  208. $selected = ($data[$sort_option . '_st'] == $day) ? ' selected="selected"' : '';
  209. ${'s_limit_' . $sort_option . '_days'} .= '<option value="' . $day . '"' . $selected . '>' . $text . '</option>';
  210. }
  211. ${'s_limit_' . $sort_option . '_days'} .= '</select>';
  212. ${'s_sort_' . $sort_option . '_key'} = '<select name="' . $sort_option . '_sk">';
  213. foreach (${'sort_by_' . $sort_option . '_text'} as $key => $text)
  214. {
  215. $selected = ($data[$sort_option . '_sk'] == $key) ? ' selected="selected"' : '';
  216. ${'s_sort_' . $sort_option . '_key'} .= '<option value="' . $key . '"' . $selected . '>' . $text . '</option>';
  217. }
  218. ${'s_sort_' . $sort_option . '_key'} .= '</select>';
  219. ${'s_sort_' . $sort_option . '_dir'} = '<select name="' . $sort_option . '_sd">';
  220. foreach ($sort_dir_text as $key => $value)
  221. {
  222. $selected = ($data[$sort_option . '_sd'] == $key) ? ' selected="selected"' : '';
  223. ${'s_sort_' . $sort_option . '_dir'} .= '<option value="' . $key . '"' . $selected . '>' . $value . '</option>';
  224. }
  225. ${'s_sort_' . $sort_option . '_dir'} .= '</select>';
  226. }
  227. $template->assign_vars(array(
  228. 'ERROR' => (sizeof($error)) ? implode('<br />', $error) : '',
  229. 'S_IMAGES' => $data['images'],
  230. 'S_FLASH' => $data['flash'],
  231. 'S_SMILIES' => $data['smilies'],
  232. 'S_SIGS' => $data['sigs'],
  233. 'S_AVATARS' => $data['avatars'],
  234. 'S_DISABLE_CENSORS' => $data['wordcensor'],
  235. 'S_CHANGE_CENSORS' => ($auth->acl_get('u_chgcensors') && $config['allow_nocensors']) ? true : false,
  236. 'S_TOPIC_SORT_DAYS' => $s_limit_topic_days,
  237. 'S_TOPIC_SORT_KEY' => $s_sort_topic_key,
  238. 'S_TOPIC_SORT_DIR' => $s_sort_topic_dir,
  239. 'S_POST_SORT_DAYS' => $s_limit_post_days,
  240. 'S_POST_SORT_KEY' => $s_sort_post_key,
  241. 'S_POST_SORT_DIR' => $s_sort_post_dir)
  242. );
  243. break;
  244. case 'post':
  245. $data = array(
  246. 'bbcode' => request_var('bbcode', $user->optionget('bbcode')),
  247. 'smilies' => request_var('smilies', $user->optionget('smilies')),
  248. 'sig' => request_var('sig', $user->optionget('attachsig')),
  249. 'notify' => request_var('notify', (bool) $user->data['user_notify']),
  250. );
  251. add_form_key('ucp_prefs_post');
  252. if ($submit)
  253. {
  254. if (check_form_key('ucp_prefs_post'))
  255. {
  256. $user->optionset('bbcode', $data['bbcode']);
  257. $user->optionset('smilies', $data['smilies']);
  258. $user->optionset('attachsig', $data['sig']);
  259. $sql_ary = array(
  260. 'user_options' => $user->data['user_options'],
  261. 'user_notify' => $data['notify'],
  262. );
  263. $sql = 'UPDATE ' . USERS_TABLE . '
  264. SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
  265. WHERE user_id = ' . $user->data['user_id'];
  266. $db->sql_query($sql);
  267. $msg = $user->lang['PREFERENCES_UPDATED'];
  268. }
  269. else
  270. {
  271. $msg = $user->lang['FORM_INVALID'];
  272. }
  273. meta_refresh(3, $this->u_action);
  274. $message = $msg . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $this->u_action . '">', '</a>');
  275. trigger_error($message);
  276. }
  277. $template->assign_vars(array(
  278. 'S_BBCODE' => $data['bbcode'],
  279. 'S_SMILIES' => $data['smilies'],
  280. 'S_SIG' => $data['sig'],
  281. 'S_NOTIFY' => $data['notify'])
  282. );
  283. break;
  284. }
  285. $template->assign_vars(array(
  286. 'L_TITLE' => $user->lang['UCP_PREFS_' . strtoupper($mode)],
  287. 'S_HIDDEN_FIELDS' => $s_hidden_fields,
  288. 'S_UCP_ACTION' => $this->u_action)
  289. );
  290. $this->tpl_name = 'ucp_prefs_' . $mode;
  291. $this->page_title = 'UCP_PREFS_' . strtoupper($mode);
  292. }
  293. }
  294. ?>