http://www.mediawiki.org/wiki/Special:Code/MediaWiki/95600
Revision: 95600 Author: ashley Date: 2011-08-27 15:00:08 +0000 (Sat, 27 Aug 2011) Log Message: ----------- new social extension, shows the avatars of newly registered users Added Paths: ----------- trunk/extensions/NewUsersList/ trunk/extensions/NewUsersList/NewUsersList.php Added: trunk/extensions/NewUsersList/NewUsersList.php =================================================================== --- trunk/extensions/NewUsersList/NewUsersList.php (rev 0) +++ trunk/extensions/NewUsersList/NewUsersList.php 2011-08-27 15:00:08 UTC (rev 95600) @@ -0,0 +1,137 @@ +<?php +/** + * NewUsersList parser hook extension -- adds <newusers> parser tag to retrieve + * the list of new users and their avatars. + * Requires SocialProfile extension in order to work correctly. + * Works with NewSignupPage extension, i.e. if the user_register_track DB table + * is present, this extension queries that table, but if it's not, then the + * core logging table is used instead. + * + * @file + * @ingroup Extensions + * @version 1.0 + * @author Aaron Wright <aaron.wri...@gmail.com> + * @author David Pean <david.p...@gmail.com> + * @author Jack Phoenix <j...@countervandalism.net> + * @link http://www.mediawiki.org/wiki/Extension:NewUsersList Documentation + * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later + */ + +if ( !defined( 'MEDIAWIKI' ) ) { + die( "This is not a valid entry point.\n" ); +} + +// Extension credits that will show up on Special:Version +$wgExtensionCredits['parserhook'][] = array( + 'name' => 'NewUsersList', + 'version' => '1.0', + 'author' => array( 'Aaron Wright', 'David Pean', 'Jack Phoenix' ), + 'description' => 'Adds <tt><newusers></tt> parser tag to retrieve the list of new users and their avatars', + 'url' => 'http://www.mediawiki.org/wiki/Extension:NewUsersList' +); + +$wgHooks['ParserFirstCallInit'][] = 'wfGetNewUsers'; + +/** + * Register the <newusers> tag with MediaWiki's Parser. + * + * @param $parser Object: instance of Parser (not necessarily $wgParser) + * @return Boolean: true + */ +function wfGetNewUsers( &$parser ) { + $parser->setHook( 'newusers', 'getNewUsers' ); + return true; +} + +/** + * Callback function for the <newusers> tag. + * Queries the user_register_track database table for new users and renders + * the list of newest users and their avatars, wrapped in a div with the class + * "new-users". + * Disables parser cache and caches the database query results in memcached. + */ +function getNewUsers( $input, $args, $parser ) { + global $wgMemc; + + $parser->disableCache(); + + $count = 10; + $per_row = 5; + + if ( isset( $args['count'] ) && is_numeric( $args['count'] ) ) { + $count = intval( $args['count'] ); + } + + if ( isset( $args['row'] ) && is_numeric( $args['row'] ) ) { + $per_row = intval( $args['row'] ); + } + + // Try cache + $key = wfMemcKey( 'users', 'new', $count ); + $data = $wgMemc->get( $key ); + + if( !$data ) { + $dbr = wfGetDB( DB_SLAVE ); + + if ( $dbr->tableExists( 'user_register_track' ) ) { + $res = $dbr->select( + 'user_register_track', + array( 'ur_user_id', 'ur_user_name' ), + array(), + __METHOD__, + array( 'ORDER BY' => 'ur_date', 'LIMIT' => $count ) + ); + } else { + // If user_register_track table doesn't exist, use the core logging + // table + $res = $dbr->select( + 'logging', + array( + 'log_user AS ur_user_id', + 'log_user_text AS ur_user_name' + ), + array( 'log_type' => 'newusers' ), + __METHOD__, + // DESC to get the *newest* $count users instead of the oldest + array( 'ORDER BY' => 'log_timestamp DESC', 'LIMIT' => $count ) + ); + } + + $list = array(); + foreach( $res as $row ) { + $list[] = array( + 'user_id' => $row->ur_user_id, + 'user_name' => $row->ur_user_name + ); + } + + // Cache in memcached for 10 minutes + $wgMemc->set( $key, $list, 60 * 10 ); + } else { + wfDebugLog( 'NewUsersList', 'Got new users from cache' ); + $list = $data; + } + + $output = '<div class="new-users">'; + + if ( !empty( $list ) ) { + $x = 1; + foreach( $list as $user ) { + $avatar = new wAvatar( $user['user_id'], 'ml' ); + $userLink = Title::makeTitle( NS_USER, $user['user_name'] ); + + $output .= '<a href="' . $userLink->escapeFullURL() . + '" rel="nofollow">' . $avatar->getAvatarURL() . '</a>'; + + if ( ( $x == $count ) || ( $x != 1 ) && ( $x % $per_row == 0 ) ) { + $output .= '<div class="cleared"></div>'; + } + + $x++; + } + } + + $output .= '<div class="cleared"></div></div>'; + + return $output; +} \ No newline at end of file Property changes on: trunk/extensions/NewUsersList/NewUsersList.php ___________________________________________________________________ Added: svn:eol-style + native _______________________________________________ MediaWiki-CVS mailing list MediaWiki-CVS@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs