<?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 ?>