[ Index ]
 

Code source de PHP PEAR 1.4.5

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

title

Body

[fermer]

/PEAR/REST/ -> 11.php (source)

   1  <?php
   2  /**
   3   * PEAR_REST_11 - implement faster list-all/remote-list command
   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     Greg Beaver <cellog@php.net>
  16   * @copyright  1997-2006 The PHP Group
  17   * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
  18   * @version    CVS: $Id: 11.php,v 1.7 2007/01/07 18:39:12 cellog Exp $
  19   * @link       http://pear.php.net/package/PEAR
  20   * @since      File available since Release 1.4.3
  21   */
  22  
  23  /**
  24   * For downloading REST xml/txt files
  25   */
  26  require_once  'PEAR/REST.php';
  27  
  28  /**
  29   * Implement REST 1.1
  30   *
  31   * @category   pear
  32   * @package    PEAR
  33   * @author     Greg Beaver <cellog@php.net>
  34   * @copyright  1997-2006 The PHP Group
  35   * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
  36   * @version    Release: 1.5.0
  37   * @link       http://pear.php.net/package/PEAR
  38   * @since      Class available since Release 1.4.3
  39   */
  40  class PEAR_REST_11
  41  {
  42      /**
  43       * @var PEAR_REST
  44       */
  45      var $_rest;
  46  
  47      function PEAR_REST_11($config, $options = array())
  48      {
  49          $this->_rest = &new PEAR_REST($config, $options);
  50      }
  51  
  52      function listAll($base, $dostable, $basic = true)
  53      {
  54          $categorylist = $this->_rest->retrieveData($base . 'c/categories.xml');
  55          if (PEAR::isError($categorylist)) {
  56              return $categorylist;
  57          }
  58          $ret = array();
  59          if (!is_array($categorylist['c']) || !isset($categorylist['c'][0])) {
  60              $categorylist['c'] = array($categorylist['c']);
  61          }
  62          PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
  63  
  64          foreach ($categorylist['c'] as $progress => $category) {
  65              $category = $category['_content'];
  66              $packagesinfo = $this->_rest->retrieveData($base .
  67                  'c/' . urlencode($category) . '/packagesinfo.xml');
  68  
  69              if (PEAR::isError($packagesinfo)) {
  70                  continue;
  71              }
  72  
  73              if (!is_array($packagesinfo) || !isset($packagesinfo['pi'])) {
  74                  continue;
  75              }
  76  
  77              if (!is_array($packagesinfo['pi']) || !isset($packagesinfo['pi'][0])) {
  78                  $packagesinfo['pi'] = array($packagesinfo['pi']);
  79              }
  80  
  81              foreach ($packagesinfo['pi'] as $packageinfo) {
  82                  $info = $packageinfo['p'];
  83                  $package = $info['n'];
  84                  $releases = isset($packageinfo['a']) ? $packageinfo['a'] : false;
  85                  unset($latest);
  86                  unset($unstable);
  87                  unset($stable);
  88                  unset($state);
  89  
  90                  if ($releases) {
  91                      if (!isset($releases['r'][0])) {
  92                          $releases['r'] = array($releases['r']);
  93                      }
  94                      foreach ($releases['r'] as $release) {
  95                          if (!isset($latest)) {
  96                              if ($dostable && $release['s'] == 'stable') {
  97                                  $latest = $release['v'];
  98                                  $state = 'stable';
  99                              }
 100                              if (!$dostable) {
 101                                  $latest = $release['v'];
 102                                  $state = $release['s'];
 103                              }
 104                          }
 105                          if (!isset($stable) && $release['s'] == 'stable') {
 106                              $stable = $release['v'];
 107                              if (!isset($unstable)) {
 108                                  $unstable = $stable;
 109                              }
 110                          }
 111                          if (!isset($unstable) && $release['s'] != 'stable') {
 112                              $latest = $unstable = $release['v'];
 113                              $state = $release['s'];
 114                          }
 115                          if (isset($latest) && !isset($state)) {
 116                              $state = $release['s'];
 117                          }
 118                          if (isset($latest) && isset($stable) && isset($unstable)) {
 119                              break;
 120                          }
 121                      }
 122                  }
 123  
 124                  if ($basic) { // remote-list command
 125                      if (!isset($latest)) {
 126                          $latest = false;
 127                      }
 128                      if ($dostable) {
 129                          if ($state == 'stable') {
 130                              $ret[$package] = array('stable' => $latest);
 131                          } else {
 132                              $ret[$package] = array('stable' => '-n/a-');
 133                          }
 134                      } else {
 135                              $ret[$package] = array('stable' => $latest);
 136                      }
 137                      continue;
 138                  }
 139  
 140                  // list-all command
 141                  $deps = array();
 142                  if (!isset($unstable)) {
 143                      $unstable = false;
 144                      $state = 'stable';
 145                      if (isset($stable)) {
 146                          $latest = $unstable = $stable;
 147                      }
 148                  } else {
 149                      $latest = $unstable;
 150                  }
 151  
 152                  if (!isset($latest)) {
 153                      $latest = false;
 154                  }
 155  
 156                  if ($latest && $packageinfo['deps'] !== null) {
 157                      if (isset($packageinfo['deps'])) {
 158                          if (!is_array($packageinfo['deps']) ||
 159                                !isset($packageinfo['deps'][0])) {
 160                              $packageinfo['deps'] = array($packageinfo['deps']);
 161                          }
 162                      }
 163                      $d = false;
 164                      foreach ($packageinfo['deps'] as $dep) {
 165                          if ($dep['v'] == $latest) {
 166                              $d = unserialize($dep['d']);
 167                          }
 168                      }
 169                      if ($d) {
 170                          if (isset($d['required'])) {
 171                              if (!class_exists('PEAR_PackageFile_v2')) {
 172                                  require_once  'PEAR/PackageFile/v2.php';
 173                              }
 174                              if (!isset($pf)) {
 175                                  $pf = new PEAR_PackageFile_v2;
 176                              }
 177                              $pf->setDeps($d);
 178                              $tdeps = $pf->getDeps();
 179                          } else {
 180                              $tdeps = $d;
 181                          }
 182                          foreach ($tdeps as $dep) {
 183                              if ($dep['type'] !== 'pkg') {
 184                                  continue;
 185                              }
 186                              $deps[] = $dep;
 187                          }
 188                      }
 189                  }
 190  
 191                  $info = array('stable' => $latest, 'summary' => $info['s'],
 192                      'description' =>
 193                      $info['d'], 'deps' => $deps, 'category' => $info['ca']['_content'],
 194                      'unstable' => $unstable, 'state' => $state);
 195                  $ret[$package] = $info;
 196              }
 197          }
 198          PEAR::popErrorHandling();
 199          return $ret;
 200      }
 201  
 202      /**
 203       * Return an array containing all of the states that are more stable than
 204       * or equal to the passed in state
 205       *
 206       * @param string Release state
 207       * @param boolean Determines whether to include $state in the list
 208       * @return false|array False if $state is not a valid release state
 209       */
 210      function betterStates($state, $include = false)
 211      {
 212          static $states = array('snapshot', 'devel', 'alpha', 'beta', 'stable');
 213          $i = array_search($state, $states);
 214          if ($i === false) {
 215              return false;
 216          }
 217          if ($include) {
 218              $i--;
 219          }
 220          return array_slice($states, $i + 1);
 221      }
 222  }
 223  ?>


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