X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FImagePage.php;h=6d4aedf11445400a6ce70ecf4c8bdb89e8a4813d;hb=40107fa4646e6ac09653f4cff4cbc5ef03fa7947;hp=686d3a8ff51cfbba1e479dfa6af06894ee192eba;hpb=ccfe5ad97b2d4dce3f6214cc8826ae9a2c0d80fb;p=lhc%2Fweb%2Fwiklou.git
diff --git a/includes/ImagePage.php b/includes/ImagePage.php
index 686d3a8ff5..6d4aedf114 100644
--- a/includes/ImagePage.php
+++ b/includes/ImagePage.php
@@ -1,8 +1,5 @@
displayImg->exists() )
+ if ( !$diff && $this->displayImg->exists() ) {
$wgOut->addHTML( $this->showTOC( $showmeta ) );
+ }
- if ( !$diff )
+ if ( !$diff ) {
$this->openShowImage();
+ }
# No need to display noarticletext, we use our own message, output in openShowImage()
if ( $this->getID() ) {
@@ -120,9 +123,9 @@ class ImagePage extends Article {
# Show shared description, if needed
if ( $this->mExtraDescription ) {
- $fol = wfMsgNoTrans( 'shareddescriptionfollows' );
- if ( $fol != '-' && !wfEmptyMsg( 'shareddescriptionfollows', $fol ) ) {
- $wgOut->addWikiText( $fol );
+ $fol = wfMessage( 'shareddescriptionfollows' );
+ if ( !$fol->isDisabled() ) {
+ $wgOut->addWikiText( $fol->plain() );
}
$wgOut->addHTML( '
' . $this->mExtraDescription . "
\n" );
}
@@ -143,13 +146,14 @@ class ImagePage extends Article {
# Allow extensions to add something after the image links
$html = '';
wfRunHooks( 'ImagePageAfterImageLinks', array( $this, &$html ) );
- if ( $html )
+ if ( $html ) {
$wgOut->addHTML( $html );
+ }
if ( $showmeta ) {
$wgOut->addHTML( Xml::element( 'h2', array( 'id' => 'metadata' ), wfMsg( 'metadata' ) ) . "\n" );
$wgOut->addWikiText( $this->makeMetadataTable( $formattedMetadata ) );
- $wgOut->addModules( array( 'mediawiki.legacy.metadata' ) );
+ $wgOut->addModules( array( 'mediawiki.action.view.metadata' ) );
}
$css = $this->repo->getDescriptionStylesheetUrl();
@@ -171,6 +175,7 @@ class ImagePage extends Article {
}
return $this->mRedirectTarget = Title::makeTitle( NS_FILE, $to );
}
+
public function followRedirect() {
$this->loadFile();
if ( $this->img->isLocal() ) {
@@ -183,10 +188,12 @@ class ImagePage extends Article {
}
return Title::makeTitle( NS_FILE, $to );
}
+
public function isRedirect( $text = false ) {
$this->loadFile();
- if ( $this->img->isLocal() )
+ if ( $this->img->isLocal() ) {
return parent::isRedirect( $text );
+ }
return (bool)$this->img->getRedirected();
}
@@ -211,7 +218,8 @@ class ImagePage extends Article {
if ( !is_null( $this->dupes ) ) {
return $this->dupes;
}
- if ( !( $hash = $this->img->getSha1() ) ) {
+ $hash = $this->img->getSha1();
+ if ( !( $hash ) ) {
return $this->dupes = array();
}
$dupes = RepoGroup::singleton()->findBySha1( $hash );
@@ -220,15 +228,15 @@ class ImagePage extends Article {
$size = $this->img->getSize();
foreach ( $dupes as $index => $file ) {
$key = $file->getRepoName() . ':' . $file->getName();
- if ( $key == $self )
+ if ( $key == $self ) {
unset( $dupes[$index] );
- if ( $file->getSize() != $size )
+ }
+ if ( $file->getSize() != $size ) {
unset( $dupes[$index] );
+ }
}
return $this->dupes = $dupes;
-
}
-
/**
* Create the TOC
@@ -238,9 +246,9 @@ class ImagePage extends Article {
*/
protected function showTOC( $metadata ) {
$r = array(
- '";
@@ -330,7 +338,7 @@ class ImagePage extends Article {
$height_orig = $this->displayImg->getHeight( $page );
$height = $height_orig;
- $longDesc = $this->displayImg->getLongDesc();
+ $longDesc = wfMsg( 'parentheses', $this->displayImg->getLongDesc() );
wfRunHooks( 'ImageOpenShowImageInlineBefore', array( &$this, &$wgOut ) );
@@ -338,7 +346,7 @@ class ImagePage extends Article {
# image
# "Download high res version" link below the image
- # $msgsize = wfMsgHtml('file-info-size', $width_orig, $height_orig, $sk->formatSize( $this->displayImg->getSize() ), $mime );
+ # $msgsize = wfMsgHtml( 'file-info-size', $width_orig, $height_orig, $sk->formatSize( $this->displayImg->getSize() ), $mime );
# We'll show a thumbnail of this image
if ( $width > $maxWidth || $height > $maxHeight ) {
# Calculate the thumbnail size.
@@ -355,23 +363,29 @@ class ImagePage extends Article {
# because of rounding.
}
$msgbig = wfMsgHtml( 'show-big-image' );
- $msgsmall = wfMsgExt( 'show-big-image-thumb', 'parseinline',
- $wgLang->formatNum( $width ),
- $wgLang->formatNum( $height )
- );
+ $otherSizes = array();
+ foreach ( $wgImageLimits as $size ) {
+ if ( $size[0] < $width_orig && $size[1] < $height_orig &&
+ $size[0] != $width && $size[1] != $height ) {
+ $otherSizes[] = $this->makeSizeLink( $params, $size[0], $size[1] );
+ }
+ }
+ $msgsmall = wfMessage( 'show-big-image-preview' )->
+ rawParams( $this->makeSizeLink( $params, $width, $height ) )->
+ parse() . ' ' .
+ wfMessage( 'show-big-image-other' )->
+ rawParams( $wgLang->pipeList( $otherSizes ) )->parse();
} else {
# Image is small enough to show full size on image page
$msgsmall = wfMsgExt( 'file-nohires', array( 'parseinline' ) );
}
$params['width'] = $width;
+ $params['height'] = $height;
$thumbnail = $this->displayImg->transform( $params );
$showLink = true;
- $anchorclose = '';
- if ( !$this->displayImg->mustRender() ) {
- $anchorclose = "
" . $msgsmall;
- }
+ $anchorclose = '
' . $msgsmall;
$isMulti = $this->displayImg->isMultipage() && $this->displayImg->pageCount() > 1;
if ( $isMulti ) {
@@ -439,7 +453,7 @@ class ImagePage extends Article {
$wgOut->addHTML(
'
' .
Xml::openElement( 'form', $formParams ) .
- Html::hidden( 'title', $this->getTitle()->getPrefixedDbKey() ) .
+ Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) .
wfMsgExt( 'imgmultigoto', array( 'parseinline', 'replaceafter' ), $select ) .
Xml::submitButton( wfMsg( 'imgmultigo' ) ) .
Xml::closeElement( 'form' ) .
@@ -452,14 +466,13 @@ class ImagePage extends Article {
$icon = $this->displayImg->iconThumb();
$wgOut->addHTML( ' ' .
- $icon->toHtml( array( 'file-link' => true ) ) .
- " \n" );
+ $icon->toHtml( array( 'file-link' => true ) ) .
+ " \n" );
}
$showLink = true;
}
-
if ( $showLink ) {
$filename = wfEscapeWikiText( $this->displayImg->getName() );
$linktext = $filename;
@@ -494,15 +507,43 @@ EOT
$uploadTitle = SpecialPage::getTitleFor( 'Upload' );
$nofile = array(
'filepage-nofile-link',
- $uploadTitle->getFullUrl( array( 'wpDestFile' => $this->img->getName() ) )
+ $uploadTitle->getFullURL( array( 'wpDestFile' => $this->img->getName() ) )
);
- }
- else
- {
+ } else {
$nofile = 'filepage-nofile';
}
+ // Note, if there is an image description page, but
+ // no image, then this setRobotPolicy is overriden
+ // by Article::View().
$wgOut->setRobotPolicy( 'noindex,nofollow' );
$wgOut->wrapWikiMsg( "\n$1\n ", $nofile );
+ if ( !$this->getID() ) {
+ // If there is no image, no shared image, and no description page,
+ // output a 404, to be consistent with articles.
+ $wgRequest->response()->header( 'HTTP/1.1 404 Not Found' );
+ }
+ }
+ }
+
+ /**
+ * Creates an thumbnail of specified size and returns an HTML link to it
+ * @param array $params Scaler parameters
+ * @param int $width
+ * @param int $height
+ */
+ private function makeSizeLink( $params, $width, $height ) {
+ $params['width'] = $width;
+ $params['height'] = $height;
+ $thumbnail = $this->displayImg->transform( $params );
+ if ( $thumbnail && !$thumbnail->isError() ) {
+ return Html::rawElement( 'a', array(
+ 'href' => $thumbnail->getUrl(),
+ 'class' => 'mw-thumbnail-link'
+ ), wfMessage( 'show-big-image-size' )->numParams(
+ $thumbnail->getWidth(), $thumbnail->getHeight()
+ )->parse() );
+ } else {
+ return '';
}
}
@@ -541,7 +582,7 @@ EOT
public function getUploadUrl() {
$this->loadFile();
$uploadTitle = SpecialPage::getTitleFor( 'Upload' );
- return $uploadTitle->getFullUrl( array(
+ return $uploadTitle->getFullURL( array(
'wpDestFile' => $this->img->getName(),
'wpForReUpload' => 1
) );
@@ -554,11 +595,14 @@ EOT
protected function uploadLinksBox() {
global $wgUser, $wgOut, $wgEnableUploads, $wgUseExternalEditor;
- if ( !$wgEnableUploads ) { return; }
+ if ( !$wgEnableUploads ) {
+ return;
+ }
$this->loadFile();
- if ( !$this->img->isLocal() )
+ if ( !$this->img->isLocal() ) {
return;
+ }
$sk = $wgUser->getSkin();
@@ -583,7 +627,11 @@ EOT
),
array( 'known', 'noclasses' )
);
- $wgOut->addHTML( '' . $elink . ' ' . wfMsgExt( 'edit-externally-help', array( 'parseinline' ) ) . "\n" );
+ $wgOut->addHTML(
+ '' . $elink . ' ' .
+ wfMsgExt( 'edit-externally-help', array( 'parseinline' ) ) .
+ "\n"
+ );
}
$wgOut->addHTML( "\n" );
@@ -628,7 +676,11 @@ EOT
);
$count = $dbr->numRows( $res );
if ( $count == 0 ) {
- $wgOut->wrapWikiMsg( Html::rawElement( 'div', array ( 'id' => 'mw-imagepage-nolinkstoimage' ), "\n$1\n" ), 'nolinkstoimage' );
+ $wgOut->wrapWikiMsg(
+ Html::rawElement( 'div',
+ array( 'id' => 'mw-imagepage-nolinkstoimage' ), "\n$1\n" ),
+ 'nolinkstoimage'
+ );
return;
}
@@ -643,7 +695,10 @@ EOT
);
}
- $wgOut->addHTML( Html::openElement( 'ul', array( 'class' => 'mw-imagepage-linkstoimage' ) ) . "\n" );
+ $wgOut->addHTML(
+ Html::openElement( 'ul',
+ array( 'class' => 'mw-imagepage-linkstoimage' ) ) . "\n"
+ );
$sk = $wgUser->getSkin();
$count = 0;
$elements = array();
@@ -656,16 +711,16 @@ EOT
}
// Sort the list by namespace:title
- usort ( $elements, array( $this, 'compare' ) );
+ usort( $elements, array( $this, 'compare' ) );
// Create links for every element
foreach( $elements as $element ) {
$link = $sk->linkKnown( Title::makeTitle( $element->page_namespace, $element->page_title ) );
$wgOut->addHTML( Html::rawElement(
- 'li',
- array( 'id' => 'mw-imagepage-linkstoimage-ns' . $element->page_namespace ),
- $link
- ) . "\n"
+ 'li',
+ array( 'id' => 'mw-imagepage-linkstoimage-ns' . $element->page_namespace ),
+ $link
+ ) . "\n"
);
};
@@ -683,7 +738,9 @@ EOT
global $wgUser, $wgOut, $wgLang;
$redirects = $this->getTitle()->getRedirectsHere( NS_FILE );
- if ( count( $redirects ) == 0 ) return;
+ if ( count( $redirects ) == 0 ) {
+ return;
+ }
$wgOut->addHTML( "\n" );
$wgOut->addWikiMsg( 'redirectstofile',
@@ -703,7 +760,6 @@ EOT
$wgOut->addHTML( " {$link}\n" );
}
$wgOut->addHTML( "\n" );
-
}
protected function imageDupes() {
@@ -712,7 +768,9 @@ EOT
$this->loadFile();
$dupes = $this->getDuplicates();
- if ( count( $dupes ) == 0 ) return;
+ if ( count( $dupes ) == 0 ) {
+ return;
+ }
$wgOut->addHTML( "\n" );
$wgOut->addWikiMsg( 'duplicatesoffile',
@@ -777,13 +835,13 @@ EOT
public function doPurge() {
$this->loadFile();
if ( $this->img->exists() ) {
- wfDebug( "ImagePage::doPurge purging " . $this->img->getName() . "\n" );
+ wfDebug( 'ImagePage::doPurge purging ' . $this->img->getName() . "\n" );
$update = new HTMLCacheUpdate( $this->mTitle, 'imagelinks' );
$update->doUpdate();
$this->img->upgradeRow();
$this->img->purgeCache();
} else {
- wfDebug( "ImagePage::doPurge no image for " . $this->img->getName() . "; limiting purge to cache only\n" );
+ wfDebug( 'ImagePage::doPurge no image for ' . $this->img->getName() . "; limiting purge to cache only\n" );
// even if the file supposedly doesn't exist, force any cached information
// to be updated (in case the cached information is wrong)
$this->img->purgeCache();
@@ -796,14 +854,13 @@ EOT
*/
function showError( $description ) {
global $wgOut;
- $wgOut->setPageTitle( wfMsg( "internalerror" ) );
- $wgOut->setRobotPolicy( "noindex,nofollow" );
+ $wgOut->setPageTitle( wfMsg( 'internalerror' ) );
+ $wgOut->setRobotPolicy( 'noindex,nofollow' );
$wgOut->setArticleRelated( false );
$wgOut->enableClientCache( false );
$wgOut->addWikiText( $description );
}
-
/**
* Callback for usort() to do link sorts by (namespace, title)
* Function copied from Title::compare()
@@ -828,9 +885,32 @@ EOT
*/
class ImageHistoryList {
- protected $imagePage, $img, $skin, $title, $repo, $showThumb;
+ /**
+ * @var Title
+ */
+ protected $title;
+
+ /**
+ * @var File
+ */
+ protected $img;
+
+ /**
+ * @var ImagePage
+ */
+ protected $imagePage;
+
+ /**
+ * @var Skin
+ */
+ protected $skin;
+
+ protected $repo, $showThumb;
protected $preventClickjacking = false;
+ /**
+ * @param ImagePage $imagePage
+ */
public function __construct( $imagePage ) {
global $wgUser, $wgShowArchiveThumbnails;
$this->skin = $wgUser->getSkin();
@@ -861,7 +941,7 @@ class ImageHistoryList {
. $navLinks . "\n"
. Xml::openElement( 'table', array( 'class' => 'wikitable filehistory' ) ) . "\n"
. ' | | '
- . ( $this->current->isLocal() && ( $wgUser->isAllowed( 'delete' ) || $wgUser->isAllowed( 'deletedhistory' ) ) ? ' | ' : '' )
+ . ( $this->current->isLocal() && ( $wgUser->isAllowedAny( 'delete', 'deletedhistory' ) ) ? ' | ' : '' )
. '' . wfMsgHtml( 'filehist-datetime' ) . ' | '
. ( $this->showThumb ? '' . wfMsgHtml( 'filehist-thumb' ) . ' | ' : '' )
. '' . wfMsgHtml( 'filehist-dimensions' ) . ' | '
@@ -874,6 +954,11 @@ class ImageHistoryList {
return "\n$navLinks\n\n";
}
+ /**
+ * @param $iscur
+ * @param $file File
+ * @return string
+ */
public function imageHistoryLine( $iscur, $file ) {
global $wgUser, $wgLang;
@@ -887,13 +972,14 @@ class ImageHistoryList {
$row = $selected = '';
// Deletion link
- if ( $local && ( $wgUser->isAllowed( 'delete' ) || $wgUser->isAllowed( 'deletedhistory' ) ) ) {
+ if ( $local && ( $wgUser->isAllowedAny( 'delete', 'deletedhistory' ) ) ) {
$row .= '';
# Link to remove from history
if ( $wgUser->isAllowed( 'delete' ) ) {
$q = array( 'action' => 'delete' );
- if ( !$iscur )
+ if ( !$iscur ) {
$q['oldimage'] = $img;
+ }
$row .= $this->skin->link(
$this->title,
wfMsgHtml( $iscur ? 'filehist-deleteall' : 'filehist-deleteone' ),
@@ -956,20 +1042,24 @@ class ImageHistoryList {
# Don't link to unviewable files
$row .= '' . $wgLang->timeAndDate( $timestamp, true ) . '';
} elseif ( $file->isDeleted( File::DELETED_FILE ) ) {
- $this->preventClickjacking();
- $revdel = SpecialPage::getTitleFor( 'Revisiondelete' );
- # Make a link to review the image
- $url = $this->skin->link(
- $revdel,
- $wgLang->timeAndDate( $timestamp, true ),
- array(),
- array(
- 'target' => $this->title->getPrefixedText(),
- 'file' => $img,
- 'token' => $wgUser->editToken( $img )
- ),
- array( 'known', 'noclasses' )
- );
+ if ( $local ) {
+ $this->preventClickjacking();
+ $revdel = SpecialPage::getTitleFor( 'Revisiondelete' );
+ # Make a link to review the image
+ $url = $this->skin->link(
+ $revdel,
+ $wgLang->timeAndDate( $timestamp, true ),
+ array(),
+ array(
+ 'target' => $this->title->getPrefixedText(),
+ 'file' => $img,
+ 'token' => $wgUser->editToken( $img )
+ ),
+ array( 'known', 'noclasses' )
+ );
+ } else {
+ $url = $wgLang->timeAndDate( $timestamp, true );
+ }
$row .= '' . $url . '';
} else {
$url = $iscur ? $this->current->getUrl() : $this->current->getArchiveUrl( $img );
@@ -985,21 +1075,21 @@ class ImageHistoryList {
// Image dimensions + size
$row .= ' | ';
$row .= htmlspecialchars( $file->getDimensionsString() );
- $row .= " (" . $this->skin->formatSize( $file->getSize() ) . ')';
+ $row .= ' (' . $this->skin->formatSize( $file->getSize() ) . ')';
$row .= ' | ';
// Uploading user
$row .= '';
- if ( $local ) {
- // Hide deleted usernames
- if ( $file->isDeleted( File::DELETED_USER ) ) {
- $row .= '' . wfMsgHtml( 'rev-deleted-user' ) . '';
+ // Hide deleted usernames
+ if ( $file->isDeleted( File::DELETED_USER ) ) {
+ $row .= '' . wfMsgHtml( 'rev-deleted-user' ) . '';
+ } else {
+ if ( $local ) {
+ $row .= $this->skin->userLink( $user, $usertext ) . ' ' .
+ $this->skin->userToolLinks( $user, $usertext ) . '';
} else {
- $row .= $this->skin->userLink( $user, $usertext ) . " " .
- $this->skin->userToolLinks( $user, $usertext ) . "";
+ $row .= htmlspecialchars( $usertext );
}
- } else {
- $row .= htmlspecialchars( $usertext );
}
$row .= ' | ';
@@ -1007,17 +1097,21 @@ class ImageHistoryList {
if ( $file->isDeleted( File::DELETED_COMMENT ) ) {
$row .= '' . wfMsgHtml( 'rev-deleted-comment' ) . '';
} else {
- $row .= $this->skin->commentBlock( $description, $this->title );
+ $row .= $this->skin->commentBlock( $description, $this->title, false, false );
}
$row .= ' | ';
$rowClass = null;
wfRunHooks( 'ImagePageFileHistoryLine', array( $this, $file, &$row, &$rowClass ) );
- $classAttr = $rowClass ? " class='$rowClass'" : "";
+ $classAttr = $rowClass ? " class='$rowClass'" : '';
return "
---|
{$row}
\n";
}
+ /**
+ * @param $file File
+ * @return string
+ */
protected function getThumbForLine( $file ) {
global $wgLang;
@@ -1037,7 +1131,9 @@ class ImageHistoryList {
'file-link' => true,
);
- if ( !$thumbnail ) return wfMsgHtml( 'filehist-nothumb' );
+ if ( !$thumbnail ) {
+ return wfMsgHtml( 'filehist-nothumb' );
+ }
return $thumbnail->toHtml( $options );
} else {
@@ -1057,6 +1153,19 @@ class ImageHistoryList {
class ImageHistoryPseudoPager extends ReverseChronologicalPager {
protected $preventClickjacking = false;
+ /**
+ * @var File
+ */
+ protected $mImg;
+
+ /**
+ * @var Title
+ */
+ protected $mTitle;
+
+ /**
+ * @param ImagePage $imagePage
+ */
function __construct( $imagePage ) {
parent::__construct();
$this->mImagePage = $imagePage;
@@ -1106,7 +1215,9 @@ class ImageHistoryPseudoPager extends ReverseChronologicalPager {
}
function doQuery() {
- if ( $this->mQueryDone ) return;
+ if ( $this->mQueryDone ) {
+ return;
+ }
$this->mImg = $this->mImagePage->getFile(); // ensure loading
if ( !$this->mImg->exists() ) {
return;