FOSSology  4.4.0
Open Source License Compliance by Open Source Software
ReportImportPlugin.php
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2014-2016 Siemens AG
4 
5  SPDX-License-Identifier: GPL-2.0-only
6 */
7 
13 use Symfony\Component\HttpFoundation\Request;
14 
16 {
17  const NAME = 'ui_reportImport';
18 
20  private $uploadDao;
22  private $folderDao;
23 
24  function __construct()
25  {
26  parent::__construct(self::NAME, array(
27  self::TITLE => _("Report Import"),
28  self::PERMISSION => Auth::PERM_WRITE,
29  self::REQUIRES_LOGIN => TRUE
30  ));
31  $this->uploadDao = $GLOBALS['container']->get('dao.upload');
32  $this->folderDao = $GLOBALS['container']->get('dao.folder');
33  }
34 
35  function preInstall()
36  {
37  $text = _("Import Report");
38  menu_insert("Browse-Pfile::Import&nbsp;Report", 0, self::NAME, $text);
39  menu_insert("Main::Upload::Import&nbsp;Report", 0, self::NAME, $text);
40  }
41 
42  protected function handle(Request $request)
43  {
44  $uploadId = intval(GetArrayVal("uploadselect", $_POST));
45  if (empty($uploadId) ||
46  !array_key_exists('report',$_FILES) ||
47  empty($_FILES['report']['size']))
48  {
49  return $this->showUiToChoose();
50  }
51  else
52  {
53  $jobMetaData = $this->runImport($uploadId, $_FILES['report'], $request);
54  $showJobsPlugin = \plugin_find('showjobs');
55  $showJobsPlugin->OutputOpen();
56  return $showJobsPlugin->getResponse();
57  }
58  }
59 
60  protected function showUiToChoose()
61  {
62  $vars=array();
63  $groupId = Auth::getGroupId();
64  $vars['userIsAdmin'] = Auth::isAdmin();
65 
66  $rootFolder = $this->folderDao->getRootFolder(Auth::getUserId());
67  $folder_pk = GetParm('folder', PARM_INTEGER);
68  if (empty($folder_pk)) {
69  $folder_pk = $rootFolder->getId();
70  }
71  $vars['folderId'] = $folder_pk;
72 
73  $folderUploads = $this->folderDao->getFolderUploads($folder_pk, $groupId);
74  $uploadsById = array();
75  /* @var $uploadProgress UploadProgress */
76  foreach ($folderUploads as $uploadProgress)
77  {
78  if ($uploadProgress->getGroupId() != $groupId) {
79  continue;
80  }
81  if (!$this->uploadDao->isEditable($uploadProgress->getId(), $groupId)) {
82  continue;
83  }
84  $display = $uploadProgress->getFilename() . _(" from ") . Convert2BrowserTime(date("Y-m-d H:i:s",$uploadProgress->getTimestamp()));
85  $uploadsById[$uploadProgress->getId()] = $display;
86  }
87  $vars['uploadList'] = $uploadsById;
88 
89  $uploadId = GetParm('upload', PARM_INTEGER);
90  if (empty($uploadId))
91  {
92  reset($uploadsById);
93  $uploadId = key($uploadsById);
94  }
95  $vars['uploadId'] = $uploadId;
96 
97  $folderStructure = $this->folderDao->getFolderStructure($rootFolder->getId());
98  $vars['folderStructure'] = $folderStructure;
99  $vars['baseUri'] = $Uri = Traceback_uri() . "?mod=" . self::NAME . "&folder=";
100 
101  return $this->render('ReportImportPlugin.html.twig', $this->mergeWithDefault($vars));
102  }
103 
104  public function runImport($uploadId, $report, $request)
105  {
106  $reportImportAgent = plugin_find('agent_reportImport');
107 
108  $jqCmdArgs = $reportImportAgent->addReport($report);
109  $jqCmdArgs .= $reportImportAgent->setAdditionalJqCmdArgs($request);
110 
111  $userId = Auth::getUserId();
112  $groupId = Auth::getGroupId();
113  $dbManager = $this->getObject('db.manager');
114  $sql = 'SELECT jq_pk,job_pk FROM jobqueue, job '
115  . 'WHERE jq_job_fk=job_pk AND jq_type=$1 AND job_group_fk=$4 AND job_user_fk=$3 AND jq_args=$2 AND jq_endtime IS NULL';
116  $params = array($reportImportAgent->AgentName,$uploadId,$userId,$groupId);
117  $statementName = __METHOD__;
118  if ($jqCmdArgs) {
119  $sql .= ' AND jq_cmd_args=$5';
120  $params[] = $jqCmdArgs;
121  $statementName .= '.args';
122  }
123  else {
124  $sql .= ' AND jq_cmd_args IS NULL';
125  }
126 
127  $scheduled = $dbManager->getSingleRow($sql,$params,$statementName);
128  if (!empty($scheduled)) {
129  return array($scheduled['job_pk'],$scheduled['jq_pk']);
130  }
131 
132  $upload = $this->getUpload($uploadId, $groupId);
133  $jobId = JobAddJob($userId, $groupId, $upload->getFilename(), $uploadId);
134  $error = "";
135  $jobQueueId = $reportImportAgent->AgentAdd($jobId, $uploadId, $error, array(), $jqCmdArgs);
136  if ($jobQueueId<0)
137  {
138  throw new Exception(_("Cannot schedule").": ".$error);
139  }
140  return array($jobId,$jobQueueId);
141  }
142 
143  protected function getUpload($uploadId, $groupId)
144  {
145  if ($uploadId <=0)
146  {
147  throw new Exception(_("parameter error: $uploadId"));
148  }
149  if (!$this->uploadDao->isAccessible($uploadId, $groupId))
150  {
151  throw new Exception(_("permission denied"));
152  }
154  $upload = $this->uploadDao->getUpload($uploadId);
155  if ($upload === null)
156  {
157  throw new Exception(_('cannot find uploadId'));
158  }
159  return $upload;
160  }
161 }
162 
163 register_plugin(new ReportImportPlugin());
Contains the constants and helpers for authentication of user.
Definition: Auth.php:24
render($templateName, $vars=null, $headers=null)
handle(Request $request)
menu_insert($Path, $LastOrder=0, $URI=NULL, $Title=NULL, $Target=NULL, $HTML=NULL)
Given a Path, order level for the last item, and optional plugin name, insert the menu item.
Traceback_uri()
Get the URI without query to this location.
Definition: common-parm.php:97
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
plugin_find($pluginName)
Given the official name of a plugin, return the $Plugins object.
GetArrayVal($Key, $Arr)
Get the value from a array(map)
Definition: common-ui.php:157
Convert2BrowserTime($server_time)
Convert the server time to browser time.
Definition: common-ui.php:312
#define PERM_WRITE
Read-Write permission.
Definition: libfossology.h:33