allow to call command objects via setup-cli

This commit is contained in:
Ralf Becker 2008-01-14 05:44:32 +00:00
parent 2aa82e48ff
commit c27c36286e
4 changed files with 48 additions and 10 deletions

View File

@ -15,6 +15,11 @@
*/ */
class setup_cmd_database extends setup_cmd class setup_cmd_database extends setup_cmd
{ {
/**
* Allow to run this command via setup-cli
*/
const SETUP_CLI_CALLABLE = true;
/** /**
* Instance of egw_db to connect or create the db * Instance of egw_db to connect or create the db
* *

View File

@ -15,6 +15,11 @@
*/ */
class setup_cmd_ldap extends setup_cmd class setup_cmd_ldap extends setup_cmd
{ {
/**
* Allow to run this command via setup-cli
*/
const SETUP_CLI_CALLABLE = true;
/** /**
* Instance of ldap object * Instance of ldap object
* *

View File

@ -18,6 +18,11 @@
*/ */
class setup_cmd_showheader extends setup_cmd class setup_cmd_showheader extends setup_cmd
{ {
/**
* Allow to run this command via setup-cli
*/
const SETUP_CLI_CALLABLE = true;
/** /**
* Constructor * Constructor
* *

View File

@ -42,9 +42,19 @@ include('inc/functions.inc.php');
$GLOBALS['egw_setup']->translation->no_translation_marker = ''; $GLOBALS['egw_setup']->translation->no_translation_marker = '';
$GLOBALS['egw_setup']->system_charset = $charset; $GLOBALS['egw_setup']->system_charset = $charset;
/**
* Echo the exception message and exit the script with a numeric code, does NOT return
*
* @param Exception $e
*/
function cli_exception_handler(Exception $e) function cli_exception_handler(Exception $e)
{ {
fail($e->getCode(),$e->getMessage()); echo $e->getMessage()."\n";
// if ($e instanceof egw_exception_assertion_failed && !($e instanceof egw_exception_wrong_userinput))
{
echo $e->getTraceAsString()."\n";
}
exit($e->getCode() ? $e->getCode() : 9999); // always give a non-zero exist status
} }
set_exception_handler('cli_exception_handler'); set_exception_handler('cli_exception_handler');
@ -109,7 +119,27 @@ switch($action)
break; break;
default: default:
fail(90,lang("Unknown option '%1' !!!",$action)); // we allow to call admin_cmd classes directly, if they define the constant SETUP_CLI_CALLABLE
if (substr($action,0,2) == '--' && class_exists($class = str_replace('-','_',substr($action,2))) &&
is_subclass_of($class,'admin_cmd') && constant($class.'::SETUP_CLI_CALLABLE'))
{
$args = null;
foreach($arguments as $arg)
{
list($name,$value) = explode('=',$arg,2);
if(property_exists('admin_cmd',$name)) // dont allow to overwrite admin_cmd properties
{
throw new egw_exception_wrong_userinput(lang("Invalid argument '%1' !!!",$arg),90);
}
$args[$name] = $value;
}
$cmd = new $class($args);
$msg = $cmd->run();
if (is_array($msg)) $msg = print_r($msg,true);
echo "$msg\n";
break;
}
throw new egw_exception_wrong_userinput(lang("Unknown option '%1' !!!",$action),90);
} }
exit(0); exit(0);
@ -402,14 +432,7 @@ function do_header($create,&$arguments)
array_unshift($arguments,$create ? '--create-header' : '--edit-header'); array_unshift($arguments,$create ? '--create-header' : '--edit-header');
$cmd = new setup_cmd_header($create?'create':'edit',$arguments); $cmd = new setup_cmd_header($create?'create':'edit',$arguments);
try { echo $cmd->run()."\n";
$msg = $cmd->run();
}
catch(Exception $e) {
fail($e->getCode(),$e->getMessage());
}
echo "\n$msg\n\n";
exit(0);
} }
/** /**