X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FSkin.php;h=186a883d368884d92c185da36313dc5e01f7cc08;hb=ea56a5acffcffeaa6f9bc1807299e83511b9db08;hp=482513c88c6a33e3bf4c7cea3c548984ac1cfe97;hpb=da056c312e5758f2ec22e51c70ecf71c10dc4522;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Skin.php b/includes/Skin.php index 482513c88c..186a883d36 100644 --- a/includes/Skin.php +++ b/includes/Skin.php @@ -3,6 +3,7 @@ /** * * @package MediaWiki + * @subpackage Skins */ /** @@ -13,27 +14,6 @@ if( defined( "MEDIAWIKI" ) ) { # See skin.doc require_once( 'Image.php' ); -# These are the INTERNAL names, which get mapped directly to class names and -# file names in ./skins/. For display purposes, the Language class has -# internationalized names -# -/* -$wgValidSkinNames = array( - 'standard' => 'Standard', - 'nostalgia' => 'Nostalgia', - 'cologneblue' => 'CologneBlue' -); -if( $wgUsePHPTal ) { - #$wgValidSkinNames[] = 'PHPTal'; - #$wgValidSkinNames['davinci'] = 'DaVinci'; - #$wgValidSkinNames['mono'] = 'Mono'; - #$wgValidSkinNames['monobookminimal'] = 'MonoBookMinimal'; - $wgValidSkinNames['monobook'] = 'MonoBook'; - $wgValidSkinNames['myskin'] = 'MySkin'; - $wgValidSkinNames['chick'] = 'Chick'; -} -*/ - # Get a list of all skins available in /skins/ # Build using the regular expression '^(.*).php$' # Array keys are all lower case, array value keep the case used by filename @@ -43,9 +23,9 @@ $skinDir = dir($IP.'/skins'); # while code from www.php.net while (false !== ($file = $skinDir->read())) { - if(preg_match('/^(.*).php$/',$file, $matches)) { + if(preg_match('/^([^.].*)\.php$/',$file, $matches)) { $aSkin = $matches[1]; - $wgValidSkinNames[strtolower($aSkin)] = $aSkin; + $wgValidSkinNames[strtolower($aSkin)] = $aSkin; } } $skinDir->close(); @@ -103,7 +83,14 @@ class Skin { /**#@-*/ function Skin() { - $this->linktrail = wfMsg('linktrail'); + $this->linktrail = wfMsgForContent('linktrail'); + + # Cache option lookups done very frequently + $options = array( 'highlightbroken', 'hover' ); + foreach( $options as $opt ) { + global $wgUser; + $this->mOptions[$opt] = $wgUser->getOption( $opt ); + } } function getSkinNames() { @@ -275,7 +262,7 @@ class Skin { # Force no underline $s .= "a { text-decoration: none; }\n"; } - if ( 1 == $wgUser->getOption( 'highlightbroken' ) ) { + if ( 1 == $this->mOptions['highlightbroken'] ) { $s .= "a.new, #quickbar a.new { color: #CC2200; }\n"; } if ( 1 == $wgUser->getOption( 'justify' ) ) { @@ -294,7 +281,7 @@ class Skin { } else $a = array( 'bgcolor' => '#FFFFFF' ); if($wgOut->isArticle() && $wgUser->getOption('editondblclick') && - (!$wgTitle->isProtected() || $wgUser->isSysop()) ) { + (!$wgTitle->isProtected() || $wgUser->isAllowed('protect')) ) { $t = wfMsg( 'editthispage' ); $oid = $red = ''; if ( !empty($redirect) && $redirect == 'no' ) { @@ -313,7 +300,7 @@ class Skin { } function getExternalLinkAttributes( $link, $text, $class='' ) { - global $wgUser, $wgOut, $wgContLang; + global $wgContLang; $same = ($link == $text); $link = urldecode( $link ); @@ -323,20 +310,18 @@ class Skin { $r = ($class != '') ? " class='$class'" : " class='external'"; - if ( !$same && $wgUser->getOption( 'hover' ) ) { + if( !$same && $this->mOptions['hover'] ) { $r .= " title=\"{$link}\""; } return $r; } function getInternalLinkAttributes( $link, $text, $broken = false ) { - global $wgUser, $wgOut; - $link = urldecode( $link ); $link = str_replace( '_', ' ', $link ); $link = htmlspecialchars( $link ); - if ( $broken == 'stub' ) { + if( $broken == 'stub' ) { $r = ' class="stub"'; } else if ( $broken == 'yes' ) { $r = ' class="new"'; @@ -344,7 +329,7 @@ class Skin { $r = ''; } - if ( 1 == $wgUser->getOption( 'hover' ) ) { + if( $this->mOptions['hover'] ) { $r .= " title=\"{$link}\""; } return $r; @@ -354,9 +339,7 @@ class Skin { * @param bool $broken */ function getInternalLinkAttributesObj( &$nt, $text, $broken = false ) { - global $wgUser, $wgOut; - - if ( $broken == 'stub' ) { + if( $broken == 'stub' ) { $r = ' class="stub"'; } else if ( $broken == 'yes' ) { $r = ' class="new"'; @@ -364,7 +347,7 @@ class Skin { $r = ''; } - if ( 1 == $wgUser->getOption( 'hover' ) ) { + if( $this->mOptions['hover'] ) { $r .= ' title="' . $nt->getEscapedText() . '"'; } return $r; @@ -471,7 +454,7 @@ class Skin { $s .= '

