Skip to content

Commit

Permalink
Merge pull request fossology#2875 from Siemens-Healthineers/feat/search
Browse files Browse the repository at this point in the history
refactor(search): refactor search page

Reviewed-by: shaheem.azmal@siemens.com
Tested-by: shaheem.azmal@siemens.com
  • Loading branch information
shaheemazmalmmd authored Dec 17, 2024
2 parents ed40d0f + 3f7440e commit 554071e
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 48 deletions.
94 changes: 51 additions & 43 deletions src/lib/php/Dao/SearchHelperDao.php
Original file line number Diff line number Diff line change
Expand Up @@ -64,16 +64,17 @@ public function GetResults($Item, $Filename, $Upload, $tag, $Page, $Limit, $Size
}
}

/* Start the result select stmt */
$SQL = "SELECT DISTINCT uploadtree_pk, parent, upload_fk, uploadtree.pfile_fk, ufile_mode, ufile_name FROM uploadtree";
$SQLBase = "SELECT DISTINCT uploadtree_pk, parent, upload_fk, uploadtree.pfile_fk, ufile_mode, ufile_name FROM uploadtree";
$SQLWhere = " ";
$SQLOrderLimitOffset = "";

if ($searchtype != "directory") {
if (!empty($License)) {
$SQL .= ", ( SELECT license_ref.rf_shortname, license_file.rf_fk, license_file.pfile_fk
$SQLWhere .= ", ( SELECT license_ref.rf_shortname, license_file.rf_fk, license_file.pfile_fk
FROM license_file JOIN license_ref ON license_file.rf_fk = license_ref.rf_pk) AS pfile_ref";
}
if (!empty($Copyright)) {
$SQL .= ",copyright";
$SQLWhere .= ",copyright";
}
}

Expand All @@ -94,7 +95,7 @@ public function GetResults($Item, $Filename, $Upload, $tag, $Page, $Limit, $Size
/* tag_file didn't have data, don't add the tag_file table for tag query */
$NeedTagfileTable = false;
} else {
$SQL .= ", tag_file";
$SQLWhere .= ", tag_file";
}

/* add the tables needed for the tag query */
Expand All @@ -104,133 +105,142 @@ public function GetResults($Item, $Filename, $Upload, $tag, $Page, $Limit, $Size
/* tag_uploadtree didn't have data, don't add the tag_uploadtree table for tag query */
$NeedTaguploadtreeTable = false;
} else {
$SQL .= ", tag_uploadtree";
$SQLWhere .= ", tag_uploadtree";
}

if (!$NeedTagfileTable && !$NeedTaguploadtreeTable) {
$SQL .= ", tag_file, tag_uploadtree";
$SQLWhere .= ", tag_file, tag_uploadtree";
}
}

/* do we need the pfile table? Yes, if any of these are a search critieria. */
if (!empty($SizeMin) or !empty($SizeMax)) {
$SQL .= ", pfile where pfile_pk=uploadtree.pfile_fk ";
$SQLWhere .= ", pfile where pfile_pk=uploadtree.pfile_fk ";
$NeedAnd = true;
} else {
$SQL .= " where ";
$SQLWhere .= " where ";
$NeedAnd = false;
}

