images and localizing
Dieser Commit ist enthalten in:
Ursprung
a23cd6e222
Commit
29b005c9f4
8 geänderte Dateien mit 997 neuen und 893 gelöschten Zeilen
BIN
trunk/_psd/statzR_small_sfnet.psd
Normale Datei
BIN
trunk/_psd/statzR_small_sfnet.psd
Normale Datei
Binäre Datei nicht angezeigt.
BIN
trunk/_psd/statz_small.psd
Normale Datei
BIN
trunk/_psd/statz_small.psd
Normale Datei
Binäre Datei nicht angezeigt.
BIN
trunk/img/statzR.png
Normale Datei
BIN
trunk/img/statzR.png
Normale Datei
Binäre Datei nicht angezeigt.
Nachher Breite: | Höhe: | Größe: 6,6 KiB |
473
trunk/includes/functions.semr.php
Normale Datei
473
trunk/includes/functions.semr.php
Normale Datei
|
@ -0,0 +1,473 @@
|
||||||
|
<?php
|
||||||
|
############################################## SEMMELSTATZ-interne Funktionen
|
||||||
|
|
||||||
|
### 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
### Prüfen, ob Besucher ein Bot ist
|
||||||
|
function sem_AreYouBot($user_agent) {
|
||||||
|
global $isBot;
|
||||||
|
$bots = array(
|
||||||
|
'aipbot',
|
||||||
|
'amfibibot',
|
||||||
|
'appie',
|
||||||
|
'ask jeeves/teoma',
|
||||||
|
'aspseek',
|
||||||
|
'axadine',
|
||||||
|
'baiduspider',
|
||||||
|
'becomebot',
|
||||||
|
'blogcorpuscrawler',
|
||||||
|
'blogpulse',
|
||||||
|
'blogsnowbot',
|
||||||
|
'boitho.com',
|
||||||
|
'bruinbot',
|
||||||
|
'cerberian',
|
||||||
|
'cfnetwork',
|
||||||
|
'check_http',
|
||||||
|
'cipinetbot',
|
||||||
|
'claymont',
|
||||||
|
'cometsearch@cometsystems.com',
|
||||||
|
'converacrawler',
|
||||||
|
'cydralspider',
|
||||||
|
'digger',
|
||||||
|
'es.net_crawler',
|
||||||
|
'eventax',
|
||||||
|
'everyfeed-spider',
|
||||||
|
'exabot@exava.com',
|
||||||
|
'faxobot',
|
||||||
|
'findlinks',
|
||||||
|
'fireball',
|
||||||
|
'francis',
|
||||||
|
'gaisbot',
|
||||||
|
'gamekitbot',
|
||||||
|
'gazz@nttr.co.jp',
|
||||||
|
'geonabot',
|
||||||
|
'getrax crawler',
|
||||||
|
'gigabot',
|
||||||
|
'girafa.com',
|
||||||
|
'goforitbot',
|
||||||
|
'googlebot',
|
||||||
|
'grub-client',
|
||||||
|
'holmes',
|
||||||
|
'houxoucrawler',
|
||||||
|
'http://www.almaden.ibm.com/cs/crawler',
|
||||||
|
'http://www.istarthere.com',
|
||||||
|
'http://www.relevantnoise.com',
|
||||||
|
'httrack ?',
|
||||||
|
'ia_archiver',
|
||||||
|
'ichiro',
|
||||||
|
'iltrovatore-setaccio',
|
||||||
|
'inelabot',
|
||||||
|
'infoseek',
|
||||||
|
'inktomi.com',
|
||||||
|
'irlbot',
|
||||||
|
'jetbot',
|
||||||
|
'jobspider_ba',
|
||||||
|
'kazoombot',
|
||||||
|
'larbin',
|
||||||
|
'libwww',
|
||||||
|
'linkwalker',
|
||||||
|
'lmspider',
|
||||||
|
'mackster',
|
||||||
|
'mediapartners-google',
|
||||||
|
'microsoft url control',
|
||||||
|
'mj12bot',
|
||||||
|
'moreoverbot',
|
||||||
|
'mozdex',
|
||||||
|
'msnbot',
|
||||||
|
'msrbot',
|
||||||
|
'naverbot',
|
||||||
|
'netresearchserver',
|
||||||
|
'ng/2.0',
|
||||||
|
'np(bot)',
|
||||||
|
'nutch',
|
||||||
|
'objectssearch',
|
||||||
|
'ocelli',
|
||||||
|
'omniexplorer_bot',
|
||||||
|
'openbot',
|
||||||
|
'overture',
|
||||||
|
'patwebbot',
|
||||||
|
'php',
|
||||||
|
'phpdig',
|
||||||
|
'pilgrim html-crawler',
|
||||||
|
'pipeliner',
|
||||||
|
'pompos',
|
||||||
|
'psbot',
|
||||||
|
'python-urllib',
|
||||||
|
'quepasacreep',
|
||||||
|
'robozilla',
|
||||||
|
'rpt-httpclient',
|
||||||
|
'savvybot',
|
||||||
|
'scooter',
|
||||||
|
'search.ch',
|
||||||
|
'seekbot',
|
||||||
|
'semager',
|
||||||
|
'seznambot',
|
||||||
|
'sherlock',
|
||||||
|
'shelob',
|
||||||
|
'sitesearch',
|
||||||
|
'snapbot',
|
||||||
|
'snappreviewbot',
|
||||||
|
'speedy spider',
|
||||||
|
'sphere scout',
|
||||||
|
'stackrambler',
|
||||||
|
'steeler',
|
||||||
|
'surveybot',
|
||||||
|
'szukacz',
|
||||||
|
'technoratibot',
|
||||||
|
'telnet',
|
||||||
|
'themiragorobot',
|
||||||
|
'thesubot',
|
||||||
|
'thumbshots-de-bot',
|
||||||
|
'topicblogs',
|
||||||
|
'turnitinbot',
|
||||||
|
'tutorgigbot',
|
||||||
|
'tutorial crawler',
|
||||||
|
'twiceler',
|
||||||
|
'vagabondo',
|
||||||
|
'versus',
|
||||||
|
'voilabot',
|
||||||
|
'w3c_css_validator',
|
||||||
|
'w3c_validator',
|
||||||
|
'w3c-checklink',
|
||||||
|
'web downloader',
|
||||||
|
'webcopier',
|
||||||
|
'webcrawler',
|
||||||
|
'webfilter robot',
|
||||||
|
'west wind internet protocols',
|
||||||
|
'wget',
|
||||||
|
'wwweasel robot',
|
||||||
|
'wwwster',
|
||||||
|
'xaldon webspider',
|
||||||
|
'xenu',
|
||||||
|
'yahoo! slurp',
|
||||||
|
'yahoofeedseeker',
|
||||||
|
'yahoo-mmcrawler',
|
||||||
|
'zao',
|
||||||
|
'zipppbot',
|
||||||
|
'zyborg',
|
||||||
|
);
|
||||||
|
foreach($bots as $bot) {
|
||||||
|
if(stristr($user_agent, $bot) !== false) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
### Referer nach Suchmaschinen-Queries und interner Suche prüfen und Suchstring extrahieren
|
||||||
|
function sem_getKeyword($referer) {
|
||||||
|
$keyword = @parse_url($referer);
|
||||||
|
|
||||||
|
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ä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://php-backoffice.de'>PHP-Backoffice<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();
|
||||||
|
$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ätsgrü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ätze ä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ö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)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function semr_e($sValue, $sDomain = "semmelstatzR") {
|
||||||
|
return __($sValue, $sDomain);
|
||||||
|
}
|
||||||
|
############################################## Ende SEMMELSTATZ-interne Funktionen
|
||||||
|
?>
|
267
trunk/includes/functions.semr_template.php
Normale Datei
267
trunk/includes/functions.semr_template.php
Normale Datei
|
@ -0,0 +1,267 @@
|
||||||
|
<?php
|
||||||
|
############################################## Beginn TEMPLATE-Funktionen
|
||||||
|
|
||||||
|
### Zeigt die letzten $num_posts-Posts an: Titel und absolutes Datum - CSS-id: #lastposts
|
||||||
|
function sem_showLastPosts($num_posts = 10) {
|
||||||
|
global $wpdb;
|
||||||
|
$lastposts = $wpdb->get_results("SELECT ID, post_title FROM ".$wpdb->posts." WHERE post_status = 'publish'
|
||||||
|
AND post_type = 'post' ORDER BY post_date DESC LIMIT 0, ".$num_posts);
|
||||||
|
print "<div id='lastposts'>";
|
||||||
|
if (empty($lastposts)) {
|
||||||
|
print "... noch keine Beiträge";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
print "<b>Die letzten ".$num_posts." Beiträge</b><br />";
|
||||||
|
foreach ($lastposts as $lastpost) {
|
||||||
|
$posttitle = $lastpost->post_title;
|
||||||
|
$permalink = get_permalink($lastpost->ID);
|
||||||
|
$postdate = $lastpost->post_date;
|
||||||
|
print "<a href='".$permalink."'>".$posttitle."</a><br />\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print "</div>";
|
||||||
|
}
|
||||||
|
|
||||||
|
### Zeigt die letzten $num_comments-Kommentare an: Autor und Post mit relativem Datum - CSS-id: #lastcomments
|
||||||
|
function sem_showLastComments($num_comments = 10) {
|
||||||
|
global $wpdb;
|
||||||
|
$comments = $wpdb->get_results("SELECT comment_author, comment_ID, comment_post_ID, comment_date
|
||||||
|
FROM ".$wpdb->comments." WHERE comment_approved = '1' ORDER BY comment_date DESC LIMIT 0, $num_comments");
|
||||||
|
print "<div id='lastcomments'>";
|
||||||
|
if (empty($comments)) {
|
||||||
|
print "Keine Kommentare";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
print "<b>Die letzten ".$num_comments." Kommentare</b><br />";
|
||||||
|
foreach ($comments as $comment) {
|
||||||
|
$commentday = strtotime(substr($comment->comment_date,1,10));
|
||||||
|
$today = time();
|
||||||
|
$difference = ceil(($today - $commentday) / (60*60*24))-1;
|
||||||
|
if($difference == 0) {
|
||||||
|
$commentdate = "Heute um " . mysql2date("G:i", $comment->comment_date);
|
||||||
|
}
|
||||||
|
elseif($difference == 1) {
|
||||||
|
$commentdate = "Gestern um " . mysql2date("G:i", $comment->comment_date);
|
||||||
|
}
|
||||||
|
elseif($difference == 2) {
|
||||||
|
$commentdate = "Vorgestern um " . mysql2date("G:i", $comment->comment_date);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$commentdate = mysql2date("j. F G:i", $comment->comment_date);
|
||||||
|
}
|
||||||
|
|
||||||
|
print "<a href='" . get_permalink($comment->comment_post_ID) . "#comment-$comment->comment_ID'>$comment->comment_author@". get_the_title($comment->comment_post_ID) .", $commentdate</a><br />\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print "</div>";
|
||||||
|
}
|
||||||
|
|
||||||
|
### Zeigt die $num_reads meist gelesenen Posts an - CSS-id: #mostreads
|
||||||
|
function sem_showMostReads($num_reads = 10) {
|
||||||
|
global $wpdb;
|
||||||
|
$mostreads = $wpdb->get_results("SELECT post_title AS posttitle, guid AS postid, hits AS hits FROM ".$wpdb->posts." WHERE hits != '0' GROUP BY postid ORDER BY hits DESC LIMIT 0, $num_reads");
|
||||||
|
print "<div id='mostreads'>";
|
||||||
|
if (empty($mostreads)) {
|
||||||
|
print "... noch keine Einträge";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
print "<b>Die ".$num_reads." meist gelesenen Beiträge</b><br />";
|
||||||
|
foreach ($mostreads as $mostread) {
|
||||||
|
$posttitle = $mostread->posttitle;
|
||||||
|
$postid = $mostread->postid;
|
||||||
|
//$permalink = get_permalink($mostread->postid);
|
||||||
|
$hits = $mostread->hits;
|
||||||
|
print "<a target='_blank' href='".$postid."'>".$posttitle." (".$hits.")</a><br />\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print "</div>";
|
||||||
|
}
|
||||||
|
|
||||||
|
### Zeigt die $num_reads meist gelesenen Posts an - CSS-id: #mostreads - ACHTUNG: Das Ergebnis der Funktion basiert auf der statz-Tabelle
|
||||||
|
function sem_showMostReadsOld($num_reads = 10) {
|
||||||
|
global $wpdb;
|
||||||
|
$mostreads = $wpdb->get_results("SELECT post_title AS posttitle, ".$wpdb->posts.".guid AS postid,
|
||||||
|
COUNT(".$wpdb->statz.".page) AS count FROM ".$wpdb->posts.", ".$wpdb->statz." WHERE
|
||||||
|
".$wpdb->statz.".page = ".$wpdb->posts.".ID GROUP BY postid ORDER BY count DESC LIMIT 0, $num_reads");
|
||||||
|
print "<div id='mostreads'>";
|
||||||
|
if (empty($mostreads)) {
|
||||||
|
print "... noch keine Einträge";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
print "<b>Die ".$num_reads." meist gelesenen Beiträge</b><br />";
|
||||||
|
foreach ($mostreads as $mostread) {
|
||||||
|
$posttitle = $mostread->posttitle;
|
||||||
|
$postid = $mostread->postid;
|
||||||
|
//$permalink = get_permalink($mostread->postid);
|
||||||
|
$count = $mostread->count;
|
||||||
|
print "<a target='_blank' href='".$postid."'>".$posttitle." (".$count.")</a><br />\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print "</div>";
|
||||||
|
}
|
||||||
|
|
||||||
|
### Zeigt die $num_commented meist kommentierten Posts an - CSS-id: #mostcommented
|
||||||
|
function sem_showMostCommented($num_commented = 10) {
|
||||||
|
global $wpdb;
|
||||||
|
$mostcommented = $wpdb->get_results("SELECT guid, id, post_title, COUNT(*) AS count FROM ".$wpdb->comments.",". $wpdb->posts." WHERE
|
||||||
|
comment_approved = '1' AND comment_post_id = id GROUP BY id, post_title ORDER BY count DESC LIMIT 0, $num_commented");
|
||||||
|
|
||||||
|
print "<div id='mostcommented'>";
|
||||||
|
if (empty($mostcommented)) {
|
||||||
|
print "... noch keine Einträge";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
print "<b>Die ".$num_commented." meist kommentierten Beiträge</b><br />";
|
||||||
|
|
||||||
|
foreach ($mostcommented as $key => $mostcommented) {
|
||||||
|
$posttitle = $mostcommented->post_title;
|
||||||
|
$count = $mostcommented->count;
|
||||||
|
$postid = $mostcommented->guid;
|
||||||
|
print "<a target='_blank' href='".$postid."'>".$posttitle." (".$count.")</a><br />\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print "</div>";
|
||||||
|
}
|
||||||
|
|
||||||
|
### Zeigt einen Zähler der Hits im jeweiligen Post. ACHTUNG: FUNKTIONIERT NUR IM LOOP (index.php, single.php)
|
||||||
|
function sem_showPostHitsInLoop($postid) {
|
||||||
|
global $wpdb;
|
||||||
|
$hits = $wpdb->get_var("SELECT hits FROM $wpdb->posts WHERE ID = $postid LIMIT 0,1");
|
||||||
|
return $hits;
|
||||||
|
}
|
||||||
|
|
||||||
|
### Anzahl aller Posts/Pages
|
||||||
|
function sem_showTotalPosts() {
|
||||||
|
global $wpdb;
|
||||||
|
$totalposts = $wpdb->get_var("SELECT COUNT(ID) AS num FROM ".$wpdb->posts." WHERE post_status = 'publish' LIMIT 0,1");
|
||||||
|
return $totalposts; // Ganzzahl
|
||||||
|
}
|
||||||
|
|
||||||
|
### Anzahl aller Kommentare
|
||||||
|
function sem_showTotalComments() {
|
||||||
|
global $wpdb;
|
||||||
|
$totalcomments = $wpdb->get_var("SELECT COUNT(comment_ID) AS num FROM ".$wpdb->comments." WHERE comment_approved = '1' LIMIT 0,1");
|
||||||
|
return $totalcomments; // Ganzzahl
|
||||||
|
}
|
||||||
|
|
||||||
|
### Anzahl aller User seit Beginn der Statzaufzeichnung
|
||||||
|
function sem_showTotalUsers() {
|
||||||
|
global $wpdb;
|
||||||
|
$totalusers = $wpdb->get_var("SELECT SUM(visitors) FROM ".$wpdb->statzhist." LIMIT 0,1");
|
||||||
|
if(!$totalusers) $totalusers = 0;
|
||||||
|
return $totalusers; // Ganzzahl
|
||||||
|
}
|
||||||
|
|
||||||
|
### Anzahl User pro Tag im Durchschnitt
|
||||||
|
function sem_showAverageUserPerDay() {
|
||||||
|
$averageuser = ceil(sem_showTotalUsers() / sem_showStatzDays());
|
||||||
|
return $averageuser;
|
||||||
|
}
|
||||||
|
|
||||||
|
### Datum des 1. Posts = Blogstart
|
||||||
|
function sem_showFirstPostDate() {
|
||||||
|
global $wpdb;
|
||||||
|
$firstpostdate = $wpdb->get_var("SELECT MIN(post_date) FROM ".$wpdb->posts." WHERE post_status = 'publish' AND post_date != '0000-00-00 00:00:00' LIMIT 0,1");
|
||||||
|
$firstpostdate = mysql2date("j.n.Y", $firstpostdate);
|
||||||
|
return $firstpostdate; // String T.M.JJJJ
|
||||||
|
}
|
||||||
|
|
||||||
|
### Datum des 1. Kommentars
|
||||||
|
function sem_showFirstCommentDate() {
|
||||||
|
global $wpdb;
|
||||||
|
$firstcommentdate = $wpdb->get_var("SELECT MIN(comment_date) FROM ".$wpdb->comments." WHERE comment_approved = '1'
|
||||||
|
AND comment_date != '0000-00-00 00:00:00' LIMIT 0,1");
|
||||||
|
$firstcommentdate = mysql2date("j.n.Y", $firstcommentdate);
|
||||||
|
return $firstcommentdate; // String T.M.JJJJ
|
||||||
|
}
|
||||||
|
|
||||||
|
### Anzahl der Kommentierer nach Nicknamen
|
||||||
|
function sem_showNumCommenters() {
|
||||||
|
global $wpdb;
|
||||||
|
$totalcommenters = $wpdb->get_var("SELECT COUNT(DISTINCT comment_author) FROM ".$wpdb->comments." WHERE comment_approved = '1' LIMIT 0,1");
|
||||||
|
if(!$totalcommenters) $totalcommenters = 0;
|
||||||
|
return $totalcommenters; // Ganzzahl
|
||||||
|
}
|
||||||
|
|
||||||
|
### Blog besteht seit x Tagen
|
||||||
|
function sem_showPostDays() {
|
||||||
|
global $wpdb;
|
||||||
|
$firstdate = $wpdb->get_var("SELECT MIN(post_date) AS date FROM ".$wpdb->posts." WHERE post_status = 'publish' AND post_date != '0000-00-00 00:00' LIMIT 0,1");
|
||||||
|
$firstdate = strtotime($firstdate); $now = time();
|
||||||
|
$blogdays = (int) (($now - $firstdate) / (60*60*24));
|
||||||
|
$blogdays = $blogdays + 1;
|
||||||
|
return $blogdays; // Ganzzahl
|
||||||
|
}
|
||||||
|
|
||||||
|
### Tage seit 1. Kommentar
|
||||||
|
function sem_showCommentDays() {
|
||||||
|
global $wpdb;
|
||||||
|
$firstdate = $wpdb->get_var("SELECT MIN(comment_date) AS date FROM ".$wpdb->comments." LIMIT 0,1");
|
||||||
|
$firstdate = strtotime($firstdate); $now = time();
|
||||||
|
$commentdays = (int) (($now - $firstdate) / (60*60*24));
|
||||||
|
$commentdays = $commentdays + 1;
|
||||||
|
return $commentdays; // Ganzzahl
|
||||||
|
}
|
||||||
|
|
||||||
|
### durchschn. Posts pro Tag
|
||||||
|
function sem_showPostsPerDay() {
|
||||||
|
global $wpdb;
|
||||||
|
$postsperday = (int) sem_showTotalPosts() / (int) sem_showPostDays();
|
||||||
|
return $postsperday; // Ganzzahl
|
||||||
|
}
|
||||||
|
|
||||||
|
### durchschn. Kommentare pro Tag
|
||||||
|
function sem_showCommentsPerDay() {
|
||||||
|
global $wpdb;
|
||||||
|
$commentsperday = (int) sem_showTotalComments() / (int) sem_showCommentDays();
|
||||||
|
return $commentsperday; // Ganzzahl
|
||||||
|
}
|
||||||
|
|
||||||
|
### Startdatum der Gesamtstatistik (Basis: statzhist)
|
||||||
|
function sem_showStatzStartDate() {
|
||||||
|
global $wpdb;
|
||||||
|
$statzhiststartdate = $wpdb->get_var("SELECT MIN(date) FROM ".$wpdb->statzhist." WHERE date != '0000-00-00 00:00' LIMIT 0,1");
|
||||||
|
$statzhiststartdate = mysql2date("j.n.Y", $statzhiststartdate);
|
||||||
|
// if(!$statzhiststartdate) $statzhiststartdate= "xx.xx.xxxx";
|
||||||
|
return $statzhiststartdate; // String T.M.JJJJ
|
||||||
|
}
|
||||||
|
|
||||||
|
### Dauer der Statistikaufzeichnung in Tagen (Basis: statzhist)
|
||||||
|
function sem_showStatzDays() {
|
||||||
|
global $wpdb;
|
||||||
|
$firstdate = $wpdb->get_var("SELECT MIN(date) FROM ".$wpdb->statzhist." LIMIT 0,1");
|
||||||
|
if(!$firstdate) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$firstdate = strtotime($firstdate); $now = time();
|
||||||
|
$statzdays = (int) (($now - $firstdate) / (60*60*24));
|
||||||
|
return $statzdays; // Ganzzahl
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
### Anzahl der Online-Besucher - Verweildauer in den Einstellungen
|
||||||
|
function sem_showNumUsersOnline() {
|
||||||
|
global $wpdb;
|
||||||
|
$sem_options = get_option('semmelstatzR_options'); ### optionsarray auslesen
|
||||||
|
$onlinetime = $sem_options["statz_online_time"];
|
||||||
|
$numonline = $wpdb->get_var("SELECT COUNT(DISTINCT ip) FROM ".$wpdb->statz." WHERE time > Now() - INTERVAL ".$onlinetime." SECOND");
|
||||||
|
return $numonline; // Ganzzahl
|
||||||
|
}
|
||||||
|
|
||||||
|
### Anzahl der heutigen Besucher
|
||||||
|
function sem_showUsersToday() {
|
||||||
|
global $wpdb; $today = date("Y-m-d");
|
||||||
|
$todayusers = $wpdb->get_var("SELECT COUNT(DISTINCT ip) FROM ".$wpdb->statz." WHERE time >= '$today' LIMIT 0, 1");
|
||||||
|
return $todayusers;
|
||||||
|
}
|
||||||
|
|
||||||
|
### Anzahl der gestrigen Besucher
|
||||||
|
function sem_showUsersYesterday() {
|
||||||
|
global $wpdb;
|
||||||
|
$yesterdaysusers = $wpdb->get_var("SELECT visitors FROM ".$wpdb->statzhist." WHERE date = substr(DATE_SUB(NOW(), INTERVAL 1 DAY),1,10) LIMIT 0, 1");
|
||||||
|
return $yesterdaysusers;
|
||||||
|
}
|
||||||
|
|
||||||
|
##################################################### Ende TEMPLATE-Funktionen
|
||||||
|
?>
|
|
@ -42,14 +42,15 @@ if(!current_user_can('manage_statz')) {
|
||||||
$sem_options['statz_show_todayusers'] = $_POST['statz_show_todayusers'];
|
$sem_options['statz_show_todayusers'] = $_POST['statz_show_todayusers'];
|
||||||
$sem_options['statz_on_dashboard'] = $_POST['statz_on_dashboard'];
|
$sem_options['statz_on_dashboard'] = $_POST['statz_on_dashboard'];
|
||||||
$sem_options['statz_datarecs_limit'] = $_POST['statz_datarecs_limit'];
|
$sem_options['statz_datarecs_limit'] = $_POST['statz_datarecs_limit'];
|
||||||
|
$sem_options['statz_use_img'] = $_POST['statz_use_img'];
|
||||||
update_option("semmelstatzR_options", $sem_options);
|
update_option("semmelstatzR_options", $sem_options);
|
||||||
|
|
||||||
echo '<div class="updated fade"><p>Einstellungen gespeichert</strong></p></div>';
|
echo '<div class="updated fade"><p>'.semr_e('Options saved').'</strong></p></div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isset($_POST['trunc_save'])) {
|
if(isset($_POST['trunc_save'])) {
|
||||||
if ($result == sem_truncateStatzTable()) {
|
if ($result == sem_truncateStatzTable()) {
|
||||||
echo "<div class='updated'><p>Die <i>statz</i>-Tabelle wurde erfolgreich geleert.</p></div>";
|
echo "<div class='updated'><p>".semr_e('<i>statz</i>-table emptied succesfully.')."</p></div>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,12 +93,20 @@ if(!current_user_can('manage_statz')) {
|
||||||
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>?page=<?php echo plugin_basename(__FILE__); ?>">
|
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>?page=<?php echo plugin_basename(__FILE__); ?>">
|
||||||
|
|
||||||
<div id='icon-semmelstatzR' class='icon32'><br /></div>
|
<div id='icon-semmelstatzR' class='icon32'><br /></div>
|
||||||
<h2>SemmelstatzR › Einstellungen</h2>
|
<h2>SemmelstatzR › <?php echo semr_e('Options'); ?></h2>
|
||||||
|
|
||||||
<p><input type="submit" class="button-secondary" name="options_save" value="Änderungen übernehmen" /></p>
|
<p><input type="submit" class="button-secondary" name="options_save" value="<?php echo semr_e('Save Changes'); ?>" /></p>
|
||||||
|
|
||||||
<table class="form-table">
|
<table class="form-table">
|
||||||
|
|
||||||
|
<tr style="background:#eee;" valign="middle">
|
||||||
|
<th><?php echo semr_e('Use tracking image'); ?></th>
|
||||||
|
<td><input name="statz_use_img" type="checkbox" id="statz_write_admins" value="statz_use_img"
|
||||||
|
<?php if($sem_options["statz_use_img"] == TRUE) {?> checked="checked" <?php } ?> />
|
||||||
|
</td>
|
||||||
|
<td><?php echo semr_e('Use a pixelimage in the footer to track visitors. Only needed with some cache-plugins. - (Default: Off)'); ?></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
<tr style="background:#eee;" valign="middle">
|
<tr style="background:#eee;" valign="middle">
|
||||||
<th>Blog-Administratoren aufzeichnen</th>
|
<th>Blog-Administratoren aufzeichnen</th>
|
||||||
<td><input name="statz_write_admins" type="checkbox" id="statz_write_admins" value="statz_write_admins"
|
<td><input name="statz_write_admins" type="checkbox" id="statz_write_admins" value="statz_write_admins"
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
Plugin Name: SemmelstatzR
|
Plugin Name: SemmelstatzR
|
||||||
Plugin URI: http://sourceforge.net/projects/semmelstatzR/
|
Plugin URI: http://sourceforge.net/projects/semmelstatz/
|
||||||
Description: Visitorstatistic for Wordpress, based upon the original wp-plugin semmelstatzR by Andreas 'Redunzl' Mueller (http://www.kopfhoch-studio.de)
|
Description: Visitorstatistic for Wordpress, based upon the original wp-plugin semmelstatz by Andreas 'Redunzl' Mueller (http://www.kopfhoch-studio.de)
|
||||||
Version: 1.0.0 beta
|
Version: 1.0.0 beta
|
||||||
Author: Ortwin Pinke
|
Author: Ortwin Pinke
|
||||||
Author URI: http://www.ortwinpinke.de
|
Author URI: http://www.ortwinpinke.de
|
||||||
|
@ -40,8 +40,10 @@ Author URI: http://www.ortwinpinke.de
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
### konstante für version
|
### constants
|
||||||
define('SEMMELSTATZR_VERSION', '1.0.0 Beta');
|
define('SEMMELSTATZR_VERSION', '1.0.0 Beta');
|
||||||
|
define('SEMMELSTATZR_SRVPATH', dirname(__FILE__));
|
||||||
|
define('SEMMELSTATZR_HTML_RELPATH', WP_PLUGIN_URL.'/'.str_replace(basename( __FILE__),"",plugin_basename(__FILE__)));
|
||||||
|
|
||||||
### Deklaration der Tabellennamen
|
### Deklaration der Tabellennamen
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
|
@ -62,25 +64,53 @@ if(!load_plugin_textdomain('semmelstatzR','/wp-content/languages/')) {
|
||||||
load_plugin_textdomain('semmelstatzR',null,$plugin_dir.'/locale/');
|
load_plugin_textdomain('semmelstatzR',null,$plugin_dir.'/locale/');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
include_once SEMMELSTATZR_SRVPATH.'/includes/functions.semr.php';
|
||||||
|
include_once SEMMELSTATZR_SRVPATH.'/includes/functions.semr_template.php';
|
||||||
|
|
||||||
### Erstellen des Top-Level-Menus im Adminbereich
|
|
||||||
add_action('admin_menu', 'semmelstatzR_menu');
|
if(is_admin() == true) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add CSS
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function semmelstatzR_css() {
|
||||||
|
print "<link rel='stylesheet' href='".get_option('siteurl')."/wp-content/plugins/semmelstatzR/semmelstatzR.css' type='text/css' media='screen' />\n";
|
||||||
|
}
|
||||||
|
add_action('admin_head', 'semmelstatzR_css');
|
||||||
|
### End add CSS
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add toplevel menu into admin
|
||||||
|
*
|
||||||
|
* @todo localization
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
function semmelstatzR_menu() {
|
function semmelstatzR_menu() {
|
||||||
if (function_exists('add_menu_page')) {
|
if (function_exists('add_menu_page')) {
|
||||||
add_menu_page('SemmelstatzR','SemmelstatzR', 'manage_statz', 'semmelstatzR/semmelstatzR-statz.php', '', plugins_url('semmelstatzR/img/statz_small.png'));
|
add_menu_page('SemmelstatzR','SemmelstatzR', 'manage_statz', 'semmelstatzR/semmelstatzR-statz.php', '', plugins_url('semmelstatzR/img/statz_small.png'));
|
||||||
}
|
}
|
||||||
if (function_exists('add_submenu_page')) {
|
if (function_exists('add_submenu_page')) {
|
||||||
add_submenu_page('semmelstatzR/semmelstatzR-statz.php', 'Aktuell', 'Aktuell', 'manage_statz', 'semmelstatzR/semmelstatzR-statz.php');
|
add_submenu_page('semmelstatzR/semmelstatzR-statz.php', semr_e('Current Statz'), semr_e('Current Statz'), 'manage_statz', 'semmelstatzR/semmelstatzR-statz.php');
|
||||||
add_submenu_page('semmelstatzR/semmelstatzR-statz.php', 'Historie', 'Historie', 'manage_statz', 'semmelstatzR/semmelstatzR-history.php');
|
add_submenu_page('semmelstatzR/semmelstatzR-statz.php', semr_e('History'), semr_e('History'), 'manage_statz', 'semmelstatzR/semmelstatzR-history.php');
|
||||||
add_submenu_page('semmelstatzR/semmelstatzR-statz.php', 'Log', 'Log', 'manage_statz', 'semmelstatzR/semmelstatzR-log.php');
|
add_submenu_page('semmelstatzR/semmelstatzR-statz.php', semr_e('Log'), semr_e('Log'), 'manage_statz', 'semmelstatzR/semmelstatzR-log.php');
|
||||||
add_submenu_page('semmelstatzR/semmelstatzR-statz.php', 'Datenbank', 'Datenbank', 'manage_statz', 'semmelstatzR/semmelstatzR-database.php');
|
add_submenu_page('semmelstatzR/semmelstatzR-statz.php', semr_e('Database'), semr_e('Database'), 'manage_statz', 'semmelstatzR/semmelstatzR-database.php');
|
||||||
add_submenu_page('semmelstatzR/semmelstatzR-statz.php', 'Templates', 'Templates', 'manage_statz', 'semmelstatzR/semmelstatzR-templates.php');
|
add_submenu_page('semmelstatzR/semmelstatzR-statz.php', semr_e('Templates'), semr_e('Templates'), 'manage_statz', 'semmelstatzR/semmelstatzR-templates.php');
|
||||||
add_submenu_page('semmelstatzR/semmelstatzR-statz.php', 'Einstellungen', 'Einstellungen', 'manage_statz', 'semmelstatzR/semmelstatzR-options.php');
|
add_submenu_page('semmelstatzR/semmelstatzR-statz.php', semr_e('Options'), semr_e('Options'), 'manage_statz', 'semmelstatzR/semmelstatzR-options.php');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
add_action('admin_menu', 'semmelstatzR_menu');
|
||||||
|
### end add toplevel adminmenu
|
||||||
|
|
||||||
### Default-Werte der statz-Optionen in das Array 'semmelstatzR_options' schreiben
|
|
||||||
add_action('init', 'sem_init_options');
|
|
||||||
|
/**
|
||||||
|
* write defaults to options-array
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
function sem_init_options() {
|
function sem_init_options() {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
|
|
||||||
|
@ -112,15 +142,23 @@ add_action('init', 'sem_init_options');
|
||||||
"statz_show_useronline" => true,
|
"statz_show_useronline" => true,
|
||||||
"statz_topreads_limit" => 10,
|
"statz_topreads_limit" => 10,
|
||||||
"statz_write_admins" => false,
|
"statz_write_admins" => false,
|
||||||
"statz_write_users" => false
|
"statz_write_users" => false,
|
||||||
|
"statz_use_img" => true
|
||||||
);
|
);
|
||||||
add_option( 'semmelstatzR_options', $sem_options );
|
add_option( 'semmelstatzR_options', $sem_options );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
add_action('init', 'sem_init_options');
|
||||||
|
### End write defaults to options-array
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
### Anlegen der Tabellen, Optionen schreiben
|
### Anlegen der Tabellen, Optionen schreiben
|
||||||
add_action('activate_semmelstatzR/semmelstatzR.php', 'sem_statzsetup');
|
add_action('activate_semmelstatzR/semmelstatzR.php', 'sem_statzsetup');
|
||||||
function sem_statzsetup() {
|
function sem_statzsetup() {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
if(@is_file(ABSPATH.'/wp-admin/upgrade-functions.php')) {
|
if(@is_file(ABSPATH.'/wp-admin/upgrade-functions.php')) {
|
||||||
include_once(ABSPATH.'/wp-admin/upgrade-functions.php');
|
include_once(ABSPATH.'/wp-admin/upgrade-functions.php');
|
||||||
|
@ -167,14 +205,21 @@ add_action('init', 'sem_init_options');
|
||||||
if(!$role->has_cap('manage_statz')) {
|
if(!$role->has_cap('manage_statz')) {
|
||||||
$role->add_cap('manage_statz');
|
$role->add_cap('manage_statz');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
### Zugriff analysieren und in statz-Tabelle schreiben
|
### Zugriff analysieren und in statz-Tabelle schreiben
|
||||||
add_action('wp_head', 'sem_writeStatz');
|
add_action('wp_footer', 'sem_writeStatz');
|
||||||
function sem_writeStatz() {
|
function sem_writeStatz() {
|
||||||
global $wpdb, $wp_query, $isBot, $isAdmin, $page;
|
global $wpdb, $wp_query, $isBot, $isAdmin, $page;
|
||||||
|
$plugin_dir = basename(dirname(__FILE__));
|
||||||
$sem_options = get_option('semmelstatzR_options'); ### optionsarray auslesen
|
$sem_options = get_option('semmelstatzR_options'); ### optionsarray auslesen
|
||||||
|
|
||||||
|
// true === $sem_options['statz_use_img'] &&
|
||||||
|
if(true == $sem_options['statz_use_img'] && !defined('SEMMELSTATZR_STATZIMG')) {
|
||||||
|
print '<img src="'.SEMMELSTATZR_HTML_RELPATH.'semr_image.php" alt="" />';
|
||||||
|
return; ### nothing todo if stat image is used
|
||||||
|
}
|
||||||
|
|
||||||
sem_writeYesterdayToHist();
|
sem_writeYesterdayToHist();
|
||||||
$useragent = $wpdb->escape($_SERVER['HTTP_USER_AGENT']);
|
$useragent = $wpdb->escape($_SERVER['HTTP_USER_AGENT']);
|
||||||
$isBot = sem_AreYouBot($useragent);
|
$isBot = sem_AreYouBot($useragent);
|
||||||
|
@ -189,16 +234,16 @@ add_action('init', 'sem_init_options');
|
||||||
$userip = $wpdb->escape($_SERVER['REMOTE_ADDR']);
|
$userip = $wpdb->escape($_SERVER['REMOTE_ADDR']);
|
||||||
if($sem_options['statz_encode_ip'] == true) $userip = sem_encodeIP($userip);
|
if($sem_options['statz_encode_ip'] == true) $userip = sem_encodeIP($userip);
|
||||||
|
|
||||||
$referer = $wpdb->escape(urldecode($_SERVER['HTTP_REFERER']));
|
$referer = $wpdb->escape(urldecode($_SERVER['HTTP_REFERER']));
|
||||||
$blogtime = gmdate('Y-m-d H:i:s', current_time('timestamp'));
|
$blogtime = gmdate('Y-m-d H:i:s', current_time('timestamp'));
|
||||||
|
|
||||||
if (!empty($referer)) {
|
if (!empty($referer)) {
|
||||||
if(get_option('blog_charset') == 'iso-8859-1') $referer = utf8_decode($referer);
|
if(get_option('blog_charset') == 'iso-8859-1') $referer = utf8_decode($referer);
|
||||||
$referer = "'".$referer."'";
|
$referer = "'".$referer."'";
|
||||||
}
|
|
||||||
else {
|
|
||||||
$referer = 'NULL';
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
$referer = 'NULL';
|
||||||
|
}
|
||||||
|
|
||||||
$readingnow = wp_title('', false);
|
$readingnow = wp_title('', false);
|
||||||
if(empty($readingnow)) {
|
if(empty($readingnow)) {
|
||||||
|
@ -207,13 +252,13 @@ add_action('init', 'sem_init_options');
|
||||||
$page = $wp_query->post->ID;
|
$page = $wp_query->post->ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
$wpdb->query("INSERT INTO $wpdb->statz (ip, time, referer, page, username)
|
$wpdb->query("INSERT INTO $wpdb->statz (ip, time, referer, page, username)
|
||||||
VALUES('$userip', '$blogtime', $referer, $page, '$username')");
|
VALUES('$userip', '$blogtime', $referer, $page, '$username')");
|
||||||
|
|
||||||
if($wpdb->query("SELECT COUNT(hits) FROM $wpdb->posts")) {
|
if($wpdb->query("SELECT COUNT(hits) FROM $wpdb->posts")) {
|
||||||
$wpdb->query("UPDATE $wpdb->posts SET hits = hits + 1 WHERE ID = $page"); // neu ab 3.2
|
$wpdb->query("UPDATE $wpdb->posts SET hits = hits + 1 WHERE ID = $page"); // neu ab 3.2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
### Zeitgesteuertes Limitieren der statz-Tabelle
|
### Zeitgesteuertes Limitieren der statz-Tabelle
|
||||||
// Wenn semmelKron JA UND statz_next_cron älter JETZT, dann...
|
// Wenn semmelKron JA UND statz_next_cron älter JETZT, dann...
|
||||||
|
@ -222,14 +267,10 @@ add_action('init', 'sem_init_options');
|
||||||
add_action('shutdown', 'sem_doCronStatzLimit'); // ...limitiere statz-Tabelle auf vorgegebenen Wert
|
add_action('shutdown', 'sem_doCronStatzLimit'); // ...limitiere statz-Tabelle auf vorgegebenen Wert
|
||||||
}
|
}
|
||||||
|
|
||||||
### CSS für den SEMMELSTATZ-Admin-Bereich
|
|
||||||
add_action('admin_head', 'semmelstatzR_css');
|
|
||||||
function semmelstatzR_css() {
|
|
||||||
print "<link rel='stylesheet' href='".get_option('siteurl')."/wp-content/plugins/semmelstatzR/semmelstatzR.css' type='text/css' media='screen' />\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
### Rendert eine Mini-STATZ. Idee: René Tauchnitz
|
### Rendert eine Mini-STATZ. Idee: René Tauchnitz
|
||||||
function sem_dashboardStatz() {
|
function sem_dashboardStatz_show() {
|
||||||
|
|
||||||
|
$widgets = get_option( 'dashboard_widget_options' );
|
||||||
echo '<p>';
|
echo '<p>';
|
||||||
printf(_n("%d Visitor online", "%d Visitors online", sem_showNumUsersOnline(), "semmelstatzR"), sem_showNumUsersOnline());
|
printf(_n("%d Visitor online", "%d Visitors online", sem_showNumUsersOnline(), "semmelstatzR"), sem_showNumUsersOnline());
|
||||||
echo ' - ';
|
echo ' - ';
|
||||||
|
@ -238,13 +279,35 @@ function sem_dashboardStatz() {
|
||||||
echo '</p>';
|
echo '</p>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function sem_dashboardStatz_control() {
|
||||||
|
if ( !$widget_options = get_option( 'dashboard_widget_options' ) )
|
||||||
|
$widget_options = array();
|
||||||
|
|
||||||
|
if ( !isset($widget_options['dashboard_sem_dashboardStatz']) )
|
||||||
|
$widget_options['dashboard_sem_dashboardStatz'] = array();
|
||||||
|
|
||||||
|
if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['dashboard-sem-dashboardStatz']) ) {
|
||||||
|
$number = absint( $_POST['dashboard-sem-dashboardStatz']['items'] );
|
||||||
|
$widget_options['dashboard_sem_dashboardStatz']['items'] = $number;
|
||||||
|
update_option( 'dashboard_widget_options', $widget_options );
|
||||||
|
}
|
||||||
|
|
||||||
|
$number = isset( $widget_options['dashboard_sem_dashboardStatz']['items'] ) ? (int) $widget_options['dashboard_sem_dashboardStatz']['items'] : '';
|
||||||
|
|
||||||
|
echo '<p><label for="sem-number">' . __('Number of Whatever:') . '</label>';
|
||||||
|
echo '<input id="sem-number" name="dashboard-sem-dashboardStatz[items]" type="text" value="' . $number . '" size="3" /></p>';
|
||||||
|
|
||||||
|
print_r($widget_options['dashboard_sem_dashboardStatz']);
|
||||||
|
}
|
||||||
|
|
||||||
### Widget für die Mini-STATZ
|
### Widget für die Mini-STATZ
|
||||||
add_action('wp_dashboard_setup', 'sem_dashboardStatz_setup');
|
add_action('wp_dashboard_setup', 'sem_dashboardStatz_setup');
|
||||||
|
|
||||||
function sem_dashboardStatz_setup() {
|
function sem_dashboardStatz_setup() {
|
||||||
$sem_options = get_option('semmelstatzR_options'); ### optionsarray auslesen
|
$sem_options = get_option('semmelstatzR_options'); ### optionsarray auslesen
|
||||||
if(!current_user_can('manage_statz')) return;
|
if(!current_user_can('manage_statz')) return;
|
||||||
if($sem_options['statz_on_dashboard'] != true) return;
|
if($sem_options['statz_on_dashboard'] != true) return;
|
||||||
wp_add_dashboard_widget( 'sem_dashboardStatz', 'SemmelstatzR', 'sem_dashboardStatz' );
|
wp_add_dashboard_widget( 'sem_dashboardStatz', 'SemmelstatzR', 'sem_dashboardStatz_show', 'sem_dashboardStatz_control' );
|
||||||
}
|
}
|
||||||
|
|
||||||
### Mini-Statz für Dashboard-Widget & AKTUELL-Anzeige
|
### Mini-Statz für Dashboard-Widget & AKTUELL-Anzeige
|
||||||
|
@ -252,7 +315,7 @@ function sem_dashboardStatz_setup() {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
$thedays = $wpdb->get_results("SELECT COUNT(ip) AS hits, COUNT(DISTINCT ip) AS visitors, COUNT(DISTINCT referer)
|
$thedays = $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 time >= CURDATE() GROUP BY date");
|
AS referers, substring(time,1,10) AS date FROM ".$wpdb->statz." WHERE time >= CURDATE() GROUP BY date");
|
||||||
$thedays = array(array('hits' => 33));
|
//$thedays = array(array('hits' => 33));
|
||||||
if (empty($thedays)) {
|
if (empty($thedays)) {
|
||||||
return "<small>".__("... no entries", "semmelstatzR")."</small>";
|
return "<small>".__("... no entries", "semmelstatzR")."</small>";
|
||||||
}
|
}
|
||||||
|
@ -266,737 +329,4 @@ function sem_dashboardStatz_setup() {
|
||||||
.sprintf(_n("%d Hit","%d Hits",$hits, "semmelstatzR"),$hits)." - "
|
.sprintf(_n("%d Hit","%d Hits",$hits, "semmelstatzR"),$hits)." - "
|
||||||
.sprintf(_n("%d Referrer","%d Referrers",$referer, "semmelstatzR"),$referers);
|
.sprintf(_n("%d Referrer","%d Referrers",$referer, "semmelstatzR"),$referers);
|
||||||
}
|
}
|
||||||
|
|
||||||
### 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
### Prüfen, ob Besucher ein Bot ist
|
|
||||||
function sem_AreYouBot($user_agent) {
|
|
||||||
global $isBot;
|
|
||||||
$bots = array(
|
|
||||||
'aipbot',
|
|
||||||
'amfibibot',
|
|
||||||
'appie',
|
|
||||||
'ask jeeves/teoma',
|
|
||||||
'aspseek',
|
|
||||||
'axadine',
|
|
||||||
'baiduspider',
|
|
||||||
'becomebot',
|
|
||||||
'blogcorpuscrawler',
|
|
||||||
'blogpulse',
|
|
||||||
'blogsnowbot',
|
|
||||||
'boitho.com',
|
|
||||||
'bruinbot',
|
|
||||||
'cerberian',
|
|
||||||
'cfnetwork',
|
|
||||||
'check_http',
|
|
||||||
'cipinetbot',
|
|
||||||
'claymont',
|
|
||||||
'cometsearch@cometsystems.com',
|
|
||||||
'converacrawler',
|
|
||||||
'cydralspider',
|
|
||||||
'digger',
|
|
||||||
'es.net_crawler',
|
|
||||||
'eventax',
|
|
||||||
'everyfeed-spider',
|
|
||||||
'exabot@exava.com',
|
|
||||||
'faxobot',
|
|
||||||
'findlinks',
|
|
||||||
'fireball',
|
|
||||||
'francis',
|
|
||||||
'gaisbot',
|
|
||||||
'gamekitbot',
|
|
||||||
'gazz@nttr.co.jp',
|
|
||||||
'geonabot',
|
|
||||||
'getrax crawler',
|
|
||||||
'gigabot',
|
|
||||||
'girafa.com',
|
|
||||||
'goforitbot',
|
|
||||||
'googlebot',
|
|
||||||
'grub-client',
|
|
||||||
'holmes',
|
|
||||||
'houxoucrawler',
|
|
||||||
'http://www.almaden.ibm.com/cs/crawler',
|
|
||||||
'http://www.istarthere.com',
|
|
||||||
'http://www.relevantnoise.com',
|
|
||||||
'httrack ?',
|
|
||||||
'ia_archiver',
|
|
||||||
'ichiro',
|
|
||||||
'iltrovatore-setaccio',
|
|
||||||
'inelabot',
|
|
||||||
'infoseek',
|
|
||||||
'inktomi.com',
|
|
||||||
'irlbot',
|
|
||||||
'jetbot',
|
|
||||||
'jobspider_ba',
|
|
||||||
'kazoombot',
|
|
||||||
'larbin',
|
|
||||||
'libwww',
|
|
||||||
'linkwalker',
|
|
||||||
'lmspider',
|
|
||||||
'mackster',
|
|
||||||
'mediapartners-google',
|
|
||||||
'microsoft url control',
|
|
||||||
'mj12bot',
|
|
||||||
'moreoverbot',
|
|
||||||
'mozdex',
|
|
||||||
'msnbot',
|
|
||||||
'msrbot',
|
|
||||||
'naverbot',
|
|
||||||
'netresearchserver',
|
|
||||||
'ng/2.0',
|
|
||||||
'np(bot)',
|
|
||||||
'nutch',
|
|
||||||
'objectssearch',
|
|
||||||
'ocelli',
|
|
||||||
'omniexplorer_bot',
|
|
||||||
'openbot',
|
|
||||||
'overture',
|
|
||||||
'patwebbot',
|
|
||||||
'php',
|
|
||||||
'phpdig',
|
|
||||||
'pilgrim html-crawler',
|
|
||||||
'pipeliner',
|
|
||||||
'pompos',
|
|
||||||
'psbot',
|
|
||||||
'python-urllib',
|
|
||||||
'quepasacreep',
|
|
||||||
'robozilla',
|
|
||||||
'rpt-httpclient',
|
|
||||||
'savvybot',
|
|
||||||
'scooter',
|
|
||||||
'search.ch',
|
|
||||||
'seekbot',
|
|
||||||
'semager',
|
|
||||||
'seznambot',
|
|
||||||
'sherlock',
|
|
||||||
'shelob',
|
|
||||||
'sitesearch',
|
|
||||||
'snapbot',
|
|
||||||
'snappreviewbot',
|
|
||||||
'speedy spider',
|
|
||||||
'sphere scout',
|
|
||||||
'stackrambler',
|
|
||||||
'steeler',
|
|
||||||
'surveybot',
|
|
||||||
'szukacz',
|
|
||||||
'technoratibot',
|
|
||||||
'telnet',
|
|
||||||
'themiragorobot',
|
|
||||||
'thesubot',
|
|
||||||
'thumbshots-de-bot',
|
|
||||||
'topicblogs',
|
|
||||||
'turnitinbot',
|
|
||||||
'tutorgigbot',
|
|
||||||
'tutorial crawler',
|
|
||||||
'twiceler',
|
|
||||||
'vagabondo',
|
|
||||||
'versus',
|
|
||||||
'voilabot',
|
|
||||||
'w3c_css_validator',
|
|
||||||
'w3c_validator',
|
|
||||||
'w3c-checklink',
|
|
||||||
'web downloader',
|
|
||||||
'webcopier',
|
|
||||||
'webcrawler',
|
|
||||||
'webfilter robot',
|
|
||||||
'west wind internet protocols',
|
|
||||||
'wget',
|
|
||||||
'wwweasel robot',
|
|
||||||
'wwwster',
|
|
||||||
'xaldon webspider',
|
|
||||||
'xenu',
|
|
||||||
'yahoo! slurp',
|
|
||||||
'yahoofeedseeker',
|
|
||||||
'yahoo-mmcrawler',
|
|
||||||
'zao',
|
|
||||||
'zipppbot',
|
|
||||||
'zyborg',
|
|
||||||
);
|
|
||||||
foreach($bots as $bot) {
|
|
||||||
if(stristr($user_agent, $bot) !== false) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
### Referer nach Suchmaschinen-Queries und interner Suche prüfen und Suchstring extrahieren
|
|
||||||
function sem_getKeyword($referer) {
|
|
||||||
$keyword = @parse_url($referer);
|
|
||||||
|
|
||||||
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ä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 ". SEMMELSTATZ_VERSION . " ist (c) kopfhoch-studio 2005-2009<br />
|
|
||||||
<a target='_blank' style='border:none;' href='http://www.kopfhoch-studio.de/blog/2765'>
|
|
||||||
<img src='".get_option('siteurl')."/wp-content/plugins/semmelstatzR/img/statz.png' /></a></p>";
|
|
||||||
}
|
|
||||||
|
|
||||||
### statz-Tabelle leeren (NICHT LÖSCHEN!!!)
|
|
||||||
function sem_truncateStatzTable() {
|
|
||||||
global $wpdb, $userip;
|
|
||||||
$wpdb->query('TRUNCATE TABLE '.$wpdb->statz);
|
|
||||||
sem_optStatzTable();
|
|
||||||
$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ätsgrü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) {
|
|
||||||
$chartData.=substr($simpleEncoding,61*($currentValue/$maxValue),1);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$chartData.='_';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $chartData;
|
|
||||||
}
|
|
||||||
|
|
||||||
### Datensätze ä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ö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)");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
############################################## Ende SEMMELSTATZ-interne Funktionen
|
|
||||||
|
|
||||||
############################################## Beginn TEMPLATE-Funktionen
|
|
||||||
|
|
||||||
### Zeigt die letzten $num_posts-Posts an: Titel und absolutes Datum - CSS-id: #lastposts
|
|
||||||
function sem_showLastPosts($num_posts = 10) {
|
|
||||||
global $wpdb;
|
|
||||||
$lastposts = $wpdb->get_results("SELECT ID, post_title FROM ".$wpdb->posts." WHERE post_status = 'publish'
|
|
||||||
AND post_type = 'post' ORDER BY post_date DESC LIMIT 0, ".$num_posts);
|
|
||||||
print "<div id='lastposts'>";
|
|
||||||
if (empty($lastposts)) {
|
|
||||||
print "... noch keine Beiträge";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
print "<b>Die letzten ".$num_posts." Beiträge</b><br />";
|
|
||||||
foreach ($lastposts as $lastpost) {
|
|
||||||
$posttitle = $lastpost->post_title;
|
|
||||||
$permalink = get_permalink($lastpost->ID);
|
|
||||||
$postdate = $lastpost->post_date;
|
|
||||||
print "<a href='".$permalink."'>".$posttitle."</a><br />\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print "</div>";
|
|
||||||
}
|
|
||||||
|
|
||||||
### Zeigt die letzten $num_comments-Kommentare an: Autor und Post mit relativem Datum - CSS-id: #lastcomments
|
|
||||||
function sem_showLastComments($num_comments = 10) {
|
|
||||||
global $wpdb;
|
|
||||||
$comments = $wpdb->get_results("SELECT comment_author, comment_ID, comment_post_ID, comment_date
|
|
||||||
FROM ".$wpdb->comments." WHERE comment_approved = '1' ORDER BY comment_date DESC LIMIT 0, $num_comments");
|
|
||||||
print "<div id='lastcomments'>";
|
|
||||||
if (empty($comments)) {
|
|
||||||
print "Keine Kommentare";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
print "<b>Die letzten ".$num_comments." Kommentare</b><br />";
|
|
||||||
foreach ($comments as $comment) {
|
|
||||||
$commentday = strtotime(substr($comment->comment_date,1,10));
|
|
||||||
$today = time();
|
|
||||||
$difference = ceil(($today - $commentday) / (60*60*24))-1;
|
|
||||||
if($difference == 0) {
|
|
||||||
$commentdate = "Heute um " . mysql2date("G:i", $comment->comment_date);
|
|
||||||
}
|
|
||||||
elseif($difference == 1) {
|
|
||||||
$commentdate = "Gestern um " . mysql2date("G:i", $comment->comment_date);
|
|
||||||
}
|
|
||||||
elseif($difference == 2) {
|
|
||||||
$commentdate = "Vorgestern um " . mysql2date("G:i", $comment->comment_date);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$commentdate = mysql2date("j. F G:i", $comment->comment_date);
|
|
||||||
}
|
|
||||||
|
|
||||||
print "<a href='" . get_permalink($comment->comment_post_ID) . "#comment-$comment->comment_ID'>$comment->comment_author@". get_the_title($comment->comment_post_ID) .", $commentdate</a><br />\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print "</div>";
|
|
||||||
}
|
|
||||||
|
|
||||||
### Zeigt die $num_reads meist gelesenen Posts an - CSS-id: #mostreads
|
|
||||||
function sem_showMostReads($num_reads = 10) {
|
|
||||||
global $wpdb;
|
|
||||||
$mostreads = $wpdb->get_results("SELECT post_title AS posttitle, guid AS postid, hits AS hits FROM ".$wpdb->posts." WHERE hits != '0' GROUP BY postid ORDER BY hits DESC LIMIT 0, $num_reads");
|
|
||||||
print "<div id='mostreads'>";
|
|
||||||
if (empty($mostreads)) {
|
|
||||||
print "... noch keine Einträge";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
print "<b>Die ".$num_reads." meist gelesenen Beiträge</b><br />";
|
|
||||||
foreach ($mostreads as $mostread) {
|
|
||||||
$posttitle = $mostread->posttitle;
|
|
||||||
$postid = $mostread->postid;
|
|
||||||
//$permalink = get_permalink($mostread->postid);
|
|
||||||
$hits = $mostread->hits;
|
|
||||||
print "<a target='_blank' href='".$postid."'>".$posttitle." (".$hits.")</a><br />\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print "</div>";
|
|
||||||
}
|
|
||||||
|
|
||||||
### Zeigt die $num_reads meist gelesenen Posts an - CSS-id: #mostreads - ACHTUNG: Das Ergebnis der Funktion basiert auf der statz-Tabelle
|
|
||||||
function sem_showMostReadsOld($num_reads = 10) {
|
|
||||||
global $wpdb;
|
|
||||||
$mostreads = $wpdb->get_results("SELECT post_title AS posttitle, ".$wpdb->posts.".guid AS postid,
|
|
||||||
COUNT(".$wpdb->statz.".page) AS count FROM ".$wpdb->posts.", ".$wpdb->statz." WHERE
|
|
||||||
".$wpdb->statz.".page = ".$wpdb->posts.".ID GROUP BY postid ORDER BY count DESC LIMIT 0, $num_reads");
|
|
||||||
print "<div id='mostreads'>";
|
|
||||||
if (empty($mostreads)) {
|
|
||||||
print "... noch keine Einträge";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
print "<b>Die ".$num_reads." meist gelesenen Beiträge</b><br />";
|
|
||||||
foreach ($mostreads as $mostread) {
|
|
||||||
$posttitle = $mostread->posttitle;
|
|
||||||
$postid = $mostread->postid;
|
|
||||||
//$permalink = get_permalink($mostread->postid);
|
|
||||||
$count = $mostread->count;
|
|
||||||
print "<a target='_blank' href='".$postid."'>".$posttitle." (".$count.")</a><br />\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print "</div>";
|
|
||||||
}
|
|
||||||
|
|
||||||
### Zeigt die $num_commented meist kommentierten Posts an - CSS-id: #mostcommented
|
|
||||||
function sem_showMostCommented($num_commented = 10) {
|
|
||||||
global $wpdb;
|
|
||||||
$mostcommented = $wpdb->get_results("SELECT guid, id, post_title, COUNT(*) AS count FROM ".$wpdb->comments.",". $wpdb->posts." WHERE
|
|
||||||
comment_approved = '1' AND comment_post_id = id GROUP BY id, post_title ORDER BY count DESC LIMIT 0, $num_commented");
|
|
||||||
|
|
||||||
print "<div id='mostcommented'>";
|
|
||||||
if (empty($mostcommented)) {
|
|
||||||
print "... noch keine Einträge";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
print "<b>Die ".$num_commented." meist kommentierten Beiträge</b><br />";
|
|
||||||
|
|
||||||
foreach ($mostcommented as $key => $mostcommented) {
|
|
||||||
$posttitle = $mostcommented->post_title;
|
|
||||||
$count = $mostcommented->count;
|
|
||||||
$postid = $mostcommented->guid;
|
|
||||||
print "<a target='_blank' href='".$postid."'>".$posttitle." (".$count.")</a><br />\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print "</div>";
|
|
||||||
}
|
|
||||||
|
|
||||||
### Zeigt einen Zähler der Hits im jeweiligen Post. ACHTUNG: FUNKTIONIERT NUR IM LOOP (index.php, single.php)
|
|
||||||
function sem_showPostHitsInLoop($postid) {
|
|
||||||
global $wpdb;
|
|
||||||
$hits = $wpdb->get_var("SELECT hits FROM $wpdb->posts WHERE ID = $postid LIMIT 0,1");
|
|
||||||
return $hits;
|
|
||||||
}
|
|
||||||
|
|
||||||
### Anzahl aller Posts/Pages
|
|
||||||
function sem_showTotalPosts() {
|
|
||||||
global $wpdb;
|
|
||||||
$totalposts = $wpdb->get_var("SELECT COUNT(ID) AS num FROM ".$wpdb->posts." WHERE post_status = 'publish' LIMIT 0,1");
|
|
||||||
return $totalposts; // Ganzzahl
|
|
||||||
}
|
|
||||||
|
|
||||||
### Anzahl aller Kommentare
|
|
||||||
function sem_showTotalComments() {
|
|
||||||
global $wpdb;
|
|
||||||
$totalcomments = $wpdb->get_var("SELECT COUNT(comment_ID) AS num FROM ".$wpdb->comments." WHERE comment_approved = '1' LIMIT 0,1");
|
|
||||||
return $totalcomments; // Ganzzahl
|
|
||||||
}
|
|
||||||
|
|
||||||
### Anzahl aller User seit Beginn der Statzaufzeichnung
|
|
||||||
function sem_showTotalUsers() {
|
|
||||||
global $wpdb;
|
|
||||||
$totalusers = $wpdb->get_var("SELECT SUM(visitors) FROM ".$wpdb->statzhist." LIMIT 0,1");
|
|
||||||
if(!$totalusers) $totalusers = 0;
|
|
||||||
return $totalusers; // Ganzzahl
|
|
||||||
}
|
|
||||||
|
|
||||||
### Anzahl User pro Tag im Durchschnitt
|
|
||||||
function sem_showAverageUserPerDay() {
|
|
||||||
$averageuser = ceil(sem_showTotalUsers() / sem_showStatzDays());
|
|
||||||
return $averageuser;
|
|
||||||
}
|
|
||||||
|
|
||||||
### Datum des 1. Posts = Blogstart
|
|
||||||
function sem_showFirstPostDate() {
|
|
||||||
global $wpdb;
|
|
||||||
$firstpostdate = $wpdb->get_var("SELECT MIN(post_date) FROM ".$wpdb->posts." WHERE post_status = 'publish' AND post_date != '0000-00-00 00:00:00' LIMIT 0,1");
|
|
||||||
$firstpostdate = mysql2date("j.n.Y", $firstpostdate);
|
|
||||||
return $firstpostdate; // String T.M.JJJJ
|
|
||||||
}
|
|
||||||
|
|
||||||
### Datum des 1. Kommentars
|
|
||||||
function sem_showFirstCommentDate() {
|
|
||||||
global $wpdb;
|
|
||||||
$firstcommentdate = $wpdb->get_var("SELECT MIN(comment_date) FROM ".$wpdb->comments." WHERE comment_approved = '1'
|
|
||||||
AND comment_date != '0000-00-00 00:00:00' LIMIT 0,1");
|
|
||||||
$firstcommentdate = mysql2date("j.n.Y", $firstcommentdate);
|
|
||||||
return $firstcommentdate; // String T.M.JJJJ
|
|
||||||
}
|
|
||||||
|
|
||||||
### Anzahl der Kommentierer nach Nicknamen
|
|
||||||
function sem_showNumCommenters() {
|
|
||||||
global $wpdb;
|
|
||||||
$totalcommenters = $wpdb->get_var("SELECT COUNT(DISTINCT comment_author) FROM ".$wpdb->comments." WHERE comment_approved = '1' LIMIT 0,1");
|
|
||||||
if(!$totalcommenters) $totalcommenters = 0;
|
|
||||||
return $totalcommenters; // Ganzzahl
|
|
||||||
}
|
|
||||||
|
|
||||||
### Blog besteht seit x Tagen
|
|
||||||
function sem_showPostDays() {
|
|
||||||
global $wpdb;
|
|
||||||
$firstdate = $wpdb->get_var("SELECT MIN(post_date) AS date FROM ".$wpdb->posts." WHERE post_status = 'publish' AND post_date != '0000-00-00 00:00' LIMIT 0,1");
|
|
||||||
$firstdate = strtotime($firstdate); $now = time();
|
|
||||||
$blogdays = (int) (($now - $firstdate) / (60*60*24));
|
|
||||||
$blogdays = $blogdays + 1;
|
|
||||||
return $blogdays; // Ganzzahl
|
|
||||||
}
|
|
||||||
|
|
||||||
### Tage seit 1. Kommentar
|
|
||||||
function sem_showCommentDays() {
|
|
||||||
global $wpdb;
|
|
||||||
$firstdate = $wpdb->get_var("SELECT MIN(comment_date) AS date FROM ".$wpdb->comments." LIMIT 0,1");
|
|
||||||
$firstdate = strtotime($firstdate); $now = time();
|
|
||||||
$commentdays = (int) (($now - $firstdate) / (60*60*24));
|
|
||||||
$commentdays = $commentdays + 1;
|
|
||||||
return $commentdays; // Ganzzahl
|
|
||||||
}
|
|
||||||
|
|
||||||
### durchschn. Posts pro Tag
|
|
||||||
function sem_showPostsPerDay() {
|
|
||||||
global $wpdb;
|
|
||||||
$postsperday = (int) sem_showTotalPosts() / (int) sem_showPostDays();
|
|
||||||
return $postsperday; // Ganzzahl
|
|
||||||
}
|
|
||||||
|
|
||||||
### durchschn. Kommentare pro Tag
|
|
||||||
function sem_showCommentsPerDay() {
|
|
||||||
global $wpdb;
|
|
||||||
$commentsperday = (int) sem_showTotalComments() / (int) sem_showCommentDays();
|
|
||||||
return $commentsperday; // Ganzzahl
|
|
||||||
}
|
|
||||||
|
|
||||||
### Startdatum der Gesamtstatistik (Basis: statzhist)
|
|
||||||
function sem_showStatzStartDate() {
|
|
||||||
global $wpdb;
|
|
||||||
$statzhiststartdate = $wpdb->get_var("SELECT MIN(date) FROM ".$wpdb->statzhist." WHERE date != '0000-00-00 00:00' LIMIT 0,1");
|
|
||||||
$statzhiststartdate = mysql2date("j.n.Y", $statzhiststartdate);
|
|
||||||
// if(!$statzhiststartdate) $statzhiststartdate= "xx.xx.xxxx";
|
|
||||||
return $statzhiststartdate; // String T.M.JJJJ
|
|
||||||
}
|
|
||||||
|
|
||||||
### Dauer der Statistikaufzeichnung in Tagen (Basis: statzhist)
|
|
||||||
function sem_showStatzDays() {
|
|
||||||
global $wpdb;
|
|
||||||
$firstdate = $wpdb->get_var("SELECT MIN(date) FROM ".$wpdb->statzhist." LIMIT 0,1");
|
|
||||||
if(!$firstdate) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$firstdate = strtotime($firstdate); $now = time();
|
|
||||||
$statzdays = (int) (($now - $firstdate) / (60*60*24));
|
|
||||||
return $statzdays; // Ganzzahl
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
### Anzahl der Online-Besucher - Verweildauer in den Einstellungen
|
|
||||||
function sem_showNumUsersOnline() {
|
|
||||||
global $wpdb;
|
|
||||||
$sem_options = get_option('semmelstatzR_options'); ### optionsarray auslesen
|
|
||||||
$onlinetime = $sem_options["statz_online_time"];
|
|
||||||
$numonline = $wpdb->get_var("SELECT COUNT(DISTINCT ip) FROM ".$wpdb->statz." WHERE time > Now() - INTERVAL ".$onlinetime." SECOND");
|
|
||||||
return $numonline; // Ganzzahl
|
|
||||||
}
|
|
||||||
|
|
||||||
### Anzahl der heutigen Besucher
|
|
||||||
function sem_showUsersToday() {
|
|
||||||
global $wpdb; $today = date("Y-m-d");
|
|
||||||
$todayusers = $wpdb->get_var("SELECT COUNT(DISTINCT ip) FROM ".$wpdb->statz." WHERE time >= '$today' LIMIT 0, 1");
|
|
||||||
return $todayusers;
|
|
||||||
}
|
|
||||||
|
|
||||||
### Anzahl der gestrigen Besucher
|
|
||||||
function sem_showUsersYesterday() {
|
|
||||||
global $wpdb;
|
|
||||||
$yesterdaysusers = $wpdb->get_var("SELECT visitors FROM ".$wpdb->statzhist." WHERE date = substr(DATE_SUB(NOW(), INTERVAL 1 DAY),1,10) LIMIT 0, 1");
|
|
||||||
return $yesterdaysusers;
|
|
||||||
}
|
|
||||||
|
|
||||||
##################################################### Ende TEMPLATE-Funktionen
|
|
||||||
|
|
||||||
?>
|
?>
|
25
trunk/semr_image.php
Normale Datei
25
trunk/semr_image.php
Normale Datei
|
@ -0,0 +1,25 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* To change this template, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
define('SEMMELSTATZR_STATZIMG', true);
|
||||||
|
/*
|
||||||
|
echo "<pre>";
|
||||||
|
print_r($_SERVER);
|
||||||
|
echo "</pre>";
|
||||||
|
*/
|
||||||
|
header('Cache-Control: no-cache');
|
||||||
|
header("X-Robots-Tag: noindex, nofollow", true);
|
||||||
|
|
||||||
|
require '../../../wp-load.php';
|
||||||
|
sem_writeStatz();
|
||||||
|
|
||||||
|
|
||||||
|
// Output transparent gif
|
||||||
|
|
||||||
|
header('Content-type: image/gif');
|
||||||
|
header('Content-length: 43');
|
||||||
|
|
||||||
|
echo base64_decode('R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==');
|
||||||
|
?>
|
Laden …
In neuem Issue referenzieren