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;
}
|