Extension talk:Uniwiki Authors/vpovilaitis

From MediaWiki.org
Jump to: navigation, search
<?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;
}
Personal tools
Namespaces

Variants
Actions
Navigation
Support
Download
Development
Communication
Print/export
Toolbox