wiki.techinc.nl/includes/SpecialFileDuplicateSearch.php
Alexandre Emsenhuber 087a9f70c5 WARNING: HUGE COMMIT
Doxygen documentation update:
* Changed alls @addtogroup to @ingroup. @addtogroup adds the comment to the group description, but doesn't add the file, class, function, ... to the group like @ingroup does. See for example http://svn.wikimedia.org/doc/group__SpecialPage.html where it's impossible to see related files, classes, ... that should belong to that group.
* Added @file to file description, it seems that it should be explicitely decalred for file descriptions, otherwise doxygen will think that the comment document the first class, variabled, function, ... that is in that file.
* Removed some empty comments
* Removed some ?>

Added following groups:
* ExternalStorage
* JobQueue
* MaintenanceLanguage

One more thing: there are still a lot of warnings when generating the doc.
2008-05-20 17:13:28 +00:00

135 lines
4.1 KiB
PHP

<?php
/**
* A special page to search for files by hash value as defined in the
* img_sha1 field in the image table
*
* @file
* @ingroup SpecialPage
*
* @author Raimond Spekking, based on Special:MIMESearch by Ævar Arnfjörð Bjarmason
* @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
*/
/**
* Searches the database for files of the requested hash, comparing this with the
* 'img_sha1' field in the image table.
* @ingroup SpecialPage
*/
class FileDuplicateSearchPage extends QueryPage {
var $hash, $filename;
function FileDuplicateSearchPage( $hash, $filename ) {
$this->hash = $hash;
$this->filename = $filename;
}
function getName() { return 'FileDuplicateSearch'; }
function isExpensive() { return false; }
function isSyndicated() { return false; }
function linkParameters() {
return array( 'filename' => $this->filename );
}
function getSQL() {
$dbr = wfGetDB( DB_SLAVE );
$image = $dbr->tableName( 'image' );
$hash = $dbr->addQuotes( $this->hash );
return "SELECT 'FileDuplicateSearch' AS type,
img_name AS title,
img_sha1 AS value,
img_user_text,
img_timestamp
FROM $image
WHERE img_sha1 = $hash
";
}
function formatResult( $skin, $result ) {
global $wgContLang, $wgLang;
$nt = Title::makeTitle( NS_IMAGE, $result->title );
$text = $wgContLang->convert( $nt->getText() );
$plink = $skin->makeLink( $nt->getPrefixedText(), $text );
$user = $skin->makeLinkObj( Title::makeTitle( NS_USER, $result->img_user_text ), $result->img_user_text );
$time = $wgLang->timeanddate( $result->img_timestamp );
return "$plink . . $user . . $time";
}
}
/**
* Output the HTML search form, and constructs the FileDuplicateSearch object.
*/
function wfSpecialFileDuplicateSearch( $par = null ) {
global $wgRequest, $wgTitle, $wgOut, $wgLang, $wgContLang;
$hash = '';
$filename = isset( $par ) ? $par : $wgRequest->getText( 'filename' );
$title = Title::newFromText( $filename );
if( $title && $title->getText() != '' ) {
$dbr = wfGetDB( DB_SLAVE );
$image = $dbr->tableName( 'image' );
$encFilename = $dbr->addQuotes( htmlspecialchars( $title->getDbKey() ) );
$sql = "SELECT img_sha1 from $image where img_name = $encFilename";
$res = $dbr->query( $sql );
$row = $dbr->fetchRow( $res );
if( $row !== false ) {
$hash = $row[0];
}
$dbr->freeResult( $res );
}
# Create the input form
$wgOut->addHTML(
Xml::openElement( 'form', array( 'id' => 'fileduplicatesearch', 'method' => 'get', 'action' => $wgTitle->getLocalUrl() ) ) .
Xml::openElement( 'fieldset' ) .
Xml::element( 'legend', null, wfMsg( 'fileduplicatesearch-legend' ) ) .
Xml::inputLabel( wfMsg( 'fileduplicatesearch-filename' ), 'filename', 'filename', 50, $filename ) . ' ' .
Xml::submitButton( wfMsg( 'fileduplicatesearch-submit' ) ) .
Xml::closeElement( 'fieldset' ) .
Xml::closeElement( 'form' )
);
if( $hash != '' ) {
$align = $wgContLang->isRtl() ? 'left' : 'right';
# Show a thumbnail of the file
$img = wfFindFile( $title );
if ( $img ) {
$thumb = $img->getThumbnail( 120, 120 );
if( $thumb ) {
$wgOut->addHTML( '<div style="float:' . $align . '" id="mw-fileduplicatesearch-icon">' .
$thumb->toHtml( array( 'desc-link' => false ) ) . '<br />' .
wfMsgExt( 'fileduplicatesearch-info', array( 'parse' ),
$wgLang->formatNum( $img->getWidth() ),
$wgLang->formatNum( $img->getHeight() ),
$wgLang->formatSize( $img->getSize() ),
$img->getMimeType()
) .
'</div>' );
}
}
# Do the query
$wpp = new FileDuplicateSearchPage( $hash, $filename );
list( $limit, $offset ) = wfCheckLimits();
$count = $wpp->doQuery( $offset, $limit );
# Show a short summary
if( $count == 1 ) {
$wgOut->addHTML( '<p class="mw-fileduplicatesearch-result-1">' .
wfMsgHtml( 'fileduplicatesearch-result-1', $filename ) .
'</p>'
);
} elseif ( $count > 1 ) {
$wgOut->addHTML( '<p class="mw-fileduplicatesearch-result-n">' .
wfMsgExt( 'fileduplicatesearch-result-n', array( 'parseinline' ), $filename, $wgLang->formatNum( $count - 1 ) ) .
'</p>'
);
}
}
}