uawdijnntqw1x1x1
IP : 216.73.216.198
Hostname : webm002.cluster123.gra.hosting.ovh.net
Kernel : Linux webm002.cluster123.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
OS : Linux
PATH:
/
home
/
megadansyp
/
www
/
eace8
/
..
/
modules
/
mod_banners
/
..
/
mod_vvisit_counter
/
helper.php
/
/
<?php // no direct access defined('_JEXEC') or die('Restricted access'); require_once (dirname(__FILE__) . DIRECTORY_SEPARATOR . 'diagram.php'); require_once (dirname(__FILE__) . DIRECTORY_SEPARATOR . 'ipcountry' . DIRECTORY_SEPARATOR . 'iptocountry.php'); jimport('joomla.environment.browser'); jimport('joomla.language.helper'); /** * * @version $Id: helper.php 406 2014-10-27 16:45:41Z mmicha $ * @package mod_vvisit_counter * @copyright Copyright (C) 2014 Majunke Michael http://www.mmajunke.de/ * @license GNU/GPL * * 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 <http://www.gnu.org/licenses/>. */ class modVisitCounterHelper { // Konstanten // // da viele ein Problem mit const haben, erstmal rausgenommen // Marke : TODO_CO_MOD // const MODULE = 'mod_vvisit_counter' ; private $MODULE = 'mod_vvisit_counter' ; private $mdclsf = null; private $isInserted = FALSE; private $ABSOLUTE_URLS = FALSE; private $baseurl = null; private $cssfile = null; // shortcut date_fmt; private $date_day_fmt = "d.m.Y"; // parsing PRE and POST private $PRE_AND_POST_REPLACES = array( '$today$', // simple Heute Datum '$countAll$' , // Gesamt Anzahl '$countToday$' , // Anzahl Heute '$countYesterday$' , // Anzahl Gestern '$countWeek$' , // Anzahl Woche '$countMonth$' , // Anzahl Monat '$minDate$' , // kleinstes Datum in DB '$callerIP$' , // IP '$callerCountryCode$' , // Country '$callerCountry$' , // ISO2 Country '$callerCountryFlag$' , // Flag Country '$userAgent$', // UserAgent '$browser$', // Browser - Joomla '$versionBrowser$', // Browser Version - Joomla '$platformBrowser$', // Browser Platform - Joomla '$phpbrowser$', // Browser - PHP '$phpversionBrowser$', // Browser Version - PHP '$phpplatformBrowser$', // Browser Platform - PHP '$loggedIn$', // Logged In Users '$guests$', // Guests '$regUsers$', // Registered Users '$regUsersToday$', // Registered Users Today '$visitors$' // summe: $loggedIn$ + $guests$ ); // Members // private $db = null ; private $all_visitors = NULL ; private $today_visitors = NULL; private $yesterday_visitors = NULL; private $week_visitors = NULL; private $month_visitors = NULL; private $min_Date = NULL; private $lang = NULL; private $loggedinUserCount = NULL; private $guestsCount = NULL; private $loggedinUserCountText = NULL; private $loggedinUserNamensText = NULL; private $userNamensOut = NULL; private $userNamensLink = NULL; private $userNamensLinkLogged = NULL; private $guestsCountText = NULL; private $registeredUserCount = NULL; private $registeredUserCountText = NULL; private $registeredUserCountToday = NULL; private $registeredUserCountTodayText = NULL; private $loggedinUserNamens = NULL; private $registeredUserTodayNamensText = NULL; private $registeredUserTodayNames = NULL; private $maxVisitsOnDayArr = NULL; // 0 = Value ; 1 = Day // Read our Parameters // // Days private $translate_table_texts = null ; private $today = null; private $yesterday = null; private $x_month = null; private $x_week = null; private $all = null; // Highest User-Day in Stat Data private $show_highestVisitsDay = null; private $highestVisitsDayText = null; private $highestVisitsDayTrenner = null; private $highestVisitsDayText_Value = null; private $highestVisitsDayRecalcSec = 43200; // 6h (60 * 60 * 12) // IP private $ip = null; private $ip_type = null; private $filterIPs = "" ; private $firstCheckForwarderIP = null; // Data private $countUserAsNewType = null ; private $locktime = null; private $initialvalue = null; private $records = null; private $records_days = null; // Show Days private $s_today = null; private $s_yesterday = null; private $s_all = null; private $s_week = null; private $s_month = null; private $s_week_startday = null ; // Show IP private $s_ip = null; private $s_ipCcode = null; private $s_ipCountry = null; private $s_ipCflag = null; private $s_ipCflag_width = null; private $s_ipCflag_height = null; private $s_ipCLic = null; private $s_ipCLicText = null; private $s_ipAlsoInRaw = null; // Show Images before Days ( little Poeples ) private $show_UsageImgs = null; // Show Digit Counter private $s_digit = null; // Display Type of Digits private $disp_type = null; // Digits Counter Parameters private $s_digits_min = null; private $s_digits_max = null; private $s_digits_warnimg = null; private $pretext = null; private $posttext = null; private $widthtable = null; // call create Table or not private $s_trycreatetable = null; private $s_createtableName = null; private $s_createtableName_raw = null; // image // erstellen ? private $image_create = 0; private $image_path = null; // Stunden die das Bild aktuell ist private $image_newerAsHours = null; // Anzahl Tage private $image_showDays = null; private $image_sizeX = null; private $image_sizeY = null; // HTML COLORS private $image_lineColor = "#000000" ; private $image_dia_MainbgColor = "#FFFFFF"; private $image_dia_bgColor = "#DDDDDD"; private $image_dia_RandColor = "#FF0000"; // Read Only Param private $read_only_counter = false; // UserAgent Filter ( array with str;str;... ) private $filterUserAgents = "" ; private $filterUserAgentsFile = "" ; private $autoFilterRobots = FALSE; private $saveUserAgents = FALSE ; // Filter Users private $filterUsers = 0 ; // Cookies private $useCookies = TRUE ; // Mail private $mail_sending = 0; private $mail_userIds = null; private $mail_body = null; private $mail_rate = 1000; private $mail_datetime_fmt = "d.m.Y"; // Trigger Script private $trigger_script = 0; private $trigger_script_rate = 1000; private $trigger_script_name = null; // Show Users and Guest private $show_loggedinUserCount = 0; private $show_loggedinUserNamens = 0; private $show_registeredUserTodayNames = 0; private $show_guestsCount = 0; private $show_registeredUserCount = 0; private $show_registeredUserCountToday = 0; private $show_UsersCountOnlyFrontend = 1; // Group filter for show_loggedinUserNamens, $show_registeredUserTodayNames //:OnlyJ16 private $onlyGroupsN_Flag = 0; private $onlyGroupsN = NULL; private $userCountTrenner = ""; private $guestInactivTime = 300; private $userInactivTime = 0; // private $callerIP = ""; // Instanz of IP to Country Mapper private $ipToCountry = null; /** * Konstruktor */ public function __construct(&$params) { // base if ( $this->ABSOLUTE_URLS ) { $this->baseurl = JURI::base(); } else { $this->baseurl = JURI::base(true) . '/'; } // $this->mdclsf = @$params->get( 'moduleclass_sfx' , '' ) ; // Read our Parameters // Translate, Days, .. $this->translate_table_texts = @$params->get('s_translate_table_texts', 0); $this->today = @$params->get('today', 'Today'); $this->yesterday = @$params->get('yesterday', 'Yesterday'); $this->x_month = @$params->get('month', 'This Month'); $this->x_week = @$params->get('week', 'This Week'); $this->all = @$params->get('all', 'All Days'); // IP $this->ip = @$params->get('ip', ''); $this->ip_type = @$params->get('ip_type', 'text'); $this->filterIPs = @$params->get('filterIPs', ""); $this->firstCheckForwarderIP = @$params->get('s_firstCheckForwarderIP', 0); // Data $this->countUserAsNewType = @$params->get('s_countUserAsNewType', 0); $this->locktime = @$params->get('locktime', 30); $this->initialvalue = @$params->get('initialvalue', 0); $this->records = @$params->get('records', 1); $this->records_days = @$params->get('recordDays', -1); // Show Days $this->s_today = @$params->get('s_today', 1); $this->s_yesterday = @$params->get('s_yesterday', 1); $this->s_all = @$params->get('s_all', 1); $this->s_week = @$params->get('s_week', 1); $this->s_month = @$params->get('s_month', 1); $this->s_week_startday = @$params->get('s_week_startday', 1); // Show IP $this->s_ip = @$params->get('s_ip', 0); $this->s_ipCcode = @$params->get('s_ipCcode', 0); $this->s_ipCountry = @$params->get('s_ipCountry', 0); $this->s_ipCflag = @$params->get('s_ipCflag', 0); $this->s_ipCflag_width = @$params->get('s_ipCflag_width', 20); $this->s_ipCflag_height = @$params->get('s_ipCflag_height', 13); $this->s_ipAlsoInRaw = @$params->get('s_ipAlsoInRaw', 0); $this->s_ipCLic = @$params->get('s_ipCLic', 1); $this->s_ipCLicText = @$params->get('s_ipCLicText', "<p style='font-size:25%'>This page uses the IP-to-Country Database provided by WebHosting.Info (http://www.webhosting.info), available from http://ip-to-country.webhosting.info</p>"); // Show Images before Days ( little Poeples ) $this->show_UsageImgs = @$params->get('show_UsageImgs', 'peoples'); // Show Digit Counter $this->s_digit = @$params->get('s_digit', 1); // Display Type of Digits $this->disp_type = @$params->get('disp_type', "text"); // Digits Counter Parameters $this->s_digits_min = @$params->get('s_digits_min', "6"); $this->s_digits_max = @$params->get('s_digits_max', "6"); $this->s_digits_warnimg = @$params->get('s_digits_warnimg', ""); $this->pretext = @$params->get('pretext', ""); $this->posttext = @$params->get('posttext', ""); $this->widthtable = @$params->get('widthtable', "100"); // call create Table or not $this->s_trycreatetable = @$params->get('s_trycreatetable', 1); $this->s_createtableName_raw = @$params->get('s_createtableName', "vvisitcounter" ); $this->s_createtableName = '#__' . $this->s_createtableName_raw; // Image $this->image_create = @$params->get('image_create', 0); $this->image_path = @$params->get('image_path', '/tmp/imagemvc.png'); $this->image_newerAsHours = @$params->get('image_newerAsHours', 6); $this->image_sizeX = @$params->get('image_sizeX', 160); $this->image_sizeY = @$params->get('image_sizeY', 90); $this->image_lineColor = @$params->get('image_lineColor', "#000000"); $this->image_dia_MainbgColor = @$params->get('image_dia_MainbgColor', "#FFFFFF"); $this->image_dia_bgColor = @$params->get('image_dia_bgColor', "#DDDDDD"); $this->image_dia_RandColor = @$params->get('image_dia_RandColor', "#FF0000"); $this->image_showDays = @$params->get('image_showDays', 0); // <0 all; // read only mode $this->read_only_counter = @$params->get('read_only_counter', false); // Filter UserAgents $this->filterUserAgents = @$params->get('filterUserAgents', ""); $this->filterUserAgentsFile = @$params->get('filterUserAgentsFile', -1 ); $this->autoFilterRobots = @$params->get('s_autoFilterRobots' , 0 ); $this->saveUserAgents = @$params->get('saveUserAgents', 0 ); // Filter Users $this->filterUsers = @$params->get('filterUsers', 0 ); // Cookies $this->useCookies = @$params->get('s_useCookies', true ); // Mail $this->mail_sending = @$params->get('mail_sending', 0 ); $this->mail_userIds = @$params->get('mail_userIds', '' ); $this->mail_body = @$params->get('mail_body', '$a' ); $this->mail_rate = @$params->get('mail_rate', 1000 ); if ( $this->mail_rate < 1 ) { $this->mail_rate = 1; } $this->mail_datetime_fmt = @$params->get('mail_datetime_fmt', 'd.m.Y' ); // Trigger Script $this->trigger_script = @$params->get('trigger_script', 0 ); $this->trigger_script_rate = @$params->get('trigger_script_rate', 1000 ); if ( $this->trigger_script_rate < 1 ) { $this->trigger_script_rate = 1; } $this->trigger_script_name = @$params->get('trigger_script_name', '' ); // Users View $this->show_loggedinUserCount = @$params->get('s_loggedinUserCount', 0 ); $this->loggedinUserCountText = @$params->get('loggedinUserCountText', '' ); $this->show_loggedinUserNamens = @$params->get('s_loggedinUserNamens', 0 ); $this->loggedinUserNamensText = @$params->get('loggedinUserNamensText', '' ); $this->userNamensOut = @$params->get('s_userNamensOut', 1 ); $this->show_guestsCount = @$params->get('s_guestsCount', 0 ); $this->guestsCountText = @$params->get('guestsText', '' ); $this->show_registeredUserCount = @$params->get('s_registeredUserCount', 0 ); $this->registeredUserCountText = @$params->get('registeredUserCountText', '' ); $this->show_registeredUserCountToday = @$params->get('s_registeredUserCountToday', 0 ); $this->registeredUserCountTodayText = @$params->get('registeredUserCountTodayText', '' ); $this->show_registeredUserTodayNames = @$params->get('s_registeredUserTodayNames', 0 ); $this->registeredUserTodayNamensText = @$params->get('registeredUserTodayNamensText', '' ); $this->show_UsersCountOnlyFrontend = @$params->get('s_onlyFrontEndCount', 1 ); $this->s_userCountTrenner = @$params->get('userCountTrenner', ' ' ); $this->userNamensLink = @$params->get('userNamensLink', NULL ); $this->userNamensLinkLogged = @$params->get('userNamensLinkLogged', 0 ); $this->guestInactivTime = @$params->get('s_guestInactivTime', 300 ); $this->userInactivTime = @$params->get('s_userInactivTime', 0 ); // 0 is joomla default // Group filter for show_loggedinUserNamens, $show_registeredUserTodayNames //:OnlyJ16 $this->onlyGroupsN_Flag = @$params->get('s_onlyGroupsN_Flag', 0 ); $this->onlyGroupsN = @$params->get('s_onlyGroupsN', NULL ); // $this->show_highestVisitsDay = @$params->get('s_highestVisitsDay', 0 ); $this->highestVisitsDayText = @$params->get('highestVisitsDayText', '' ); $this->highestVisitsDayTrenner = @$params->get('highestVisitsDayTrenner', '' ); $this->highestVisitsDayText_Value = @$params->get('highestVisitsDayTValue', '$d : $v' ); $this->highestVisitsDayRecalcSec = @$params->get('highestVisitsDayUpdInt', '43200' ); // Auto Translate Texts.. if not found, is the same // translate is only needed if show the days if ( $this->translate_table_texts > 0 ) { if ($this->s_today) { $this->today = $this->get_translated_text($this->today); } if ($this->s_yesterday) { $this->yesterday = $this->get_translated_text($this->yesterday); } if ($this->s_week) { $this->x_week = $this->get_translated_text($this->x_week); } if ($this->s_month) { $this->x_month = $this->get_translated_text($this->x_month); } if ($this->s_all) { $this->all = $this->get_translated_text($this->all); } if ($this->show_loggedinUserCount) { $this->loggedinUserCountText = $this->get_translated_text($this->loggedinUserCountText); } if ($this->show_loggedinUserNamens) { $this->loggedinUserNamensText = $this->get_translated_text($this->loggedinUserNamensText); } if ($this->show_guestsCount) { $this->guestsCountText = $this->get_translated_text($this->guestsCountText); } if ($this->show_registeredUserCount) { $this->registeredUserCountText = $this->get_translated_text($this->registeredUserCountText); } if ($this->show_registeredUserCountToday) { $this->registeredUserCountTodayText = $this->get_translated_text($this->registeredUserCountTodayText); } if ($this->show_registeredUserTodayNames) { $this->registeredUserTodayNamensText = $this->get_translated_text($this->registeredUserTodayNamensText); } // if ($this->show_highestVisitsDay) { $this->highestVisitsDayText = $this->get_translated_text($this->highestVisitsDayText); } } // date_fmt translated $this->date_day_fmt = $this->get_translated_datefmt('DATE_FMT_DAY'); // append own CSS $this->cssfile = @$params->get('cssfile' , 'mvc.css' ); // simple -1 if ( FALSE === is_numeric($this->cssfile) ) { $document = JFactory::getDocument(); $document->addStyleSheet( // JURI::base() . 'modules/' . $this->MODULE . '/' . $this->baseurl . 'modules/' . $this->MODULE . '/' . $this->cssfile ); } // Extend Filter from File // simple -1 if ( FALSE === is_numeric($this->filterUserAgentsFile) ) { $fileToLoad = JPATH_SITE . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . $this->MODULE . DS . $this->filterUserAgentsFile; jimport('joomla.filesystem.file'); if ( JFile::exists($fileToLoad) ) { // last is a ; $addc = ""; if ( !empty($this->filterUserAgents) && !( substr( $this->filterUserAgents, -1) === ";" ) ) { $addc = ";" ; } $this->filterUserAgents = $this->filterUserAgents . $addc . JFile::read($fileToLoad); } } // Initalisierung $this->init($params); } /** * render Spacer * <div class="mvc_spacer"> * <hr/> * </div> * * @return content */ public function renderSpacer() { return '<div style="text-align: center;" class="mvc_spacer' . $this->mdclsf . '"><hr/></div>'; } /** * render IP-Adress * <div class="mvc_ip"> * f�r text * <span class="vcounter_TypeTextIP">.. * or * <img class="mvc_digitCounterImg" ... * </div> * * @return content */ public function renderIP() { if ( $this->s_ip && ($this->callerIP != null) ) { // return '<div style="text-align: center;" class="mvc_ip' . $this->mdclsf . '">' . $this->ip . $this->callerIP . '</div>'; $content = '<div style="text-align: center;" class="mvc_ip' . $this->mdclsf . '">' . $this->ip ; // spezial Type Text if ($this->ip_type == 'text') { // Show as Text $content .= '<span style="text-align: center;" class="vcounter_TypeTextIP' . $this->mdclsf . '">' . $this->callerIP . '</span>' ; } else { // show as Images $isv4 = strpos( $this->callerIP, ":" ); if ( FALSE === $isv4 ) { //split $arr_ip_Part = explode( ".", $this->callerIP , 4 ); if ( $arr_ip_Part == null || (empty($arr_ip_Part)) ) { return; } // $c=0 ; foreach( $arr_ip_Part as $ip_Part ){ // Render Images $content .= $this->numToImg( $ip_Part , 1 , 3 , // JURI::base() . 'modules/' . $this->baseurl . 'modules/' . // TODO_CO_MOD modVisitCounterHelper::MODULE $this->MODULE . '/images/' . $this->ip_type . '/', null, 'mvc_digitIPImg' ); if ( $c++ < 3) { $dir = // JURI::base() . 'modules/' . $this->baseurl . 'modules/' . // TODO_CO_MOD modVisitCounterHelper::MODULE $this->MODULE . '/images/' . $this->ip_type . '/'; $content .= "<img class=\"mvc_digitIPImg" . $this->mdclsf . "\" src=\"{$dir}dot.gif\" alt=\"Dot\" title=\"Dot\"/>" ; } } } else { // ipv6 //split $arr_ip_Part = explode( ":", $this->callerIP , 8 ); if ( $arr_ip_Part == null || (empty($arr_ip_Part)) ) { return; } // $c=0 ; foreach( $arr_ip_Part as $ip_Part ){ // Render Images $content .= $this->numToImg( $ip_Part , 1 , 4 , // JURI::base() . 'modules/' . $this->baseurl . 'modules/' . // TODO_CO_MOD modVisitCounterHelper::MODULE $this->MODULE . '/images/' . $this->ip_type . '/', null, 'mvc_digitIPImg' ); if ( $c++ < 7) { $dir = // JURI::base() . 'modules/' . $this->baseurl . 'modules/' . // TODO_CO_MOD modVisitCounterHelper::MODULE $this->MODULE . '/images/' . $this->ip_type . '/'; $content .= "<img class=\"mvc_digitIPImg" . $this->mdclsf . "\" src=\"{$dir}colon.gif\" alt=\"Colon\" title=\"Colon\"/>" ; } } } } $content .= '</div>'; return $content; } else { return ""; } } /** * render Country Code of IP (callerIP) * <div class="mvc_ipcountrycode"> ... */ public function renderIPCountryCode() { if ( !$this->s_ipCcode || $this->ipToCountry == null || $this->callerIP == null ){ return ""; } // $code = $this->ipToCountry->getISOAlphaZwei($this->callerIP); // Test //$code = $this->ipToCountry->getISOAlphaZwei("85.233.46.218"); if ( empty($code) ) { $code = "?"; } return '<div style="text-align: center;" class="mvc_ipcountrycode' . $this->mdclsf . '">' . $code . '</div>'; } /** * render Country of IP (callerIP) * <div class="mvc_ipcountry"> ... */ public function renderIPCountry() { if ( !$this->s_ipCountry || $this->ipToCountry == null || $this->callerIP == null ) { return ""; } // $country = $this->ipToCountry->getCountry($this->callerIP); // Test // $country = $this->ipToCountry->getCountry("85.233.46.218"); if ( empty($country) ) { $country = "?"; } return '<div style="text-align: center;" class="mvc_ipcountry' . $this->mdclsf . '">' . $country . '</div>'; } /** * render Flag of IP (callerIP) * <div class="mvc_ipflag"> ... * <img class="mvc_ipflagimg" */ public function renderIPFlag() { if ( !$this->s_ipCflag || $this->ipToCountry == null || $this->callerIP == null ) { return ""; } // $code = $this->ipToCountry->getISOAlphaZwei($this->callerIP); // Test //$code = $this->ipToCountry->getISOAlphaZwei("85.233.46.218"); // make an empty check $img = $this->isoZweiToFlagImg( $code , // JURI::base() . 'modules/' . $this->baseurl . 'modules/' . // TODO_CO_MOD modVisitCounterHelper::MODULE $this->MODULE . '/images/flags/', 'mvc_ipflagimg' , $this->s_ipCflag_width, $this->s_ipCflag_height ); return '<div style="text-align: center;" class="mvc_ipflag' . $this->mdclsf . '">' . $img . "</div>"; } /** * render PRE-Text * <div class="mvc_pre"> ... */ public function renderPRE() { if ($this->pretext != "") { return '<div style="text-align: center;" class="mvc_pre' . $this->mdclsf . '">' . $this->pretext . '</div>'; } else { return ""; } } /** * render POST-Text * <div class="mvc_post"> ... */ public function renderPOST() { $other = null; if ( ( $this->s_ipCcode || $this->s_ipCountry || $this->s_ipCflag ) && $this->s_ipCLic ) { $other = $this->s_ipCLicText; } if ( ($this->posttext != "") || !empty($other) ) { return '<div style="text-align: center;" class="mvc_post' . $this->mdclsf . '">' . $this->posttext . $other . '</div>'; } else { return ""; } } /** * render POST-Text * <div class="mvc_digitCounter"> ... * <span class="vcounter_TypeText" * or * <img class="mvc_digitCounterImg" */ public function renderDigitCounter() { if ($this->s_digit) { $content = '<div style="text-align: center;" class="mvc_digitCounter' . $this->mdclsf . '">'; // spezial Type Text if ($this->disp_type == 'text') { // Show as Text $content .= '<span style="text-align: center;" class="vcounter_TypeText' . $this->mdclsf . '">' . $this->all_visitors . '</span>' ; } else { // Render Images $content .= $this->numToImg($this->all_visitors , $this->s_digits_min , $this->s_digits_max , // JURI::base() . 'modules/' . $this->baseurl . 'modules/' . // TODO_CO_MOD modVisitCounterHelper::MODULE $this->MODULE . '/images/' . $this->disp_type . '/', $this->s_digits_warnimg, 'mvc_digitCounterImg'); } $content .= '</div>'; return $content; } else { return ""; } } /** * Render the People Table * <div class="mvc_people"> ... * <table class="mvc_peopleTable" * <img class="mvc_peopleImg" */ public function renderPeopleTable() { if ($this->s_today || $this->s_yesterday || $this->s_week || $this->s_month || $this->s_all) { // $content = '<div style="text-align: center;" class="mvc_people' . $this->mdclsf . '"><table align="center" cellpadding="0" cellspacing="0" style="width: ' . $this->widthtable . '%;" class="mvc_peopleTable' . $this->mdclsf . '"><tbody>'; if ($this->s_today) { $today_visitors = $this->sql_today_visitors(); // compute today title // Info: Using not JDate because Error with Joomla < 1.5.2 $title_day_str_day = date( $this->date_day_fmt ); $content .= modVisitCounterHelper::spaceer("vtoday.gif", $this->today, $today_visitors, $this->show_UsageImgs, $title_day_str_day ); } if ($this->s_yesterday) { $yesterday_visitors = $this->sql_yesterday_visitors(); // compute yesterday title $title_day_str_yesterday = date( $this->date_day_fmt , time() - (1 * 24 * 60 * 60) ); $content .= modVisitCounterHelper::spaceer("vyesterday.gif", $this->yesterday, $yesterday_visitors, $this->show_UsageImgs, $title_day_str_yesterday ); } if ($this->s_week) { $week_visitors = $this->sql_week_visitors(); // compute this Week (from - to) title // use configured week_start_day $ft = array(); if ( $this->s_week_startday == 0 ) { // SUNDAY $ft = $this->getWeekFromTo( time() , 'Sunday' , $this->date_day_fmt) ; } else if ( $this->s_week_startday == 2 ) { // SATURDAY $ft = $this->getWeekFromTo( time() , 'Saturday' , $this->date_day_fmt) ; } else { // MONDAY $ft = $this->getWeekFromTo( time() , 'Monday' , $this->date_day_fmt) ; } $title_day_str_week = $ft["from"] . ' - ' . $ft["to"]; $content .= modVisitCounterHelper::spaceer("vweek.gif", $this->x_week, $week_visitors, $this->show_UsageImgs, $title_day_str_week ); } if ($this->s_month) { $month_visitors = $this->sql_month_visitors(); // compute this Month ( from - to ) title $current_day = date('d') - 1; $days_remaining_until = date('t') - $current_day - 1; $tm_start = strtotime("-$current_day days"); $tm_end = strtotime("+$days_remaining_until days"); $title_day_str_month_s = date( $this->date_day_fmt, $tm_start ); $title_day_str_month_e = date( $this->date_day_fmt, $tm_end ); $title_day_str_month = $title_day_str_month_s . ' - ' . $title_day_str_month_e; $content .= modVisitCounterHelper::spaceer("vmonth.gif", $this->x_month, $month_visitors, $this->show_UsageImgs, $title_day_str_month ); } // Err ? if( $this->db->getErrorNum () ) { $e = $this->db->getErrorMsg(); //print_r( $e ); JError::raiseWarning( 500, $e ); return; } if ($this->s_all) { $content .= modVisitCounterHelper::spaceer("vall.gif", $this->all, $this->all_visitors, $this->show_UsageImgs, "" ); } $content .= "</tbody></table></div>"; return $content; } else { return ""; } } /** * Render the Statistik Image * <div class="mvc_stat" * <img class="mvc_statImg" */ public function renderStatistikImage() { if ( $this->image_create > 0 ) { $content = ''; // save if not exist and older as time // $imagePathFS = JPATH_BASE . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . modVisitCounterHelper::MODULE . DIRECTORY_SEPARATOR . 'image.png'; $imagePathFS = JPATH_BASE . $this->image_path ; $timeCreated = time(); if (! file_exists($imagePathFS)) { if ( $this->image_create == 2 ){ $this->renderStatImage( $this->db, $imagePathFS, $this->image_showDays, true ); } else { $this->renderStatImage( $this->db, $imagePathFS, $this->image_showDays, false ); } } else { $timeCreated = filemtime($imagePathFS); $diffinHours = (time() - $timeCreated) / 60 / 60 ; // erstelle nur wenn neuer als Stunden if ($diffinHours > $this->image_newerAsHours) { if ( $this->image_create == 2 ){ $this->renderStatImage( $this->db, $imagePathFS, $this->image_showDays, true ); } else { $this->renderStatImage( $this->db, $imagePathFS, $this->image_showDays, false ); } } } // URL to Load // $imageUri = JURI::base() . 'modules/' . modVisitCounterHelper::MODULE . '/image.png'; // $imageUri = JURI::base() . $this->image_path; // $imageUri = $this->baseurl . $this->image_path; $image_path_loc = $this->image_path ; if ( strpos( $image_path_loc, "/" ) === 0 ) { $image_path_loc = substr( $image_path_loc, 1, strlen($image_path_loc) ); } $imageUri = $this->baseurl . $image_path_loc; $content .= '<div style="text-align: center;" class="mvc_stat' . $this->mdclsf . '">' ; $crstaltAndtitle = $this->get_translated_text('CREATED_STAT_ALT') . ': ' . date( "c" , $timeCreated ) ; $content .= '<img class="mvc_statImg' . $this->mdclsf . '" alt="' . $crstaltAndtitle . '" title="' . $crstaltAndtitle . '" src="' . $imageUri . '"/>'; $content .= "</div>"; return $content; } else { return ""; } } /** * render Logged In Users * <div class="mvc_loggedInUsers"> * <span class="title">... * <span class="trenner">... * <span class="value">... * */ public function renderLoggedInUserCount() { if ( !$this->show_loggedinUserCount || $this->loggedinUserCount < 0 ){ return ""; } return '<div style="text-align: center;" class="mvc_loggedInUsers' . $this->mdclsf . '">' . '<span class="title">' . $this->loggedinUserCountText . '</span>' . '<span class="trenner">' . $this->s_userCountTrenner . '</span>' . '<span class="value">' . $this->loggedinUserCount . '</span>' . '</div>'; } /** * render Logged In User Namens * * * <div class="mvc_loggedInUserNamens"> * <span class="title">... * 1...* <div class="user">... <a class="userlink">.. </div> * </div> * */ public function renderLoggedInUserNamens() { if ( !$this->show_loggedinUserNamens // || $this->loggedinUserNamens === NULL ){ return ""; } $erg = '<div class="mvc_loggedInUserNamens' . $this->mdclsf . '">' ; if ( !empty($this->loggedinUserNamensText) ) { $erg .= '<div class="title">' . $this->loggedinUserNamensText . '</div>' ; } if ( empty($this->loggedinUserNamens) ) { $erg .= '<div class="user"> - </div>' ; } else { foreach( $this->loggedinUserNamens as $row ){ // weiterhin $row['id'] // Design ( Account, Name, Title .. ) $titleP = ""; $nameP = "" ; switch($this->userNamensOut){ case 3: $nameP = htmlspecialchars($row['name']); break; case 2: $nameP = htmlspecialchars($row['uname']); break; case 0: $titleP = 'title="' . htmlspecialchars($row['uname']) . '"'; $nameP = htmlspecialchars($row['name']); break; default: $titleP = 'title="' . htmlspecialchars($row['name']) . '"'; $nameP = htmlspecialchars($row['uname']); } // Link .. only for logged in ? $guestCheck = TRUE; if ( $this->userNamensLinkLogged < 1 ) { $guestCheck = ! JFactory::getUser()->guest ; } // prepare if ( $guestCheck && !empty($this->userNamensLink) ) { $link_rep = $this->userNamensLink ; $link_rep = str_replace( '$$id', $row['id'] , $link_rep ); $link_rep = str_replace( '$$account', $row['uname'] , $link_rep ); $link_rep = str_replace( '$$name', $row['name'] , $link_rep ); $nameP = '<a class="userlink" href="' . $link_rep . '">' . $nameP . '</a>'; } $erg .= '<div class="user" ' . $titleP . '>' . $nameP . '</div>' ; } } $erg .= '</div>'; return $erg; } /** * render Guests * <div class="mvc_guests"> ... * <span class="title">... * <span class="trenner">... * <span class="value">... */ public function renderGuestCount() { if ( !$this->show_guestsCount || $this->guestsCount < 0 ){ return ""; } return '<div style="text-align: center;" class="mvc_guests' . $this->mdclsf . '">' . '<span class="title">' . $this->guestsCountText . '</span>' . '<span class="trenner">' . $this->s_userCountTrenner . '</span>' . '<span class="value">' . $this->guestsCount . '</span>' . '</div>'; } /** * render Rwegistered User Count * <div class="mvc_reg_users_all"> ... * <span class="title">... * <span class="trenner">... * <span class="value">... */ public function renderRegisteredUserCount() { if ( !$this->show_registeredUserCount || $this->registeredUserCount < 0 ){ return ""; } return '<div style="text-align: center;" class="mvc_reg_users_all' . $this->mdclsf . '">' . '<span class="title">' . $this->registeredUserCountText . '</span>' . '<span class="trenner">' . $this->s_userCountTrenner . '</span>' . '<span class="value">' . $this->registeredUserCount . '</span>' . '</div>'; } /** * render Logged In User Namens * * * <div class="mvc_regTodayUserNamens"> * <span class="title">... * 1...* <div class="user">... <a class="userlink">.. </div> * </div> * */ public function renderRegisteredTodayUserNamens(){ if ( !$this->show_registeredUserTodayNames // || $this->registeredUserTodayNames === NULL ){ return ""; } $erg = '<div class="mvc_regTodayUserNamens' . $this->mdclsf . '">' ; if ( !empty($this->registeredUserTodayNamensText) ) { $erg .= '<div class="title">' . $this->registeredUserTodayNamensText . '</div>' ; } if ( empty($this->registeredUserTodayNames) ) { $erg .= '<div class="user"> - </div>' ; } else { foreach( $this->registeredUserTodayNames as $row ){ // weiterhin $row['id'] // Design ( Account, Name, Title .. ) $titleP = ""; $nameP = "" ; switch($this->userNamensOut){ case 3: $nameP = htmlspecialchars($row['name']); break; case 2: $nameP = htmlspecialchars($row['uname']); break; case 0: $titleP = 'title="' . htmlspecialchars($row['uname']) . '"'; $nameP = htmlspecialchars($row['name']); break; default: $titleP = 'title="' . htmlspecialchars($row['name']) . '"'; $nameP = htmlspecialchars($row['uname']); } // Link .. only for logged in ? $guestCheck = TRUE; if ( $this->userNamensLinkLogged < 1 ) { $guestCheck = ! JFactory::getUser()->guest ; } // prepare if ( $guestCheck && !empty($this->userNamensLink) ) { $link_rep = $this->userNamensLink ; $link_rep = str_replace( '$$id', $row['id'] , $link_rep ); $link_rep = str_replace( '$$account', $row['uname'] , $link_rep ); $link_rep = str_replace( '$$name', $row['name'] , $link_rep ); $nameP = '<a class="userlink" href="' . $link_rep . '">' . $nameP . '</a>'; } $erg .= '<div class="user" ' . $titleP . '>' . $nameP . '</div>' ; } } $erg .= '</div>'; return $erg; } /** * render Rwegistered User Count * <div class="mvc_reg_users_today"> ... * <span class="title">... * <span class="trenner">... * <span class="value">... */ public function renderRegisteredTodayUserCount() { if ( !$this->show_registeredUserCountToday || $this->registeredUserCountToday < 0 ){ return ""; } return '<div style="text-align: center;" class="mvc_reg_users_today' . $this->mdclsf . '">' . '<span class="title">' . $this->registeredUserCountTodayText . '</span>' . '<span class="trenner">' . $this->s_userCountTrenner . '</span>' . '<span class="value">' . $this->registeredUserCountToday . '</span>' . '</div>'; } /** * render Highest User Day * <div class="mvc_max_user_day"> ... * <span class="title">... * <span class="trenner">... * <span class="value">... */ public function renderHighestVisitsDay() { if ( !$this->show_highestVisitsDay || empty($this->maxVisitsOnDayArr) ){ return ""; } $highestVisitsDayText_rep = str_replace( '$v', $this->maxVisitsOnDayArr[0] , $this->highestVisitsDayText_Value ); $highestVisitsDayText_rep = str_replace( '$d', $this->maxVisitsOnDayArr[1] , $highestVisitsDayText_rep ); return '<div class="mvc_max_user_day' . $this->mdclsf . '">' . '<span class="title">' . $this->highestVisitsDayText. '</span>' . '<span class="trenner">' . $this->highestVisitsDayTrenner . '</span>' . '<span class="value">' . $highestVisitsDayText_rep . '</span>' . '</div>'; } /** * Translate a Text with Language from Request (Client-Language) * * need a Language-File * * @param $string toTranslate * @return tranlated text or same */ protected function get_translated_text( $string ){ if ( !isset($this->lang) ) { // there is no default in Joomla 1.6 ;( $lang_str = 'en-GB'; // lang from Browser or Joomla if ( $this->translate_table_texts == 1 ) { // detect from Browser $lang_str = JLanguageHelper::detectLanguage(); } else { // use Joomla Setting $lang_str = JFactory::getLanguage()->getTag(); } // Default if ( empty($lang_str) ) { $lang_str = 'en-GB'; } $this->lang = JLanguage::getInstance($lang_str); $loaded = $this->lang->load( $this->MODULE ); } if ( $this->lang->hasKey($string) === true ) { return $this->lang->_($string, false); } else { return $string; } } /** * Translate a Date_FMT_Const with Language from Request (Client-Language) * * need a Language-File * * @param $string toTranslate * @return tranlated text or Default d.m.Y */ protected function get_translated_datefmt( $string ){ if ( $string == null ) { return "d.m.Y"; } if ( !isset($this->lang) ) { // there is no default in Joomla 1.6 ;( $lang_str = 'en-GB'; // lang from Browser or Joomla if ( $this->translate_table_texts == 1 ) { // detect from Browser $lang_str = JLanguageHelper::detectLanguage(); } else { // use Joomla Setting $lang_str = JFactory::getLanguage()->getTag(); } // Default if ( empty($lang_str) ) { $lang_str = 'en-GB'; } $this->lang = JLanguage::getInstance($lang_str); $loaded = $this->lang->load( $this->MODULE ); } if ( $this->lang->hasKey($string) === true ) { return $this->lang->_($string, false); } else { return "d.m.Y"; } } /** * Init Clazz */ protected function init($params) { // Got CallerIP from Cookie or Servers RemoteAddr // // use cookies // readonly or hitcounter dont need cookies if ( (!$this->useCookies) || $this->read_only_counter || ($this->locktime <= 0) ) { // ip $this->callerIP = $this->parseCallerIP( $this->firstCheckForwarderIP ); } else { // each Datatabelle have own Cookie $cookie_name = "cip_" . $this->s_createtableName_raw ; // load stored Cookie $cookie_ip = null; if (isset($_COOKIE[$cookie_name])) { $cookie_ip = $_COOKIE[$cookie_name]; } // Callers IP-Adress from Cookie or Request if ( empty($cookie_ip) ) { // ip $this->callerIP = $this->parseCallerIP( $this->firstCheckForwarderIP ); // cookie_expired_time $cookie_expire = -1; // User is count as new by Locktime or Daily if ( $this->countUserAsNewType == 1 ) { // Daily $cookie_expire = time() + (60*60*24); } else { // By Locktime if ( $this->locktime <= 0 ) { // nothing - no cookie // hitcounter ( should be handled before ) } else { // $cookie_expire = time() + (60 * $this->locktime); } } if ( $cookie_expire > 0 ) { // new cookie only if expire set setcookie( $cookie_name , base64_encode( $this->callerIP ), $cookie_expire ); } } else { // ip $this->callerIP = base64_decode( $cookie_ip ); } } // Simple Test // $this->callerIP = "85.233.46.218"; // Database init $this->db = JFactory::getDBO(); // UserAgent $userAgent = NULL; if ( isset( $_SERVER['HTTP_USER_AGENT'] ) ){ $userAgent = $_SERVER['HTTP_USER_AGENT']; } // Filter $is_filter = FALSE ; // Filter Robots if ( $this->autoFilterRobots ) { $browser = JBrowser::getInstance(); $is_filter = $browser->isRobot() ; } // $user = JFactory::getUser(); // Filter Users // Test nur wenn nicht sowieso schon gefiltert wird.. langform // if ( $is_filter === FALSE ) { if ( $this->filterUsers > 0 ) { // to Filter what if ( ($this->filterUsers == 1) && ($user->guest) ) { // filter Guests $is_filter = TRUE ; } else if ( ($this->filterUsers == 2 ) && (!$user->guest) ) { // filter Members $is_filter = TRUE ; } // else can't be } } // Filter durch UserAgent // Test nur wenn nicht sowieso schon gefiltert wird.. langform if ( $is_filter === FALSE ) { if ( (!empty($userAgent)) && (!empty( $this->filterUserAgents )) ) { // $userAgent = trim($userAgent); // max length if ( strlen($userAgent) > 1024 ) { $userAgent = substr( $userAgent, 0, 1023 ); } // search Skiped UserAgents $arr_filterUserAgents = explode( ";", $this->filterUserAgents ); foreach( $arr_filterUserAgents as $toFilterUA ){ if ( empty($toFilterUA) ) { continue; } if ( strpos( $userAgent, $toFilterUA ) !== FALSE ) { $is_filter = TRUE ; break; } } } } // Filter durch IP // Test nur wenn nicht sowieso schon gefiltert wird.. langform if ( $is_filter === FALSE ) { if ( (!empty($this->callerIP)) && (!empty( $this->filterIPs )) ) { // search Skiped UserAgents $arr_filterIPs = explode( ";", $this->filterIPs ); foreach( $arr_filterIPs as $toFilterIP ){ if ( empty($toFilterIP) ) { continue; } // geht von gleicher Schreibweise aus if ( $this->callerIP == $toFilterIP ) { $is_filter = TRUE ; break; } } } } // not filtered UserAgent then save // dies k�nnte man auch hier einbauen anstatt unten // dann sehen diese kein MAX // if ( $is_filter === FALSE ) { // Check if table exists. When not, create it if ($this->s_trycreatetable) { $query = "CREATE TABLE IF NOT EXISTS " . $this->s_createtableName . "(id int(11) unsigned NOT NULL auto_increment, tm int not null, ip BINARY(20) not null, ipraw VARCHAR( 40 ) default NULL , userAgent varchar(1024) default NULL, data longtext, PRIMARY KEY (id), INDEX (tm), INDEX (ip) , INDEX iptm (ip,tm) ) ENGINE=MyISAM AUTO_INCREMENT=1"; $this->db->setQuery($query); $this->db->query(); if( $this->db->getErrorNum () ) { $e = $this->db->getErrorMsg(); //print_r( $e ); JError::raiseWarning( 500, $e ); return; } } // MAX ID - Sizeof All Users // RECORDS all Real Entries $query = "SELECT count( * ) AS records, MAX( id ) AS max FROM " . $this->s_createtableName . ""; $this->db->setQuery($query); $row = $this->db->loadRow(); if( $this->db->getErrorNum () ) { $e = $this->db->getErrorMsg(); //print_r( $e ); JError::raiseWarning( 500, $e ); return; } //print_r($row ); $entries = $row[0]; $this->all_visitors = $row[1]; if ($this->all_visitors == null) { $this->all_visitors = $this->initialvalue ; } else { $this->all_visitors += $this->initialvalue ; } // not filtered UserAgent then save ( dennoch sollen sie max sehen ) if ( $is_filter === FALSE ) { // keinerlei Update,Delete, etc wenn read_only if ( ! $this->read_only_counter ) { if ( $this->records_days > 0 || $this->show_highestVisitsDay > 0 ) { // MEMORY - one table for all // $query = "CREATE TABLE IF NOT EXISTS " . $this->s_createtableName . "memo (counter varchar(240) NOT NULL, lastMaxPerDay DATE NULL DEFAULT NULL , PRIMARY KEY (counter) ) ENGINE=MEMORY"; $query = "CREATE TABLE IF NOT EXISTS #__" . $this->MODULE . "_memo (counter varchar(240) NOT NULL, lastMaxPerDay DATE NULL DEFAULT NULL , " . " valMaxVisits INT NULL DEFAULT NULL, valMaxVisitsDay int NULL DEFAULT NULL, lastMaxVisits DATETIME NULL , PRIMARY KEY (counter) ) ENGINE=MEMORY"; $this->db->setQuery($query); $this->db->query(); if( $this->db->getErrorNum () ) { $e = $this->db->getErrorMsg(); //print_r( $e ); JError::raiseWarning( 500, $e ); return; } } // // wenn eingeschalten, behalte nur X Tage Var 3 ! // dies wird aber nur einmal pro Tag getan if ( $this->records_days > 0 ) { // $query = "INSERT INTO #__" . $this->MODULE . "_memo ( counter ) values ( '" . $this->s_createtableName_raw . "' ) ON DUPLICATE KEY UPDATE counter='" . $this->s_createtableName_raw . "' "; $this->db->setQuery($query); $this->db->query(); if( $this->db->getErrorNum () ) { $e = $this->db->getErrorMsg(); //print_r( $e ); JError::raiseWarning( 500, $e ); return; } // halte das Datum (einmal pro Tag) in einer Temp Table // $query = "select lastMaxPerDay, curdate() as cur FROM " . $this->s_createtableName . "memo where counter = '" . $this->s_createtableName_raw . "'"; $query = "select lastMaxPerDay, DATEDIFF( curdate(), lastMaxPerDay ) as ddiff FROM #__" . $this->MODULE . "_memo where counter = '" . $this->s_createtableName_raw . "'"; $this->db->setQuery($query); $lastDeletedRes = $this->db->loadObject(); if( $this->db->getErrorNum () ) { $e = $this->db->getErrorMsg(); //print_r( $e ); JError::raiseWarning( 500, $e ); return; } $lastDelDiff = 1; // immer unterschied if ( !empty($lastDeletedRes) && !empty($lastDeletedRes->ddiff) ) { $lastDelDiff = $lastDeletedRes->ddiff ; } // echo $lastDelDiff . " / " . $lastDeletedRes->lastMaxPerDay . " / " . $lastDeletedRes->ddiff ; // echo $lastDelDiff; // nur wenn Diff >= 1 Tag if ( $lastDelDiff > 0 ) { // zuerst wg Sperre // $query = "UPDATE " . $this->s_createtableName . "memo set lastMaxPerDay = CURDATE() WHERE counter = '" . $this->s_createtableName_raw . "'"; $query = "UPDATE #__" . $this->MODULE . "_memo set lastMaxPerDay = CURDATE() WHERE counter = '" . $this->s_createtableName_raw . "'"; $this->db->setQuery($query); $this->db->query(); if( $this->db->getErrorNum () ) { $e = $this->db->getErrorMsg(); //print_r( $e ); JError::raiseWarning( 500, $e ); return; } // Var 1 $query = "DELETE FROM " . $this->s_createtableName . " WHERE from_unixtime(tm) < DATE_SUB( NOW(), INTERVAL " . $this->records_days . " DAY )"; // rechnet von heute genaue Zeit zur�ck // Var 2 $query = "DELETE FROM " . $this->s_createtableName . " WHERE DATEDIFF( NOW() , from_unixtime(tm) ) > " . $this->records_days ; // rechnet von heute Tageweise zur�ck // Var 3 wir behalten wirklich x Tage in der Datenbank, unabh�ngig von heute // Leider braucht MySQL eine Workaround beim nutzen von SubQuerys in DELETE // hier muss die Performance getetstet werden, da temp-table angelegt wird $query = "DELETE FROM " . $this->s_createtableName . " WHERE " . "DATE(from_unixtime(tm)) <= (" . " SELECT toDEL FROM (" . " SELECT DATE_SUB(" . " MAX( DISTINCT DATE( from_unixtime(tm) ) ) , " . " INTERVAL " . $this->records_days . " DAY ) AS toDel " . " FROM " . $this->s_createtableName . " AS theCore " . ") AS workAround" . ")"; $this->db->setQuery($query); $this->db->query(); if( $this->db->getErrorNum () ) { $e = $this->db->getErrorMsg(); //print_r( $e ); JError::raiseWarning( 500, $e ); // todo delete mem table return; } // Optimize //$affectedRows = mysql_affected_rows(); $affectedRows = $this->db->getAffectedRows(); if ( $affectedRows > 1500 ) { // echo "-- OPTIMIZE -- " . $affectedRows ; $query = "OPTIMIZE TABLE " . $this->s_createtableName ; $this->db->setQuery($query); $this->db->query(); } } } // Delete old records wenn eingeschalten $temp = $this->all_visitors - $this->records - $this->initialvalue ; //print_r($temp); if ($this->records > 0 && $temp >= 0 ) { // should delete // nicht l�schen wenn reale Anzahl kleiner if ( $entries >= $this->records ) { $query = "DELETE FROM " . $this->s_createtableName . " WHERE id<='$temp'"; $this->db->setQuery($query); $this->db->query(); if( $this->db->getErrorNum () ) { $e = $this->db->getErrorMsg(); //print_r( $e ); JError::raiseWarning( 500, $e ); return; } // Optimize // $affectedRows = mysql_affected_rows(); $affectedRows = $this->db->getAffectedRows(); if ( $affectedRows > 1500 ) { // echo "-- OPTIMIZE -- " . $affectedRows ; $query = "OPTIMIZE TABLE " . $this->s_createtableName ; $this->db->setQuery($query); $this->db->query(); } } } // IP and now // $ip = $_SERVER['REMOTE_ADDR']; $ip = $this->callerIP ; // User is count as new by Locktime or Daily if ( $this->countUserAsNewType == 1 ) { // Daily $query = "SELECT COUNT(*) FROM " . $this->s_createtableName . // " WHERE ip=UNHEX(SHA1('$ip')) AND ( DATE(FROM_UNIXTIME(tm)) = CURDATE() ) "; " WHERE ip=UNHEX(SHA1('$ip')) AND" . " tm BETWEEN UNIX_TIMESTAMP(DATE(NOW())) AND UNIX_TIMESTAMP(DATE(NOW()) + INTERVAL 1 DAY)"; } else { // By Locktime if ( $this->locktime <= 0 ) { // keine Abfrage - HitCounter - PerfImprovement $query = NULL; // simulate Erg } else { // Now we are checking if the ip was logged in the database. Depending of the value in minutes in the locktime variable. $query = "SELECT COUNT(*) FROM " . $this->s_createtableName . " WHERE ip=UNHEX(SHA1('$ip')) AND ( ((unix_timestamp(NOW()) - tm ) / 60 ) < '$this->locktime' ) "; } } // keine oder Abfrage if ( !empty($query) ) { $this->db->setQuery($query); $items = $this->db->loadResult(); if( $this->db->getErrorNum () ) { $e = $this->db->getErrorMsg(); //print_r( $e ); JError::raiseWarning( 500, $e ); return; } } // $add_data = 'NULL'; // add anon if a user if ( !$user->guest ) { // sp�ter evt auslagern $val_arr = array( 'user' => TRUE ); //$arr["otherkey"] = otherval; $add_data = $this->db->Quote( serialize($val_arr) ); // we need 'value' } if (empty($items)) { // nicht enthalten in AusschlussListe if ( $this->saveUserAgents ) { // do not $this->db->Quote( $add_data ) ! if ( empty($this->s_ipAlsoInRaw) ) { $query = "INSERT INTO " . $this->s_createtableName . " ( tm, ip, userAgent, data ) VALUES ( unix_timestamp(NOW()) , UNHEX(SHA1('$ip')), " . $this->db->Quote( $userAgent ) . ", " . $add_data . " )"; } else { $query = "INSERT INTO " . $this->s_createtableName . " ( tm, ip, ipraw, userAgent, data ) VALUES ( unix_timestamp(NOW()) , UNHEX(SHA1('$ip')), '$ip' , " . $this->db->Quote( $userAgent ) . ", " . $add_data . " )"; } } else { if ( empty($this->s_ipAlsoInRaw) ) { $query = "INSERT INTO " . $this->s_createtableName . " ( tm, ip, data ) VALUES ( unix_timestamp(NOW()) , UNHEX(SHA1('$ip')) , " . $add_data. " )"; } else { $query = "INSERT INTO " . $this->s_createtableName . " ( tm, ip, ipraw, data ) VALUES ( unix_timestamp(NOW()) , UNHEX(SHA1('$ip')) , '$ip' , " . $add_data . " )"; } } $this->db->setQuery($query); $this->db->query(); if( $this->db->getErrorNum () ) { $e = $this->db->getErrorMsg(); //print_r( $e ); JError::raiseWarning( 500, $e ); return; } $this->isInserted = TRUE; // mit +1 kann u.U. all_visitors an der Stelle nicht uptodate // sein. Das ist in Anzeigen ok und spart eine Abfrage. // Bei den Verwendung der Trigger usw. soll die Zahl aber // immer korrekt sein // ein Trigger aktiv ? todo methode isAktivTrigger if ( ! $this->mail_sending == 0 // || other Trigger aktiv ) { // MAX ID - Sizeof All Users $query = "SELECT MAX( id ) AS max FROM " . $this->s_createtableName . ""; $this->db->setQuery($query); $row = $this->db->loadRow(); if( $this->db->getErrorNum () ) { $e = $this->db->getErrorMsg(); //print_r( $e ); JError::raiseWarning( 500, $e ); return; } //print_r($row ); $this->all_visitors = $row[0]; $this->all_visitors += $this->initialvalue ; } else { // must be $this->all_visitors += 1; } } // wenn eingeschalten Highest User Day in Stat if ( $this->show_highestVisitsDay > 0 ) { // $query = "INSERT INTO #__" . $this->MODULE . "_memo ( counter ) values ( '" . $this->s_createtableName_raw . "' ) ON DUPLICATE KEY UPDATE counter='" . $this->s_createtableName_raw . "' "; $this->db->setQuery($query); $this->db->query(); if( $this->db->getErrorNum () ) { $e = $this->db->getErrorMsg(); //print_r( $e ); JError::raiseWarning( 500, $e ); return; } // $lastUpdDiff = $this->highestVisitsDayRecalcSec; // immer unterschied if ( $this->highestVisitsDayRecalcSec > 0 ) { $query = "select TIMESTAMPDIFF( SECOND, lastMaxVisits, now() ) as ddiff FROM #__" . $this->MODULE . "_memo where counter = '" . $this->s_createtableName_raw . "'"; $this->db->setQuery($query); $lastUpdMaxVisits = $this->db->loadObject(); if( $this->db->getErrorNum () ) { $e = $this->db->getErrorMsg(); //print_r( $e ); JError::raiseWarning( 500, $e ); return; } if ( !empty($lastUpdMaxVisits) && !empty($lastUpdMaxVisits->ddiff) ) { $lastUpdDiff = $lastUpdMaxVisits->ddiff ; } } // echo $lastUpdDiff . " / " . $this->highestVisitsDayRecalcSec ; if ( $lastUpdDiff >= $this->highestVisitsDayRecalcSec ) { // recalc and insert maxVisits Value's $query = "SELECT date( from_unixtime( tm ) ) tag, tm tagut, count(*) c FROM " . $this->s_createtableName . " GROUP BY tag HAVING c = ( " . " SELECT MAX( inn.cc ) FROM ( SELECT date(from_unixtime( tm )) tag, count(*) cc FROM " . $this->s_createtableName . " GROUP BY tag ) AS inn )"; $this->db->setQuery($query); $selMaxVisDay = $this->db->loadObject(); if( $this->db->getErrorNum () ) { $e = $this->db->getErrorMsg(); //print_r( $e ); JError::raiseWarning( 500, $e ); return; } // es kann kein Tag ermittelt werden // echo " -:" . date( $this->date_day_fmt , $selMaxVisDay->tagut ) . " / " . $selMaxVisDay->c ; // in local Vars $this->maxVisitsOnDayArr = array(); if ( !empty($selMaxVisDay) ) { $this->maxVisitsOnDayArr[0] = $selMaxVisDay->c; $this->maxVisitsOnDayArr[1] = date( $this->date_day_fmt , $selMaxVisDay->tagut ); // $query = "UPDATE #__" . $this->MODULE . "_memo set" . " lastMaxVisits = now() ," . " valMaxVisitsDay = " . $selMaxVisDay->tagut . " ," . " valMaxVisits = " . $selMaxVisDay->c . " WHERE counter = '" . $this->s_createtableName_raw . "'"; $this->db->setQuery($query); $this->db->query(); if( $this->db->getErrorNum () ) { $e = $this->db->getErrorMsg(); //print_r( $e ); JError::raiseWarning( 500, $e ); return; } } else { $this->maxVisitsOnDayArr[0] = $this->all_visitors; $this->maxVisitsOnDayArr[1] = date( $this->date_day_fmt , time() ); // $query = "UPDATE #__" . $this->MODULE . "_memo set" . " lastMaxVisits = now() ," . " valMaxVisitsDay = " . time() . " ," . " valMaxVisits = " . $this->all_visitors . " WHERE counter = '" . $this->s_createtableName_raw . "'"; $this->db->setQuery($query); $this->db->query(); if( $this->db->getErrorNum () ) { $e = $this->db->getErrorMsg(); //print_r( $e ); JError::raiseWarning( 500, $e ); return; } } } } } } // else { // DEBUG // echo "Filtered : " . $is_filter; // } // soll etwas angezeigt werden das IPtoCountry braucht ? if ( $this->s_ipCflag || $this->s_ipCcode || $this->s_ipCountry ) { // create IPtoCountry Instance $this->ipToCountry = new IPtoCountry($params); /* TestCase $code = $ipToCountry->getISOAlphaZwei("85.233.46.218"); //$code = $ipToCountry->getISOAlphaZwei("127.0.0.1"); print_r($code); $imgTest .= $this->isoZweiToFlagImg( $code , JURI::base() . 'modules/' . // TODO_CO_MOD modVisitCounterHelper::MODULE $this->MODULE . '/images/flags/', 'mvc_flagImage' , 20, 13); print_r($imgTest); */ } // Users if ( $this->show_loggedinUserCount ) { // logged in users $this->sql_loggedinUserCount(); } if ( $this->show_loggedinUserNamens ) { // logged in user namens $this->sql_loggedinUserNamens(); } if ( $this->show_guestsCount ) { // guests $this->sql_guestsCount(); } if ( $this->show_registeredUserCount ) { // guests $this->sql_registeredUserCount(); } if ( $this->show_registeredUserTodayNames ) { // reg today user namens $this->sql_renderRegisteredTodayUserNamens(); } if ( $this->show_registeredUserCountToday ) { // guests $this->sql_registeredUserCountToday(); } if ( $this->show_highestVisitsDay ) { // max Users an Tag $this->sql_highestVisitsDay(); } // Paren von Pre and Post und ersetzen $this->replacePREANDPOSTREPLACES( $this->pretext , $params ); $this->replacePREANDPOSTREPLACES( $this->posttext , $params ); // Example // $content = '<div>'; // Show pre // $content .= $this->renderPRE(); // Show digit counter // $content .= $this->renderDigitCounter(); // show counts ( Table - PeopleImg, Text, Digit ) // $content .= $this->renderPeopleTable(); // Show Image // $content .= $this->renderStatistikImage(); // post // $content .= $this->renderPOST(); // $content = '</div>'; // return $content; /** So.. the Triggers fired before render the views ! All Outputs are in before the Counter View and ! before ! some Initialising. So you need to use the sql_X Methods ! An todo can be to check wheter is better to fire the Triggers after the Counter is rendered, so in the default.php. Then is needed a method to ask isInserted. */ // Triggers: Sending Mail / Trigger Script if ( $this->isInserted === TRUE ) { $this->invokeMailSend(); $this->invokeExternalTriggerScript(); } } /** * */ private function sql_highestVisitsDay(){ if ( isset($this->maxVisitsOnDayArr) ) { return $this->maxVisitsOnDayArr; } $query = "select valMaxVisits val, valMaxVisitsDay day FROM #__" . $this->MODULE . "_memo where counter = '" . $this->s_createtableName_raw . "'"; $this->db->setQuery($query); $selMaxVisDay = $this->db->loadObject(); if( $this->db->getErrorNum () ) { $e = $this->db->getErrorMsg(); //print_r( $e ); JError::raiseWarning( 500, $e ); return null; } $this->maxVisitsOnDayArr = array(); $this->maxVisitsOnDayArr[0] = ( $selMaxVisDay->val === NULL ? $this->all_visitors : $selMaxVisDay->val ); $this->maxVisitsOnDayArr[1] = ( $selMaxVisDay->day === NULL ? date( $this->date_day_fmt , time() ) : date( $this->date_day_fmt , $selMaxVisDay->day ) ); return $this->maxVisitsOnDayArr; } /** * */ private function sql_today_visitors(){ if ( isset($this->today_visitors) ) { return $this->today_visitors; } $query = "SELECT COUNT(*) FROM " . $this->s_createtableName . " WHERE tm BETWEEN UNIX_TIMESTAMP(DATE(NOW())) AND UNIX_TIMESTAMP(DATE(NOW()) + INTERVAL 1 DAY)"; // " WHERE (YEAR(NOW())= YEAR(FROM_UNIXTIME(tm))) AND (DAYOFYEAR(NOW())=DAYOFYEAR(FROM_UNIXTIME(tm)))" ; $this->db->setQuery($query); $this->today_visitors = $this->db->loadResult(); return $this->today_visitors; } /** * */ private function sql_yesterday_visitors(){ if ( isset($this->yesterday_visitors) ) { return $this->yesterday_visitors; } $query = "SELECT COUNT(*) FROM " . $this->s_createtableName . " WHERE tm BETWEEN UNIX_TIMESTAMP(DATE(NOW() - INTERVAL 1 DAY)) AND UNIX_TIMESTAMP(DATE(NOW()))" ; // " WHERE (YEAR(NOW())= YEAR(FROM_UNIXTIME(tm))) AND (DAYOFYEAR(FROM_UNIXTIME(tm))=DAYOFYEAR(now())-1)" ; $this->db->setQuery($query); $this->yesterday_visitors = $this->db->loadResult(); return $this->yesterday_visitors; } /** * */ private function sql_week_visitors(){ if ( isset($this->week_visitors) ) { return $this->week_visitors; } /* $week_mode = $this->getWeekMode(); if ( $week_mode == -1 ) { // Saturday .. special because no MySQL Mode for Saturday $query = "SELECT COUNT(*) FROM " . $this->s_createtableName . " WHERE ( YEAR(NOW())= YEAR(FROM_UNIXTIME(tm)) ) AND ( WEEK( DATE_ADD(NOW(), INTERVAL 1 DAY) , 6 ) = WEEK( DATE_ADD(FROM_UNIXTIME(tm), INTERVAL 1 DAY), 6))"; } else { // Monday and Sonnday direkt with MySQL Mode $query = "SELECT COUNT(*) FROM " . $this->s_createtableName . " WHERE (YEAR(NOW())= YEAR(FROM_UNIXTIME(tm))) AND (WEEK(NOW()," . $week_mode . ")=WEEK(FROM_UNIXTIME(tm)," . $week_mode . "))" ; } */ $ft = array(); $fmt = "d.m.Y"; if ( $this->s_week_startday == 0 ) { // SUNDAY $ft = $this->getWeekFromTo( time() , 'Sunday' , $fmt) ; } else if ( $this->s_week_startday == 2 ) { // SATURDAY $ft = $this->getWeekFromTo( time() , 'Saturday' , $fmt) ; } else { // MONDAY $ft = $this->getWeekFromTo( time() , 'Monday' , $fmt) ; } // $ft["from"] . ' - ' . $ft["to"]; $query = "SELECT COUNT(*) FROM " . $this->s_createtableName . " WHERE tm BETWEEN " . strtotime($ft["from"]) . " AND " . strtotime( '+1 day' . $ft["to"]) ; $this->db->setQuery($query); $this->week_visitors = $this->db->loadResult(); return $this->week_visitors; } /** * */ private function sql_month_visitors(){ if ( isset($this->month_visitors) ) { return $this->month_visitors; } $query = "SELECT COUNT(*) FROM " . $this->s_createtableName . ' WHERE tm BETWEEN UNIX_TIMESTAMP(DATE_FORMAT(NOW(), "%Y-%m-01")) AND UNIX_TIMESTAMP(DATE_FORMAT(NOW(), "%Y-%m-01") + INTERVAL 1 MONTH)' ; // " WHERE (YEAR(NOW())=YEAR(FROM_UNIXTIME(tm))) AND (MONTH(NOW())=MONTH(FROM_UNIXTIME(tm)))" ; $this->db->setQuery($query); $this->month_visitors = $this->db->loadResult(); return $this->month_visitors; } /** * */ private function sql_min_Date( $format = "%d.%m.%Y" ){ if ( isset($this->min_Date) ) { return $this->min_Date; } $query = "SELECT DATE_FORMAT( FROM_UNIXTIME( MIN(tm) ) , '" . $format . "' ) FROM " . $this->s_createtableName ; $this->db->setQuery($query); $this->min_Date = $this->db->loadResult(); return $this->min_Date; } /** * */ private function sql_loggedinUserCount(){ if ( isset($this->loggedinUserCount) ) { return $this->loggedinUserCount; } // logged in users // $query = 'SELECT COUNT( session_id ) FROM #__session WHERE userid != 0'; // nur noch eindeutige User z�hlen, Doppelanmeldungen etc ignoroeren $query = 'SELECT COUNT( distinct( userid ) ) FROM #__session WHERE userid != 0'; if ( $this->show_UsersCountOnlyFrontend ) { $query = $query . ' and client_id = 0' ; } // check Inaktive Time if ( $this->userInactivTime > 0 ) { $query = $query . ' and (UNIX_TIMESTAMP(now()) - time ) <= ' . $this->userInactivTime ; } $this->db->setQuery($query); $this->loggedinUserCount = intval( $this->db->loadResult() ); return $this->loggedinUserCount; } /** * Array ( * [0] => Array ( [id] => id [uname] => username [name] => name ) * ... * ) */ private function sql_loggedinUserNamens(){ if ( isset($this->loggedinUserNamens) ) { return $this->loggedinUserNamens; } if ( isset($this->loggedinUserCount) && $this->loggedinUserCount < 1 ) { return NULL; } // logged in user Namens $query = "SELECT s.userid id, u.username uname , u.name name FROM #__session s " . "INNER JOIN #__users u ON s.userid = u.id " ; //:OnlyJ16 need only this groups if ( !empty( $this->onlyGroupsN_Flag ) ) { if ( empty($this->onlyGroupsN) ) { $this->onlyGroupsN = array(); } $query = $query . ' INNER JOIN #__user_usergroup_map m ON s.userid = m.user_id ' . ' AND m.group_id in (' . implode( "," , $this->onlyGroupsN ) . ') '; } // $query = $query . ' WHERE userid != 0'; if ( $this->show_UsersCountOnlyFrontend ) { $query = $query . ' and client_id = 0' ; } // check Inaktive Time if ( $this->userInactivTime > 0 ) { $query = $query . ' and (UNIX_TIMESTAMP(now()) - time ) <= ' . $this->userInactivTime ; } // unique ( above with distinct ) $query = $query . ' GROUP BY id ORDER BY id' ; $this->db->setQuery($query); // as array $this->loggedinUserNamens = $this->db->loadAssocList(); return $this->loggedinUserNamens; } /** * Array ( * [0] => Array ( [id] => id [uname] => username [name] => name ) * ... * ) */ private function sql_renderRegisteredTodayUserNamens(){ if ( isset($this->registeredUserTodayNames) ) { return $this->registeredUserTodayNames; } if ( isset($this->registeredUserCountToday) && $this->registeredUserCountToday < 1 ) { return NULL; } // user Namens $query = "SELECT DISTINCT(id) id, username uname, name name FROM #__users u "; // //:OnlyJ16 need only this groups if ( !empty( $this->onlyGroupsN_Flag ) ) { if ( empty($this->onlyGroupsN) ) { $this->onlyGroupsN = array(); } $query = $query . ' INNER JOIN #__user_usergroup_map m ON u.id = m.user_id ' . ' AND m.group_id in (' . implode( "," , $this->onlyGroupsN ) . ') '; } $query = $query . " WHERE block = 0 and ( DATE( registerDate ) = CURDATE() )"; /* if ( $this->show_UsersCountOnlyFrontend ) { $query = $query . } */ $query = $query . 'ORDER BY id' ; $this->db->setQuery($query); // as array $this->registeredUserTodayNames = $this->db->loadAssocList(); return $this->registeredUserTodayNames; } /** * */ private function sql_guestsCount(){ if ( isset($this->guestsCount) ) { return $this->guestsCount; } // logged in users $query = 'SELECT COUNT(*) FROM #__session WHERE guest = 1'; if ( $this->show_UsersCountOnlyFrontend == 1 ) { $query = $query . ' and client_id = 0' ; } // check Inaktive Time if ( $this->guestInactivTime > 0 ) { $query = $query . ' and (UNIX_TIMESTAMP(now()) - time ) <= ' . $this->guestInactivTime ; } $this->db->setQuery($query); $this->guestsCount = intval( $this->db->loadResult() ); /** * TODO :: Find a way to parse Session.data an do a new Parameter for * Filter Bots ( use also FilterUserAgent Parameter ) **/ return $this->guestsCount; } /** * */ private function sql_registeredUserCount(){ if ( isset($this->registeredUserCount) ) { return $this->registeredUserCount; } // users $query = 'SELECT COUNT(*) FROM #__users WHERE block = 0'; /* TODO keine SuperAdmins ??? if ( $this->show_UsersCountOnlyFrontend ) { $query = $query . ' and gid != 25' ; } */ $this->db->setQuery($query); $this->registeredUserCount = intval( $this->db->loadResult() ); return $this->registeredUserCount; } /** * */ private function sql_registeredUserCountToday(){ if ( isset($this->registeredUserCountToday) ) { return $this->registeredUserCountToday; } // users $query = 'SELECT COUNT(*) FROM #__users WHERE block = 0 and ( DATE( registerDate ) = CURDATE() )'; /* TODO keine SuperAdmins ??? if ( $this->show_UsersCountOnlyFrontend ) { $query = $query . ' and gid != 25' ; } */ $this->db->setQuery($query); $this->registeredUserCountToday = intval( $this->db->loadResult() ); return $this->registeredUserCountToday; } /** * ersetzt den String mit den PRE_POST_REPLACES */ private function replacePREANDPOSTREPLACES( &$replacing, $params ){ if ( !isset($replacing) || empty($replacing) ) { // do nothing return ; } foreach ( $this->PRE_AND_POST_REPLACES as $value ) { $browser = NULL; $phpbrowser = NULL; $contains = strpos($replacing , $value); if ( $contains !== false ) { if ( $value == '$today$' ) { $replacing = str_replace( $value, "" . date( $this->date_day_fmt ) , $replacing ); } else if ( $value == '$countAll$' ) { $replacing = str_replace( $value, "" . $this->all_visitors, $replacing ); } else if ( $value == '$countToday$' ) { $replacing = str_replace( $value, "" . $this->sql_today_visitors(), $replacing ); } else if ( $value == '$countYesterday$' ) { $replacing = str_replace( $value, "" . $this->sql_yesterday_visitors(), $replacing ); } else if ( $value == '$countWeek$' ) { $replacing = str_replace( $value, "" . $this->sql_week_visitors(), $replacing ); } else if ( $value == '$countMonth$' ) { $replacing = str_replace( $value, "" . $this->sql_month_visitors(), $replacing ); } else if ( $value == '$minDate$' ) { $replacing = str_replace( $value, "" . date( $this->date_day_fmt, strtotime( $this->sql_min_Date( "%d.%m.%Y" ) ) ), $replacing ); } else if ( $value == '$callerIP$' ) { $replacing = str_replace( $value, "" . $this->callerIP, $replacing ); } else if ( $value == '$callerCountryCode$' ) { if ( !isset($this->ipToCountry) ) { $this->ipToCountry = new IPtoCountry($params); } $replacing = str_replace( $value, "" . $this->ipToCountry->getISOAlphaZwei($this->callerIP), $replacing ); } else if ( $value == '$callerCountry$' ) { if ( !isset($this->ipToCountry) ) { $this->ipToCountry = new IPtoCountry($params); } $replacing = str_replace( $value, "" . $this->ipToCountry->getCountry($this->callerIP), $replacing ); } else if ( $value == '$callerCountryFlag$' ) { if ( !isset($this->ipToCountry) ) { $this->ipToCountry = new IPtoCountry($params); } $code = $this->ipToCountry->getISOAlphaZwei($this->callerIP); // make an empty check $img = $this->isoZweiToFlagImg( $code, // JURI::base() . 'modules/' . $this->baseurl . 'modules/' . // TODO_CO_MOD modVisitCounterHelper::MODULE $this->MODULE . '/images/flags/', 'mvc_ipflagimg' , $this->s_ipCflag_width, $this->s_ipCflag_height ); $replacing = str_replace( $value, $img, $replacing ); } else if ( $value == '$userAgent$' ) { $userAgent = ""; if ( isset( $_SERVER['HTTP_USER_AGENT'] ) ){ $userAgent = $_SERVER['HTTP_USER_AGENT']; if ( strlen($userAgent) > 1024 ) { $userAgent = substr( $userAgent, 0, 1023 ); } } $replacing = str_replace( $value, "" . $userAgent, $replacing ); } else if ( $value == '$browser$' ) { // beachte php_browscap.ini // print_r( get_browser(NULL,true) ) ; if( empty($browser) ){ $browser = JBrowser::getInstance() ; //$browser = get_browser(); } $replacing = str_replace( $value, $browser->getBrowser(), //"" . $browser->browser, $replacing ); } else if ( $value == '$versionBrowser$' ) { // beachte php_browscap.ini if( empty($browser) ){ $browser = JBrowser::getInstance() ; //$browser = get_browser(); } $replacing = str_replace( $value, $browser->getVersion(), //"" . $browser->version, $replacing ); } else if ( $value == '$platformBrowser$' ) { // beachte php_browscap.ini if( empty($browser) ){ $browser = JBrowser::getInstance() ; //$browser = get_browser(); } $replacing = str_replace( $value, $browser->getPlatform(), // "" . $browser->platform, $replacing ); } else if ( $value == '$phpbrowser$' ) { // beachte php_browscap.ini // print_r( get_browser(NULL,true) ) ; if( empty($phpbrowser) ){ //$browser = JBrowser::getInstance() ; $phpbrowser = get_browser(); } $replacing = str_replace( $value, //$browser->getBrowser(), "" . $phpbrowser->browser, $replacing ); } else if ( $value == '$phpversionBrowser$' ) { // beachte php_browscap.ini if( empty($phpbrowser) ){ //$browser = JBrowser::getInstance() ; $phpbrowser = get_browser(); } $replacing = str_replace( $value, //$browser->getVersion(), "" . $phpbrowser->version, $replacing ); } else if ( $value == '$phpplatformBrowser$' ) { // beachte php_browscap.ini if( empty($phpbrowser) ){ //$browser = JBrowser::getInstance() ; $phpbrowser = get_browser(); } $replacing = str_replace( $value, //$browser->getPlatform(), "" . $phpbrowser->platform, $replacing ); } else if ( $value == '$loggedIn$' ) { $replacing = str_replace( $value, "" . $this->sql_loggedinUserCount(), $replacing ); } else if ( $value == '$guests$' ) { $replacing = str_replace( $value, "" . $this->sql_guestsCount(), $replacing ); } else if ( $value == '$regUsers$' ) { $replacing = str_replace( $value, "" . $this->sql_registeredUserCount(), $replacing ); } else if ( $value == '$regUsersToday$' ) { $replacing = str_replace( $value, "" . $this->sql_registeredUserCountToday(), $replacing ); } else if ( $value == '$visitors$' ) { $replacing = str_replace( $value, "" . ( intval($this->sql_loggedinUserCount()) + intval($this->sql_guestsCount()) ) , $replacing ); } } } } /** * liefert CallerIP Abh�ngig aus REMOTE_ADDR oder aus HTTP_X_FORWARDED_FOR * * @param bool $preferForwarder Prefer HTTP_X_FORWARDED_FOR * @return IP as string **/ private function parseCallerIP( $preferForwarder = FALSE ){ // $ip = ""; // from HTTP_X_FORWARDED_FOR if ( $preferForwarder ) { if( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) { $ip = @trim( @end( @explode( ",", $_SERVER['HTTP_X_FORWARDED_FOR'] ))); } } // check and/or get if( empty($ip) ) { $ip = $_SERVER['REMOTE_ADDR']; } return $ip; } /** * Sending EMail Depend on Configuration */ private function invokeMailSend() { // on/off if ( $this->mail_sending == 0 ) { return ; } // alle x if ( ($this->all_visitors % $this->mail_rate) !== 0 ) { // Kein Senden return; } // Parse Users $arr_userids = explode( ";", $this->mail_userIds ); if( empty( $arr_userids ) ){ return; } // jimport( 'joomla.mail.mail' ); /* To Admin // Application Referenz laden $app = JFactory::getApplication(); // Empf�nger setzen $mail->addRecipient( $app->getCfg( 'mailfrom' ) ); */ // Subject $subject = $this->MODULE . ' - ' . $this->s_createtableName_raw; // Parse Body $body_in = $this->mail_body ; $body_in = str_replace( '$a', $this->all_visitors , $body_in ); $body_in = str_replace( '$d', date( $this->mail_datetime_fmt, time() ), $body_in ); // Mails an User for ( $i=0; $i < count($arr_userids) ; $i++){ // JMail Instanz laden $mail = JFactory::getMailer(); if( empty( $mail ) ){ // TODO Warnung ? return; } // User Mail if User ok $user = JFactory::getUser( $arr_userids[$i] ); if ( empty($user) || empty($user->email) || $user->block > 0 ) { continue; } // $mail->addRecipient( $user->email ); // Den Betreff setzen $mail->setSubject( $subject ); // Den Mailtext setzen $mail->setBody( $body_in ); // Email(s) absenden - alle zusammen $mail->Send(); /* if ( $mail->Send() !== TRUE ) { // TODO catch JError ?? // echo "Email konnte nicht versendet werden."; } */ } } /** * Invoke Script for Trigger */ private function invokeExternalTriggerScript() { // on/off if ( $this->trigger_script == 0 || empty( $this->trigger_script_name) ) { return ; } // alle x if ( ($this->all_visitors % $this->trigger_script_rate) !== 0 ) { // Kein ausf�hren return; } // trigger_script_name // we search only and only the script here jimport('joomla.filesystem.file'); $filename = JFile::makeSafe( $this->trigger_script_name ); require_once ( dirname(__FILE__) . DIRECTORY_SEPARATOR . 'trigger' . DIRECTORY_SEPARATOR . $filename . '.php' ); } /** * Read Date and Store ImageDiagramm */ private function renderStatImage($db, $imagePathFS, $days , $detailed ) { // Anzahl Darzustellender Tage if ($days <= 0) { $query = "SELECT DATE(FROM_UNIXTIME(tm)) AS day, COUNT(*) AS c FROM " . $this->s_createtableName . " GROUP BY DATE(FROM_UNIXTIME(tm))"; } else { // dies sucht 10 Eintr�ge ( unabh�ngig ob dies wirklich 10Tage sind ) // $query = "select day, c from (SELECT DATE(FROM_UNIXTIME(tm)) AS day,COUNT(*) AS c FROM " . $this->s_createtableName . " GROUP BY DATE(FROM_UNIXTIME(tm)) ORDER BY day DESC LIMIT 0," . $days . ") AS o order by day"; // es wurder auf echte Tage ver�ndert, dies bringt auch eine bessere Nutzung der DB $query = "select day, c from ( " . " SELECT DATE(FROM_UNIXTIME(tm)) AS day,COUNT(*) AS c FROM " . $this->s_createtableName . " WHERE tm BETWEEN UNIX_TIMESTAMP(DATE(NOW() - INTERVAL " . $days . " DAY)) AND UNIX_TIMESTAMP(DATE(NOW()) + INTERVAL 1 DAY) " . " GROUP BY DATE(FROM_UNIXTIME(tm)) ORDER BY day DESC LIMIT 0," . $days . ") AS o order by day"; } $db->setQuery($query); $rows = $db->loadObjectList(); if( $this->db->getErrorNum () ) { $e = $this->db->getErrorMsg(); //print_r( $e ); JError::raiseWarning( 500, $e ); return; } // �berf�hren in DAtenarray und fehlende Tag(e) adden $gr_val = array(); $lrow = ''; foreach ($rows as $row) { if ($lrow != '') { // echo $lrow . "/" . $row->day . " : " . $this->datediff( $lrow, $row->day ) . "<br/>"; $dateDiff = $this->datediff($lrow, $row->day); if ($dateDiff > 1) { for($i = 1 ; $i < $dateDiff ; $i++) { // F�ge fehlende Daten als Dummy zu // TODO richtig das Datum berechnen day = $lrow + $i $gr_val[ $lrow . '_' . $i ] = 0; } } } $gr_val[$row->day] = $row->c; $lrow = $row->day; } $this->create_image($imagePathFS, $this->image_sizeX, $this->image_sizeY, $gr_val, $this->image_lineColor , $this->image_dia_bgColor, $this->image_dia_RandColor, $detailed , $this->image_dia_MainbgColor ); } /** * store an Image Diagramm */ private function create_image( $imagePath, $size_x , $size_y , $ar , $lineColor, $dia_bgColor, $dia_RandColor , $detailsImage = false , $main_bgColor = '#FFFFFF' ) { // $ar_values = array_values($ar); $ar_keys = array_keys($ar); // TODO COLORS �bergeben // $bgColor = array(255, 255, 255); // now i comes from Hex-Code (WebColors) $main_bgColor = str_replace( "#", "" , $main_bgColor ); $bgColor = array( base_convert(substr($main_bgColor, 0, 2), 16, 10), base_convert(substr($main_bgColor, 2, 2), 16, 10), base_convert(substr($main_bgColor, 4, 2), 16, 10) ); $line_width = 1.5; // Wertebereich $valuesize_x_from = 0; $valuesize_x_to = count($ar_values) ; // days $valuesize_y_from = 0; if ($valuesize_x_to > 0) { $valuesize_y_to = max($ar_values) * 1.1 ; // hits } else { $valuesize_y_to = 1; } // nicht auf 0 ! Default 0.1 ! $left = 0.1 ; $right = 0.1 ; $top = 0.1 ; $bottom = 0.1 ; if ( $detailsImage ) { $left = 30 ; $right = 0.1 ; $top = 20 ; $bottom = 20 ; } // $D = new Diagram(); $D->Img = @ImageCreate($size_x, $size_y) or JError::raiseWarning( 0, "Cannot create a new GD image." ); //background color ImageColorAllocate($D->Img, $bgColor[0], $bgColor[1], $bgColor[2]); // //$D->SetFrame( $rand, $rand, $size_x - $rand, $size_y - $rand); $D->SetFrame( $left, $top, $size_x - $right, $size_y - $bottom); $D->SetBorder($valuesize_x_from, $valuesize_x_to, $valuesize_y_from, $valuesize_y_to); $D->Font=1; $D->XScale = 0; $D->YScale = 0; if ( $detailsImage ) { $D->XScale = 1; $D->YScale = 1; $D->SetText( 0, 0, 'Start : ' . $ar_keys[0] ); } $D->Draw($dia_bgColor, $dia_RandColor, false); // skip steps X if (($valuesize_x_to - $valuesize_x_from) > $size_x) { $stepsX = floor(($valuesize_x_to - $valuesize_x_from) / $size_x); } else { $stepsX = 1 ; } // skip steps X if (($valuesize_y_to - $valuesize_y_from) > $size_y) { $stepsY = floor(($valuesize_y_to - $valuesize_y_from) / $size_y); } else { $stepsY = 1 ; } $valuesize_y_to = $valuesize_y_to / $stepsY; // echo $stepsX . '/' . $stepsY ; // erstmal nur die Values $T0 = null; $T1 = null; for ($t = 0; $t < $valuesize_x_to; $t += $stepsX) { $T0 = $T1; // $K0 = $K1; $T1 = $ar_values[$t]; $K1 = $ar_keys[$t]; $D->Line($D->ScreenX($t), $D->ScreenY($T0), $D->ScreenX($t + 1), $D->ScreenY($T1), $lineColor, $line_width, "", ""); // need $ar_keys above ! // echo "CI -> " . $ar_keys[$t] . ":" . $T1 . "<br />" ; /* ImageMap "alert(\"".$ar_keys[$t]." -> ".$T1."\")"); $D->Line( $D->ScreenX($t), $D->ScreenY($T0), $D->ScreenX($t + 1), $D->ScreenY($T1), "#000000", 1, "", "alert(\"".round($T0,1)." -> ".round($T1,1)."\")"); $D->Box($D->ScreenX($t), $D->ScreenY(0), $D->ScreenX($t + 1), $D->ScreenY($T1), "#000000", "", "#00ff00", 0, "#0000ff"); before Destroy $imageUri = JURI::base() . $this->image_path; $content = '<img src="' . $imageUri . '" usemap="#map1"></img>'; $content .= '<map name="map1">' . $D->ImgMapData . '</map>'; return $content; */ //imagestring( $D->Img, 2 , $D->ScreenX($t + 1), $D->ScreenY($T1) , $T1 ,2 ); } // Save $this->storeImageByType($D->Img, $imagePath); // Free up resources ImageDestroy($D->Img); } /** * Render Usage Table Row * * @param mixed $a1 Image Name * @param mixed $a2 Description Text * @param mixed $a3 Number * @param boolean $show_UsageImgs Show Image or Not * @param mixed rowTitle */ private function spaceer($a1, $a2, $a3, $show_UsageImgs, $rowTitle ) { $ret = '<tr align="left" title="'.$rowTitle.'">'; if ( $show_UsageImgs != -1 ) { $ret .= '<td><img class="mvc_peopleImg' . $this->mdclsf . '" src="modules/' . // TODO_CO_MOD modVisitCounterHelper::MODULE $this->MODULE . '/images/tbl/' . $show_UsageImgs . '/'. $a1 . '" alt="' . $a2 . '" title="' . $a2 . '"/></td>'; } $ret .= '<td>' . $a2 . '</td>'; $ret .= '<td align="right">' . $a3 . '</td></tr>'; return $ret; } /** * numToImg() * eine Zahl zu einem HTML-Image String wandeln * * @param mixed $number zu wandelnde Zahl * @param mixed $size_min optional mindest Anzahl von Zahlen * @param mixed $size_max optional maximale Anzahl Zahlen * @param mixed $dir optional Pfad-Prefix * @param mixed $warn_picture optional Bild das bei �berlauf angezeigt wird * @param mixed $styleClass CSS Style * @return string z.B. <img src="images/4.gif"/><img src="images/7.gif"/> */ private function numToImg($number , $size_min , $size_max , $dir , $warn_picture, $styleClass ) { // maximal Gr��e setzen if (empty($size_max)) { $size_max = strlen($number); } // minimale Gr��e setzen if (empty($size_min)) { $size_min = 0; } // Slash anh�ngen if (! empty($dir) AND $dir[strlen($dir)-1] != '/') { $dir .= '/' ; } // Warnung anzeigen wenn �berlauf ( size_max ) ? $erg = ''; if (! empty($warn_picture)) { $number_lenght = strlen($number); if ($number_lenght > $size_max) { // Warnungsbild $erg = "<img class=\"{$styleClass}" . $this->mdclsf . "\" src=\"{$dir}{$warn_picture}\" alt=\"Counter-Overflow\" title=\"Counter-Overflow\"/>" ; } else { $erg = "" ; } } // auff�llen mit Nullen und auf maximale L�nge $number = substr(str_pad(trim($number) , $size_min , '0' , STR_PAD_LEFT) , 0 , $size_max) ; if ( is_string($number) ) { $number = strtoupper($number); } // String zu Array $numbers = str_split($number); // f�r jede Zahl ein Image Object foreach($numbers as $number) { $erg .= "<img class=\"{$styleClass}" . $this->mdclsf . "\" src=\"{$dir}{$number}.gif\" alt=\"{$number}\" title=\"{$number}\"/>" ; } return $erg ; } /** * isoZweiToFlagImg() * einen ISO2 Country Code zu einem HTML-Image String wandeln * * UNKNOWN Image if ISO Code empty * * @param mixed $isoZweiCode ISO Code z.B. DE * @param mixed $dir Pfad-Prefix * @param mixed $styleClass CSS Style * @param mixed $width Image Width * @param mixed $height Image Height * @return string z.B. <img src="images/flags/flag_DE.gif"/> */ private function isoZweiToFlagImg( $isoZweiCode , $dir, $styleClass, $width, $height ) { // maximal Gr��e setzen if (empty($width)) { $width = 20; } // minimale Gr��e setzen if (empty($height)) { $height = 13; } // if (empty($isoZweiCode)) { $isoZweiCode = "UNKNOWN"; } // Slash anh�ngen if (! empty($dir) AND $dir[strlen($dir)-1] != '/') { $dir .= '/' ; } // f�r jede Zahl ein Image Object $erg = "<img class=\"{$styleClass}" . $this->mdclsf . "\" src=\"{$dir}flag_{$isoZweiCode}.gif\" alt=\"{$isoZweiCode}\" title=\"{$isoZweiCode}\" width=\"{$width}\" height=\"{$height}\"/>" ; return $erg ; } /** * Absolute Wert von Tagesunterschied */ private function datediff($dateF , $dateT) { // English Format '2008-05-21' $datefrom = strtotime($dateF); $dateto = strtotime($dateT); $difference = $dateto - $datefrom; // Difference in seconds $datediff = floor($difference / 86400); return abs($datediff); } /** * Save Image by FileType */ private function storeImageByType($image , $filename) { $haystack = $filename; $needle = '.' ; $strTmp = strrchr($haystack, $needle); $fileType = substr($strTmp, strlen($needle), strlen($strTmp) - strlen($needle)); $image_type = -1; switch ($fileType) { case 'gif': case 'GIF': imagegif($image , $filename); break; case 'jpg': case 'JPG': case 'jpeg': case 'JPEG': imagejpeg($image , $filename); break; case 'png': case 'PNG': imagepng($image , $filename); break; default: echo "Unknown ImageType :" . $fileType; break; } return $image_type; } /** * modVisitCounterHelper::getWeekMode() * * @return WEEK Mode * private function getWeekMode(){ switch( $this->s_week_startday ){ case 0: // Sunday return 6; case 1: // Monday return 3; case 2: // Saturday ! it's NOT a MySQL Mode !! return -1; default: return 3; } } */ /** * Return an Array with From and To Week-Range for a given Date * by an Offset ( Week_Start ) * * @param $current_date = Date * @param $dayOffset = Week Startday ( Sunday,Monday,... ) * @param $current_date = Format * @return an Array with from an to as Formated Strings * */ private function getWeekFromTo( $current_date, $dayOffset = 'Sunday', $date_day_fmt = "d.m.Y" ){ // now if ( !isset($current_date) ){ $current_date = time(); } // Monday, Sunday... $dayStr = date('l' , $current_date ); // is the start self $title_day_str_week_s_t = $current_date ; if ( $dayStr != $dayOffset ){ // compute start Time // $title_day_str_week_s_t = strtotime( 'last ' . $dayOffset , $current_date ); // siehe php4 win problem $title_day_str_week_s_t = strtotime( '-1 ' . $dayOffset , $current_date ); } // formated startAt String $title_day_str_week_s = date( $date_day_fmt, $title_day_str_week_s_t ); // formated endAt String ( startAt +6 days ) $title_day_str_week_e = date( $date_day_fmt, strtotime( '+6 days' , $title_day_str_week_s_t ) ) ; // fill the erg and ret return array ( "from" => $title_day_str_week_s , "to" => $title_day_str_week_e ); } } if (!function_exists('str_split')) { function str_split($str, $split_lengt = 1) { $cnt = strlen($str); for ($i = 0;$i < $cnt;$i += $split_lengt) $rslt[] = substr($str, $i, $split_lengt); return $rslt; } } ?>
/home/megadansyp/www/eace8/../modules/mod_banners/../mod_vvisit_counter/helper.php