"modernized" importexport_cli a bit (removed uneccessary stuff) and added PEAR Console_Getopt dependency

This commit is contained in:
Ralf Becker 2011-09-15 07:06:33 +00:00
parent 2302de28f2
commit 884da4b664
2 changed files with 158 additions and 160 deletions

View File

@ -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__).'/..'); $path_to_egroupware = realpath(dirname(__FILE__).'/..');
$usage = "usage: $usage = "usage:
--definition <name of definition> Name of definition --definition <name of definition> Name of definition
--file <name of file> File to import / for export --file <name of file> File to import / for export
--user <eGW username> eGroupWare username for action --user <eGW username> eGroupWare username for action
--password <password for user> users password --password <password for user> users password
--domain <domain name> eGroupWare domain --domain <domain name> eGroupWare domain
--dry-run no real action, just console output --dry-run no real action, just console output
\n"; \n";
if (php_sapi_name() != 'cli') { if (php_sapi_name() != 'cli') {
die('This script only runs form command line'); die('This script only runs form command line');
}
if (ini_get('session.save_handler') == 'files' && !is_writable(ini_get('session.save_path')) && is_dir('/tmp') && is_writable('/tmp'))
{
ini_set('session.save_path','/tmp'); // regular users may have no rights to apache's session dir
}
// 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);
}
// Include PEAR::Console_Getopt // Can't change domain once header is loaded
require_once 'Console/Getopt.php'; $_REQUEST['domain'] = $domain;
// Define exit codes for errors $GLOBALS['egw_info']['flags'] = array(
define('HEADER_NOT_FOUND',9); 'disable_Template_class' => True,
define('NO_ARGS',10); 'noheader' => True,
define('INVALID_OPTION',11); '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');
// Reading the incoming arguments - same as $argv // check file
$args = Console_Getopt::readPHPArgv(); if (!is_readable($file))
{
fwrite(STDERR,"importexport_cli: ". $file. ' is not readable'."\n");
exit(INVALID_OPTION);
}
// Make sure we got them (for non CLI binaries) $definition = new importexport_definition($definition);
if (PEAR::isError($args)) { if( $definition->get_identifier() < 1 ) {
fwrite(STDERR,"importexport_cli: ".$args->getMessage()."\n".$usage); fwrite(STDERR,"importexport_cli: Definition not found! \n");
exit(NO_ARGS); exit(INVALID_OPTION);
} }
// Short options $GLOBALS['egw_info']['flags']['currentapp'] = $definition->application;
$short_opts = 'f:d:';
// Long options $definition->plugin_options['dry_run'] = $dryrun;
$long_opts = array( $type = $definition->type;
'definition=',
'file=',
'user=',
'password=',
'domain=',
'dry-run',
);
// Convert the arguments to options - check for the first argument $po = new $definition->plugin;
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 $resource = fopen( $file, 'r' );
if (PEAR::isError($options)) { $po->$type( $resource, $definition );
fwrite(STDERR,"importexport_cli: ".$options->getMessage()."\n".$usage."\n");
exit(INVALID_OPTION);
}
$domain = 'default'; common::egw_exit();
$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 function import_export_access(&$account)
$_REQUEST['domain'] = $domain; {
$account['login'] = $GLOBALS['egw_info']['flags']['login'];
$GLOBALS['egw_info']['flags'] = array( $account['passwd'] = $GLOBALS['egw_info']['flags']['passwd'];
'disable_Template_class' => True, $account['passwd_type'] = 'text';
'noheader' => True, return 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
$db_type = $GLOBALS['egw_domain'][$domain]['db_type'];
if (!isset($GLOBALS['egw_domain'][$domain]) || empty($db_type))
{
fwrite(STDERR,"importexport_cli: ". $domain. ' is not a valid domain name'."\n");
exit(INVALID_OPTION);
}
$GLOBALS['egw_info']['server']['sessions_type'] = 'db'; // no php4-sessions availible for cgi
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( $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 );
$GLOBALS['egw']->common->phpgw_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;
}

View File

@ -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',
),
); );