]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blob - skins/Standard.php
MediaWiki 1.14.0
[autoinstalls/mediawiki.git] / skins / Standard.php
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&section=new' );
230                         
231                         #if( $tns%2 && $action!='edit' && !$wpPreview) {
232                                 #$s.= '<br />'.$this->makeKnownLink($wgTitle->getPrefixedText(),wfMsg('postcomment'),'action=edit&section=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 }