function saveAllReleasesREST($package) { require_once 'System.php'; require_once 'PEAR/PackageFile/Parser/v2.php'; require_once 'PEAR/Config.php'; global $dbh; $extra = '/rest/'; $pid = package::info($package, 'id'); $releases = $dbh->getAll('SELECT * FROM releases WHERE package = ? ORDER BY releasedate DESC', array($pid), DB_FETCHMODE_ASSOC); $rdir = $this->_restdir . DIRECTORY_SEPARATOR . 'r'; if (!is_dir($rdir)) { System::mkdir(array('-p', $rdir)); @chmod($rdir, 0777); } if (!$releases || !count($releases)) { // start from scratch, so that any pulled releases have their REST deleted System::rm(array('-r', $rdir . DIRECTORY_SEPARATOR . strtolower($package))); return; } $info = $this->_getAllReleasesRESTProlog($package); foreach ($releases as $release) { $packagexml = $dbh->getOne('SELECT packagexml FROM files WHERE package = ? AND `release` = ?', array($pid, $release['id'])); $extra = ''; if (strpos($packagexml, ' version="2.0"')) { // little quick hack to determine package.xml version $pkg = new PEAR_PackageFile_Parser_v2(); $config =& PEAR_Config::singleton(); $pkg->setConfig($config); // configuration is unused for this quick parse $pf = $pkg->parse($packagexml, ''); if (PEAR::isError($pf)) { return PEAR::raiseError(sprintf("Parsing the packagexml for release %s failed with error message: %s", $release['id'], $pf->getMessage())); } if ($compat = $pf->getCompatible()) { if (!isset($compat[0])) { $compat = array($compat); } foreach ($compat as $entry) { $extra .= '<co><c>' . $entry['channel'] . '</c>' . '<p>' . $entry['name'] . '</p>' . '<min>' . $entry['min'] . '</min>' . '<max>' . $entry['max'] . '</max>'; if (isset($entry['exclude'])) { if (!is_array($entry['exclude'])) { $entry['exclude'] = array($entry['exclude']); } foreach ($entry['exclude'] as $exclude) { $extra .= '<x>' . $exclude . '</x>'; } } $extra .= '</co> '; } } } if (!isset($latest)) { $latest = $release['version']; } if ($release['state'] == 'stable' && !isset($stable)) { $stable = $release['version']; } if ($release['state'] == 'beta' && !isset($beta)) { $beta = $release['version']; } if ($release['state'] == 'alpha' && !isset($alpha)) { $alpha = $release['version']; } $info .= ' <r><v>' . $release['version'] . '</v><s>' . $release['state'] . '</s>' . $extra . '</r> '; } $info .= '</a>'; if (!is_dir($rdir . DIRECTORY_SEPARATOR . strtolower($package))) { System::mkdir(array('-p', $rdir . DIRECTORY_SEPARATOR . strtolower($package))); @chmod($rdir . DIRECTORY_SEPARATOR . strtolower($package), 0777); } file_put_contents($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'allreleases.xml', $info); @chmod($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'allreleases.xml', 0666); file_put_contents($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'latest.txt', $latest); @chmod($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'latest.txt', 0666); // remove .txt in case all releases of this stability were deleted @unlink($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'stable.txt'); @unlink($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'beta.txt'); @unlink($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'alpha.txt'); if (isset($stable)) { file_put_contents($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'stable.txt', $stable); @chmod($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'stable.txt', 0666); } if (isset($beta)) { file_put_contents($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'beta.txt', $beta); @chmod($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'beta.txt', 0666); } if (isset($alpha)) { file_put_contents($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'alpha.txt', $alpha); @chmod($rdir . DIRECTORY_SEPARATOR . strtolower($package) . DIRECTORY_SEPARATOR . 'alpha.txt', 0666); } }
public function saveAllReleasesREST($package) { require_once 'PEAR/PackageFile/Parser/v2.php'; require_once 'PEAR/Config.php'; include_once 'pear-database-package.php'; $pid = package::info($package, 'id'); $releases = $this->db->getAll('SELECT * FROM releases WHERE package = ? ORDER BY releasedate DESC', array($pid), DB_FETCHMODE_ASSOC); if (PEAR::isError($releases)) { return $releases; } $deps = $this->db->getAssoc('SELECT `release`, `version` FROM deps WHERE package = ? AND type="php" and relation="ge"', false, array($pid)); if (PEAR::isError($deps)) { return $releases; } $rdir = $this->getReleaseDirectory(); if (!is_dir($rdir)) { if (!mkdir($rdir, 0777, true)) { return PEAR::raiseError('Creating directory ' . $rdir . ' failed - Check the permissions'); } @chmod($rdir, 0777); } if (!$releases || !count($releases)) { // start from scratch, so that any pulled releases have their REST deleted require_once 'System.php'; System::rm(array('-r', $rdir . strtolower($package))); return; } $info = $this->_getAllReleasesRESTProlog($package); $info2 = $this->_getAllReleases2RESTProlog($package); foreach ($releases as $release) { $packagexml = $this->db->getOne('SELECT packagexml FROM files WHERE package = ? AND `release` = ?', array($pid, $release['id'])); if (PEAR::isError($packagexml)) { return $packagexml; } $extra = ''; if (strpos($packagexml, ' version="2.0"')) { // little quick hack to determine package.xml version $pkg = new PEAR_PackageFile_Parser_v2(); $config =& PEAR_Config::singleton(); $pkg->setConfig($config); // configuration is unused for this quick parse $pf = $pkg->parse($packagexml, ''); if ($compat = $pf->getCompatible()) { if (!isset($compat[0])) { $compat = array($compat); } foreach ($compat as $entry) { $extra .= '<co><c>' . $entry['channel'] . '</c>' . '<p>' . $entry['name'] . '</p>' . '<min>' . $entry['min'] . '</min>' . '<max>' . $entry['max'] . '</max>'; if (isset($entry['exclude'])) { if (!is_array($entry['exclude'])) { $entry['exclude'] = array($entry['exclude']); } foreach ($entry['exclude'] as $exclude) { $extra .= '<x>' . $exclude . '</x>'; } } $extra .= '</co> '; } } } if (!isset($latest)) { $latest = $release['version']; } if ($release['state'] == 'stable' && !isset($stable)) { $stable = $release['version']; } if ($release['state'] == 'beta' && !isset($beta)) { $beta = $release['version']; } if ($release['state'] == 'alpha' && !isset($alpha)) { $alpha = $release['version']; } $info .= ' <r><v>' . $release['version'] . '</v><s>' . $release['state'] . '</s>' . $extra . '</r> '; $phpdep = isset($deps[$release['id']]) ? $deps[$release['id']] : '4.0.0'; $info2 .= ' <r><v>' . $release['version'] . '</v><s>' . $release['state'] . '</s>' . '<m>' . $phpdep . '</m>' . $extra . '</r> '; } $info .= '</a>'; $info2 .= '</a>'; $dir = $rdir . strtolower($package) . DIRECTORY_SEPARATOR; if (!is_dir($dir)) { if (!mkdir($dir, 0777, true)) { return PEAR::raiseError('Creating directory ' . $dir . ' failed - Check the permissions'); } @chmod($dir, 0777); } if (!file_put_contents($dir . 'allreleases.xml', $info)) { return PEAR::raiseError('Writing file ' . $dir . 'allreleases.xml failed - Check the permissions'); } @chmod($dir . 'allreleases.xml', 0666); if (!file_put_contents($dir . 'allreleases2.xml', $info2)) { return PEAR::raiseError('Writing file ' . $dir . 'allreleases2.xml failed - Check the permissions'); } @chmod($dir . 'allreleases2.xml', 0666); if (!file_put_contents($dir . 'latest.txt', $latest)) { return PEAR::raiseError('Writing file ' . $dir . 'latest.txt failed - Check the permissions'); } @chmod($dir . 'latest.txt', 0666); // remove .txt in case all releases of this stability were deleted @unlink($dir . 'stable.txt'); @unlink($dir . 'beta.txt'); @unlink($dir . 'alpha.txt'); if (isset($stable)) { if (!file_put_contents($dir . 'stable.txt', $stable)) { return PEAR::raiseError('Writing file ' . $dir . 'stable.txt failed - Check the permissions'); } @chmod($dir . 'stable.txt', 0666); } if (isset($beta)) { if (!file_put_contents($dir . 'beta.txt', $beta)) { return PEAR::raiseError('Writing file ' . $dir . 'beta.txt failed - Check the permissions'); } @chmod($dir . 'beta.txt', 0666); } if (isset($alpha)) { if (!file_put_contents($dir . 'alpha.txt', $alpha)) { return PEAR::raiseError('Writing file ' . $dir . 'alpha.txt failed - Check the permissions'); } @chmod($dir . 'alpha.txt', 0666); } }
/** * (non-PHPdoc) * @see lib/Faett/Core/Interfaces/Faett_Core_Interfaces_Service#packageFile($package) */ public function packageFile($package) { // initialize the archive $tar = new Archive_Tar($package); // try to load the content of the package2.xml file $contents = $tar->extractInString($packageFileName = 'package2.xml'); // if not available, try to load from package.xml file if (!$contents) { $contents = $tar->extractInString($packageFileName = 'package.xml'); } // initialize the parser for the package file and parse it $pkg = new PEAR_PackageFile_Parser_v2(); $pkg->setConfig($this->getConfig()); $pf = $pkg->parse($contents, $packageFileName); // check if errors occurs and throw an exception if necessary if (PEAR::isError($pf)) { throw Faett_Core_Exceptions_InvalidPackageFileException::create($pf->getMessage()); } // validate the package if (!$pf->validate()) { // initialize the string for the errors and warnings $errors = ''; // concatenate the message foreach ($pf->getValidationWarnings() as $warning) { $errors .= PHP_EOL . ucfirst($warning['level']) . ': ' . $warning['message']; } // throw an exception with the warnings throw Faett_Core_Exceptions_InvalidPackageFileException::create($errors); } // return the package file return $pf; }