parser = $parser; $this->parserOptions = $parserOptions; $this->slotRoleHandler = $slotRoleHandler; $this->title = $title; $this->revision = $revision; $this->pagelanguage = $pagelanguage; $this->pagelanguageDir = $pagelanguageDir; } /** * Get content model * @return string */ public function getContentModel(): string { // @todo Check just the main slot, or all slots, or what? $rev = $this->getRevision(); if ( $rev ) { $content = $rev->getContent( SlotRecord::MAIN ); if ( $content ) { return $content->getModel(); } else { // The page does have a content model but we can't see it. Returning the // default model is not really correct. But we can't see the content either // so it won't matter much what we do here. return $this->slotRoleHandler->getDefaultModel( $this->title ); } } else { return $this->slotRoleHandler->getDefaultModel( $this->title ); } } public function hasLintableContentModel(): bool { // @todo Check just the main slot, or all slots, or what? $content = $this->getRevisionContent(); $model = $content ? $content->getModel( SlotRecord::MAIN ) : null; return $content && ( $model === CONTENT_MODEL_WIKITEXT || $model === 'proofread-page' ); } /** @inheritDoc */ public function getTitle(): string { return $this->title->getPrefixedText(); } /** @inheritDoc */ public function getNs(): int { return $this->title->getNamespace(); } /** @inheritDoc */ public function getPageId(): int { return $this->title->getArticleID(); } /** @inheritDoc */ public function getPageLanguage(): string { return $this->pagelanguage ?? $this->title->getPageLanguage()->getCode(); } /** @inheritDoc */ public function getPageLanguageDir(): string { return $this->pagelanguageDir ?? $this->title->getPageLanguage()->getDir(); } /** * @return ParserOptions */ public function getParserOptions(): ParserOptions { return $this->parserOptions; } /** * @return Parser */ public function getParser(): Parser { return $this->parser; } /** * @return ?RevisionRecord */ private function getRevision(): ?RevisionRecord { if ( $this->revision === null ) { $this->revision = call_user_func( $this->parserOptions->getCurrentRevisionRecordCallback(), $this->title, $this->parser ); } return $this->revision ?: null; } /** @inheritDoc */ public function getRevisionId(): ?int { $rev = $this->getRevision(); return $rev ? $rev->getId() : null; } /** @inheritDoc */ public function getParentRevisionId(): ?int { $rev = $this->getRevision(); return $rev ? $rev->getParentId() : null; } /** @inheritDoc */ public function getRevisionTimestamp(): ?string { $rev = $this->getRevision(); return $rev ? $rev->getTimestamp() : null; } /** @inheritDoc */ public function getRevisionUser(): ?string { $rev = $this->getRevision(); $user = $rev ? $rev->getUser() : null; return $user ? $user->getName() : null; } /** @inheritDoc */ public function getRevisionUserId(): ?int { $rev = $this->getRevision(); $user = $rev ? $rev->getUser() : null; return $user ? $user->getId() : null; } /** @inheritDoc */ public function getRevisionSha1(): ?string { $rev = $this->getRevision(); if ( $rev ) { // This matches what the Parsoid/JS gets from the API // FIXME: Maybe we don't need to do this in the future? return \Wikimedia\base_convert( $rev->getSha1(), 36, 16, 40 ); } else { return null; } } /** @inheritDoc */ public function getRevisionSize(): ?int { $rev = $this->getRevision(); return $rev ? $rev->getSize() : null; } /** @inheritDoc */ public function getRevisionContent(): ?IPageContent { $rev = $this->getRevision(); return $rev ? new PageContent( $rev ) : null; } }