X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FLinker.php;h=f0cb67571149ce288e7937c61b982986b12be8ab;hb=40589a98d7743ae0726de1321f0933f4aae8720f;hp=204561f863bc03840e8d710e673ec3101f1a35f8;hpb=d461014906c98acd7dba84f4de632da89482524e;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Linker.php b/includes/Linker.php index 204561f863..f0cb675711 100644 --- a/includes/Linker.php +++ b/includes/Linker.php @@ -9,7 +9,7 @@ * so that ever other bit of the wiki doesn't have to * go loading up Skin to get at it. * - * @addtogroup Skins + * @ingroup Skins */ class Linker { @@ -79,20 +79,16 @@ class Linker { /** * Return the CSS colour of a known link * - * @param mixed $s + * @param Title $t * @param integer $threshold user defined threshold * @return string CSS class */ - function getLinkColour( $s, $threshold ) { - if( $s === false ) { - return ''; - } - + function getLinkColour( $t, $threshold ) { $colour = ''; - if ( !empty( $s->page_is_redirect ) ) { + if ( $t->isRedirect() ) { # Page is a redirect $colour = 'mw-redirect'; - } elseif ( $threshold > 0 && $s->page_len < $threshold && Namespace::isContent( $s->page_namespace ) ) { + } elseif ( $threshold > 0 && $t->getLength() < $threshold && MWNamespace::isContent( $t->getNamespace() ) ) { # Page is a stub $colour = 'stub'; } @@ -127,7 +123,7 @@ class Linker { /** * This function is a shortcut to makeKnownLinkObj(Title::newFromText($title),...). Do not call * it if you already have a title object handy. See makeKnownLinkObj for further documentation. - * + * * @param $title String: the text of the title * @param $text String: link text * @param $query String: optional query part @@ -148,7 +144,7 @@ class Linker { /** * This function is a shortcut to makeBrokenLinkObj(Title::newFromText($title),...). Do not call * it if you already have a title object handy. See makeBrokenLinkObj for further documentation. - * + * * @param string $title The text of the title * @param string $text Link text * @param string $query Optional query part @@ -168,10 +164,10 @@ class Linker { /** * @deprecated use makeColouredLinkObj - * + * * This function is a shortcut to makeStubLinkObj(Title::newFromText($title),...). Do not call * it if you already have a title object handy. See makeStubLinkObj for further documentation. - * + * * @param $title String: the text of the title * @param $text String: link text * @param $query String: optional query part @@ -193,7 +189,7 @@ class Linker { * Make a link for a title which may or may not be in the database. If you need to * call this lots of times, pre-fill the link cache with a LinkBatch, otherwise each * call to this will result in a DB query. - * + * * @param $nt Title: the title object to make the link from, e.g. from * Title::newFromText. * @param $text String: link text @@ -232,7 +228,7 @@ class Linker { wfProfileOut( __METHOD__ ); return $t; } elseif ( $nt->isAlwaysKnown() ) { - # Image links, special page links and self-links with fragements are always known. + # Image links, special page links and self-links with fragments are always known. $retVal = $this->makeKnownLinkObj( $nt, $text, $query, $trail, $prefix ); } else { wfProfileIn( __METHOD__.'-immediate' ); @@ -256,15 +252,8 @@ class Linker { } else { $colour = ''; if ( $nt->isContentPage() ) { - # FIXME: This is stupid, we should combine this query with - # the Title::getArticleID() query above. $threshold = $wgUser->getOption('stubthreshold'); - $dbr = wfGetDB( DB_SLAVE ); - $s = $dbr->selectRow( - array( 'page' ), - array( 'page_len', 'page_is_redirect', 'page_namespace' ), - array( 'page_id' => $aid ), __METHOD__ ) ; - $colour = $this->getLinkColour( $s, $threshold ); + $colour = $this->getLinkColour( $nt, $threshold ); } $retVal = $this->makeColouredLinkObj( $nt, $colour, $text, $query, $trail, $prefix ); } @@ -324,7 +313,7 @@ class Linker { /** * Make a red link to the edit page of a given title. - * + * * @param $nt Title object of the target page * @param $text String: Link text * @param $query String: Optional query part @@ -367,9 +356,9 @@ class Linker { /** * @deprecated use makeColouredLinkObj - * + * * Make a brown link to a short article. - * + * * @param $nt Title object of the target page * @param $text String: link text * @param $query String: optional query part @@ -383,7 +372,7 @@ class Linker { /** * Make a coloured link. - * + * * @param $nt Title object of the target page * @param $colour Integer: colour of the link * @param $text String: link text @@ -419,7 +408,7 @@ class Linker { return $this->makeColouredLinkObj( $nt, $colour, $text, $query, $trail, $prefix ); } - /** + /** * Make appropriate markup for a link to the current article. This is currently rendered * as the bold link text. The calling sequence is the same as the other make*LinkObj functions, * despite $query not being used. @@ -457,7 +446,7 @@ class Linker { return $s; } - /** + /** * Creates the HTML source for images * @deprecated use makeImageLink2 * @@ -504,7 +493,7 @@ class Linker { * @param File $file File object, or false if it doesn't exist * * @param array $frameParams Associative array of parameters external to the media handler. - * Boolean parameters are indicated by presence or absence, the value is arbitrary and + * Boolean parameters are indicated by presence or absence, the value is arbitrary and * will often be false. * thumbnail If present, downscale and frame * manualthumb Image name to use as a thumbnail, instead of automatic scaling @@ -514,17 +503,18 @@ class Linker { * upright_factor Fudge factor for "upright" tweak (default 0.75) * border If present, show a border around the image * align Horizontal alignment (left, right, center, none) - * valign Vertical alignment (baseline, sub, super, top, text-top, middle, + * valign Vertical alignment (baseline, sub, super, top, text-top, middle, * bottom, text-bottom) * alt Alternate text for image (i.e. alt attribute). Plain text. * caption HTML for image caption. * - * @param array $handlerParams Associative array of media handler parameters, to be passed - * to transform(). Typical keys are "width" and "page". + * @param array $handlerParams Associative array of media handler parameters, to be passed + * to transform(). Typical keys are "width" and "page". * @param string $time, timestamp of the file, set as false for current + * @param string $query, query params for desc url * @return string HTML for an image, with links, wrappers, etc. */ - function makeImageLink2( Title $title, $file, $frameParams = array(), $handlerParams = array(), $time = false ) { + function makeImageLink2( Title $title, $file, $frameParams = array(), $handlerParams = array(), $time = false, $query = "" ) { $res = null; if( !wfRunHooks( 'ImageBeforeProduceHTML', array( &$this, &$title, &$file, &$frameParams, &$handlerParams, &$time, &$res ) ) ) { @@ -570,8 +560,8 @@ class Linker { } // Use width which is smaller: real image width or user preference width // For caching health: If width scaled down due to upright parameter, round to full __0 pixel to avoid the creation of a lot of odd thumbs - $prefWidth = isset( $fp['upright'] ) ? - round( $wgThumbLimits[$wopt] * $fp['upright'], -1 ) : + $prefWidth = isset( $fp['upright'] ) ? + round( $wgThumbLimits[$wopt] * $fp['upright'], -1 ) : $wgThumbLimits[$wopt]; if ( $hp['width'] <= 0 || $prefWidth < $hp['width'] ) { $hp['width'] = $prefWidth; @@ -591,7 +581,7 @@ class Linker { if ( $fp['align'] == '' ) { $fp['align'] = $wgContLang->isRTL() ? 'left' : 'right'; } - return $prefix.$this->makeThumbLink2( $title, $file, $fp, $hp, $time ).$postfix; + return $prefix.$this->makeThumbLink2( $title, $file, $fp, $hp, $time, $query ).$postfix; } if ( $file && isset( $fp['frameless'] ) ) { @@ -615,6 +605,7 @@ class Linker { } else { $s = $thumb->toHtml( array( 'desc-link' => true, + 'desc-query' => $query, 'alt' => $fp['alt'], 'valign' => isset( $fp['valign'] ) ? $fp['valign'] : false , 'img-class' => isset( $fp['border'] ) ? 'thumbborder' : false ) ); @@ -627,11 +618,11 @@ class Linker { /** * Make HTML for a thumbnail including image, border and caption - * @param Title $title + * @param Title $title * @param File $file File object or false if it doesn't exist */ function makeThumbLinkObj( Title $title, $file, $label = '', $alt, $align = 'right', $params = array(), $framed=false , $manualthumb = "" ) { - $frameParams = array( + $frameParams = array( 'alt' => $alt, 'caption' => $label, 'align' => $align @@ -641,7 +632,7 @@ class Linker { return $this->makeThumbLink2( $title, $file, $frameParams, $params ); } - function makeThumbLink2( Title $title, $file, $frameParams = array(), $handlerParams = array(), $time = false ) { + function makeThumbLink2( Title $title, $file, $frameParams = array(), $handlerParams = array(), $time = false, $query = "" ) { global $wgStylePath, $wgContLang; $exists = $file && $file->exists(); @@ -655,7 +646,7 @@ class Linker { if ( !isset( $fp['caption'] ) ) $fp['caption'] = ''; if ( empty( $hp['width'] ) ) { - // Reduce width for upright images when parameter 'upright' is used + // Reduce width for upright images when parameter 'upright' is used $hp['width'] = isset( $fp['upright'] ) ? 130 : 180; } $thumb = false; @@ -694,7 +685,9 @@ class Linker { } } - $query = $page ? 'page=' . urlencode( $page ) : ''; + if( $page ) { + $query = $query ? '&page=' . urlencode( $page ) : 'page=' . urlencode( $page ); + } $url = $title->getLocalURL( $query ); $more = htmlspecialchars( wfMsg( 'thumbnail-more' ) ); @@ -710,7 +703,8 @@ class Linker { $s .= $thumb->toHtml( array( 'alt' => $fp['alt'], 'img-class' => 'thumbimage', - 'desc-link' => true ) ); + 'desc-link' => true, + 'desc-query' => $query ) ); if ( isset( $fp['framed'] ) ) { $zoomicon=""; } else { @@ -745,9 +739,9 @@ class Linker { if( $text == '' ) $text = htmlspecialchars( $title->getPrefixedText() ); $redir = RepoGroup::singleton()->getLocalRepo()->checkRedirect( $title ); - if( $redir ) { + if( $redir ) { return $this->makeKnownLinkObj( $title, $text, $query, $trail, $prefix ); - } + } $q = 'wpDestFile=' . $title->getPartialUrl(); if( $query != '' ) $q .= '&' . $query; @@ -766,27 +760,28 @@ class Linker { } /** @deprecated use Linker::makeMediaLinkObj() */ - function makeMediaLink( $name, $unused = '', $text = '' ) { + function makeMediaLink( $name, $unused = '', $text = '', $time = false ) { $nt = Title::makeTitleSafe( NS_IMAGE, $name ); - return $this->makeMediaLinkObj( $nt, $text ); + return $this->makeMediaLinkObj( $nt, $text, $time ); } /** * Create a direct link to a given uploaded file. * * @param $title Title object. - * @param $text String: pre-sanitized HTML + * @param $text String: pre-sanitized HTML + * @param $time string: time image was created * @return string HTML * * @public * @todo Handle invalid or missing images better. */ - function makeMediaLinkObj( $title, $text = '' ) { + function makeMediaLinkObj( $title, $text = '', $time = false ) { if( is_null( $title ) ) { ### HOTFIX. Instead of breaking, return empty string. return $text; } else { - $img = wfFindFile( $title ); + $img = wfFindFile( $title, $time ); if( $img ) { $url = $img->getURL(); $class = 'internal'; @@ -854,9 +849,10 @@ class Linker { * @param string $userText User name or IP address * @param bool $redContribsWhenNoEdits Should the contributions link be red if the user has no edits? * @param int $flags Customisation flags (e.g. self::TOOL_LINKS_NOBLOCK) + * @param int $edits, user edit count (optional, for performance) * @return string */ - public function userToolLinks( $userId, $userText, $redContribsWhenNoEdits = false, $flags = 0 ) { + public function userToolLinks( $userId, $userText, $redContribsWhenNoEdits = false, $flags = 0, $edits=null ) { global $wgUser, $wgDisableAnonTalk, $wgSysopUserBans; $talkable = !( $wgDisableAnonTalk && 0 == $userId ); $blockable = ( $wgSysopUserBans || 0 == $userId ) && !$flags & self::TOOL_LINKS_NOBLOCK; @@ -867,8 +863,9 @@ class Linker { } if( $userId ) { // check if the user has an edit - if( $redContribsWhenNoEdits && User::edits( $userId ) == 0 ) { - $style = " class='new'"; + if( $redContribsWhenNoEdits ) { + $count = !is_null($edits) ? $edits : User::edits( $userId ); + $style = ($count == 0) ? " class='new'" : ''; } else { $style = ''; } @@ -889,9 +886,12 @@ class Linker { /** * Alias for userToolLinks( $userId, $userText, true ); + * @param int $userId User identifier + * @param string $userText User name or IP address + * @param int $edits, user edit count (optional, for performance) */ - public function userToolLinksRedContribs( $userId, $userText ) { - return $this->userToolLinks( $userId, $userText, true ); + public function userToolLinksRedContribs( $userId, $userText, $edits=null ) { + return $this->userToolLinks( $userId, $userText, true, 0, $edits ); } @@ -919,7 +919,7 @@ class Linker { wfMsgHtml( 'blocklink' ) ); return $blockLink; } - + /** * Generate a user link if the current user is allowed to view it * @param $rev Revision object. @@ -960,7 +960,7 @@ class Linker { } return $link; } - + /** * This function is called by all recent changes variants, by the page history, * and by the user contributions list. It is responsible for formatting edit @@ -1061,13 +1061,13 @@ class Linker { array( $this, 'formatLinksInCommentCallback' ), $comment ); } - + protected function formatLinksInCommentCallback( $match ) { global $wgContLang; - $medians = '(?:' . preg_quote( Namespace::getCanonicalName( NS_MEDIA ), '/' ) . '|'; + $medians = '(?:' . preg_quote( MWNamespace::getCanonicalName( NS_MEDIA ), '/' ) . '|'; $medians .= preg_quote( $wgContLang->getNsText( NS_MEDIA ), '/' ) . '):'; - + $comment = $match[0]; # Handle link renaming [[foo|text]] will show link as "text" @@ -1239,7 +1239,7 @@ class Linker { } elseif( $hook == 'EditSectionLinkForOther' ) { wfRunHooks( 'EditSectionLinkForOther', array( &$this, $nt, $section, $url, &$result ) ); } - + // For reverse compatibility, add the brackets *after* the hook is run, // and even add them to hook-provided text. if( is_null( $result ) ) { @@ -1307,7 +1307,7 @@ class Linker { . $this->buildRollbackLink( $rev ) . ']'; } - + /** * Build a raw rollback link, useful for collections of "tool" links * @@ -1324,7 +1324,7 @@ class Linker { $title, wfMsgHtml( 'rollbacklink' ), 'action=rollback&from=' . urlencode( $rev->getUserText() ) . $extra - ); + ); } /** @@ -1362,9 +1362,10 @@ class Linker { } $outText .= '