#!C:\Program Files (x86)\Plesk\Additional\PleskPHP74\\php.exe
<?php
/**
 * This script will delete all user data for a given user.
 *
 * Copyright 2013-2017 Horde LLC (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL-2). If you
 * did not receive this file, see http://www.horde.org/licenses/lgpl.
 *
 * @author    Michael Slusarz <slusarz@horde.org>
 * @category  Horde
 * @copyright 2013-2017 Horde LLC
 * @license   http://www.horde.org/licenses/lgpl LGPL-2
 * @package   Horde
 */

$baseFile = __DIR__ . '/../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(
    'authentication' => 'none',
    'cli' => true,
    'user_admin' => true
));

$usage = <<<USAGE
Remove user data from Horde database

  horde-remove-user-data [options] [user...]

If no user is specified on command line, the user is prompted for one.
Then a prompt for the Horde application is displayed.

If at least one user is specified on command line, the data for
all Horde applications is remove for all specified users.
USAGE;

// Parse command line arguments.
$parser = new Horde_Argv_Parser(
    array(
        'usage' => $usage,
        'optionList' => array(
            new Horde_Argv_Option('-c', '--continue', array(
                'action' => 'store_true',
                'help' => 'Continue with next user on failure',
                'dest' => 'continue'
            )),
            new Horde_Argv_Option('-f', '--force', array(
                'action' => 'store_true',
                'help' => 'Force removing without prompt',
                'dest' => 'force'
            )),
        )
    )
);
list($options, $argv) = $parser->parseArgs();

/* null = all; particular app otherwise */
$app = null;

if (!count($argv)) {
    $cli->message('Horde directory: ' . realpath(HORDE_BASE), 'cli.message');

    do {
        $user = $cli->prompt('Username:');
    } while (!strlen($user));

    $argv = array($user);
    $app = $cli->prompt('Application to remove data from (blank for all apps):');
    if (!strlen($app)) {
        $app = null;
    }

    $cli->writeln();
}

if (!$options->force) {
    $cli->writeln($cli->red('Removing data of user(s)') . ':');
    $cli->writeln('  ' . implode(', ', $argv));
    $cli->writeln();

    if ($cli->prompt($cli->red('Are you sure you want to remove user data?'), array('y' => 'Yes', 'n' => 'No'), 'n') != 'y') {
        exit(0);
    }
}

foreach ($argv as $user) {
    try {
        $registry->removeUserData($user, $app);
        $cli->message($user . ': Data removed.', 'cli.success');
    } catch (Horde_Exception $e) {
        if ($options->continue) {
            $cli->message($user . ': Data NOT removed completely. ' . $e->getMessage() , 'cli.error');
        } else {
            $cli->fatal($user . ': Data NOT removed completely. ' . $e->getMessage());
        }
    }
}
