@@ -21,23 +21,23 @@ discard block |
||
21 | 21 | * |
22 | 22 | * @return Constraint[] |
23 | 23 | */ |
24 | - public function queryConstraintsForProperty( PropertyId $propertyId ) { |
|
25 | - $db = wfGetDB( DB_REPLICA ); |
|
24 | + public function queryConstraintsForProperty(PropertyId $propertyId) { |
|
25 | + $db = wfGetDB(DB_REPLICA); |
|
26 | 26 | |
27 | 27 | $results = $db->select( |
28 | 28 | 'wbqc_constraints', |
29 | 29 | '*', |
30 | - [ 'pid' => $propertyId->getNumericId() ] |
|
30 | + ['pid' => $propertyId->getNumericId()] |
|
31 | 31 | ); |
32 | 32 | |
33 | - return $this->convertToConstraints( $results ); |
|
33 | + return $this->convertToConstraints($results); |
|
34 | 34 | } |
35 | 35 | |
36 | - private function encodeConstraintParameters( array $constraintParameters ) { |
|
37 | - $json = json_encode( $constraintParameters, JSON_FORCE_OBJECT ); |
|
36 | + private function encodeConstraintParameters(array $constraintParameters) { |
|
37 | + $json = json_encode($constraintParameters, JSON_FORCE_OBJECT); |
|
38 | 38 | |
39 | - if ( strlen( $json ) > 50000 ) { |
|
40 | - $json = json_encode( [ '@error' => [ 'toolong' => true ] ] ); |
|
39 | + if (strlen($json) > 50000) { |
|
40 | + $json = json_encode(['@error' => ['toolong' => true]]); |
|
41 | 41 | } |
42 | 42 | |
43 | 43 | return $json; |
@@ -49,21 +49,21 @@ discard block |
||
49 | 49 | * @throws DBUnexpectedError |
50 | 50 | * @return bool |
51 | 51 | */ |
52 | - public function insertBatch( array $constraints ) { |
|
52 | + public function insertBatch(array $constraints) { |
|
53 | 53 | $accumulator = array_map( |
54 | - function ( Constraint $constraint ) { |
|
54 | + function(Constraint $constraint) { |
|
55 | 55 | return [ |
56 | 56 | 'constraint_guid' => $constraint->getConstraintId(), |
57 | 57 | 'pid' => $constraint->getPropertyId()->getNumericId(), |
58 | 58 | 'constraint_type_qid' => $constraint->getConstraintTypeItemId(), |
59 | - 'constraint_parameters' => $this->encodeConstraintParameters( $constraint->getConstraintParameters() ) |
|
59 | + 'constraint_parameters' => $this->encodeConstraintParameters($constraint->getConstraintParameters()) |
|
60 | 60 | ]; |
61 | 61 | }, |
62 | 62 | $constraints |
63 | 63 | ); |
64 | 64 | |
65 | - $db = wfGetDB( DB_MASTER ); |
|
66 | - return $db->insert( 'wbqc_constraints', $accumulator ); |
|
65 | + $db = wfGetDB(DB_MASTER); |
|
66 | + return $db->insert('wbqc_constraints', $accumulator); |
|
67 | 67 | } |
68 | 68 | |
69 | 69 | /** |
@@ -71,13 +71,13 @@ discard block |
||
71 | 71 | * |
72 | 72 | * @return array |
73 | 73 | */ |
74 | - private function uuidPattern( LikeMatch $any ) { |
|
74 | + private function uuidPattern(LikeMatch $any) { |
|
75 | 75 | return array_merge( |
76 | - array_fill( 0, 8, $any ), [ '-' ], |
|
77 | - array_fill( 0, 4, $any ), [ '-' ], |
|
78 | - array_fill( 0, 4, $any ), [ '-' ], |
|
79 | - array_fill( 0, 4, $any ), [ '-' ], |
|
80 | - array_fill( 0, 12, $any ) |
|
76 | + array_fill(0, 8, $any), ['-'], |
|
77 | + array_fill(0, 4, $any), ['-'], |
|
78 | + array_fill(0, 4, $any), ['-'], |
|
79 | + array_fill(0, 4, $any), ['-'], |
|
80 | + array_fill(0, 12, $any) |
|
81 | 81 | ); |
82 | 82 | } |
83 | 83 | |
@@ -88,11 +88,11 @@ discard block |
||
88 | 88 | * @throws DBUnexpectedError |
89 | 89 | */ |
90 | 90 | public function deleteWhereConstraintIdIsUuid() { |
91 | - $db = wfGetDB( DB_MASTER ); |
|
91 | + $db = wfGetDB(DB_MASTER); |
|
92 | 92 | $db->delete( |
93 | 93 | 'wbqc_constraints', |
94 | 94 | // WHERE constraint_guid LIKE ________-____-____-____-____________ |
95 | - 'constraint_guid ' . $db->buildLike( $this->uuidPattern( $db->anyChar() ) ) |
|
95 | + 'constraint_guid '.$db->buildLike($this->uuidPattern($db->anyChar())) |
|
96 | 96 | ); |
97 | 97 | } |
98 | 98 | |
@@ -104,14 +104,14 @@ discard block |
||
104 | 104 | * |
105 | 105 | * @throws DBUnexpectedError |
106 | 106 | */ |
107 | - public function deleteForPropertyWhereConstraintIdIsStatementId( PropertyId $propertyId ) { |
|
108 | - $db = wfGetDB( DB_MASTER ); |
|
107 | + public function deleteForPropertyWhereConstraintIdIsStatementId(PropertyId $propertyId) { |
|
108 | + $db = wfGetDB(DB_MASTER); |
|
109 | 109 | $db->delete( |
110 | 110 | 'wbqc_constraints', |
111 | 111 | [ |
112 | 112 | 'pid' => $propertyId->getNumericId(), |
113 | 113 | // AND constraint_guid LIKE %$________-____-____-____-____________ |
114 | - 'constraint_guid ' . $db->buildLike( array_merge( [ $db->anyString(), '$' ], $this->uuidPattern( $db->anyChar() ) ) ) |
|
114 | + 'constraint_guid '.$db->buildLike(array_merge([$db->anyString(), '$'], $this->uuidPattern($db->anyChar()))) |
|
115 | 115 | ] |
116 | 116 | ); |
117 | 117 | } |
@@ -122,21 +122,21 @@ discard block |
||
122 | 122 | * @throws InvalidArgumentException |
123 | 123 | * @throws DBUnexpectedError |
124 | 124 | */ |
125 | - public function deleteAll( $batchSize = 1000 ) { |
|
126 | - if ( !is_int( $batchSize ) ) { |
|
125 | + public function deleteAll($batchSize = 1000) { |
|
126 | + if (!is_int($batchSize)) { |
|
127 | 127 | throw new InvalidArgumentException(); |
128 | 128 | } |
129 | 129 | $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory(); |
130 | - $db = $lbFactory->getMainLB()->getConnection( DB_MASTER ); |
|
131 | - if ( $db->getType() === 'sqlite' ) { |
|
132 | - $db->delete( 'wbqc_constraints', '*' ); |
|
130 | + $db = $lbFactory->getMainLB()->getConnection(DB_MASTER); |
|
131 | + if ($db->getType() === 'sqlite') { |
|
132 | + $db->delete('wbqc_constraints', '*'); |
|
133 | 133 | } else { |
134 | 134 | do { |
135 | - $db->commit( __METHOD__, 'flush' ); |
|
135 | + $db->commit(__METHOD__, 'flush'); |
|
136 | 136 | $lbFactory->waitForReplication(); |
137 | - $table = $db->tableName( 'wbqc_constraints' ); |
|
138 | - $db->query( sprintf( 'DELETE FROM %s LIMIT %d', $table, $batchSize ) ); |
|
139 | - } while ( $db->affectedRows() > 0 ); |
|
137 | + $table = $db->tableName('wbqc_constraints'); |
|
138 | + $db->query(sprintf('DELETE FROM %s LIMIT %d', $table, $batchSize)); |
|
139 | + } while ($db->affectedRows() > 0); |
|
140 | 140 | } |
141 | 141 | } |
142 | 142 | |
@@ -145,26 +145,26 @@ discard block |
||
145 | 145 | * |
146 | 146 | * @return Constraint[] |
147 | 147 | */ |
148 | - private function convertToConstraints( IResultWrapper $results ) { |
|
148 | + private function convertToConstraints(IResultWrapper $results) { |
|
149 | 149 | $constraints = []; |
150 | - foreach ( $results as $result ) { |
|
150 | + foreach ($results as $result) { |
|
151 | 151 | $constraintTypeItemId = $result->constraint_type_qid; |
152 | - $constraintParameters = json_decode( $result->constraint_parameters, true ); |
|
152 | + $constraintParameters = json_decode($result->constraint_parameters, true); |
|
153 | 153 | |
154 | - if ( $constraintParameters === null ) { |
|
154 | + if ($constraintParameters === null) { |
|
155 | 155 | // T171295 |
156 | - LoggerFactory::getInstance( 'WikibaseQualityConstraints' ) |
|
157 | - ->warning( 'Constraint {constraintId} has invalid constraint parameters.', [ |
|
156 | + LoggerFactory::getInstance('WikibaseQualityConstraints') |
|
157 | + ->warning('Constraint {constraintId} has invalid constraint parameters.', [ |
|
158 | 158 | 'method' => __METHOD__, |
159 | 159 | 'constraintId' => $result->constraint_guid, |
160 | 160 | 'constraintParameters' => $result->constraint_parameters, |
161 | - ] ); |
|
162 | - $constraintParameters = [ '@error' => [ /* unknown */ ] ]; |
|
161 | + ]); |
|
162 | + $constraintParameters = ['@error' => [/* unknown */]]; |
|
163 | 163 | } |
164 | 164 | |
165 | 165 | $constraints[] = new Constraint( |
166 | 166 | $result->constraint_guid, |
167 | - PropertyId::newFromNumber( $result->pid ), |
|
167 | + PropertyId::newFromNumber($result->pid), |
|
168 | 168 | $constraintTypeItemId, |
169 | 169 | $constraintParameters |
170 | 170 | ); |
@@ -80,22 +80,22 @@ discard block |
||
80 | 80 | * @return array first element is the namespace number (default namespace for TitleParser), |
81 | 81 | * second element is a string to prepend to the title before giving it to the TitleParser |
82 | 82 | */ |
83 | - private function getCommonsNamespace( $namespace ) { |
|
83 | + private function getCommonsNamespace($namespace) { |
|
84 | 84 | // for namespace numbers see mediawiki-config repo, wmf-config/InitialiseSettings.php, |
85 | 85 | // 'wgExtraNamespaces' key, 'commonswiki' subkey |
86 | - switch ( $namespace ) { |
|
86 | + switch ($namespace) { |
|
87 | 87 | case '': |
88 | - return [ NS_MAIN, '' ]; |
|
88 | + return [NS_MAIN, '']; |
|
89 | 89 | case 'Creator': |
90 | - return [ 100, '' ]; |
|
90 | + return [100, '']; |
|
91 | 91 | case 'TimedText': |
92 | - return [ 102, '' ]; |
|
92 | + return [102, '']; |
|
93 | 93 | case 'Sequence': |
94 | - return [ 104, '' ]; |
|
94 | + return [104, '']; |
|
95 | 95 | case 'Institution': |
96 | - return [ 106, '' ]; |
|
96 | + return [106, '']; |
|
97 | 97 | default: |
98 | - return [ NS_MAIN, $namespace . ':' ]; |
|
98 | + return [NS_MAIN, $namespace.':']; |
|
99 | 99 | } |
100 | 100 | } |
101 | 101 | |
@@ -108,17 +108,17 @@ discard block |
||
108 | 108 | * @throws ConstraintParameterException |
109 | 109 | * @return CheckResult |
110 | 110 | */ |
111 | - public function checkConstraint( Context $context, Constraint $constraint ) { |
|
111 | + public function checkConstraint(Context $context, Constraint $constraint) { |
|
112 | 112 | $parameters = []; |
113 | 113 | $constraintParameters = $constraint->getConstraintParameters(); |
114 | - $namespace = $this->constraintParameterParser->parseNamespaceParameter( $constraintParameters, $constraint->getConstraintTypeItemId() ); |
|
115 | - $parameters['namespace'] = [ $namespace ]; |
|
114 | + $namespace = $this->constraintParameterParser->parseNamespaceParameter($constraintParameters, $constraint->getConstraintTypeItemId()); |
|
115 | + $parameters['namespace'] = [$namespace]; |
|
116 | 116 | |
117 | 117 | $snak = $context->getSnak(); |
118 | 118 | |
119 | - if ( !$snak instanceof PropertyValueSnak ) { |
|
119 | + if (!$snak instanceof PropertyValueSnak) { |
|
120 | 120 | // nothing to check |
121 | - return new CheckResult( $context, $constraint, $parameters, CheckResult::STATUS_COMPLIANCE ); |
|
121 | + return new CheckResult($context, $constraint, $parameters, CheckResult::STATUS_COMPLIANCE); |
|
122 | 122 | } |
123 | 123 | |
124 | 124 | $dataValue = $snak->getDataValue(); |
@@ -128,46 +128,46 @@ discard block |
||
128 | 128 | * type of $dataValue for properties with 'Commons link' constraint has to be 'string' |
129 | 129 | * parameter $namespace can be null, works for commons galleries |
130 | 130 | */ |
131 | - if ( $dataValue->getType() !== 'string' ) { |
|
132 | - $message = ( new ViolationMessage( 'wbqc-violation-message-value-needed-of-type' ) ) |
|
133 | - ->withEntityId( new ItemId( $constraint->getConstraintTypeItemId() ), Role::CONSTRAINT_TYPE_ITEM ) |
|
134 | - ->withDataValueType( 'string' ); |
|
135 | - return new CheckResult( $context, $constraint, $parameters, CheckResult::STATUS_VIOLATION, $message ); |
|
131 | + if ($dataValue->getType() !== 'string') { |
|
132 | + $message = (new ViolationMessage('wbqc-violation-message-value-needed-of-type')) |
|
133 | + ->withEntityId(new ItemId($constraint->getConstraintTypeItemId()), Role::CONSTRAINT_TYPE_ITEM) |
|
134 | + ->withDataValueType('string'); |
|
135 | + return new CheckResult($context, $constraint, $parameters, CheckResult::STATUS_VIOLATION, $message); |
|
136 | 136 | } |
137 | 137 | |
138 | 138 | $commonsLink = $dataValue->getValue(); |
139 | 139 | |
140 | 140 | try { |
141 | - if ( !$this->commonsLinkIsWellFormed( $commonsLink ) ) { |
|
142 | - throw new MalformedTitleException( 'wbqc-violation-message-commons-link-not-well-formed', $commonsLink ); // caught below |
|
141 | + if (!$this->commonsLinkIsWellFormed($commonsLink)) { |
|
142 | + throw new MalformedTitleException('wbqc-violation-message-commons-link-not-well-formed', $commonsLink); // caught below |
|
143 | 143 | } |
144 | - list( $defaultNamespace, $prefix ) = $this->getCommonsNamespace( $namespace ); |
|
145 | - $title = $this->titleParser->parseTitle( $prefix . $commonsLink, $defaultNamespace ); |
|
146 | - if ( $this->pageExists( $title ) ) { |
|
144 | + list($defaultNamespace, $prefix) = $this->getCommonsNamespace($namespace); |
|
145 | + $title = $this->titleParser->parseTitle($prefix.$commonsLink, $defaultNamespace); |
|
146 | + if ($this->pageExists($title)) { |
|
147 | 147 | $message = null; |
148 | 148 | $status = CheckResult::STATUS_COMPLIANCE; |
149 | 149 | } else { |
150 | - if ( $this->valueIncludesNamespace( $commonsLink, $namespace ) ) { |
|
151 | - throw new MalformedTitleException( 'wbqc-violation-message-commons-link-not-well-formed', $commonsLink ); // caught below |
|
150 | + if ($this->valueIncludesNamespace($commonsLink, $namespace)) { |
|
151 | + throw new MalformedTitleException('wbqc-violation-message-commons-link-not-well-formed', $commonsLink); // caught below |
|
152 | 152 | } else { |
153 | - $message = new ViolationMessage( 'wbqc-violation-message-commons-link-no-existent' ); |
|
153 | + $message = new ViolationMessage('wbqc-violation-message-commons-link-no-existent'); |
|
154 | 154 | $status = CheckResult::STATUS_VIOLATION; |
155 | 155 | } |
156 | 156 | } |
157 | - } catch ( MalformedTitleException $e ) { |
|
158 | - $message = new ViolationMessage( 'wbqc-violation-message-commons-link-not-well-formed' ); |
|
157 | + } catch (MalformedTitleException $e) { |
|
158 | + $message = new ViolationMessage('wbqc-violation-message-commons-link-not-well-formed'); |
|
159 | 159 | $status = CheckResult::STATUS_VIOLATION; |
160 | 160 | } |
161 | 161 | |
162 | - return new CheckResult( $context, $constraint, $parameters, $status, $message ); |
|
162 | + return new CheckResult($context, $constraint, $parameters, $status, $message); |
|
163 | 163 | } |
164 | 164 | |
165 | - public function checkConstraintParameters( Constraint $constraint ) { |
|
165 | + public function checkConstraintParameters(Constraint $constraint) { |
|
166 | 166 | $constraintParameters = $constraint->getConstraintParameters(); |
167 | 167 | $exceptions = []; |
168 | 168 | try { |
169 | - $this->constraintParameterParser->parseNamespaceParameter( $constraintParameters, $constraint->getConstraintTypeItemId() ); |
|
170 | - } catch ( ConstraintParameterException $e ) { |
|
169 | + $this->constraintParameterParser->parseNamespaceParameter($constraintParameters, $constraint->getConstraintTypeItemId()); |
|
170 | + } catch (ConstraintParameterException $e) { |
|
171 | 171 | $exceptions[] = $e; |
172 | 172 | } |
173 | 173 | return $exceptions; |
@@ -178,20 +178,20 @@ discard block |
||
178 | 178 | * |
179 | 179 | * @return bool |
180 | 180 | */ |
181 | - private function pageExists( TitleValue $title ) { |
|
181 | + private function pageExists(TitleValue $title) { |
|
182 | 182 | $commonsWikiId = 'commonswiki'; |
183 | - if ( defined( 'MW_PHPUNIT_TEST' ) ) { |
|
183 | + if (defined('MW_PHPUNIT_TEST')) { |
|
184 | 184 | $commonsWikiId = false; |
185 | 185 | } |
186 | 186 | |
187 | 187 | $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory(); |
188 | - $dbConnection = $lbFactory->getMainLB( $commonsWikiId )->getConnection( |
|
188 | + $dbConnection = $lbFactory->getMainLB($commonsWikiId)->getConnection( |
|
189 | 189 | DB_REPLICA, false, $commonsWikiId |
190 | 190 | ); |
191 | - $row = $dbConnection->selectRow( 'page', '*', [ |
|
191 | + $row = $dbConnection->selectRow('page', '*', [ |
|
192 | 192 | 'page_title' => $title->getDBkey(), |
193 | 193 | 'page_namespace' => $title->getNamespace() |
194 | - ] ); |
|
194 | + ]); |
|
195 | 195 | |
196 | 196 | return $row !== false; |
197 | 197 | } |
@@ -201,9 +201,9 @@ discard block |
||
201 | 201 | * |
202 | 202 | * @return bool |
203 | 203 | */ |
204 | - private function commonsLinkIsWellFormed( $commonsLink ) { |
|
205 | - $toReplace = [ "_", "%20" ]; |
|
206 | - $compareString = trim( str_replace( $toReplace, '', $commonsLink ) ); |
|
204 | + private function commonsLinkIsWellFormed($commonsLink) { |
|
205 | + $toReplace = ["_", "%20"]; |
|
206 | + $compareString = trim(str_replace($toReplace, '', $commonsLink)); |
|
207 | 207 | return $commonsLink === $compareString; |
208 | 208 | } |
209 | 209 | |
@@ -216,9 +216,9 @@ discard block |
||
216 | 216 | * |
217 | 217 | * @return bool |
218 | 218 | */ |
219 | - private function valueIncludesNamespace( $value, $namespace ) { |
|
219 | + private function valueIncludesNamespace($value, $namespace) { |
|
220 | 220 | return $namespace !== '' && |
221 | - strncasecmp( $value, $namespace . ':', strlen( $namespace ) + 1 ) === 0; |
|
221 | + strncasecmp($value, $namespace.':', strlen($namespace) + 1) === 0; |
|
222 | 222 | } |
223 | 223 | |
224 | 224 | } |