fix image text
[pear] / HTML / FlexyFramework / Cli.php
index c3956ba..3d6c4f6 100644 (file)
@@ -43,7 +43,7 @@ class HTML_FlexyFramework_Cli
     var $ff; // the Framework instance.
     
     
-    function HTML_FlexyFramework_Cli($ff)
+    function __construct($ff)
     {
         $this->ff = $ff;
     }
@@ -78,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;
     }
@@ -186,36 +192,47 @@ Available commands:
     
         try {
             // 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 {
-                $val = $cls->getStaticPropertyValue('cli_opts');
+                $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);
+                //var_dump($cls->name);
                  
                 try {
-                    
+                    $vadd  = array();
                     if (method_exists($cls->name, 'cli_opts')) {
                         $cn = $cls->name;
-                        $val = $cn::cli_opts();
+                        $vadd = $cn::cli_opts();
                     } else {
-                        $vadd = $cls->getStaticPropertyValue('cli_opts') ;
-                        $val = array_merge($val, is_array($vadd) ? $vadd : array()  );
+                        $ar = $cls->getStaticProperties();
+                        if (isset($ar['cli_opts'])) {
+                            $vadd = $cls->getStaticPropertyValue('cli_opts');
+                        }
+                         
                     }
-                   
-                } catch (Exception $e) {
+                    $val = array_merge($val, is_array($vadd) ? $vadd : array()  );
+                } catch (ReflectionException $e) {
                     continue;
                 }
             }
             
             
             
-        } catch (Exception $e) {
-            echo "Warning:  {$e->getMessage()}\n";
+        } catch (ReflectionException $e) {
+            //print_r($e);
+            echo "cliParse:Warning:  {$e->getMessage()}\n";
+            exit;
         }
         if (empty($val)) {
             return false;
@@ -232,6 +249,7 @@ Available commands:
         
         $newargs = Console_Getargs::factory($val, $ar);
         
+  
         if (!is_a($newargs, 'PEAR_Error')) {
             return $newargs->getValues();
         }
@@ -277,55 +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);
         
-        if (is_a($newargs, 'PEAR_Error')) {
-            
-            
+        // 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 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;
+            }
             
-            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) {
+            if (!$has_class) {
                 
-                // User put illegal values on the command line.
                 echo Console_Getargs::getHelp($val,
-                        $helpHeader, "\n\n".$newargs->getMessage(), 78, 4)."\n\n";
+                        $helpHeader, NULL, 78, 4)."\n\n";
                 exit;
             }
-            if ($newargs->getCode() === CONSOLE_GETARGS_HELP) {
-                
-                return true;// hel
-            }
-            
-            return false;
+            return true;// help is handled later in the flow?
         }
-       
-        
-        // now handle real arguments..
-        
         
-        $ret =  $newargs->getValues();
-            foreach($ret as $k=>$v) {
-                switch($k) {
-                    case 'pman-nodatabase':
-                        //echo "Turning off database";
-                        $this->ff->nodatabase= true;
-                        
-                        break;
-                    
-                    default:
-                        die("need to fix option $k");
-                }
-                
-            }
         return false;
+     
         
     }