#!/usr/bin/env php
<?php
/**
 * A script to migrate groups from the Horde_DataTree backend to the new
 * (Horde 3.2+) native SQL Group backend.
 */

$baseFile = dirname(__FILE__) . '/../../lib/Application.php';
if (file_exists($baseFile)) {
    require_once $baseFile;
} else {
    require_once 'PEAR/Config.php';
    require_once PEAR_Config::singleton()
        ->get('horde_dir', null, 'pear.horde.org') . '/lib/Application.php';
}
Horde_Registry::appInit('horde', array('cli' => true));

$group_query = '
INSERT INTO
    horde_groups (group_uid, group_name, group_parents, group_email)
VALUES
    (?, ?, ?, ?)
';

$member_query = '
INSERT INTO
    horde_groups_members (group_uid, user_uid)
VALUES
    (?, ?)
';

$db = $injector->getInstance('Horde_Db_Adapter');
$dt = Horde_DataTree::factory($conf['datatree']['driver'], array('group' => 'horde.groups'));

foreach ($dt->get(DATATREE_FORMAT_FLAT) as $id => $name) {
    if ($id == -1) {
        continue;
    }

    echo $id . "\n";

    $object = $dt->getObjectById($id);
    $parents = $dt->getParentList($id);
    asort($parents);
    $parents = implode(':', array_keys($parents));

    $params = array($id,
                    Horde_String::convertCharset($object->name, 'UTF-8', $conf['sql']['charset']),
                    Horde_String::convertCharset($parents, 'UTF-8', $conf['sql']['charset']),
                    Horde_String::convertCharset($object->get('email'), 'UTF-8', $conf['sql']['charset']),
    );

    try {
        $db->insert($group_query, $params);
    } catch (Horde_Exception $e) {
        echo $e->getMessage();
        continue;
    }

    foreach ($dt->getAttributes($id) as $attribute) {
        if ($attribute['name'] != 'user') {
            continue;
        }
        $params = array($id, $attribute['key']);
        try {
            $db->insert($member_query, $params);
        } catch (Horde_Exception $e) {
            echo $e->getMessage();
        }
    }
}

echo "\nDone.\n";
