JobsCommand::context()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 21
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 14
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 21
rs 9.7998
1
<?php
2
3
/**
4
 * @license MIT, http://opensource.org/licenses/MIT
5
 * @copyright Aimeos (aimeos.org), 2015-2023
6
 */
7
8
9
namespace Aimeos\Shop\Command;
10
11
use Illuminate\Console\Command;
12
13
14
/**
15
 * Command for executing the Aimeos job controllers
16
 */
17
class JobsCommand extends AbstractCommand
18
{
19
	/**
20
	 * The name and signature of the console command.
21
	 *
22
	 * @var string
23
	 */
24
	protected $signature = 'aimeos:jobs
25
		{jobs : One or more job controller names like "admin/job customer/email/watch"}
26
		{site? : Site codes to execute the jobs for like "default unittest" (none for all)}
27
		{--option= : Setup configuration, name and value are separated by colon like "setup/default/demo:1"}
28
	';
29
30
	/**
31
	 * The console command description.
32
	 *
33
	 * @var string
34
	 */
35
	protected $description = 'Executes the job controllers';
36
37
38
	/**
39
	 * Execute the console command.
40
	 *
41
	 * @return mixed
42
	 */
43
	public function handle()
44
	{
45
		$jobs = $this->argument( 'jobs' );
46
		$jobs = !is_array( $jobs ) ? explode( ' ', (string) $jobs ) : $jobs;
47
48
		$fcn = function( \Aimeos\MShop\ContextIface $lcontext, \Aimeos\Bootstrap $aimeos ) use ( $jobs )
49
		{
50
			$jobfcn = function( $context, $aimeos, $jobname ) {
51
				\Aimeos\Controller\Jobs::create( $context, $aimeos, $jobname )->run();
52
			};
53
54
			$process = $lcontext->process();
55
			$site = $lcontext->locale()->getSiteItem()->getCode();
56
57
			foreach( $jobs as $jobname )
58
			{
59
				$this->info( sprintf( 'Executing Aimeos jobs "%s" for "%s"', $jobname, $site ), 'v' );
60
				$process->start( $jobfcn, [$lcontext, $aimeos, $jobname], false );
61
			}
62
63
			$process->wait();
64
		};
65
66
		$this->exec( $this->context(), $fcn, $this->argument( 'site' ) );
67
	}
68
69
70
	/**
71
	 * Returns a context object
72
	 *
73
	 * @return \Aimeos\MShop\ContextIface Context object
74
	 */
75
	protected function context() : \Aimeos\MShop\ContextIface
76
	{
77
		$lv = $this->getLaravel();
78
		$aimeos = $lv->make( 'aimeos' )->get();
79
		$context = $lv->make( 'aimeos.context' )->get( false, 'command' );
80
81
		$tmplPaths = $aimeos->getTemplatePaths( 'controller/jobs/templates' );
82
		$view = $lv->make( 'aimeos.view' )->create( $context, $tmplPaths );
83
84
		$langManager = \Aimeos\MShop::create( $context, 'locale/language' );
85
		$langids = $langManager->search( $langManager->filter( true ) )->keys()->toArray();
86
		$i18n = $lv->make( 'aimeos.i18n' )->get( $langids );
87
88
		$context->setSession( new \Aimeos\Base\Session\None() );
89
		$context->setCache( new \Aimeos\Base\Cache\None() );
90
91
		$context->setEditor( 'aimeos:jobs' );
92
		$context->setView( $view );
93
		$context->setI18n( $i18n );
94
95
		return $this->addConfig( $context );
96
	}
97
}
98