Skip to content

Commit

Permalink
feat(spasht): Change UI and remove some steps
Browse files Browse the repository at this point in the history
1. Did a cosmetic update on UI and removed additional step for selecting
   a package and hitting schedule agent by simply "Select & schedule".
2. Allow user to rescan a package with a new revision.

Signed-off-by: Gaurav Mishra <mishra.gaurav@siemens.com>
  • Loading branch information
GMishx committed Jul 30, 2020
1 parent a7908a6 commit 758ed16
Show file tree
Hide file tree
Showing 12 changed files with 386 additions and 264 deletions.
12 changes: 9 additions & 3 deletions src/lib/php/Dao/SpashtDao.php
Expand Up @@ -49,7 +49,14 @@ public function addComponentRevision($revisionBody, $uploadID)
{
$statement = __METHOD__.".AddingNewRevision";

$params = [ $revisionBody['body_revision'], $revisionBody['body_namespace'], $revisionBody['body_name'], $revisionBody['body_type'], $revisionBody['body_provider'], $uploadID ];
$params = [
$revisionBody['body_revision'],
$revisionBody['body_namespace'],
$revisionBody['body_name'],
$revisionBody['body_type'],
$revisionBody['body_provider'],
$uploadID
];

$sql = "INSERT INTO spasht ".
"(spasht_revision, spasht_namespace, spasht_name, spasht_type, spasht_provider, upload_fk)".
Expand Down Expand Up @@ -94,15 +101,14 @@ public function getComponent($uploadID)
/**
* Get Spasht ars status for Upload id
*/

public function getSpashtArs($uploadID)
{
$statement = __METHOD__.".CheckUpload";

$params = [ $uploadID ];

$sql = "SELECT * FROM spasht_ars ".
"WHERE upload_fk = $1";
"WHERE upload_fk = $1 ORDER BY ars_pk DESC;";

$row = $this->dbManager->getSingleRow($sql, $params, $statement);
return ($row);
Expand Down
65 changes: 46 additions & 19 deletions src/spasht/agent/SpashtAgent.php
Expand Up @@ -77,8 +77,16 @@ function processUploadId($uploadId)
}

$uploadAvailable = $this->searchUploadIdInSpasht($uploadId);
if ($uploadAvailable === false) {
// Nothing to perform
return true;
}

$getNewResult = $this->getInformation($uploadAvailable, $pfileSha1AndpfileId);
$getNewResult = $this->getInformation($uploadAvailable, $pfileSha1AndpfileId);
if (is_string($getNewResult)) {
echo "Error: $getNewResult";
return false;
}

$resultUploadIntoLicenseTable = $this->insertLicensesSpashtAgentRecord(
$getNewResult, $agentId);
Expand Down Expand Up @@ -180,7 +188,6 @@ protected function getInformation($details, $pfileSha1AndpfileId)
}
$newResultBody[] = $temp;
}
$this->heartbeat(1);
}

return $newResultBody;
Expand All @@ -199,17 +206,16 @@ protected function sperateLicenses($key)
foreach ($checkString as $license) {
if ($license === "AND" || $license === "OR") {
continue;
} else {
$strSubLicense = explode("-", $license);

if ($strSubLicense[2] === "or" && $strSubLicense[3] === "later") {
$license = $strSubLicense[0] . "-" . $strSubLicense[1] . "+";
} elseif ($strSubLicense[2] === "only") {
$license = $strSubLicense[0] . "-" . $strSubLicense[1];
}
}
$strSubLicense = explode("-", $license);

$strLicense[] = $license;
if ($strSubLicense[2] === "or" && $strSubLicense[3] === "later") {
$license = $strSubLicense[0] . "-" . $strSubLicense[1] . "+";
} elseif ($strSubLicense[2] === "only") {
$license = $strSubLicense[0] . "-" . $strSubLicense[1];
}

$strLicense[] = $license;
}
return $strLicense;
}
Expand All @@ -227,14 +233,21 @@ protected function insertLicensesSpashtAgentRecord($body, $agentId)
foreach ($key['license'] as $license) {
$l = $this->licenseDao->getLicenseByShortName($license);

if ($l != null) {
if (! empty($l->getId())) {
$this->dbManager->insertTableRow('license_file', [
'agent_fk' => $agentId,
'pfile_fk' => $key['pfileId'],
'rf_fk' => $l->getId()
]);
if ($l != null && ! empty($l->getId())) {
$sql = "SELECT fl_pk FROM license_file " .
"WHERE agent_fk = $1 AND pfile_fk = $2 AND rf_fk = $3;";
$statement = __METHOD__ . ".checkExists";
$row = $this->dbManager->getSingleRow($sql,
[$agentId, $key['pfileId'], $l->getId()], $statement);
if (! empty($row) && ! empty($row['fl_pk'])) {
continue;
}
$this->dbManager->insertTableRow('license_file', [
'agent_fk' => $agentId,
'pfile_fk' => $key['pfileId'],
'rf_fk' => $l->getId()
], __METHOD__ . ".insertLicense");
$this->heartbeat(1);
}
}
}
Expand All @@ -252,15 +265,29 @@ protected function insertCopyrightSpashtAgentRecord($body, $agentId)
{
foreach ($body as $key) {
foreach ($key['attributions'] as $keyCopyright) {
if ($keyCopyright == "No_Copyright_Found") {
continue;
}

$hashForCopyright = hash("sha256", $keyCopyright);
$sql = "SELECT copyright_spasht_pk FROM copyright_spasht " .
"WHERE agent_fk = $1 AND pfile_fk = $2 AND hash = $3 " .
"AND clearing_decision_type_fk = 0;";
$statement = __METHOD__ . ".checkExists";
$row = $this->dbManager->getSingleRow($sql,
[$agentId, $key['pfileId'], $hashForCopyright], $statement);
if (! empty($row) && ! empty($row['copyright_spasht_pk'])) {
continue;
}
$this->dbManager->insertTableRow('copyright_spasht',
[
'agent_fk' => $agentId,
'pfile_fk' => $key['pfileId'],
'textfinding' => $keyCopyright,
'hash' => $hashForCopyright,
'clearing_decision_type_fk' => 0
]);
], __METHOD__ . ".insertCopyright");
$this->heartbeat(1);
}
}
return true;
Expand Down
26 changes: 24 additions & 2 deletions src/spasht/ui/agent-spasht.php
Expand Up @@ -22,11 +22,13 @@
use Fossology\Lib\Db\DbManager;
use Fossology\Lib\Plugin\AgentPlugin;

include_once(dirname(__DIR__) . "/agent/version.php");

class SpashtAgentPlugin extends AgentPlugin
{
public function __construct()
{
$this->Name = "agent_spasht";
$this->Name = "spasht";
$this->Title = _("Spasht Analysis");
$this->AgentName = "spasht";

Expand All @@ -45,14 +47,34 @@ function preInstall()
return false;
}

/**
* Agent can be rescheduled for a new package. No need to check
* AgentHasResults()
*
* @copydoc Fossology::Lib::Plugin::AgentPlugin::AgentAdd()
* @see Fossology::Lib::Plugin::AgentPlugin::AgentAdd()
*/
public function AgentAdd($jobId, $uploadId, &$errorMsg, $dependencies=array(), $arguments=null)
{
$dependencies[] = "agent_adj2nest";

$jobQueueId = \IsAlreadyScheduled($jobId, $this->AgentName, $uploadId);
if ($jobQueueId != 0) {
return $jobQueueId;
}

$args = is_array($arguments) ? '' : $arguments;
return $this->doAgentAdd($jobId, $uploadId, $errorMsg, $dependencies, $uploadId, $args);
}


/**
* @copydoc Fossology::Lib::Plugin::AgentPlugin::AgentHasResults()
* @see Fossology::Lib::Plugin::AgentPlugin::AgentHasResults()
*/
function AgentHasResults($uploadId=0)
{
return CheckARS($uploadId, $this->AgentName, "spasht scanner", "spasht_ars");
return CheckARS($uploadId, $this->AgentName, "spasht agent", "spasht_ars");
}
}

Expand Down
19 changes: 13 additions & 6 deletions src/spasht/ui/template/agent_spasht.js.twig
Expand Up @@ -8,19 +8,26 @@

<script>
$("#advanceSearchForm").ready(function() {
$("#advanceSearchForm").hide();
$(".ui-icon-caret-1-n").hide();
})
if ($("#advanceSearchFormStatus").val() === "hidden") {
$(".ui-icon-caret-1-n").hide();
$(".ui-icon-caret-1-s").show();
$("#advanceSearchForm").hide();
} else {
$(".ui-icon-caret-1-n").show();
$(".ui-icon-caret-1-s").hide();
$("#advanceSearchForm").show();
}
});
function advanceSearchFormEnabled() {
if (document.getElementById("advanceSearchFormStatus").value === "hidden") {
if ($("#advanceSearchFormStatus").val() === "hidden") {
$(".ui-icon-caret-1-s").hide();
$(".ui-icon-caret-1-n").show();
document.getElementById("advanceSearchFormStatus").value = "shown";
$("#advanceSearchFormStatus").val("shown");
} else {
$(".ui-icon-caret-1-n").hide();
$(".ui-icon-caret-1-s").show();
document.getElementById("advanceSearchFormStatus").value = "hidden";
$("#advanceSearchFormStatus").val("hidden");
}
$("#advanceSearchForm").toggle("blind");
}
Expand Down
82 changes: 49 additions & 33 deletions src/spasht/ui/template/agent_spasht_search.html.twig
Expand Up @@ -7,40 +7,56 @@
#}

<form id="searchForm" method="post" action="">
<span class="searchBoxText">Name: </span>
<input type="text" name="patternName" value= {{ uploadName }} size="30"/>
<span class="ui-icon ui-icon-caret-1-s" onclick="advanceSearchFormEnabled()"></span>
<span class="ui-icon ui-icon-caret-1-n" onclick="advanceSearchFormEnabled()"></span>
<input type="submit" value="Search" class="buttonLink" style="cursor:pointer;float:none"/>

<table id="advanceSearchForm" class="advanceSearchForm searchBoxText left-align-cells">
<tr>
<td>Namespace:</td>
<td>
<input type="text" name="namespaceName" size="30"/>
</td>
</tr>
<tr>
<td>Revision:</td>
<td>
<input type="text" name="revisionName" size="30"/>
</td>
</tr>
<tr>
<td>Type:</td>
<td>
<input type="text" name="typeName" size="30"/>
</td>
</tr>
<tr>
<td>Provider:</td>
<td>
<input type="text" name="providerName" size="30"/>
</td>
</tr>
<table class="left-align-cells searchBoxText searchTable">
<tbody>
<tr>
<td>Name:</td>
<td><input type="text" name="patternName" value="{{ uploadName }}" size="30"/></td>
<td>
<span class="ui-icon ui-icon-caret-1-s" onclick="advanceSearchFormEnabled()"></span>
<span class="ui-icon ui-icon-caret-1-n" onclick="advanceSearchFormEnabled()"></span>
</td>
<td><input type="submit" value="Search" class="buttonLink" style="cursor:pointer;float:none"/></td>
</tr>
</tbody>
</table>
<table id="advanceSearchForm" class="left-align-cells searchBoxText searchTable" style="position:relative">
<tbody>
<tr>
<td>Namespace:</td>
<td>
<input type="text" name="namespaceName" value="{{ namespaceName }}" size="30"/>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>Revision:</td>
<td>
<input type="text" name="revisionName" value="{{ revisionName }}" size="30"/>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>Type:</td>
<td>
<input type="text" name="typeName" value="{{ typeName }}" size="30"/>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>Provider:</td>
<td>
<input type="text" name="providerName" value="{{ providerName }}" size="30"/>
</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<input id="uploadAvailable" type="hidden" name="uploadAvailable" value={{ uploadAvailable }} />
<input id="advanceSearchFormStatus" type="hidden" name="advanceSearchFormStatus" value="hidden" />
<input id="advanceSearchFormStatus" type="hidden" name="advanceSearchFormStatus" value="{{ advanceSearchFormStatus }}" />

</form>

Expand Down

0 comments on commit 758ed16

Please sign in to comment.