4 * setup.php -- Sent Subfolders Setup File
6 * Copyright (c) 1999-2005 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 $filtered_folders=array_filter($boxes, "filter_folders");
134 $sent_subfolders_base_values = array('whatever'=>$filtered_folders);
137 'name' => 'sent_subfolders_base',
138 'caption' => _("Base Sent Folder"),
139 'type' => SMOPT_TYPE_FLDRLIST
,
140 'refresh' => SMOPT_REFRESH_FOLDERLIST
,
141 'posvals' => $sent_subfolders_base_values
144 /* Add our option data to the global array. */
145 $optpage_data['grps'][SMOPT_GRP_SENT_SUBFOLDERS
] = $optgrp;
146 $optpage_data['vals'][SMOPT_GRP_SENT_SUBFOLDERS
] = $optvals;
150 * Defines folder filtering rules
152 * Callback function that should exclude some folders from folder listing.
153 * @param array $fldr list of folders. See sqimap_mailbox_list
154 * @return boolean returns true, if folder has to included in folder listing
157 function filter_folders($fldr) {
158 return strtolower($fldr['unformatted'])!='inbox';
162 * Saves sent_subfolder_options
164 function save_option_sent_subfolders_setting($option) {
165 global $data_dir, $username, $use_sent_subfolders;
167 /* Set use_sent_subfolders as either on or off. */
168 if ($option->new_value
== SMPREF_SENT_SUBFOLDERS_DISABLED
) {
169 setPref($data_dir, $username, 'use_sent_subfolders', SMPREF_OFF
);
171 setPref($data_dir, $username, 'use_sent_subfolders', SMPREF_ON
);
172 setPref($data_dir, $username, 'move_to_sent', SMPREF_ON
);
175 /* Now just save the option as normal. */
176 save_option($option);
180 * Update sent_subfolders settings
182 * function updates default sent folder value and
183 * creates required imap folders
185 function sent_subfolders_update_sentfolder() {
187 global $sent_subfolders_base, $sent_subfolders_setting;
188 global $data_dir, $imapServerAddress, $imapPort;
189 global $use_sent_subfolders, $move_to_sent;
191 sqgetGlobalVar('username', $username, SQ_SESSION
);
192 sqgetGlobalVar('key', $key, SQ_COOKIE
);
193 sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION
);
195 if ($use_sent_subfolders ||
$move_to_sent) {
198 $quarter = sent_subfolder_getQuarter($month);
201 Regarding the structure we've got three main possibilities.
202 One sent holder. level 0.
203 Multiple year holders with messages in it. level 1.
204 Multiple year folders with holders in it. level 2.
207 if( $imap_server_type == 'uw' ) {
210 $cnd_delimiter = $delimiter;
213 $cnd_delimiter = $delimiter;
215 switch ($sent_subfolders_setting) {
216 case SMPREF_SENT_SUBFOLDERS_YEARLY
:
218 $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
221 case SMPREF_SENT_SUBFOLDERS_QUARTERLY
:
223 $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
225 . $delimiter . $quarter;
226 $year_folder = $sent_subfolders_base
229 case SMPREF_SENT_SUBFOLDERS_MONTHLY
:
231 $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
233 . $delimiter . $month;
234 $year_folder = $sent_subfolders_base . $year;
236 case SMPREF_SENT_SUBFOLDERS_DISABLED
:
239 $sent_subfolder = $sent_folder;
240 $year_folder = $sent_folder;
243 /* If this folder is NOT the current sent folder, update stuff. */
244 if ($sent_subfolder != $sent_folder) {
245 /* First, update the sent folder. */
247 setPref($data_dir, $username, 'sent_folder', $sent_subfolder);
248 setPref($data_dir, $username, 'move_to_sent', SMPREF_ON
);
249 $sent_folder = $sent_subfolder;
250 $move_to_sent = SMPREF_ON
;
252 /* Auto-create folders, if they do not yet exist. */
253 if ($sent_folder != 'none') {
254 /* Create the imap connection. */
256 ($username, $key, $imapServerAddress, $imapPort, 10);
258 /* Auto-create the year folder, if it does not yet exist. */
259 if (!sqimap_mailbox_exists($ic, $year_folder)) {
260 sqimap_mailbox_create($ic, $year_folder, ($level==1)?
'':'noselect');
261 } else if (!sqimap_mailbox_is_subscribed($ic, $year_folder)) {
262 sqimap_subscribe($ic, $year_folder);
265 /* Auto-create the subfolder, if it does not yet exist. */
266 if (!sqimap_mailbox_exists($ic, $sent_folder)) {
267 sqimap_mailbox_create($ic, $sent_folder, '');
268 } else if (!sqimap_mailbox_is_subscribed($ic, $sent_subfolder)) {
269 sqimap_subscribe($ic, $sent_subfolder);
272 /* Close the imap connection. */
280 * Sets quarter subfolder names
282 * @param string $month numeric month
283 * @return string quarter name (Q + number)
285 function sent_subfolder_getQuarter($month) {
311 /* Return the current quarter. */
312 return ('Q' . $result);
316 * detects if mailbox is part of sent_subfolders
318 * @param string $mb imap folder name
319 * @return boolean 1 - is part of sent_subfolders, 0 - is not part of sent_subfolders
321 function sent_subfolders_special_mailbox($mb) {
322 global $data_dir, $username;
324 $use_sent_subfolders = getPref
325 ($data_dir, $username, 'use_sent_subfolders', SMPREF_OFF
);
326 $sent_subfolders_base = getPref($data_dir, $username, 'sent_subfolders_base', 'na');
328 if ($use_sent_subfolders == SMPREF_ON
&&
329 ($mb == $sent_subfolders_base ||
stristr($mb,$sent_subfolders_base) ) ) {