7 namespace Fossology\ReportImport;
18 require_once
'ReportImportConfiguration.php';
30 private $copyrightDao;
35 protected $agent_pk = -1;
37 protected $groupId = -1;
39 protected $userId = -1;
41 protected $jobId = -1;
43 protected $nserIsAdmin =
false;
46 protected $configuration;
61 function __construct($agent_pk, $userDao, $licenseDao, $clearingDao, $copyrightDao, $dbManager, $groupId, $userId, $jobId, $configuration)
63 $this->userDao = $userDao;
64 $this->clearingDao = $clearingDao;
65 $this->licenseDao = $licenseDao;
66 $this->copyrightDao = $copyrightDao;
69 $this->groupId = $groupId;
70 $this->userId = $userId;
71 $this->
jobId = $jobId;
73 $this->configuration = $configuration;
75 $userRow = $userDao->getUserByPk($userId);
84 $pfiles = $data->getPfiles();
85 if(
sizeof($pfiles) === 0)
90 if($this->configuration->isCreateLicensesInfosAsFindings() ||
91 $this->configuration->isCreateConcludedLicensesAsFindings() ||
92 $this->configuration->isCreateConcludedLicensesAsConclusions())
94 $licenseInfosInFile = $data->getLicenseInfosInFile();
95 $licensesConcluded = $data->getLicensesConcluded();
97 $licensePKsInFile = array();
98 foreach($licenseInfosInFile as $dataItem)
100 if (strcasecmp($dataItem->getLicenseId(),
"noassertion") == 0)
105 $licensePKsInFile[] = $licenseId;
108 $licensePKsConcluded = array();
109 foreach ($licensesConcluded as $dataItem)
111 if (strcasecmp($dataItem->getLicenseId(),
"noassertion") == 0)
116 $licensePKsConcluded[$licenseId] = $dataItem->getCustomText();
122 if($this->configuration->isAddCopyrightInformation())
124 $this->insertFoundCopyrightTextsToDB($data->getCopyrightTexts(),
137 $licenseShortName = $dataItem->getLicenseId();
138 if ($this->configuration->shouldMatchLicenseNameWithSPDX()) {
139 $license = $this->licenseDao->getLicenseBySpdxId($licenseShortName, $groupId);
140 if ($license ===
null) {
141 echo
"WARNING: Could not find license with spdx id '$licenseShortName' ... trying ShortName\n";
142 $license = $this->licenseDao->getLicenseByShortName($licenseShortName, $groupId);
145 $license = $this->licenseDao->getLicenseByShortName($licenseShortName, $groupId);
147 if ($license !==
null)
149 return $license->getId();
151 elseif (! $this->licenseDao->isNewLicense($licenseShortName, $groupId))
153 throw new \Exception(
'shortname already in use');
155 elseif ($dataItem->isSetLicenseCandidate())
157 echo
"INFO: No license with shortname=\"$licenseShortName\" found ... ";
159 $licenseCandidate = $dataItem->getLicenseCandidate();
160 if($this->configuration->isCreateLicensesAsCandidate() || !$this->userIsAdmin)
162 echo
"Creating it as license candidate ...\n";
163 $licenseId = $this->licenseDao->insertUploadLicense($licenseShortName,
164 $licenseCandidate->getText(), $groupId, $this->userId);
165 $this->licenseDao->updateCandidate(
167 $licenseCandidate->getShortName(),
168 $licenseCandidate->getFullName(),
169 $licenseCandidate->getText(),
170 $licenseCandidate->getUrl(),
171 "Created for ReportImport with jobId=[".$this->jobId.
"]",
176 $licenseCandidate->getShortName()
182 echo
"creating it as license ...\n";
183 $licenseText =
trim($licenseCandidate->getText());
184 return $this->licenseDao->insertLicense($licenseCandidate->getShortName(), $licenseText, $licenseCandidate->getShortName());
197 if($this->configuration->isCreateLicensesInfosAsFindings())
202 if($this->configuration->isCreateConcludedLicensesAsFindings())
207 if($this->configuration->isCreateConcludedLicensesAsConclusions())
209 $removeLicenseIds = array();
210 foreach ($licensePKsInFile as $licenseId)
212 if(! array_key_exists($licenseId,$licensePKsConcluded))
214 $removeLicenseIds[] = $licenseId;
228 if(
sizeof($addLicenseIds) == 0)
233 foreach ($pfiles as $pfile)
236 foreach ($addLicenseIds as $licenseId => $licenseText)
239 $eventIds[] = $this->clearingDao->insertClearingEvent(
240 $pfile[
'uploadtree_pk'],
245 ClearingEventTypes::IMPORT,
251 foreach ($removeLicenseIds as $licenseId)
254 $eventIds[] = $this->clearingDao->insertClearingEvent(
255 $pfile[
'uploadtree_pk'],
260 ClearingEventTypes::IMPORT,
266 $this->clearingDao->createDecisionFromEvents(
267 $pfile[
'uploadtree_pk'],
270 $this->configuration->getConcludeLicenseDecisionType(),
271 DecisionScopes::ITEM,
282 foreach ($pfiles as $pfile)
284 foreach($licenseIds as $licenseId)
287 "INSERT INTO license_file (rf_fk, agent_fk, pfile_fk) VALUES ($1,$2,$3) RETURNING fl_pk",
288 array($licenseId, $this->
agent_pk, $pfile[
'pfile_pk']),
289 __METHOD__.
"forReportImport");
294 public function insertFoundCopyrightTextsToDB($copyrightTexts, $entries)
296 foreach ($copyrightTexts as $copyrightText)
298 $this->insertFoundCopyrightTextToDB($copyrightText, $entries);
302 public function insertFoundCopyrightTextToDB($copyrightText, $entries)
304 $copyrightLines = array_map(
"trim", explode(
"\n",$copyrightText));
305 foreach ($copyrightLines as $copyrightLine)
307 if(empty($copyrightLine))
312 foreach ($entries as $entry)
314 $this->saveAsCopyrightFindingToDB(
trim($copyrightLine), $entry[
'pfile_pk']);
319 private function saveAsCopyrightFindingToDB($content, $pfile_fk)
321 $curDecisions = $this->copyrightDao->getDecisions(
"copyright_decision", $pfile_fk);
322 foreach ($curDecisions as $decision)
324 if($decision[
'textfinding'] == $content){
329 $this->copyrightDao->saveDecision(
"copyright_decision", $pfile_fk, $this->userId , DecisionTypes::IDENTIFIED,
330 "", $content,
"imported via reportImport");
saveAsDecisionToDB($addLicenseIds, $removeLicenseIds, $pfiles)
insertLicenseInformationToDB($licensePKsInFile, $licensePKsConcluded, $pfiles)
getIdForDataItemOrCreateLicense($dataItem, $groupId)
__construct($agent_pk, $userDao, $licenseDao, $clearingDao, $copyrightDao, $dbManager, $groupId, $userId, $jobId, $configuration)
saveAsLicenseFindingToDB($licenseIds, $pfiles)
char * trim(char *ptext)
Trimming whitespace.
#define PLUGIN_DB_ADMIN
Plugin requires admin level permission on DB.
int jobId
The id of the job.
fo_dbManager * dbManager
fo_dbManager object