* @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 PrestaShopBundle\Routing\Linter\AdminRouteProvider; use PrestaShopBundle\Routing\Linter\LegacyLinkLinter; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; /** * Checks if all admin routes are configured with _legacy_link */ class LegacyLinkLinterCommand extends Command { /** * @var LegacyLinkLinter */ private $legacyLinkLinter; /** * @var AdminRouteProvider */ private $adminRouteProvider; public function __construct(LegacyLinkLinter $legacyLinkLinter, AdminRouteProvider $adminRouteProvider) { parent::__construct(); $this->legacyLinkLinter = $legacyLinkLinter; $this->adminRouteProvider = $adminRouteProvider; } /** * {@inheritdoc} */ protected function configure() { $this ->setName('prestashop:linter:legacy-link') ->setDescription('Checks if _legacy_link is configured in BackOffice routes'); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $unconfiguredRoutes = $this->getUnconfiguredRoutes(); $io = new SymfonyStyle($input, $output); if (!empty($unconfiguredRoutes)) { $io->warning(sprintf( '%s routes are not configured with _legacy_link:', count($unconfiguredRoutes) )); $io->listing($unconfiguredRoutes); return 1; } $io->success('There is no routes without _legacy_link settings'); return 0; } /** * Returns routes that are missing _legacy_link configuration * * @return array */ private function getUnconfiguredRoutes() { $routes = $this->adminRouteProvider->getRoutes(); $unconfiguredRoutes = []; foreach ($routes as $routeName => $route) { if (true === $this->legacyLinkLinter->lint('_legacy_link', $route)) { continue; } $unconfiguredRoutes[] = $routeName; } return $unconfiguredRoutes; } }