/* add the tag conditions */
if (!empty($tag)) {
if ($NeedAnd) {
$SQL .= " AND";
$SQLWhere .= " AND";
}
$SQL .= "(";
$SQLWhere .= "(";
$NeedOr = false;
foreach ($tag_pk_array as $tagRec) {
if ($NeedOr) {
$SQL .= " OR";
$SQLWhere .= " OR";
}
$SQL .= "(";
$SQLWhere .= "(";
$tag_pk = $tagRec['tag_pk'];
if ($NeedTagfileTable && $NeedTaguploadtreeTable) {
$SQL .= "(uploadtree.pfile_fk=tag_file.pfile_fk and tag_file.tag_fk=$tag_pk) or (uploadtree_pk=tag_uploadtree.uploadtree_fk and tag_uploadtree.tag_fk=$tag_pk) ";
$SQLWhere .= "(uploadtree.pfile_fk=tag_file.pfile_fk and tag_file.tag_fk=$tag_pk) or (uploadtree_pk=tag_uploadtree.uploadtree_fk and tag_uploadtree.tag_fk=$tag_pk) ";
} else if ($NeedTaguploadtreeTable) {
$SQL .= "uploadtree_pk=tag_uploadtree.uploadtree_fk and tag_uploadtree.tag_fk=$tag_pk";
$SQLWhere .= "uploadtree_pk=tag_uploadtree.uploadtree_fk and tag_uploadtree.tag_fk=$tag_pk";
} else if ($NeedTagfileTable) {
$SQL .= "uploadtree.pfile_fk=tag_file.pfile_fk and tag_file.tag_fk=$tag_pk";
$SQLWhere .= "uploadtree.pfile_fk=tag_file.pfile_fk and tag_file.tag_fk=$tag_pk";
} else {
$SQL .= "(uploadtree.pfile_fk=tag_file.pfile_fk and tag_file.tag_fk=$tag_pk) or (uploadtree_pk=tag_uploadtree.uploadtree_fk and tag_uploadtree.tag_fk=$tag_pk) ";
$SQLWhere .= "(uploadtree.pfile_fk=tag_file.pfile_fk and tag_file.tag_fk=$tag_pk) or (uploadtree_pk=tag_uploadtree.uploadtree_fk and tag_uploadtree.tag_fk=$tag_pk) ";
}
$SQL .= ")";
$SQLWhere .= ")";
$NeedOr = 1;
}
$NeedAnd = 1;
$SQL .= ")";
$SQLWhere .= ")";
}

if ($Filename) {
if ($NeedAnd) {
$SQL .= " AND";
$SQLWhere .= " AND";
}
$SQL .= " ufile_name ilike '" . $Filename . "'";
$SQLWhere .= " ufile_name ilike '" . $Filename . "'";
$NeedAnd = 1;
}

if ($Upload != 0) {
if ($NeedAnd) {
$SQL .= " AND";
$SQLWhere .= " AND";
}
$SQL .= " upload_fk = " . $Upload . "";
$SQLWhere .= " upload_fk = " . $Upload . "";
$NeedAnd = 1;
}

if (!empty($SizeMin) && is_numeric($SizeMin)) {
if ($NeedAnd) {
$SQL .= " AND";
$SQLWhere .= " AND";
}
$SQL .= " pfile.pfile_size >= " . $SizeMin;
$SQLWhere .= " pfile.pfile_size >= " . $SizeMin;
$NeedAnd = 1;
}

if (!empty($SizeMax) && is_numeric($SizeMax)) {
if ($NeedAnd) {
$SQL .= " AND";
$SQLWhere .= " AND";
}
$SQL .= " pfile.pfile_size <= " . $SizeMax;
$SQLWhere .= " pfile.pfile_size <= " . $SizeMax;
$NeedAnd = 1;
}

if ($Item) {
if ($NeedAnd) {
$SQL .= " AND";
$SQLWhere .= " AND";
}
$SQL .= " upload_fk = $upload_pk AND lft >= $lft AND rgt <= $rgt";
$SQLWhere .= " upload_fk = $upload_pk AND lft >= $lft AND rgt <= $rgt";
$NeedAnd = 1;
}

/* search only containers */
if ($searchtype == 'containers') {
if ($NeedAnd) {
$SQL .= " AND";
$SQLWhere .= " AND";
}
$SQL .= " ((ufile_mode & (1<<29))!=0) AND ((ufile_mode & (1<<28))=0)";
$SQLWhere .= " ((ufile_mode & (1<<29))!=0) AND ((ufile_mode & (1<<28))=0)";
$NeedAnd = 1;
}
$dir_ufile_mode = 536888320;
if ($searchtype == 'directory') {
if ($NeedAnd) {
$SQL .= " AND";
$SQLWhere .= " AND";
}
$SQL .= " ((ufile_mode & (1<<29))!=0) AND ((ufile_mode & (1<<28))=0) AND (ufile_mode != $dir_ufile_mode) and pfile_fk != 0";
$SQLWhere .= " ((ufile_mode & (1<<29))!=0) AND ((ufile_mode & (1<<28))=0) AND (ufile_mode != $dir_ufile_mode) and pfile_fk != 0";
$NeedAnd = 1;
}

