X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fjobqueue%2FJob.php;h=2f98d53d8233682fa4f8f1dd0994ac9464eb14ec;hp=6054e35a9fd967816c3db00c1bfb13ac7b92b9ae;hb=e5ef0fd0c6607dd34f6dee69d716b159662a0a34;hpb=7f2f49ad2368ae27f2d4db69b44c5f997197725e diff --git a/includes/jobqueue/Job.php b/includes/jobqueue/Job.php index 6054e35a9f..2f98d53d82 100644 --- a/includes/jobqueue/Job.php +++ b/includes/jobqueue/Job.php @@ -70,14 +70,19 @@ abstract class Job implements RunnableJob { // Backwards compatibility for old signature ($command, $title, $params) $title = $params; $params = func_num_args() >= 3 ? func_get_arg( 2 ) : []; + } elseif ( isset( $params['namespace'] ) && isset( $params['title'] ) ) { + // Handle job classes that take title as constructor parameter. + // If a newer classes like GenericParameterJob uses these parameters, + // then this happens in Job::__construct instead. + $title = Title::makeTitle( $params['namespace'], $params['title'] ); } else { - $title = ( isset( $params['namespace'] ) && isset( $params['title'] ) ) - ? Title::makeTitle( $params['namespace'], $params['title'] ) - : Title::makeTitle( NS_SPECIAL, '' ); + // Default title for job classes not implementing GenericParameterJob. + // This must be a valid title because it not directly passed to + // our Job constructor, but rather it's subclasses which may expect + // to be able to use it. + $title = Title::makeTitle( NS_SPECIAL, 'Blankpage' ); } - $params = is_array( $params ) ? $params : []; // sanity - if ( isset( $wgJobClasses[$command] ) ) { $handler = $wgJobClasses[$command]; @@ -98,7 +103,9 @@ abstract class Job implements RunnableJob { return $job; } else { - throw new InvalidArgumentException( "Could instantiate job '$command': bad spec!" ); + throw new InvalidArgumentException( + "Could not instantiate job '$command': bad spec!" + ); } } @@ -114,25 +121,35 @@ abstract class Job implements RunnableJob { // Backwards compatibility for old signature ($command, $title, $params) $title = $params; $params = func_num_args() >= 3 ? func_get_arg( 2 ) : []; - $params = is_array( $params ) ? $params : []; // sanity - // Set namespace/title params if both are missing and this is not a dummy title - if ( - $title->getDBkey() !== '' && - !isset( $params['namespace'] ) && - !isset( $params['title'] ) - ) { - $params['namespace'] = $title->getNamespace(); - $params['title'] = $title->getDBKey(); - // Note that JobQueue classes will prefer the parameters over getTitle() - $this->title = $title; - } + } else { + // Newer jobs may choose to not have a top-level title (e.g. GenericParameterJob) + $title = null; + } + + if ( !is_array( $params ) ) { + throw new InvalidArgumentException( '$params must be an array' ); + } + + if ( + $title && + !isset( $params['namespace'] ) && + !isset( $params['title'] ) + ) { + // When constructing this class for submitting to the queue, + // normalise the $title arg of old job classes as part of $params. + $params['namespace'] = $title->getNamespace(); + $params['title'] = $title->getDBKey(); } $this->command = $command; $this->params = $params + [ 'requestId' => WebRequest::getRequestId() ]; + if ( $this->title === null ) { + // Set this field for access via getTitle(). $this->title = ( isset( $params['namespace'] ) && isset( $params['title'] ) ) ? Title::makeTitle( $params['namespace'], $params['title'] ) + // GenericParameterJob classes without namespace/title params + // should not use getTitle(). Set an invalid title as placeholder. : Title::makeTitle( NS_SPECIAL, '' ); } }