18 private ObjectFactory $objectFactory;
21 private array $jobObjectSpecs;
27 public function __construct( ObjectFactory $objectFactory, array $jobObjectSpecs ) {
28 $this->objectFactory = $objectFactory;
29 $this->jobObjectSpecs = $jobObjectSpecs;
52 if ( !isset( $this->jobObjectSpecs[ $command ] ) ) {
53 throw new InvalidArgumentException(
"Invalid job command '{$command}'" );
56 $spec = $this->jobObjectSpecs[ $command ];
57 $needsTitle = $this->needsTitle( $command, $spec );
62 $title = Title::newFromPageReference(
$params );
63 $params = func_num_args() >= 3 ? func_get_arg( 2 ) : [];
64 } elseif ( isset(
$params[
'namespace'] ) && isset(
$params[
'title'] ) ) {
68 $title = Title::makeTitle(
77 $title = Title::makeTitle(
90 $job = $this->objectFactory->createObject(
93 'allowClassName' =>
true,
94 'allowCallable' =>
true,
96 'assertClass' => Job::class
101 $job->command = $command;
114 private function needsTitle(
string $command, $spec ): bool {
115 if ( is_callable( $spec ) ) {
117 } elseif ( is_array( $spec ) ) {
118 if ( isset( $spec[
'needsPage'] ) ) {
119 $needsTitle = $spec[
'needsPage'];
120 } elseif ( isset( $spec[
'class'] ) ) {
121 $needsTitle = !is_subclass_of( $spec[
'class'],
122 GenericParameterJob::class );
123 } elseif ( isset( $spec[
'factory'] ) ) {
126 throw new InvalidArgumentException(
127 "Invalid job specification for '{$command}': " .
128 "must contain the 'class' or 'factory' key."
131 } elseif ( is_string( $spec ) ) {
132 $needsTitle = !is_subclass_of( $spec,
133 GenericParameterJob::class );
135 throw new InvalidArgumentException(
136 "Invalid job specification for '{$command}': " .
137 "must be a callable, an object spec array, or a class name"