/** license and copyright */
if ($searchtype != "directory") {
if (!empty($License)) {
if ($NeedAnd) {
$SQL .= " AND";
$SQLWhere .= " AND";
}

$SQL .= " uploadtree.pfile_fk=pfile_ref.pfile_fk and pfile_ref.rf_shortname ilike '" .
$SQLWhere .= " uploadtree.pfile_fk=pfile_ref.pfile_fk and pfile_ref.rf_shortname ilike '" .
pg_escape_string($License) . "'";
$NeedAnd = 1;
}
if (!empty($Copyright)) {
if ($NeedAnd) {
$SQL .= " AND";
$SQLWhere .= " AND";
}
$SQL .= " uploadtree.pfile_fk=copyright.pfile_fk and copyright.content ilike '%" .
$SQLWhere .= " uploadtree.pfile_fk=copyright.pfile_fk and copyright.content ilike '%" .
pg_escape_string($Copyright) . "%'";
}
}

$Offset = $Page * $Limit;
$stmt = __METHOD__.$Filename;
$SQL .= " ORDER BY ufile_name, uploadtree.pfile_fk";
$rows = $this->dbManager->getRows($SQL, [], $stmt);

$SQLOrderLimitOffset = " ORDER BY ufile_name, uploadtree.pfile_fk LIMIT $Limit OFFSET $Offset";
$PaginatedSQL = $SQLBase . $SQLWhere . $SQLOrderLimitOffset;

$CountSQL = "SELECT COUNT(DISTINCT uploadtree_pk) FROM uploadtree" . $SQLWhere;

$stmt = __METHOD__ . "_count";
$countRow = $this->dbManager->getSingleRow($CountSQL, [], $stmt);
$totalUploadtreeRecsCount = $countRow ? reset($countRow) : 0;

$stmt = __METHOD__ . "_paginated";
$rows = $this->dbManager->getRows($PaginatedSQL, [], $stmt);
if (!empty($rows)) {
foreach ($rows as $row) {
if (!$uploadDao->isAccessible($row['upload_fk'], $groupID)) {
Expand All @@ -239,8 +249,6 @@ public function GetResults($Item, $Filename, $Upload, $tag, $Page, $Limit, $Size
$totalUploadtreeRecs[] = $row;
}
}
$UploadtreeRecs = array_slice($totalUploadtreeRecs, $Offset, $Limit);
$totalUploadtreeRecsCount = sizeof($totalUploadtreeRecs);
return array($UploadtreeRecs, $totalUploadtreeRecsCount);
return array($totalUploadtreeRecs, $totalUploadtreeRecsCount);
}
}
17 changes: 12 additions & 5 deletions src/www/ui/search.php
Original file line number Diff line number Diff line change
Expand Up @@ -203,16 +203,24 @@ function Output()
$this->vars["Copyright"] = $Copyright;
}

$Limit = GetParm("limit",PARM_INTEGER);
$Page = GetParm("page",PARM_INTEGER);
$Limit = GetParm("limit", PARM_INTEGER);
if (!empty($Limit)) {
$GETvars .= "&limit=" . urlencode($Limit);
$this->MaxPerPage = $Limit;
}

$Page = GetParm("page", PARM_INTEGER);
if (!empty($Page)) {
$GETvars .= "&page=" . urlencode($Page);
}

$this->vars["postUrl"] = Traceback_uri() . "?mod=" . self::getName();

if ($CriteriaCount) {
if (empty($Page)) {
$Page = 0;
}
$UploadtreeRecsResult = $this->searchHelperDao->GetResults($Item, $Filename,$Upload, $tag, $Page, $Limit, $SizeMin,
$UploadtreeRecsResult = $this->searchHelperDao->GetResults($Item, $Filename, $Upload, $tag, $Page, $Limit, $SizeMin,
$SizeMax, $searchtype, $License, $Copyright, $this->uploadDao,
Auth::getGroupId());
$html = "<hr>\n";
Expand All @@ -221,8 +229,7 @@ function Output()
$html .= "<H4>$message</H4>\n";
$text = $UploadtreeRecsResult[1] . " " . _("Files matching");
$html .= "<H2>$text " . htmlentities($Filename) . " in ". htmlentities($SelectedUploadName) . "</H2>\n";
$html .= $this->HTMLResults($UploadtreeRecsResult[0], $Page, $GETvars,
$License, $Copyright);
$html .= $this->HTMLResults($UploadtreeRecsResult[0], $Page, $GETvars);
$this->vars["result"] = $html;
}
}
Expand Down

0 comments on commit 554071e

Please sign in to comment.