FOSSology  4.4.0
Open Source License Compliance by Open Source Software
SearchController.php
Go to the documentation of this file.
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2018 Siemens AG
4  Author: Gaurav Mishra <mishra.gaurav@siemens.com>
5 
6  SPDX-License-Identifier: GPL-2.0-only
7 */
13 namespace Fossology\UI\Api\Controllers;
14 
19 use Psr\Http\Message\ServerRequestInterface;
20 
26 {
28  private $searchHelperDao;
29 
39  public function performSearch($request, $response, $args)
40  {
41  $this->searchHelperDao = $this->container->get('dao.searchhelperdao');
42 
43  $searchType = $request->getHeaderLine("searchType");
44  $filename = $request->getHeaderLine("filename");
45  $tag = $request->getHeaderLine("tag");
46  $filesizeMin = $request->getHeaderLine("filesizemin");
47  $filesizeMax = $request->getHeaderLine("filesizemax");
48  $license = $request->getHeaderLine("license");
49  $copyright = $request->getHeaderLine("copyright");
50  $uploadId = $request->getHeaderLine("uploadId");
51  $page = $request->getHeaderLine("page");
52  $limit = $request->getHeaderLine("limit");
53 
54  // set searchtype to search allfiles by default
55  if (empty($searchType)) {
56  $searchType = "allfiles";
57  }
58 
59  // set uploadId to 0 - search in all files
60  if (empty($uploadId)) {
61  $uploadId = 0;
62  }
63 
64  /*
65  * check if at least one parameter was given
66  */
67  if (empty($filename) && empty($tag) && empty($filesizeMin) &&
68  empty($filesizeMax) && empty($license) && empty($copyright)) {
69  throw new HttpBadRequestException(
70  "At least one parameter, containing a value is required");
71  }
72 
73  /*
74  * check if filesizeMin && filesizeMax are numeric, if existing
75  */
76  if ((! empty($filesizeMin) && (! is_numeric($filesizeMin) || $filesizeMin < 0)) ||
77  (! empty($filesizeMax) && (! is_numeric($filesizeMax) || $filesizeMax < 0))) {
78  throw new HttpBadRequestException(
79  "filesizemin and filesizemax need to be positive integers!");
80  }
81 
82  /*
83  * check if page && limit are numeric, if existing
84  */
85  if ((! ($page==='') && (! is_numeric($page) || $page < 1)) ||
86  (! ($limit==='') && (! is_numeric($limit) || $limit < 1))) {
87  throw new HttpBadRequestException(
88  "page and limit need to be positive integers!");
89  }
90 
91  // set page to 1 by default
92  if (empty($page)) {
93  $page = 1;
94  }
95 
96  // set limit to 50 by default and max as 100
97  if (empty($limit)) {
98  $limit = 50;
99  } else if ($limit > 100) {
100  $limit = 100;
101  }
102 
103  $item = GetParm("item", PARM_INTEGER);
104  list($results, $count) = $this->searchHelperDao->GetResults($item,
105  $filename, $uploadId, $tag, $page-1, $limit,
106  $filesizeMin, $filesizeMax, $searchType, $license, $copyright,
107  $this->restHelper->getUploadDao(), $this->restHelper->getGroupId());
108  $totalPages = intval(ceil($count / $limit));
109 
110  $searchResults = [];
111  // rewrite it and add additional information about its parent upload
112  foreach ($results as $result) {
113  $currentUpload = $this->dbHelper->getUploads(
114  $this->restHelper->getUserId(), $this->restHelper->getGroupId(), 1, 1,
115  $result["upload_fk"], null, true)[1];
116  if (! empty($currentUpload)) {
117  $currentUpload = $currentUpload[0];
118  } else {
119  continue;
120  }
121  $uploadTreePk = $result["uploadtree_pk"];
122  $filename = $this->dbHelper->getFilenameFromUploadTree($uploadTreePk);
123  $currentResult = new SearchResult($currentUpload, $uploadTreePk, $filename);
124  $searchResults[] = $currentResult->getArray();
125  }
126  return $response->withHeader("X-Total-Pages", $totalPages)->withJson($searchResults, 200);
127  }
128 }
Base controller for REST calls.
Override Slim response for withJson function.
Model to hold search results.
const PARM_INTEGER
Definition: common-parm.php:14
GetParm($parameterName, $parameterType)
This function will retrieve the variables and check data types.
Definition: common-parm.php:46