1ea52a218d6f46d259492eeb38dd11bbe01704e1
[lhc/web/wiklou.git] / includes / context / DerivativeContext.php
1 <?php
2 /**
3 * Request-dependant objects containers.
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 * http://www.gnu.org/copyleft/gpl.html
19 *
20 * @since 1.19
21 *
22 * @author Daniel Friesen
23 * @file
24 */
25
26 /**
27 * An IContextSource implementation which will inherit context from another source
28 * but allow individual pieces of context to be changed locally
29 * eg: A ContextSource that can inherit from the main RequestContext but have
30 * a different Title instance set on it.
31 */
32 class DerivativeContext extends ContextSource {
33
34 /**
35 * @var WebRequest
36 */
37 private $request;
38
39 /**
40 * @var Title
41 */
42 private $title;
43
44 /**
45 * @var OutputPage
46 */
47 private $output;
48
49 /**
50 * @var User
51 */
52 private $user;
53
54 /**
55 * @var Language
56 */
57 private $lang;
58
59 /**
60 * @var Skin
61 */
62 private $skin;
63
64 /**
65 * Constructor
66 * @param $context IContextSource Context to inherit from
67 */
68 public function __construct( IContextSource $context ) {
69 $this->setContext( $context );
70 }
71
72 /**
73 * Set the WebRequest object
74 *
75 * @param $r WebRequest object
76 */
77 public function setRequest( WebRequest $r ) {
78 $this->request = $r;
79 }
80
81 /**
82 * Get the WebRequest object
83 *
84 * @return WebRequest
85 */
86 public function getRequest() {
87 if ( !is_null( $this->request ) ) {
88 return $this->request;
89 } else {
90 return $this->getContext()->getRequest();
91 }
92 }
93
94 /**
95 * Set the Title object
96 *
97 * @param $t Title object
98 */
99 public function setTitle( Title $t ) {
100 $this->title = $t;
101 }
102
103 /**
104 * Get the Title object
105 *
106 * @return Title
107 */
108 public function getTitle() {
109 if ( !is_null( $this->title ) ) {
110 return $this->title;
111 } else {
112 return $this->getContext()->getTitle();
113 }
114 }
115
116 /**
117 * @param $o OutputPage
118 */
119 public function setOutput( OutputPage $o ) {
120 $this->output = $o;
121 }
122
123 /**
124 * Get the OutputPage object
125 *
126 * @return OutputPage object
127 */
128 public function getOutput() {
129 if ( !is_null( $this->output ) ) {
130 return $this->output;
131 } else {
132 return $this->getContext()->getOutput();
133 }
134 }
135
136 /**
137 * Set the User object
138 *
139 * @param $u User
140 */
141 public function setUser( User $u ) {
142 $this->user = $u;
143 }
144
145 /**
146 * Get the User object
147 *
148 * @return User
149 */
150 public function getUser() {
151 if ( !is_null( $this->user ) ) {
152 return $this->user;
153 } else {
154 return $this->getContext()->getUser();
155 }
156 }
157
158 /**
159 * Set the Language object
160 *
161 * @param $l Mixed Language instance or language code
162 */
163 public function setLang( $l ) {
164 if ( $l instanceof Language ) {
165 $this->lang = $l;
166 } elseif ( is_string( $l ) ) {
167 $l = self::sanitizeLangCode( $l ); // FIXME: Undefined method, is at RequestContext::sanitizeLangCode()
168 $obj = Language::factory( $l );
169 $this->lang = $obj;
170 } else {
171 throw new MWException( __METHOD__ . " was passed an invalid type of data." );
172 }
173 }
174
175 /**
176 * Get the Language object
177 *
178 * @return Language
179 */
180 public function getLang() {
181 if ( !is_null( $this->lang ) ) {
182 return $this->lang;
183 } else {
184 return $this->getContext()->getLang();
185 }
186 }
187
188 /**
189 * Set the Skin object
190 *
191 * @param $s Skin
192 */
193 public function setSkin( Skin $s ) {
194 $this->skin = clone $s;
195 $this->skin->setContext( $this );
196 }
197
198 /**
199 * Get the Skin object
200 *
201 * @return Skin
202 */
203 public function getSkin() {
204 if ( !is_null( $this->skin ) ) {
205 return $this->skin;
206 } else {
207 return $this->getContext()->getSkin();
208 }
209 }
210
211 }
212