/** * List all packages, or all packages in a category * * @param string|null $category null to list all packages * * @return array */ function listPackages($category = null) { if ($category) { return PEAR2_SimpleChannelServer_Categories::packagesInCategory($category); } if (!file_exists($this->rest->getRESTPath('p', 'allpackages.xml'))) { return array(); } try { $list = $reader->parse($this->rest->getRESTPath('p', 'allpackages.xml')); } catch (Exception $e) { throw new PEAR2_SimpleChannelServer_Exception('Unable to list packages', $e); } return $list['a']['p']; }
/** * Save packagesinfo.xml for a category * * @param string $category Category to update packages info for * * @return void */ function savePackagesInfo($category) { $xml = array(); $pdir = $this->rest . DIRECTORY_SEPARATOR . 'p'; $rdir = $this->rest . DIRECTORY_SEPARATOR . 'r'; $packages = PEAR2_SimpleChannelServer_Categories::packagesInCategory($category); $reader = new \PEAR2\Pyrus\XMLParser; clearstatcache(); $xml['pi'] = array(); foreach ($packages as $package) { $next = array(); if (!file_exists($pdir . DIRECTORY_SEPARATOR . strtolower($package['name']) . DIRECTORY_SEPARATOR . 'info.xml')) { continue; } $f = $reader->parse($pdir . DIRECTORY_SEPARATOR . strtolower($package['name']) . DIRECTORY_SEPARATOR . 'info.xml'); unset($f['p']['attribs']); $next['p'] = $f['p']; if (file_exists($rdir . DIRECTORY_SEPARATOR . strtolower($package['name']) . DIRECTORY_SEPARATOR . 'allreleases.xml')) { $r = $reader->parse($rdir . DIRECTORY_SEPARATOR . strtolower($package['name']) . DIRECTORY_SEPARATOR . 'allreleases.xml'); unset($r['a']['attribs']); unset($r['a']['p']); unset($r['a']['c']); $next['a'] = $r['a']; $dirhandle = opendir($rdir . DIRECTORY_SEPARATOR . strtolower($package['name'])); while (false !== ($entry = readdir($dirhandle))) { if (strpos($entry, 'deps.') === 0) { $version = str_replace(array('deps.', '.txt'), array('', ''), $entry); $next['deps'] = array(); $next['deps']['v'] = $version; $next['deps']['d'] = file_get_contents($rdir . DIRECTORY_SEPARATOR . strtolower($package['name']) . DIRECTORY_SEPARATOR . $entry); } } } $xml['pi'][] = $next; } $xmlinf = $this->_getProlog('f', 'categorypackageinfo'); $xmlinf['f'][] = $xml; $this->saveCategoryREST($category . DIRECTORY_SEPARATOR . 'packagesinfo.xml', $xmlinf); }