[ Index ]
 

Code source de PHP PEAR 1.4.5

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/PEAR/Command/ -> Common.php (source)

   1  <?php
   2  /**
   3   * PEAR_Command_Common base class
   4   *
   5   * PHP versions 4 and 5
   6   *
   7   * LICENSE: This source file is subject to version 3.0 of the PHP license
   8   * that is available through the world-wide-web at the following URI:
   9   * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
  10   * the PHP License and are unable to obtain it through the web, please
  11   * send a note to license@php.net so we can mail you a copy immediately.
  12   *
  13   * @category   pear
  14   * @package    PEAR
  15   * @author     Stig Bakken <ssb@php.net>
  16   * @author     Greg Beaver <cellog@php.net>
  17   * @copyright  1997-2006 The PHP Group
  18   * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
  19   * @version    CVS: $Id: Common.php,v 1.35 2006/06/08 22:25:18 pajoye Exp $
  20   * @link       http://pear.php.net/package/PEAR
  21   * @since      File available since Release 0.1
  22   */
  23  
  24  /**
  25   * base class
  26   */
  27  require_once  'PEAR.php';
  28  
  29  /**
  30   * PEAR commands base class
  31   *
  32   * @category   pear
  33   * @package    PEAR
  34   * @author     Stig Bakken <ssb@php.net>
  35   * @author     Greg Beaver <cellog@php.net>
  36   * @copyright  1997-2006 The PHP Group
  37   * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
  38   * @version    Release: 1.5.0
  39   * @link       http://pear.php.net/package/PEAR
  40   * @since      Class available since Release 0.1
  41   */
  42  class PEAR_Command_Common extends PEAR
  43  {
  44      // {{{ properties
  45  
  46      /**
  47       * PEAR_Config object used to pass user system and configuration
  48       * on when executing commands
  49       *
  50       * @var PEAR_Config
  51       */
  52      var $config;
  53      /**
  54       * @var PEAR_Registry
  55       * @access protected
  56       */
  57      var $_registry;
  58  
  59      /**
  60       * User Interface object, for all interaction with the user.
  61       * @var object
  62       */
  63      var $ui;
  64  
  65      var $_deps_rel_trans = array(
  66                                   'lt' => '<',
  67                                   'le' => '<=',
  68                                   'eq' => '=',
  69                                   'ne' => '!=',
  70                                   'gt' => '>',
  71                                   'ge' => '>=',
  72                                   'has' => '=='
  73                                   );
  74  
  75      var $_deps_type_trans = array(
  76                                    'pkg' => 'package',
  77                                    'ext' => 'extension',
  78                                    'php' => 'PHP',
  79                                    'prog' => 'external program',
  80                                    'ldlib' => 'external library for linking',
  81                                    'rtlib' => 'external runtime library',
  82                                    'os' => 'operating system',
  83                                    'websrv' => 'web server',
  84                                    'sapi' => 'SAPI backend'
  85                                    );
  86  
  87      // }}}
  88      // {{{ constructor
  89  
  90      /**
  91       * PEAR_Command_Common constructor.
  92       *
  93       * @access public
  94       */
  95      function PEAR_Command_Common(&$ui, &$config)
  96      {
  97          parent::PEAR();
  98          $this->config = &$config;
  99          $this->ui = &$ui;
 100      }
 101  
 102      // }}}
 103  
 104      // {{{ getCommands()
 105  
 106      /**
 107       * Return a list of all the commands defined by this class.
 108       * @return array list of commands
 109       * @access public
 110       */
 111      function getCommands()
 112      {
 113          $ret = array();
 114          foreach (array_keys($this->commands) as $command) {
 115              $ret[$command] = $this->commands[$command]['summary'];
 116          }
 117          return $ret;
 118      }
 119  
 120      // }}}
 121      // {{{ getShortcuts()
 122  
 123      /**
 124       * Return a list of all the command shortcuts defined by this class.
 125       * @return array shortcut => command
 126       * @access public
 127       */
 128      function getShortcuts()
 129      {
 130          $ret = array();
 131          foreach (array_keys($this->commands) as $command) {
 132              if (isset($this->commands[$command]['shortcut'])) {
 133                  $ret[$this->commands[$command]['shortcut']] = $command;
 134              }
 135          }
 136          return $ret;
 137      }
 138  
 139      // }}}
 140      // {{{ getOptions()
 141  
 142      function getOptions($command)
 143      {
 144          $shortcuts = $this->getShortcuts();
 145          if (isset($shortcuts[$command])) {
 146              $command = $shortcuts[$command];
 147          }
 148          if (isset($this->commands[$command]) &&
 149                isset($this->commands[$command]['options'])) {
 150              return $this->commands[$command]['options'];
 151          } else {
 152              return null;
 153          }
 154      }
 155  
 156      // }}}
 157      // {{{ getGetoptArgs()
 158  
 159      function getGetoptArgs($command, &$short_args, &$long_args)
 160      {
 161          $short_args = "";
 162          $long_args = array();
 163          if (empty($this->commands[$command]) || empty($this->commands[$command]['options'])) {
 164              return;
 165          }
 166          reset($this->commands[$command]['options']);
 167          while (list($option, $info) = each($this->commands[$command]['options'])) {
 168              $larg = $sarg = '';
 169              if (isset($info['arg'])) {
 170                  if ($info['arg']{0} == '(') {
 171                      $larg = '==';
 172                      $sarg = '::';
 173                      $arg = substr($info['arg'], 1, -1);
 174                  } else {
 175                      $larg = '=';
 176                      $sarg = ':';
 177                      $arg = $info['arg'];
 178                  }
 179              }
 180              if (isset($info['shortopt'])) {
 181                  $short_args .= $info['shortopt'] . $sarg;
 182              }
 183              $long_args[] = $option . $larg;
 184          }
 185      }
 186  
 187      // }}}
 188      // {{{ getHelp()
 189      /**
 190      * Returns the help message for the given command
 191      *
 192      * @param string $command The command
 193      * @return mixed A fail string if the command does not have help or
 194      *               a two elements array containing [0]=>help string,
 195      *               [1]=> help string for the accepted cmd args
 196      */
 197      function getHelp($command)
 198      {
 199          $config = &PEAR_Config::singleton();
 200          if (!isset($this->commands[$command])) {
 201              return "No such command \"$command\"";
 202          }
 203          $help = null;
 204          if (isset($this->commands[$command]['doc'])) {
 205              $help = $this->commands[$command]['doc'];
 206          }
 207          if (empty($help)) {
 208              // XXX (cox) Fallback to summary if there is no doc (show both?)
 209              if (!isset($this->commands[$command]['summary'])) {
 210                  return "No help for command \"$command\"";
 211              }
 212              $help = $this->commands[$command]['summary'];
 213          }
 214          if (preg_match_all('/{config\s+([^\}]+)}/e', $help, $matches)) {
 215              foreach($matches[0] as $k => $v) {
 216                  $help = preg_replace("/$v/", $config->get($matches[1][$k]), $help);
 217              }
 218          }
 219          return array($help, $this->getHelpArgs($command));
 220      }
 221  
 222      // }}}
 223      // {{{ getHelpArgs()
 224      /**
 225      * Returns the help for the accepted arguments of a command
 226      *
 227      * @param  string $command
 228      * @return string The help string
 229      */
 230      function getHelpArgs($command)
 231      {
 232          if (isset($this->commands[$command]['options']) &&
 233              count($this->commands[$command]['options']))
 234          {
 235              $help = "Options:\n";
 236              foreach ($this->commands[$command]['options'] as $k => $v) {
 237                  if (isset($v['arg'])) {
 238                      if ($v['arg'][0] == '(') {
 239                          $arg = substr($v['arg'], 1, -1);
 240                          $sapp = " [$arg]";
 241                          $lapp = "[=$arg]";
 242                      } else {
 243                          $sapp = " $v[arg]";
 244                          $lapp = "=$v[arg]";
 245                      }
 246                  } else {
 247                      $sapp = $lapp = "";
 248                  }
 249                  if (isset($v['shortopt'])) {
 250                      $s = $v['shortopt'];
 251                      $help .= "  -$s$sapp, --$k$lapp\n";
 252                  } else {
 253                      $help .= "  --$k$lapp\n";
 254                  }
 255                  $p = "        ";
 256                  $doc = rtrim(str_replace("\n", "\n$p", $v['doc']));
 257                  $help .= "        $doc\n";
 258              }
 259              return $help;
 260          }
 261          return null;
 262      }
 263  
 264      // }}}
 265      // {{{ run()
 266  
 267      function run($command, $options, $params)
 268      {
 269          if (empty($this->commands[$command]['function'])) {
 270              // look for shortcuts
 271              foreach (array_keys($this->commands) as $cmd) {
 272                  if (isset($this->commands[$cmd]['shortcut']) && $this->commands[$cmd]['shortcut'] == $command) {
 273                      if (empty($this->commands[$cmd]['function'])) {
 274                          return $this->raiseError("unknown command `$command'");
 275                      } else {
 276                          $func = $this->commands[$cmd]['function'];
 277                      }
 278                      $command = $cmd;
 279                      break;
 280                  }
 281              }
 282          } else {
 283              $func = $this->commands[$command]['function'];
 284          }
 285          return $this->$func($command, $options, $params);
 286      }
 287  
 288      // }}}
 289  }
 290  
 291  ?>


Généré le : Sun Feb 25 14:08:00 2007 par Balluche grâce à PHPXref 0.7