1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
<?php
/**
* PEAR_REST_14
*
* PHP versions 4 and 5
*
* @category pear
* @package PEAR
* @author Helgi Þormar Þorbjörnsson <helgi@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: $Id: $
* @link http://pear.php.net/package/PEAR
* @since File available since Release 1.9
*/
/**
* For downloading REST xml/txt files
*/
require_once 'PEAR/REST.php';
require_once 'PEAR/REST/13.php';
/**
* Implement REST 1.4
*
* @category pear
* @package PEAR
* @author Helgi Þormar Þorbjörnsson <helgi@php.net>
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: @package_version@
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 1.9
*/
class PEAR_REST_14 extends PEAR_REST_13
{
function listLatestUpgrades($base, $pref_state, $installed, $channel, &$reg)
{
$packagelist = $this->_rest->retrieveData($base . 'p/latestpackages.xml', false, false, $channel);
if (PEAR::isError($packagelist)) {
return $packagelist;
}
$ret = array();
if (!is_array($packagelist) || !isset($packagelist['p'])) {
return $ret;
}
if (isset($packagelist['p']['n'])) {
$packagelist['p'] = array($packagelist['p']);
}
foreach ($packagelist['p'] as $package) {
if (!isset($installed[strtolower($package['n'])])) {
continue;
}
$inst_version = $reg->packageInfo($package['n'], 'version', $channel);
$inst_state = $reg->packageInfo($package['n'], 'release_state', $channel);
$release = $found = false;
$data = array();
if (isset($package['alpha'])) {
$data['alpha'] = $package['alpha'];
}
if (isset($package['beta'])) {
$data['beta'] = $package['beta'];
}
if (isset($package['stable'])) {
$data['stable'] = $package['stable'];
}
foreach ($data as $state => $release) {
if ($inst_version && version_compare($release['v'], $inst_version, '<=')) {
// not newer than the one installed
break;
}
// new version > installed version
if (!$pref_state) {
// every state is a good state
$found = true;
$release['state'] = $state;
break;
} else {
$new_state = $state;
// if new state >= installed state: go
if (in_array($new_state, $this->betterStates($inst_state, true))) {
$found = true;
$release['state'] = $state;
break;
} else {
// only allow to lower the state of package,
// if new state >= preferred state: go
if (in_array($new_state, $this->betterStates($pref_state, true))) {
$found = true;
$release['state'] = $state;
break;
}
}
}
}
if (!$found) {
continue;
}
$ret[$package] = array(
'version' => $release['v'],
'state' => $release['s'],
'filesize' => $release['f'],
);
}
return $ret;
}
}
|