Make do_all_updates mysql only.
[mediawiki.git] / skins / Standard.php
blob8140b7d6c33da668c1dcc2ac8644aba1d39b50b3
1 <?php
2 /**
3 * See skin.txt
5 * @todo document
6 * @package MediaWiki
7 * @subpackage Skins
8 */
10 if( !defined( 'MEDIAWIKI' ) )
11 die( -1 );
13 /**
14 * @todo document
15 * @package MediaWiki
16 * @subpackage Skins
18 class SkinStandard extends Skin {
20 /**
23 function getHeadScripts() {
24 global $wgStylePath, $wgJsMimeType;
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";
31 return $s;
34 /**
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 } else if ( 4 == $this->qbSetting() ) { # Floating right
44 $s .= "<style type='text/css'>\n" .
45 "@import '{$wgStylePath}/common/quickbar-right.css';\n</style>\n";
47 $s .= parent::getUserStyles();
48 return $s;
51 /**
54 function doGetUserStyles() {
55 global $wgStylePath;
57 $s = parent::doGetUserStyles();
58 $qb = $this->qbSetting();
60 if ( 2 == $qb ) { # Right
61 $s .= "#quickbar { position: absolute; top: 4px; right: 4px; " .
62 "border-left: 2px solid #000000; }\n" .
63 "#article { margin-left: 4px; margin-right: 152px; }\n";
64 } else if ( 1 == $qb || 3 == $qb ) {
65 $s .= "#quickbar { position: absolute; top: 4px; left: 4px; " .
66 "border-right: 1px solid gray; }\n" .
67 "#article { margin-left: 152px; margin-right: 4px; }\n";
68 } else if ( 4 == $qb) {
69 $s .= "#quickbar { border-right: 1px solid gray; }\n" .
70 "#article { margin-right: 152px; margin-left: 4px; }\n";
72 return $s;
75 /**
78 function getBodyOptions() {
79 $a = parent::getBodyOptions();
81 if ( 3 == $this->qbSetting() ) { # Floating left
82 $qb = "setup(\"quickbar\")";
83 if($a["onload"]) {
84 $a["onload"] .= ";$qb";
85 } else {
86 $a["onload"] = $qb;
89 return $a;
92 function doAfterContent() {
93 global $wgContLang;
94 $fname = 'SkinStandard::doAfterContent';
95 wfProfileIn( $fname );
96 wfProfileIn( $fname.'-1' );
98 $s = "\n</div><br style=\"clear:both\" />\n";
99 $s .= "\n<div id='footer'>";
100 $s .= '<table border="0" cellspacing="0"><tr>';
102 wfProfileOut( $fname.'-1' );
103 wfProfileIn( $fname.'-2' );
105 $qb = $this->qbSetting();
106 $shove = ($qb != 0);
107 $left = ($qb == 1 || $qb == 3);
108 if($wgContLang->isRTL()) $left = !$left;
110 if ( $shove && $left ) { # Left
111 $s .= $this->getQuickbarCompensator();
113 wfProfileOut( $fname.'-2' );
114 wfProfileIn( $fname.'-3' );
115 $l = $wgContLang->isRTL() ? 'right' : 'left';
116 $s .= "<td class='bottom' align='$l' valign='top'>";
118 $s .= $this->bottomLinks();
119 $s .= "\n<br />" . $this->mainPageLink()
120 . ' | ' . $this->aboutLink()
121 . ' | ' . $this->specialLink( 'recentchanges' )
122 . ' | ' . $this->searchForm()
123 . '<br /><span id="pagestats">' . $this->pageStats() . '</span>';
125 $s .= "</td>";
126 if ( $shove && !$left ) { # Right
127 $s .= $this->getQuickbarCompensator();
129 $s .= "</tr></table>\n</div>\n</div>\n";
131 wfProfileOut( $fname.'-3' );
132 wfProfileIn( $fname.'-4' );
133 if ( 0 != $qb ) { $s .= $this->quickBar(); }
134 wfProfileOut( $fname.'-4' );
135 wfProfileOut( $fname );
136 return $s;
139 function quickBar() {
140 global $wgOut, $wgTitle, $wgUser, $wgRequest, $wgContLang;
141 global $wgEnableUploads, $wgRemoteUploads;
143 $fname = 'Skin::quickBar';
144 wfProfileIn( $fname );
146 $action = $wgRequest->getText( 'action' );
147 $wpPreview = $wgRequest->getBool( 'wpPreview' );
148 $tns=$wgTitle->getNamespace();
150 $s = "\n<div id='quickbar'>";
151 $s .= "\n" . $this->logoText() . "\n<hr class='sep' />";
153 $sep = "\n<br />";
155 # Use the first heading from the Monobook sidebar as the "browse" section
156 $bar = $this->buildSidebar();
157 $browseLinks = reset( $bar );
159 foreach ( $browseLinks as $link ) {
160 if ( $link['text'] != '-' ) {
161 $s .= "<a href=\"{$link['href']}\">" .
162 htmlspecialchars( $link['text'] ) . '</a>' . $sep;
166 if( $wgUser->isLoggedIn() ) {
167 $s.= $this->specialLink( 'watchlist' ) ;
168 $s .= $sep . $this->makeKnownLink( $wgContLang->specialPage( 'Contributions' ),
169 wfMsg( 'mycontris' ), 'target=' . wfUrlencode($wgUser->getName() ) );
171 // only show watchlist link if logged in
172 $s .= "\n<hr class='sep' />";
173 $articleExists = $wgTitle->getArticleId();
174 if ( $wgOut->isArticle() || $action =='edit' || $action =='history' || $wpPreview) {
175 if($wgOut->isArticle()) {
176 $s .= '<strong>' . $this->editThisPage() . '</strong>';
177 } else { # backlink to the article in edit or history mode
178 if($articleExists){ # no backlink if no article
179 switch($tns) {
180 case 0:
181 $text = wfMsg('articlepage');
182 break;
183 case 1:
184 $text = wfMsg('viewtalkpage');
185 break;
186 case 2:
187 $text = wfMsg('userpage');
188 break;
189 case 3:
190 $text = wfMsg('viewtalkpage');
191 break;
192 case 4:
193 $text = wfMsg('projectpage');
194 break;
195 case 5:
196 $text = wfMsg('viewtalkpage');
197 break;
198 case 6:
199 $text = wfMsg('imagepage');
200 break;
201 case 7:
202 $text = wfMsg('viewtalkpage');
203 break;
204 default:
205 $text= wfMsg('articlepage');
208 $link = $wgTitle->getText();
209 if ($nstext = $wgContLang->getNsText($tns) ) { # add namespace if necessary
210 $link = $nstext . ':' . $link ;
213 $s .= $this->makeLink( $link, $text );
214 } elseif( $wgTitle->getNamespace() != NS_SPECIAL ) {
215 # we just throw in a "New page" text to tell the user that he's in edit mode,
216 # and to avoid messing with the separator that is prepended to the next item
217 $s .= '<strong>' . wfMsg('newpage') . '</strong>';
222 # "Post a comment" link
223 if( ( $wgTitle->isTalkPage() || $wgOut->showNewSectionLink() ) && $action != 'edit' && !$wpPreview )
224 $s .= '<br />' . $this->makeKnownLinkObj( $wgTitle, wfMsg( 'postcomment' ), 'action=edit&section=new' );
226 #if( $tns%2 && $action!='edit' && !$wpPreview) {
227 #$s.= '<br />'.$this->makeKnownLink($wgTitle->getPrefixedText(),wfMsg('postcomment'),'action=edit&section=new');
231 watching could cause problems in edit mode:
232 if user edits article, then loads "watch this article" in background and then saves
233 article with "Watch this article" checkbox disabled, the article is transparently
234 unwatched. Therefore we do not show the "Watch this page" link in edit mode
236 if ( $wgUser->isLoggedIn() && $articleExists) {
237 if($action!='edit' && $action != 'submit' )
239 $s .= $sep . $this->watchThisPage();
241 if ( $wgTitle->userCanEdit() )
242 $s .= $sep . $this->moveThisPage();
244 if ( $wgUser->isAllowed('delete') and $articleExists ) {
245 $s .= $sep . $this->deleteThisPage() .
246 $sep . $this->protectThisPage();
248 $s .= $sep . $this->talkLink();
249 if ($articleExists && $action !='history') {
250 $s .= $sep . $this->historyLink();
252 $s.=$sep . $this->whatLinksHere();
254 if($wgOut->isArticleRelated()) {
255 $s .= $sep . $this->watchPageLinksLink();
258 if ( NS_USER == $wgTitle->getNamespace()
259 || $wgTitle->getNamespace() == NS_USER_TALK ) {
261 $id=User::idFromName($wgTitle->getText());
262 $ip=User::isIP($wgTitle->getText());
264 if($id||$ip) {
265 $s .= $sep . $this->userContribsLink();
267 if( $this->showEmailUser( $id ) ) {
268 $s .= $sep . $this->emailUserLink();
271 $s .= "\n<br /><hr class='sep' />";
274 if ( $wgUser->isLoggedIn() && ( $wgEnableUploads || $wgRemoteUploads ) ) {
275 $s .= $this->specialLink( 'upload' ) . $sep;
277 $s .= $this->specialLink( 'specialpages' )
278 . $sep . $this->bugReportsLink();
280 global $wgSiteSupportPage;
281 if( $wgSiteSupportPage ) {
282 $s .= "\n<br /><a href=\"" . htmlspecialchars( $wgSiteSupportPage ) .
283 '" class="internal">' . wfMsg( 'sitesupport' ) . '</a>';
286 $s .= "\n<br /></div>\n";
287 wfProfileOut( $fname );
288 return $s;