summaryrefslogtreecommitdiff
path: root/includes/pear/PEAR/REST/14.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/pear/PEAR/REST/14.php')
-rw-r--r--includes/pear/PEAR/REST/14.php120
1 files changed, 120 insertions, 0 deletions
diff --git a/includes/pear/PEAR/REST/14.php b/includes/pear/PEAR/REST/14.php
new file mode 100644
index 0000000..3358a46
--- /dev/null
+++ b/includes/pear/PEAR/REST/14.php
@@ -0,0 +1,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;
+ }
+} \ No newline at end of file