diff --git a/trunk/_psd/statzR_small_sfnet.psd b/trunk/_psd/statzR_small_sfnet.psd
new file mode 100644
index 0000000..b58221f
Binary files /dev/null and b/trunk/_psd/statzR_small_sfnet.psd differ
diff --git a/trunk/_psd/statz_small.psd b/trunk/_psd/statz_small.psd
new file mode 100644
index 0000000..a8a08bf
Binary files /dev/null and b/trunk/_psd/statz_small.psd differ
diff --git a/trunk/img/statzR.png b/trunk/img/statzR.png
new file mode 100644
index 0000000..5d86720
Binary files /dev/null and b/trunk/img/statzR.png differ
diff --git a/trunk/includes/functions.semr.php b/trunk/includes/functions.semr.php
new file mode 100644
index 0000000..4636ca2
--- /dev/null
+++ b/trunk/includes/functions.semr.php
@@ -0,0 +1,473 @@
+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 "
semmelstatzR ". SEMMELSTATZR_VERSION . " happily coded by PHP-Backoffice
+
+
";
+ }
+
+### 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
+?>
\ No newline at end of file
diff --git a/trunk/includes/functions.semr_template.php b/trunk/includes/functions.semr_template.php
new file mode 100644
index 0000000..ff5f77a
--- /dev/null
+++ b/trunk/includes/functions.semr_template.php
@@ -0,0 +1,267 @@
+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 "";
+ if (empty($lastposts)) {
+ print "... noch keine Beiträge";
+ }
+ else {
+ print "
Die letzten ".$num_posts." Beiträge";
+ foreach ($lastposts as $lastpost) {
+ $posttitle = $lastpost->post_title;
+ $permalink = get_permalink($lastpost->ID);
+ $postdate = $lastpost->post_date;
+ print "
".$posttitle."\n";
+ }
+ }
+ print "
";
+ }
+
+### 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 "";
+ }
+
+### 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 "";
+ if (empty($mostreads)) {
+ print "... noch keine Einträge";
+ }
+ else {
+ print "
Die ".$num_reads." meist gelesenen Beiträge";
+ foreach ($mostreads as $mostread) {
+ $posttitle = $mostread->posttitle;
+ $postid = $mostread->postid;
+ //$permalink = get_permalink($mostread->postid);
+ $hits = $mostread->hits;
+ print "
".$posttitle." (".$hits.")\n";
+ }
+ }
+ print "
";
+ }
+
+### 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 "";
+ if (empty($mostreads)) {
+ print "... noch keine Einträge";
+ }
+ else {
+ print "
Die ".$num_reads." meist gelesenen Beiträge";
+ foreach ($mostreads as $mostread) {
+ $posttitle = $mostread->posttitle;
+ $postid = $mostread->postid;
+ //$permalink = get_permalink($mostread->postid);
+ $count = $mostread->count;
+ print "
".$posttitle." (".$count.")\n";
+ }
+ }
+ print "
";
+ }
+
+### 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 "";
+ }
+
+### 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
+?>
\ No newline at end of file
diff --git a/trunk/semmelstatzR-options.php b/trunk/semmelstatzR-options.php
index 7414f3c..6c6b07f 100644
--- a/trunk/semmelstatzR-options.php
+++ b/trunk/semmelstatzR-options.php
@@ -42,14 +42,15 @@ if(!current_user_can('manage_statz')) {
$sem_options['statz_show_todayusers'] = $_POST['statz_show_todayusers'];
$sem_options['statz_on_dashboard'] = $_POST['statz_on_dashboard'];
$sem_options['statz_datarecs_limit'] = $_POST['statz_datarecs_limit'];
+ $sem_options['statz_use_img'] = $_POST['statz_use_img'];
update_option("semmelstatzR_options", $sem_options);
- echo 'Einstellungen gespeichert
';
+ echo ''.semr_e('Options saved').'
';
}
if(isset($_POST['trunc_save'])) {
if ($result == sem_truncateStatzTable()) {
- echo "Die statz-Tabelle wurde erfolgreich geleert.
";
+ echo "".semr_e('statz-table emptied succesfully.')."
";
}
}
@@ -92,11 +93,19 @@ if(!current_user_can('manage_statz')) {