~ubuntu-branches/ubuntu/hardy/squirrelmail/hardy-updates

« back to all changes in this revision

Viewing changes to plugins/sent_subfolders/setup.php

  • Committer: Bazaar Package Importer
  • Author(s): Sam Johnston
  • Date: 2004-02-04 01:42:12 UTC
  • Revision ID: james.westby@ubuntu.com-20040204014212-ek9533qvd2vo1wa1
Tags: upstream-1.5.0
ImportĀ upstreamĀ versionĀ 1.5.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
 
 
3
/**
 
4
 * setup.php -- Sent Subfolders Setup File
 
5
 *
 
6
 * Copyright (c) 1999-2003 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: setup.php,v 1.16 2004/01/04 12:08:45 tokul Exp $
 
12
 * @package plugins
 
13
 * @subpackage sent_subfolders
 
14
 */
 
15
 
 
16
/** 
 
17
 * 
 
18
 */
 
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');
 
24
 
 
25
/**
 
26
 * Adds plugin to squirrelmail hooks
 
27
 */
 
28
function squirrelmail_plugin_init_sent_subfolders() {
 
29
    /* Standard initialization API. */
 
30
    global $squirrelmail_plugin_hooks;
 
31
 
 
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';
 
36
 
 
37
    /* The hooks to automatically update sent subfolders. */
 
38
    $squirrelmail_plugin_hooks
 
39
    ['left_main_before']['sent_subfolders'] =
 
40
        'sent_subfolders_update_sentfolder';
 
41
 
 
42
    $squirrelmail_plugin_hooks
 
43
    ['compose_send']['sent_subfolders'] =
 
44
        'sent_subfolders_update_sentfolder';
 
45
 
 
46
    /* The hook to load the sent subfolders prefs. */
 
47
    $squirrelmail_plugin_hooks
 
48
    ['loading_prefs']['sent_subfolders'] =
 
49
        'sent_subfolders_load_prefs';
 
50
 
 
51
    /* The hooks to handle sent subfolders options. */
 
52
    $squirrelmail_plugin_hooks
 
53
    ['optpage_loadhook_folder']['sent_subfolders'] =
 
54
        'sent_subfolders_optpage_loadhook_folders';
 
55
 
 
56
    /* mark base sent folder as special mailbox */
 
57
    $squirrelmail_plugin_hooks
 
58
    ['special_mailbox']['sent_subfolders'] = 
 
59
        'sent_subfolders_special_mailbox';
 
60
}
 
61
 
 
62
function sent_subfolders_check_handleAsSent() {
 
63
    global $handleAsSent_result, $sent_subfolders_base,
 
64
           $use_sent_subfolders;
 
65
 
 
66
    $sent_subfolders_base = 'INBOX.Sent';
 
67
    $args = func_get_arg(0);
 
68
    sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION);
 
69
 
 
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));
 
75
 
 
76
        /* Perform the comparison. */
 
77
        $handleAsSent_result =
 
78
            ( $handleAsSent_result
 
79
            || ($base_str == $mbox_str)
 
80
            || ($sent_subfolders_base == $args[1])
 
81
            );
 
82
    }
 
83
}
 
84
 
 
85
/**
 
86
 * Loads sent_subfolders settings
 
87
 */
 
88
function sent_subfolders_load_prefs() {
 
89
    global $use_sent_subfolders, $data_dir, $username,
 
90
           $sent_subfolders_setting, $sent_subfolders_base;
 
91
 
 
92
    $use_sent_subfolders = getPref
 
93
    ($data_dir, $username, 'use_sent_subfolders', SMPREF_OFF);
 
94
 
 
95
    $sent_subfolders_setting = getPref
 
96
    ($data_dir, $username, 'sent_subfolders_setting', SMPREF_SENT_SUBFOLDERS_DISABLED);
 
97
 
 
98
    $sent_subfolders_base = getPref
 
99
    ($data_dir, $username, 'sent_subfolders_base', SMPREF_NONE);
 
100
}
 
101
 
 
102
/**
 
103
 * Adds sent_subfolders options in folder preferences
 
104
 */
 
105
function sent_subfolders_optpage_loadhook_folders() {
 
106
    global $optpage_data, $imapServerAddress, $imapPort;
 
107
 
 
108
    sqgetGlobalVar('username', $username, SQ_SESSION);
 
109
    sqgetGlobalVar('key', $key, SQ_COOKIE);
 
110
 
 
111
    /* Get some imap data we need later. */
 
112
    $imapConnection =
 
113
        sqimap_login($username, $key, $imapServerAddress, $imapPort, 0);
 
114
    $boxes = sqimap_mailbox_list($imapConnection);
 
115
    sqimap_logout($imapConnection);
 
116
 
 
117
    /* Load the Sent Subfolder Options into an array. */
 
118
    $optgrp = _("Sent Subfolders Options");
 
119
    $optvals = array();
 
120
 
 
121
    $optvals[] = array(
 
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'
 
131
    );
 
132
 
 
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(' ', '&nbsp;', $folder['formatted']);
 
138
            $sent_subfolders_base_values[$real_value] = $disp_value;
 
139
        }
 
140
    }
 
141
 
 
142
    $optvals[] = array(
 
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
 
148
    );
 
149
 
 
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;
 
153
}
 
