/**
* Group all the pieces relevant to the context of a request into one instance
*
+ * @since 1.18
+ *
* @author IAlex
* @author Daniel Friesen
* @file
*/
class RequestContext {
- private $request; /// WebRequest object
- private $title; /// Title object
- private $out; /// OutputPage object
- private $user; /// User object
- private $lang; /// Language object
- private $skin; /// Skin object
+
+ /**
+ * @var WebRequest
+ */
+ private $request;
+
+ /**
+ * @var Title
+ */
+ private $title;
+
+ /**
+ * @var OutputPage
+ */
+ private $output;
+
+ /**
+ * @var User
+ */
+ private $user;
+
+ /**
+ * @var Language
+ */
+ private $lang;
+
+ /**
+ * @var Skin
+ */
+ private $skin;
/**
* Set the WebRequest object
* @return Title
*/
public function getTitle() {
- if ( !isset($this->title) ) {
+ if ( $this->title === null ) {
global $wgTitle; # fallback to $wg till we can improve this
$this->title = $wgTitle;
}
return $this->title;
}
+ /**
+ * @param $o OutputPage
+ */
+ public function setOutput( OutputPage $o ) {
+ $this->output = $o;
+ }
+
/**
* Get the OutputPage object
*
* @return OutputPage object
*/
public function getOutput() {
- if ( !isset($this->output) ) {
- $this->output = new OutputPage;
- $this->output->setContext( $this );
+ if ( $this->output === null ) {
+ $this->output = new OutputPage( $this );
}
return $this->output;
}
* @return User
*/
public function getUser() {
- if ( !isset($this->user) ) {
- global $wgCommandLineMode;
- $this->user = $wgCommandLineMode ? new User : User::newFromSession( $this->getRequest() );
+ if ( $this->user === null ) {
+ $this->user = User::newFromSession( $this->getRequest() );
}
return $this->user;
}
* @return Language
*/
public function getLang() {
- if ( !isset($this->lang) ) {
+ if ( $this->lang === null ) {
global $wgLanguageCode, $wgContLang;
- $code = $this->getRequest()->getVal( 'uselang', $this->getUser()->getOption( 'language' ) );
+ $code = $this->getRequest()->getVal(
+ 'uselang',
+ $this->getUser()->getOption( 'language' )
+ );
// BCP 47 - letter case MUST NOT carry meaning
$code = strtolower( $code );
* @return Skin
*/
public function getSkin() {
- if ( !isset($this->skin) ) {
+ if ( $this->skin === null ) {
wfProfileIn( __METHOD__ . '-createskin' );
global $wgHiddenPrefs;
* @return Message object
*/
public function msg() {
- $args = function_get_args();
- return call_user_func_array( 'wfMessage', $args )->inLanguage( $this->getLang() )->outputPage( $this->getOut() );
+ $args = func_get_args();
+ return call_user_func_array( 'wfMessage', $args )->inLanguage( $this->getLang() )->title( $this->getTitle() );
}
/** Static methods **/
*/
public static function getMain() {
static $instance = null;
- if ( !isset($instance) ) {
+ if ( $instance === null ) {
$instance = new self;
}
return $instance;
}
+}
+
+/**
+ * Interface for objects which can provide a context on request.
+ */
+interface IContextSource {
+
+ /**
+ * Get the WebRequest object
+ *
+ * @return WebRequest
+ */
+ public function getRequest();
+ /**
+ * Get the Title object
+ *
+ * @return Title
+ */
+ public function getTitle();
+
+ /**
+ * Get the OutputPage object
+ *
+ * @return OutputPage object
+ */
+ public function getOutput();
+
+ /**
+ * Get the User object
+ *
+ * @return User
+ */
+ public function getUser();
+
+ /**
+ * Get the Language object
+ *
+ * @return Language
+ */
+ public function getLang();
+
+ /**
+ * Get the Skin object
+ *
+ * @return Skin
+ */
+ public function getSkin();
}
+/**
+ * The simplest way of implementing IContextSource is to hold a RequestContext as a
+ * member variable and provide accessors to it.
+ */
+abstract class ContextSource implements IContextSource {
+
+ /**
+ * @var RequestContext
+ */
+ private $context;
+
+ /**
+ * Get the RequestContext object
+ *
+ * @return RequestContext
+ */
+ public function getContext() {
+ return $this->context;
+ }
+
+ /**
+ * Set the RequestContext object
+ *
+ * @param $context RequestContext
+ */
+ public function setContext( RequestContext $context ) {
+ $this->context = $context;
+ }
+
+ /**
+ * Get the WebRequest object
+ *
+ * @return WebRequest
+ */
+ public function getRequest() {
+ return $this->context->getRequest();
+ }
+
+ /**
+ * Get the Title object
+ *
+ * @return Title
+ */
+ public function getTitle() {
+ return $this->context->getTitle();
+ }
+
+ /**
+ * Get the OutputPage object
+ *
+ * @return OutputPage object
+ */
+ public function getOutput() {
+ return $this->context->getOutput();
+ }
+
+ /**
+ * Get the User object
+ *
+ * @return User
+ */
+ public function getUser() {
+ return $this->context->getUser();
+ }
+
+ /**
+ * Get the Language object
+ *
+ * @return Language
+ */
+ public function getLang() {
+ return $this->context->getLang();
+ }
+
+ /**
+ * Get the Skin object
+ *
+ * @return Skin
+ */
+ public function getSkin() {
+ return $this->context->getSkin();
+ }
+}