<?php
/* vim: noet ts=4 sw=4
* http://www.mediawiki.org/wiki/Extension:Uniwiki_Authors
* http://www.gnu.org/licenses/gpl-3.0.txt */
if ( !defined( "MEDIAWIKI" ) )
die();
/* ---- CONFIGURABLE OPTIONS ---- */
$wgShowAuthorsNamespaces = array ( NS_MAIN );
$wgShowAuthors = true;
$wgShowAuthorsPercent = 10;
$wgShowAuthorsAddBytes = 200;
$wgExtensionCredits['other'][] = array(
'path' => __FILE__,
'name' => 'Authors',
'author' => array( 'Merrick Schaefer', 'Mark Johnston', 'Evan Wheeler', 'Adam Mckaig (at UNICEF)', 'Vitas Povilaitis' ),
'url' => 'https://www.mediawiki.org/wiki/Extension:Uniwiki_Authors',
'descriptionmsg' => 'authors-desc',
);
$wgExtensionMessagesFiles['Authors'] = dirname( __FILE__ ) . '/Authors.i18n.php';
/* ---- HOOKS ---- */
$wgHooks['OutputPageBeforeHTML'][] = "UW_Authors_List";
function UW_Authors_List ( &$out, &$text ) {
global $wgTitle, $wgRequest, $wgShowAuthorsNamespaces, $wgShowAuthors, $wgShowAuthorsPercent, $wgShowAuthorsAddBytes;
/* do nothing if the option is disabled
* (but why would the extension be enabled?) */
if ( !$wgShowAuthors )
return true;
// only build authors on namespaces in $wgShowAuthorsNamespaces
if ( !in_array ( $wgTitle->getNamespace(), $wgShowAuthorsNamespaces ) )
return true;
/* get the contribs from the database (don't use the default
* MediaWiki one since it ignores the current user) */
$article = new Article ( $wgTitle );
$contribs = array();
$usrs = array();
$lens = 0;
$db = wfGetDB ( DB_MASTER );
$rev_table = $db->tableName ( "revision" );
$user_table = $db->tableName ( "user" );
$sql = "SELECT rev_user, rev_user_text, user_real_name, rev_timestamp, rev_len
FROM $rev_table LEFT JOIN $user_table ON rev_user = user_id
WHERE rev_page = {$article->getID()}
ORDER BY rev_timestamp";
/*GROUP BY rev_user, rev_user_text, user_real_name*/
$results = $db->query ( $sql, __METHOD__ );
while ( $line = $db->fetchObject ( $results ) ) {
$lenproc = 0;
if ( $lens <> 0 )
$lenproc = intval(intval($line->rev_len) / $lens);
if ( ($lens == 0) || (intval($line->rev_len) - $lens > $wgShowAuthorsAddBytes) ||
($lenproc > $wgShowAuthorsPercent) ) {
if ( !in_array( $line->rev_user, $usrs ) ) {
$usrs[] = $line->rev_user;
$contribs[] = array(
$line->rev_user,
$line->rev_user_text,
$line->user_real_name,
"{$line->rev_len}:{$lens}:{$lenproc}"
);
};
};
$lens = intval($line->rev_len);
}
$db->freeResult ( $results );
// return if there are no authors
if ( sizeof ( $results ) <= 0 )
return true;
// now build a sensible authors display in HTML
$authors = "\n<div class='authors'>" .
"<h4>" . wfMsg( 'authors_authors' ) . "</h4>" .
"<ul>";
$anons = 0;
foreach ( $contribs as $author ) {
$id = $author[0];
$username = $author[1];
$realname = $author[2];
$len = $author[3];
$authorLinker = new Linker();
if ( $id != "0" ) { // user with an id
// FIME: broken. Incompatible with 1.14. Method creditLink() was renamed and changed.
$author_link = $authorLinker->userLink( $id, $username );
$authors .= "<li>$author_link – $realname</li>";
} else { // anonymous
$anons++;
}
}
// add the anonymous entries
if ( $anons > 0 )
$authors .= "<li>" . wfMsg( 'authors_anonymous' ) . "</li>";
$authors .= "</ul></div>";
$text .= $authors;
return true;
}