source: subversion/trunk/roundcubemail/program/steps/settings/save_prefs.inc @ 4816

Last change on this file since 4816 was 4816, checked in by alec, 2 years ago
  • Add option to force spellchecking before sending a message (#1485458)
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.4 KB
Line 
1<?php
2
3/*
4 +-----------------------------------------------------------------------+
5 | program/steps/settings/save_prefs.inc                                 |
6 |                                                                       |
7 | This file is part of the Roundcube Webmail client                     |
8 | Copyright (C) 2005-2009, The Roundcube Dev Team                       |
9 | Licensed under the GNU GPL                                            |
10 |                                                                       |
11 | PURPOSE:                                                              |
12 |   Save user preferences to DB and to the current session              |
13 |                                                                       |
14 +-----------------------------------------------------------------------+
15 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
16 +-----------------------------------------------------------------------+
17
18 $Id$
19
20*/
21
22$CURR_SECTION = get_input_value('_section', RCUBE_INPUT_POST);
23
24$a_user_prefs = array();
25
26// set options for specified section
27switch ($CURR_SECTION)
28{
29  case 'general':
30    $a_user_prefs = array(
31      'language'     => isset($_POST['_language']) ? get_input_value('_language', RCUBE_INPUT_POST) : $CONFIG['language'],
32      'timezone'     => isset($_POST['_timezone']) ? (is_numeric($_POST['_timezone']) ? floatval($_POST['_timezone']) : get_input_value('_timezone', RCUBE_INPUT_POST)) : $CONFIG['timezone'],
33      'dst_active'   => isset($_POST['_dst_active']) ? TRUE : FALSE,
34      'pagesize'     => is_numeric($_POST['_pagesize']) ? max(2, intval($_POST['_pagesize'])) : $CONFIG['pagesize'],
35      'prettydate'   => isset($_POST['_pretty_date']) ? TRUE : FALSE,
36      'skin'         => isset($_POST['_skin']) ? get_input_value('_skin', RCUBE_INPUT_POST) : $CONFIG['skin'],
37    );
38
39  break;
40
41  case 'mailbox':
42    $a_user_prefs = array(
43      'preview_pane'         => isset($_POST['_preview_pane']) ? TRUE : FALSE,
44      'preview_pane_mark_read' => isset($_POST['_preview_pane_mark_read']) ? intval($_POST['_preview_pane_mark_read']) : $CONFIG['preview_pane_mark_read'],
45      'autoexpand_threads'   => isset($_POST['_autoexpand_threads']) ? intval($_POST['_autoexpand_threads']) : 0,
46      'mdn_requests'         => isset($_POST['_mdn_requests']) ? intval($_POST['_mdn_requests']) : 0,
47      'keep_alive'           => isset($_POST['_keep_alive']) ? intval($_POST['_keep_alive'])*60 : $CONFIG['keep_alive'],
48      'check_all_folders'    => isset($_POST['_check_all_folders']) ? TRUE : FALSE,
49    );
50
51  break;
52
53  case 'mailview':
54    $a_user_prefs = array(
55      'prefer_html'     => isset($_POST['_prefer_html']) ? TRUE : FALSE,
56      'inline_images'   => isset($_POST['_inline_images']) ? TRUE : FALSE,
57      'show_images'     => isset($_POST['_show_images']) ? intval($_POST['_show_images']) : 0,
58      'display_next'    => isset($_POST['_display_next']) ? TRUE : FALSE,
59      'default_charset' => get_input_value('_default_charset', RCUBE_INPUT_POST),
60    );
61
62  break;
63
64  case 'compose':
65    $a_user_prefs = array(
66      'htmleditor'         => intval($_POST['_htmleditor']),
67      'draft_autosave'     => isset($_POST['_draft_autosave']) ? intval($_POST['_draft_autosave']) : 0,
68      'mime_param_folding' => isset($_POST['_mime_param_folding']) ? intval($_POST['_mime_param_folding']) : 0,
69      'force_7bit'         => isset($_POST['_force_7bit']) ? TRUE : FALSE,
70      'mdn_default'        => isset($_POST['_mdn_default']) ? TRUE : FALSE,
71      'dsn_default'        => isset($_POST['_dsn_default']) ? TRUE : FALSE,
72      'reply_same_folder'  => isset($_POST['_reply_same_folder']) ? TRUE : FALSE,
73      'spellcheck_before_send' => isset($_POST['_spellcheck_before_send']) ? TRUE : FALSE,
74      'show_sig'           => isset($_POST['_show_sig']) ? intval($_POST['_show_sig']) : 1,
75      'top_posting'        => !empty($_POST['_top_posting']),
76      'strip_existing_sig' => isset($_POST['_strip_existing_sig']),
77      'sig_above'          => !empty($_POST['_sig_above']) && !empty($_POST['_top_posting']),
78    );
79
80  break;
81
82  case 'addressbook':
83    $a_user_prefs = array(
84      'default_addressbook' => get_input_value('_default_addressbook', RCUBE_INPUT_POST, true),
85    );
86
87  break;
88
89  case 'server':
90    $a_user_prefs = array(
91      'read_when_deleted' => isset($_POST['_read_when_deleted']) ? TRUE : FALSE,
92      'skip_deleted'      => isset($_POST['_skip_deleted']) ? TRUE : FALSE,
93      'flag_for_deletion' => isset($_POST['_flag_for_deletion']) ? TRUE : FALSE,
94      'delete_always'     => isset($_POST['_delete_always']) ? TRUE : FALSE,
95      'logout_purge'      => isset($_POST['_logout_purge']) ? TRUE : FALSE,
96      'logout_expunge'    => isset($_POST['_logout_expunge']) ? TRUE : FALSE,
97    );
98
99  break;
100
101  case 'folders':
102    $a_user_prefs = array(
103      'drafts_mbox' => get_input_value('_drafts_mbox', RCUBE_INPUT_POST, true),
104      'sent_mbox'   => get_input_value('_sent_mbox', RCUBE_INPUT_POST, true),
105      'junk_mbox'   => get_input_value('_junk_mbox', RCUBE_INPUT_POST, true),
106      'trash_mbox'  => get_input_value('_trash_mbox', RCUBE_INPUT_POST, true),
107    );
108
109  break;
110}
111
112$plugin = rcmail::get_instance()->plugins->exec_hook('preferences_save',
113  array('prefs' => $a_user_prefs, 'section' => $CURR_SECTION));
114
115$a_user_prefs = $plugin['prefs'];
116
117// don't override these parameters
118foreach ((array)$CONFIG['dont_override'] as $p)
119  $a_user_prefs[$p] = $CONFIG[$p];
120
121
122// verify some options
123switch ($CURR_SECTION)
124{
125  case 'general':
126
127    // switch UI language
128    if (isset($_POST['_language']) && $a_user_prefs['language'] != $_SESSION['language']) {
129      $RCMAIL->load_language($a_user_prefs['language']);
130      $OUTPUT->command('reload', 500);
131    }
132
133    // switch skin (if valid, otherwise unset the pref and fall back to default)
134    if (!$OUTPUT->set_skin($a_user_prefs['skin']))
135      unset($a_user_prefs['skin']);
136
137    // force min size
138    if ($a_user_prefs['pagesize'] < 1)
139      $a_user_prefs['pagesize'] = 10;
140
141    if (isset($CONFIG['max_pagesize']) && ($a_user_prefs['pagesize'] > $CONFIG['max_pagesize']))
142      $a_user_prefs['pagesize'] = (int) $CONFIG['max_pagesize'];
143
144    $a_user_prefs['timezone'] = $_SESSION['timezone'] = (string) $a_user_prefs['timezone'];
145
146  break;
147  case 'mailbox':
148
149    // force keep_alive
150    if (isset($a_user_prefs['keep_alive'])) {
151      $a_user_prefs['keep_alive'] = max(60, $CONFIG['min_keep_alive'], $a_user_prefs['keep_alive']);
152      if (!empty($CONFIG['session_lifetime']))
153        $a_user_prefs['keep_alive'] = min($CONFIG['session_lifetime']*60, $a_user_prefs['keep_alive']);
154    }
155
156  break;
157  case 'folders':
158
159    // special handling for 'default_imap_folders'
160    if (in_array('default_imap_folders', (array)$CONFIG['dont_override'])) {
161      foreach (array('drafts_mbox','sent_mbox','junk_mbox','trash_mbox') as $p)
162        $a_user_prefs[$p] = $CONFIG[$p];
163    } else {
164      $a_user_prefs['default_imap_folders'] = array('INBOX');
165      foreach (array('drafts_mbox','sent_mbox','junk_mbox','trash_mbox') as $p) {
166        if ($a_user_prefs[$p])
167          $a_user_prefs['default_imap_folders'][] = $a_user_prefs[$p];
168      }
169    }
170 
171  break;
172}
173
174// Save preferences
175if (!$plugin['abort'])
176  $saved = $USER->save_prefs($a_user_prefs);
177else
178  $saved = $plugin['result'];
179
180if ($saved)
181  $OUTPUT->show_message('successfullysaved', 'confirmation');
182else
183  $OUTPUT->show_message($plugin['message'] ? $plugin['message'] : 'errorsaving', 'error');
184
185// display the form again
186rcmail_overwrite_action('edit-prefs');
187
Note: See TracBrowser for help on using the repository browser.