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