diff --git a/src/lib/php/Report/LicenseMainGetter.php b/src/lib/php/Report/LicenseMainGetter.php new file mode 100644 index 00000000..fceb3a35 --- /dev/null +++ b/src/lib/php/Report/LicenseMainGetter.php @@ -0,0 +1,67 @@ +clearingDao = $container->get('dao.clearing'); + $this->licenseDao = $container->get('dao.license'); + + parent::__construct($groupBy = 'text'); + } + + protected function getStatements($uploadId, $uploadTreeTableName, $groupId = null) + { + $dbManager = $GLOBALS['container']->get('db.manager'); + $licenseMap = new LicenseMap($dbManager, $groupId, LicenseMap::REPORT, true); + $mainLicIds = $this->clearingDao->getMainLicenseIds($uploadId, $groupId); + + $allStatements = array(); + foreach ($mainLicIds as $originLicenseId) { + $allLicenseCols = $this->licenseDao->getLicenseById($originLicenseId, $groupId); + $allStatements[] = array( + 'content' => $licenseMap->getProjectedShortname($originLicenseId), + 'text' => $allLicenseCols->getText() + ); + + } + return $allStatements; + } + + public function getCleared($uploadId, $groupId=null) + { + $uploadTreeTableName = $this->uploadDao->getUploadtreeTableName($uploadId); + $statements = $this->getStatements($uploadId, $uploadTreeTableName, $groupId); + return array("statements" => array_values($statements)); + } +} diff --git a/src/readmeoss/agent/readmeoss.php b/src/readmeoss/agent/readmeoss.php index b6dbadcf..203b0520 100644 --- a/src/readmeoss/agent/readmeoss.php +++ b/src/readmeoss/agent/readmeoss.php @@ -1,149 +1,161 @@ cpClearedGetter = new XpClearedGetter("copyright", "statement", false); $this->licenseClearedGetter = new LicenseClearedGetter(); + $this->licenseMainGetter = new LicenseMainGetter(); parent::__construct(README_AGENT_NAME, AGENT_VERSION, AGENT_REV); $this->uploadDao = $this->container->get('dao.upload'); $this->agentSpecifLongOptions[] = self::UPLOAD_ADDS.':'; } /** * @todo without wrapper */ function processUploadId($uploadId) { $groupId = $this->groupId; $args = $this->args; $this->additionalUploadIds = array_key_exists(self::UPLOAD_ADDS,$args) ? explode(',',$args[self::UPLOAD_ADDS]) : array(); $uploadIds = $this->additionalUploadIds; array_unshift($uploadIds, $uploadId); $this->heartbeat(0); $licenseStmts = array(); $copyrightStmts = array(); foreach($uploadIds as $addUploadId) { if (!$this->uploadDao->isAccessible($addUploadId, $groupId)) { continue; } $moreLicenses = $this->licenseClearedGetter->getCleared($addUploadId, $groupId); $licenseStmts = array_merge($licenseStmts, $moreLicenses['statements']); $this->heartbeat(count($moreLicenses['statements'])); $moreCopyrights = $this->cpClearedGetter->getCleared($addUploadId, $groupId); $copyrightStmts = array_merge($copyrightStmts, $moreCopyrights['statements']); $this->heartbeat(count($moreCopyrights['statements'])); + $moreMainLicenses = $this->licenseMainGetter->getCleared($addUploadId, $groupId); + $licenseStmts = array_merge($licenseStmts, $moreMainLicenses['statements']); + $this->heartbeat(count($moreMainLicenses['statements'])); } $contents = array('licenses'=>$licenseStmts, 'copyrights'=>$copyrightStmts ); $this->writeReport($contents, $uploadId); return true; } private function writeReport($contents, $uploadId) { global $SysConf; $packageName = $this->uploadDao->getUpload($uploadId)->getFilename(); $fileBase = $SysConf['FOSSOLOGY']['path']."/report/"; $fileName = $fileBase. "ReadMe_OSS_".$packageName.'_'.time().".txt" ; foreach($this->additionalUploadIds as $addUploadId) { $packageName .= ', ' . $this->uploadDao->getUpload($addUploadId)->getFilename(); } if(!is_dir($fileBase)) { mkdir($fileBase, 0777, true); } umask(0133); $message = $this->generateReport($contents, $packageName); file_put_contents($fileName, $message); $this->updateReportTable($uploadId, $this->jobId, $fileName); } private function updateReportTable($uploadId, $jobId, $filename){ $this->dbManager->insertTableRow('reportgen', array('upload_fk'=>$uploadId, 'job_fk'=>$jobId, 'filepath'=>$filename), __METHOD__); } private function generateReport($contents, $packageName) { - $separator1 = "======================================================================================================================="; - $separator2 = "-----------------------------------------------------------------------------------------------------------------------"; - $break = "\r\n\r\n"; + $separator1 = str_repeat("=", 120); + $separator2 = str_repeat("-", 120); + $break = str_repeat("\r\n", 2); - $output = $separator1 . $break . $packageName . $break; + $output = $separator1 . $break . $packageName . $break . $separator2 . $break; foreach($contents['licenses'] as $licenseStatement){ $output .= $licenseStatement['text'] . $break; $output .= $separator2 . $break; } $copyrights = ""; foreach($contents['copyrights'] as $copyrightStatement){ $copyrights .= $copyrightStatement['content']."\r\n"; } if(empty($copyrights)){ $output .= ""; $output .= $break; $output .= ""; }else{ $output .= "Copyright notices"; $output .= $break; $output .= $copyrights; } return $output; } } $agent = new ReadmeOssAgent(); $agent->scheduler_connect(); $agent->run_scheduler_event_loop(); $agent->scheduler_disconnect(0);