File: import_squirrelmail_abook.php

package info (click to toggle)
turba2 2.2.1-2
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 7,332 kB
  • ctags: 2,927
  • sloc: php: 11,046; xml: 1,690; sql: 507; makefile: 62; perl: 17; sh: 1
file content (170 lines) | stat: -rwxr-xr-x 6,285 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#!/usr/bin/php
<?php
/**
 * This script imports SquirrelMail file-based addressbooks into Turba.
 * It was developed against SquirrelMail 1.4.0, so use at your own risk
 * against different versions.
 *
 * Input can be either a single squirrelmail .abook file, or a directory
 * containing multiple .abook files.
 *
 * $Horde: turba/scripts/import_squirrelmail_abook.php,v 1.5.2.2 2008/01/02 11:32:40 jan Exp $
 *
 * Copyright 2007-2008 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file LICENSE for license information (ASL).  If you
 * did not receive this file, see http://www.horde.org/licenses/asl.php.
 *
 * @author Ben Chavet <ben@horde.org>
 */

@define('AUTH_HANDLER', true);
@define('HORDE_BASE', dirname(__FILE__) . '/../..');
@define('TURBA_BASE', dirname(__FILE__) . '/..');

// Do CLI checks and environment setup first.
require_once HORDE_BASE . '/lib/core.php';
require_once 'Horde/CLI.php';

// Makre sure no one runs this from the web.
if (!Horde_CLI::runningFromCli()) {
    exit("Must be run from the command line\n");
}

// Load the CLI environment - make sure there's no time limit, init some
// variables, etc.
$cli = &Horde_CLI::singleton();
$cli->init();

// Read command line parameters.
if (count($argv) != 2) {
    $cli->message('Too many or too few parameters.', 'cli.error');
    usage();
}
$data = $argv[1];

// Make sure we load Horde base to get the auth config
require_once HORDE_BASE . '/lib/base.php';
if ($conf['auth']['admins']) {
    $auth = Auth::singleton($conf['auth']['driver']);
    $auth->setAuth($conf['auth']['admins'][0], array());
}

// Now that we are authenticated, we can load Turba's base. Otherwise,
// the share code breaks, causing a new, completely empty share to be
// created on the DataTree with no owner.
require_once TURBA_BASE . '/lib/base.php';
require_once TURBA_BASE . '/lib/Object/Group.php';

// Get list of SquirrelMail address book files
if (is_dir($data)) {
    $files = array();
    if ($handle = opendir($data)) {
        while (false !== ($file = readdir($handle))) {
            if (preg_match('/.abook$/', $file)) {
                $files[] = $data . '/' . $file;
            }
        }
        closedir($handle);
    } else {
        exit;
    }
} else {
    $files = array($data);
}

// Loop through SquirrelMail address book files
$auth = &Auth::singleton($conf['auth']['driver']);
foreach($files as $file) {
    if ($handle = fopen($file, 'r')) {

        // Set current user
        $user = substr(basename($file), 0, -6);
        $auth->setAuth($user, array());
        $cli->message('Importing ' . $user . '\'s address book');

        // Reset user prefs
        unset($prefs);
        $prefs = &Prefs::factory($conf['prefs']['driver'], 'turba', $user, null, null, false);

        // Reset $cfgSources for current user.
        unset($cfgSources);
        include TURBA_BASE . '/config/sources.php';
        $cfgSources = Turba::getConfigFromShares($cfgSources);
        $cfgSources = Turba::permissionsFilter($cfgSources);

        // Get user's default addressbook
        $import_source = $prefs->getValue('default_dir');
        if (empty($import_source)) {
            $import_source = array_keys($cfgSources);
            $import_source = $import_source[0];
        }

        // Check existance of the specified source.
        if (!isset($cfgSources[$import_source])) {
            PEAR::raiseError(sprintf(_("Invalid address book: %s"), $import_source), 'horde.warning');
            continue;
        }

        // Initiate driver
        $driver = &Turba_Driver::singleton($import_source);
        if (is_a($driver, 'PEAR_Error')) {
            PEAR::raiseError(sprintf(_("Connection failed: %s"), $driver->getMessage()), 'horde.error', null, null, $import_source);
            continue;
        }

        // Read addressbook file, one line at a time
        while (!feof($handle)) {
            $buffer = fgets($handle);
            if (!empty($buffer)) {
                $entry = explode('|', $buffer);
                $members = explode(',', $entry[3]);

                if (count($members) > 1) {
                    // entry is a list of contacts, import each individually
                    // and create a group that contains them.
                    $attributes = array('alias' => $entry[0],
                                        'firstname' => $entry[1],
                                        'lastname' => $entry[2],
                                        'notes' => $entry[4]);
                    $gid = $driver->add($attributes);
                    $group = new Turba_Object_Group($driver, array_merge($attributes, array('__key' => $gid)));
                    foreach ($members as $member) {
                        $result = $driver->add(array('firstname' => $member, 'email' => $member));
                        if ($result && !is_a($result, 'PEAR_Error')) {
                            $added = $group->addMember($result, $import_source);
                            if (is_a($added, 'PEAR_Error')) {
                                $cli->message('  ' . $added->getMessage(), 'cli.error');
                            } else {
                                $cli->message('  Added ' . $member, 'cli.success');
                            }
                        }
                    }
                    $group->store();
                } else {
                    // entry only contains one contact, import it
                    $contact = array('alias' => $entry[0],
                                     'firstname' => $entry[1],
                                     'lastname' => $entry[2],
                                     'email' => $entry[3],
                                     'notes' => $entry[4]);
                    $added = $driver->add($contact);
                    if (is_a($added, 'PEAR_Error')) {
                        $cli->message('  ' . $added->getMessage(), 'cli.error');
                    } else {
                        $cli->message('  Added ' . $entry[3], 'cli.success');
                    }
                }

            }
        }

        fclose($handle);
    }
}

function usage()
{
    $GLOBALS['cli']->writeln('Usage: import_squirrelmail_abook.php path-to-squirrelmail-data');
    exit;
}