FOSSology  4.5.1
Open Source License Compliance by Open Source Software
agent-reuser.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 */
7 
14 namespace Fossology\Reuser;
15 
22 use Symfony\Component\HttpFoundation\Request;
23 
24 include_once(dirname(__DIR__) . "/agent/version.php");
25 
31 {
32  const UPLOAD_TO_REUSE_SELECTOR_NAME = 'uploadToReuse';
33  const REUSE_MODE = 'reuseMode';
34 
38  private $uploadDao;
39 
40  public function __construct()
41  {
42  $this->Name = "agent_reuser";
43  $this->Title = _("Reuse of License Clearing");
44  $this->AgentName = "reuser";
45 
46  parent::__construct();
47 
48  $this->uploadDao = $GLOBALS['container']->get('dao.upload');
49  }
50 
56  public function renderContent(&$vars)
57  {
58  $reuserPlugin = plugin_find('plugin_reuser');
59  return $reuserPlugin->renderContent($vars);
60  }
61 
67  public function renderFoot(&$vars)
68  {
69  $reuserPlugin = plugin_find('plugin_reuser');
70  return $reuserPlugin->renderFoot($vars);
71  }
72 
78  public function getScriptIncludes(&$vars)
79  {
80  $reuserPlugin = plugin_find('plugin_reuser');
81  return $reuserPlugin->getScriptIncludes($vars);
82  }
83 
88  public function preInstall()
89  {
90  menu_insert("ParmAgents::" . $this->Title, 0, $this->Name);
91  }
92 
101  public function scheduleAgent($jobId, $uploadId, &$errorMsg, $request)
102  {
103  $reuseUploadPair = explode(',',
104  $request->get(self::UPLOAD_TO_REUSE_SELECTOR_NAME), 2);
105  if (count($reuseUploadPair) == 2) {
106  list($reuseUploadId, $reuseGroupId) = $reuseUploadPair;
107  } else {
108  $errorMsg .= 'no reuse upload id given';
109  return - 1;
110  }
111  $groupId = $request->get('groupId', Auth::getGroupId());
112 
113  $getReuseValue = $request->get(self::REUSE_MODE) ?: array();
114  $reuserDependencies = array("agent_adj2nest");
115 
116  $reuseMode = UploadDao::REUSE_NONE;
117  foreach ($getReuseValue as $currentReuseValue) {
118  switch ($currentReuseValue) {
119  case 'reuseMain':
120  $reuseMode |= UploadDao::REUSE_MAIN;
121  break;
122  case 'reuseEnhanced':
123  $reuseMode |= UploadDao::REUSE_ENHANCED;
124  break;
125  case 'reuseConf':
126  $reuseMode |= UploadDao::REUSE_CONF;
127  break;
128  case 'reuseCopyright':
129  $reuseMode |= UploadDao::REUSE_COPYRIGHT;
130  break;
131  }
132  }
133 
134  list($agentDeps, $scancodeDeps) = $this->getReuserDependencies($request);
135  $reuserDependencies = array_unique(array_merge($reuserDependencies, $agentDeps));
136  if (!empty($scancodeDeps)) {
137  $reuserDependencies[] = $scancodeDeps;
138  }
139 
140  $this->createPackageLink($uploadId, $reuseUploadId, $groupId, $reuseGroupId,
141  $reuseMode);
142 
143  return $this->doAgentAdd($jobId, $uploadId, $errorMsg,
144  $reuserDependencies, $uploadId, null, $request);
145  }
146 
155  protected function createPackageLink($uploadId, $reuseUploadId, $groupId, $reuseGroupId, $reuseMode=0)
156  {
157  /* @var $packageDao PackageDao */
158  $packageDao = $GLOBALS['container']->get('dao.package');
159  $newUpload = $this->uploadDao->getUpload($uploadId);
160  $uploadForReuse = $this->uploadDao->getUpload($reuseUploadId);
161 
162  $package = $packageDao->findPackageForUpload($reuseUploadId);
163 
164  if ($package === null) {
165  $packageName = StringOperation::getCommonHead($uploadForReuse->getFilename(), $newUpload->getFilename());
166  $package = $packageDao->createPackage($packageName ?: $uploadForReuse->getFilename());
167  $packageDao->addUploadToPackage($reuseUploadId, $package);
168  }
169 
170  $packageDao->addUploadToPackage($uploadId, $package);
171 
172  $this->uploadDao->addReusedUpload($uploadId, $reuseUploadId, $groupId, $reuseGroupId, $reuseMode);
173  }
174 
180  private function getReuserDependencies($request)
181  {
182  $dependencies = array();
183  $scancodeDeps = [];
184  if ($request->get("Check_agent_nomos", false)) {
185  $dependencies[] = "agent_nomos";
186  }
187  if ($request->get("Check_agent_monk", false)) {
188  $dependencies[] = "agent_monk";
189  }
190  if ($request->get("Check_agent_ojo", false)) {
191  $dependencies[] = "agent_ojo";
192  }
193  if ($request->get("Check_agent_ninka", false)) {
194  $dependencies[] = "agent_ninka";
195  }
196  if ($request->get("Check_agent_copyright", false)) {
197  $dependencies[] = "agent_copyright";
198  }
199  if (!empty($request->get("scancodeFlags", []))) {
203  $agentScanCode = plugin_find('agent_scancode');
204  $flags = $request->get('scancodeFlags');
205  $unpackArgs = intval($request->get('scm', 0)) == 1 ? 'I' : '';
206  $scancodeDeps = [
207  "name" => "agent_scancode",
208  "args" => $agentScanCode->getScanCodeArgs($flags, $unpackArgs)
209  ];
210  }
211  return [$dependencies, $scancodeDeps];
212  }
213 }
214 
215 register_plugin(new ReuserAgentPlugin());
Contains the constants and helpers for authentication of user.
Definition: Auth.php:24
static getGroupId()
Get the current user's group id.
Definition: Auth.php:80
doAgentAdd($jobId, $uploadId, &$errorMsg, $dependencies, $jqargs="", $jq_cmd_args=null, $request=null)
UI element for reuser during Uploading new package.
scheduleAgent($jobId, $uploadId, &$errorMsg, $request)
Get parameters from request and add to job queue.
renderContent(&$vars)
Render twig templates for plugin_reuser.
const REUSE_MODE
Form element name for main license to reuse.
const UPLOAD_TO_REUSE_SELECTOR_NAME
Form element name for main license to reuse.
createPackageLink($uploadId, $reuseUploadId, $groupId, $reuseGroupId, $reuseMode=0)
Create links between old and new upload.
getScriptIncludes(&$vars)
Get script tags to include before rendering foot.
renderFoot(&$vars)
Render footer twig templates for plugin_reuser.
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.
plugin_find($pluginName)
Given the official name of a plugin, return the $Plugins object.