'; # get a big array of the parents tree - $parenttree = $wgTitle->getCategorieBrowser(); + $parenttree = $wgTitle->getParentCategoryTree(); # Render the array as a serie of links function walkThrough ($tree) { @@ -489,7 +472,7 @@ class Skin { # add our current element to the list $eltitle = Title::NewFromText($element); # FIXME : should be makeLink() [AV] - $return .= $sk->makeKnownLink($element, $eltitle->getText()).' > '; + $return .= $sk->makeLink($element, $eltitle->getText()).' > '; } return $return; } @@ -597,7 +580,7 @@ class Skin { function getUndeleteLink() { global $wgUser, $wgTitle, $wgContLang, $action; - if( $wgUser->isSysop() && + if( $wgUser->isAllowed('rollback') && (($wgTitle->getArticleId() == 0) || ($action == "history")) && ($n = $wgTitle->isDeleted() ) ) { return wfMsg( 'thisisdeleted', @@ -794,16 +777,15 @@ class Skin { if($id || $ip) { # both anons and non-anons have contri list $s .= $sep . $this->userContribsLink(); } - if ( 0 != $wgUser->getID() ) { # show only to signed in users - if($id) { # can only email non-anons - $s .= $sep . $this->emailUserLink(); - } + if( $this->showEmailUser( $id ) ) { + $s .= $sep . $this->emailUserLink(); } } - if ( $wgUser->isSysop() && $wgTitle->getArticleId() ) { - $s .= "\n
" . $this->deleteThisPage() . - $sep . $this->protectThisPage() . - $sep . $this->moveThisPage(); + if ( $wgTitle->getArticleId() ) { + $s .= "\n
"; + if($wgUser->isAllowed('delete')) { $s .= $this->deleteThisPage(); } + if($wgUser->isAllowed('protect')) { $s .= $sep . $this->protectThisPage(); } + if($wgUser->isAllowed('move')) { $s .= $sep . $this->moveThisPage(); } } $s .= "
\n" . $this->otherLanguages(); } @@ -918,6 +900,10 @@ class Skin { return $s; } + /** + * show a drop-down box of special pages + * @TODO crash bug913. Need to be rewrote completly. + */ function specialPagesList() { global $wgUser, $wgOut, $wgContLang, $wgServer, $wgRedirectScript; require_once('SpecialPage.php'); @@ -1020,7 +1006,7 @@ class Skin { global $wgUser, $wgOut, $wgTitle, $wgRequest; $diff = $wgRequest->getVal( 'diff' ); - if ( $wgTitle->getArticleId() && ( ! $diff ) && $wgUser->isSysop() ) { + if ( $wgTitle->getArticleId() && ( ! $diff ) && $wgUser->isAllowed('delete') ) { $n = $wgTitle->getPrefixedText(); $t = wfMsg( 'deletethispage' ); @@ -1035,7 +1021,7 @@ class Skin { global $wgUser, $wgOut, $wgTitle, $wgRequest; $diff = $wgRequest->getVal( 'diff' ); - if ( $wgTitle->getArticleId() && ( ! $diff ) && $wgUser->isSysop() ) { + if ( $wgTitle->getArticleId() && ( ! $diff ) && $wgUser->isAllowed('protect') ) { $n = $wgTitle->getPrefixedText(); if ( $wgTitle->isProtected() ) { @@ -1075,7 +1061,7 @@ class Skin { function moveThisPage() { global $wgTitle, $wgContLang; - if ( $wgTitle->userCanEdit() ) { + if ( $wgTitle->userCanMove() ) { $s = $this->makeKnownLink( $wgContLang->specialPage( 'Movepage' ), wfMsg( 'movethispage' ), 'target=' . $wgTitle->getPrefixedURL() ); } // no message if page is protected - would be redundant @@ -1106,6 +1092,14 @@ class Skin { return $s; } + function showEmailUser( $id ) { + global $wgEnableEmail, $wgEnableUserEmail, $wgUser; + return $wgEnableEmail && + $wgEnableUserEmail && + 0 != $wgUser->getID() && # show only to signed in users + 0 != $id; # can only email non-anons + } + function emailUserLink() { global $wgTitle, $wgContLang; @@ -1331,13 +1325,17 @@ class Skin { function makeLinkObj( &$nt, $text= '', $query = '', $trail = '', $prefix = '' ) { global $wgOut, $wgUser, $wgLinkHolders; $fname = 'Skin::makeLinkObj'; + wfProfileIn( $fname ); # Fail gracefully if ( ! isset($nt) ) { # wfDebugDieBacktrace(); + wfProfileOut( $fname ); return "{$prefix}{$text}{$trail}"; } + $ns = $nt->getNamespace(); + $dbkey = $nt->getDBkey(); if ( $nt->isExternal() ) { $u = $nt->getFullURL(); $link = $nt->getPrefixedURL(); @@ -1357,60 +1355,69 @@ class Skin { $t = "{$text}{$inside}"; $nr = array_push($wgInterwikiLinkHolders, $t); $retVal = '{$trail}"; - } elseif ( 0 == $nt->getNamespace() && "" == $nt->getText() ) { + } elseif ( 0 == $ns && "" == $dbkey ) { + # A self-link with a fragment; skip existence check. $retVal = $this->makeKnownLinkObj( $nt, $text, $query, $trail, $prefix ); - } elseif ( ( -1 == $nt->getNamespace() ) || - ( NS_IMAGE == $nt->getNamespace() ) ) { + } elseif ( ( NS_SPECIAL == $ns ) || ( NS_IMAGE == $ns ) ) { + # These are always shown as existing, currently. + # Special pages don't exist in the database; images may + # occasionally be present when there is no description + # page per se, so we always shown them. $retVal = $this->makeKnownLinkObj( $nt, $text, $query, $trail, $prefix ); - } else { - if ( $this->postParseLinkColour() ) { - $inside = ''; - if ( '' != $trail ) { - if ( preg_match( $this->linktrail, $trail, $m ) ) { - $inside = $m[1]; - $trail = $m[2]; - } + } elseif ( $this->postParseLinkColour ) { + wfProfileIn( $fname.'-postparse' ); + # Insert a placeholder, and we'll work out the existence checks + # in a big lump later. + $inside = ''; + if ( '' != $trail ) { + if ( preg_match( $this->linktrail, $trail, $m ) ) { + $inside = $m[1]; + $trail = $m[2]; } + } - # Allows wiki to bypass using linkcache, see OutputPage::parseLinkHolders() - $nr = array_push( $wgLinkHolders['namespaces'], $nt->getNamespace() ); - $wgLinkHolders['dbkeys'][] = $nt->getDBkey(); - $wgLinkHolders['queries'][] = $query; - $wgLinkHolders['texts'][] = $prefix.$text.$inside; - $wgLinkHolders['titles'][] = $nt; + # These get picked up by Parser::replaceLinkHolders() + $nr = array_push( $wgLinkHolders['namespaces'], $nt->getNamespace() ); + $wgLinkHolders['dbkeys'][] = $dbkey; + $wgLinkHolders['queries'][] = $query; + $wgLinkHolders['texts'][] = $prefix.$text.$inside; + $wgLinkHolders['titles'][] =& $nt; - $retVal = '{$trail}"; + $retVal = '{$trail}"; + wfProfileOut( $fname.'-postparse' ); + } else { + wfProfileIn( $fname.'-immediate' ); + # Work out link colour immediately + $aid = $nt->getArticleID() ; + if ( 0 == $aid ) { + $retVal = $this->makeBrokenLinkObj( $nt, $text, $query, $trail, $prefix ); } else { - # Work out link colour immediately - $aid = $nt->getArticleID() ; - if ( 0 == $aid ) { - $retVal = $this->makeBrokenLinkObj( $nt, $text, $query, $trail, $prefix ); - } else { - $threshold = $wgUser->getOption('stubthreshold') ; - if ( $threshold > 0 ) { - $dbr =& wfGetDB( DB_SLAVE ); - $s = $dbr->selectRow( 'cur', array( 'LENGTH(cur_text) AS x', 'cur_namespace', - 'cur_is_redirect' ), array( 'cur_id' => $aid ), $fname ) ; - if ( $s !== false ) { - $size = $s->x; - if ( $s->cur_is_redirect OR $s->cur_namespace != 0 ) { - $size = $threshold*2 ; # Really big - } - $dbr->freeResult( $res ); - } else { + $threshold = $wgUser->getOption('stubthreshold') ; + if ( $threshold > 0 ) { + $dbr =& wfGetDB( DB_SLAVE ); + $s = $dbr->selectRow( 'cur', array( 'LENGTH(cur_text) AS x', 'cur_namespace', + 'cur_is_redirect' ), array( 'cur_id' => $aid ), $fname ) ; + if ( $s !== false ) { + $size = $s->x; + if ( $s->cur_is_redirect OR $s->cur_namespace != 0 ) { $size = $threshold*2 ; # Really big } + $dbr->freeResult( $res ); } else { - $size = 1 ; - } - if ( $size < $threshold ) { - $retVal = $this->makeStubLinkObj( $nt, $text, $query, $trail, $prefix ); - } else { - $retVal = $this->makeKnownLinkObj( $nt, $text, $query, $trail, $prefix ); + $size = $threshold*2 ; # Really big } + } else { + $size = 1 ; + } + if ( $size < $threshold ) { + $retVal = $this->makeStubLinkObj( $nt, $text, $query, $trail, $prefix ); + } else { + $retVal = $this->makeKnownLinkObj( $nt, $text, $query, $trail, $prefix ); } } + wfProfileOut( $fname.'-immediate' ); } + wfProfileOut( $fname ); return $retVal; } @@ -1424,21 +1431,18 @@ class Skin { wfProfileIn( $fname ); if ( !is_object( $nt ) ) { + wfProfileIn( $fname ); return $text; } - $link = $nt->getPrefixedURL(); -# if ( '' != $section && substr($section,0,1) != "#" ) { -# $section = '' - - if ( '' == $link ) { - $u = ''; - if ( '' == $text ) { - $text = htmlspecialchars( $nt->getFragment() ); - } - } else { - $u = $nt->escapeLocalURL( $query ); - } + + $u = $nt->escapeLocalURL( $query ); if ( '' != $nt->getFragment() ) { + if( $nt->getPrefixedDbkey() == '' ) { + $u = ''; + if ( '' == $text ) { + $text = htmlspecialchars( $nt->getFragment() ); + } + } $anchor = urlencode( do_html_entity_decode( str_replace(' ', '_', $nt->getFragment()), ENT_COMPAT, $wgInputEncoding ) ); $replacearray = array( '%3A' => ':', @@ -1467,8 +1471,6 @@ class Skin { * Pass a title object, not a title string */ function makeBrokenLinkObj( &$nt, $text = '', $query = '', $trail = '', $prefix = '' ) { - global $wgOut, $wgUser; - # Fail gracefully if ( ! isset($nt) ) { # wfDebugDieBacktrace(); @@ -1497,7 +1499,7 @@ class Skin { $trail = $m[2]; } } - if ( $wgUser->getOption( 'highlightbroken' ) ) { + if ( $this->mOptions['highlightbroken'] ) { $s = "{$prefix}{$text}{$inside}{$trail}"; } else { $s = "{$prefix}{$text}{$inside}?{$trail}"; @@ -1511,8 +1513,6 @@ class Skin { * Pass a title object, not a title string */ function makeStubLinkObj( &$nt, $text = '', $query = '', $trail = '', $prefix = '' ) { - global $wgOut, $wgUser; - $link = $nt->getPrefixedURL(); $u = $nt->escapeLocalURL( $query ); @@ -1529,7 +1529,7 @@ class Skin { $trail = $m[2]; } } - if ( $wgUser->getOption( 'highlightbroken' ) ) { + if ( $this->mOptions['highlightbroken'] ) { $s = "{$prefix}{$text}{$inside}{$trail}"; } else { $s = "{$prefix}{$text}{$inside}!{$trail}"; @@ -1656,7 +1656,6 @@ class Skin { function makeImage( $url, $alt = '' ) { global $wgOut; - if ( '' == $alt ) { $alt = $this->fnamePart( $url ); } @@ -1696,7 +1695,7 @@ class Skin { $mwWidth =& MagicWord::get( MAG_IMG_WIDTH ); $mwCenter =& MagicWord::get( MAG_IMG_CENTER ); $mwFramed =& MagicWord::get( MAG_IMG_FRAMED ); - $alt = $part[count($part)-1]; + $alt = ''; $height = $framed = $thumb = false; $manual_thumb = "" ; @@ -1732,6 +1731,8 @@ class Skin { } } elseif ( ! is_null( $mwFramed->matchVariableStartToEnd($val) ) ) { $framed=true; + } else { + $alt = $val; } } if ( 'center' == $align ) @@ -1770,22 +1771,17 @@ class Skin { if ( '' == $manual_thumb ) $url = $img->createThumb( $width ); } - if ( empty( $alt ) ) { - $alt = preg_replace( '/\.(.+?)^/', '', $img->getName() ); - } $alt = preg_replace( '/<[^>]*>/', '', $alt ); $alt = preg_replace('/&(?!:amp;|#[Xx][0-9A-fa-f]+;|#[0-9]+;|[a-zA-Z0-9]+;)/', '&', $alt); $alt = str_replace( array('<', '>', '"'), array('<', '>', '"'), $alt ); $u = $nt->escapeLocalURL(); - $uf = $nt->escapeFullURL(); - if ( $url == '' ) - { + if ( $url == '' ) { $s = wfMsg( 'missingimage', $img->getName() ); $s .= "
{$alt}
{$url}
\n"; } else { $s = '' . - ''.$alt.''; + ''.$alt.''; } if ( '' != $align ) { $s = "
{$s}
"; @@ -1856,7 +1852,6 @@ class Skin { } $u = $img->getEscapeLocalURL(); - $uf = $img->getEscapeFullURL(); $more = htmlspecialchars( wfMsg( 'thumbnail-more' ) ); $magnifyalign = $wgContLang->isRTL() ? 'left' : 'right'; @@ -1870,7 +1865,7 @@ class Skin { $s .= ''. ''.$alt.''; + 'longdesc="'.$u.'" />'; if ( $framed ) { $zoomicon=""; } else { @@ -1885,24 +1880,29 @@ class Skin { } function makeMediaLink( $name, $url, $alt = '' ) { - $nt = Title::makeTitleSafe( Namespace::getMedia(), $name ); + $nt = Title::makeTitleSafe( NS_IMAGE, $name ); return $this->makeMediaLinkObj( $nt, $alt ); } - function makeMediaLinkObj( $nt, $alt = '' ) { + function makeMediaLinkObj( $nt, $alt = '', $nourl=false ) { if ( ! isset( $nt ) ) { ### HOTFIX. Instead of breaking, return empty string. $s = $alt; } else { - $name = $nt->getDBKey(); - $url = Image::wfImageUrl( $name ); + $name = $nt->getDBKey(); + $img = Image::newFromTitle( $nt ); + $url = $img->getURL(); + # $nourl can be set by the parser + # this is a hack to mask absolute URLs, so the parser doesn't + # linkify them (it is currently not context-aware) + # 2004-10-25 + if ($nourl) { $url=str_replace("http://","http-noparse://",$url) ; } if ( empty( $alt ) ) { $alt = preg_replace( '/\.(.+?)^/', '', $name ); } - $u = htmlspecialchars( $url ); - $s = "{$alt}"; + $s = "{$alt}"; } return $s; } @@ -1925,489 +1925,6 @@ class Skin { return ''.$text.''; } - # Called by history lists and recent changes - # - - # Returns text for the start of the tabular part of RC - function beginRecentChangesList() { - $this->rc_cache = array() ; - $this->rcMoveIndex = 0; - $this->rcCacheIndex = 0 ; - $this->lastdate = ''; - $this->rclistOpen = false; - return ''; - } - - function beginImageHistoryList() { - $s = "\n

" . wfMsg( 'imghistory' ) . "

\n" . - "

" . wfMsg( 'imghistlegend' ) . "

\n".'\n"; - } - return $s; - } - - /** - * Enhanced RC ungrouped line - */ - function recentChangesBlockLine ( $rcObj ) { - global $wgStylePath, $wgContLang ; - - # Get rc_xxxx variables - extract( $rcObj->mAttribs ) ; - $curIdEq = 'curid='.$rc_cur_id; - - # Spacer image - $r = '' ; - - $r .= '' ; - $r .= '' ; - - if ( $rc_type == RC_MOVE || $rc_type == RC_MOVE_OVER_REDIRECT ) { - $r .= '  '; - } else { - # M & N (minor & new) - $M = wfMsg( 'minoreditletter' ); - $N = wfMsg( 'newpageletter' ); - - if ( $rc_type == RC_NEW ) { - $r .= $N ; - } else { - $r .= ' ' ; - } - if ( $rc_minor ) { - $r .= $M ; - } else { - $r .= ' ' ; - } - } - - # Timestamp - $r .= ' '.$rcObj->timestamp.' ' ; - $r .= '' ; - - # Article link - $link = $rcObj->link ; - if ( $rcObj->watched ) $link = ''.$link.'' ; - $r .= $link ; - - # Diff - $r .= ' (' ; - $r .= $rcObj->difflink ; - $r .= '; ' ; - - # Hist - $r .= $this->makeKnownLinkObj( $rcObj->getTitle(), wfMsg( 'hist' ), $curIdEq.'&action=history' ); - - # User/talk - $r .= ') . . '.$rcObj->userlink ; - $r .= $rcObj->usertalklink ; - - # Comment - if ( $rc_comment != '' && $rc_type != RC_MOVE && $rc_type != RC_MOVE_OVER_REDIRECT ) { - $rc_comment=$this->formatComment($rc_comment, $rcObj->getTitle()); - $r .= $wgContLang->emphasize( ' ('.$rc_comment.')' ); - } - - $r .= "
\n" ; - return $r ; - } - - /** - * Enhanced RC group - */ - function recentChangesBlockGroup ( $block ) { - global $wgStylePath, $wgContLang ; - - $r = '' ; - $M = wfMsg( 'minoreditletter' ); - $N = wfMsg( 'newpageletter' ); - - # Collate list of users - $isnew = false ; - $userlinks = array () ; - foreach ( $block AS $rcObj ) { - $oldid = $rcObj->mAttribs['rc_last_oldid']; - if ( $rcObj->mAttribs['rc_new'] ) $isnew = true ; - $u = $rcObj->userlink ; - if ( !isset ( $userlinks[$u] ) ) $userlinks[$u] = 0 ; - $userlinks[$u]++ ; - } - - # Sort the list and convert to text - krsort ( $userlinks ) ; - asort ( $userlinks ) ; - $users = array () ; - foreach ( $userlinks as $userlink => $count) { - $text = $userlink ; - if ( $count > 1 ) $text .= " ({$count}×)" ; - array_push ( $users , $text ) ; - } - $users = ' ['.implode('; ',$users).']' ; - - # Arrow - $rci = 'RCI'.$this->rcCacheIndex ; - $rcl = 'RCL'.$this->rcCacheIndex ; - $rcm = 'RCM'.$this->rcCacheIndex ; - $toggleLink = "javascript:toggleVisibility('$rci','$rcm','$rcl')" ; - $arrowdir = $wgContLang->isRTL() ? 'l' : 'r'; - $tl = '' ; - $tl .= '' ; - $r .= $tl ; - - # Main line - # M/N - $r .= '' ; - if ( $isnew ) $r .= $N ; - else $r .= ' ' ; - $r .= ' ' ; # Minor - - # Timestamp - $r .= ' '.$block[0]->timestamp.' ' ; - $r .= '' ; - - # Article link - $link = $block[0]->link ; - if ( $block[0]->watched ) $link = ''.$link.'' ; - $r .= $link ; - - $curIdEq = 'curid=' . $block[0]->mAttribs['rc_cur_id']; - if ( $block[0]->mAttribs['rc_type'] != RC_LOG ) { - # Changes - $r .= ' ('.count($block).' ' ; - if ( $isnew ) $r .= wfMsg('changes'); - else $r .= $this->makeKnownLinkObj( $block[0]->getTitle() , wfMsg('changes') , - $curIdEq.'&diff=0&oldid='.$oldid ) ; - $r .= '; ' ; - - # History - $r .= $this->makeKnownLinkObj( $block[0]->getTitle(), wfMsg( 'history' ), $curIdEq.'&action=history' ); - $r .= ')' ; - } - - $r .= $users ; - $r .= "
\n" ; - - # Sub-entries - $r .= '\n" ; - - $this->rcCacheIndex++ ; - return $r ; - } - - /** - * If enhanced RC is in use, this function takes the previously cached - * RC lines, arranges them, and outputs the HTML - */ - function recentChangesBlock () { - global $wgStylePath ; - if ( count ( $this->rc_cache ) == 0 ) return '' ; - $blockOut = ''; - foreach ( $this->rc_cache AS $secureName => $block ) { - if ( count ( $block ) < 2 ) { - $blockOut .= $this->recentChangesBlockLine ( array_shift ( $block ) ) ; - } else { - $blockOut .= $this->recentChangesBlockGroup ( $block ) ; - } - } - - return '
'.$blockOut.'
' ; - } - - /** - * Called in a loop over all displayed RC entries - * Either returns the line, or caches it for later use - */ - function recentChangesLine( &$rc, $watched = false ) { - global $wgUser ; - $usenew = $wgUser->getOption( 'usenewrc' ); - if ( $usenew ) - $line = $this->recentChangesLineNew ( $rc, $watched ) ; - else - $line = $this->recentChangesLineOld ( $rc, $watched ) ; - return $line ; - } - - function recentChangesLineOld( &$rc, $watched = false ) { - global $wgTitle, $wgLang, $wgContLang, $wgUser, $wgRCSeconds, $wgUseRCPatrol, $wgOnlySysopsCanPatrol; - - # Extract DB fields into local scope - extract( $rc->mAttribs ); - $curIdEq = 'curid=' . $rc_cur_id; - - # Make date header if necessary - $date = $wgContLang->date( $rc_timestamp, true); - $uidate = $wgLang->date( $rc_timestamp, true); - $s = ''; - if ( $date != $this->lastdate ) { - if ( '' != $this->lastdate ) { $s .= "\n"; } - $s .= "

{$uidate}

\n\n"; - return $s; - } /** * This function is called by all recent changes variants, by the page history, @@ -2424,6 +1941,9 @@ class Skin { * temporarily to a value pass. Should be adjusted further. --brion */ function formatComment($comment, $title = NULL) { + $fname = 'Skin::formatComment'; + wfProfileIn( $fname ); + global $wgContLang; $comment = htmlspecialchars( $comment ); @@ -2481,65 +2001,10 @@ class Skin { } $comment = preg_replace( $linkRegexp, $thelink, $comment, 1 ); } + wfProfileOut( $fname ); return $comment; } - - function imageHistoryLine( $iscur, $timestamp, $img, $user, $usertext, $size, $description ) { - global $wgUser, $wgLang, $wgContLang, $wgTitle; - - $datetime = $wgLang->timeanddate( $timestamp, true ); - $del = wfMsg( 'deleteimg' ); - $delall = wfMsg( 'deleteimgcompletely' ); - $cur = wfMsg( 'cur' ); - - if ( $iscur ) { - $url = Image::wfImageUrl( $img ); - $rlink = $cur; - if ( $wgUser->isSysop() ) { - $link = $wgTitle->escapeLocalURL( 'image=' . $wgTitle->getPartialURL() . - '&action=delete' ); - $style = $this->getInternalLinkAttributes( $link, $delall ); - - $dlink = ''.$delall.''; - } else { - $dlink = $del; - } - } else { - $url = htmlspecialchars( wfImageArchiveUrl( $img ) ); - if( $wgUser->getID() != 0 && $wgTitle->userCanEdit() ) { - $rlink = $this->makeKnownLink( $wgTitle->getPrefixedText(), - wfMsg( 'revertimg' ), 'action=revert&oldimage=' . - urlencode( $img ) ); - $dlink = $this->makeKnownLink( $wgTitle->getPrefixedText(), - $del, 'action=delete&oldimage=' . urlencode( $img ) ); - } else { - # Having live active links for non-logged in users - # means that bots and spiders crawling our site can - # inadvertently change content. Baaaad idea. - $rlink = wfMsg( 'revertimg' ); - $dlink = $del; - } - } - if ( 0 == $user ) { - $userlink = $usertext; - } else { - $userlink = $this->makeLink( $wgContLang->getNsText( Namespace::getUser() ) . - ':'.$usertext, $usertext ); - } - $nbytes = wfMsg( 'nbytes', $size ); - $style = $this->getInternalLinkAttributes( $url, $datetime ); - - $s = "
  • ({$dlink}) ({$rlink}) {$datetime}" - . " . . {$userlink} ({$nbytes})"; - - if ( '' != $description && '*' != $description ) { - $sk=$wgUser->getSkin(); - $s .= $wgContLang->emphasize(' (' . $sk->formatComment($description,$wgTitle) . ')'); - } - $s .= "
  • \n"; - return $s; - } - + function tocIndent($level) { return str_repeat( '
    '."\n", $level>0 ? $level : 0 ); } @@ -2636,133 +2101,6 @@ class Skin { } - /** - * This function is called by EditPage.php and shows a bulletin board style - * toolbar for common editing functions. It can be disabled in the user - * preferences. - * The necessary JavaScript code can be found in style/wikibits.js. - */ - function getEditToolbar() { - global $wgStylePath, $wgLang, $wgMimeType; - - /** - * toolarray an array of arrays which each include the filename of - * the button image (without path), the opening tag, the closing tag, - * and optionally a sample text that is inserted between the two when no - * selection is highlighted. - * The tip text is shown when the user moves the mouse over the button. - * - * Already here are accesskeys (key), which are not used yet until someone - * can figure out a way to make them work in IE. However, we should make - * sure these keys are not defined on the edit page. - */ - $toolarray=array( - array( 'image'=>'button_bold.png', - 'open' => "\'\'\'", - 'close' => "\'\'\'", - 'sample'=> wfMsg('bold_sample'), - 'tip' => wfMsg('bold_tip'), - 'key' => 'B' - ), - array( 'image'=>'button_italic.png', - 'open' => "\'\'", - 'close' => "\'\'", - 'sample'=> wfMsg('italic_sample'), - 'tip' => wfMsg('italic_tip'), - 'key' => 'I' - ), - array( 'image'=>'button_link.png', - 'open' => '[[', - 'close' => ']]', - 'sample'=> wfMsg('link_sample'), - 'tip' => wfMsg('link_tip'), - 'key' => 'L' - ), - array( 'image'=>'button_extlink.png', - 'open' => '[', - 'close' => ']', - 'sample'=> wfMsg('extlink_sample'), - 'tip' => wfMsg('extlink_tip'), - 'key' => 'X' - ), - array( 'image'=>'button_headline.png', - 'open' => "\\n== ", - 'close' => " ==\\n", - 'sample'=> wfMsg('headline_sample'), - 'tip' => wfMsg('headline_tip'), - 'key' => 'H' - ), - array( 'image'=>'button_image.png', - 'open' => '[['.$wgLang->getNsText(NS_IMAGE).":", - 'close' => ']]', - 'sample'=> wfMsg('image_sample'), - 'tip' => wfMsg('image_tip'), - 'key' => 'D' - ), - array( 'image' => 'button_media.png', - 'open' => '[['.$wgLang->getNsText(NS_MEDIA).':', - 'close' => ']]', - 'sample'=> wfMsg('media_sample'), - 'tip' => wfMsg('media_tip'), - 'key' => 'M' - ), - array( 'image' => 'button_math.png', - 'open' => "\\", - 'close' => "\\", - 'sample'=> wfMsg('math_sample'), - 'tip' => wfMsg('math_tip'), - 'key' => 'C' - ), - array( 'image' => 'button_nowiki.png', - 'open' => "\\", - 'close' => "\\", - 'sample'=> wfMsg('nowiki_sample'), - 'tip' => wfMsg('nowiki_tip'), - 'key' => 'N' - ), - array( 'image' => 'button_sig.png', - 'open' => '--~~~~', - 'close' => '', - 'sample'=> '', - 'tip' => wfMsg('sig_tip'), - 'key' => 'Y' - ), - array( 'image' => 'button_hr.png', - 'open' => "\\n----\\n", - 'close' => '', - 'sample'=> '', - 'tip' => wfMsg('hr_tip'), - 'key' => 'R' - ) - ); - $toolbar =""; - return $toolbar; - } - /** * @access public */