X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FImagePage.php;h=b41e12646f1a09f4acc58c4ee242477909373cda;hb=8441c854aaadca54bc9a5c8d728ff80dcf3745cc;hp=99e2d28f8f3151f416b773db521384e1a7fb1555;hpb=020cc6ef3343678ffa906a29931c4613e96a4f9f;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/ImagePage.php b/includes/ImagePage.php index 99e2d28f8f..b41e12646f 100644 --- a/includes/ImagePage.php +++ b/includes/ImagePage.php @@ -1,52 +1,73 @@ dupes = null; - $this->repo = null; + /** + * @param $title Title + * @return WikiFilePage + */ + protected function newPage( Title $title ) { + // Overload mPage with a file-specific page + return new WikiFilePage( $title ); } - + + /** + * Constructor from a page id + * @param $id Int article ID to load + * @returnImagePage|null + */ + public static function newFromID( $id ) { + $t = Title::newFromID( $id ); + # @todo FIXME: Doesn't inherit right + return $t == null ? null : new self( $t ); + # return $t == null ? null : new static( $t ); // PHP 5.3 + } + + /** + * @param $file File: + * @return void + */ public function setFile( $file ) { + $this->mPage->setFile( $file ); $this->displayImg = $file; - $this->img = $file; $this->fileLoaded = true; } protected function loadFile() { - if( $this->fileLoaded ) { + if ( $this->fileLoaded ) { return true; } $this->fileLoaded = true; - $this->displayImg = $this->img = false; - wfRunHooks( 'ImagePageFindFile', array( $this, &$this->img, &$this->displayImg ) ); - if( !$this->img ) { - $this->img = wfFindFile( $this->mTitle ); - if( !$this->img ) { - $this->img = wfLocalFile( $this->mTitle ); + $this->displayImg = $img = false; + wfRunHooks( 'ImagePageFindFile', array( $this, &$img, &$this->displayImg ) ); + if ( !$img ) { // not set by hook? + $img = wfFindFile( $this->getTitle() ); + if ( !$img ) { + $img = wfLocalFile( $this->getTitle() ); } } - if( !$this->displayImg ) { - $this->displayImg = $this->img; + $this->mPage->setFile( $img ); + if ( !$this->displayImg ) { // not set by hook? + $this->displayImg = $img; } - $this->repo = $this->img->getRepo(); + $this->repo = $img->getRepo(); } /** @@ -61,201 +82,165 @@ class ImagePage extends Article { public function view() { global $wgOut, $wgShowEXIF, $wgRequest, $wgUser; + + $diff = $wgRequest->getVal( 'diff' ); + $diffOnly = $wgRequest->getBool( 'diffonly', $wgUser->getOption( 'diffonly' ) ); + + if ( $this->getTitle()->getNamespace() != NS_FILE || ( isset( $diff ) && $diffOnly ) ) { + return parent::view(); + } + $this->loadFile(); - if( $this->mTitle->getNamespace() == NS_FILE && $this->img->getRedirected() ) { - if( $this->mTitle->getDBkey() == $this->img->getName() ) { + if ( $this->getTitle()->getNamespace() == NS_FILE && $this->mPage->getFile()->getRedirected() ) { + if ( $this->getTitle()->getDBkey() == $this->mPage->getFile()->getName() || isset( $diff ) ) { // mTitle is the same as the redirect target so ask Article // to perform the redirect for us. - return Article::view(); + $wgRequest->setVal( 'diffonly', 'true' ); + return parent::view(); } else { - // mTitle is not the same as the redirect target so it is + // mTitle is not the same as the redirect target so it is // probably the redirect page itself. Fake the redirect symbol - $wgOut->setPageTitle( $this->mTitle->getPrefixedText() ); - $wgOut->addHTML( $this->viewRedirect( Title::makeTitle( NS_FILE, $this->img->getName() ), + $wgOut->setPageTitle( $this->getTitle()->getPrefixedText() ); + $wgOut->addHTML( $this->viewRedirect( Title::makeTitle( NS_FILE, $this->mPage->getFile()->getName() ), /* $appendSubtitle */ true, /* $forceKnown */ true ) ); - $this->viewUpdates(); + $this->mPage->doViewUpdates( $this->getContext()->getUser() ); return; } } - $diff = $wgRequest->getVal( 'diff' ); - $diffOnly = $wgRequest->getBool( 'diffonly', $wgUser->getOption( 'diffonly' ) ); - - if( $this->mTitle->getNamespace() != NS_FILE || ( isset( $diff ) && $diffOnly ) ) - return Article::view(); - - if( $wgShowEXIF && $this->displayImg->exists() ) { - // FIXME: bad interface, see note on MediaHandler::formatMetadata(). + if ( $wgShowEXIF && $this->displayImg->exists() ) { + // @todo FIXME: Bad interface, see note on MediaHandler::formatMetadata(). $formattedMetadata = $this->displayImg->formatMetadata(); $showmeta = $formattedMetadata !== false; } else { $showmeta = false; } - if( !$diff && $this->displayImg->exists() ) - $wgOut->addHTML( $this->showTOC($showmeta) ); + 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() ) { - Article::view(); + if ( $this->mPage->getID() ) { + # NS_FILE is in the user language, but this section (the actual wikitext) + # should be in page content language + $pageLang = $this->getTitle()->getPageLanguage(); + $wgOut->addHTML( Xml::openElement( 'div', array( 'id' => 'mw-imagepage-content', + 'lang' => $pageLang->getCode(), 'dir' => $pageLang->getDir(), + 'class' => 'mw-content-'.$pageLang->getDir() ) ) ); + parent::view(); + $wgOut->addHTML( Xml::closeElement( 'div' ) ); } else { # Just need to set the right headers $wgOut->setArticleFlag( true ); - $wgOut->setPageTitle( $this->mTitle->getPrefixedText() ); - $this->viewUpdates(); + $wgOut->setPageTitle( $this->getTitle()->getPrefixedText() ); + $this->mPage->doViewUpdates( $this->getContext()->getUser() ); } # Show shared description, if needed - if( $this->mExtraDescription ) { - $fol = wfMsgNoTrans( 'shareddescriptionfollows' ); - if( $fol != '-' && !wfEmptyMsg( 'shareddescriptionfollows', $fol ) ) { - $wgOut->addWikiText( $fol ); + if ( $this->mExtraDescription ) { + $fol = wfMessage( 'shareddescriptionfollows' ); + if ( !$fol->isDisabled() ) { + $wgOut->addWikiText( $fol->plain() ); } - $wgOut->addHTML( '
' ); + $wgOut->addHTML( ' \n" ); } $this->closeShowImage(); $this->imageHistory(); // TODO: Cleanup the following - + $wgOut->addHTML( Xml::element( 'h2', array( 'id' => 'filelinks' ), wfMsg( 'imagelinks' ) ) . "\n" ); $this->imageDupes(); - # TODO! FIXME! For some freaky reason, we can't redirect to foreign images. + # @todo FIXME: For some freaky reason, we can't redirect to foreign images. # Yet we return metadata about the target. Definitely an issue in the FileRepo - $this->imageRedirects(); $this->imageLinks(); - if( $showmeta ) { - global $wgStylePath, $wgStyleVersion; - $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" ); + # Allow extensions to add something after the image links + $html = ''; + wfRunHooks( 'ImagePageAfterImageLinks', array( $this, &$html ) ); + if ( $html ) { + $wgOut->addHTML( $html ); } - } - - public function getRedirectTarget() { - $this->loadFile(); - if( $this->img->isLocal() ) { - return parent::getRedirectTarget(); - } - // Foreign image page - $from = $this->img->getRedirected(); - $to = $this->img->getName(); - if( $from == $to ) { - return null; - } - return $this->mRedirectTarget = Title::makeTitle( NS_FILE, $to ); - } - public function followRedirect() { - $this->loadFile(); - if( $this->img->isLocal() ) { - return parent::followRedirect(); + + if ( $showmeta ) { + $wgOut->addHTML( Xml::element( 'h2', array( 'id' => 'metadata' ), wfMsg( 'metadata' ) ) . "\n" ); + $wgOut->addWikiText( $this->makeMetadataTable( $formattedMetadata ) ); + $wgOut->addModules( array( 'mediawiki.action.view.metadata' ) ); } - $from = $this->img->getRedirected(); - $to = $this->img->getName(); - if( $from == $to ) { - return false; + + // Add remote Filepage.css + if( !$this->repo->isLocal() ) { + $css = $this->repo->getDescriptionStylesheetUrl(); + if ( $css ) { + $wgOut->addStyle( $css ); + } } - return Title::makeTitle( NS_FILE, $to ); - } - public function isRedirect( $text = false ) { - $this->loadFile(); - if( $this->img->isLocal() ) - return parent::isRedirect( $text ); - - return (bool)$this->img->getRedirected(); - } - - public function isLocal() { - $this->loadFile(); - return $this->img->isLocal(); + // always show the local local Filepage.css, bug 29277 + $wgOut->addModuleStyles( 'filepage' ); } - - public function getFile() { - $this->loadFile(); - return $this->img; - } - + + /** + * @return File + */ public function getDisplayedFile() { $this->loadFile(); return $this->displayImg; } - - public function getDuplicates() { - $this->loadFile(); - if( !is_null($this->dupes) ) { - return $this->dupes; - } - if( !( $hash = $this->img->getSha1() ) ) { - return $this->dupes = array(); - } - $dupes = RepoGroup::singleton()->findBySha1( $hash ); - // Remove duplicates with self and non matching file sizes - $self = $this->img->getRepoName().':'.$this->img->getName(); - $size = $this->img->getSize(); - foreach ( $dupes as $index => $file ) { - $key = $file->getRepoName().':'.$file->getName(); - if( $key == $self ) - unset( $dupes[$index] ); - if( $file->getSize() != $size ) - unset( $dupes[$index] ); - } - return $this->dupes = $dupes; - - } - /** * Create the TOC * - * @param bool $metadata Whether or not to show the metadata link - * @return string + * @param $metadata Boolean: whether or not to show the metadata link + * @return String */ protected function showTOC( $metadata ) { - global $wgLang; - $r = '' );
}
- if( $thumbnail ) {
+ if ( $thumbnail ) {
$options = array(
'alt' => $this->displayImg->getTitle()->getPrefixedText(),
'file-link' => true,
);
$wgOut->addHTML( ' ' .
$thumbnail->toHtml( $options ) .
- $anchorclose . ' ' );
+ $anchorclose . "\n" );
}
- if( $this->displayImg->isMultipage() ) {
+ if ( $isMulti ) {
$count = $this->displayImg->pageCount();
- if( $page > 1 ) {
+ if ( $page > 1 ) {
$label = $wgOut->parse( wfMsg( 'imgmultipageprev' ), false );
- $link = $sk->makeKnownLinkObj( $this->mTitle, $label, 'page='. ($page-1) );
- $thumb1 = $sk->makeThumbLinkObj( $this->mTitle, $this->displayImg, $link, $label, 'none',
+ $link = Linker::link(
+ $this->getTitle(),
+ $label,
+ array(),
+ array( 'page' => $page - 1 ),
+ array( 'known', 'noclasses' )
+ );
+ $thumb1 = Linker::makeThumbLinkObj( $this->getTitle(), $this->displayImg, $link, $label, 'none',
array( 'page' => $page - 1 ) );
} else {
$thumb1 = '';
}
- if( $page < $count ) {
+ if ( $page < $count ) {
$label = wfMsg( 'imgmultipagenext' );
- $link = $sk->makeKnownLinkObj( $this->mTitle, $label, 'page='. ($page+1) );
- $thumb2 = $sk->makeThumbLinkObj( $this->mTitle, $this->displayImg, $link, $label, 'none',
+ $link = Linker::link(
+ $this->getTitle(),
+ $label,
+ array(),
+ array( 'page' => $page + 1 ),
+ array( 'known', 'noclasses' )
+ );
+ $thumb2 = Linker::makeThumbLinkObj( $this->getTitle(), $this->displayImg, $link, $label, 'none',
array( 'page' => $page + 1 ) );
} else {
$thumb2 = '';
@@ -402,10 +408,9 @@ class ImagePage extends Article {
'action' => $wgScript,
'onchange' => 'document.pageselector.submit();',
);
-
- $option = array();
- for ( $i=1; $i <= $count; $i++ ) {
- $options[] = Xml::option( $wgLang->formatNum($i), $i, $i == $page );
+ $options = array();
+ for ( $i = 1; $i <= $count; $i++ ) {
+ $options[] = Xml::option( $wgLang->formatNum( $i ), $i, $i == $page );
}
$select = Xml::tags( 'select',
array( 'id' => 'pageselector', 'name' => 'page' ),
@@ -414,62 +419,115 @@ class ImagePage extends Article {
$wgOut->addHTML(
' |