MediaWiki  1.34.0
JobSpecification.php
Go to the documentation of this file.
1 <?php
41  protected $type;
42 
44  protected $params;
45 
47  protected $title;
48 
50  protected $opts;
51 
58  public function __construct(
59  $type, array $params, array $opts = [], Title $title = null
60  ) {
61  $this->validateParams( $params );
62  $this->validateParams( $opts );
63 
64  $this->type = $type;
65  if ( $title instanceof Title ) {
66  // Make sure JobQueue classes can pull the title from parameters alone
67  if ( $title->getDBkey() !== '' ) {
68  $params += [
69  'namespace' => $title->getNamespace(),
70  'title' => $title->getDBkey()
71  ];
72  }
73  } else {
75  }
76  $this->params = $params;
77  $this->title = $title;
78  $this->opts = $opts;
79  }
80 
84  protected function validateParams( array $params ) {
85  foreach ( $params as $p => $v ) {
86  if ( is_array( $v ) ) {
87  $this->validateParams( $v );
88  } elseif ( !is_scalar( $v ) && $v !== null ) {
89  throw new UnexpectedValueException( "Job parameter $p is not JSON serializable." );
90  }
91  }
92  }
93 
94  public function getType() {
95  return $this->type;
96  }
97 
98  public function getTitle() {
99  return $this->title;
100  }
101 
102  public function getParams() {
103  return $this->params;
104  }
105 
106  public function getReleaseTimestamp() {
107  return isset( $this->params['jobReleaseTimestamp'] )
108  ? wfTimestampOrNull( TS_UNIX, $this->params['jobReleaseTimestamp'] )
109  : null;
110  }
111 
112  public function ignoreDuplicates() {
113  return !empty( $this->opts['removeDuplicates'] );
114  }
115 
116  public function getDeduplicationInfo() {
117  $info = [
118  'type' => $this->getType(),
119  'namespace' => $this->getTitle()->getNamespace(),
120  'title' => $this->getTitle()->getDBkey(),
121  'params' => $this->getParams()
122  ];
123  if ( is_array( $info['params'] ) ) {
124  // Identical jobs with different "root" jobs should count as duplicates
125  unset( $info['params']['rootJobSignature'] );
126  unset( $info['params']['rootJobTimestamp'] );
127  // Likewise for jobs with different delay times
128  unset( $info['params']['jobReleaseTimestamp'] );
129  }
130 
131  return $info;
132  }
133 
134  public function getRootJobParams() {
135  return [
136  'rootJobSignature' => $this->params['rootJobSignature'] ?? null,
137  'rootJobTimestamp' => $this->params['rootJobTimestamp'] ?? null
138  ];
139  }
140 
141  public function hasRootJobParams() {
142  return isset( $this->params['rootJobSignature'] )
143  && isset( $this->params['rootJobTimestamp'] );
144  }
145 
146  public function isRootJob() {
147  return $this->hasRootJobParams() && !empty( $this->params['rootJobIsSelf'] );
148  }
149 
154  public function toSerializableArray() {
155  return [
156  'type' => $this->type,
157  'params' => $this->params,
158  'opts' => $this->opts,
159  'title' => [
160  'ns' => $this->title->getNamespace(),
161  'key' => $this->title->getDBkey()
162  ]
163  ];
164  }
165 
171  public static function newFromArray( array $map ) {
172  $title = Title::makeTitle( $map['title']['ns'], $map['title']['key'] );
173 
174  return new self( $map['type'], $map['params'], $map['opts'], $title );
175  }
176 }
JobSpecification\__construct
__construct( $type, array $params, array $opts=[], Title $title=null)
Definition: JobSpecification.php:58
JobSpecification\toSerializableArray
toSerializableArray()
Definition: JobSpecification.php:154
JobSpecification\getTitle
getTitle()
Definition: JobSpecification.php:98
JobSpecification\newFromArray
static newFromArray(array $map)
Definition: JobSpecification.php:171
JobSpecification\$opts
array $opts
Definition: JobSpecification.php:50
JobSpecification\getType
getType()
Definition: JobSpecification.php:94
JobSpecification\getReleaseTimestamp
getReleaseTimestamp()
Definition: JobSpecification.php:106
JobSpecification\isRootJob
isRootJob()
Definition: JobSpecification.php:146
NS_SPECIAL
const NS_SPECIAL
Definition: Defines.php:49
Title\getDBkey
getDBkey()
Get the main part with underscores.
Definition: Title.php:1013
Title\getNamespace
getNamespace()
Get the namespace index, i.e.
Definition: Title.php:1037
wfTimestampOrNull
wfTimestampOrNull( $outputtype=TS_UNIX, $ts=null)
Return a formatted timestamp, or null if input is null.
Definition: GlobalFunctions.php:1885
JobSpecification\ignoreDuplicates
ignoreDuplicates()
Definition: JobSpecification.php:112
JobSpecification\getParams
getParams()
Definition: JobSpecification.php:102
Title\makeTitle
static makeTitle( $ns, $title, $fragment='', $interwiki='')
Create a new Title from a namespace index and a DB key.
Definition: Title.php:586
JobSpecification\$params
array $params
Array of job parameters or false if none.
Definition: JobSpecification.php:44
JobSpecification\validateParams
validateParams(array $params)
Definition: JobSpecification.php:84
JobSpecification\getRootJobParams
getRootJobParams()
Definition: JobSpecification.php:134
JobSpecification\hasRootJobParams
hasRootJobParams()
Definition: JobSpecification.php:141
Title
Represents a title within MediaWiki.
Definition: Title.php:42
JobSpecification\$type
string $type
Definition: JobSpecification.php:41
JobSpecification
Job queue task description base code.
Definition: JobSpecification.php:39
JobSpecification\$title
Title $title
Definition: JobSpecification.php:47
JobSpecification\getDeduplicationInfo
getDeduplicationInfo()
Subclasses may need to override this to make duplication detection work.
Definition: JobSpecification.php:116
IJobSpecification
Interface for serializable objects that describe a job queue task.
Definition: IJobSpecification.php:35