Commit | Line | Data |
---|---|---|
64a19c3d ML |
1 | <?php |
2 | /** | |
3 | * See docs/skin.txt | |
4 | * | |
5 | * @todo document | |
6 | * @file | |
7 | * @ingroup Skins | |
8 | */ | |
9 | ||
10 | if( !defined( 'MEDIAWIKI' ) ) | |
11 | die( -1 ); | |
12 | ||
13 | /** | |
14 | * @todo document | |
15 | * @ingroup Skins | |
16 | */ | |
17 | class SkinStandard extends Skin { | |
18 | ||
19 | /** | |
20 | * | |
21 | */ | |
22 | function getHeadScripts( $allowUserJs ) { | |
23 | global $wgStylePath, $wgJsMimeType, $wgStyleVersion; | |
24 | ||
25 | $s = parent::getHeadScripts( $allowUserJs ); | |
26 | if ( 3 == $this->qbSetting() ) { # Floating left | |
27 | $s .= "<script language='javascript' type='$wgJsMimeType' " . | |
28 | "src='{$wgStylePath}/common/sticky.js?$wgStyleVersion'></script>\n"; | |
29 | } | |
30 | return $s; | |
31 | } | |
32 | ||
33 | /** | |
34 | * | |
35 | */ | |
36 | function setupSkinUserCss( OutputPage $out ){ | |
37 | if ( 3 == $this->qbSetting() ) { # Floating left | |
38 | $out->addStyle( 'common/quickbar.css' ); | |
39 | } else if ( 4 == $this->qbSetting() ) { # Floating right | |
40 | $out->addStyle( 'common/quickbar-right.css' ); | |
41 | } | |
42 | parent::setupSkinUserCss( $out ); | |
43 | } | |
44 | ||
45 | /** | |
46 | * | |
47 | */ | |
48 | function reallyGenerateUserStylesheet() { | |
49 | $s = parent::reallyGenerateUserStylesheet(); | |
50 | $qb = $this->qbSetting(); | |
51 | ||
52 | if ( 2 == $qb ) { # Right | |
53 | $s .= "#quickbar { position: absolute; top: 4px; right: 4px; " . | |
54 | "border-left: 2px solid #000000; }\n" . | |
55 | "#article, #mw-data-after-content { margin-left: 4px; margin-right: 152px; }\n"; | |
56 | } else if ( 1 == $qb || 3 == $qb ) { | |
57 | $s .= "#quickbar { position: absolute; top: 4px; left: 4px; " . | |
58 | "border-right: 1px solid gray; }\n" . | |
59 | "#article, #mw-data-after-content { margin-left: 152px; margin-right: 4px; }\n"; | |
60 | } else if ( 4 == $qb) { | |
61 | $s .= "#quickbar { border-right: 1px solid gray; }\n" . | |
62 | "#article, #mw-data-after-content { margin-right: 152px; margin-left: 4px; }\n"; | |
63 | } | |
64 | return $s; | |
65 | } | |
66 | ||
67 | /** | |
68 | * | |
69 | */ | |
70 | function getBodyOptions() { | |
71 | $a = parent::getBodyOptions(); | |
72 | ||
73 | if ( 3 == $this->qbSetting() ) { # Floating left | |
74 | $qb = "setup(\"quickbar\")"; | |
75 | if($a["onload"]) { | |
76 | $a["onload"] .= ";$qb"; | |
77 | } else { | |
78 | $a["onload"] = $qb; | |
79 | } | |
80 | } | |
81 | return $a; | |
82 | } | |
83 | ||
84 | function doAfterContent() { | |
85 | global $wgContLang; | |
86 | $fname = 'SkinStandard::doAfterContent'; | |
87 | wfProfileIn( $fname ); | |
88 | wfProfileIn( $fname.'-1' ); | |
89 | ||
90 | $s = "\n</div><br style=\"clear:both\" />\n"; | |
91 | $s .= "\n<div id='footer'>"; | |
92 | $s .= '<table border="0" cellspacing="0"><tr>'; | |
93 | ||
94 | wfProfileOut( $fname.'-1' ); | |
95 | wfProfileIn( $fname.'-2' ); | |
96 | ||
97 | $qb = $this->qbSetting(); | |
98 | $shove = ($qb != 0); | |
99 | $left = ($qb == 1 || $qb == 3); | |
100 | if($wgContLang->isRTL()) $left = !$left; | |
101 | ||
102 | if ( $shove && $left ) { # Left | |
103 | $s .= $this->getQuickbarCompensator(); | |
104 | } | |
105 | wfProfileOut( $fname.'-2' ); | |
106 | wfProfileIn( $fname.'-3' ); | |
107 | $l = $wgContLang->isRTL() ? 'right' : 'left'; | |
108 | $s .= "<td class='bottom' align='$l' valign='top'>"; | |
109 | ||
110 | $s .= $this->bottomLinks(); | |
111 | $s .= "\n<br />" . $this->mainPageLink() | |
112 | . ' | ' . $this->aboutLink() | |
113 | . ' | ' . $this->specialLink( 'recentchanges' ) | |
114 | . ' | ' . $this->searchForm() | |
115 | . '<br /><span id="pagestats">' . $this->pageStats() . '</span>'; | |
116 | ||
117 | $s .= "</td>"; | |
118 | if ( $shove && !$left ) { # Right | |
119 | $s .= $this->getQuickbarCompensator(); | |
120 | } | |
121 | $s .= "</tr></table>\n</div>\n</div>\n"; | |
122 | ||
123 | wfProfileOut( $fname.'-3' ); | |
124 | wfProfileIn( $fname.'-4' ); | |
125 | if ( 0 != $qb ) { $s .= $this->quickBar(); } | |
126 | wfProfileOut( $fname.'-4' ); | |
127 | wfProfileOut( $fname ); | |
128 | return $s; | |
129 | } | |
130 | ||
131 | function quickBar() { | |
132 | global $wgOut, $wgTitle, $wgUser, $wgRequest, $wgContLang; | |
133 | global $wgEnableUploads, $wgRemoteUploads; | |
134 | ||
135 | $fname = 'Skin::quickBar'; | |
136 | wfProfileIn( $fname ); | |
137 | ||
138 | $action = $wgRequest->getText( 'action' ); | |
139 | $wpPreview = $wgRequest->getBool( 'wpPreview' ); | |
140 | $tns=$wgTitle->getNamespace(); | |
141 | ||
142 | $s = "\n<div id='quickbar'>"; | |
143 | $s .= "\n" . $this->logoText() . "\n<hr class='sep' />"; | |
144 | ||
145 | $sep = "\n<br />"; | |
146 | ||
147 | # Use the first heading from the Monobook sidebar as the "browse" section | |
148 | $bar = $this->buildSidebar(); | |
149 | unset( $bar['SEARCH'] ); | |
150 | unset( $bar['LANGUAGES'] ); | |
151 | unset( $bar['TOOLBOX'] ); | |
152 | $browseLinks = reset( $bar ); | |
153 | ||
154 | foreach ( $browseLinks as $link ) { | |
155 | if ( $link['text'] != '-' ) { | |
156 | $s .= "<a href=\"{$link['href']}\">" . | |
157 | htmlspecialchars( $link['text'] ) . '</a>' . $sep; | |
158 | } | |
159 | } | |
160 | ||
161 | if( $wgUser->isLoggedIn() ) { | |
162 | $s.= $this->specialLink( 'watchlist' ) ; | |
163 | $s .= $sep . $this->makeKnownLink( $wgContLang->specialPage( 'Contributions' ), | |
164 | wfMsg( 'mycontris' ), 'target=' . wfUrlencode($wgUser->getName() ) ); | |
165 | } | |
166 | // only show watchlist link if logged in | |
167 | $s .= "\n<hr class='sep' />"; | |
168 | $articleExists = $wgTitle->getArticleId(); | |
169 | if ( $wgOut->isArticle() || $action =='edit' || $action =='history' || $wpPreview) { | |
170 | if($wgOut->isArticle()) { | |
171 | $s .= '<strong>' . $this->editThisPage() . '</strong>'; | |
172 | } else { # backlink to the article in edit or history mode | |
173 | if($articleExists){ # no backlink if no article | |
174 | switch($tns) { | |
175 | case NS_TALK: | |
176 | case NS_USER_TALK: | |
177 | case NS_PROJECT_TALK: | |
178 | case NS_FILE_TALK: | |
179 | case NS_MEDIAWIKI_TALK: | |
180 | case NS_TEMPLATE_TALK: | |
181 | case NS_HELP_TALK: | |
182 | case NS_CATEGORY_TALK: | |
183 | $text = wfMsg('viewtalkpage'); | |
184 | break; | |
185 | case NS_MAIN: | |
186 | $text = wfMsg( 'articlepage' ); | |
187 | break; | |
188 | case NS_USER: | |
189 | $text = wfMsg( 'userpage' ); | |
190 | break; | |
191 | case NS_PROJECT: | |
192 | $text = wfMsg( 'projectpage' ); | |
193 | break; | |
194 | case NS_FILE: | |
195 | $text = wfMsg( 'imagepage' ); | |
196 | break; | |
197 | case NS_MEDIAWIKI: | |
198 | $text = wfMsg( 'mediawikipage' ); | |
199 | break; | |
200 | case NS_TEMPLATE: | |
201 | $text = wfMsg( 'templatepage' ); | |
202 | break; | |
203 | case NS_HELP: | |
204 | $text = wfMsg( 'viewhelppage' ); | |
205 | break; | |
206 | case NS_CATEGORY: | |
207 | $text = wfMsg( 'categorypage' ); | |
208 | break; | |
209 | default: | |
210 | $text= wfMsg( 'articlepage' ); | |
211 | } | |
212 | ||
213 | $link = $wgTitle->getText(); | |
214 | if ($nstext = $wgContLang->getNsText($tns) ) { # add namespace if necessary | |
215 | $link = $nstext . ':' . $link ; | |
216 | } | |
217 | ||
218 | $s .= $this->makeLink( $link, $text ); | |
219 | } elseif( $wgTitle->getNamespace() != NS_SPECIAL ) { | |
220 | # we just throw in a "New page" text to tell the user that he's in edit mode, | |
221 | # and to avoid messing with the separator that is prepended to the next item | |
222 | $s .= '<strong>' . wfMsg('newpage') . '</strong>'; | |
223 | } | |
224 | ||
225 | } | |
226 | ||
227 | # "Post a comment" link | |
228 | if( ( $wgTitle->isTalkPage() || $wgOut->showNewSectionLink() ) && $action != 'edit' && !$wpPreview ) | |
229 | $s .= '<br />' . $this->makeKnownLinkObj( $wgTitle, wfMsg( 'postcomment' ), 'action=edit§ion=new' ); | |
230 | ||
231 | #if( $tns%2 && $action!='edit' && !$wpPreview) { | |
232 | #$s.= '<br />'.$this->makeKnownLink($wgTitle->getPrefixedText(),wfMsg('postcomment'),'action=edit§ion=new'); | |
233 | #} | |
234 | ||
235 | /* | |
236 | watching could cause problems in edit mode: | |
237 | if user edits article, then loads "watch this article" in background and then saves | |
238 | article with "Watch this article" checkbox disabled, the article is transparently | |
239 | unwatched. Therefore we do not show the "Watch this page" link in edit mode | |
240 | */ | |
241 | if ( $wgUser->isLoggedIn() && $articleExists) { | |
242 | if($action!='edit' && $action != 'submit' ) | |
243 | { | |
244 | $s .= $sep . $this->watchThisPage(); | |
245 | } | |
246 | if ( $wgTitle->userCan( 'edit' ) ) | |
247 | $s .= $sep . $this->moveThisPage(); | |
248 | } | |
249 | if ( $wgUser->isAllowed('delete') and $articleExists ) { | |
250 | $s .= $sep . $this->deleteThisPage() . | |
251 | $sep . $this->protectThisPage(); | |
252 | } | |
253 | $s .= $sep . $this->talkLink(); | |
254 | if ($articleExists && $action !='history') { | |
255 | $s .= $sep . $this->historyLink(); | |
256 | } | |
257 | $s.=$sep . $this->whatLinksHere(); | |
258 | ||
259 | if($wgOut->isArticleRelated()) { | |
260 | $s .= $sep . $this->watchPageLinksLink(); | |
261 | } | |
262 | ||
263 | if ( NS_USER == $wgTitle->getNamespace() | |
264 | || $wgTitle->getNamespace() == NS_USER_TALK ) { | |
265 | ||
266 | $id=User::idFromName($wgTitle->getText()); | |
267 | $ip=User::isIP($wgTitle->getText()); | |
268 | ||
269 | if( $id || $ip ){ | |
270 | $s .= $sep . $this->userContribsLink(); | |
271 | } | |
272 | if( $this->showEmailUser( $id ) ) { | |
273 | $s .= $sep . $this->emailUserLink(); | |
274 | } | |
275 | } | |
276 | $s .= "\n<br /><hr class='sep' />"; | |
277 | } | |
278 | ||
279 | if ( $wgUser->isLoggedIn() && ( $wgEnableUploads || $wgRemoteUploads ) ) { | |
280 | $s .= $this->specialLink( 'upload' ) . $sep; | |
281 | } | |
282 | $s .= $this->specialLink( 'specialpages' ); | |
283 | ||
284 | global $wgSiteSupportPage; | |
285 | if( $wgSiteSupportPage ) { | |
286 | $s .= "\n<br /><a href=\"" . htmlspecialchars( $wgSiteSupportPage ) . | |
287 | '" class="internal">' . wfMsg( 'sitesupport' ) . '</a>'; | |
288 | } | |
289 | ||
290 | $s .= "\n<br /></div>\n"; | |
291 | wfProfileOut( $fname ); | |
292 | return $s; | |
293 | } | |
294 | ||
295 | ||
296 | } |