4
* setup.php -- Sent Subfolders Setup File
6
* Copyright (c) 1999-2003 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.
11
* $Id: setup.php,v 1.16 2004/01/04 12:08:45 tokul Exp $
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) ) ) {