http://www.mediawiki.org/wiki/Special:Code/MediaWiki/100501
Revision: 100501 Author: petrb Date: 2011-10-22 16:47:57 +0000 (Sat, 22 Oct 2011) Log Message: ----------- Work in progress, extension which adds a status if user is online, there is still a lot to do, also it's my first extension so it's little bit ugly :) Added Paths: ----------- trunk/extensions/OnlineStatusBar/ trunk/extensions/OnlineStatusBar/OnlineStatusBar.body.php trunk/extensions/OnlineStatusBar/OnlineStatusBar.i18n.php trunk/extensions/OnlineStatusBar/OnlineStatusBar.php trunk/extensions/OnlineStatusBar/OnlineStatusBar.sql Added: trunk/extensions/OnlineStatusBar/OnlineStatusBar.body.php =================================================================== --- trunk/extensions/OnlineStatusBar/OnlineStatusBar.body.php (rev 0) +++ trunk/extensions/OnlineStatusBar/OnlineStatusBar.body.php 2011-10-22 16:47:57 UTC (rev 100501) @@ -0,0 +1,88 @@ +<? +if ( !defined( 'MEDIAWIKI' ) ) { + echo "This is a part of mediawiki and can't be started separately"; + die(); +} + +/** + * Main file of Online status bar extension. + * + * @file + * @ingroup Extensions + * @author Petr Bena <benap...@gmail.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later + * @link http://www.mediawiki.org/wiki/Extension:OnlineStatusBar Documentation + */ + +class OnlineStatusBar { + public static $Timeout = 8000; + + private static function GetNow() + { + return gmdate('Ymdhis', time()); + } + + public static function Get_Html( $text, $mode) + { + global $wgOnlineStatusBarModes, $wgOnlineStatusBarColor; + $color= $wgOnlineStatusBarColor[$mode]; + return '<div style="border: 0px solid black; background: transparent; float: right; position: relative; top:-3px; padding: 5px"><p><b>' . $text . ': <span style="color: ' . $color . '; font:bold;"><img alt="Ledorange.svg" src="//upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Ledorange.svg/20px-Ledorange.svg.png" width="20" height="20" />' . $wgOnlineStatusBarModes[$mode] . '</span></b></p></div>'; + } + + + static function UpdateDb($user, $db) + { + global $wgUser, $wgDBname, $wgOnlineStatusBarTable; + if ( OnlineStatusBar::GetStatus($wgUser->getID()) != $OnlineStatusBar->DefaultOnline ) + { + $db = wfGetDB( DB_MASTER ); + $db->SelectDB( $wgDBname ); + $now = OnlineStatusBar::GetNow(); + $row = array( + 'userid' => $wgUser->getID(), + 'username' => $wgUser->getName(), + 'timestamp' => $now, + ); + $db->insert( $wgOnlineStatusBarTable, $row, __METHOD__, 'DELAYED' ); + } + + return false; + } + + public static function DeleteOld() + { + global $wgOnlineStatusBarTable, $wgDBname; + $db = wfGetDB ( DB_MASTER ); + $time = OnlineStatusBar::GetNow() - $Timeout; + $db->SelectDB( $wgDBname ); + $db->delete( $wgOnlineStatusBarTable, array( 'timestamp < "' . $time . '"' ) ,__METHOD__ ); + return 0; + } + + static function GetStatus( $userID ) { + global $wgOnlineStatusBarTable, $wgOnlineStatusBarModes, $wgOnlineStatusBarDefaultOffline, $wgOnlineStatusBarDefaultOnline, $wgDBname; + $db = wfGetDB ( DB_MASTER ); + OnlineStatusBar::DeleteOld(); + $db->SelectDB( $wgDBname ); + $result = $db->select( $wgOnlineStatusBarTable, array ('userid', 'username', 'timestamp'), array('username' => $userID), __METHOD__, array('limit 1', 'order by timestamp desc')); + $values = new ResultWrapper ($db, $result); + + if ($values->numRows() > 0) + { + return $wgOnlineStatusBarDefaultOnline; + } + + return $wgOnlineStatusBarDefaultOffline; + } + + static function DeleteStatus( $user ) + { + global $wgOnlineStatusBarTable, $wgDBname; + $db = wfGetDB ( DB_MASTER ); + $db->SelectDB( $wgDBname ); + $db->delete( $wgOnlineStatusBarTable, array ('username' => $user), __METHOD__ ); // delete user + return true; + } +} + +?> Property changes on: trunk/extensions/OnlineStatusBar/OnlineStatusBar.body.php ___________________________________________________________________ Added: svn:eol-style + native Added: trunk/extensions/OnlineStatusBar/OnlineStatusBar.i18n.php =================================================================== --- trunk/extensions/OnlineStatusBar/OnlineStatusBar.i18n.php (rev 0) +++ trunk/extensions/OnlineStatusBar/OnlineStatusBar.i18n.php 2011-10-22 16:47:57 UTC (rev 100501) @@ -0,0 +1,18 @@ +<?php +/** + * Internationalisation file for Online status bar extension. + * + * @file + * @ingroup Extensions + */ + +$messages = array(); + +/** English + * @author Petr Bena + */ +$messages['en'] = array( +'onlinestatusbar-desc' => "Status bar which shows whether a user is online, based on preferences, on their user page", +'onlinestatusbar-line' => " is now ", +); +?> Property changes on: trunk/extensions/OnlineStatusBar/OnlineStatusBar.i18n.php ___________________________________________________________________ Added: svn:eol-style + native Added: trunk/extensions/OnlineStatusBar/OnlineStatusBar.php =================================================================== --- trunk/extensions/OnlineStatusBar/OnlineStatusBar.php (rev 0) +++ trunk/extensions/OnlineStatusBar/OnlineStatusBar.php 2011-10-22 16:47:57 UTC (rev 100501) @@ -0,0 +1,111 @@ +<?php +if ( !defined( 'MEDIAWIKI' ) ) { + echo "This is a part of mediawiki and can't be started separately"; + die(); +} + +/** + * Insert a special box on user page showing their status. + * + * @file + * @ingroup Extensions + * @author Petr Bena <benap...@gmail.com> + * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later + * @link http://www.mediawiki.org/wiki/Extension:OnlineStatusBar Documentation + */ + +$wgExtensionCredits[version_compare($wgVersion, '1.17', '>=') ? 'userpage tools' : 'other'][] = array( + 'path' => __FILE__, + 'name' => 'Online status bar', + 'version' => '1.0.0', + 'author' => array( 'Petr Bena' ), + 'descriptionmsg' => 'onlinestatusbar-desc', + 'url' => 'http://www.mediawiki.org/wiki/Extension:OnlineStatusBar', +); + +$dir = dirname( __FILE__ ); +$wgExtensionMessagesFiles['OnlineStatusBar'] = "$dir/OnlineStatusBar.i18n.php"; + +$wgAutoloadClasses['OnlineStatusBar'] = "$dir/OnlineStatusBar.body.php"; + +// Configuration +$wgOnlineStatusBarModes = array ( + 'online' => "On-line", + 'busy' => "Busy", + 'away' => "Away", + 'hidden' => "Offline", + 'offline' => "Offline", +); + +$wgOnlineStatusBarColor = array ( + 'online' => "green", + 'busy' => "orange", + 'away' => "orange", + 'hidden' => "red", + 'offline' => "red", +); + +$wgOnlineStatusBarDefaultOnline = "online"; +$wgOnlineStatusBarDefaultOffline = "offline"; +$wgOnlineStatusBarTable = "online_status"; +$wgOnlineStatusBarDefaultEnabled = false; +$wgOnlineStatusBar_LogoutTime = 3600; + +$wgHooks['LoadExtensionSchemaUpdates'][] = 'wfOnlineStatusBar_CkSchema'; + + function wfOnlineStatusBar_CkSchema($updater = null) + { + global $wgOnlineStatusBarTable; + if ($updater != null) + { + $updater->addExtensionUpdate( array ( 'addtable', $wgOnlineStatusBarTable, dirname( __FILE__) . '/OnlineStatusBar.sql', true)); + } + else + { + global $wgExtNewTables; + $wgExtNewTables[] = array( + $wgOnlineStatusBarTable, dirname( __FILE__ ) . '/OnlineStatusBar.sql' ); + } + return true; + } + +$wgHooks['UserLogoutComplete'][] = 'wfOnlineStatusBar_Logout'; + + function wfOnlineStatusBar_Logout(&$user, &$inject_html, $old_name) + { + global $wgUser; + OnlineStatusBar::DeleteStatus($old_name); + return true; + } + +$wgHooks['ArticleViewHeader'][] = 'wfOnlineStatusBar_RenderBar'; + function wfOnlineStatusBar_RenderBar(&$article, &$outputDone, &$pcache) + { + global $wgOnlineStatusBar_Template, $messages, $wgOnlineStatusBarModes, $wgOut; + $ns=$article->getTitle()->getNamespace(); + if(($ns == "3") || ($ns == "2")) + { + // better way to get a username would be great :) + $user = preg_replace('/\/.*/', '', preg_replace('/^.*\:/', "", $article->getTitle())); + $OnlineStatus_Text = $user . language::getMessageFromDB("onlinestatusbar-line"); + $OnlineStatus_Mode = OnlineStatusBar::GetStatus($user); + $wgOut->addHtml(OnlineStatusBar::Get_Html($OnlineStatus_Text, $OnlineStatus_Mode)); + } + return true; + } + +$wgHooks['UserLoginComplete'][] = 'wfOnlineStatusBar_UpdateStatus'; + + function wfOnlineStatusBar_UpdateStatus() + { + OnlineStatusBar::UpdateDb(); + return 0; + } + + +$commonModuleInfo = array( + 'localBasePath' => dirname( __FILE__ ) . '/modules', + 'remoteExtPath' => 'OnlineStatusBar/modules', +); + +?> Property changes on: trunk/extensions/OnlineStatusBar/OnlineStatusBar.php ___________________________________________________________________ Added: svn:eol-style + native Added: trunk/extensions/OnlineStatusBar/OnlineStatusBar.sql =================================================================== --- trunk/extensions/OnlineStatusBar/OnlineStatusBar.sql (rev 0) +++ trunk/extensions/OnlineStatusBar/OnlineStatusBar.sql 2011-10-22 16:47:57 UTC (rev 100501) @@ -0,0 +1,7 @@ +CREATE TABLE online_status ( + `userid` int(5) NOT NULL default '0', + `username` varchar(255) NOT NULL default '', + `timestamp` char(14) NOT NULL default '', + PRIMARY KEY USING HASH (`userid`, `username`) +) ENGINE=MEMORY; + Property changes on: trunk/extensions/OnlineStatusBar/OnlineStatusBar.sql ___________________________________________________________________ Added: svn:eol-style + native _______________________________________________ MediaWiki-CVS mailing list MediaWiki-CVS@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs