18 use Symfony\Component\HttpFoundation\JsonResponse;
19 use \Symfony\Component\HttpFoundation\Request;
20 use Symfony\Component\HttpFoundation\Response;
24 const NAME =
"ajax_sh_browser";
26 private $uploadtree_tablename =
"";
44 protected $agentNames = array(
'softwareHeritage' =>
'SH');
46 public function __construct()
48 parent::__construct(self::NAME, array(
49 self::TITLE => _(
"Ajax: File Browser"),
50 self::DEPENDENCIES => array(
"fileBrowse"),
52 self::REQUIRES_LOGIN =>
false
55 $this->uploadDao = $this->
getObject(
'dao.upload');
56 $this->licenseDao = $this->
getObject(
'dao.license');
57 $this->agentDao = $this->
getObject(
'dao.agent');
58 $this->shDao = $this->container->get(
'dao.softwareHeritage');
59 $sysconfig = $GLOBALS[
'SysConf'][
'SYSCONFIG'];
60 $this->configuration = [
61 'url' =>
trim($sysconfig[
'SwhURL']),
62 'uri' =>
trim($sysconfig[
'SwhBaseURL']),
63 'content' =>
trim($sysconfig[
'SwhContent']),
64 'maxtime' => intval($sysconfig[
'SwhSleep']),
65 'token' =>
trim($sysconfig[
'SwhToken'])
73 public function handle(Request $request)
75 $upload = intval($request->get(
"upload"));
76 $groupId = Auth::getGroupId();
77 if (!$this->uploadDao->isAccessible($upload, $groupId)) {
78 throw new \Exception(
"Permission Denied");
81 $item = intval($request->get(
"item"));
84 $left = $itemTreeBounds->getLeft();
86 throw new \Exception(
"Job unpack/adj2nest hasn't completed.");
89 $scannerAgents = array_keys($this->agentNames);
90 $scanJobProxy =
new ScanJobProxy($this->agentDao, $upload);
91 $scanJobProxy->createAgentStatus($scannerAgents);
92 $selectedAgentId = intval($request->get(
'agentId'));
93 $tag_pk = intval($request->get(
'tag'));
95 $UniqueTagArray = array();
96 $this->licenseProjector =
new LicenseMap($this->
getObject(
'db.manager'),$groupId,LicenseMap::CONCLUSION,
true);
97 $vars = $this->
createFileListing($tag_pk, $itemTreeBounds, $UniqueTagArray, $selectedAgentId, $groupId, $scanJobProxy);
99 return new JsonResponse(array(
100 'sEcho' => intval($request->get(
'sEcho')),
101 'aaData' => $vars[
'fileData'],
102 'iTotalRecords' => $vars[
'iTotalDisplayRecords'],
103 'iTotalDisplayRecords' => $vars[
'iTotalDisplayRecords']
118 if (!empty($selectedAgentId)) {
119 $agentName = $this->agentDao->getAgentName($selectedAgentId);
120 $selectedScanners = array($agentName=>$selectedAgentId);
122 $selectedScanners = $scanJobProxy->getLatestSuccessfulAgentIds();
127 $isFlat = isset($_GET[
'flatten']);
130 $options = array(UploadTreeProxy::OPT_RANGE => $itemTreeBounds);
132 $options = array(UploadTreeProxy::OPT_REALPARENT => $itemTreeBounds->
getItemId());
137 $vars[
'iTotalDisplayRecords'] = $descendantView->count();
139 $columnNamesInDatabase = array($isFlat?
'ufile_name':
'lft');
140 $defaultOrder = array(array(0,
"asc"));
141 $orderString = $this->
getObject(
'utils.data_tables_utility')->getSortingString($_GET, $columnNamesInDatabase, $defaultOrder);
146 $orderString .=
" OFFSET $offset";
149 $orderString .=
" LIMIT $limit";
153 $sql = $descendantView->getDbViewQuery().
" $orderString";
154 $dbManager = $this->
getObject(
'db.manager');
156 $dbManager->prepare($stmt=__METHOD__.$orderString,$sql);
157 $res = $dbManager->execute($stmt,$descendantView->getParams());
158 $descendants = $dbManager->fetchAll($res);
159 $dbManager->freeResult($res);
162 if (!empty($tagId)) {
165 if (empty($descendants)) {
166 $vars[
'fileData'] = array();
171 $firstChild = reset($descendants);
172 $lastChild = end($descendants);
173 $nameRange = array($firstChild[
'ufile_name'],$lastChild[
'ufile_name']);
175 $nameRange = array();
179 $pfileLicenses = array();
180 foreach ($selectedScanners as $agentName=>$agentId) {
181 $licensePerPfile = $this->licenseDao->getLicenseIdPerPfileForAgentId($itemTreeBounds, $agentId, $isFlat, $nameRange);
182 foreach ($licensePerPfile as $pfile => $licenseRow) {
183 foreach ($licenseRow as $licId => $row) {
184 $lic = $this->licenseProjector->getProjectedShortname($licId);
185 $pfileLicenses[$pfile][$lic][$agentName] = $row;
192 $tableData = array();
193 $latestSuccessfulAgentIds = $scanJobProxy->getLatestSuccessfulAgentIds();
194 foreach ($descendants as $child) {
199 $baseUri, $UniqueTagArray, $isFlat);
202 $vars[
'fileData'] = $tableData;
215 private function createFileDataRow($child, $uploadId, $selectedAgentId, $uri, &$UniqueTagArray, $isFlat)
217 $fileId = $child[
'pfile_fk'];
218 $childUploadTreeId = $child[
'uploadtree_pk'];
220 if (!empty($fileId)) {
222 $linkUri .=
"?mod=view-license&upload=$uploadId&item=$childUploadTreeId";
223 if ($selectedAgentId) {
224 $linkUri .=
"&agentId=$selectedAgentId";
230 if ($isContainer && !$isFlat) {
231 $uploadtree_pk = $child[
'uploadtree_pk'];
232 $linkUri =
"$uri&item=" . $uploadtree_pk;
233 if ($selectedAgentId) {
234 $linkUri .=
"&agentId=$selectedAgentId";
236 }
else if ($isContainer) {
238 $linkUri =
"$uri&item=" . $uploadtree_pk;
239 if ($selectedAgentId) {
240 $linkUri .=
"&agentId=$selectedAgentId";
246 $fileName = htmlspecialchars($child[
'ufile_name']);
248 $fileName =
"<a href='$linkUri'><span style='color: darkblue'> <b>$fileName</b> </span></a>";
249 }
else if (! empty($linkUri)) {
250 $fileName =
"<a href='$linkUri'>$fileName</a>";
253 $pfileHash = $this->uploadDao->getUploadHashesFromPfileId($fileId);
254 $shRecord = $this->shDao->getSoftwareHetiageRecord($fileId);
257 if (! $isContainer) {
258 $text = _(
"Software Heritage");
259 $shLink = $this->configuration[
'url'] .
260 $this->configuration[
'uri'] . strtolower($pfileHash[
"sha256"]) .
261 $this->configuration[
'content'];
262 $fileListLinks .=
"[<a href='".$shLink.
"' target=\"_blank\">$text</a>]";
265 if (! $isContainer) {
266 $img = $shRecord[
"img"];
269 return [$fileName, $pfileHash[
"sha256"], $shRecord[
"license"], $img, $fileListLinks];
char * uploadtree_tablename
upload.uploadtree_tablename
createFileListing($tagId, ItemTreeBounds $itemTreeBounds, &$UniqueTagArray, $selectedAgentId, $groupId, $scanJobProxy)
createFileDataRow($child, $uploadId, $selectedAgentId, $uri, &$UniqueTagArray, $isFlat)
Contains the constants and helpers for authentication of user.
Wrapper class for license map.
DirGetNonArtifact($UploadtreePk, $uploadtree_tablename='uploadtree')
Given an artifact directory (uploadtree_pk), return the first non-artifact directory (uploadtree_pk).
FileListLinks($upload_fk, $uploadtree_pk, $napk, $pfile_pk, $Recurse=True, &$UniqueTagArray=array(), $uploadtree_tablename="uploadtree", $wantTags=true)
Get list of links: [View][Info][Download]
Traceback_uri()
Get the URI without query to this location.
GetParm($parameterName, $parameterType)
This function will retrieve the variables and check data types.
Traceback_parm_keep($List)
Create a new URI, keeping only these items.
char * trim(char *ptext)
Trimming whitespace.
#define PERM_READ
Read-only permission.