[ Index ] |
|
Code source de PHP PEAR 1.4.5 |
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 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Feb 25 14:08:00 2007 | par Balluche grâce à PHPXref 0.7 |