FOSSology  4.6.0-rc1
Open Source License Compliance by Open Source Software
reuser-plugin.php
Go to the documentation of this file.
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2014-2018 Siemens AG
4 
5  SPDX-License-Identifier: GPL-2.0-only
6 */
10 namespace Fossology\Reuser;
11 
15 use Symfony\Component\HttpFoundation\JsonResponse;
16 use Symfony\Component\HttpFoundation\Request;
17 use Symfony\Component\HttpFoundation\Response;
19 
20 include_once(__DIR__ . "/../agent/version.php");
21 
27 {
28  const NAME = "plugin_reuser";
29 
30  const REUSE_FOLDER_SELECTOR_NAME = 'reuseFolderSelectorName';
31  const UPLOAD_TO_REUSE_SELECTOR_NAME = 'uploadToReuse';
32  const FOLDER_PARAMETER_NAME = 'folder';
33 
39  private function extractPackageNameFromFilename($filename)
40  {
41  if (empty($filename)) {
42  return '';
43  }
44 
45  $nameWithoutExt = preg_replace('/\.[^.]+$/', '', $filename);
46  $parts = explode('-', $nameWithoutExt);
47  $packageName = strtolower($parts[0]);
48 
49  return $packageName;
50  }
51 
55  public $AgentName = 'agent_reuser';
59  private $folderDao;
60 
61  public function __construct()
62  {
63  parent::__construct(self::NAME, array(
64  self::TITLE => _("Automatic Clearing Decision Reuser"),
65  self::PERMISSION => Auth::PERM_WRITE
66  ));
67 
68  $this->folderDao = $this->getObject('dao.folder');
69  }
70 
78  function getAllUploads()
79  {
80  $allFolder = $this->folderDao->getAllFolderIds();
81  $result = array();
82  for ($i=0; $i < sizeof($allFolder); $i++) {
83  $listObject = $this->prepareFolderUploads($allFolder[$i]);
84  foreach ($listObject as $key => $value) {
85  $result[explode(",",$key)[0]] = $value;
86  }
87  }
88  return $result;
89  }
90 
95  protected function handle(Request $request)
96  {
97  $this->folderDao->ensureTopLevelFolder();
98  $ajax = $request->get('do');
99 
100  if ($ajax === 'getUploads') {
101  list($fid, $tgid) = $this->getFolderIdAndTrustGroup($request->get(self::FOLDER_PARAMETER_NAME, ''));
102  $uploads = (empty($fid) || empty($tgid))
103  ? $this->getAllUploads()
104  : $this->prepareFolderUploads($fid, $tgid);
105  return new JsonResponse($uploads, JsonResponse::HTTP_OK);
106  }
107 
108  if ($ajax === 'getOsselotVersions') {
109  $pkg = trim($request->get('pkg', $request->get('osselotPackage', '')));
110  if ($pkg === '') {
111  return new JsonResponse([], JsonResponse::HTTP_OK);
112  }
113  $helper = new OsselotLookupHelper();
114  try {
115  $versions = $helper->getVersions($pkg);
116  } catch (\Exception $e) {
117  $versions = [];
118  }
119  return new JsonResponse($versions, JsonResponse::HTTP_OK);
120  }
121 
122  if ($ajax === 'extractPackageName') {
123  $filename = trim($request->get('filename', ''));
124  if ($filename === '') {
125  return new JsonResponse(['packageName' => ''], JsonResponse::HTTP_OK);
126  }
127 
128  $packageName = $this->extractPackageNameFromFilename($filename);
129  return new JsonResponse(['packageName' => $packageName], JsonResponse::HTTP_OK);
130  }
131 
132  return new Response('called without valid method', Response::HTTP_METHOD_NOT_ALLOWED);
133  }
134 
140  public function getFolderIdAndTrustGroup($folderGroup)
141  {
142  $folderGroupPair = explode(',', $folderGroup,2);
143  if (count($folderGroupPair) == 2) {
144  list($folder, $trustGroup) = $folderGroupPair;
145  $folderId = intval($folder);
146  $trustGroupId = intval($trustGroup);
147  } else {
148  $trustGroupId = Auth::getGroupId();
149  $folderId = 0;
150  }
151  return array($folderId, $trustGroupId);
152  }
153 
159  public function renderContent(&$vars)
160  {
161  global $SysConf;
162  $osselotAvailable = (array_key_exists('EnableOsselotReuse', $SysConf['SYSCONFIG']) && $SysConf['SYSCONFIG']["EnableOsselotReuse"] === 'true');
163  if (!array_key_exists('folderStructure', $vars)) {
164  $rootFolderId = $this->folderDao->getRootFolder(Auth::getUserId())->getId();
165  $vars['folderStructure'] = $this->folderDao->getFolderStructure($rootFolderId);
166  }
167  if ($this->folderDao->isWithoutReusableFolders($vars['folderStructure'])) {
168  return '';
169  }
170  $pair = array_key_exists(self::FOLDER_PARAMETER_NAME, $vars) ? $vars[self::FOLDER_PARAMETER_NAME] : '';
171 
172  list($folderId, $trustGroupId) = $this->getFolderIdAndTrustGroup($pair);
173  if (empty($folderId) && !empty($vars['folderStructure'])) {
174  $folderId = $vars['folderStructure'][0][FolderDao::FOLDER_KEY]->getId();
175  }
176 
177  $vars['reuseFolderSelectorName'] = self::REUSE_FOLDER_SELECTOR_NAME;
178  $vars['folderParameterName'] = self::FOLDER_PARAMETER_NAME;
179  $vars['uploadToReuseSelectorName'] = self::UPLOAD_TO_REUSE_SELECTOR_NAME;
180  $vars['folderUploads'] = $this->prepareFolderUploads($folderId, $trustGroupId);
181  $vars['osselotAvailable'] = $osselotAvailable;
182  $vars['defaultPkgName'] = '';
183  $vars['userIsAdmin'] = Auth::isAdmin();
184 
185  $renderer = $this->getObject('twig.environment');
186  return $renderer->load('agent_reuser.html.twig')->render($vars);
187  }
188 
194  public function renderFoot(&$vars)
195  {
196  global $SysConf;
197  $osselotAvailable = (array_key_exists('EnableOsselotReuse', $SysConf['SYSCONFIG']) && $SysConf['SYSCONFIG']["EnableOsselotReuse"] === 'true');
198  $vars['reuseFolderSelectorName'] = self::REUSE_FOLDER_SELECTOR_NAME;
199  $vars['folderParameterName'] = self::FOLDER_PARAMETER_NAME;
200  $vars['uploadToReuseSelectorName'] = self::UPLOAD_TO_REUSE_SELECTOR_NAME;
201  $vars['osselotAvailable'] = $osselotAvailable;
202 
203  $renderer = $this->getObject('twig.environment');
204  return $renderer->load('agent_reuser.js.twig')->render($vars);
205  }
206 
212  public function getScriptIncludes(&$vars)
213  {
214  return '<script src="scripts/tools.js" type="text/javascript"></script>';
215  }
216 
226  protected function prepareFolderUploads($folderId, $trustGroupId=null)
227  {
228  if (empty($trustGroupId)) {
229  $trustGroupId = Auth::getGroupId();
230  }
231  $folderUploads = $this->folderDao->getFolderUploads($folderId, $trustGroupId);
232 
233  $uploadsById = array();
234  foreach ($folderUploads as $uploadProgress) {
235  $key = $uploadProgress->getId().','.$uploadProgress->getGroupId();
236  $display = $uploadProgress->getFilename() . _(" from ")
237  . Convert2BrowserTime(date("Y-m-d H:i:s",$uploadProgress->getTimestamp()))
238  . ' ('. $uploadProgress->getStatusString() . ')';
239  $uploadsById[$key] = $display;
240  }
241  return $uploadsById;
242  }
243 }
244 
245 register_plugin(new ReuserPlugin());
Contains the constants and helpers for authentication of user.
Definition: Auth.php:24
static getUserId()
Get the current user's id.
Definition: Auth.php:68
static getGroupId()
Get the current user's group id.
Definition: Auth.php:80
static isAdmin()
Check if user is admin.
Definition: Auth.php:92
UI plugin for reuser.
getFolderIdAndTrustGroup($folderGroup)
For a given folder group, extract forder id and trust group id.
renderFoot(&$vars)
Render footer template.
const REUSE_FOLDER_SELECTOR_NAME
Reuse upload folder element name.
renderContent(&$vars)
Load the data in array and render twig template.
const FOLDER_PARAMETER_NAME
Folder parameter HTML element name.
prepareFolderUploads($folderId, $trustGroupId=null)
For a given folder id, collect all uploads.
getScriptIncludes(&$vars)
Render JS inclues.
getAllUploads()
Get all uploads accessible to curent user.
const UPLOAD_TO_REUSE_SELECTOR_NAME
Upload to reuse HTML element name.
Convert2BrowserTime($server_time)
Convert the server time to browser time.
Definition: common-ui.php:312
char * trim(char *ptext)
Trimming whitespace.
Definition: fossconfig.c:690
list_t type structure used to keep various lists. (e.g. there are multiple lists).
Definition: nomos.h:308