} else { if (isset($_POST['tags']) && is_array($_POST['tags'])) { $manager = new Tags_Manager(); $manager->clearTags($_POST['name']); foreach ($_POST['tags'] as $tag) { if (!$tag) { continue; } $manager->createPackageTag($tag, $_POST['name']); } } include_once 'pear-rest.php'; $pear_rest = new pearweb_Channel_REST_Generator(PEAR_REST_PATH, $dbh); $pear_rest->saveAllPackagesREST(); $pear_rest->savePackageREST($_POST['name']); $pear_rest->savePackagesCategoryREST(package::info($_POST['name'], 'category')); report_success('Package information successfully updated.'); } } } else { if (isset($_GET['action'])) { switch ($_GET['action']) { case 'release_remove': if (!isset($_GET['release'])) { report_error('Missing package ID!'); break; } include_once 'pear-database-release.php'; if (release::remove($_GET['id'], $_GET['release'])) { echo "<b>Release successfully deleted.</b><br /><br />\n"; } else {
$pear_rest->saveAllReleasesREST($package); echo "done\n"; foreach ($releases as $version => $blah) { $sql = 'SELECT fullpath FROM files WHERE `release` = ?'; $fileinfo = $dbh->getOne($sql, array($blah['id'])); $tar =& new Archive_Tar($fileinfo); if ($pxml = $tar->extractInString('package2.xml')) { } elseif ($pxml = $tar->extractInString('package.xml')) { } PEAR::pushErrorHandling(PEAR_ERROR_RETURN); $pf = $pkg->fromAnyFile($fileinfo, PEAR_VALIDATE_NORMAL); PEAR::popErrorHandling(); if (!PEAR::isError($pf)) { echo " Version {$version}..."; $pear_rest->saveReleaseREST($fileinfo, $pxml, $pf, $blah['doneby'], $blah['id']); echo "done\n"; } else { echo " Skipping INVALID Version {$version}\n"; } } echo "\n"; } else { echo " done\n"; } } echo "Generating Category Package REST...\n"; foreach (category::listAll() as $category) { echo " {$category['name']}..."; $pear_rest->savePackagesCategoryREST($category['name']); echo "done\n"; }
/** * Updates fields of an existant package * * @param int $pkgid The package ID to update * @param array $data Assoc in the form 'field' => 'value'. * @return mixed True or PEAR_Error */ static function updateInfo($pkgid, $data) { global $dbh, $auth_user; $package_id = package::info($pkgid, 'id'); if (PEAR::isError($package_id) || empty($package_id)) { return PEAR::raiseError('Package not registered or not approved. Please register it first with "New Package" or wait until it gets approved.'); } if ($auth_user->isAdmin() === false && $auth_user->isQA() === false) { include_once 'pear-database-user.php'; $role = user::maintains($auth_user->handle, $package_id); if ($role != 'lead' && $role != 'developer') { return PEAR::raiseError('package::updateInfo: insufficient privileges'); } } // XXX (cox) what about 'name'? $allowed = array('license', 'summary', 'description', 'category'); $fields = $prep = array(); foreach ($allowed as $a) { if (isset($data[$a])) { $fields[] = "{$a} = ?"; $prep[] = $data[$a]; } } if (!count($fields)) { return; } $sql = 'UPDATE packages SET ' . implode(', ', $fields) . " WHERE id = {$package_id}"; $row = package::info($pkgid, 'name'); include_once 'pear-rest.php'; $pear_rest = new pearweb_Channel_REST_Generator(PEAR_REST_PATH, $dbh); $pear_rest->saveAllPackagesREST(); $pear_rest->savePackageREST($row); $pear_rest->savePackagesCategoryREST(package::info($pkgid, 'category')); return $dbh->query($sql, $prep); }
/** * Remove release * * @param integer ID of the package * @param integer ID of the release * @return boolean */ static function remove($package, $release) { global $dbh, $auth_user; include_once 'pear-database-user.php'; if (!$auth_user->isAdmin() && !$auth_user->isQA() && !user::maintains($auth_user->handle, $package, 'lead')) { return PEAR::raiseError('release::remove: insufficient privileges'); } // get files that have to be removed $sql = 'SELECT fullpath FROM files WHERE package = ? AND `release` = ?'; $sth = $dbh->query($sql, array($package, $release)); // Should we error out if the removal fails ? $success = true; while ($row = $sth->fetchRow(DB_FETCHMODE_ASSOC)) { if (!@unlink($row['fullpath'])) { $success = false; } } $sql = 'DELETE FROM files WHERE package = ? AND `release` = ?'; $sth = $dbh->query($sql, array($package, $release)); $sql = 'SELECT version from releases WHERE package = ? and id = ?'; $version = $dbh->getOne($sql, array($package, $release)); $query = 'DELETE FROM releases WHERE package = ? AND id = ?'; $sth = $dbh->query($query, array($package, $release)); // remove statistics on this release $dbh->query('DELETE FROM package_stats WHERE pid = ? AND rid = ?', array($package, $release)); $dbh->query('DELETE FROM aggregated_package_stats WHERE package_id = ? AND release_id = ?', array($package, $release)); include_once 'pear-database-package.php'; $pname = package::info($package, 'name'); include_once 'pear-rest.php'; $pear_rest = new pearweb_Channel_REST_Generator(PEAR_REST_PATH, $dbh); $pear_rest->saveAllReleasesREST($pname); $pear_rest->deleteReleaseREST($pname, $version); $pear_rest->savePackagesCategoryREST(package::info($pname, 'category')); if (PEAR::isError($sth)) { return false; } return true; }
/** * Updates a categories details * * @param integer $id Category ID * @param string $name Category name * @param string $desc Category Description * @return mixed True on success, pear_error otherwise */ static function update($id, $name, $desc = '') { global $dbh; $sql = 'SELECT name FROM categories WHERE id = ?'; $data = $GLOBALS['dbh']->getOne($sql, array($id)); include_once 'pear-rest.php'; $pear_rest = new pearweb_Channel_REST_Generator(PEAR_REST_PATH, $dbh); $pear_rest->deleteCategoryREST($data); $sql = 'UPDATE categories SET name = ?, description = ? WHERE id = ?'; $ret = $GLOBALS['dbh']->query($sql, array($name, $desc, $id)); $pear_rest->saveCategoryREST($name); $pear_rest->saveAllCategoriesREST(); $pear_rest->savePackagesCategoryREST($name); return $ret; }