86383bb510
add: pChart lib - no more usage of google api. There has to be the wp-content/cache writable for images add: test-folder for later use new: class agents, new isBot-functionality within this class, old function is deprecated, uses an ini-file with botnames
419 Zeilen
Kein EOL
15 KiB
PHP
419 Zeilen
Kein EOL
15 KiB
PHP
<?php
|
||
/**
|
||
* File: functions.semr.php
|
||
*
|
||
* @package SemmelstatzR
|
||
* @version $Rev$
|
||
* @since 1.0.0 Beta
|
||
* @author SEM-Team
|
||
* @copyright (c)2011 SEM-Team
|
||
* @link http://sourceforge.net/projects/semmelstatz/
|
||
* @license http://www.gnu.org/licenses/gpl-3.0.html
|
||
*
|
||
* 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/>.
|
||
*
|
||
* $Id$
|
||
*
|
||
*/
|
||
/**
|
||
* based upon semmelstatz
|
||
* Copyright (c) 2005-2009 Andreas 'Redunzl' Mueller (redunzl@gmx.de)
|
||
*
|
||
* @license http://www.gnu.org/licenses/gpl-2.0.html
|
||
* This program is free software; you can redistribute it and/or modify
|
||
* it under the terms of the GNU General Public License (version 2) as
|
||
* published by the Free Software Foundation.
|
||
*
|
||
* 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.,
|
||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||
*/
|
||
### Encodierung der IP-Adresse durch simple arithmetische Operation
|
||
function sem_encodeIP($ip) {
|
||
$ip_parts = split("[.]", $ip);
|
||
$new_ip = ($ip_parts[0]+700) . "." . ($ip_parts[1]*2) . "." . ($ip_parts[2]+600) . "." . ($ip_parts[3]*3);
|
||
return $new_ip;
|
||
}
|
||
|
||
### Decodierung der IP-Adresse durch simple arithmetische Operation
|
||
function sem_decodeIP($ip) {
|
||
$ip_parts = split("[.]", $ip);
|
||
$new_ip = ($ip_parts[0]-700) . "." . ($ip_parts[1] / 2) . "." . ($ip_parts[2]-600) . "." . ($ip_parts[3]/3);
|
||
return $new_ip;
|
||
}
|
||
|
||
### Ist IP-Adresse codiert?
|
||
function sem_checkIfIPisEncoded($ip) {
|
||
$ip_parts = split("[.]", $ip);
|
||
if($ip_parts[0]>700) {
|
||
return true;
|
||
}
|
||
else {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
### Auslesen der h<>chsten Post-ID
|
||
function sem_getMaxPostID() {
|
||
global $wpdb;
|
||
$maxpostid = $wpdb->get_var("SELECT MAX(ID) FROM ".$wpdb->posts." LIMIT 0,1");
|
||
return $maxpostid; //Ganzzahl
|
||
}
|
||
|
||
### Auslesen des User- bzw. Kommentarautornamen
|
||
function sem_getUsername() {
|
||
global $user_ID, $user_login, $isAdmin;
|
||
|
||
get_currentuserinfo();
|
||
|
||
if($user_ID > 0) {
|
||
$useronline = $user_login;
|
||
|
||
if(current_user_can('manage_options')) {
|
||
$isAdmin = 1;
|
||
}
|
||
else {
|
||
$isAdmin = 0;
|
||
}
|
||
}
|
||
elseif(isset($_COOKIE["comment_author_".COOKIEHASH])) {
|
||
$useronline = trim($_COOKIE["comment_author_".COOKIEHASH]);
|
||
$isAdmin = -1;
|
||
}
|
||
else {
|
||
$useronline = "Gast";
|
||
$isAdmin = -1;
|
||
}
|
||
return $useronline;
|
||
}
|
||
|
||
/**
|
||
* Check if agent is a bot
|
||
*
|
||
* @deprecated use Agents-object in the future
|
||
*
|
||
* @param string $user_agent
|
||
* @return boolean
|
||
*/
|
||
function sem_AreYouBot($user_agent) {
|
||
require_once 'class.agents.php';
|
||
$oCheckAgent = new Agents($user_agent);
|
||
return $oCheckAgent->isBot();
|
||
}
|
||
|
||
### Referer nach Suchmaschinen-Queries und interner Suche pr<70>fen und Suchstring extrahieren
|
||
function sem_getKeyword($referer) {
|
||
if(empty($referer)) return false;
|
||
$homehost = '%'.(substr($_SERVER['SERVER_NAME'],0,4) == 'www.')?
|
||
substr($_SERVER['SERVER_NAME'],4) . '%':
|
||
$_SERVER['SERVER_NAME'] . '%';
|
||
|
||
$keyword = parse_url($referer);
|
||
if(!isset($keyword['host']) || !isset($keyword['query'])) return false;
|
||
|
||
if (preg_match("/google\./i", $keyword["host"])) {
|
||
if (preg_match("/imgurl/i", $keyword["query"])) {
|
||
parse_str($keyword["query"],$q);
|
||
$keyword = substr($q["prev"],10);
|
||
}
|
||
else if (preg_match("/translate\./i", $keyword["host"])) {
|
||
parse_str($keyword["query"],$q);
|
||
$keyword = $q["q"];
|
||
}
|
||
else {
|
||
parse_str($keyword["query"],$q);
|
||
$keyword = $q["q"];
|
||
}
|
||
if($keyword == "") return; return "Google: ".$keyword;
|
||
}
|
||
elseif (preg_match("/search\.live\./i", $keyword["host"])) {
|
||
parse_str($keyword["query"],$q);
|
||
$keyword = $q["q"];
|
||
if($keyword == "") return; return "LiveSearch: ".$keyword;
|
||
}
|
||
elseif (preg_match("/bing\./i", $keyword["host"])) {
|
||
parse_str($keyword["query"],$q);
|
||
$keyword = $q["q"];
|
||
if($keyword == "") return; return "Bing: ".$keyword;
|
||
}
|
||
elseif (preg_match("/yahoo\./i", $keyword["host"])) {
|
||
if (preg_match("/images/i", $keyword["query"])) {
|
||
parse_str($keyword["query"],$q);
|
||
$keyword = $q["p"];
|
||
}
|
||
else {
|
||
parse_str($keyword["query"],$q);
|
||
$keyword = $q["p"];
|
||
}
|
||
if($keyword == "") return; return "Yahoo: ".$keyword;
|
||
}
|
||
elseif (preg_match("/aol\./i", $keyword["host"])) {
|
||
parse_str($keyword["query"],$q);
|
||
$keyword = $q["q"];
|
||
if($keyword == "") return; return "AOL: ".$keyword;
|
||
}
|
||
elseif (preg_match("/aolsvc\./i", $keyword["host"])) {
|
||
parse_str($keyword["query"],$q);
|
||
$keyword = $q["q"];
|
||
if($keyword == "") return; return "AOL: ".$keyword;
|
||
}
|
||
elseif (preg_match("/search\.msn\./i", $keyword["host"])) {
|
||
parse_str($keyword["query"],$q);
|
||
$keyword = $q["q"];
|
||
if($keyword == "") return; return "MSN: ".$keyword;
|
||
}
|
||
elseif (preg_match("/gmx\./i", $keyword["host"])) {
|
||
parse_str($keyword["query"],$q);
|
||
$keyword = $q["su"];
|
||
if($keyword == "") return; return "GMX: ".$keyword;
|
||
}
|
||
elseif (preg_match("/\.bild\.t\-/i", $keyword["host"])) {
|
||
parse_str($keyword["query"],$q);
|
||
$keyword = $q["query"];
|
||
if($keyword == "") return; return "BILD: ".$keyword;
|
||
}
|
||
elseif (preg_match("/t\-online\./i", $keyword["host"])) {
|
||
parse_str($keyword["query"],$q);
|
||
$keyword = $q["q"];
|
||
if($keyword == "") return; return "T-Online: ".$keyword;
|
||
}
|
||
elseif (preg_match("/suche\.web\./i", $keyword["host"])) {
|
||
parse_str($keyword["query"],$q);
|
||
$keyword = $q["su"];
|
||
if($keyword == "") return; return "WEB.de: ".$keyword;
|
||
}
|
||
elseif (preg_match("/suche\.lycos\./i", $keyword["host"])) {
|
||
parse_str($keyword["query"],$q);
|
||
$keyword = $q["query"];
|
||
if($keyword == "") return; return "Lycos: ".$keyword;
|
||
}
|
||
elseif (preg_match("/altavista\./i", $keyword["host"])) {
|
||
parse_str($keyword["query"],$q);
|
||
$keyword = $q["q"];
|
||
if($keyword == "") return; return "Altavista: ".$keyword;
|
||
}
|
||
elseif (preg_match("/alltheweb\./i", $keyword["host"])) {
|
||
parse_str($keyword["query"],$q);
|
||
$keyword = $q["q"];
|
||
if($keyword == "") return; return "alltheweb: ".$keyword;
|
||
}
|
||
elseif (preg_match("/technorati\.com\/search\//", $referer)) {
|
||
$q = preg_split("/technorati\.com\/search\//", $referer,-1,PREG_SPLIT_NO_EMPTY);
|
||
$keyword = $q[1];
|
||
if($keyword == "") return; return "Technorati: ".$keyword;
|
||
}
|
||
elseif (preg_match("/".$homehost."/i", $keyword["host"])) {
|
||
parse_str($keyword["query"],$q);
|
||
$keyword = $q["s"];
|
||
if($keyword == "") return; return "Interne Suche: ".$keyword;
|
||
}
|
||
else {
|
||
return;
|
||
}
|
||
}
|
||
|
||
### Anzahl der Datens<6E>tze in der statz-Tabelle
|
||
function sem_showNumStatzEntries() {
|
||
global $wpdb;
|
||
$numstatzentries = $wpdb->get_var("SELECT COUNT(id) FROM ".$wpdb->statz);
|
||
return $numstatzentries; // Zahl
|
||
}
|
||
|
||
### Aufgezeichnete Tage in der statz-Tabelle
|
||
function sem_countDaysInStatzTable() {
|
||
global $wpdb;
|
||
$firstdate = $wpdb->get_var("SELECT MIN(time) FROM ".$wpdb->statz." LIMIT 0,1");
|
||
if(!$firstdate) {
|
||
return 1;
|
||
}
|
||
else {
|
||
$firstdate = strtotime($firstdate); $now = time();
|
||
$days = (int) (($now - $firstdate) / (60*60*24)+1);
|
||
return $days; // KOMPLETTE! Tage
|
||
}
|
||
}
|
||
|
||
### Wenn Tage in statz-Tabelle kleiner als Tage in Daily-Statz, dann nimm Tage in Daily-Statz
|
||
function sem_compareLimitDays2DailyStatz () {
|
||
global $wpdb;
|
||
$sem_options = get_option('semmelstatzR_options'); ### optionsarray auslesen
|
||
if (sem_countDaysInStatzTable() << $sem_options["statz_days_limit"]) {
|
||
$sem_options["statz_days_limit"] = sem_countDaysInStatzTable();
|
||
update_option("semmelstatzR_options", $sem_options);
|
||
}
|
||
}
|
||
|
||
### Zeigt Copyright-Notiz an
|
||
function sem_showCopyright() {
|
||
print "<p class='copyright'>semmelstatzR ". SEMMELSTATZR_VERSION . " happily coded by <a target='_blank' href='http://semmelstatz.sourceforge.net/'>SEM-Team<br />
|
||
<a target='_blank' style='border:none;' href='http://sourceforge.net/projects/semmelstatz/'>
|
||
<img src='".get_option('siteurl')."/wp-content/plugins/semmelstatzR/img/statzR.png' /></a></p>";
|
||
}
|
||
|
||
### statz-Tabelle leeren (NICHT L<>SCHEN!!!)
|
||
function sem_truncateStatzTable() {
|
||
global $wpdb, $userip;
|
||
$wpdb->query('TRUNCATE TABLE '.$wpdb->statz);
|
||
sem_optStatzTable();
|
||
return $wpdb->query("INSERT INTO `$wpdb->statz`(ip, time, referer, page, username) VALUES('127.0.0.1', NOW(),NULL,0,'statz-Tabelle geleert')");
|
||
}
|
||
|
||
### Obsolet, bleibt aber aus Kompatibilit<69>tsgr<67>nden zu SEMMELSTATZ_DELETE
|
||
function sem_delOldRecords($days) {
|
||
return true;
|
||
}
|
||
|
||
### simpleEncoding f<>r die GoogleChartAPI
|
||
function sem_encodeChartData($values) {
|
||
|
||
$maxValue = max($values);
|
||
$simpleEncoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
||
$chartData = "s:";
|
||
for ($i = 0; $i < count($values); $i++) {
|
||
$currentValue = $values[$i];
|
||
|
||
if ($currentValue > -1 && $maxValue <> 0) {
|
||
$chartData.=substr($simpleEncoding,61*($currentValue/$maxValue),1);
|
||
}
|
||
else {
|
||
$chartData.='_';
|
||
}
|
||
}
|
||
return $chartData;
|
||
}
|
||
|
||
### Datens<6E>tze <20>lter als statz_recdays_limit-Tage l<>schen
|
||
function sem_delOutOfLimit() {
|
||
global $wpdb;
|
||
$sem_options = get_option('semmelstatzR_options'); ### optionsarray auslesen
|
||
$today = time(); $days = $sem_options["statz_recdays_limit"];
|
||
$enddatum = $today - ($days * 86400);
|
||
$enddatum = date("Y-m-d", $enddatum) . " 23:59:59";
|
||
$wpdb->query("DELETE FROM ".$wpdb->statz." WHERE time <= '".$enddatum."'");
|
||
sem_optStatzTable();
|
||
}
|
||
|
||
### Wenn AUTOMATISCHES LIMIT aktiviert, dann LIMITIERE und erh<72>he NEXT_CRON
|
||
function sem_doCronStatzLimit() {
|
||
sem_delOutOfLimit();
|
||
$sem_options = get_option('semmelstatzR_options'); ### optionsarray auslesen
|
||
$statz_next_cron = $sem_options["statz_next_cron"] + 86400;
|
||
$sem_options["statz_next_cron"] = $statz_next_cron;
|
||
update_option("semmelstatzR_options", $sem_options);
|
||
}
|
||
|
||
### Konvertiert Strings von utf-8 in ISO-8859
|
||
function sem_encodeToIso($string) {
|
||
return mb_convert_encoding($string, "ISO-8859-1", mb_detect_encoding($string, "UTF-8, ISO-8859-1, ISO-8859-15", true));
|
||
}
|
||
|
||
### statz-Tabelle optimieren
|
||
function sem_optStatzTable() {
|
||
global $wpdb;
|
||
$wpdb->query("OPTIMIZE TABLE ".$wpdb->statz);
|
||
}
|
||
|
||
### Unter bestimmten Voraussetzungen den Vortag in die statzhist-Tabelle schreiben
|
||
function sem_writeYesterdayToHist() {
|
||
global $wpdb;
|
||
if(!$wpdb->get_var("SELECT date FROM ".$wpdb->statzhist." WHERE substring(date,1,10) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)")) {
|
||
|
||
if($wpdb->get_var("SELECT COUNT(ip) FROM ".$wpdb->statz." WHERE substring(time,1,10) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)")) {
|
||
|
||
$yesterdays = $wpdb->get_results("SELECT COUNT(ip) AS hits, COUNT(DISTINCT ip) AS visitors, COUNT(DISTINCT referer)
|
||
AS referers, substring(time,1,10) AS date FROM ".$wpdb->statz." WHERE substring(time,1,10) = DATE_SUB(CURDATE(),
|
||
INTERVAL 1 DAY) GROUP BY date");
|
||
|
||
foreach ($yesterdays as $yesterday) {
|
||
$date = $yesterday->date;
|
||
$visitors = $yesterday->visitors;
|
||
$hits = $yesterday->hits;
|
||
$referers = $yesterday->referers;
|
||
}
|
||
|
||
$sql = $wpdb->query("INSERT INTO ".$wpdb->statzhist." (date, referers, visitors, hits)
|
||
VALUES('$date', $referers, $visitors, $hits)");
|
||
}
|
||
else {
|
||
$date = $wpdb->get_var("SELECT DATE_SUB(CURDATE(), INTERVAL 1 DAY)");
|
||
$sql = $wpdb->query("INSERT INTO ".$wpdb->statzhist." (date, referers, visitors, hits) VALUES('$date', 0, 0, 0)");
|
||
}
|
||
}
|
||
}
|
||
|
||
/* Summen der vergangenen Tage in die statzhist schreiben */
|
||
function sem_writeOldDaysToHist() {
|
||
global $wpdb;
|
||
if(!$wpdb->get_var("SELECT date FROM ".$wpdb->statzhist." WHERE substring(date,1,10) <= DATE_SUB(CURDATE(), INTERVAL 1 DAY)")) {
|
||
|
||
$theolddays = $wpdb->get_results("SELECT COUNT(ip) AS hits, COUNT(DISTINCT ip) AS visitors,
|
||
COUNT(DISTINCT referer) AS referers, substring(time,1,10) AS date FROM ".$wpdb->statz." WHERE
|
||
substring(time,1,10) <= DATE_SUB(CURDATE(), INTERVAL 1 DAY) GROUP BY date ORDER BY time ASC");
|
||
|
||
foreach ($theolddays as $theoldday) {
|
||
$date = $theoldday->date;
|
||
$visitors = $theoldday->visitors; if(!$visitors) $visitors = 0;
|
||
$hits = $theoldday->hits; if(!$hits) $hits = 0;
|
||
$referers = $theoldday->referers; if(!$referers) $referers = 0;
|
||
$sql = $wpdb->query("INSERT INTO ".$wpdb->statzhist." (date, referers, visitors, hits)
|
||
VALUES('$date', $referers, $visitors, $hits)");
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* translate and return a string
|
||
* @uses wp-function __() and prefilled plugin gettextdomain
|
||
*
|
||
* @param string $sValue string to translate
|
||
* @param string $sDomain gettextdomain
|
||
* @return string translated string
|
||
*/
|
||
function semr_i18n($sValue, $sDomain = "semmelstatzR") {
|
||
return __($sValue, $sDomain);
|
||
}
|
||
|
||
/**
|
||
* translate and echo a string
|
||
* @uses wp-function _e() and prefilled plugin gettextdomain
|
||
*
|
||
* @param string $sValue
|
||
* @param string $sDomain
|
||
* @return void
|
||
*/
|
||
function semr_i18ne($sValue, $sDomain = "semmelstatzR") {
|
||
_e($sValue, $sDomain);
|
||
}
|
||
|
||
/**
|
||
* translate and return a plural or singular string based on an amount
|
||
* @uses wp-function _n() and prefilled plugin gettextdomain
|
||
*
|
||
* @param string $sSingular
|
||
* @param string $sPlural
|
||
* @param type $iNumber
|
||
* @param string $sDomain
|
||
* @return string
|
||
*/
|
||
function semr_i18np($sSingular, $sPlural, $iNumber, $sDomain = "semmelstatzR") {
|
||
return _n($sSingular, $sPlural, $iNumber, $sDomain);
|
||
}
|
||
|
||
############################################## Ende SEMMELSTATZ-interne Funktionen
|
||
?>
|