0byt3m1n1
Path:
/
data
/
applications
/
aps
/
xoops
/
2.3.2b-6
/
standard
/
htdocs
/
kernel
/
[
Home
]
File: online.php
<?php // $Id: online.php 694 2006-09-04 11:33:22Z skalpa $ // ------------------------------------------------------------------------ // // XOOPS - PHP Content Management System // // Copyright (c) 2000 XOOPS.org // // <http://www.xoops.org/> // // ------------------------------------------------------------------------ // // This program is free software; you can redistribute it and/or modify // // it under the terms of the GNU General Public License as published by // // the Free Software Foundation; either version 2 of the License, or // // (at your option) any later version. // // // // You may not change or alter any portion of this comment or credits // // of supporting developers from this source code or any supporting // // source code which is considered copyrighted (c) material of the // // original comment or credit authors. // // // // This program is distributed in the hope that it will be useful, // // but WITHOUT ANY WARRANTY; without even the implied warranty of // // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // // GNU General Public License for more details. // // // // You should have received a copy of the GNU General Public License // // along with this program; if not, write to the Free Software // // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // ------------------------------------------------------------------------ // // Author: Kazumi Ono (AKA onokazu) // // URL: http://www.myweb.ne.jp/, http://www.xoops.org/, http://jp.xoops.org/ // // Project: The XOOPS Project // // ------------------------------------------------------------------------- // /** * @package kernel * * @author Kazumi Ono <onokazu@xoops.org> * @copyright copyright (c) 2000-2003 XOOPS.org */ /** * A handler for "Who is Online?" information * * @package kernel * * @author Kazumi Ono <onokazu@xoops.org> * @copyright copyright (c) 2000-2003 XOOPS.org */ class XoopsOnlineHandler { /** * Database connection * * @var object * @access private */ var $db; /** * Constructor * * @param object &$db {@link XoopsHandlerFactory} */ function XoopsOnlineHandler(&$db) { $this->db =& $db; } /** * Write online information to the database * * @param int $uid UID of the active user * @param string $uname Username * @param string $timestamp * @param string $module Current module * @param string $ip User's IP adress * * @return bool TRUE on success */ function write($uid, $uname, $time, $module, $ip) { $uid = intval($uid); if ($uid > 0) { $sql = "SELECT COUNT(*) FROM ".$this->db->prefix('online')." WHERE online_uid=".$uid; } else { $sql = "SELECT COUNT(*) FROM ".$this->db->prefix('online')." WHERE online_uid=".$uid." AND online_ip='".$ip."'"; } list($count) = $this->db->fetchRow($this->db->queryF($sql)); if ( $count > 0 ) { $sql = "UPDATE ".$this->db->prefix('online')." SET online_updated=".$time.", online_module = ".$module." WHERE online_uid = ".$uid; if ($uid == 0) { $sql .= " AND online_ip='".$ip."'"; } } else { $sql = sprintf("INSERT INTO %s (online_uid, online_uname, online_updated, online_ip, online_module) VALUES (%u, %s, %u, %s, %u)", $this->db->prefix('online'), $uid, $this->db->quoteString($uname), $time, $this->db->quoteString($ip), $module); } if (!$this->db->queryF($sql)) { return false; } return true; } /** * Delete online information for a user * * @param int $uid UID * * @return bool TRUE on success */ function destroy($uid) { $sql = sprintf("DELETE FROM %s WHERE online_uid = %u", $this->db->prefix('online'), $uid); if (!$result = $this->db->queryF($sql)) { return false; } return true; } /** * Garbage Collection * * Delete all online information that has not been updated for a certain time * * @param int $expire Expiration time in seconds */ function gc($expire) { $sql = sprintf("DELETE FROM %s WHERE online_updated < %u", $this->db->prefix('online'), time() - intval($expire)); $this->db->queryF($sql); } /** * Get an array of online information * * @param object $criteria {@link CriteriaElement} * @return array Array of associative arrays of online information */ function getAll($criteria = null) { $ret = array(); $limit = $start = 0; $sql = 'SELECT * FROM '.$this->db->prefix('online'); if (is_object($criteria) && is_subclass_of($criteria, 'criteriaelement')) { $sql .= ' '.$criteria->renderWhere(); $limit = $criteria->getLimit(); $start = $criteria->getStart(); } $result = $this->db->query($sql, $limit, $start); if (!$result) { return false; } while ($myrow = $this->db->fetchArray($result)) { $ret[] = $myrow; unset($myrow); } return $ret; } /** * Count the number of online users * * @param object $criteria {@link CriteriaElement} */ function getCount($criteria = null) { $sql = 'SELECT COUNT(*) FROM '.$this->db->prefix('online'); if (is_object($criteria) && is_subclass_of($criteria, 'criteriaelement')) { $sql .= ' '.$criteria->renderWhere(); } if (!$result = $this->db->query($sql)) { return false; } list($ret) = $this->db->fetchRow($result); return $ret; } } ?>