From 0dab33beae37a5e7b6951f90e01900660669c5ef Mon Sep 17 00:00:00 2001 From: DanielSeifert Date: Wed, 19 Oct 2011 20:05:36 +0000 Subject: [PATCH] add basic files --- .gitattributes | 5 + copy_this/core/d3ce_online_users.php | 70 +++++++++ .../views/d3ce_oxcmp_utils_usersonline.php | 144 ++++++++++++++++++ .../out/basic/tpl/inc/d3ce_usersonline.tpl | 6 + setup+doku/readme_de.txt | 45 ++++++ setup+doku/readme_en.txt | 42 +++++ 6 files changed, 312 insertions(+) create mode 100644 copy_this/core/d3ce_online_users.php create mode 100644 copy_this/modules/d3ce_usersonline/views/d3ce_oxcmp_utils_usersonline.php create mode 100644 copy_this/out/basic/tpl/inc/d3ce_usersonline.tpl create mode 100644 setup+doku/readme_de.txt create mode 100644 setup+doku/readme_en.txt diff --git a/.gitattributes b/.gitattributes index 8e948c5..f7a43db 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,6 @@ * text=auto !eol +copy_this/core/d3ce_online_users.php -text +copy_this/modules/d3ce_usersonline/views/d3ce_oxcmp_utils_usersonline.php -text +copy_this/out/basic/tpl/inc/d3ce_usersonline.tpl -text +setup+doku/readme_de.txt -text +setup+doku/readme_en.txt -text diff --git a/copy_this/core/d3ce_online_users.php b/copy_this/core/d3ce_online_users.php new file mode 100644 index 0000000..6557cae --- /dev/null +++ b/copy_this/core/d3ce_online_users.php @@ -0,0 +1,70 @@ +. + * + * @author Aggrosoft, D³ Data Development + */ + +class d3ce_online_users extends oxI18n +{ + /** + * Object core table name + * + * @var string + */ + protected $_sCoreTbl = 'd3ce_online_users'; + + /** + * Current class name + * + * @var string + */ + protected $_sClassName = 'd3ce_online_users'; + + public function __construct($aParams = null) + { + parent::__construct(); + $this->init( 'd3ce_online_users' ); + } + + public function clearOldItems($iExpTime) + { + $exptime = time() - $iExpTime; + oxDb::getDb()->Execute("delete from ".$this->_sCoreTbl." where timevisit < $exptime"); + } + + public function getActUserItem($sUserIPHash) + { + $sSelect = "select count(*) from $this->_sCoreTbl where visitor='".$sUserIPHash."'"; + return oxDb::getDb()->getOne( $sSelect ); + } + + public function getUserCount() + { + $sSelect = "select count(*) from ".$this->_sCoreTbl." order by timevisit desc"; + $iCount = oxDb::getDb()->getOne($sSelect); + return $iCount; + } + + public function setActTimeVisit($sUserIpHash) + { + oxDb::getDb()->Execute("update ".$this->_sCoreTbl." set timevisit='".time()."', oxclass = '".$this->getConfig()->getActiveView()->getClassName()."' where visitor='".$sUserIpHash."'"); + } + + public function insertActUser($sUserIpHash) + { + oxDb::getDb()->Execute("insert into ".$this->_sCoreTbl." (visitor,timevisit,oxclass) values ('".$sUserIpHash."','".time()."', '".$this->getConfig()->getActiveView()->getClassName()."')"); + } + +} diff --git a/copy_this/modules/d3ce_usersonline/views/d3ce_oxcmp_utils_usersonline.php b/copy_this/modules/d3ce_usersonline/views/d3ce_oxcmp_utils_usersonline.php new file mode 100644 index 0000000..9464377 --- /dev/null +++ b/copy_this/modules/d3ce_usersonline/views/d3ce_oxcmp_utils_usersonline.php @@ -0,0 +1,144 @@ +. + * + * @author Aggrosoft, D³ Data Development + */ + +class d3ce_oxcmp_utils_usersonline extends d3ce_oxcmp_utils_usersonline_parent +{ + protected $_iExpTime = 600; // (in seconds) + protected $_sUserIpHash = null; + protected $_remoteAddr = null; + protected $_httpClientIp = null; + protected $_httpXForwardedFor = null; + protected $_httpXForwarded = null; + protected $_httpForwardedFor = null; + protected $_httpForwarded = null; + protected $_httpVia = null; + protected $_httpXComingFrom = null; + protected $_httpComingFrom = null; + protected $_proxyIp = null; + protected $_directIp = null; + + public function init() + { + $this->blIsComponent = true; + parent::init(); + } + + public function render() + { + $ret = parent::render(); + + //WE ARE NOT ALLOWED TO STORE THE REAL IP + $this->_sUserIpHash = md5($this->_getTrueIP()); + $this->utime = time(); + + $oUserOnline = &oxNew('d3ce_online_users'); + $oUserOnline->clearOldItems($this->_iExpTime); + $iUserExist = $oUserOnline->getActUserItem($this->_sUserIpHash); + + if ($iUserExist > 0) { + $oUserOnline->setActTimeVisit($this->_sUserIpHash); + } else { + $oUserOnline->insertActUser($this->_sUserIpHash); + } + + $this->_oParent->_aViewData['usersonline'] = $oUserOnline->getUserCount(); + + return $ret; + } + + private function _getIpData($sTargetVarName, $sDataName) + { + if (empty($this->{$sTargetVarName})) + { + if (!empty($_SERVER) && isset($_SERVER[$sDataName])) + $this->{$sTargetVarName} = $_SERVER[$sDataName]; + else if (!empty($_ENV) && isset($_ENV[$sDataName])) + $this->{$sTargetVarName} = $_ENV[$sDataName]; + else if (@getenv($sDataName)) + $this->{$sTargetVarName} = getenv($sDataName); + } + } + + private function _getTrueIP() + { + $this->_getIpData('_remoteAddr','REMOTE_ADDR'); + $this->_getIpData('_httpClientIp','HTTP_CLIENT_IP'); + $this->_getIpData('_httpXForwardedFor','HTTP_X_FORWARDED_FOR'); + $this->_getIpData('_httpXForwarded','HTTP_X_FORWARDED'); + $this->_getIpData('_httpForwardedFor','HTTP_FORWARDED_FOR'); + $this->_getIpData('_httpForwarded','HTTP_FORWARDED'); + $this->_getIpData('_httpVia','HTTP_VIA'); + $this->_getIpData('_httpXComingFrom','HTTP_X_COMING_FROM'); + $this->_getIpData('_httpComingFrom','HTTP_COMING_FROM'); + + // Gets the default ip sent by the user + if (!empty($this->_remoteAddr)) + $this->_directIp = $this->_remoteAddr; + + // Gets the proxy ip sent by the user + if (!empty($this->_httpXForwardedFor)) + $this->_proxyIp = $this->_httpXForwardedFor; + else if (!empty($this->_httpXForwarded)) + $this->_proxyIp = $this->_httpXForwarded; + else if (!empty($this->_httpForwardedFor)) + $this->_proxyIp = $this->_httpForwardedFor; + else if (!empty($this->_httpForwarded)) + $this->_proxyIp = $this->_httpForwarded; + else if (!empty($this->_httpVia)) + $this->_proxyIp = $this->_httpVia; + else if (!empty($this->_httpXComingFrom)) + $this->_proxyIp = $this->_httpXComingFrom; + else if (!empty($this->_httpComingFrom)) + $this->_proxyIp = $this->_httpComingFrom; + + // Returns the true IP if it has been found, else ... + if (empty($this->_proxyIp)) + { + // True IP without proxy + return $this->_directIp; + } + else + { + $is_ip = ereg('^([0-9]{1,3}.){3,3}[0-9]{1,3}', $this->_proxyIp, $regs); + + if ($is_ip && (count($regs) > 0)) + { + // True IP behind a proxy + return $regs[0]; + } + else + { + if (empty($this->_httpClientIp)) + { + // Can't define IP: there is a proxy but we don't have + // information about the true IP + return "(unbekannt) " . $this->_proxyIp; + } + else + { + // better than nothing + return $this->_httpClientIp; + } + } + } + + } + + + +} \ No newline at end of file diff --git a/copy_this/out/basic/tpl/inc/d3ce_usersonline.tpl b/copy_this/out/basic/tpl/inc/d3ce_usersonline.tpl new file mode 100644 index 0000000..e1fe52d --- /dev/null +++ b/copy_this/out/basic/tpl/inc/d3ce_usersonline.tpl @@ -0,0 +1,6 @@ +Online +[{strip}] +
+ [{$usersonline }] User(s) +
+[{/strip}] \ No newline at end of file diff --git a/setup+doku/readme_de.txt b/setup+doku/readme_de.txt new file mode 100644 index 0000000..ba4ec4e --- /dev/null +++ b/setup+doku/readme_de.txt @@ -0,0 +1,45 @@ +Authors: Aggrosoft it intelligence, D3 Data Development + +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 3 of the License, or +(at your option) any later version. + +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, see . + +----------------------------------------------------------------------- + +Installation: + +Kopieren Sie die Inhalte des "copy_this"-Ordner in Ihr Shop-Verzeichnis, + +Führen Sie folgendes Script in Ihrer Datenbank aus: + +CREATE TABLE d3ce_online_users ( + `id` int(11) NOT NULL auto_increment, + `visitor` varchar(100) default NULL, + `timevisit` int(11) NOT NULL default '0', + `oxclass` varchar(32) collate latin1_general_ci NOT NULL, + PRIMARY KEY (id) +) TYPE=MyISAM; + +Fügen Sie nun das Modul zu Ihrem Shop hinzu: + +oxcmp_utils => d3ce_usersonline/views/d3ce_oxcmp_utils_usersonline + +Sie können den counter nun in eines Ihrer Templates einbauen (evtl. _left.tpl) +Hierfür benötigen Sie lediglich folgende Zeile: + +[{include file="inc/d3ce_usersonline.tpl"}] + +HINWEIS: + +Da nach deutschem Recht nicht einfach irgendwelche IP's in der DB abgespeichert werden +dürfen und Sie auch sicherlich kein Interesse an den IP's haben wird aus der User IP +ein Hash errechnet und dieser zum Vergleich herangezogen und gespeichert. diff --git a/setup+doku/readme_en.txt b/setup+doku/readme_en.txt new file mode 100644 index 0000000..4c97f28 --- /dev/null +++ b/setup+doku/readme_en.txt @@ -0,0 +1,42 @@ +Authors: Aggrosoft it intelligence, D3 Data Development + +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 3 of the License, or +(at your option) any later version. + +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, see . + +----------------------------------------------------------------------- + +Installation: + +Copy the contents in the "copy_this"-folder into your oxid folder. + +Execute the following SQL Script in your oxid database (tools menu in admin backend): + +CREATE TABLE d3ce_online_users ( + id int(11) NOT NULL auto_increment, + visitor varchar(100) default NULL, + timevisit int(11) NOT NULL default '0', + PRIMARY KEY (id) +) TYPE=MyISAM; + +Add the Module to your Oxid Modules in the admin backend: + +oxcmp_utils => d3ce_usersonline/views/d3ce_oxcmp_utils_usersonline + +Now you can include the counter anywhere in your templates (e.g. _left.tpl) +You just need the following line: + +[{include file="inc/d3ce_usersonline.tpl"}] + +LEGAL NOTICE: + +The users ip is never saved in your database, the ip will be hashed before it is stored. \ No newline at end of file