public function process() { if ($_SERVER['argc'] < 2) { $this->printUsage(); return false; } switch ($_SERVER['argv'][1]) { case 'update': $this->handleUpdate(); break; case 'create': return $this->handleCreate(); case 'add-maintainer': $scs = new PEAR2_SimpleChannelServer($this->channel, $this->dir); // is this even needed? break; case 'add-category': PEAR2_SimpleChannelServer_Categories::create($category, $description); break; case 'release': $this->handleRelease(); break; default: echo 'Please use one of the following commands:' . PHP_EOL; $this->printUsage(); break; } }
/** * Save package REST based on a release * * @param \PEAR2\Pyrus\Package $new */ function saveInfo(\PEAR2\Pyrus\Package $new) { $reader = new \PEAR2\Pyrus\XMLParser; $deprecated = false; if (file_exists($this->rest . DIRECTORY_SEPARATOR . 'p' . DIRECTORY_SEPARATOR . 'info.xml')) { $oldinfo = $reader->parse($this->rest . DIRECTORY_SEPARATOR . 'p' . DIRECTORY_SEPARATOR . 'info.xml'); if (isset($oldinfo['p']['dp'])) { $deprecated = array('dp' => $oldinfo['p']['dp'], 'dc' => $oldinfo['p']['dc']); } } $xml = array(); $xml['n'] = $new->name; $xml['c'] = $this->channel; try { $category = PEAR2_SimpleChannelServer_Categories::getPackageCategory($new->name); } catch (PEAR2_SimpleChannelServer_Categories_Exception $e) { $categories = PEAR2_SimpleChannelServer_Categories::create('Default', 'This is the default category'); $categories->linkPackageToCategory($new->name,'Default'); $category = PEAR2_SimpleChannelServer_Categories::getPackageCategory($new->name); } $xml['ca'] = array( 'attribs' => array('xlink:href' => $this->getCategoryRESTLink($category)), '_content' => $category, ); $xml['l'] = $new->license['name']; $xml['s'] = $new->summary; $xml['d'] = $new->description; $xml['r'] = array('attribs' => $this->getReleaseRESTLink(strtolower($new->name))); if ($a = $new->extends) { $xml['pa'] = array('attribs' => array('xlink:href' => $this->getPackageRESTLink(strtolower($a) . '/info.xml')), '_content' => $a); } $xmlinf = $this->_getProlog('p', 'package'); $xml['attribs'] = $xmlinf['p']['attribs']; $xml = array('p' => $xml); $this->savePackageREST(strtolower($new->name) . '/info.xml', $xml); }
/** * save rest.release2 release REST * * @param \PEAR2\Pyrus\Package $new package to be saved * @param string $releaser releasing maintainer's handle * * @return void */ function saveInfo2(\PEAR2\Pyrus\Package $new, $releaser) { $xml = $this->_getProlog('r', 'release2'); $xml['r']['p'] = array( 'attribs' => array( 'xlink:href' => $this->getPackageRESTLink(strtolower($new->name)) ), '_content' => $new->name); $xml['r']['c'] = $this->channel; $category = PEAR2_SimpleChannelServer_Categories::getPackageCategory($new->name); $xml['r']['v'] = $new->version['release']; $xml['r']['a'] = $new->version['api']; $xml['r']['mp'] = $new->dependencies['required']->php->min; $xml['r']['st'] = $new->stability['release']; $xml['r']['l'] = $new->license['name']; $xml['r']['m'] = $releaser; $xml['r']['s'] = $new->summary; $xml['r']['d'] = $new->description; $xml['r']['da'] = $new->date . ' ' . $new->time; $xml['r']['n'] = $new->notes; $xml['r']['f'] = filesize($new->archivefile); $xml['r']['g'] = 'http://' . $this->channel . '/get/' . $new->name . '-' . $new->version['release']; $xml['r']['x'] = array('attribs' => array( 'xlink:href' => 'package.' . $new->version['release'] . '.xml' )); $this->saveReleaseREST(strtolower($new->name) . '/v2.' . $new->version['release'] . '.xml', $xml); }
/** * 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); }
/** * called after serialized and woken up * * @return void */ function __wakeup() { self::$_category = $this; }