154
 
 
155
/**
 
156
 * Saves sent_subfolder_options
 
157
 */
 
158
function save_option_sent_subfolders_setting($option) {
 
159
    global $data_dir, $username, $use_sent_subfolders;
 
160
 
 
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);
 
164
    } else {
 
165
        setPref($data_dir, $username, 'use_sent_subfolders', SMPREF_ON);
 
166
        setPref($data_dir, $username, 'move_to_sent', SMPREF_ON);
 
167
    }
 
168
 
 
169
    /* Now just save the option as normal. */
 
170
    save_option($option);
 
171
}
 
172
 
 
173
/**
 
174
 * Update sent_subfolders settings
 
175
 *
 
176
 * function updates default sent folder value and 
 
177
 * creates required imap folders
 
178
 */
 
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;
 
184
 
 
185
    sqgetGlobalVar('username', $username, SQ_SESSION);
 
186
    sqgetGlobalVar('key', $key, SQ_COOKIE);
 
187
    sqgetGlobalVar('delimiter', $delimiter, SQ_SESSION);
 
188
    
 
189
    if ($use_sent_subfolders || $move_to_sent) {
 
190
        $year = date('Y');
 
191
        $month = date('m');
 
192
        $quarter = sent_subfolder_getQuarter($month);
 
193
 
 
194
        /*
 
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.
 
199
        */
 
200
/*
 
201
        if( $imap_server_type == 'uw' ) {
 
202
            $cnd_delimiter = '';
 
203
        } else {
 
204
            $cnd_delimiter = $delimiter;
 
205
        }
 
206
*/        
 
207
        $cnd_delimiter = $delimiter;
 
208
                                        
 
209
        switch ($sent_subfolders_setting) {
 
210
        case SMPREF_SENT_SUBFOLDERS_YEARLY:
 
211
            $level = 1;
 
212
            $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
 
213
                            . $year;
 
214
            break;
 
215
        case SMPREF_SENT_SUBFOLDERS_QUARTERLY:
 
216
            $level = 2;
 
217
            $sent_subfolder = $sent_subfolders_base . $cnd_delimiter 
 
218
                            . $year
 
219
                            . $delimiter . $quarter;
 
220
            $year_folder = $sent_subfolders_base
 
221
                            . $year;
 
222
            break;
 
223
        case SMPREF_SENT_SUBFOLDERS_MONTHLY:
 
224
            $level = 2;
 
225
            $sent_subfolder = $sent_subfolders_base . $cnd_delimiter
 
226
                            . $year
 
227
                            . $delimiter . $month;
 
228
            $year_folder = $sent_subfolders_base . $year;
 
229
            break;
 
230
        case SMPREF_SENT_SUBFOLDERS_DISABLED:
 
231
        default:
 
232
            $level = 0;
 
233
            $sent_subfolder = $sent_folder;
 
234
            $year_folder = $sent_folder;
 
235
        }
 
236
 
 
237
        /* If this folder is NOT the current sent folder, update stuff. */
 
238
        if ($sent_subfolder != $sent_folder) {
 
239
            /* First, update the sent folder. */
 
240
 
 
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;
 
245
 
 
246
            /* Auto-create folders, if they do not yet exist. */
 
247
            if ($sent_folder != 'none') {
 
248
                /* Create the imap connection. */
 
249
                $ic = sqimap_login
 
250
                ($username, $key, $imapServerAddress, $imapPort, 10);
 
251
 
 
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);
 
257
                }
 
258
 
 
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);
 
264
                }
 
265
 
 
266
                /* Close the imap connection. */
 
267
                sqimap_logout($ic);
 
268
            }
 
269
        }
 
270
    }
 
271
}
 
272
 
 
273
/**
 
274
 * Sets quarter subfolder names
 
275
 *
 
276
 * @param string $month numeric month
 
277
 * @return string quarter name (Q + number)
 
278
 */
 
279
function sent_subfolder_getQuarter($month) {
 
280
    switch ($month) {
 
281
        case '01':
 
282
        case '02':
 
283
        case '03':
 
284
            $result = '1';
 
285
            break;
 
286
        case '04':
 
287
        case '05':
 
288
        case '06':
 
289
            $result = '2';
 
290
            break;
 
291
        case '07':
 
292
        case '08':
 
293
        case '09':
 
294
            $result = '3';
 
295
            break;
 
296
        case '10':
 
297
        case '11':
 
298
        case '12':
 
299
            $result = '4';
 
300
            break;
 
301
        default:
 
302
            $result = 'ERR';
 
303
    }
 
304
 
 
305
    /* Return the current quarter. */
 
306
    return ('Q' . $result);
 
307
}
 
308
 
 
309
/**
 
310
 * detects if mailbox is part of sent_subfolders
 
311
 *
 
312
 * @param string $mb imap folder name
 
313
 * @return boolean 1 - is part of sent_subfolders, 0 - is not part of sent_subfolders
 
314
 */
 
315
function sent_subfolders_special_mailbox($mb) {
 
316
    global $data_dir, $username;
 
317
 
 
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');
 
321
 
 
322
    if ($use_sent_subfolders == SMPREF_ON && 
 
323
    ($mb == $sent_subfolders_base || stristr($mb,$sent_subfolders_base) ) ) {
 
324
        return 1;
 
325
    }
 
326
    return 0;
 
327
}
 
328
?>