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

Reply via email to