X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FImagePage.php;h=c1555292fc3bdeea52c12bfe9515e53b4ba78b29;hb=2f9fe257092228018531fc53ab2fb418317644c6;hp=9d827ee9fe76dd9dae249426664dd112ea256f7b;hpb=8ce3c5cf23f920a0fea1c7d08fd2009716545133;p=lhc%2Fweb%2Fwiklou.git
diff --git a/includes/ImagePage.php b/includes/ImagePage.php
index 9d827ee9fe..c1555292fc 100644
--- a/includes/ImagePage.php
+++ b/includes/ImagePage.php
@@ -1,8 +1,5 @@
dupes = null;
$this->repo = null;
}
-
+
+ /**
+ * @param $file File:
+ * @return void
+ */
public function setFile( $file ) {
$this->displayImg = $file;
$this->img = $file;
@@ -98,11 +106,13 @@ class ImagePage extends Article {
$showmeta = false;
}
- if ( !$diff && $this->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() ) {
@@ -116,9 +126,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" );
}
@@ -139,17 +149,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 ) {
- $expand = htmlspecialchars( Xml::escapeJsString( wfMsg( 'metadata-expand' ) ) );
- $collapse = htmlspecialchars( Xml::escapeJsString( wfMsg( 'metadata-collapse' ) ) );
$wgOut->addHTML( Xml::element( 'h2', array( 'id' => 'metadata' ), wfMsg( 'metadata' ) ) . "\n" );
$wgOut->addWikiText( $this->makeMetadataTable( $formattedMetadata ) );
- $wgOut->addScriptFile( 'metadata.js' );
- $wgOut->addHTML(
- "\n" );
+ $wgOut->addModules( array( 'mediawiki.legacy.metadata' ) );
}
$css = $this->repo->getDescriptionStylesheetUrl();
@@ -171,6 +178,7 @@ class ImagePage extends Article {
}
return $this->mRedirectTarget = Title::makeTitle( NS_FILE, $to );
}
+
public function followRedirect() {
$this->loadFile();
if ( $this->img->isLocal() ) {
@@ -183,10 +191,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 +221,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 +231,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 +249,9 @@ class ImagePage extends Article {
*/
protected function showTOC( $metadata ) {
$r = array(
- '' . wfMsgHtml( 'file-anchor-link' ) . '',
- '' . wfMsgHtml( 'filehist' ) . '',
- '' . wfMsgHtml( 'imagelinks' ) . '',
+ '' . wfMsgHtml( 'file-anchor-link' ) . '',
+ '' . wfMsgHtml( 'filehist' ) . '',
+ '' . wfMsgHtml( 'imagelinks' ) . '',
);
if ( $metadata ) {
$r[] = '' . wfMsgHtml( 'metadata' ) . '';
@@ -290,7 +301,7 @@ class ImagePage extends Article {
if ( $this->img && !$this->img->isLocal() && 0 == $this->getID() ) {
return '';
}
- return Article::getContent();
+ return parent::getContent();
}
protected function openShowImage() {
@@ -299,8 +310,6 @@ class ImagePage extends Article {
$this->loadFile();
- $full_url = $this->displayImg->getURL();
- $linkAttribs = false;
$sizeSel = intval( $wgUser->getOption( 'imagesize' ) );
if ( !isset( $wgImageLimits[$sizeSel] ) ) {
$sizeSel = User::getDefaultOption( 'imagesize' );
@@ -331,10 +340,8 @@ class ImagePage extends Article {
$width = $width_orig;
$height_orig = $this->displayImg->getHeight( $page );
$height = $height_orig;
- $mime = $this->displayImg->getMimeType();
- $showLink = false;
- $linkAttribs = array( 'href' => $full_url );
- $longDesc = $this->displayImg->getLongDesc();
+
+ $longDesc = wfMsg( 'parentheses', $this->displayImg->getLongDesc() );
wfRunHooks( 'ImageOpenShowImageInlineBefore', array( &$this, &$wgOut ) );
@@ -342,7 +349,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.
@@ -359,27 +366,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
- $msgbig = htmlspecialchars( $this->displayImg->getName() );
$msgsmall = wfMsgExt( 'file-nohires', array( 'parseinline' ) );
}
$params['width'] = $width;
+ $params['height'] = $height;
$thumbnail = $this->displayImg->transform( $params );
- $anchorclose = "
";
- if ( $this->displayImg->mustRender() ) {
- $showLink = true;
- } else {
- $anchorclose .=
- $msgsmall .
- '
' . Xml::tags( 'a', $linkAttribs, $msgbig ) . "$dirmark " . $longDesc;
- }
+ $showLink = true;
+ $anchorclose = '
' . $msgsmall;
$isMulti = $this->displayImg->isMultipage() && $this->displayImg->pageCount() > 1;
if ( $isMulti ) {
@@ -437,7 +446,6 @@ class ImagePage extends Article {
'onchange' => 'document.pageselector.submit();',
);
- $option = array();
for ( $i = 1; $i <= $count; $i++ ) {
$options[] = Xml::option( $wgLang->formatNum( $i ), $i, $i == $page );
}
@@ -448,7 +456,7 @@ class ImagePage extends Article {
$wgOut->addHTML(
'' .
Xml::openElement( 'form', $formParams ) .
- Xml::hidden( 'title', $this->getTitle()->getPrefixedDbKey() ) .
+ Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) .
wfMsgExt( 'imgmultigoto', array( 'parseinline', 'replaceafter' ), $select ) .
Xml::submitButton( wfMsg( 'imgmultigo' ) ) .
Xml::closeElement( 'form' ) .
@@ -461,33 +469,31 @@ 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() );
- $medialink = "[[Media:$filename|$filename]]";
+ $linktext = $filename;
+ if ( isset( $msgbig ) ) {
+ $linktext = wfEscapeWikiText( $msgbig );
+ }
+ $medialink = "[[Media:$filename|$linktext]]";
if ( !$this->displayImg->isSafeFile() ) {
$warning = wfMsgNoTrans( 'mediawarning' );
$wgOut->addWikiText( <<
-{$medialink}$dirmark
-$longDesc
-
+{$medialink}$dirmark $longDesc
$warning
EOT
);
} else {
$wgOut->addWikiText( <<
-{$medialink}{$dirmark}
-$longDesc
+{$medialink}{$dirmark} $longDesc
EOT
);
@@ -504,15 +510,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 '';
}
}
@@ -527,10 +561,14 @@ EOT
$descUrl = $this->img->getDescriptionUrl();
$descText = $this->img->getDescriptionText();
+ /* Add canonical to head if there is no local page for this shared file */
+ if( $descUrl && $this->getID() == 0 ) {
+ $wgOut->addLink( array( 'rel' => 'canonical', 'href' => $descUrl ) );
+ }
+
$wrap = "\n$1\n \n";
$repo = $this->img->getRepo()->getDisplayName();
- $msg = '';
if ( $descUrl && $descText && wfMsgNoTrans( 'sharedupload-desc-here' ) !== '-' ) {
$wgOut->wrapWikiMsg( $wrap, array( 'sharedupload-desc-here', $repo, $descUrl ) );
} elseif ( $descUrl && wfMsgNoTrans( 'sharedupload-desc-there' ) !== '-' ) {
@@ -547,7 +585,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
) );
@@ -560,11 +598,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();
@@ -589,7 +630,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" );
@@ -607,6 +652,7 @@ EOT
$this->loadFile();
$pager = new ImageHistoryPseudoPager( $this );
$wgOut->addHTML( $pager->getBody() );
+ $wgOut->preventClickjacking( $pager->getPreventClickjacking() );
$this->img->resetHistory(); // free db resources
@@ -633,7 +679,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;
}
@@ -648,11 +698,14 @@ 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();
- while ( $s = $res->fetchObject() ) {
+ foreach ( $res as $s ) {
$count++;
if ( $count <= $limit ) {
// We have not yet reached the extra one that tells us there is more to fetch
@@ -661,16 +714,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"
);
};
@@ -688,7 +741,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',
@@ -708,7 +763,6 @@ EOT
$wgOut->addHTML( " {$link}\n" );
}
$wgOut->addHTML( "\n" );
-
}
protected function imageDupes() {
@@ -717,7 +771,9 @@ EOT
$this->loadFile();
$dupes = $this->getDuplicates();
- if ( count( $dupes ) == 0 ) return;
+ if ( count( $dupes ) == 0 ) {
+ return;
+ }
$wgOut->addHTML( "\n" );
$wgOut->addWikiMsg( 'duplicatesoffile',
@@ -782,13 +838,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();
@@ -801,14 +857,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()
@@ -833,8 +888,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();
@@ -865,7 +944,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' ) . ' | '
@@ -878,6 +957,11 @@ class ImageHistoryList {
return "\n$navLinks\n\n";
}
+ /**
+ * @param $iscur
+ * @param $file File
+ * @return string
+ */
public function imageHistoryLine( $iscur, $file ) {
global $wgUser, $wgLang;
@@ -888,16 +972,17 @@ class ImageHistoryList {
$description = $file->getDescription();
$local = $this->current->isLocal();
- $row = $css = $selected = '';
+ $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' ),
@@ -960,19 +1045,24 @@ class ImageHistoryList {
# Don't link to unviewable files
$row .= '' . $wgLang->timeAndDate( $timestamp, true ) . '';
} elseif ( $file->isDeleted( File::DELETED_FILE ) ) {
- $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 );
@@ -988,21 +1078,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 .= ' | ';
@@ -1014,12 +1104,17 @@ class ImageHistoryList {
}
$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;
@@ -1039,16 +1134,41 @@ class ImageHistoryList {
'file-link' => true,
);
- if ( !$thumbnail ) return wfMsgHtml( 'filehist-nothumb' );
+ if ( !$thumbnail ) {
+ return wfMsgHtml( 'filehist-nothumb' );
+ }
return $thumbnail->toHtml( $options );
} else {
return wfMsgHtml( 'filehist-nothumb' );
}
}
+
+ protected function preventClickjacking( $enable = true ) {
+ $this->preventClickjacking = $enable;
+ }
+
+ public function getPreventClickjacking() {
+ return $this->preventClickjacking;
+ }
}
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;
@@ -1089,12 +1209,18 @@ class ImageHistoryPseudoPager extends ReverseChronologicalPager {
$s .= $list->imageHistoryLine( !$file->isOld(), $file );
}
$s .= $list->endImageHistoryList( $navLink );
+
+ if ( $list->getPreventClickjacking() ) {
+ $this->preventClickjacking();
+ }
}
return $s;
}
function doQuery() {
- if ( $this->mQueryDone ) return;
+ if ( $this->mQueryDone ) {
+ return;
+ }
$this->mImg = $this->mImagePage->getFile(); // ensure loading
if ( !$this->mImg->exists() ) {
return;
@@ -1171,4 +1297,13 @@ class ImageHistoryPseudoPager extends ReverseChronologicalPager {
}
$this->mQueryDone = true;
}
+
+ protected function preventClickjacking( $enable = true ) {
+ $this->preventClickjacking = $enable;
+ }
+
+ public function getPreventClickjacking() {
+ return $this->preventClickjacking;
+ }
+
}
|