7 namespace Fossology\ReportImport;
20 require_once
'ReportImportConfiguration.php';
32 private $copyrightDao;
37 protected $agent_pk = -1;
39 protected $groupId = -1;
41 protected $userId = -1;
43 protected $jobId = -1;
45 protected $nserIsAdmin =
false;
48 protected $configuration;
63 function __construct($agent_pk, $userDao, $licenseDao, $clearingDao, $copyrightDao, $dbManager, $groupId, $userId, $jobId, $configuration)
65 $this->userDao = $userDao;
66 $this->clearingDao = $clearingDao;
67 $this->licenseDao = $licenseDao;
68 $this->copyrightDao = $copyrightDao;
71 $this->groupId = $groupId;
72 $this->userId = $userId;
73 $this->
jobId = $jobId;
75 $this->configuration = $configuration;
77 $userRow = $userDao->getUserByPk($userId);
86 $pfiles = $data->getPfiles();
87 if(
sizeof($pfiles) === 0)
92 if($this->configuration->isCreateLicensesInfosAsFindings() ||
93 $this->configuration->isCreateConcludedLicensesAsFindings() ||
94 $this->configuration->isCreateConcludedLicensesAsConclusions())
96 $licenseInfosInFile = $data->getLicenseInfosInFile();
97 $licensesConcluded = $data->getLicensesConcluded();
99 $licensePKsInFile = array();
100 foreach($licenseInfosInFile as $dataItem)
102 if (strcasecmp($dataItem->getLicenseId(),
"noassertion") == 0)
107 $licensePKsInFile[] = $licenseId;
110 $licensePKsConcluded = array();
111 foreach ($licensesConcluded as $dataItem)
113 if (strcasecmp($dataItem->getLicenseId(),
"noassertion") == 0)
118 $licensePKsConcluded[$licenseId] = $dataItem->getCustomText();
124 if($this->configuration->isAddCopyrightInformation())
126 $this->insertFoundCopyrightTextsToDB($data->getCopyrightTexts(),
139 $licenseShortName = $dataItem->getLicenseId();
140 if ($this->configuration->shouldMatchLicenseNameWithSPDX()) {
141 $license = $this->licenseDao->getLicenseBySpdxId($licenseShortName, $groupId);
142 if ($license ==
null) {
143 echo
"WARNING: Can not match by SPDX ID, trying Shortname=\"$licenseShortName\"\n";
144 $license = $this->licenseDao->getLicenseByShortName($licenseShortName, $groupId);
147 $license = $this->licenseDao->getLicenseByShortName($licenseShortName, $groupId);
149 if ($license !==
null)
151 return $license->getId();
153 elseif (! $this->licenseDao->isNewLicense($licenseShortName, $groupId))
155 throw new \Exception(
'shortname already in use');
157 elseif ($dataItem->isSetLicenseCandidate())
159 echo
"INFO: No license with shortname=\"$licenseShortName\" found ... ";
161 $licenseCandidate = $dataItem->getLicenseCandidate();
162 if($this->configuration->isCreateLicensesAsCandidate() || !$this->userIsAdmin)
164 echo
"Creating it as license candidate ...\n";
165 $licenseId = $this->licenseDao->insertUploadLicense($licenseShortName,
166 $licenseCandidate->getText(), $groupId, $this->userId);
167 $this->licenseDao->updateCandidate(
169 $licenseCandidate->getShortName(),
170 $licenseCandidate->getFullName(),
171 $licenseCandidate->getText(),
172 $licenseCandidate->getUrl(),
173 "Created for ReportImport with jobId=[".$this->jobId.
"]",
178 $licenseCandidate->getShortName()
184 echo
"creating it as license ...\n";
185 $licenseText =
trim($licenseCandidate->getText());
186 return $this->licenseDao->insertLicense($licenseCandidate->getShortName(), $licenseText, $licenseCandidate->getShortName());
199 if($this->configuration->isCreateLicensesInfosAsFindings())
204 if($this->configuration->isCreateConcludedLicensesAsFindings())
209 if($this->configuration->isCreateConcludedLicensesAsConclusions())
211 $removeLicenseIds = array();
212 foreach ($licensePKsInFile as $licenseId)
214 if(! array_key_exists($licenseId,$licensePKsConcluded))
216 $removeLicenseIds[] = $licenseId;
230 if(
sizeof($addLicenseIds) == 0)
235 foreach ($pfiles as $pfile)
238 foreach ($addLicenseIds as $licenseId => $licenseText)
241 $eventIds[] = $this->clearingDao->insertClearingEvent(
242 $pfile[
'uploadtree_pk'],
247 ClearingEventTypes::IMPORT,
253 foreach ($removeLicenseIds as $licenseId)
256 $eventIds[] = $this->clearingDao->insertClearingEvent(
257 $pfile[
'uploadtree_pk'],
262 ClearingEventTypes::IMPORT,
268 $this->clearingDao->createDecisionFromEvents(
269 $pfile[
'uploadtree_pk'],
272 $this->configuration->getConcludeLicenseDecisionType(),
273 DecisionScopes::ITEM,
284 foreach ($pfiles as $pfile)
286 foreach($licenseIds as $licenseId)
289 "INSERT INTO license_file (rf_fk, agent_fk, pfile_fk) VALUES ($1,$2,$3) RETURNING fl_pk",
290 array($licenseId, $this->
agent_pk, $pfile[
'pfile_pk']),
291 __METHOD__.
"forReportImport");
296 public function insertFoundCopyrightTextsToDB($copyrightTexts, $entries)
298 foreach ($copyrightTexts as $copyrightText)
300 $this->insertFoundCopyrightTextToDB($copyrightText, $entries);
304 public function insertFoundCopyrightTextToDB($copyrightText, $entries)
306 $copyrightLines = array_map(
"trim", explode(
"\n",$copyrightText));
307 foreach ($copyrightLines as $copyrightLine)
309 if(empty($copyrightLine))
314 foreach ($entries as $entry)
316 $this->saveAsCopyrightFindingToDB(
trim($copyrightLine), $entry[
'pfile_pk']);
321 private function saveAsCopyrightFindingToDB($content, $pfile_fk)
323 $curDecisions = $this->copyrightDao->getDecisions(
"copyright_decision", $pfile_fk);
324 foreach ($curDecisions as $decision)
326 if($decision[
'textfinding'] == $content){
331 $this->copyrightDao->saveDecision(
"copyright_decision", $pfile_fk, $this->userId , DecisionTypes::IDENTIFIED,
332 "", $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