global $wgJobClasses;
if ( isset( $wgJobClasses[$command] ) ) {
- $class = $wgJobClasses[$command];
-
- $job = new $class( $title, $params );
- $job->command = $command;
+ $handler = $wgJobClasses[$command];
+
+ if ( is_callable( $handler ) ) {
+ $job = call_user_func( $handler, $title, $params );
+ } elseif ( class_exists( $handler ) ) {
+ $job = new $handler( $title, $params );
+ } else {
+ $job = null;
+ }
- return $job;
+ if ( $job instanceof Job ) {
+ $job->command = $command;
+ return $job;
+ } else {
+ throw new InvalidArgumentException( "Cannot instantiate job '$command': bad spec!" );
+ }
}
throw new InvalidArgumentException( "Invalid job command '{$command}'" );
* @deprecated since 1.21
*/
public function insert() {
+ wfDeprecated( __METHOD__, '1.21' );
JobQueueGroup::singleton()->push( $this );
return true;
}