limiter = $limiter; $this->subject = $subject; $this->oldContentModel = $oldContentModel; $this->newContentModel = $newContentModel; } private function limit( string $action, int $inc = 1 ) { return $this->limiter->limit( $this->subject, $action, $inc ); } public function checkConstraint(): string { // Need to check for rate limits on `editcontentmodel` if it is changing $contentModelChange = ( $this->newContentModel !== $this->oldContentModel ); // TODO inject and use a ThrottleStore once available, see T261744 // Checking if the user is rate limited increments the counts, so we cannot perform // the check again when getting the status; thus, store the result if ( $this->limit( 'edit' ) || $this->limit( 'linkpurge', 0 ) // only counted after the fact || ( $contentModelChange && $this->limit( 'editcontentmodel' ) ) ) { $this->result = self::CONSTRAINT_FAILED; } else { $this->result = self::CONSTRAINT_PASSED; } return $this->result; } public function getLegacyStatus(): StatusValue { $statusValue = StatusValue::newGood(); if ( $this->result === self::CONSTRAINT_FAILED ) { $statusValue->fatal( 'actionthrottledtext' ); $statusValue->value = self::AS_RATE_LIMITED; } return $statusValue; } }