/usr/bin/turba-import-squirrelmail-sql-abook is in php-horde-turba 4.2.2-3.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
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 | #!/usr/bin/php
<?php
/**
* This script imports SquirrelMail database addressbooks into Turba.
*
* The first argument must be a DSN to the database containing the "address"
* table, e.g.: "mysql://root:password@localhost/squirrelmail".
*
* Copyright 2008-2014 Horde LLC (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/apache.
*
* @author Ben Chavet <ben@horde.org>
* @author Jan Schneider <jan@horde.org>
*/
if (file_exists(__DIR__ . '/../../turba/lib/Application.php')) {
$baseDir = __DIR__ . '/../';
} else {
require_once 'PEAR/Config.php';
$baseDir = PEAR_Config::singleton()
->get('horde_dir', null, 'pear.horde.org') . '/turba/';
}
require_once $baseDir . 'lib/Application.php';
Horde_Registry::appInit('turba', array('cli' => true, 'user_admin' => true));
// Read command line parameters.
if ($argc != 2) {
$cli->message('Too many or too few parameters.', 'cli.error');
$cli->writeln('Usage: turba-import-squirrelmail-sql-abook DSN');
$cli->writeln($cli->indent('DSN are json-encoded connection parameters to the database containing the "userprefs" table. Example:'));
$cli->writeln($cli->indent('{"adapter":"mysql","user":"root","password":"password","host":"localhost","database":"squirrelmail"}'));
exit;
}
$db = $injector->getInstance('Horde_Db')->createDb(json_decode($argv[1]));
include TURBA_BASE . '/config/backends.php';
// Loop through SquirrelMail address books.
$handle = $db->select('SELECT owner, nickname, firstname, lastname, email, label FROM address ORDER BY owner');
$turba_shares = $GLOBALS['injector']->getInstance('Turba_Shares');
$user = null;
$count = 0;
foreach ($handle as $row) {
// Set current user
if ($row['owner'] != $user) {
if (!is_null($user)) {
$cli->message(' Added ' . $count . ' contacts', 'cli.success');
$count = 0;
}
$user = $row['owner'];
$registry->setAuth($user, array());
$cli->message('Importing ' . $user . '\'s address book');
// Reset user prefs
$prefs = $injector->getInstance('Horde_Core_Factory_Prefs')->create('turba', array(
'cache' => false,
'user' => $user
));
// Reset $cfgSources for current user.
unset($cfgSources);
$hasShares = false;
foreach ($cfgSources as $key => $cfg) {
if (!empty($cfg['use_shares'])) {
$has_share = true;
break;
}
}
if ($has_share) {
$cfgSources = Turba::getConfigFromShares($cfgSources);
}
$cfgSources = Turba::permissionsFilter($cfgSources);
if (!count($cfgSources)) {
$cli->message('No address book available for ' . $user, 'cli.error');
continue;
}
// 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])) {
$cli->message(' ' . sprintf(_("Invalid address book: %s"), $import_source), 'cli.error');
continue;
}
// Initiate driver
try {
$driver = $injector->getInstance('Turba_Factory_Driver')->create($import_source);
} catch (Turba_Exception $e) {
$cli->message(' ' . sprintf(_("Connection failed: %s"), $e->getMessage()), 'cli.error');
continue;
}
}
if (!count($cfgSources)) {
continue;
}
$rfc822 = new Horde_Mail_Rfc822();
$members = $rfc822->parseAddressList($row['email']);
if (count($members) > 1) {
// Entry is a list of contacts, import each individually and create a
// group that contains them.
$attributes = array('alias' => $row['nickname'],
'firstname' => $row['firstname'],
'lastname' => $row['lastname'],
'notes' => $row['label']);
$gid = $driver->add($attributes);
$group = new Turba_Object_Group($driver, array_merge($attributes, array('__key' => $gid)));
++$count;
foreach (array_map('strval', $members) as $member) {
try {
$result = $driver->add(array(
'firstname' => $member,
'email' => $member
));
$group->addMember($result, $import_source);
++$count;
} catch (Turba_Exception $e) {
$cli->message(' ' . $e->getMessage(), 'cli.error');
}
}
$group->store();
} else {
// Entry only contains one contact, import it.
$contact = array(
'alias' => $row['nickname'],
'firstname' => $row['firstname'],
'lastname' => $row['lastname'],
'email' => $row['email'],
'notes' => $row['label']
);
try {
$driver->add($contact);
++$count;
} catch (Turba_Exception $e) {
$cli->message(' ' . $e->getMessage(), 'cli.error');
}
}
}
$cli->message(' Added ' . $count . ' contacts', 'cli.success');
|