/wp-content/plugins/anthologize/vendor/pear/pear/PEAR/REST/11.php
https://github.com/livinglab/openlab · PHP · 340 lines · 234 code · 45 blank · 61 comment · 71 complexity · c5f142e00d000cc6a23bca94ca60b0e2 MD5 · raw file
- <?php
- /**
- * PEAR_REST_11 - implement faster list-all/remote-list command
- *
- * PHP versions 4 and 5
- *
- * @category pear
- * @package PEAR
- * @author Greg Beaver <cellog@php.net>
- * @copyright 1997-2009 The Authors
- * @license http://opensource.org/licenses/bsd-license.php New BSD License
- * @link http://pear.php.net/package/PEAR
- * @since File available since Release 1.4.3
- */
- /**
- * For downloading REST xml/txt files
- */
- require_once 'PEAR/REST.php';
- /**
- * Implement REST 1.1
- *
- * @category pear
- * @package PEAR
- * @author Greg Beaver <cellog@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.4.3
- */
- class PEAR_REST_11
- {
- /**
- * @var PEAR_REST
- */
- var $_rest;
- function __construct($config, $options = array())
- {
- $this->_rest = new PEAR_REST($config, $options);
- }
- function listAll($base, $dostable, $basic = true, $searchpackage = false, $searchsummary = false, $channel = false)
- {
- $categorylist = $this->_rest->retrieveData($base . 'c/categories.xml', false, false, $channel);
- if (PEAR::isError($categorylist)) {
- return $categorylist;
- }
- $ret = array();
- if (!is_array($categorylist['c']) || !isset($categorylist['c'][0])) {
- $categorylist['c'] = array($categorylist['c']);
- }
- PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
- foreach ($categorylist['c'] as $progress => $category) {
- $category = $category['_content'];
- $packagesinfo = $this->_rest->retrieveData($base .
- 'c/' . urlencode($category) . '/packagesinfo.xml', false, false, $channel);
- if (PEAR::isError($packagesinfo)) {
- continue;
- }
- if (!is_array($packagesinfo) || !isset($packagesinfo['pi'])) {
- continue;
- }
- if (!is_array($packagesinfo['pi']) || !isset($packagesinfo['pi'][0])) {
- $packagesinfo['pi'] = array($packagesinfo['pi']);
- }
- foreach ($packagesinfo['pi'] as $packageinfo) {
- if (empty($packageinfo)) {
- continue;
- }
- $info = $packageinfo['p'];
- $package = $info['n'];
- $releases = isset($packageinfo['a']) ? $packageinfo['a'] : false;
- unset($latest);
- unset($unstable);
- unset($stable);
- unset($state);
- if ($releases) {
- if (!isset($releases['r'][0])) {
- $releases['r'] = array($releases['r']);
- }
- foreach ($releases['r'] as $release) {
- if (!isset($latest)) {
- if ($dostable && $release['s'] == 'stable') {
- $latest = $release['v'];
- $state = 'stable';
- }
- if (!$dostable) {
- $latest = $release['v'];
- $state = $release['s'];
- }
- }
- if (!isset($stable) && $release['s'] == 'stable') {
- $stable = $release['v'];
- if (!isset($unstable)) {
- $unstable = $stable;
- }
- }
- if (!isset($unstable) && $release['s'] != 'stable') {
- $unstable = $release['v'];
- $state = $release['s'];
- }
- if (isset($latest) && !isset($state)) {
- $state = $release['s'];
- }
- if (isset($latest) && isset($stable) && isset($unstable)) {
- break;
- }
- }
- }
- if ($basic) { // remote-list command
- if (!isset($latest)) {
- $latest = false;
- }
- if ($dostable) {
- // $state is not set if there are no releases
- if (isset($state) && $state == 'stable') {
- $ret[$package] = array('stable' => $latest);
- } else {
- $ret[$package] = array('stable' => '-n/a-');
- }
- } else {
- $ret[$package] = array('stable' => $latest);
- }
- continue;
- }
- // list-all command
- if (!isset($unstable)) {
- $unstable = false;
- $state = 'stable';
- if (isset($stable)) {
- $latest = $unstable = $stable;
- }
- } else {
- $latest = $unstable;
- }
- if (!isset($latest)) {
- $latest = false;
- }
- $deps = array();
- if ($latest && isset($packageinfo['deps'])) {
- if (!is_array($packageinfo['deps']) ||
- !isset($packageinfo['deps'][0])
- ) {
- $packageinfo['deps'] = array($packageinfo['deps']);
- }
- $d = false;
- foreach ($packageinfo['deps'] as $dep) {
- if ($dep['v'] == $latest) {
- $d = unserialize($dep['d']);
- }
- }
- if ($d) {
- if (isset($d['required'])) {
- if (!class_exists('PEAR_PackageFile_v2')) {
- require_once 'PEAR/PackageFile/v2.php';
- }
- if (!isset($pf)) {
- $pf = new PEAR_PackageFile_v2;
- }
- $pf->setDeps($d);
- $tdeps = $pf->getDeps();
- } else {
- $tdeps = $d;
- }
- foreach ($tdeps as $dep) {
- if ($dep['type'] !== 'pkg') {
- continue;
- }
- $deps[] = $dep;
- }
- }
- }
- $info = array(
- 'stable' => $latest,
- 'summary' => $info['s'],
- 'description' => $info['d'],
- 'deps' => $deps,
- 'category' => $info['ca']['_content'],
- 'unstable' => $unstable,
- 'state' => $state
- );
- $ret[$package] = $info;
- }
- }
- PEAR::popErrorHandling();
- return $ret;
- }
- /**
- * List all categories of a REST server
- *
- * @param string $base base URL of the server
- * @return array of categorynames
- */
- function listCategories($base, $channel = false)
- {
- $categorylist = $this->_rest->retrieveData($base . 'c/categories.xml', false, false, $channel);
- if (PEAR::isError($categorylist)) {
- return $categorylist;
- }
- if (!is_array($categorylist) || !isset($categorylist['c'])) {
- return array();
- }
- if (isset($categorylist['c']['_content'])) {
- // only 1 category
- $categorylist['c'] = array($categorylist['c']);
- }
- return $categorylist['c'];
- }
- /**
- * List packages in a category of a REST server
- *
- * @param string $base base URL of the server
- * @param string $category name of the category
- * @param boolean $info also download full package info
- * @return array of packagenames
- */
- function listCategory($base, $category, $info = false, $channel = false)
- {
- if ($info == false) {
- $url = '%s'.'c/%s/packages.xml';
- } else {
- $url = '%s'.'c/%s/packagesinfo.xml';
- }
- $url = sprintf($url,
- $base,
- urlencode($category));
- // gives '404 Not Found' error when category doesn't exist
- $packagelist = $this->_rest->retrieveData($url, false, false, $channel);
- if (PEAR::isError($packagelist)) {
- return $packagelist;
- }
- if (!is_array($packagelist)) {
- return array();
- }
- if ($info == false) {
- if (!isset($packagelist['p'])) {
- return array();
- }
- if (!is_array($packagelist['p']) ||
- !isset($packagelist['p'][0])) { // only 1 pkg
- $packagelist = array($packagelist['p']);
- } else {
- $packagelist = $packagelist['p'];
- }
- return $packagelist;
- }
- // info == true
- if (!isset($packagelist['pi'])) {
- return array();
- }
- if (!is_array($packagelist['pi']) ||
- !isset($packagelist['pi'][0])) { // only 1 pkg
- $packagelist_pre = array($packagelist['pi']);
- } else {
- $packagelist_pre = $packagelist['pi'];
- }
- $packagelist = array();
- foreach ($packagelist_pre as $i => $item) {
- // compatibility with r/<latest.txt>.xml
- if (isset($item['a']['r'][0])) {
- // multiple releases
- $item['p']['v'] = $item['a']['r'][0]['v'];
- $item['p']['st'] = $item['a']['r'][0]['s'];
- } elseif (isset($item['a'])) {
- // first and only release
- $item['p']['v'] = $item['a']['r']['v'];
- $item['p']['st'] = $item['a']['r']['s'];
- }
- $packagelist[$i] = array('attribs' => $item['p']['r'],
- '_content' => $item['p']['n'],
- 'info' => $item['p']);
- }
- return $packagelist;
- }
- /**
- * Return an array containing all of the states that are more stable than
- * or equal to the passed in state
- *
- * @param string Release state
- * @param boolean Determines whether to include $state in the list
- * @return false|array False if $state is not a valid release state
- */
- function betterStates($state, $include = false)
- {
- static $states = array('snapshot', 'devel', 'alpha', 'beta', 'stable');
- $i = array_search($state, $states);
- if ($i === false) {
- return false;
- }
- if ($include) {
- $i--;
- }
- return array_slice($states, $i + 1);
- }
- }
- ?>