13 namespace Fossology\UI\Api\Controllers;
36 use Psr\Http\Message\ServerRequestInterface;
37 use Symfony\Component\HttpFoundation\Response;
61 private $clearingDecisionEventProcessor;
73 $this->clearingDao = $this->container->get(
'dao.clearing');
74 $this->licenseDao = $this->container->get(
'dao.license');
75 $this->highlightDao = $this->container->get(
"dao.highlight");
76 $this->clearingDecisionEventProcessor = $this->container->get(
'businessrules.clearing_decision_processor');
77 $this->decisionTypes = $this->container->get(
'decision.types');
89 public function viewLicenseFile($request, $response, $args)
91 $uploadId = intval($args[
'id']);
92 $itemId = intval($args[
'itemId']);
98 $view = $this->restHelper->getPlugin(
'view');
101 if (empty($inputFile)) {
103 $reunpackPlugin = &$Plugins[plugin_find_id(
"ui_reunpack")];
104 $state = $reunpackPlugin->CheckStatus($uploadId,
"reunpack",
"ununpack");
105 if ($state != 0 && $state != 2) {
106 $errorMess = _(
"Reunpack job is running: you can see it in");
108 $errorMess = _(
"File contents are not available in the repository.");
110 throw new HttpInternalServerErrorException($errorMess);
114 $res = $view->getText($inputFile, 0, 0, -1,
null,
false,
true);
115 $response->getBody()->write($res);
116 return $response->withHeader(
"Content-Type",
"text/plain")
117 ->withHeader(
"Cache-Control",
"max-age=1296000, must-revalidate")
118 ->withHeader(
"Etag", md5($response->getBody()));
130 public function setClearingDecision($request, $response, $args)
132 $uploadId = intval($args[
'id']);
136 $decisionType = $body[
'decisionType'];
137 $global = $body[
'globalDecision'];
140 if ($global !==
null && !is_bool($global)) {
141 throw new HttpBadRequestException(
"GlobalDecision should be a boolean");
144 $uploadTreeId = intval($args[
'itemId']);
147 if (!array_key_exists($decisionType, $this->decisionTypes->getMap())) {
148 throw new HttpBadRequestException(
149 "Decision Type should be one of the following keys: " .
150 implode(
", ", array_keys($this->decisionTypes->getMap())));
155 $viewLicensePlugin = $this->restHelper->getPlugin(
'view-license');
156 $_GET[
'clearingTypes'] = $decisionType;
157 $_GET[
'globalDecision'] = $global ? 1 : 0;
158 $viewLicensePlugin->updateLastItem($this->restHelper->getUserId(), $this->restHelper->getGroupId(), $uploadTreeId, $uploadTreeId);
159 $returnVal =
new Info(200,
"Successfully set decision", InfoType::INFO);
160 return $response->withJson($returnVal->getArray(), $returnVal->getCode());
174 $uploadTreeId = intval($args[
'itemId']);
175 $uploadId = intval($args[
'id']);
176 $query = $request->getQueryParams();
177 $uploadDao = $this->restHelper->getUploadDao();
183 if ($query[
'selection'] !==
null) {
184 $selection = $query[
'selection'];
185 if ($selection !=
"withLicenses" && $selection !=
"noClearing") {
187 "selection should be either 'withLicenses' or 'noClearing'");
191 $options = array(
'skipThese' => $selection ==
"withLicenses" ?
"noLicense" : ($selection ==
"noClearing" ?
"alreadyCleared" :
""),
'groupId' => $this->restHelper->getGroupId());
193 $prevItem = $uploadDao->getPreviousItem($uploadId, $uploadTreeId, $options);
194 $prevItemId = $prevItem ? $prevItem->getId() :
null;
196 $nextItem = $uploadDao->getNextItem($uploadId, $uploadTreeId, $options);
197 $nextItemId = $nextItem ? $nextItem->getId() :
null;
200 "prevItemId" => $prevItemId,
201 "nextItemId" => $nextItemId
203 return $response->withJson($res, 200);
217 $uploadTreeId = intval($args[
'itemId']);
218 $uploadId = intval($args[
'id']);
219 $uploadDao = $this->restHelper->getUploadDao();
220 $clearingDao = $this->container->get(
'dao.clearing');
225 $uploadTreeTableName = $uploadDao->getUploadtreeTableName($uploadId);
226 $itemTreeBounds = $uploadDao->getItemTreeBounds($uploadTreeId, $uploadTreeTableName);
228 $res = $clearingDao->getBulkHistory($itemTreeBounds, $this->restHelper->getGroupId());
231 foreach ($res as $value) {
233 intval($value[
'bulkId']),
234 intval($value[
'id']),
238 $value[
'addedLicenses'],
239 $value[
'removedLicenses']);
240 $updatedRes[] = $obj->getArray();
242 return $response->withJson($updatedRes, 200);
256 $itemId = intval($args[
'itemId']);
257 $uploadId = intval($args[
'id']);
258 $uploadDao = $this->restHelper->getUploadDao();
259 $clearingDao = $this->container->get(
'dao.clearing');
264 $itemTreeBounds = $uploadDao->getItemTreeBoundsFromUploadId($itemId, $uploadId);
265 $clearingDecWithLicenses = $clearingDao->getFileClearings($itemTreeBounds, $this->restHelper->getGroupId(),
false,
true);
270 foreach ($clearingDecWithLicenses as $clearingDecision) {
271 $removedLicenses = [];
274 foreach ($clearingDecision->getClearingLicenses() as $lic) {
275 $shortName = $lic->getShortName();
276 $lic->isRemoved() ? $removedLicenses[] = $shortName : $addedLicenses[] = $shortName;
278 ksort($removedLicenses, SORT_STRING);
279 ksort($addedLicenses, SORT_STRING);
281 date(
'Y-m-d', $clearingDecision->getTimeStamp()),
282 $clearingDecision->getUserName(),
283 $scope->getTypeName($clearingDecision->getScope()),
284 $this->decisionTypes->getConstantNameFromKey($clearingDecision->getType()),
285 $addedLicenses, $removedLicenses);
286 $data[] = $obj->getArray();
288 return $response->withJson($data, 200);
300 public function getHighlightEntries($request, $response, $args)
302 $uploadTreeId = intval($args[
'itemId']);
303 $uploadId = intval($args[
'id']);
304 $query = $request->getQueryParams();
305 $uploadDao = $this->restHelper->getUploadDao();
310 $agentId = $query[
'agentId'] ??
null;
311 $highlightId = $query[
'highlightId'] ??
null;
312 $licenseId = $query[
'licenseId'] ??
null;
313 $clearingId = $query[
'clearingId'] ??
null;
315 if ($licenseId !==
null && !$this->dbHelper->doesIdExist(
"license_ref",
"rf_pk", $licenseId)) {
318 if ($highlightId !==
null && !$this->dbHelper->doesIdExist(
"highlight",
"fl_fk", $highlightId)) {
319 throw new HttpNotFoundException(
"Highlight does not exist");
321 if ($agentId !==
null && !$this->dbHelper->doesIdExist(
"agent",
"agent_pk", $agentId)) {
322 throw new HttpNotFoundException(
"Agent does not exist");
324 if ($clearingId !==
null && !$this->dbHelper->doesIdExist(
"clearing_event",
"clearing_event_pk", $clearingId)) {
325 throw new HttpNotFoundException(
"Clearing does not exist");
328 $uploadTreeTableName = $uploadDao->getUploadtreeTableName($uploadId);
329 $itemTreeBounds = $uploadDao->getItemTreeBounds($uploadTreeId, $uploadTreeTableName);
331 $viewLicensePlugin = $this->restHelper->getPlugin(
'view-license');
332 $res = $viewLicensePlugin->getSelectedHighlighting($itemTreeBounds, $licenseId,
333 $agentId, $highlightId, $clearingId, $uploadId);
335 $transformedRes = [];
336 foreach ($res as $value) {
337 $transformedRes[] = $value->getArray();
339 return $response->withJson($transformedRes, 200);
351 public function getTreeView($request, $response, $args)
353 $uploadTreeId = intval($args[
'itemId']);
354 $uploadId = intval($args[
'id']);
355 $query = $request->getQueryParams();
356 $agentId = $query[
'agentId'] ??
null;
357 $flatten = $query[
'flatten'] ??
null;
358 $scanFilter = $query[
'scanLicenseFilter'] ??
null;
359 $editedFilter = $query[
'editedLicenseFilter'] ??
null;
360 $sortDir = $query[
'sort'] ??
null;
362 $page = $query[
'page'] ??
null;
363 $limit = $query[
'limit'] ??
null;
365 $page = $request->getHeaderLine(
'page');
366 $limit = $request->getHeaderLine(
'limit');
368 $tagId = $query[
'tagId'] ??
null;
369 $sSearch = $query[
'search'] ??
null;
370 $openCBoxFilter = $query[
'filterOpen'] ??
null;
371 $show = ($query[
'showQuick'] !==
null && $query[
'showQuick'] !==
'false') ?
true :
null;
372 $licenseDao = $this->container->get(
'dao.license');
374 $uploadDao = $this->restHelper->getUploadDao();
379 if ($agentId !==
null && !$this->dbHelper->doesIdExist(
"agent",
"agent_pk", $agentId)) {
380 throw new HttpNotFoundException(
"Agent does not exist");
382 if ($tagId !==
null && !$this->dbHelper->doesIdExist(
"tag",
"tag_pk", $tagId)) {
383 throw new HttpNotFoundException(
"Tag does not exist");
385 if ($openCBoxFilter !==
null && ($openCBoxFilter !==
'true' && $openCBoxFilter !==
'false')) {
386 throw new HttpBadRequestException(
"openCBoxFilter must be a boolean value");
388 if ($flatten !==
null && ($flatten !==
'true' && $flatten !==
'false')) {
389 throw new HttpBadRequestException(
"flatten must be a boolean value");
391 if ($sortDir !=
null && !($sortDir ==
"asc" || $sortDir ==
"desc")) {
392 throw new HttpBadRequestException(
"sortDirection must be asc or desc");
394 if ($page !=
null && (!is_numeric($page) || intval($page) < 1)) {
395 throw new HttpBadRequestException(
"page should be positive integer Greater or Equal to 1");
397 if ($show !=
null && $show !=
'true' && $show !=
'false') {
398 throw new HttpBadRequestException(
"show must be a boolean value");
400 if ($limit !=
null && (!is_numeric($limit) || intval($limit) < 1)) {
401 throw new HttpBadRequestException(
"limit should be positive integer Greater or Equal to 1");
403 $queryKeys = array_keys($query);
404 $allowedKeys = [
'showQuick',
'agentId',
'flatten',
'scanLicenseFilter',
'editedLicenseFilter',
'sort',
'tagId',
'search',
'filterOpen'];
405 $diff = array_diff($queryKeys, $allowedKeys);
406 if (count($diff) > 0) {
407 throw new HttpBadRequestException(
"Invalid query parameter(s) : " . implode(
",", $diff));
410 if ($editedFilter !==
null) {
411 $license =
$licenseDao->getLicenseByShortName($editedFilter, $this->restHelper->getGroupId());
412 if ($license ===
null) {
413 throw new HttpNotFoundException(
"Edited License filter $editedFilter does not exist");
415 $editedFilter = $license->getId();
418 if ($scanFilter !==
null) {
419 $license =
$licenseDao->getLicenseByShortName($scanFilter, $this->restHelper->getGroupId());
420 if ($license ===
null) {
421 throw new HttpNotFoundException(
"Scan License filter $scanFilter does not exist");
423 $scanFilter = $license->getId();
429 if ($limit ==
null) {
434 $uploadTreeId = $uploadDao->getFatItemId($uploadTreeId, $uploadId, $uploadDao->getUploadtreeTableName($uploadId));
438 $ajaxExplorerPlugin = $this->restHelper->getPlugin(
'ajax_explorer');
439 $symfonyRequest = new \Symfony\Component\HttpFoundation\Request();
440 $symfonyRequest->request->set(
'agentId', $agentId);
441 $symfonyRequest->request->set(
'tag', $tagId);
442 $symfonyRequest->request->set(
'item', $uploadTreeId);
443 $symfonyRequest->request->set(
'upload', $uploadId);
444 $symfonyRequest->request->set(
'fromRest',
true);
445 $symfonyRequest->request->set(
'flatten', ($flatten !==
null && $flatten !==
'false') ?
true :
null);
446 $symfonyRequest->request->set(
'openCBoxFilter', $openCBoxFilter);
447 $symfonyRequest->request->set(
'show', $show ?
"quick" :
null);
448 $symfonyRequest->request->set(
'iSortingCols',
"1");
449 $symfonyRequest->request->set(
'bSortable_0',
"true");
450 $symfonyRequest->request->set(
'iSortCol_0',
"0");
451 $symfonyRequest->request->set(
'sSortDir_0', $sortDir !=
null ? $sortDir :
'asc');
452 $symfonyRequest->request->set(
'iDisplayStart', (intval($page) - 1) * intval($limit));
453 $symfonyRequest->request->set(
'iDisplayLength', intval($limit));
454 $symfonyRequest->request->set(
"sSearch", $sSearch);
455 $symfonyRequest->request->set(
"conFilter", $editedFilter);
456 $symfonyRequest->request->set(
"scanFilter", $scanFilter);
458 $res = $ajaxExplorerPlugin->handle($symfonyRequest);
460 return $response->withJson(json_decode($res->getContent(),
true)[
"aaData"], 200);
474 $uploadTreeId = intval($args[
'itemId']);
475 $uploadPk = intval($args[
'id']);
476 $uploadDao = $this->restHelper->getUploadDao();
482 $itemTreeBounds = $uploadDao->getItemTreeBoundsFromUploadId($uploadTreeId, $uploadPk);
483 if ($itemTreeBounds->containsFiles()) {
487 list ($addedClearingResults, $removedLicenses) = $this->clearingDecisionEventProcessor->getCurrentClearings(
488 $itemTreeBounds, $this->restHelper->getGroupId(), LicenseMap::CONCLUSION);
493 foreach ($addedClearingResults as $item) {
494 $mergedArray[] = [
'item' => $item,
'isRemoved' =>
false];
497 foreach ($removedLicenses as $item) {
498 $mergedArray[] = [
'item' => $item,
'isRemoved' =>
true];
501 $mainLicIds = $this->clearingDao->getMainLicenseIds($uploadPk, $this->restHelper->getGroupId());
503 foreach ($mergedArray as $item) {
504 $clearingResult = $item[
'item'];
505 $licenseShortName = $clearingResult->getLicenseShortName();
506 $licenseId = $clearingResult->getLicenseId();
511 $acknowledgement =
"";
513 if ($clearingResult->hasClearingEvent()) {
514 $licenseDecisionEvent = $clearingResult->getClearingEvent();
515 $types[] = $this->getEventInfo($licenseDecisionEvent, $licenseEventTypes);
516 $reportInfo = $licenseDecisionEvent->getReportinfo();
517 $comment = $licenseDecisionEvent->getComment();
518 $acknowledgement = $licenseDecisionEvent->getAcknowledgement();
521 $obligations = $this->licenseDao->getLicenseObligations([$licenseId],
false);
522 $obligations = array_merge($obligations, $this->licenseDao->getLicenseObligations([$licenseId],
true));
523 $obligationList = [];
524 foreach ($obligations as $obligation) {
526 $obligation[
'ob_pk'],
527 $obligation[
'ob_topic'],
528 $obligation[
'ob_type'],
529 $obligation[
'ob_text'],
530 $obligation[
'ob_classification'],
531 $obligation[
'ob_comment']
534 $license = $this->licenseDao->getLicenseById($licenseId);
538 $license->getFullName(),
539 $item[
'isRemoved'] ?
'-' : (!empty($reportInfo) ? $reportInfo : $license->getText()),
542 $item[
'isRemoved'] ?
'-' : $acknowledgement,
543 $item[
'isRemoved'] ?
'-' : $comment,
544 in_array($license->getId(), $mainLicIds),
549 $licenses[] = $licenseObj->getArray();
551 return $response->withJson($licenses, 200);
560 $agentResults = array();
562 $agentId = $agentDecisionEvent->getAgentId();
563 $matchId = $agentDecisionEvent->getMatchId();
564 $highlightRegion = $this->highlightDao->getHighlightRegion($matchId);
566 $percentage = $agentDecisionEvent->getPercentage();
567 if ($highlightRegion[0] !=
"" && $highlightRegion[1] !=
"") {
568 $page = $this->highlightDao->getPageNumberOfHighlightEntry($matchId);
571 'name' => $agentDecisionEvent->getAgentName(),
572 'clearingId' =>
null,
573 'agentId' => $agentId,
574 'highlightId' => $matchId,
575 'page' => intval($page),
576 'percentage' => $percentage
578 $agentResults[] = $result;
580 return $agentResults;
583 private function getEventInfo($licenseDecisionEvent, $licenseEventTypes)
585 $type = $licenseEventTypes->getTypeName($licenseDecisionEvent->getEventType());
587 if ($licenseDecisionEvent->getEventType() == ClearingEventTypes::BULK) {
588 $eventId = $licenseDecisionEvent->getEventId();
592 'clearingId' => $eventId,
594 'highlightId' =>
null,
609 public function handleAddEditAndDeleteLicenseDecision($request, $response, $args)
612 $uploadTreeId = intval($args[
'itemId']);
613 $uploadId = intval($args[
'id']);
614 $uploadDao = $this->restHelper->getUploadDao();
622 throw new HttpBadRequestException(
"Request body is missing or empty.");
624 if (!is_array($body)) {
625 throw new HttpBadRequestException(
"Request body should be an array.");
628 $concludeLicensePlugin = $this->restHelper->getPlugin(
'conclude-license');
629 $res = $concludeLicensePlugin->getCurrentSelectedLicensesTableData($uploadDao->getItemTreeBoundsFromUploadId($uploadTreeId, $uploadId), $this->restHelper->getGroupId(),
true);
631 $existingLicenseIds = [];
632 foreach ($res as $license) {
633 $currId = $license[
'DT_RowId'];
634 $currId = explode(
',', $currId)[1];
635 $existingLicenseIds[] = intval($currId);
638 foreach (array_keys($body) as $index) {
639 $licenseReq = $body[$index];
641 $shortName = $licenseReq[
'shortName'];
642 if (empty($shortName)) {
643 $error =
new Info(400,
"Short name missing from the request #" . ($index + 1), InfoType::ERROR);
644 $errors[] = $error->getArray();
648 $existingLicense = $this->licenseDao->getLicenseByShortName($shortName, $this->restHelper->getGroupId());
649 if ($existingLicense ===
null) {
650 $error =
new Info(404,
"License file with short name '$shortName' not found.",
652 $errors[] = $error->getArray();
656 if (!isset($licenseReq[
'add'])) {
657 $error =
new Info(400,
"'add' property missing from the request #" . ($index + 1), InfoType::ERROR);
658 $errors[] = $error->getArray();
662 if ($licenseReq[
'add']) {
663 $columnsToUpdate = [];
664 if (isset($licenseReq[
'text'])) {
665 $columnsToUpdate[] = [
666 'columnId' =>
'reportinfo',
667 'value' => $licenseReq[
'text']
670 if (isset($licenseReq[
'ack'])) {
671 $columnsToUpdate[] = [
672 'columnId' =>
'acknowledgement',
673 'value' => $licenseReq[
'ack']
676 if (isset($licenseReq[
'comment'])) {
677 $columnsToUpdate[] = [
678 'columnId' =>
'comment',
679 'value' => $licenseReq[
'comment']
683 if (in_array($existingLicense->getId(), $existingLicenseIds)) {
685 foreach (array_keys($columnsToUpdate) as $colIdx) {
686 $this->clearingDao->updateClearingEvent($uploadTreeId, $this->restHelper->getUserId(), $this->restHelper->getGroupId(), $existingLicense->getId(), $columnsToUpdate[$colIdx][
'columnId'], $columnsToUpdate[$colIdx][
'value']);
687 if ($colIdx == count($columnsToUpdate) - 1 && count($columnsToUpdate) > 1) {
689 }
else if ($colIdx > 0 && count($columnsToUpdate) > 1) {
692 $valText .= $columnsToUpdate[$colIdx][
'columnId'];
694 $val =
new Info(200,
"Successfully updated " . $shortName .
"'s license " . $valText, InfoType::INFO);
696 $this->clearingDao->insertClearingEvent($uploadTreeId, $this->restHelper->getUserId(), $this->restHelper->getGroupId(), $existingLicense->getId(),
false);
697 foreach (array_keys($columnsToUpdate) as $colIdx) {
698 $this->clearingDao->updateClearingEvent($uploadTreeId, $this->restHelper->getUserId(), $this->restHelper->getGroupId(), $existingLicense->getId(), $columnsToUpdate[$colIdx][
'columnId'], $columnsToUpdate[$colIdx][
'value']);
700 $val =
new Info(200,
"Successfully added " . $shortName .
" as a new license decision.", InfoType::INFO);
703 if (!in_array($existingLicense->getId(), $existingLicenseIds)) {
704 $error =
new Info(404, $shortName .
" license does not exist on this item", InfoType::ERROR);
705 $errors[] = $error->getArray();
708 $this->clearingDao->insertClearingEvent($uploadTreeId, $this->restHelper->getUserId(), $this->restHelper->getGroupId(), $existingLicense->getId(),
true);
709 $val =
new Info(200,
"Successfully deleted " . $shortName .
" from license decision list.", InfoType::INFO);
711 $success[] = $val->getArray();
714 return $response->withJson([
715 'success' => $success,
729 public function scheduleBulkScan($request, $response, $args)
732 $uploadTreeId = intval($args[
'itemId']);
733 $uploadId = intval($args[
'id']);
734 $licenseDao = $this->container->get(
'dao.license');
745 $requiredFields = [
'bulkActions',
'refText',
'bulkScope',
'forceDecision',
'ignoreIrre',
'delimiters',
'scanOnlyFindings'];
747 foreach ($requiredFields as $field) {
748 if (!array_key_exists($field, $body)) {
750 $errors[] =
"$field should be given";
756 if ($body[
'refText'] ===
"") {
758 $errors[] =
"refText should not be empty";
761 if (!in_array($body[
'forceDecision'], [
true,
false]) || !in_array($body[
'ignoreIrre'], [
true,
false]) || !in_array($body[
'scanOnlyFindings'], [
true,
false])) {
763 $errors[] =
"forceDecision, ignoreIrre and scanOnlyFindings should be either true or false";
766 if (!is_string($body[
'delimiters'])) {
768 $errors[] =
"delimiters should be a string";
771 if (!in_array($body[
'bulkScope'], [
"folder",
"upload"])) {
773 $errors[] =
"bulkScope should be either folder or upload";
776 if (!is_array($body[
'bulkActions'])) {
778 $errors[] =
"bulkActions should be an array";
780 foreach ($body[
'bulkActions'] as &$license) {
781 $existingLicense =
$licenseDao->getLicenseByShortName($license[
'licenseShortName'],
782 $this->restHelper->getGroupId());
783 if ($existingLicense ==
null) {
785 $errors[] =
"License with short name " . $license[
'licenseShortName'] .
" does not exist";
786 }
else if ($license[
'licenseAction'] !=
null && !in_array($license[
'licenseAction'], [
"ADD",
"REMOVE"])) {
788 $errors[] =
"License action should be either ADD or REMOVE";
791 $license[
'licenseId'] = $existingLicense->getId();
792 $license[
'reportinfo'] = $license[
'licenseText'];
793 $license[
'action'] = $license[
'licenseAction'] ==
'REMOVE' ?
'Remove' :
'Add';
800 foreach ($errors as $error) {
801 $errorMess = $error .
"\n";
803 throw new HttpBadRequestException($errorMess);
806 $symfonyRequest = new \Symfony\Component\HttpFoundation\Request();
807 $symfonyRequest->request->set(
'bulkAction', $body[
'bulkActions']);
808 $symfonyRequest->request->set(
'refText', $body[
'refText']);
809 $symfonyRequest->request->set(
'bulkScope', $body[
'bulkScope'] ==
"folder" ?
'f' :
'u');
810 $symfonyRequest->request->set(
'uploadTreeId', $uploadTreeId);
811 $symfonyRequest->request->set(
'forceDecision', $body[
'forceDecision'] ? 1 : 0);
812 $symfonyRequest->request->set(
'ignoreIrre', $body[
'ignoreIrre'] ? 1 : 0);
813 $symfonyRequest->request->set(
'delimiters', $body[
'delimiters']);
814 $symfonyRequest->request->set(
'scanOnlyFindings', $body[
'scanOnlyFindings'] ? 1 : 0);
817 $changeLicenseBulk = $this->restHelper->getPlugin(
'change-license-bulk');
818 $res = $changeLicenseBulk->handle($symfonyRequest);
819 $status = $res->getStatusCode();
821 if ($status != 200) {
822 if ($status == Response::HTTP_BAD_REQUEST) {
823 throw new HttpBadRequestException(
824 json_decode($res->getContent(),
true)[
"error"]);
826 throw new HttpInternalServerErrorException(
827 json_decode($res->getContent(),
true)[
"error"]);
830 $info =
new Info(201, json_decode($res->getContent(),
true)[
"jqid"], InfoType::INFO);
831 return $response->withJson($info->getArray(), $info->getCode());
Utility functions to process ClearingDecision.
Wrapper class for license map.
Base controller for REST calls.
isItemExists(int $uploadId, int $itemId)
getParsedBody(ServerRequestInterface $request)
Parse request body as JSON and return associative PHP array.
Controller for UploadTree model.
getLicenseDecisions($request, $response, $args)
getBulkHistory($request, $response, $args)
getClearingHistory($request, $response, $args)
getAgentInfo(ClearingResult $licenseDecisionResult)
getNextPreviousItem($request, $response, $args)
Override Slim response for withJson function.
static getVersion(ServerRequestInterface $request)
Different type of infos provided by REST.
Info model to contain general error and return values.
RepPathItem($Item, $Repo="files")
Given an uploadtree_pk, retrieve the pfile path.