public function removeAction() { $id = isset($_POST["id"]) ? $_POST["id"] : null; $type = isset($_POST["type"]) ? $_POST["type"] : null; $userid = $this->session->userid; if ($_SERVER['REQUEST_METHOD'] != "POST" || $_SERVER["Repository_Enabled"] !== 'true' || is_numeric($userid) == false || is_numeric($id) === false || trim($type) == "") { header("Status: 404 Not Found"); return; } $type = strtolower(trim($type)); $isvalidRequest = false; switch ($type) { case "release": $isvalidRequest = Repository::canManageEntity($userid, $id, "release"); break; case "series": $isvalidRequest = Repository::canManageEntity($userid, $id, "repoarea"); break; default: break; } if (!$isvalidRequest) { header("Status: 404 Not Found"); return; } $output = ""; header("Content-Type: text/xml"); if ($type == "release") { $result = RepositoryBackend::removeRelease($id, $userid, $output); } else { $result = RepositoryBackend::removeSeries($id, $userid, $output); } echo $output; }
public static function removeRelease($id, $userid, &$output) { $params = array("releaseid" => $id, "action" => "remove"); $release = Repository::getReleaseById($id); if ($release === false) { return self::createErrorResponse("Cannot retrieve release", $output); } $repoareaid = $release->repoAreaId; //Check if release is in production if ($release->currentStateId == 2) { return self::createErrorResponse("Cannot remove release published into production", $output, $params); } //Check if it is a major release and has updates in the same series if ($release->parentId == 0) { $children = $release->getChildren(); if ($children !== null && count($children) > 0) { return self::createErrorResponse("Cannot remove base release in a series with update releases", $output, $params); } } $url = self::getBackendUrl() . "release/action/remove/" . $id . "/release"; $responsetext = web_get_contents($url); if (!$responsetext) { return self::createErrorResponse("Could not connect to community repository backend.", $output, $params); } $delres = Repository::call_delete_release($id, $userid); if ($delres !== true) { return self::createErrorResponse($delres, $output, $params); } //Check if parent repository area has any releases left. //If not then remove repository area as well. $repoarea = Repository::getRepositoryAreaById($repoareaid); if ($repoarea) { $releases = $repoarea->getReleases(); if (count($releases) == 0) { $output2 = ""; $delres = RepositoryBackend::removeSeries($repoareaid, $userid, $output2); if ($delres == false) { return self::createErrorResponse("Could not remove empty series.", $output, $params); } } } $params["seriesid"] = $repoareaid; RepositoryServices::AppDBSyncDeleteRelease($id); return self::createSuccessResponse($output, $params); }