Exemplo n.º 1
0
 /**
  * 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'];
 }
Exemplo n.º 2
0
    /**
     * 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);
    }