<?php 
class NP_Online extends NucleusPlugin {
 
    function getName() { return 'Who is Online'; }
    function getAuthor()  { return 'Rodrigo Moraes'; }
    function getURL()  { return 'http://www.tipos.com.br'; }
    function getVersion() { return '1.6'; }
	function supportsFeature($feature) {
		switch($feature) {
			case 'SqlTablePrefix': return 1;
			default: return 0;
		}
	}
    function getDescription()
		{ return 'Count members and users online now and today, show who are online and display members activity.'; }
 
   function install() {
         $this->createOption('timeout','Seconds that should pass before someone is marked as being offline','text','600');
         $this->createOption('member','Member word (singular)','text','member');
         $this->createOption('members','Member word (plural)','text','members');
         $this->createOption('visitor','Visitor word (singular)','text','visitor');
         $this->createOption('visitors','Visitor word (plural)','text','visitors');
         $this->createOption('timeoffset','Time Offset','text','0');
 
         sql_query("CREATE TABLE IF NOT EXISTS " . sql_table('plug_online') . " (".
         "member int(11) NOT NULL default '0', ".
         "uniqueid varchar(15) NOT NULL default '0', ".
         "timestamp int(15) NOT NULL default '0'".
         ") TYPE=MyISAM;");
      }
 
	function unInstall() {
		mysql_query("DROP TABLE " . sql_table('plug_online'));
	}
 
