page = $page; } /** * @return Message|null */ private function getDefaultSystemMessage(): ?Message { $title = Title::castFromPageIdentity( $this->page ); return $title ? $title->getDefaultSystemMessage() : null; } /** * @inheritDoc */ public function getHtml(): ParserOutput { $message = $this->getDefaultSystemMessage(); // NOTE: This class should be used only for system messages, // so failing hard here is fine if we're not dealing with one. $messageDom = DOMUtils::parseHTML( $message->parse() ); DOMUtils::appendToHead( $messageDom, 'meta', [ 'http-equiv' => 'content-language', 'content' => LanguageCode::bcp47( $message->getLanguage()->getCode() ), ] ); $messageDocHtml = ContentUtils::toXML( $messageDom ); return new ParserOutput( $messageDocHtml ); } /** * @inheritDoc */ public function getETag( string $suffix = '' ): ?string { // XXX: We end up generating the HTML twice. Would be nice to avoid that. // But messages are small, and not hit a lot... $output = $this->getHtml(); return '"message/' . sha1( $output->getRawText() ) . '/' . $suffix . '"'; } /** * @inheritDoc * * @note This is guaranteed to always return NULL since * proper system messages (with no DB entry) have no * revision, so they should have no last modified time. */ public function getLastModified(): ?string { return null; } /** * @inheritDoc */ public function getParamSettings(): array { return []; } /** * @inheritDoc */ public function setVariantConversionLanguage( $targetLanguage, $sourceLanguage = null ): void { // TODO: Set language in the response headers. } public function putHeaders( ResponseInterface $response, bool $forHtml = true ): void { // TODO: Set language in the response headers. } }