4 * setup.php -- Sent Subfolders Setup File
6 * This is a standard SquirrelMail 1.2 API for plugins.
8 * @copyright © 1999-2005 The SquirrelMail Project Team
9 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
12 * @subpackage sent_subfolders
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');
24 * Adds plugin to SquirrelMail's hooks
26 function squirrelmail_plugin_init_sent_subfolders() {
27 /* Standard initialization API. */
28 global $squirrelmail_plugin_hooks;
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';
35 /* The hooks to automatically update sent subfolders. */
36 $squirrelmail_plugin_hooks
37 ['left_main_before']['sent_subfolders'] =
38 'sent_subfolders_update_sentfolder';
40 $squirrelmail_plugin_hooks
41 ['compose_send']['sent_subfolders'] =
42 'sent_subfolders_update_sentfolder';
44 /* The hook to load the sent subfolders prefs. */
45 $squirrelmail_plugin_hooks
46 ['loading_prefs']['sent_subfolders'] =
47 'sent_subfolders_load_prefs';
49 /* The hooks to handle sent subfolders options. */
50 $squirrelmail_plugin_hooks
51 ['optpage_loadhook_folder']['sent_subfolders'] =
52 'sent_subfolders_optpage_loadhook_folders';
54 /* mark base sent folder as special mailbox */
55 $squirrelmail_plugin_hooks
56 ['special_mailbox']['sent_subfolders'] =
57 'sent_subfolders_special_mailbox';
60 function sent_subfolders_check_handleAsSent() {
61 global $handleAsSent_result, $sent_subfolders_base,
64 $sent_subfolders_base = 'INBOX.Sent';
65 $args = func_get_arg(0);
66 sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION
);
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));
74 /* Perform the comparison. */
75 $handleAsSent_result =
76 ( $handleAsSent_result
77 ||
($base_str == $mbox_str)
78 ||
($sent_subfolders_base == $args[1])
84 * Loads sent_subfolders settings
86 function sent_subfolders_load_prefs() {
87 global $use_sent_subfolders, $data_dir, $username,
88 $sent_subfolders_setting, $sent_subfolders_base;
90 $use_sent_subfolders = getPref
91 ($data_dir, $username, 'use_sent_subfolders', SMPREF_OFF
);
93 $sent_subfolders_setting = getPref
94 ($data_dir, $username, 'sent_subfolders_setting', SMPREF_SENT_SUBFOLDERS_DISABLED
);
96 $sent_subfolders_base = getPref
97 ($data_dir, $username, 'sent_subfolders_base', SMPREF_NONE
);
101 * Adds sent_subfolders options in folder preferences
103 function sent_subfolders_optpage_loadhook_folders() {
104 global $optpage_data, $imapServerAddress, $imapPort;
106 sqgetGlobalVar('username', $username, SQ_SESSION
);
107 sqgetGlobalVar('key', $key, SQ_COOKIE
);
109 /* Get some imap data we need later. */
111 sqimap_login($username, $key, $imapServerAddress, $imapPort, 0);
112 $boxes = sqimap_mailbox_list($imapConnection);
113 sqimap_logout($imapConnection);
115 /* Load the Sent Subfolder Options into an array. */
116 $optgrp = _("Sent Subfolders Options");
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'
131 $filtered_folders=array_filter($boxes, "filter_folders");
132 $sent_subfolders_base_values = array('whatever'=>$filtered_folders);
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
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;
148 * Defines folder filtering rules
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
155 function filter_folders($fldr) {
156 return strtolower($fldr['unformatted'])!='inbox';
160 * Saves sent_subfolder_options
162 function save_option_sent_subfolders_setting($option) {
163 global $data_dir, $username, $use_sent_subfolders;
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
);
169 setPref($data_dir, $username, 'use_sent_subfolders', SMPREF_ON
);
170 setPref($data_dir, $username, 'move_to_sent', SMPREF_ON
);
173 /* Now just save the option as normal. */
174 save_option($option);
178 * Update sent_subfolders settings
180 * function updates default sent folder value and
181 * creates required imap folders
183 function sent_subfolders_update_sentfolder() {
185 global $sent_subfolders_base, $sent_subfolders_setting;
186 global $data_dir, $imapServerAddress, $imapPort;
187 global $use_sent_subfolders, $move_to_sent;
189 sqgetGlobalVar('username', $username, SQ_SESSION
);
190 sqgetGlobalVar('key', $key, SQ_COOKIE
);
191 sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION
);
193 if ($use_sent_subfolders ||
$move_to_sent) {
196 $quarter = sent_subfolder_getQuarter($month);
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.
205 if( $imap_server_type == 'uw' ) {
208 $cnd_delimiter = $delimiter;
211 $cnd_delimiter = $delimiter;
213 switch ($sent_subfolders_setting) {
214 case SMPREF_SENT_SUBFOLDERS_YEARLY
:
216 $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
219 case SMPREF_SENT_SUBFOLDERS_QUARTERLY
:
221 $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
223 . $delimiter . $quarter;
224 $year_folder = $sent_subfolders_base
227 case SMPREF_SENT_SUBFOLDERS_MONTHLY
:
229 $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
231 . $delimiter . $month;
232 $year_folder = $sent_subfolders_base . $year;
234 case SMPREF_SENT_SUBFOLDERS_DISABLED
:
237 $sent_subfolder = $sent_folder;
238 $year_folder = $sent_folder;
241 /* If this folder is NOT the current sent folder, update stuff. */
242 if ($sent_subfolder != $sent_folder) {
243 /* First, update the sent folder. */
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
;
250 /* Auto-create folders, if they do not yet exist. */
251 if ($sent_folder != 'none') {
252 /* Create the imap connection. */
254 ($username, $key, $imapServerAddress, $imapPort, 10);
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);
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);
270 /* Close the imap connection. */
278 * Sets quarter subfolder names
280 * @param string $month numeric month
281 * @return string quarter name (Q + number)
283 function sent_subfolder_getQuarter($month) {
309 /* Return the current quarter. */
310 return ('Q' . $result);
314 * detects if mailbox is part of sent_subfolders
316 * @param string $mb imap folder name
317 * @return boolean 1 - is part of sent_subfolders, 0 - is not part of sent_subfolders
319 function sent_subfolders_special_mailbox($mb) {
320 global $data_dir, $username;
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');
326 if ($use_sent_subfolders == SMPREF_ON
&&
327 ($mb == $sent_subfolders_base ||
stristr($mb,$sent_subfolders_base) ) ) {