1<?php 2# MantisBT - A PHP based bugtracking system 3 4# MantisBT is free software: you can redistribute it and/or modify 5# it under the terms of the GNU General Public License as published by 6# the Free Software Foundation, either version 2 of the License, or 7# (at your option) any later version. 8# 9# MantisBT is distributed in the hope that it will be useful, 10# but WITHOUT ANY WARRANTY; without even the implied warranty of 11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12# GNU General Public License for more details. 13# 14# You should have received a copy of the GNU General Public License 15# along with MantisBT. If not, see <http://www.gnu.org/licenses/>. 16 17/** 18 * Updates prefs then redirect to account_prefs_page.php 19 * 20 * @package MantisBT 21 * @copyright Copyright 2000 - 2002 Kenzaburo Ito - kenito@300baud.org 22 * @copyright Copyright 2002 MantisBT Team - mantisbt-dev@lists.sourceforge.net 23 * @link http://www.mantisbt.org 24 * 25 * @uses core.php 26 * @uses access_api.php 27 * @uses authentication_api.php 28 * @uses config_api.php 29 * @uses event_api.php 30 * @uses form_api.php 31 * @uses gpc_api.php 32 * @uses html_api.php 33 * @uses lang_api.php 34 * @uses print_api.php 35 * @uses user_api.php 36 * @uses user_pref_api.php 37 */ 38 39require_once( 'core.php' ); 40require_api( 'access_api.php' ); 41require_api( 'authentication_api.php' ); 42require_api( 'config_api.php' ); 43require_api( 'event_api.php' ); 44require_api( 'form_api.php' ); 45require_api( 'gpc_api.php' ); 46require_api( 'html_api.php' ); 47require_api( 'lang_api.php' ); 48require_api( 'print_api.php' ); 49require_api( 'user_api.php' ); 50require_api( 'user_pref_api.php' ); 51 52form_security_validate( 'account_prefs_update' ); 53 54auth_ensure_user_authenticated(); 55 56$f_user_id = gpc_get_int( 'user_id' ); 57$f_redirect_url = gpc_get_string( 'redirect_url' ); 58 59user_ensure_exists( $f_user_id ); 60 61$t_user = user_get_row( $f_user_id ); 62 63# This page is currently called from the manage_* namespace and thus we 64# have to allow authorised users to update the accounts of other users. 65# TODO: split this functionality into manage_user_prefs_update.php 66if( auth_get_current_user_id() != $f_user_id ) { 67 access_ensure_global_level( config_get( 'manage_user_threshold' ) ); 68 access_ensure_global_level( $t_user['access_level'] ); 69} else { 70 # Protected users should not be able to update the preferences of their 71 # user account. The anonymous user is always considered a protected 72 # user and hence will also not be allowed to update preferences. 73 user_ensure_unprotected( $f_user_id ); 74} 75 76$t_prefs = user_pref_get( $f_user_id ); 77 78$t_prefs->redirect_delay = gpc_get_int( 'redirect_delay' ); 79$t_prefs->refresh_delay = gpc_get_int( 'refresh_delay' ); 80$t_prefs->default_project = gpc_get_int( 'default_project' ); 81 82$t_lang = gpc_get_string( 'language' ); 83if( lang_language_exists( $t_lang ) ) { 84 $t_prefs->language = $t_lang; 85} 86 87$t_font = gpc_get_string( 'font_family' ); 88if( config_get( 'font_family', null, $f_user_id, ALL_PROJECTS ) != $t_font ) { 89 config_set( 'font_family', $t_font, $f_user_id, ALL_PROJECTS ); 90} 91 92$t_prefs->email_on_new = gpc_get_bool( 'email_on_new' ); 93$t_prefs->email_on_assigned = gpc_get_bool( 'email_on_assigned' ); 94$t_prefs->email_on_feedback = gpc_get_bool( 'email_on_feedback' ); 95$t_prefs->email_on_resolved = gpc_get_bool( 'email_on_resolved' ); 96$t_prefs->email_on_closed = gpc_get_bool( 'email_on_closed' ); 97$t_prefs->email_on_reopened = gpc_get_bool( 'email_on_reopened' ); 98$t_prefs->email_on_bugnote = gpc_get_bool( 'email_on_bugnote' ); 99$t_prefs->email_on_status = gpc_get_bool( 'email_on_status' ); 100$t_prefs->email_on_priority = gpc_get_bool( 'email_on_priority' ); 101$t_prefs->email_on_new_min_severity = gpc_get_int( 'email_on_new_min_severity' ); 102$t_prefs->email_on_assigned_min_severity = gpc_get_int( 'email_on_assigned_min_severity' ); 103$t_prefs->email_on_feedback_min_severity = gpc_get_int( 'email_on_feedback_min_severity' ); 104$t_prefs->email_on_resolved_min_severity = gpc_get_int( 'email_on_resolved_min_severity' ); 105$t_prefs->email_on_closed_min_severity = gpc_get_int( 'email_on_closed_min_severity' ); 106$t_prefs->email_on_reopened_min_severity = gpc_get_int( 'email_on_reopened_min_severity' ); 107$t_prefs->email_on_bugnote_min_severity = gpc_get_int( 'email_on_bugnote_min_severity' ); 108$t_prefs->email_on_status_min_severity = gpc_get_int( 'email_on_status_min_severity' ); 109$t_prefs->email_on_priority_min_severity = gpc_get_int( 'email_on_priority_min_severity' ); 110 111$t_prefs->bugnote_order = gpc_get_string( 'bugnote_order' ); 112$t_prefs->email_bugnote_limit = gpc_get_int( 'email_bugnote_limit' ); 113 114# Save user preference with regards to getting full issue details in notifications or not. 115$t_email_full_issue = gpc_get_bool( 'email_full_issue' ) ? 1 : 0; 116$t_email_full_config_option = 'email_notifications_verbose'; 117if( config_get( $t_email_full_config_option, /* default */ null, $f_user_id, ALL_PROJECTS ) != $t_email_full_issue ) { 118 config_set( $t_email_full_config_option, $t_email_full_issue, $f_user_id, ALL_PROJECTS ); 119} 120 121# make sure the delay isn't too low 122if( ( config_get( 'min_refresh_delay' ) > $t_prefs->refresh_delay )&& 123 ( $t_prefs->refresh_delay != 0 )) { 124 $t_prefs->refresh_delay = config_get( 'min_refresh_delay' ); 125} 126 127$t_timezone = gpc_get_string( 'timezone' ); 128if( in_array( $t_timezone, timezone_identifiers_list() ) ) { 129 if( $t_timezone == config_get_global( 'default_timezone' ) ) { 130 $t_prefs->timezone = ''; 131 } else { 132 $t_prefs->timezone = $t_timezone; 133 } 134} 135 136event_signal( 'EVENT_ACCOUNT_PREF_UPDATE', array( $f_user_id ) ); 137 138user_pref_set( $f_user_id, $t_prefs, ALL_PROJECTS ); 139 140form_security_purge( 'account_prefs_update' ); 141 142layout_page_header( null, $f_redirect_url ); 143 144layout_page_begin(); 145 146html_operation_successful( $f_redirect_url ); 147 148layout_page_end(); 149