Fix for IMAP servers that don't always return a UIDNEXT value
[squirrelmail.git] / plugins / sent_subfolders / setup.php
CommitLineData
a3439b27 1<?php
2
3/**
4 * setup.php -- Sent Subfolders Setup File
5 *
6 * Copyright (c) 1999-2002 The SquirrelMail Project Team
7 * Licensed under the GNU GPL. For full terms see the file COPYING.
8 *
9 * This is a standard Squirrelmail-1.2 API for plugins.
10 *
11 * $Id$
12 */
13
14define('SMPREF_SENT_SUBFOLDERS_DISABLED', 0);
15define('SMPREF_SENT_SUBFOLDERS_YEARLY', 1);
16define('SMPREF_SENT_SUBFOLDERS_QUARTERLY', 2);
17define('SMPREF_SENT_SUBFOLDERS_MONTHLY', 3);
18define('SMOPT_GRP_SENT_SUBFOLDERS','SENT_SUBFOLDERS');
19
20function squirrelmail_plugin_init_sent_subfolders() {
21 /* Standard initialization API. */
22 global $squirrelmail_plugin_hooks;
23
24 /* The hooks to make the sent subfolders display correctly. */
25 $squirrelmail_plugin_hooks
26 ['check_handleAsSent_result']['sent_subfolders'] =
27 'sent_subfolders_check_handleAsSent';
28
29 /* The hooks to automatically update sent subfolders. */
30 $squirrelmail_plugin_hooks
31 ['left_main_before']['sent_subfolders'] =
32 'sent_subfolders_update_sentfolder';
33
34 $squirrelmail_plugin_hooks
35 ['compose_send']['sent_subfolders'] =
36 'sent_subfolders_update_sentfolder';
37
38 /* The hook to load the sent subfolders prefs. */
39 $squirrelmail_plugin_hooks
40 ['loading_prefs']['sent_subfolders'] =
41 'sent_subfolders_load_prefs';
42
43 /* The hooks to handle sent subfolders options. */
44 $squirrelmail_plugin_hooks
45 ['optpage_loadhook_folder']['sent_subfolders'] =
46 'sent_subfolders_optpage_loadhook_folders';
47}
48
49function sent_subfolders_check_handleAsSent() {
b6b31355 50 global $handleAsSent_result, $sent_subfolders_base,
51 $use_sent_subfolders, $delimiter;
a3439b27 52 $sent_subfolders_base = 'INBOX.Sent';
53 $args = func_get_arg(0);
54
55 /* Only check the folder string if we have been passed a mailbox. */
56 if ($use_sent_subfolders && (count($args) > 1)) {
57 /* Chop up the folder strings as needed. */
58 $base_str = $sent_subfolders_base . $delimiter;
59 $mbox_str = substr($args[1], 0, strlen($base_str));
60
61 /* Perform the comparison. */
62 $handleAsSent_result =
63 ( $handleAsSent_result
d79e01f5 64 || ($base_str == $mbox_str)
65 || ($sent_subfolders_base == $args[1])
a3439b27 66 );
67 }
68}
69
70function sent_subfolders_load_prefs() {
88cb1b4d 71 global $use_sent_subfolders, $data_dir, $username,
72 $sent_subfolders_setting, $sent_subfolders_base;
a3439b27 73
74 $use_sent_subfolders = getPref
75 ($data_dir, $username, 'use_sent_subfolders', SMPREF_OFF);
d79e01f5 76
a3439b27 77 $sent_subfolders_setting = getPref
78 ($data_dir, $username, 'sent_subfolders_setting', SMPREF_SENT_SUBFOLDERS_DISABLED);
79
80 $sent_subfolders_base = getPref
81 ($data_dir, $username, 'sent_subfolders_base', SMPREF_NONE);
82}
83
84function sent_subfolders_optpage_loadhook_folders() {
85 global $optpage_data, $username, $key, $imapServerAddress, $imapPort;
86
87 /* Get some imap data we need later. */
88 $imapConnection =
89 sqimap_login($username, $key, $imapServerAddress, $imapPort, 0);
90 $boxes = sqimap_mailbox_list($imapConnection);
91 sqimap_logout($imapConnection);
92
93 /* Load the Sent Subfolder Options into an array. */
94 $optgrp = _("Sent Subfolders Options");
95 $optvals = array();
96
97 $optvals[] = array(
98 'name' => 'sent_subfolders_setting',
99 'caption' => _("Use Sent Subfolders"),
100 'type' => SMOPT_TYPE_STRLIST,
101 'refresh' => SMOPT_REFRESH_FOLDERLIST,
102 'posvals' => array(SMPREF_SENT_SUBFOLDERS_DISABLED => _("Disabled"),
d79e01f5 103 SMPREF_SENT_SUBFOLDERS_MONTHLY => _("Monthly"),
104 SMPREF_SENT_SUBFOLDERS_QUARTERLY => _("Quarterly"),
105 SMPREF_SENT_SUBFOLDERS_YEARLY => _("Yearly")),
a3439b27 106 'save' => 'save_option_sent_subfolders_setting'
107 );
108
109 $sent_subfolders_base_values = array();
110 foreach ($boxes as $folder) {
111 if (strtolower($folder['unformatted']) != 'inbox') {
112 $real_value = $folder['unformatted-dm'];
113 $disp_value = str_replace(' ', '&nbsp;', $folder['formatted']);
114 $sent_subfolders_base_values[$real_value] = $disp_value;
115 }
116 }
117
118 $optvals[] = array(
119 'name' => 'sent_subfolders_base',
120 'caption' => _("Base Sent Folder"),
121 'type' => SMOPT_TYPE_STRLIST,
122 'refresh' => SMOPT_REFRESH_FOLDERLIST,
123 'posvals' => $sent_subfolders_base_values
124 );
125
126 /* Add our option data to the global array. */
127 $optpage_data['grps'][SMOPT_GRP_SENT_SUBFOLDERS] = $optgrp;
128 $optpage_data['vals'][SMOPT_GRP_SENT_SUBFOLDERS] = $optvals;
129}
130
131function save_option_sent_subfolders_setting($option) {
132 global $data_dir, $username, $use_sent_subfolders;
133
134 /* Set use_sent_subfolders as either on or off. */
135 if ($option->new_value == SMPREF_SENT_SUBFOLDERS_DISABLED) {
136 setPref($data_dir, $username, 'use_sent_subfolders', SMPREF_OFF);
137 } else {
138 setPref($data_dir, $username, 'use_sent_subfolders', SMPREF_ON);
139 setPref($data_dir, $username, 'move_to_sent', SMPREF_ON);
140 }
141
142 /* Now just save the option as normal. */
143 save_option($option);
144}
145
146function sent_subfolders_update_sentfolder() {
147 global $sent_folder, $delimiter, $auto_create_special, $auto_create_done;
148 global $sent_subfolders_base, $sent_subfolders_setting;
149 global $username, $data_dir, $key, $imapServerAddress, $imapPort;
64727b20 150 global $use_sent_subfolders, $move_to_sent, $imap_server_type;
d79e01f5 151
1c52ba77 152 if ($use_sent_subfolders || $move_to_sent) {
a3439b27 153 $year = date('Y');
154 $month = date('m');
155 $quarter = sent_subfolder_getQuarter($month);
156
1c52ba77 157 /*
158 Regarding the structure we've got three main possibilities.
159 One sent holder. level 0.
160 Multiple year holders with messages in it. level 1.
161 Multiple year folders with holders in it. level 2.
162 */
4965e012 163/*
72b9aff9 164 if( $imap_server_type == 'uw' ) {
165 $cnd_delimiter = '';
166 } else {
167 $cnd_delimiter = $delimiter;
168 }
4965e012 169*/
170 $cnd_delimiter = $delimiter;
72b9aff9 171
a3439b27 172 switch ($sent_subfolders_setting) {
1c52ba77 173 case SMPREF_SENT_SUBFOLDERS_YEARLY:
174 $level = 1;
72b9aff9 175 $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
1c52ba77 176 . $year;
1c52ba77 177 break;
178 case SMPREF_SENT_SUBFOLDERS_QUARTERLY:
179 $level = 2;
72b9aff9 180 $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
1c52ba77 181 . $year
182 . $delimiter . $quarter;
183 $year_folder = $sent_subfolders_base
a3add160 184 . $year;
1c52ba77 185 break;
186 case SMPREF_SENT_SUBFOLDERS_MONTHLY:
187 $level = 2;
72b9aff9 188 $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
1c52ba77 189 . $year
190 . $delimiter . $month;
a3add160 191 $year_folder = $sent_subfolders_base . $year;
1c52ba77 192 break;
193 case SMPREF_SENT_SUBFOLDERS_DISABLED:
194 default:
195 $level = 0;
196 $sent_subfolder = $sent_folder;
197 $year_folder = $sent_folder;
a3439b27 198 }
199
200 /* If this folder is NOT the current sent folder, update stuff. */
201 if ($sent_subfolder != $sent_folder) {
202 /* First, update the sent folder. */
1c52ba77 203
a3439b27 204 setPref($data_dir, $username, 'sent_folder', $sent_subfolder);
205 setPref($data_dir, $username, 'move_to_sent', SMPREF_ON);
206 $sent_folder = $sent_subfolder;
207 $move_to_sent = SMPREF_ON;
208
209 /* Auto-create folders, if they do not yet exist. */
210 if ($sent_folder != 'none') {
211 /* Create the imap connection. */
212 $ic = sqimap_login
213 ($username, $key, $imapServerAddress, $imapPort, 10);
d79e01f5 214
a3439b27 215 /* Auto-create the year folder, if it does not yet exist. */
216 if (!sqimap_mailbox_exists($ic, $year_folder)) {
1c52ba77 217 sqimap_mailbox_create($ic, $year_folder, ($level==1)?'':'noselect');
a3439b27 218 } else if (!sqimap_mailbox_is_subscribed($ic, $year_folder)) {
219 sqimap_subscribe($ic, $year_folder);
220 }
d79e01f5 221
a3439b27 222 /* Auto-create the subfolder, if it does not yet exist. */
223 if (!sqimap_mailbox_exists($ic, $sent_folder)) {
224 sqimap_mailbox_create($ic, $sent_folder, '');
1c52ba77 225 } else if (!sqimap_mailbox_is_subscribed($ic, $sent_subfolder)) {
226 sqimap_subscribe($ic, $sent_subfolder);
a3439b27 227 }
228
229 /* Close the imap connection. */
230 sqimap_logout($ic);
231 }
232 }
233 }
234}
235
236function sent_subfolder_getQuarter($month) {
237 switch ($month) {
238 case '01':
239 case '02':
d79e01f5 240 case '03':
241 $result = '1';
242 break;
a3439b27 243 case '04':
244 case '05':
d79e01f5 245 case '06':
246 $result = '2';
247 break;
a3439b27 248 case '07':
249 case '08':
d79e01f5 250 case '09':
251 $result = '3';
252 break;
a3439b27 253 case '10':
254 case '11':
d79e01f5 255 case '12':
256 $result = '4';
257 break;
258 default:
259 $result = 'ERR';
a3439b27 260 }
261
262 /* Return the current quarter. */
263 return ('Q' . $result);
264}
265
266?>