public function itemAction() { $view = strtolower(isset($_GET["view"]) ? $_GET["view"] : "data"); $view = $view == "data" || $view == "html" ? $view : "data"; $id = isset($_GET["id"]) ? $_GET["id"] : null; $swid = isset($_GET["swid"]) ? $_GET["swid"] : null; if ($_SERVER['REQUEST_METHOD'] != "GET" || $_SERVER["Repository_Enabled"] !== 'true' || $view == "html" && is_numeric($this->session->userid) == false || is_numeric($swid) == false && is_numeric($id) == false) { header("Status: 404 Not Found"); return; } if ($id == null && $swid !== null) { $rl = new RestProductReleaseLatestItem(array("swid" => $swid)); } else { $rl = new RestProductReleaseItem(array("id" => $id)); } $res = $rl->getRawData(); if ($view == "data") { $this->_helper->viewRenderer->setNoRender(); if ($rl->getError() != RestErrorEnum::RE_OK) { switch ($rl->getError()) { case RestErrorEnum::RE_ACCESS_DENIED: break; } header("Status: 404 Not Found"); echo $rl->getError(); return; } else { header("Content-Type: text/xml"); echo $rl->get($res); } } else { $this->view->item = $res; } }
/** * handles PUT and POST HTTP methods to REST requests * * @method integer the method enumeration according to RestMethodEnum * * @return iRestResponse * @access private */ private function putpost($method) { $id = $this->getParam("id"); $name = $this->getParam("name"); $value = $this->getParam("value"); $rs = new Repository_Model_MetaProductReleases(); //TODO: replace equals(0) with is(null) if foreign key fixed $rs->filter->id->equals($id); $found = count($rs->items) > 0 ? true : false; if (!$found) { $this->setError(RestErrorEnum::RE_ITEM_NOT_FOUND); return false; } $r = $rs->items[0]; if (!$r instanceof Repository_Model_MetaProductRelease) { $this->setError(RestErrorEnum::RE_BACKEND_ERROR); return false; } db()->beginTransaction(); try { $r->{$name} = $value; $r->save(); db()->commit(); } catch (Exception $e) { db()->rollBack(); $this->setError(RestErrorEnum::RE_BACKEND_ERROR, $e->getMessage()); return false; } $res = new RestProductReleaseItem(array("id" => $id), $this); $ret = $res->get(); return $ret; }
public function uploadAction() { ob_start(); ob_get_clean(); ob_end_clean(); $this->_helper->viewRenderer->setNoRender(); $releaseid = $this->_getParam("releaseid"); $targetid = $this->_getParam("targetid"); $swid = $this->_getParam("swid"); $userid = $this->session->userid; if ($_SERVER["Repository_Enabled"] !== 'true' || is_numeric($this->session->userid) === false || is_numeric($releaseid) === false || is_numeric($targetid) === false || is_numeric($swid) === false || $releaseid <= 0 || $targetid <= 0 || $swid <= 0 || Repository::canManageRelease($swid, $userid) === false) { header("Status: 404 Not Found"); return; } //Get release $rl = new RestProductReleaseItem(array("id" => $releaseid)); $release = $rl->getRawData(); if (!$this->handleresterror($rl, "release")) { return; } //retrieve upload target directory $targetDir = RepositoryFS::getScratchSpaceForRelease($release, $error, true); $targetDir .= $targetid; //If cannot find or create the target upload directory... if ($targetDir === false) { return $this->chunkUploadResponse('{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "' . $error . '"}, "id" : "id"}'); } $file = $this->chunkUploadHandling($targetDir); if ($file === false) { return; } /***************************************************** * THIS CODE WILL BE REACHED IF UPLOADING IS COMPLETE * ******************************************************/ //check if release is a candidate revert it to unverified if ($release->currentStateId == 3) { RepositoryBackend::unpublish($release->id, "candidate", $output); //TODO: Send command to commrepo backend to remove candidate repositories } //get uploaded filename (full path) $fileName = isset($_REQUEST["name"]) ? $_REQUEST["name"] : ''; //Get target (os arch combination) $rl = new RestTargetItem(array("id" => $targetid)); $target = $rl->getRawData(); if (!$this->handleresterror($rl, "target")) { return; } $warnings = null; $res = RepositoryFS::storeUploadedFile($file, $release, $target, $userid, $warnings); ob_start(); ob_get_clean(); ob_end_clean(); header("Content-Type: text/xml"); if (file_exists($file)) { @unlink($file); } if ($res !== true && (is_numeric($res) === false || $res === false)) { echo '<repository datatype="item" content="upload" ><upload result="error" releaseid="' . $releaseid . '" targetid="' . $targetid . '" filename="' . $file . '" error="' . $res . '"></upload></repository>'; return; } echo '<repository datatype="item" content="upload"><upload result="success" releaseid="' . $releaseid . '" targetid="' . $targetid . '" filename="' . $file . '"'; if ($warnings !== null) { echo 'warning="' . $warnings . '"'; } echo '>'; $pcks = new Repository_Model_MetaPoaReleasePackages(); $pcks->filter->id->equals($res); if (count($pcks->items) > 0) { $pck = $pcks->items[0]; $xml = $pck->toXML(true); $xml = RepositoryXSLT::transform($xml, "poapackage"); debug_log($xml); echo $xml; } echo '</upload></repository>'; return; }