4 * setup.php -- Sent Subfolders Setup File
6 * Copyright (c) 1999-2004 The SquirrelMail Project Team
7 * Licensed under the GNU GPL. For full terms see the file COPYING.
9 * This is a standard Squirrelmail-1.2 API for plugins.
13 * @subpackage sent_subfolders
19 define('SMPREF_SENT_SUBFOLDERS_DISABLED', 0);
20 define('SMPREF_SENT_SUBFOLDERS_YEARLY', 1);
21 define('SMPREF_SENT_SUBFOLDERS_QUARTERLY', 2);
22 define('SMPREF_SENT_SUBFOLDERS_MONTHLY', 3);
23 define('SMOPT_GRP_SENT_SUBFOLDERS','SENT_SUBFOLDERS');
26 * Adds plugin to squirrelmail hooks
28 function squirrelmail_plugin_init_sent_subfolders() {
29 /* Standard initialization API. */
30 global $squirrelmail_plugin_hooks;
32 /* The hooks to make the sent subfolders display correctly. */
33 $squirrelmail_plugin_hooks
34 ['check_handleAsSent_result']['sent_subfolders'] =
35 'sent_subfolders_check_handleAsSent';
37 /* The hooks to automatically update sent subfolders. */
38 $squirrelmail_plugin_hooks
39 ['left_main_before']['sent_subfolders'] =
40 'sent_subfolders_update_sentfolder';
42 $squirrelmail_plugin_hooks
43 ['compose_send']['sent_subfolders'] =
44 'sent_subfolders_update_sentfolder';
46 /* The hook to load the sent subfolders prefs. */
47 $squirrelmail_plugin_hooks
48 ['loading_prefs']['sent_subfolders'] =
49 'sent_subfolders_load_prefs';
51 /* The hooks to handle sent subfolders options. */
52 $squirrelmail_plugin_hooks
53 ['optpage_loadhook_folder']['sent_subfolders'] =
54 'sent_subfolders_optpage_loadhook_folders';
56 /* mark base sent folder as special mailbox */
57 $squirrelmail_plugin_hooks
58 ['special_mailbox']['sent_subfolders'] =
59 'sent_subfolders_special_mailbox';
62 function sent_subfolders_check_handleAsSent() {
63 global $handleAsSent_result, $sent_subfolders_base,
66 $sent_subfolders_base = 'INBOX.Sent';
67 $args = func_get_arg(0);
68 sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION
);
70 /* Only check the folder string if we have been passed a mailbox. */
71 if ($use_sent_subfolders && (count($args) > 1)) {
72 /* Chop up the folder strings as needed. */
73 $base_str = $sent_subfolders_base . $delimiter;
74 $mbox_str = substr($args[1], 0, strlen($base_str));
76 /* Perform the comparison. */
77 $handleAsSent_result =
78 ( $handleAsSent_result
79 ||
($base_str == $mbox_str)
80 ||
($sent_subfolders_base == $args[1])
86 * Loads sent_subfolders settings
88 function sent_subfolders_load_prefs() {
89 global $use_sent_subfolders, $data_dir, $username,
90 $sent_subfolders_setting, $sent_subfolders_base;
92 $use_sent_subfolders = getPref
93 ($data_dir, $username, 'use_sent_subfolders', SMPREF_OFF
);
95 $sent_subfolders_setting = getPref
96 ($data_dir, $username, 'sent_subfolders_setting', SMPREF_SENT_SUBFOLDERS_DISABLED
);
98 $sent_subfolders_base = getPref
99 ($data_dir, $username, 'sent_subfolders_base', SMPREF_NONE
);
103 * Adds sent_subfolders options in folder preferences
105 function sent_subfolders_optpage_loadhook_folders() {
106 global $optpage_data, $imapServerAddress, $imapPort;
108 sqgetGlobalVar('username', $username, SQ_SESSION
);
109 sqgetGlobalVar('key', $key, SQ_COOKIE
);
111 /* Get some imap data we need later. */
113 sqimap_login($username, $key, $imapServerAddress, $imapPort, 0);
114 $boxes = sqimap_mailbox_list($imapConnection);
115 sqimap_logout($imapConnection);
117 /* Load the Sent Subfolder Options into an array. */
118 $optgrp = _("Sent Subfolders Options");
122 'name' => 'sent_subfolders_setting',
123 'caption' => _("Use Sent Subfolders"),
124 'type' => SMOPT_TYPE_STRLIST
,
125 'refresh' => SMOPT_REFRESH_FOLDERLIST
,
126 'posvals' => array(SMPREF_SENT_SUBFOLDERS_DISABLED
=> _("Disabled"),
127 SMPREF_SENT_SUBFOLDERS_MONTHLY
=> _("Monthly"),
128 SMPREF_SENT_SUBFOLDERS_QUARTERLY
=> _("Quarterly"),
129 SMPREF_SENT_SUBFOLDERS_YEARLY
=> _("Yearly")),
130 'save' => 'save_option_sent_subfolders_setting'
133 $sent_subfolders_base_values = array();
134 foreach ($boxes as $folder) {
135 if (strtolower($folder['unformatted']) != 'inbox') {
136 $real_value = $folder['unformatted-dm'];
137 $disp_value = str_replace(' ', ' ', $folder['formatted']);
138 $sent_subfolders_base_values[$real_value] = $disp_value;
143 'name' => 'sent_subfolders_base',
144 'caption' => _("Base Sent Folder"),
145 'type' => SMOPT_TYPE_STRLIST
,
146 'refresh' => SMOPT_REFRESH_FOLDERLIST
,
147 'posvals' => $sent_subfolders_base_values
150 /* Add our option data to the global array. */
151 $optpage_data['grps'][SMOPT_GRP_SENT_SUBFOLDERS
] = $optgrp;
152 $optpage_data['vals'][SMOPT_GRP_SENT_SUBFOLDERS
] = $optvals;
156 * Saves sent_subfolder_options
158 function save_option_sent_subfolders_setting($option) {
159 global $data_dir, $username, $use_sent_subfolders;
161 /* Set use_sent_subfolders as either on or off. */
162 if ($option->new_value
== SMPREF_SENT_SUBFOLDERS_DISABLED
) {
163 setPref($data_dir, $username, 'use_sent_subfolders', SMPREF_OFF
);
165 setPref($data_dir, $username, 'use_sent_subfolders', SMPREF_ON
);
166 setPref($data_dir, $username, 'move_to_sent', SMPREF_ON
);
169 /* Now just save the option as normal. */
170 save_option($option);
174 * Update sent_subfolders settings
176 * function updates default sent folder value and
177 * creates required imap folders
179 function sent_subfolders_update_sentfolder() {
180 global $sent_folder, $auto_create_special, $auto_create_done;
181 global $sent_subfolders_base, $sent_subfolders_setting;
182 global $data_dir, $imapServerAddress, $imapPort;
183 global $use_sent_subfolders, $move_to_sent, $imap_server_type;
185 sqgetGlobalVar('username', $username, SQ_SESSION
);
186 sqgetGlobalVar('key', $key, SQ_COOKIE
);
187 sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION
);
189 if ($use_sent_subfolders ||
$move_to_sent) {
192 $quarter = sent_subfolder_getQuarter($month);
195 Regarding the structure we've got three main possibilities.
196 One sent holder. level 0.
197 Multiple year holders with messages in it. level 1.
198 Multiple year folders with holders in it. level 2.
201 if( $imap_server_type == 'uw' ) {
204 $cnd_delimiter = $delimiter;
207 $cnd_delimiter = $delimiter;
209 switch ($sent_subfolders_setting) {
210 case SMPREF_SENT_SUBFOLDERS_YEARLY
:
212 $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
215 case SMPREF_SENT_SUBFOLDERS_QUARTERLY
:
217 $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
219 . $delimiter . $quarter;
220 $year_folder = $sent_subfolders_base
223 case SMPREF_SENT_SUBFOLDERS_MONTHLY
:
225 $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
227 . $delimiter . $month;
228 $year_folder = $sent_subfolders_base . $year;
230 case SMPREF_SENT_SUBFOLDERS_DISABLED
:
233 $sent_subfolder = $sent_folder;
234 $year_folder = $sent_folder;
237 /* If this folder is NOT the current sent folder, update stuff. */
238 if ($sent_subfolder != $sent_folder) {
239 /* First, update the sent folder. */
241 setPref($data_dir, $username, 'sent_folder', $sent_subfolder);
242 setPref($data_dir, $username, 'move_to_sent', SMPREF_ON
);
243 $sent_folder = $sent_subfolder;
244 $move_to_sent = SMPREF_ON
;
246 /* Auto-create folders, if they do not yet exist. */
247 if ($sent_folder != 'none') {
248 /* Create the imap connection. */
250 ($username, $key, $imapServerAddress, $imapPort, 10);
252 /* Auto-create the year folder, if it does not yet exist. */
253 if (!sqimap_mailbox_exists($ic, $year_folder)) {
254 sqimap_mailbox_create($ic, $year_folder, ($level==1)?
'':'noselect');
255 } else if (!sqimap_mailbox_is_subscribed($ic, $year_folder)) {
256 sqimap_subscribe($ic, $year_folder);
259 /* Auto-create the subfolder, if it does not yet exist. */
260 if (!sqimap_mailbox_exists($ic, $sent_folder)) {
261 sqimap_mailbox_create($ic, $sent_folder, '');
262 } else if (!sqimap_mailbox_is_subscribed($ic, $sent_subfolder)) {
263 sqimap_subscribe($ic, $sent_subfolder);
266 /* Close the imap connection. */
274 * Sets quarter subfolder names
276 * @param string $month numeric month
277 * @return string quarter name (Q + number)
279 function sent_subfolder_getQuarter($month) {
305 /* Return the current quarter. */
306 return ('Q' . $result);
310 * detects if mailbox is part of sent_subfolders
312 * @param string $mb imap folder name
313 * @return boolean 1 - is part of sent_subfolders, 0 - is not part of sent_subfolders
315 function sent_subfolders_special_mailbox($mb) {
316 global $data_dir, $username;
318 $use_sent_subfolders = getPref
319 ($data_dir, $username, 'use_sent_subfolders', SMPREF_OFF
);
320 $sent_subfolders_base = getPref($data_dir, $username, 'sent_subfolders_base', 'na');
322 if ($use_sent_subfolders == SMPREF_ON
&&
323 ($mb == $sent_subfolders_base ||
stristr($mb,$sent_subfolders_base) ) ) {