FOSSology  4.4.0
Open Source License Compliance by Open Source Software
DeciderAgentPlugin.php
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2014-2018 Siemens AG
4 
5 
6  SPDX-License-Identifier: GPL-2.0-only
7 */
8 
10 use Symfony\Component\HttpFoundation\Request;
11 
12 include_once(__DIR__ . "/../agent/version.php");
13 
19 {
20  const RULES_FLAG = "-r";
21 
22  function __construct()
23  {
24  $this->Name = "agent_decider";
25  $this->Title = _("Automatic Concluded License Decider, based on scanners Matches");
26  $this->AgentName = AGENT_DECIDER_NAME;
27 
28  parent::__construct();
29  }
30 
31 
37  public function renderContent(&$vars)
38  {
39  global $SysConf;
40  $renderer = $GLOBALS['container']->get('twig.environment');
41  $vars['isNinkaInstalled'] = false;
42  if ($ninkaUi=plugin_find('agent_ninka')) {
43  $vars['isNinkaInstalled'] = $ninkaUi->isNinkaInstalled();
44  }
45  $vars['isSpacyInstalled'] = file_exists("/home/" .
46  $SysConf['DIRECTORIES']['PROJECTUSER'] . "/pythondeps/bin/spacy");
47  return $renderer->load('agent_decider.html.twig')->render($vars);
48  }
49 
55  public function renderFoot(&$vars)
56  {
57  return "";
58  }
59 
68  public function scheduleAgent($jobId, $uploadId, &$errorMsg, $request)
69  {
70  $dependencies = array();
71 
72  $rules = $request->get('deciderRules') ?: array();
73  $agents = $request->get('agents') ?: array();
74  if (in_array('agent_nomos', $agents)) {
75  $checkAgentNomos = true;
76  } else {
77  $checkAgentNomos = $request->get('Check_agent_nomos') ?: false;
78  }
79 
80  if (in_array('agent_copyright', $agents)) {
81  $checkAgentCopyright = true;
82  } else {
83  $checkAgentCopyright = $request->get('Check_agent_copyright') ?: false;
84  }
85  $rulebits = 0;
86 
87  foreach ($rules as $rule) {
88  switch ($rule) {
89  case 'nomosInMonk':
90  $dependencies[] = 'agent_nomos';
91  $dependencies[] = 'agent_monk';
92  $rulebits |= 0x1;
93  break;
94  case 'nomosMonkNinka':
95  $dependencies[] = 'agent_nomos';
96  $dependencies[] = 'agent_monk';
97  $dependencies[] = 'agent_ninka';
98  $rulebits |= 0x2;
99  break;
100  case 'reuseBulk':
101  $dependencies[] = 'agent_nomos';
102  $dependencies[] = 'agent_monk';
103  $dependencies[] = 'agent_reuser';
104  $rulebits |= 0x4;
105  break;
106  case 'ojoNoContradiction':
107  if ($checkAgentNomos) {
108  $dependencies[] = 'agent_nomos';
109  }
110  $dependencies[] = 'agent_ojo';
111  $rulebits |= 0x10;
112  break;
113  case 'wipScannerUpdates':
114  $this->addScannerDependencies($dependencies, $request);
115  $rulebits |= 0x8;
116  break;
117  case 'copyrightDeactivation':
118  if ($checkAgentCopyright) {
119  $dependencies[] = 'agent_copyright';
120  }
121  $rulebits |= 0x20;
122  break;
123  case 'copyrightDeactivationClutterRemoval':
124  if ($checkAgentCopyright) {
125  $dependencies[] = 'agent_copyright';
126  }
127  $rulebits |= 0x40;
128  break;
129  }
130  }
131 
132  if (empty($rulebits)) {
133  return 0;
134  }
135 
136  $args = self::RULES_FLAG.$rulebits;
137  return parent::AgentAdd($jobId, $uploadId, $errorMsg, array_unique($dependencies), $args);
138  }
139 
145  protected function addScannerDependencies(&$dependencies, Request $request)
146  {
147  $agentList = $request->get('agents') ?: array();
148  foreach (array('agent_nomos', 'agent_monk', 'agent_ninka') as $agentName) {
149  if (in_array($agentName, $dependencies)) {
150  continue;
151  }
152  if ($request->get('Check_'.$agentName)) {
153  $dependencies[] = $agentName;
154  continue;
155  }
156  if (in_array($agentName, $agentList)) {
157  $dependencies[] = $agentName;
158  }
159  }
160  }
161 
166  public function preInstall()
167  {
168  menu_insert("ParmAgents::" . $this->Title, 0, $this->Name);
169  }
170 }
171 
172 register_plugin(new DeciderAgentPlugin());
UI plugin for DeciderAgent.
renderFoot(&$vars)
Render footer HTML.
addScannerDependencies(&$dependencies, Request $request)
Add dependencies on DeciderAgent.
scheduleAgent($jobId, $uploadId, &$errorMsg, $request)
Schedule decider agent.
renderContent(&$vars)
Render HTML from template.
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.