phpDocumentor updates
[squirrelmail.git] / plugins / sent_subfolders / setup.php
CommitLineData
a3439b27 1<?php
2
3/**
4 * setup.php -- Sent Subfolders Setup File
5 *
598294a7 6 * This is a standard SquirrelMail 1.2 API for plugins.
a3439b27 7 *
4b4abf93 8 * @copyright &copy; 1999-2005 The SquirrelMail Project Team
9 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
4f51df66 10 * @version $Id$
ea5f4b8e 11 * @package plugins
12 * @subpackage sent_subfolders
a3439b27 13 */
14
91e0dccc 15/**
ea5f4b8e 16 */
a3439b27 17define('SMPREF_SENT_SUBFOLDERS_DISABLED', 0);
18define('SMPREF_SENT_SUBFOLDERS_YEARLY', 1);
19define('SMPREF_SENT_SUBFOLDERS_QUARTERLY', 2);
20define('SMPREF_SENT_SUBFOLDERS_MONTHLY', 3);
21define('SMOPT_GRP_SENT_SUBFOLDERS','SENT_SUBFOLDERS');
22
bb58f260 23/**
598294a7 24 * Adds plugin to SquirrelMail's hooks
bb58f260 25 */
a3439b27 26function 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';
bb58f260 53
54 /* mark base sent folder as special mailbox */
55 $squirrelmail_plugin_hooks
91e0dccc 56 ['special_mailbox']['sent_subfolders'] =
57 'sent_subfolders_special_mailbox';
a3439b27 58}
59
60function sent_subfolders_check_handleAsSent() {
b6b31355 61 global $handleAsSent_result, $sent_subfolders_base,
04f6008a 62 $use_sent_subfolders;
b587ac51 63
a3439b27 64 $sent_subfolders_base = 'INBOX.Sent';
65 $args = func_get_arg(0);
b587ac51 66 sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION);
a3439b27 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
d79e01f5 77 || ($base_str == $mbox_str)
78 || ($sent_subfolders_base == $args[1])
a3439b27 79 );
80 }
81}
82
bb58f260 83/**
84 * Loads sent_subfolders settings
85 */
a3439b27 86function sent_subfolders_load_prefs() {
88cb1b4d 87 global $use_sent_subfolders, $data_dir, $username,
88 $sent_subfolders_setting, $sent_subfolders_base;
a3439b27 89
90 $use_sent_subfolders = getPref
91 ($data_dir, $username, 'use_sent_subfolders', SMPREF_OFF);
d79e01f5 92
a3439b27 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
bb58f260 100/**
101 * Adds sent_subfolders options in folder preferences
102 */
a3439b27 103function sent_subfolders_optpage_loadhook_folders() {
04f6008a 104 global $optpage_data, $imapServerAddress, $imapPort;
105
b587ac51 106 sqgetGlobalVar('username', $username, SQ_SESSION);
107 sqgetGlobalVar('key', $key, SQ_COOKIE);
a3439b27 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"),
d79e01f5 125 SMPREF_SENT_SUBFOLDERS_MONTHLY => _("Monthly"),
126 SMPREF_SENT_SUBFOLDERS_QUARTERLY => _("Quarterly"),
127 SMPREF_SENT_SUBFOLDERS_YEARLY => _("Yearly")),
a3439b27 128 'save' => 'save_option_sent_subfolders_setting'
129 );
130
2589ba9a 131 $filtered_folders=array_filter($boxes, "filter_folders");
132 $sent_subfolders_base_values = array('whatever'=>$filtered_folders);
a3439b27 133
134 $optvals[] = array(
135 'name' => 'sent_subfolders_base',
136 'caption' => _("Base Sent Folder"),
2589ba9a 137 'type' => SMOPT_TYPE_FLDRLIST,
a3439b27 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
2589ba9a 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
91e0dccc 153 * @access private
2589ba9a 154 */
155function filter_folders($fldr) {
156 return strtolower($fldr['unformatted'])!='inbox';
157}
158
bb58f260 159/**
160 * Saves sent_subfolder_options
161 */
a3439b27 162function 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
bb58f260 177/**
178 * Update sent_subfolders settings
179 *
91e0dccc 180 * function updates default sent folder value and
bb58f260 181 * creates required imap folders
182 */
a3439b27 183function sent_subfolders_update_sentfolder() {
ce68b76b 184 global $sent_folder;
a3439b27 185 global $sent_subfolders_base, $sent_subfolders_setting;
04f6008a 186 global $data_dir, $imapServerAddress, $imapPort;
ce68b76b 187 global $use_sent_subfolders, $move_to_sent;
d79e01f5 188
b587ac51 189 sqgetGlobalVar('username', $username, SQ_SESSION);
190 sqgetGlobalVar('key', $key, SQ_COOKIE);
191 sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION);
91e0dccc 192
1c52ba77 193 if ($use_sent_subfolders || $move_to_sent) {
a3439b27 194 $year = date('Y');
195 $month = date('m');
196 $quarter = sent_subfolder_getQuarter($month);
197
1c52ba77 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 */
4965e012 204/*
72b9aff9 205 if( $imap_server_type == 'uw' ) {
206 $cnd_delimiter = '';
207 } else {
208 $cnd_delimiter = $delimiter;
209 }
91e0dccc 210*/
4965e012 211 $cnd_delimiter = $delimiter;
91e0dccc 212
a3439b27 213 switch ($sent_subfolders_setting) {
1c52ba77 214 case SMPREF_SENT_SUBFOLDERS_YEARLY:
215 $level = 1;
72b9aff9 216 $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
1c52ba77 217 . $year;
1c52ba77 218 break;
219 case SMPREF_SENT_SUBFOLDERS_QUARTERLY:
220 $level = 2;
91e0dccc 221 $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
1c52ba77 222 . $year
223 . $delimiter . $quarter;
224 $year_folder = $sent_subfolders_base
a3add160 225 . $year;
1c52ba77 226 break;
227 case SMPREF_SENT_SUBFOLDERS_MONTHLY:
228 $level = 2;
72b9aff9 229 $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
1c52ba77 230 . $year
231 . $delimiter . $month;
a3add160 232 $year_folder = $sent_subfolders_base . $year;
1c52ba77 233 break;
234 case SMPREF_SENT_SUBFOLDERS_DISABLED:
235 default:
236 $level = 0;
237 $sent_subfolder = $sent_folder;
238 $year_folder = $sent_folder;
a3439b27 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. */
1c52ba77 244
a3439b27 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);
d79e01f5 255
a3439b27 256 /* Auto-create the year folder, if it does not yet exist. */
257 if (!sqimap_mailbox_exists($ic, $year_folder)) {
1c52ba77 258 sqimap_mailbox_create($ic, $year_folder, ($level==1)?'':'noselect');
a3439b27 259 } else if (!sqimap_mailbox_is_subscribed($ic, $year_folder)) {
260 sqimap_subscribe($ic, $year_folder);
261 }
d79e01f5 262
a3439b27 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, '');
1c52ba77 266 } else if (!sqimap_mailbox_is_subscribed($ic, $sent_subfolder)) {
267 sqimap_subscribe($ic, $sent_subfolder);
a3439b27 268 }
269
270 /* Close the imap connection. */
271 sqimap_logout($ic);
272 }
273 }
274 }
275}
276
bb58f260 277/**
278 * Sets quarter subfolder names
279 *
280 * @param string $month numeric month
281 * @return string quarter name (Q + number)
282 */
a3439b27 283function sent_subfolder_getQuarter($month) {
284 switch ($month) {
285 case '01':
286 case '02':
d79e01f5 287 case '03':
288 $result = '1';
289 break;
a3439b27 290 case '04':
291 case '05':
d79e01f5 292 case '06':
293 $result = '2';
294 break;
a3439b27 295 case '07':
296 case '08':
d79e01f5 297 case '09':
298 $result = '3';
299 break;
a3439b27 300 case '10':
301 case '11':
d79e01f5 302 case '12':
303 $result = '4';
304 break;
305 default:
306 $result = 'ERR';
a3439b27 307 }
308
309 /* Return the current quarter. */
310 return ('Q' . $result);
311}
312
bb58f260 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 */
319function 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
91e0dccc 326 if ($use_sent_subfolders == SMPREF_ON &&
bb58f260 327 ($mb == $sent_subfolders_base || stristr($mb,$sent_subfolders_base) ) ) {
91e0dccc 328 return 1;
bb58f260 329 }
330 return 0;
331}
91e0dccc 332?>