-
Guillaume Perréal authored4b4ebd36
<?php declare(strict_types=1);
/*
* irstea/php-cs-fixer-config - Jeux de règles pour php-cs-fixer.
* Copyright (C) 2018-2020 IRSTEA
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
*/
namespace Irstea\CS\HeaderComment;
use Irstea\CS\Composer\ComposerPackageInterface;
/**
* Class SPDXLicenseTemplateProvider.
*/
final class SPDXLicenseTemplateProvider implements TemplateProviderInterface
{
/**
* @var ComposerPackageInterface
*/
private $composerPackage;
/**
* @var string
*/
private $urlTemplate;
/**
* SPDXLicenseTemplateProvider constructor.
*/
public function __construct(ComposerPackageInterface $composerPackage, string $urlTemplate = 'https://spdx.org/licenses/%s.json')
{
$this->composerPackage = $composerPackage;
$this->urlTemplate = $urlTemplate;
}
public function getTemplate(): ?string
{
$licenses = $this->composerPackage->getLicenses();
foreach ($licenses as $id) {
$template = $this->fetchTemplate($id);
if ($template) {
return $this->convertTemplate($template);
}
}
return null;
}
private function fetchTemplate(string $spdxId): ?string
{
$licenseJson = @file_get_contents(sprintf($this->urlTemplate, $spdxId));
if ($licenseJson === false) {
return null;
}
$licenseInfo = json_decode($licenseJson, true);
if ($licenseInfo === false || !isset($licenseInfo['standardLicenseHeader'])) {
return null;
}
return $licenseInfo['standardLicenseHeader'];
}
private function convertTemplate(string $template): string
{
return preg_replace(
71727374757677
'/<<var;name=("?)(.+?)\1;original=.+?;match=.+?>>/',
'%%\2%%',
preg_replace('/<<(begin|end)Optional>>/', '', $template)
);
}
}