Files
server/usr/share/psa-pear/pear/horde-prefs
2026-01-07 20:52:11 +01:00

193 lines
5.1 KiB
PHP
Executable File

#!/usr/bin/env php
<?php
/**
* Horde Preferences toolkit.
*
* Usage: horde-prefs CONFIG USER (list|print|export|import) [[SCOPE] [FILE]]
*
* The CONFIG file needs to provide the complete configuration for the
* preferences storage backend.
*
* This is an example for the file based storage backend:
*
* <pre>
* <?php
* $conf['driver'] = 'File';
* $conf['params']['directory'] = '/var/www/data/horde/prefs';
* </pre>
*
* The following example is the necessary setup for a SQL database:
*
* <pre>
* <?php
* $conf['driver'] = 'Sql';
* $conf['params']['db'] = new Horde_Db_Adapter_Mysql(
* array(
* 'persistent' => false,
* 'username' => 'root',
* 'password' => 'PASSWORD',
* 'socket' => '/var/run/mysqld/mysqld.sock',
* 'protocol' => 'unix',
* 'database' => 'horde',
* 'charset' => 'utf-8',
* 'ssl' => true,
* 'splitread' => false,
* 'phptype' => 'mysql',
* )
* );
* </pre>
*
* Configuring for the Kolab storage backend is more complex:
*
* <pre>
* <?php
* $conf['driver'] = 'KolabImap';
* $factory = new Horde_Kolab_Storage_Factory(
* array(
* 'driver' => 'horde',
* 'params' => array(
* 'host' => 'example.org',
* 'username' => 'user@example.org',
* 'password' => 'test',
* 'port' => 993,
* 'secure' => true
* ),
* 'queryset' => array(
* 'list' => array('queryset' => 'horde'),
* 'data' => array('queryset' => 'horde'),
* ),
* 'cache' => new Horde_Cache(new Horde_Cache_Storage_Mock()),
* //'logger' => new Horde_Log_Logger(new Horde_Log_Handler_Stream(STDOUT)),
* )
* );
* $conf['params']['kolab'] = $factory->create();
* </pre>
*
*
* Copyright 2011-2017 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.horde.org/licenses/lgpl21.
*
* @author Gunnar Wrobel <wrobel@horde.org>
*/
if (strpos('@php_dir@', '@php_dir') === 0) {
set_include_path(__DIR__ . '/../../../lib' . PATH_SEPARATOR . get_include_path());
}
@include 'Horde/Autoloader/Default.php';
if (!class_exists('Horde_Autoloader_Default')) {
die('The "Horde_Autoloader" PEAR package is unavailable. Install it with "pear install Horde_Autoloader" first!' . "\n");
}
$args = $_SERVER['argv'];
array_shift($args);
if (empty($args) || empty($args[0])) {
die('You must specify a path to the configuration file as the first argument!' . "\n");
}
@include realpath($args[0]);
if (empty($conf)) {
die(sprintf('%s did not provide the expected "$conf" configuration array!', $args[0]) . "\n");
}
if (!isset($conf['driver'])) {
die(sprintf('%s did not provide the expected driver configuration ($conf[\'driver\'])!', $args[0]) . "\n");
}
$storage_class = 'Horde_Prefs_Storage_' . Horde_String::ucfirst($conf['driver']);
if (empty($args[1])) {
die('You must specify a the id of the user you want to work with as second argument!' . "\n");
}
$storage = new $storage_class($args[1], $conf['params']);
if (empty($args[2])) {
die('You must specify the action to perform as third argument (one of list, print, export, write)!' . "\n");
}
class ScopeExporter
{
public $scope;
public $data;
public function __construct($scope)
{
$this->scope = $scope;
}
public function set($name, $val)
{
$this->data[$name] = $val;
}
}
class ScopeImporter
{
public $scope;
public $data;
public function __construct($scope, $data)
{
$this->scope = $scope;
$this->data = $data;
}
public function getDirty()
{
return array_keys($this->data);
}
public function get($name)
{
return $this->data[$name];
}
}
switch ($args[2]) {
case 'list':
foreach ($storage->listScopes() as $scope) {
print $scope . "\n";
}
break;
case 'print':
if (empty($args[3])) {
die('You must specify the scope to act upon as fourth argument!' . "\n");
}
$scope = new ScopeExporter($args[3]);
$storage->get($scope);
foreach ($scope->data as $name => $val) {
print $name . ": " . $val . "\n";
}
break;
case 'export':
if (empty($args[3])) {
die('You must specify the scope to act upon as fourth argument!' . "\n");
}
$scope = new ScopeExporter($args[3]);
$storage->get($scope);
if (empty($args[4])) {
die('You must specify the file to export to as fifth argument!' . "\n");
}
file_put_contents($args[4], serialize($scope->data));
break;
case 'import':
if (empty($args[3])) {
die('You must specify the scope to act upon as fourth argument!' . "\n");
}
if (empty($args[4])) {
die('You must specify the file to import to as fifth argument!' . "\n");
}
$data = unserialize(file_get_contents($args[4]));
if ($data) {
$scope = new ScopeImporter($args[3], $data);
$storage->store($scope);
} else {
die(sprintf('Failed importing preference data from %s!', $args[4]) . "\n");
}
break;
}