setContext( $context ); } public function setConfig( Config $config ) { $this->config = $config; } /** * @return Config */ public function getConfig() { return $this->config ?: $this->getContext()->getConfig(); } /** * @return Timing */ public function getTiming() { return $this->timing ?: $this->getContext()->getTiming(); } public function setRequest( WebRequest $request ) { $this->request = $request; } /** * @return WebRequest */ public function getRequest() { return $this->request ?: $this->getContext()->getRequest(); } public function setTitle( Title $title ) { $this->title = $title; $this->action = null; } /** * @return Title|null */ public function getTitle() { return $this->title ?: $this->getContext()->getTitle(); } /** * Check whether a WikiPage object can be get with getWikiPage(). * Callers should expect that an exception is thrown from getWikiPage() * if this method returns false. * * @since 1.19 * @return bool */ public function canUseWikiPage() { if ( $this->wikipage !== null ) { return true; } if ( $this->title !== null ) { return $this->title->canExist(); } return $this->getContext()->canUseWikiPage(); } /** * @since 1.19 * @param WikiPage $wikiPage */ public function setWikiPage( WikiPage $wikiPage ) { $pageTitle = $wikiPage->getTitle(); if ( !$this->title || !$pageTitle->equals( $this->title ) ) { $this->setTitle( $pageTitle ); } $this->wikipage = $wikiPage; $this->action = null; } /** * Get the WikiPage object. * May throw an exception if there's no Title object set or the Title object * belongs to a special namespace that doesn't have WikiPage, so use first * canUseWikiPage() to check whether this method can be called safely. * * @since 1.19 * @return WikiPage */ public function getWikiPage() { if ( !$this->wikipage && $this->title ) { $this->wikipage = MediaWikiServices::getInstance()->getWikiPageFactory()->newFromTitle( $this->title ); } return $this->wikipage ?: $this->getContext()->getWikiPage(); } /** * @since 1.38 * @param string $action */ public function setActionName( string $action ): void { $this->action = $action; } /** * Get the action name for the current web request. * * @since 1.38 * @return string Action */ public function getActionName(): string { if ( $this->action === false ) { return $this->getContext()->getActionName(); } $this->action ??= MediaWikiServices::getInstance() ->getActionFactory() ->getActionName( $this ); return $this->action; } public function setOutput( OutputPage $output ) { $this->output = $output; } /** * @return OutputPage */ public function getOutput() { return $this->output ?: $this->getContext()->getOutput(); } public function setUser( User $user ) { $this->authority = $user; $this->user = $user; } /** * @return User */ public function getUser() { if ( !$this->user && $this->authority ) { // Keep user consistent by using a possible set authority $this->user = MediaWikiServices::getInstance() ->getUserFactory() ->newFromAuthority( $this->authority ); } return $this->user ?: $this->getContext()->getUser(); } public function setAuthority( Authority $authority ) { $this->authority = $authority; // If needed, a User object is constructed from this authority $this->user = null; } /** * @since 1.36 * @return Authority */ public function getAuthority(): Authority { return $this->authority ?: $this->getContext()->getAuthority(); } /** * @param Language|string $language Language instance or language code * @since 1.19 */ public function setLanguage( $language ) { Assert::parameterType( [ Language::class, 'string' ], $language, '$language' ); if ( $language instanceof Language ) { $this->lang = $language; } else { $language = RequestContext::sanitizeLangCode( $language ); $obj = MediaWikiServices::getInstance()->getLanguageFactory()->getLanguage( $language ); $this->lang = $obj; } } /** * @return Language * @since 1.19 */ public function getLanguage() { return $this->lang ?: $this->getContext()->getLanguage(); } public function setSkin( Skin $skin ) { $this->skin = clone $skin; $this->skin->setContext( $this ); } /** * @return Skin */ public function getSkin() { return $this->skin ?: $this->getContext()->getSkin(); } /** * Get a message using the current context. * * This can't just inherit from ContextSource, since then * it would set only the original context, and not take * into account any changes. * * @param string|string[]|MessageSpecifier $key Message key, or array of keys, * or a MessageSpecifier. * @phpcs:ignore Generic.Files.LineLength * @param MessageParam|MessageSpecifier|string|int|float|list ...$params * See Message::params() * @return Message */ public function msg( $key, ...$params ) { // phpcs:ignore MediaWiki.Usage.ExtendClassUsage.FunctionVarUsage return wfMessage( $key, ...$params )->setContext( $this ); } } /** @deprecated class alias since 1.42 */ class_alias( DerivativeContext::class, 'DerivativeContext' );