X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=HTML%2FFlexyFramework%2FCli.php;h=3d6c4f6ccea30dffa812e3342a1be3f526b25e39;hb=HEAD;hp=852c59c7600c2252b7706896d18e0545aac9a5d5;hpb=f499843d38ef5b8f336cdfb6d07f55542ad21d3f;p=pear diff --git a/HTML/FlexyFramework/Cli.php b/HTML/FlexyFramework/Cli.php index 852c59c7..3d6c4f6c 100644 --- a/HTML/FlexyFramework/Cli.php +++ b/HTML/FlexyFramework/Cli.php @@ -25,12 +25,11 @@ class HTML_FlexyFramework_Cli static $cli_opts = array( + + // this is a flag argument 'pman-nodatabase' => array( 'desc' => 'Turn off database', - //'default' => 0, - //'short' => 'v', - 'min' => 0, - 'max' => 1, + 'max' => 0, ) ); @@ -44,7 +43,7 @@ class HTML_FlexyFramework_Cli var $ff; // the Framework instance. - function HTML_FlexyFramework_Cli($ff) + function __construct($ff) { $this->ff = $ff; } @@ -79,6 +78,12 @@ Available commands: $pr = $this->ff->project; $this->cliHelpSearch($p,$pr); + if (!empty($this->ff->projectExtends)) { + foreach($this->ff->projectExtends as $pr) { + $this->cliHelpSearch($p,$pr); + } + } + echo "\n\n"; exit; } @@ -184,16 +189,55 @@ Available commands: { // cli static $classname::$cli_opts - + try { - $cls = new ReflectionClass($classname); - $val = $cls->getStaticPropertyValue('cli_opts'); - } catch (Exception $e) { - return; + // look up the parent tree for core opts. + $val = array(); + //var_dump($classname); + $cls = new ReflectionClass($classname); + if (method_exists($classname, 'cli_opts')) { + $val = $classname::cli_opts(); + } else { + $ar = $cls->getStaticProperties(); + if (isset($ar['cli_opts'])) { + //echo "getting cli opts?\n"; + $val = $cls->getStaticPropertyValue('cli_opts'); + } + } + + $val = is_array($val) ? $val : array(); + while ($cls = $cls->getParentClass()) { + //var_dump($cls->name); + + try { + $vadd = array(); + if (method_exists($cls->name, 'cli_opts')) { + $cn = $cls->name; + $vadd = $cn::cli_opts(); + } else { + $ar = $cls->getStaticProperties(); + if (isset($ar['cli_opts'])) { + $vadd = $cls->getStaticPropertyValue('cli_opts'); + } + + } + $val = array_merge($val, is_array($vadd) ? $vadd : array() ); + } catch (ReflectionException $e) { + continue; + } + } + + + + } catch (ReflectionException $e) { + //print_r($e); + echo "cliParse:Warning: {$e->getMessage()}\n"; + exit; } if (empty($val)) { return false; } + $val = array_merge(self::$cli_opts, $val); @@ -205,6 +249,7 @@ Available commands: $newargs = Console_Getargs::factory($val, $ar); + if (!is_a($newargs, 'PEAR_Error')) { return $newargs->getValues(); } @@ -250,27 +295,59 @@ Available commands: require_once 'Console/Getargs.php'; $ar = $_SERVER['argv']; $call = array(array_shift($ar)); // remove index.php - $call[] = array_shift($ar); - //var_dump($ar); + $has_class = false; + if (isset($ar[0]) && $ar[0][0] != '-') { + $call[] = array_shift($ar); // remove our class... + $has_class = true; + } $val = self::$cli_opts; $newargs = Console_Getargs::factory($val, $ar); + // we need to read our 'special arguments' here - otherwise other arguments, cause getargs to fail + switch (true) { + case in_array('--pman-nodatabase', $ar): + echo "Turning off database\n"; + $this->ff->nodatabase= true; + + break; + + } + + + if (!is_a($newargs, 'PEAR_Error')) { - return $newargs->getValues(); + return false; } + list($optional, $required, $params) = Console_Getargs::getOptionalRequired($val); + + $helpHeader = 'Usage: php ' . implode (' ', $call) . ' '. + $optional . ' ' . $required . ' ' . $params . "\n\n"; + if ($newargs->getCode() === CONSOLE_GETARGS_ERROR_USER) { + // since we do not handle all the arguemnts here... + // skip errors if we find unknown arguments. + if (preg_match('/^Unknown argument/', $newargs->getMessage())) { + return false; + } + // User put illegal values on the command line. echo Console_Getargs::getHelp($val, $helpHeader, "\n\n".$newargs->getMessage(), 78, 4)."\n\n"; exit; } if ($newargs->getCode() === CONSOLE_GETARGS_HELP) { - - return true;// hel + if (!$has_class) { + + echo Console_Getargs::getHelp($val, + $helpHeader, NULL, 78, 4)."\n\n"; + exit; + } + return true;// help is handled later in the flow? } return false; + }