aimeos /
aimeos-symfony
| 1 | <?php |
||
| 2 | |||
| 3 | /** |
||
| 4 | * @license MIT, http://opensource.org/licenses/MIT |
||
| 5 | * @copyright Aimeos (aimeos.org), 2014-2024 |
||
| 6 | * @package symfony |
||
| 7 | * @subpackage Command |
||
| 8 | */ |
||
| 9 | |||
| 10 | |||
| 11 | namespace Aimeos\ShopBundle\Command; |
||
| 12 | |||
| 13 | use Symfony\Component\Console\Attribute\AsCommand; |
||
| 14 | use Symfony\Component\Console\Input\InputOption; |
||
| 15 | use Symfony\Component\Console\Input\InputArgument; |
||
| 16 | use Symfony\Component\Console\Input\InputInterface; |
||
| 17 | use Symfony\Component\Console\Output\OutputInterface; |
||
| 18 | use Symfony\Component\DependencyInjection\Container; |
||
| 19 | |||
| 20 | |||
| 21 | /** |
||
| 22 | * Executes the job controllers. |
||
| 23 | * |
||
| 24 | * @package symfony |
||
| 25 | * @subpackage Command |
||
| 26 | */ |
||
| 27 | #[AsCommand(name: 'aimeos:jobs', description: 'Executes the job controllers')] |
||
| 28 | class JobsCommand extends Command |
||
| 29 | { |
||
| 30 | private $container; |
||
| 31 | protected static $defaultName = 'aimeos:jobs'; |
||
| 32 | |||
| 33 | |||
| 34 | public function __construct( Container $container ) |
||
| 35 | { |
||
| 36 | parent::__construct(); |
||
| 37 | $this->container = $container; |
||
| 38 | } |
||
| 39 | |||
| 40 | |||
| 41 | /** |
||
| 42 | * Configures the command name and description. |
||
| 43 | */ |
||
| 44 | protected function configure() |
||
| 45 | { |
||
| 46 | $this->setName( self::$defaultName ); |
||
| 47 | $this->setDescription( 'Executes the job controllers' ); |
||
| 48 | $this->addArgument( 'jobs', InputArgument::REQUIRED, 'One or more job controller names like "admin/job customer/email/watch"' ); |
||
| 49 | $this->addArgument( 'site', InputArgument::OPTIONAL, 'Site codes to execute the jobs for like "default unittest" (none for all)' ); |
||
| 50 | $this->addOption( 'option', null, InputOption::VALUE_REQUIRED, 'Optional setup configuration, name and value are separated by ":" like "setup/default/demo:1"', [] ); |
||
| 51 | } |
||
| 52 | |||
| 53 | |||
| 54 | /** |
||
| 55 | * Executes the job controllers. |
||
| 56 | * |
||
| 57 | * @param InputInterface $input Input object |
||
| 58 | * @param OutputInterface $output Output object |
||
| 59 | */ |
||
| 60 | protected function execute( InputInterface $input, OutputInterface $output ) |
||
| 61 | { |
||
| 62 | $context = $this->addConfig( $this->context(), $input ); |
||
| 63 | $aimeos = $this->container->get( 'aimeos' )->get(); |
||
| 64 | $process = $context->process(); |
||
| 65 | |||
| 66 | $jobs = explode( ' ', $input->getArgument( 'jobs' ) ); |
||
| 67 | $localeManager = \Aimeos\MShop::create( $context, 'locale' ); |
||
| 68 | |||
| 69 | foreach( $this->getSiteItems( $context, $input ) as $siteItem ) |
||
| 70 | { |
||
| 71 | \Aimeos\MShop::cache( true ); |
||
| 72 | \Aimeos\MAdmin::cache( true ); |
||
| 73 | |||
| 74 | $localeItem = $localeManager->bootstrap( $siteItem->getCode(), '', '', false ); |
||
|
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||
| 75 | $localeItem->setLanguageId( null ); |
||
| 76 | $localeItem->setCurrencyId( null ); |
||
| 77 | $context->setLocale( $localeItem ); |
||
| 78 | |||
| 79 | $config = $context->config(); |
||
| 80 | foreach( $localeItem->getSiteItem()->getConfig() as $key => $value ) { |
||
| 81 | $config->set( $key, $value ); |
||
| 82 | } |
||
| 83 | |||
| 84 | $output->writeln( sprintf( 'Executing the Aimeos jobs for "<info>%s</info>"', $siteItem->getCode() ) ); |
||
| 85 | |||
| 86 | foreach( $jobs as $jobname ) |
||
| 87 | { |
||
| 88 | $fcn = function( $context, $aimeos, $jobname ) { |
||
| 89 | \Aimeos\Controller\Jobs::create( $context, $aimeos, $jobname )->run(); |
||
| 90 | }; |
||
| 91 | |||
| 92 | $process->start( $fcn, [$context, $aimeos, $jobname], false ); |
||
| 93 | } |
||
| 94 | } |
||
| 95 | |||
| 96 | $process->wait(); |
||
| 97 | return 0; |
||
| 98 | } |
||
| 99 | |||
| 100 | |||
| 101 | /** |
||
| 102 | * Returns a context object |
||
| 103 | * |
||
| 104 | * @return \Aimeos\MShop\ContextIface Context object |
||
| 105 | */ |
||
| 106 | protected function context() : \Aimeos\MShop\ContextIface |
||
| 107 | { |
||
| 108 | $container = $this->container; |
||
| 109 | $aimeos = $container->get( 'aimeos' )->get(); |
||
| 110 | $context = $container->get( 'aimeos.context' )->get( false, 'command' ); |
||
| 111 | |||
| 112 | $tmplPaths = $aimeos->getTemplatePaths( 'controller/jobs/templates' ); |
||
| 113 | $view = $container->get( 'aimeos.view' )->create( $context, $tmplPaths ); |
||
| 114 | |||
| 115 | $langManager = \Aimeos\MShop::create( $context, 'locale/language' ); |
||
| 116 | $langids = $langManager->search( $langManager->filter( true ) )->keys()->toArray(); |
||
| 117 | $i18n = $this->container->get( 'aimeos.i18n' )->get( $langids ); |
||
| 118 | |||
| 119 | $context->setSession( new \Aimeos\Base\Session\None() ); |
||
| 120 | $context->setCache( new \Aimeos\Base\Cache\None() ); |
||
| 121 | |||
| 122 | $context->setEditor( 'aimeos:jobs' ); |
||
| 123 | $context->setView( $view ); |
||
| 124 | $context->setI18n( $i18n ); |
||
| 125 | |||
| 126 | return $context; |
||
| 127 | } |
||
| 128 | } |
||
| 129 |