mirror of
https://github.com/EGroupware/egroupware.git
synced 2025-01-24 06:49:16 +01:00
"modernized" importexport_cli a bit (removed uneccessary stuff) and added PEAR Console_Getopt dependency
This commit is contained in:
parent
2302de28f2
commit
884da4b664
@ -1,167 +1,159 @@
|
|||||||
#!/usr/bin/php -q
|
#!/usr/bin/php -q
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* eGroupWare - importexport
|
* EGroupware - importexport
|
||||||
*
|
*
|
||||||
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||||
* @package importexport
|
* @package importexport
|
||||||
* @link http://www.egroupware.org
|
* @link http://www.egroupware.org
|
||||||
* @author Cornelius Weiss <nelius@cwtech.de>
|
* @author Cornelius Weiss <nelius@cwtech.de>
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$path_to_egroupware = realpath(dirname(__FILE__).'/..');
|
|
||||||
|
|
||||||
$usage = "usage:
|
|
||||||
--definition <name of definition> Name of definition
|
|
||||||
--file <name of file> File to import / for export
|
|
||||||
--user <eGW username> eGroupWare username for action
|
|
||||||
--password <password for user> users password
|
|
||||||
--domain <domain name> eGroupWare domain
|
|
||||||
--dry-run no real action, just console output
|
|
||||||
\n";
|
|
||||||
|
|
||||||
if (php_sapi_name() != 'cli') {
|
|
||||||
die('This script only runs form command line');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Include PEAR::Console_Getopt
|
|
||||||
require_once 'Console/Getopt.php';
|
|
||||||
|
|
||||||
// Define exit codes for errors
|
|
||||||
define('HEADER_NOT_FOUND',9);
|
|
||||||
define('NO_ARGS',10);
|
|
||||||
define('INVALID_OPTION',11);
|
|
||||||
|
|
||||||
// Reading the incoming arguments - same as $argv
|
|
||||||
$args = Console_Getopt::readPHPArgv();
|
|
||||||
|
|
||||||
// Make sure we got them (for non CLI binaries)
|
|
||||||
if (PEAR::isError($args)) {
|
|
||||||
fwrite(STDERR,"importexport_cli: ".$args->getMessage()."\n".$usage);
|
|
||||||
exit(NO_ARGS);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Short options
|
|
||||||
$short_opts = 'f:d:';
|
|
||||||
|
|
||||||
// Long options
|
|
||||||
$long_opts = array(
|
|
||||||
'definition=',
|
|
||||||
'file=',
|
|
||||||
'user=',
|
|
||||||
'password=',
|
|
||||||
'domain=',
|
|
||||||
'dry-run',
|
|
||||||
);
|
|
||||||
|
|
||||||
// Convert the arguments to options - check for the first argument
|
|
||||||
if ( realpath($_SERVER['argv'][0]) == __FILE__ ) {
|
|
||||||
$options = Console_Getopt::getOpt($args,$short_opts,$long_opts);
|
|
||||||
} else {
|
|
||||||
$options = Console_Getopt::getOpt2($args,$short_opts,$long_opts);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check the options are valid
|
|
||||||
if (PEAR::isError($options)) {
|
|
||||||
fwrite(STDERR,"importexport_cli: ".$options->getMessage()."\n".$usage."\n");
|
|
||||||
exit(INVALID_OPTION);
|
|
||||||
}
|
|
||||||
|
|
||||||
$domain = 'default';
|
|
||||||
$dryrun = false;
|
|
||||||
foreach ($options[0] as $option) {
|
|
||||||
switch ($option[0]) {
|
|
||||||
case '--file' :
|
|
||||||
$file = $option[1];
|
|
||||||
break;
|
|
||||||
case '--definition' :
|
|
||||||
$definition = $option[1];
|
|
||||||
break;
|
|
||||||
case '--domain' :
|
|
||||||
$domain = $option[1];
|
|
||||||
break;
|
|
||||||
case '--user' :
|
|
||||||
$user = $option[1];
|
|
||||||
break;
|
|
||||||
case '--password' :
|
|
||||||
$password = $option[1];
|
|
||||||
break;
|
|
||||||
case '--dry-run' :
|
|
||||||
$dryrun = true;
|
|
||||||
break;
|
|
||||||
default :
|
|
||||||
fwrite (STDERR,$usage."\n");
|
|
||||||
exit(INVALID_OPTION);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// check file
|
|
||||||
if ( !$user || !$password ) {
|
|
||||||
fwrite(STDERR,'importexport_cli: You have to supply a username / password'."\n".$usage);
|
|
||||||
exit(INVALID_OPTION);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Can't change domain once header is loaded
|
|
||||||
$_REQUEST['domain'] = $domain;
|
|
||||||
|
|
||||||
$GLOBALS['egw_info']['flags'] = array(
|
$path_to_egroupware = realpath(dirname(__FILE__).'/..');
|
||||||
'disable_Template_class' => True,
|
|
||||||
'noheader' => True,
|
|
||||||
'nonavbar' => True,
|
|
||||||
'currentapp' => 'importexport',
|
|
||||||
'autocreate_session_callback' => 'import_export_access',
|
|
||||||
'login' => $user . '@' . $domain,
|
|
||||||
'passwd' => $password,
|
|
||||||
'noapi' => True,
|
|
||||||
);
|
|
||||||
if (!is_readable($path_to_egroupware.'/header.inc.php'))
|
|
||||||
{
|
|
||||||
fwrite(STDERR,"importexport.php: Could not find '$path_to_egroupware/header.inc.php', exiting !!!\n");
|
|
||||||
exit(HEADER_NOT_FOUND);
|
|
||||||
}
|
|
||||||
include($path_to_egroupware.'/header.inc.php');
|
|
||||||
unset($GLOBALS['egw_info']['flags']['noapi']);
|
|
||||||
|
|
||||||
// check domain
|
$usage = "usage:
|
||||||
$db_type = $GLOBALS['egw_domain'][$domain]['db_type'];
|
--definition <name of definition> Name of definition
|
||||||
if (!isset($GLOBALS['egw_domain'][$domain]) || empty($db_type))
|
--file <name of file> File to import / for export
|
||||||
{
|
--user <eGW username> eGroupWare username for action
|
||||||
fwrite(STDERR,"importexport_cli: ". $domain. ' is not a valid domain name'."\n");
|
--password <password for user> users password
|
||||||
exit(INVALID_OPTION);
|
--domain <domain name> eGroupWare domain
|
||||||
}
|
--dry-run no real action, just console output
|
||||||
$GLOBALS['egw_info']['server']['sessions_type'] = 'db'; // no php4-sessions availible for cgi
|
\n";
|
||||||
|
|
||||||
include(EGW_API_INC.'/functions.inc.php');
|
|
||||||
|
|
||||||
// check file
|
|
||||||
if (!is_readable($file))
|
|
||||||
{
|
|
||||||
fwrite(STDERR,"importexport_cli: ". $file. ' is not readable'."\n");
|
|
||||||
exit(INVALID_OPTION);
|
|
||||||
}
|
|
||||||
|
|
||||||
$definition = new importexport_definition($definition);
|
if (php_sapi_name() != 'cli') {
|
||||||
if( $definition->get_identifier() < 1 ) {
|
die('This script only runs form command line');
|
||||||
fwrite(STDERR,"importexport_cli: Definition not found! \n");
|
}
|
||||||
exit(INVALID_OPTION);
|
|
||||||
}
|
|
||||||
|
|
||||||
$GLOBALS['egw_info']['flags']['currentapp'] = $definition->application;
|
|
||||||
|
|
||||||
$definition->plugin_options['dry_run'] = $dryrun;
|
|
||||||
$type = $definition->type;
|
|
||||||
|
|
||||||
$po = new $definition->plugin;
|
|
||||||
|
|
||||||
$resource = fopen( $file, 'r' );
|
|
||||||
$po->$type( $resource, $definition );
|
|
||||||
|
|
||||||
$GLOBALS['egw']->common->phpgw_exit();
|
if (ini_get('session.save_handler') == 'files' && !is_writable(ini_get('session.save_path')) && is_dir('/tmp') && is_writable('/tmp'))
|
||||||
|
{
|
||||||
function import_export_access(&$account)
|
ini_set('session.save_path','/tmp'); // regular users may have no rights to apache's session dir
|
||||||
{
|
}
|
||||||
$account['login'] = $GLOBALS['egw_info']['flags']['login'];
|
|
||||||
$account['passwd'] = $GLOBALS['egw_info']['flags']['passwd'];
|
// Include PEAR::Console_Getopt
|
||||||
$account['passwd_type'] = 'text';
|
require_once 'Console/Getopt.php';
|
||||||
return true;
|
|
||||||
|
// Define exit codes for errors
|
||||||
|
define('HEADER_NOT_FOUND',9);
|
||||||
|
define('NO_ARGS',10);
|
||||||
|
define('INVALID_OPTION',11);
|
||||||
|
|
||||||
|
// Reading the incoming arguments - same as $argv
|
||||||
|
$args = Console_Getopt::readPHPArgv();
|
||||||
|
|
||||||
|
// Make sure we got them (for non CLI binaries)
|
||||||
|
if (PEAR::isError($args)) {
|
||||||
|
fwrite(STDERR,"importexport_cli: ".$args->getMessage()."\n".$usage);
|
||||||
|
exit(NO_ARGS);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Short options
|
||||||
|
$short_opts = 'f:d:';
|
||||||
|
|
||||||
|
// Long options
|
||||||
|
$long_opts = array(
|
||||||
|
'definition=',
|
||||||
|
'file=',
|
||||||
|
'user=',
|
||||||
|
'password=',
|
||||||
|
'domain=',
|
||||||
|
'dry-run',
|
||||||
|
);
|
||||||
|
|
||||||
|
// Convert the arguments to options - check for the first argument
|
||||||
|
if ( realpath($_SERVER['argv'][0]) == __FILE__ ) {
|
||||||
|
$options = Console_Getopt::getOpt($args,$short_opts,$long_opts);
|
||||||
|
} else {
|
||||||
|
$options = Console_Getopt::getOpt2($args,$short_opts,$long_opts);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check the options are valid
|
||||||
|
if (PEAR::isError($options)) {
|
||||||
|
fwrite(STDERR,"importexport_cli: ".$options->getMessage()."\n".$usage."\n");
|
||||||
|
exit(INVALID_OPTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
$domain = 'default';
|
||||||
|
$dryrun = false;
|
||||||
|
foreach ($options[0] as $option) {
|
||||||
|
switch ($option[0]) {
|
||||||
|
case '--file' :
|
||||||
|
$file = $option[1];
|
||||||
|
break;
|
||||||
|
case '--definition' :
|
||||||
|
$definition = $option[1];
|
||||||
|
break;
|
||||||
|
case '--domain' :
|
||||||
|
$domain = $option[1];
|
||||||
|
break;
|
||||||
|
case '--user' :
|
||||||
|
$user = $option[1];
|
||||||
|
break;
|
||||||
|
case '--password' :
|
||||||
|
$password = $option[1];
|
||||||
|
break;
|
||||||
|
case '--dry-run' :
|
||||||
|
$dryrun = true;
|
||||||
|
break;
|
||||||
|
default :
|
||||||
|
fwrite (STDERR,$usage."\n");
|
||||||
|
exit(INVALID_OPTION);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
// check file
|
||||||
|
if ( !$user || !$password ) {
|
||||||
|
fwrite(STDERR,'importexport_cli: You have to supply a username / password'."\n".$usage);
|
||||||
|
exit(INVALID_OPTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Can't change domain once header is loaded
|
||||||
|
$_REQUEST['domain'] = $domain;
|
||||||
|
|
||||||
|
$GLOBALS['egw_info']['flags'] = array(
|
||||||
|
'disable_Template_class' => True,
|
||||||
|
'noheader' => True,
|
||||||
|
'nonavbar' => True,
|
||||||
|
'currentapp' => 'importexport',
|
||||||
|
'autocreate_session_callback' => 'import_export_access',
|
||||||
|
'login' => $user . '@' . $domain,
|
||||||
|
'passwd' => $password,
|
||||||
|
);
|
||||||
|
if (!is_readable($path_to_egroupware.'/header.inc.php'))
|
||||||
|
{
|
||||||
|
fwrite(STDERR,"importexport.php: Could not find '$path_to_egroupware/header.inc.php', exiting !!!\n");
|
||||||
|
exit(HEADER_NOT_FOUND);
|
||||||
|
}
|
||||||
|
include($path_to_egroupware.'/header.inc.php');
|
||||||
|
|
||||||
|
// check file
|
||||||
|
if (!is_readable($file))
|
||||||
|
{
|
||||||
|
fwrite(STDERR,"importexport_cli: ". $file. ' is not readable'."\n");
|
||||||
|
exit(INVALID_OPTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
$definition = new importexport_definition($definition);
|
||||||
|
if( $definition->get_identifier() < 1 ) {
|
||||||
|
fwrite(STDERR,"importexport_cli: Definition not found! \n");
|
||||||
|
exit(INVALID_OPTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
$GLOBALS['egw_info']['flags']['currentapp'] = $definition->application;
|
||||||
|
|
||||||
|
$definition->plugin_options['dry_run'] = $dryrun;
|
||||||
|
$type = $definition->type;
|
||||||
|
|
||||||
|
$po = new $definition->plugin;
|
||||||
|
|
||||||
|
$resource = fopen( $file, 'r' );
|
||||||
|
$po->$type( $resource, $definition );
|
||||||
|
|
||||||
|
common::egw_exit();
|
||||||
|
|
||||||
|
function import_export_access(&$account)
|
||||||
|
{
|
||||||
|
$account['login'] = $GLOBALS['egw_info']['flags']['login'];
|
||||||
|
$account['passwd'] = $GLOBALS['egw_info']['flags']['passwd'];
|
||||||
|
$account['passwd_type'] = 'text';
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
@ -49,5 +49,11 @@ $setup_info['importexport']['check_install'] = array(
|
|||||||
'dom' => array(
|
'dom' => array(
|
||||||
'func' => 'extension_check',
|
'func' => 'extension_check',
|
||||||
),
|
),
|
||||||
|
'' => array(
|
||||||
|
'func' => 'pear_check',
|
||||||
|
),
|
||||||
|
'Console_Getopt' => array(
|
||||||
|
'func' => 'pear_check',
|
||||||
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user