	function getEventList() { return array('PreSendContentType'); }
 
/****************************************************			
	DOSKINVAR
*****************************************************/
	function doSkinVar($skinType,$arg='') {
		global $member, $members, $_POST;
 
		$user = $member->getID();
		if ($user<0) $user=0;
 
		/* set timeout and get today value */ 
		$timestamp = time();
		$timeout = $timestamp - 360;
		$today = mktime(0, 0, 0, date("n", $timestamp), date("j", $timestamp),  date("Y", $timestamp));
 
		/* Try to get cookie data. If not successful, get the visitor IP. */
		if (cookieVar('onlineuser')) {
			$uniqueid = cookieVar('onlineuser');
 
/****************************************************			
	STORE DATA
*****************************************************/
			/* Search for an existing member data and then INSERT or UPDATE */
			if ($user != 0) {
				$query = mysql_query("SELECT uniqueid FROM " .sql_table('plug_online'). " WHERE member=$user");
				if (mysql_num_rows($query)==0) {
					$query = mysql_query("INSERT INTO " . sql_table('plug_online') . " (member, uniqueid, timestamp) VALUES ('$user','$uniqueid','$timestamp')");
				}
				else {
					$query = mysql_query("UPDATE " . sql_table('plug_online') . " SET timestamp='$timestamp', uniqueid='$uniqueid' WHERE member=$user");
				}
 
			/* Time out non-member unique id after login, so the same unique id will not be counted twice, and also delete old data.  */ 
				$query = mysql_query("SELECT uniqueid FROM " .sql_table('plug_online'). " WHERE member='0' AND uniqueid='$uniqueid' AND timestamp>$timeout");
				if (mysql_num_rows($query)!=0) {
					$query = mysql_query("UPDATE " .sql_table('plug_online'). " SET timestamp=$timeout WHERE member='0' AND uniqueid='$uniqueid' AND timestamp>$timeout");
				}
			}
 
			/* Search for an existing non-member data (uniqueid) and then INSERT or UPDATE */
			else {
				$query = mysql_query("SELECT member FROM " .sql_table('plug_online'). " WHERE member='0' AND uniqueid='$uniqueid'");
				if (mysql_num_rows($query)==0) {
					$query = mysql_query("INSERT INTO " . sql_table('plug_online') . " (member, uniqueid, timestamp) VALUES ('$user','$uniqueid','$timestamp')");
				}
				else {
					$query = mysql_query("UPDATE " . sql_table('plug_online') . " SET timestamp='$timestamp' WHERE member='0' AND  uniqueid='$uniqueid'");
				}
			}
		} // if (cookieVar('onlineuser'))
 
/****************************************************			
	GET POST
*****************************************************/
			if ($_POST['showonline']) {
				$query = mysql_query("UPDATE " . sql_table('plug_online') . " SET showonline='1' WHERE member=$user");		
			}
			else if ($_POST['hideonline']) {
				$query = mysql_query("UPDATE " . sql_table('plug_online') . " SET showonline='0' WHERE member=$user");				
			}
 
/****************************************************			
	SHOW DATA
*****************************************************/
		switch($arg) {
 
         /* show members online */
         case 'members':
            $query = mysql_query("SELECT DISTINCT member FROM " . sql_table('plug_online') . " WHERE member!='0' AND timestamp>$timeout");
            $members = mysql_num_rows($query);
               if ($members == 1) {
                  echo $members . " " . $this->getOption('member');
               }
               else {
                  echo $members . " ". $this->getOption('members');
               }
         break;
 
         /* show visitors online */
         case 'visitors':
            $query = mysql_query("SELECT DISTINCT uniqueid FROM " . sql_table('plug_online') . " WHERE member='0' AND timestamp>$timeout");
            $visitors = mysql_num_rows($query);
               if ($visitors == 1) {
                  echo $visitors . " " . $this->getOption('visitor');
               }
               else {
                  echo $visitors . " ". $this->getOption('visitors');
               }
         break;
 
			/* show today count */
			case 'today':
				$query = mysql_query("SELECT DISTINCT member FROM " . sql_table('plug_online') . " WHERE member!='0' AND timestamp>$today");
				$members = mysql_num_rows($query);
 
				$query = mysql_query("SELECT DISTINCT uniqueid FROM " . sql_table('plug_online') . " WHERE member='0' AND timestamp>$today");
				$visitors = mysql_num_rows($query);
				// total today
				$total = $members + $visitors;
 
				echo $total . " (";
				// members today
				if ($members == 1) {
					echo $members . " " . $this->getOption('member');
					}
					else {
						echo $members . " ". $this->getOption('members');
					}
 
				echo " & ";
				// visitors today
				if ($visitors == 1) {
					echo $visitors . " " . $this->getOption('visitor');
				}
				else {
					echo $visitors . " ". $this->getOption('visitors');
				}
 
				echo ")";
			break;
 
			 /* show online members list */         
			 case 'list':
				$query = mysql_query("SELECT member FROM " . sql_table('plug_online') . " WHERE member!='0' AND timestamp>$timeout ORDER BY timestamp DESC");
				while($row = mysql_fetch_object($query)) {
				   $mem = new MEMBER;
				   $mem->readFromID(intval($row->member));
				   $membername = $mem->getDisplayName();
				   $memberlink = createMemberLink($row->member);
				   if ($n) { echo ", "; }
				   echo "<a href=\"$memberlink\">$membername</a>";
				   $n = 1;
				}
			 break;
 
			/* list even hidden members */
			case 'listadm':
				$query = mysql_query("SELECT member FROM " . sql_table('plug_online') . " WHERE member!='0' AND timestamp>$timeout ORDER BY timestamp DESC");
				while($row = mysql_fetch_object($query)) {
					$mem = new MEMBER; 
					$mem->readFromID(intval($row->member));
					$membername = $mem->getDisplayName();
					$memberlink = createMemberLink($row->member);
					if ($n) { echo ", "; }
					echo "<a href=\"$memberlink\">$membername</a>";
					$n = 1;
				}
			break;
 
			/* show member activity */
			case 'activity':
				$n = 1;
				$query = mysql_query("SELECT member, timestamp FROM " . sql_table('plug_online') . " WHERE member!='0' ORDER BY timestamp DESC");
				echo "<ul>";
				while($row = mysql_fetch_object($query)) {
					$mem = new MEMBER; 
					$mem->readFromID(intval($row->member));
					$membername = $mem->getDisplayName();
					$memberlink = createMemberLink($row->member);
					echo "<li>$n. <a href=\"$memberlink\">$membername</a> (". date('d.m.y - H:i:s', $row->timestamp + $this->getOption('timeoffset')*3600);
					echo ")</li>";
					$n++;
				}
				echo "</ul>";			
			break;
 
		} // switch($arg)
	} // doSkinVar
 
/****************************************************			
	PRE SEND CONTENT TYPE
*****************************************************/
	function event_PreSendContentType() { 
	global $CONF;  
		/* Create a cookie if it not exists */
		if (!cookieVar('onlineuser')) {
			$timestamp=time();
			$expire = time()+2592000;
			$uniqueid = uniqid("");
			setCookie('onlineuser',$uniqueid,$expire,$CONF['CookiePath'],$CONF['CookieDomain'],$CONF['CookieSecure']);
		}
	} // PreSendContentType
 
/****************************************************			
	LOGOUT - NOT WORKING YET
*****************************************************/
//	function event_Logout($membername) {
//		/* Time out member data after logout */
//		$timestamp=time();
//		$timeout = $timestamp - $this->getOption('timeout');
//		$res = mysql_query("SELECT mnumber FROM " . sql_table('member') . " WHERE mname='$membername'");
//		$row = mysql_fetch_object($res);
//		$mnumber = $row->mnumber;
//		$query = mysql_query("UPDATE " .sql_table('plug_online'). " SET timestamp='$timeout' WHERE member='$mnumber'");
//	} // Logout
} // class NP_Online
?>
np_online_code.txt · Last modified: 2006/07/05 13:03 (external edit)
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki