Re: [pLog-General] new plugin, online users
Brought to you by:
jondaley
From: Oscar R. <os...@re...> - 2004-04-04 08:54:32
|
Hi! Can you send the plugin as zipped or .tar.gz file? For some reason my email client is displaying it 'inline'... Thanks :) Oscar On 4 Apr 2004, at 02:28, Nick Gerakines wrote: > Hey folks, > My computer fritzed (motherboard started smoking monday morning > around 11 am) this past monday so i've been working from a spare > laptop and don't have my actuall ~/ dir with me. One good thing that > came out of it all is i've had alot of time to do some scratch code. I > created a small plugin that keeps track of users that are current > visiting your site. Its small and is easy to install. Check out the > plugin-center for notes and the todolist. Comments and testers > welcome. > ~ Nick > PluginBase(); $this->desc = " > > This plugin will allow your visitors to view how many other visitors > are online at the same time. > Todo List: > (1) Add switches for specific article and blog viewers. > (2) Add configuration for capture time > (3) Add better documentation and wiki entry > It is pretty easy to use. For now if you want to configure the > capture time just edit the top of the plugin. It is set with a default > of 120 seconds (2 minutes). For now it will only capture visitors in > general but i also want it to capture registered (logged in) users, > views on specific entries and specific blogs. Have fun and happy > hacking. > {\$whoonline->WhoOnlineSite()} > "; $this->author = "Nick Gerakines"; } function register() { // > initialize the class $w = new WhoAreUs(); // create the secondary > class object $w->createWhoTables(); // sift through and see if the > tables exist $t = new Timestamp(); // create a timestamp object, > might be quicker to just invoke time() $timeout = $t->getUnixDate() - > WHO_ONLINE_TIMEOUT; // get the timeout number > $w->injectSQL($this->blogInfo->getId(), Client::getIp(), > $t->getUnixDate()); //-> // This performs the initial insert commands > for the current ip add. See the function below. > $w->cleanwho($timeout); // See below } function WhoOnlineSite() { // > Poll all distinct visits to the site $w = new WhoAreUs(); $count = > $w->getwho(); return($count); } function WhoOnlineBlog ($blog = -1) { > // Poll all distinct visits to specific blog if ($blog == -1) {$blog > = $this->blogInfo->getId();} $w = new WhoAreUs(); $count = > $w->getwho(1, $blog); return($count); } function > WhoOnlineEntry($blog, $article) { // Poll all distinct visits to > specific article in blog $w = new WhoAreUs(); $count = $w->getwho(2, > $blog, $article); return($count); } } // Define the datacruncher > class class WhoAreUs extends Model { function WhoAreUs() // continue > class schema defs { $this->Model(); } /* ** This was taken from the > karma plugin and modified. Thanks oscar ;) */ function checkTable( > $tableName, $tableSchema ) { //$config = new Config(); //$dbPrefix = > $config->getValue( "db_prefix" ); $dbPrefix = $this->getPrefix(); > $tableName = $dbPrefix.$tableName; // create the data dictionary and > create the table if necessary $dict = NewDataDictionary( $this->_db ); > $sqlArray = $dict->ChangeTableSQL( $tableName, $tableSchema ); > $result = $dict->ExecuteSQLArray( $sqlArray ); if( $result == 0 ) > $this->_desc = "There was an error initializing the tables."; } /* > ** This was also taken from the karma plugin and modified. Thanks > oscar ;) */ function createWhoTables() { $table1 = "who_online"; > $fields1 = "blog_id I(10) NOT NULL default '0', article_id I(10) NOT > NULL default '0', timestamp int(15) NOT NULL default '0', ip > varchar(40) NOT NULL"; $this->checkTable( $table1, $fields1 ); return > true; } /* ** This is the injection function. We insert a record into > our db with the current visitors ** ip, the timestamp (unix format), > blog they are visiting, and article they are visiting */ function > injectSql($blog, $client, $timestamp) { $query = "INSERT INTO > ".$this->getPrefix()."who_online ( `blog_id` , `article_id` , > `timestamp` , `ip` ) VALUES ( '$blog', NULL , '$timestamp', '$client' > );"; $result = $this->_db->Execute( $query ); return $result; } /* > ** This function removes all records that have timestamps older than > two minutes ago. */ function cleanwho($timeout) { $query = "DELETE > FROM ".$this->getPrefix()."who_online WHERE timestamp < $timeout"; > $result = $this->_db->Execute( $query ); return $result; } /* ** > This is the actual poll function. This creates a sql statement > depending on what we want ** to poll and then returns the number of > distinct records from the db. */ function getwho($mode = 0, $blog = > 0, $article = 0) { if ($mode == 1) { // specific blog $query = > "SELECT DISTINCT ip FROM ".$this->getPrefix()."who_online WHERE > blog_id = $blog"; } elseif ($mode == 2) { // specific article $query > = "SELECT DISTINCT ip FROM ".$this->getPrefix()."who_online WHERE > blog_id = $blog AND article_id = $article"; } else { $query = "SELECT > DISTINCT ip FROM ".$this->getPrefix()."who_online"; } $result = > $this->_db->Execute( $query ); $count = $result->RecordCount(); return > $count; } } PluginManager::registerPlugin( "whoonline", > "PluginWhoOnline" ); ?> |