phpDocumentor updates
[squirrelmail.git] / plugins / sent_subfolders / setup.php
1 <?php
2
3 /**
4 * setup.php -- Sent Subfolders Setup File
5 *
6 * This is a standard SquirrelMail 1.2 API for plugins.
7 *
8 * @copyright &copy; 1999-2005 The SquirrelMail Project Team
9 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
10 * @version $Id$
11 * @package plugins
12 * @subpackage sent_subfolders
13 */
14
15 /**
16 */
17 define('SMPREF_SENT_SUBFOLDERS_DISABLED', 0);
18 define('SMPREF_SENT_SUBFOLDERS_YEARLY', 1);
19 define('SMPREF_SENT_SUBFOLDERS_QUARTERLY', 2);
20 define('SMPREF_SENT_SUBFOLDERS_MONTHLY', 3);
21 define('SMOPT_GRP_SENT_SUBFOLDERS','SENT_SUBFOLDERS');
22
23 /**
24 * Adds plugin to SquirrelMail's hooks
25 */
26 function squirrelmail_plugin_init_sent_subfolders() {
27 /* Standard initialization API. */
28 global $squirrelmail_plugin_hooks;
29
30 /* The hooks to make the sent subfolders display correctly. */
31 $squirrelmail_plugin_hooks
32 ['check_handleAsSent_result']['sent_subfolders'] =
33 'sent_subfolders_check_handleAsSent';
34
35 /* The hooks to automatically update sent subfolders. */
36 $squirrelmail_plugin_hooks
37 ['left_main_before']['sent_subfolders'] =
38 'sent_subfolders_update_sentfolder';
39
40 $squirrelmail_plugin_hooks
41 ['compose_send']['sent_subfolders'] =
42 'sent_subfolders_update_sentfolder';
43
44 /* The hook to load the sent subfolders prefs. */
45 $squirrelmail_plugin_hooks
46 ['loading_prefs']['sent_subfolders'] =
47 'sent_subfolders_load_prefs';
48
49 /* The hooks to handle sent subfolders options. */
50 $squirrelmail_plugin_hooks
51 ['optpage_loadhook_folder']['sent_subfolders'] =
52 'sent_subfolders_optpage_loadhook_folders';
53
54 /* mark base sent folder as special mailbox */
55 $squirrelmail_plugin_hooks
56 ['special_mailbox']['sent_subfolders'] =
57 'sent_subfolders_special_mailbox';
58 }
59
60 function sent_subfolders_check_handleAsSent() {
61 global $handleAsSent_result, $sent_subfolders_base,
62 $use_sent_subfolders;
63
64 $sent_subfolders_base = 'INBOX.Sent';
65 $args = func_get_arg(0);
66 sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION);
67
68 /* Only check the folder string if we have been passed a mailbox. */
69 if ($use_sent_subfolders && (count($args) > 1)) {
70 /* Chop up the folder strings as needed. */
71 $base_str = $sent_subfolders_base . $delimiter;
72 $mbox_str = substr($args[1], 0, strlen($base_str));
73
74 /* Perform the comparison. */
75 $handleAsSent_result =
76 ( $handleAsSent_result
77 || ($base_str == $mbox_str)
78 || ($sent_subfolders_base == $args[1])
79 );
80 }
81 }
82
83 /**
84 * Loads sent_subfolders settings
85 */
86 function sent_subfolders_load_prefs() {
87 global $use_sent_subfolders, $data_dir, $username,
88 $sent_subfolders_setting, $sent_subfolders_base;
89
90 $use_sent_subfolders = getPref
91 ($data_dir, $username, 'use_sent_subfolders', SMPREF_OFF);
92
93 $sent_subfolders_setting = getPref
94 ($data_dir, $username, 'sent_subfolders_setting', SMPREF_SENT_SUBFOLDERS_DISABLED);
95
96 $sent_subfolders_base = getPref
97 ($data_dir, $username, 'sent_subfolders_base', SMPREF_NONE);
98 }
99
100 /**
101 * Adds sent_subfolders options in folder preferences
102 */
103 function sent_subfolders_optpage_loadhook_folders() {
104 global $optpage_data, $imapServerAddress, $imapPort;
105
106 sqgetGlobalVar('username', $username, SQ_SESSION);
107 sqgetGlobalVar('key', $key, SQ_COOKIE);
108
109 /* Get some imap data we need later. */
110 $imapConnection =
111 sqimap_login($username, $key, $imapServerAddress, $imapPort, 0);
112 $boxes = sqimap_mailbox_list($imapConnection);
113 sqimap_logout($imapConnection);
114
115 /* Load the Sent Subfolder Options into an array. */
116 $optgrp = _("Sent Subfolders Options");
117 $optvals = array();
118
119 $optvals[] = array(
120 'name' => 'sent_subfolders_setting',
121 'caption' => _("Use Sent Subfolders"),
122 'type' => SMOPT_TYPE_STRLIST,
123 'refresh' => SMOPT_REFRESH_FOLDERLIST,
124 'posvals' => array(SMPREF_SENT_SUBFOLDERS_DISABLED => _("Disabled"),
125 SMPREF_SENT_SUBFOLDERS_MONTHLY => _("Monthly"),
126 SMPREF_SENT_SUBFOLDERS_QUARTERLY => _("Quarterly"),
127 SMPREF_SENT_SUBFOLDERS_YEARLY => _("Yearly")),
128 'save' => 'save_option_sent_subfolders_setting'
129 );
130
131 $filtered_folders=array_filter($boxes, "filter_folders");
132 $sent_subfolders_base_values = array('whatever'=>$filtered_folders);
133
134 $optvals[] = array(
135 'name' => 'sent_subfolders_base',
136 'caption' => _("Base Sent Folder"),
137 'type' => SMOPT_TYPE_FLDRLIST,
138 'refresh' => SMOPT_REFRESH_FOLDERLIST,
139 'posvals' => $sent_subfolders_base_values
140 );
141
142 /* Add our option data to the global array. */
143 $optpage_data['grps'][SMOPT_GRP_SENT_SUBFOLDERS] = $optgrp;
144 $optpage_data['vals'][SMOPT_GRP_SENT_SUBFOLDERS] = $optvals;
145 }
146
147 /**
148 * Defines folder filtering rules
149 *
150 * Callback function that should exclude some folders from folder listing.
151 * @param array $fldr list of folders. See sqimap_mailbox_list
152 * @return boolean returns true, if folder has to included in folder listing
153 * @access private
154 */
155 function filter_folders($fldr) {
156 return strtolower($fldr['unformatted'])!='inbox';
157 }
158
159 /**
160 * Saves sent_subfolder_options
161 */
162 function save_option_sent_subfolders_setting($option) {
163 global $data_dir, $username, $use_sent_subfolders;
164
165 /* Set use_sent_subfolders as either on or off. */
166 if ($option->new_value == SMPREF_SENT_SUBFOLDERS_DISABLED) {
167 setPref($data_dir, $username, 'use_sent_subfolders', SMPREF_OFF);
168 } else {
169 setPref($data_dir, $username, 'use_sent_subfolders', SMPREF_ON);
170 setPref($data_dir, $username, 'move_to_sent', SMPREF_ON);
171 }
172
173 /* Now just save the option as normal. */
174 save_option($option);
175 }
176
177 /**
178 * Update sent_subfolders settings
179 *
180 * function updates default sent folder value and
181 * creates required imap folders
182 */
183 function sent_subfolders_update_sentfolder() {
184 global $sent_folder;
185 global $sent_subfolders_base, $sent_subfolders_setting;
186 global $data_dir, $imapServerAddress, $imapPort;
187 global $use_sent_subfolders, $move_to_sent;
188
189 sqgetGlobalVar('username', $username, SQ_SESSION);
190 sqgetGlobalVar('key', $key, SQ_COOKIE);
191 sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION);
192
193 if ($use_sent_subfolders || $move_to_sent) {
194 $year = date('Y');
195 $month = date('m');
196 $quarter = sent_subfolder_getQuarter($month);
197
198 /*
199 Regarding the structure we've got three main possibilities.
200 One sent holder. level 0.
201 Multiple year holders with messages in it. level 1.
202 Multiple year folders with holders in it. level 2.
203 */
204 /*
205 if( $imap_server_type == 'uw' ) {
206 $cnd_delimiter = '';
207 } else {
208 $cnd_delimiter = $delimiter;
209 }
210 */
211 $cnd_delimiter = $delimiter;
212
213 switch ($sent_subfolders_setting) {
214 case SMPREF_SENT_SUBFOLDERS_YEARLY:
215 $level = 1;
216 $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
217 . $year;
218 break;
219 case SMPREF_SENT_SUBFOLDERS_QUARTERLY:
220 $level = 2;
221 $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
222 . $year
223 . $delimiter . $quarter;
224 $year_folder = $sent_subfolders_base
225 . $year;
226 break;
227 case SMPREF_SENT_SUBFOLDERS_MONTHLY:
228 $level = 2;
229 $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
230 . $year
231 . $delimiter . $month;
232 $year_folder = $sent_subfolders_base . $year;
233 break;
234 case SMPREF_SENT_SUBFOLDERS_DISABLED:
235 default:
236 $level = 0;
237 $sent_subfolder = $sent_folder;
238 $year_folder = $sent_folder;
239 }
240
241 /* If this folder is NOT the current sent folder, update stuff. */
242 if ($sent_subfolder != $sent_folder) {
243 /* First, update the sent folder. */
244
245 setPref($data_dir, $username, 'sent_folder', $sent_subfolder);
246 setPref($data_dir, $username, 'move_to_sent', SMPREF_ON);
247 $sent_folder = $sent_subfolder;
248 $move_to_sent = SMPREF_ON;
249
250 /* Auto-create folders, if they do not yet exist. */
251 if ($sent_folder != 'none') {
252 /* Create the imap connection. */
253 $ic = sqimap_login
254 ($username, $key, $imapServerAddress, $imapPort, 10);
255
256 /* Auto-create the year folder, if it does not yet exist. */
257 if (!sqimap_mailbox_exists($ic, $year_folder)) {
258 sqimap_mailbox_create($ic, $year_folder, ($level==1)?'':'noselect');
259 } else if (!sqimap_mailbox_is_subscribed($ic, $year_folder)) {
260 sqimap_subscribe($ic, $year_folder);
261 }
262
263 /* Auto-create the subfolder, if it does not yet exist. */
264 if (!sqimap_mailbox_exists($ic, $sent_folder)) {
265 sqimap_mailbox_create($ic, $sent_folder, '');
266 } else if (!sqimap_mailbox_is_subscribed($ic, $sent_subfolder)) {
267 sqimap_subscribe($ic, $sent_subfolder);
268 }
269
270 /* Close the imap connection. */
271 sqimap_logout($ic);
272 }
273 }
274 }
275 }
276
277 /**
278 * Sets quarter subfolder names
279 *
280 * @param string $month numeric month
281 * @return string quarter name (Q + number)
282 */
283 function sent_subfolder_getQuarter($month) {
284 switch ($month) {
285 case '01':
286 case '02':
287 case '03':
288 $result = '1';
289 break;
290 case '04':
291 case '05':
292 case '06':
293 $result = '2';
294 break;
295 case '07':
296 case '08':
297 case '09':
298 $result = '3';
299 break;
300 case '10':
301 case '11':
302 case '12':
303 $result = '4';
304 break;
305 default:
306 $result = 'ERR';
307 }
308
309 /* Return the current quarter. */
310 return ('Q' . $result);
311 }
312
313 /**
314 * detects if mailbox is part of sent_subfolders
315 *
316 * @param string $mb imap folder name
317 * @return boolean 1 - is part of sent_subfolders, 0 - is not part of sent_subfolders
318 */
319 function sent_subfolders_special_mailbox($mb) {
320 global $data_dir, $username;
321
322 $use_sent_subfolders = getPref
323 ($data_dir, $username, 'use_sent_subfolders', SMPREF_OFF);
324 $sent_subfolders_base = getPref($data_dir, $username, 'sent_subfolders_base', 'na');
325
326 if ($use_sent_subfolders == SMPREF_ON &&
327 ($mb == $sent_subfolders_base || stristr($mb,$sent_subfolders_base) ) ) {
328 return 1;
329 }
330 return 0;
331 }
332 ?>