File Manager Lite
Dir:
/home/u540325668/domains/dumbafarm.in/public_html/src/PrestaShopBundle/Command
Upload
[..]
AppendConfigurationFileHooksListCommand.php (8.38 KB)
Edit
Rename
Del
AppendHooksListForSqlUpgradeFileCommand.php (9.56 KB)
Edit
Rename
Del
CheckTranslationDuplicatesCommand.php (4.44 KB)
Edit
Rename
Del
ConfigCommand.php (9.6 KB)
Edit
Rename
Del
DebugCommand.php (3.81 KB)
Edit
Rename
Del
GenerateMailTemplatesCommand.php (4.46 KB)
Edit
Rename
Del
LegacyLinkLinterCommand.php (3.28 KB)
Edit
Rename
Del
ListCommandsAndQueriesCommand.php (2.96 KB)
Edit
Rename
Del
ModuleCommand.php (7.1 KB)
Edit
Rename
Del
SecurityAnnotationLinterCommand.php (8.41 KB)
Edit
Rename
Del
ThemeEnablerCommand.php (2.89 KB)
Edit
Rename
Del
UpdateLicensesCommand.php (12.13 KB)
Edit
Rename
Del
UpdateSchemaCommand.php (11.09 KB)
Edit
Rename
Del
Edit: UpdateLicensesCommand.php
<?php /** * Copyright since 2007 PrestaShop SA and Contributors * PrestaShop is an International Registered Trademark & Property of PrestaShop SA * * NOTICE OF LICENSE * * This source file is subject to the Open Software License (OSL 3.0) * that is bundled with this package in the file LICENSE.md. * It is also available through the world-wide-web at this URL: * https://opensource.org/licenses/OSL-3.0 * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@prestashop.com so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to https://devdocs.prestashop.com/ for more information. * * @author PrestaShop SA and Contributors <contact@prestashop.com> * @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ namespace PrestaShopBundle\Command; use PhpParser\Node\Stmt; use PhpParser\ParserFactory; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Helper\ProgressBar; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Finder\Finder; use Symfony\Component\Finder\SplFileInfo; class UpdateLicensesCommand extends Command { private $text = '/** * Copyright since 2007 PrestaShop SA and Contributors * PrestaShop is an International Registered Trademark & Property of PrestaShop SA * * NOTICE OF LICENSE * * This source file is subject to the {licenseName} * that is bundled with this package in the file LICENSE.md. * It is also available through the world-wide-web at this URL: * {licenseLink} * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@prestashop.com so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to https://devdocs.prestashop.com/ for more information. * * @author PrestaShop SA and Contributors <contact@prestashop.com> * @copyright Since 2007 PrestaShop SA and Contributors * @license {licenseLink} {licenseName} */'; /** * @var string */ private $license; private $aflLicense = [ 'themes/classic/', 'themes/StarterTheme/', 'modules/', ]; /** * {@inheritdoc} */ protected function configure() { $this ->setName('prestashop:licenses:update') ->setDescription('Rewrite your licenses to be up-to-date'); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $this->text = str_replace('{currentYear}', date('Y'), $this->text); $extensions = [ 'php', 'js', 'css', 'tpl', 'html.twig', 'json', 'vue', ]; foreach ($extensions as $extension) { $this->findAndCheckExtension($output, $extension); } return 0; } /** * @param OutputInterface $output * @param string $ext */ private function findAndCheckExtension(OutputInterface $output, $ext) { $finder = new Finder(); $finder ->files() ->name('*.' . $ext) ->in(_PS_ROOT_DIR_) // Ignore folders ->exclude([ // versioning folders '.git', '.github', '.composer', // admin folders 'admin-dev/filemanager', 'admin-dev/themes/default/public/', 'admin-dev/themes/new-theme/public/', // js dependencies 'js/tiny_mce', 'js/jquery', 'js/cropper', // mails folder 'mails/themes/classic/', 'mails/themes/modern/', // tools dependencies 'tools/htmlpurifier', // dependencies 'vendor', 'node_modules', // themes assets 'themes/classic/assets/', 'themes/starterTheme/assets/', // tests folders 'tests/Resources/modules/', 'tests/Resources/modules_tests/override/', 'tests/Resources/themes/', 'tests/Resources/translations/', 'tests/Resources/ModulesOverrideInstallUninstallTest/', 'tests/E2E/', 'tests/Unit/Resources/config/', 'tests/Unit/Resources/assets/', 'tests/Unit/Resources/twig/', 'tests/UI/', ]) // Ignore specific files ->notPath([ // install 'install-dev/theme/js/sprintf.min.js', 'install-dev/theme/js/zxcvbn.js', ]) ->ignoreDotFiles(false); $parser = (new ParserFactory())->create(ParserFactory::ONLY_PHP7); $output->writeln('Updating license in ' . strtoupper($ext) . ' files ...'); $progress = new ProgressBar($output, count($finder)); $progress->start(); $progress->setRedrawFrequency(20); $filesToIgnore = [ 'composer.json', 'package.json', 'admin-dev/themes/default/css/font.css', 'admin-dev/themes/new-theme/package.json', 'tools/build/Library/InstallUnpacker/content/js-runner.js', 'themes/classic/_dev/package.json', 'tools/build/composer.json', ]; foreach ($finder as $file) { $this->license = $this->text; $this->makeGoodLicense($file); if (in_array($file->getRelativePathName(), $filesToIgnore)) { continue; } switch ($file->getExtension()) { case 'php': try { $nodes = $parser->parse($file->getContents()); if (count($nodes)) { $this->addLicenseToNode($nodes[0], $file); } } catch (\PhpParser\Error $exception) { $output->writeln('Syntax error on file ' . $file->getRelativePathname() . '. Continue ...'); } break; case 'js': case 'css': $this->addLicenseToFile($file); break; case 'tpl': $this->addLicenseToSmartyTemplate($file); break; case 'twig': $this->addLicenseToTwigTemplate($file); break; case 'json': $this->addLicenseToJsonFile($file); break; case 'vue': $this->addLicenseToHtmlFile($file); break; } $progress->advance(); } $progress->finish(); $output->writeln(''); } /** * @param SplFileInfo $file */ private function makeGoodLicense(SplFileInfo $file) { if ($this->isAFLLicense($file->getRelativePathname())) { $this->makeAFLLicense(); } else { $this->makeOSLLicense(); } } /** * @param string $fileName * * @return bool */ private function isAFLLicense($fileName) { foreach ($this->aflLicense as $afl) { if (0 === strpos($fileName, $afl)) { return true; } } return false; } /** * Replace for OSL licenses. */ private function makeOSLLicense() { $this->license = str_replace('{licenseName}', 'Open Software License (OSL 3.0)', $this->license); $this->license = str_replace('{licenseLink}', 'https://opensource.org/licenses/OSL-3.0', $this->license); } /** * Replace for AFL licenses. */ private function makeAFLLicense() { $this->license = str_replace('{licenseName}', 'Academic Free License 3.0 (AFL-3.0)', $this->license); $this->license = str_replace('{licenseLink}', 'https://opensource.org/licenses/AFL-3.0', $this->license); } /** * @param SplFileInfo $file * @param string $startDelimiter * @param string $endDelimiter */ private function addLicenseToFile($file, $startDelimiter = '\/', $endDelimiter = '\/') { $content = $file->getContents(); // Regular expression found thanks to Stephen Ostermiller's Blog. http://blog.ostermiller.org/find-comment $regex = '%' . $startDelimiter . '\*([^*]|[\r\n]|(\*+([^*' . $endDelimiter . ']|[\r\n])))*\*+' . $endDelimiter . '%'; $matches = []; $text = $this->license; if ($startDelimiter != '\/') { $text = $startDelimiter . ltrim($text, '/'); } if ($endDelimiter != '\/') { $text = rtrim($text, '/') . $endDelimiter; } // Try to find an existing license preg_match($regex, $content, $matches); if (count($matches)) { // Found - Replace it if prestashop one foreach ($matches as $match) { if (stripos($match, 'prestashop') !== false) { $content = str_replace($match, $text, $content); } } } else { // Not found - Add it at the beginning of the file $content = $text . "\n" . $content; } file_put_contents($file->getRelativePathname(), $content); } /** * @param Stmt $node * @param SplFileInfo $file */ private function addLicenseToNode($node, SplFileInfo $file) { if (!$node->hasAttribute('comments')) { $needle = '<?php'; $replace = "<?php\n" . $this->license . "\n"; $haystack = $file->getContents(); $pos = strpos($haystack, $needle); // Important, if the <?php is in the middle of the file, continue if ($pos === 0) { $newstring = substr_replace($haystack, $replace, $pos, strlen($needle)); file_put_contents($file->getRelativePathname(), $newstring); } return; } $comments = $node->getAttribute('comments'); foreach ($comments as $comment) { if ($comment instanceof \PhpParser\Comment && strpos($comment->getText(), 'prestashop') !== false) { file_put_contents($file->getRelativePathname(), str_replace($comment->getText(), $this->license, $file->getContents())); } } } /** * @param SplFileInfo $file */ private function addLicenseToSmartyTemplate(SplFileInfo $file) { $this->addLicenseToFile($file, '{', '}'); } /** * @param SplFileInfo $file */ private function addLicenseToTwigTemplate(SplFileInfo $file) { if (strrpos($file->getRelativePathName(), 'html.twig') !== false) { $this->addLicenseToFile($file, '{#', '#}'); } } /** * @param SplFileInfo $file */ private function addLicenseToHtmlFile(SplFileInfo $file) { $this->addLicenseToFile($file, '<!--', '-->'); } /** * @param SplFileInfo $file * * @return bool */ private function addLicenseToJsonFile(SplFileInfo $file) { if (!in_array($file->getFilename(), ['composer.json', 'package.json'])) { return false; } $content = (array) json_decode($file->getContents()); $content['author'] = 'PrestaShop'; $content['license'] = $this->isAFLLicense($file->getRelativePathname()) ? 'AFL-3.0' : 'OSL-3.0'; return file_put_contents($file->getRelativePathname(), json_encode($content, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT)); } }
Simpan