1002 Zeilen
		
	
	
		
			Kein EOL
		
	
	
		
			38 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			1002 Zeilen
		
	
	
		
			Kein EOL
		
	
	
		
			38 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/*
 | 
						|
Plugin Name: SemmelstatzR
 | 
						|
Plugin URI: http://sourceforge.net/projects/semmelstatzR/
 | 
						|
Description: Visitorstatistic for Wordpress, based upon the original wp-plugin semmelstatzR by Andreas 'Redunzl' Mueller (http://www.kopfhoch-studio.de)
 | 
						|
Version: 1.0.0 beta
 | 
						|
Author: Ortwin Pinke
 | 
						|
Author URI: http://www.ortwinpinke.de
 | 
						|
*/
 | 
						|
 | 
						|
/**
 | 
						|
 * file semmelstatzR.php
 | 
						|
 *
 | 
						|
 * @package SemmelstatzR
 | 
						|
 * @version $Rev$
 | 
						|
 * @author Ortwin Pinke <info@dceonline.de>
 | 
						|
 * @author Andreas 'Redunzl' Mueller
 | 
						|
 * @copyright (c)2011 PHP-Backoffice
 | 
						|
 * @copyright (c)2005-2009 kopfhoch-studio
 | 
						|
 * @link http://www.php-backoffice.de/projects/semmelstatzR
 | 
						|
 * @link http://sourceforge.net/projects/semmelstatz/
 | 
						|
 * @license http://www.gnu.org/licenses/gpl-2.0.html
 | 
						|
 *
 | 
						|
 * $Id$
 | 
						|
 *
 | 
						|
 * Copyright (c) 2005-2009 Andreas 'Redunzl' Mueller (redunzl@gmx.de)
 | 
						|
 * Copyright (c) 2011-     Ortwin Pinke (info@php-backoffice.de)
 | 
						|
 *
 | 
						|
 * This program is free software; you can redistribute it and/or modify
 | 
						|
 * it under the terms of the GNU General Public License (version 2) as
 | 
						|
 * published by the Free Software Foundation.
 | 
						|
 *
 | 
						|
 * This program is distributed in the hope that it will be useful,
 | 
						|
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 | 
						|
 * GNU General Public License for more details.
 | 
						|
 *
 | 
						|
 * You should have received a copy of the GNU General Public License along
 | 
						|
 * with this program; if not, write to the Free Software Foundation, Inc.,
 | 
						|
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
						|
*/
 | 
						|
 | 
						|
### konstante für version
 | 
						|
define('SEMMELSTATZR_VERSION', '1.0.0 Beta');
 | 
						|
	
 | 
						|
### Deklaration der Tabellennamen
 | 
						|
global $wpdb;
 | 
						|
$wpdb->statz = $wpdb->prefix . 'statz';
 | 
						|
$wpdb->statzhist = $wpdb->prefix . 'statzhist';
 | 
						|
    
 | 
						|
### Auslesen des Domainnamens
 | 
						|
global $homehost;
 | 
						|
if(substr($_SERVER['SERVER_NAME'],0,4) == 'www.') {
 | 
						|
    $homehost = '%' . substr($_SERVER['SERVER_NAME'],4) . '%';
 | 
						|
} else {
 | 
						|
    $homehost = '%' . $_SERVER['SERVER_NAME'] . '%';
 | 
						|
}
 | 
						|
 | 
						|
### localization
 | 
						|
if(!load_plugin_textdomain('semmelstatzR','/wp-content/languages/')) {
 | 
						|
    $plugin_dir = basename(dirname(__FILE__));
 | 
						|
    load_plugin_textdomain('semmelstatzR',null,$plugin_dir.'/locale/');
 | 
						|
}
 | 
						|
 | 
						|
	
 | 
						|
### Erstellen des Top-Level-Menus im Adminbereich
 | 
						|
	add_action('admin_menu', 'semmelstatzR_menu');
 | 
						|
	function semmelstatzR_menu() {
 | 
						|
		if (function_exists('add_menu_page')) {
 | 
						|
			add_menu_page('SemmelstatzR','SemmelstatzR', 'manage_statz', 'semmelstatzR/semmelstatzR-statz.php', '', plugins_url('semmelstatzR/img/statz_small.png'));
 | 
						|
		}
 | 
						|
		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', 'Historie', 'Historie', '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', 'Datenbank', 'Datenbank', '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', 'Einstellungen', 'Einstellungen', 'manage_statz', 'semmelstatzR/semmelstatzR-options.php');
 | 
						|
		}
 | 
						|
	}
 | 
						|
	
 | 
						|
### Default-Werte der statz-Optionen in das Array 'semmelstatzR_options' schreiben
 | 
						|
add_action('init', 'sem_init_options');
 | 
						|
    function sem_init_options() {
 | 
						|
		global $wpdb;
 | 
						|
		
 | 
						|
		if(get_option('statz_options')) {
 | 
						|
			$wpdb->query("DELETE FROM $wpdb->options WHERE option_name LIKE 'statz%';"); // Löschen der alten Optionen
 | 
						|
		}
 | 
						|
        
 | 
						|
        if(!get_option('semmelstatzR_options')) {
 | 
						|
			$sem_options = array(
 | 
						|
				"statz_comment_limit" => 10,
 | 
						|
				"statz_datarecs_limit" => 100,
 | 
						|
				"statz_days_limit" => 7,
 | 
						|
				"statz_do_cron" => false,
 | 
						|
				"statz_encode_ip" => false,
 | 
						|
				"statz_keyword_limit" =>10,
 | 
						|
				"statz_referer_limit" => 10,
 | 
						|
				"statz_mask_referer" => false,
 | 
						|
				"statz_on_dashboard" => false,
 | 
						|
				"statz_online_time" => 180,
 | 
						|
				"statz_recdays_limit" => 20,
 | 
						|
				"statz_show_commenters" => true,
 | 
						|
				"statz_show_dailystatz" => true,
 | 
						|
				"statz_show_keywords" => true,
 | 
						|
				"statz_show_reads" => true,
 | 
						|
				"statz_show_referers" => true,
 | 
						|
				"statz_show_todayreads" => true,
 | 
						|
				"statz_show_todayusers" => true,
 | 
						|
				"statz_show_topcommposts" => true,
 | 
						|
				"statz_show_useronline" => true,
 | 
						|
				"statz_topreads_limit" => 10,
 | 
						|
				"statz_write_admins" => false,
 | 
						|
				"statz_write_users" => false
 | 
						|
			);
 | 
						|
			add_option( 'semmelstatzR_options', $sem_options );
 | 
						|
		}
 | 
						|
    }
 | 
						|
    
 | 
						|
### Anlegen der Tabellen, Optionen schreiben   
 | 
						|
    add_action('activate_semmelstatzR/semmelstatzR.php', 'sem_statzsetup');
 | 
						|
    function sem_statzsetup() {
 | 
						|
        global $wpdb;
 | 
						|
        if(@is_file(ABSPATH.'/wp-admin/upgrade-functions.php')) {
 | 
						|
            include_once(ABSPATH.'/wp-admin/upgrade-functions.php');
 | 
						|
        } elseif(@is_file(ABSPATH.'/wp-admin/includes/upgrade.php')) {
 | 
						|
            include_once(ABSPATH.'/wp-admin/includes/upgrade.php');
 | 
						|
        } else {
 | 
						|
            die('Kann <i>wp-admin/upgrade-functions.php</i> und <i>wp-admin/includes/upgrade.php</i> nicht finden!');
 | 
						|
        }
 | 
						|
		
 | 
						|
        $create_table = array();
 | 
						|
        $create_table['statz'] = "CREATE TABLE $wpdb->statz (
 | 
						|
            id int(11) unsigned NOT NULL auto_increment,
 | 
						|
            ip varchar(39) default NULL,
 | 
						|
            time datetime NOT NULL default '0000-00-00 00:00:00',
 | 
						|
            referer varchar(255) default NULL,
 | 
						|
            page int(11) unsigned NOT NULL default '0',
 | 
						|
            username varchar(255) default NULL,
 | 
						|
            PRIMARY KEY  (`id`))";
 | 
						|
        $create_table['statzhist'] = "CREATE TABLE $wpdb->statzhist (
 | 
						|
            id int(10) unsigned NOT NULL auto_increment,
 | 
						|
            date datetime NOT NULL default '0000-00-00 00:00:00',
 | 
						|
            visitors int(10) unsigned NOT NULL default '0',
 | 
						|
            hits int(10) unsigned NOT NULL default '0',
 | 
						|
            referers int(10) unsigned NOT NULL default '0',
 | 
						|
            PRIMARY KEY  (`id`))";
 | 
						|
            
 | 
						|
        maybe_create_table($wpdb->statz, $create_table['statz']);    
 | 
						|
        maybe_create_table($wpdb->statzhist, $create_table['statzhist']);
 | 
						|
		
 | 
						|
		$sql = $wpdb->query("SELECT host FROM $wpdb->statz");
 | 
						|
		if($sql) { $wpdb->query("ALTER TABLE $wpdb->statz DROP host"); }
 | 
						|
 | 
						|
		$sql = $wpdb->query("SELECT keyword FROM $wpdb->statz");
 | 
						|
		if($sql) { $wpdb->query("ALTER TABLE $wpdb->statz DROP keyword"); }
 | 
						|
        
 | 
						|
        maybe_add_column($wpdb->posts, 'hits', "ALTER TABLE $wpdb->posts ADD hits bigint(20) NOT NULL DEFAULT '0';"); // ab 3.2
 | 
						|
		
 | 
						|
		$wpdb->query("ALTER TABLE $wpdb->statz CHANGE ip ip VARCHAR(39) NULL DEFAULT NULL;"); 
 | 
						|
		
 | 
						|
		sem_init_options();
 | 
						|
        sem_writeOldDaysToHist();
 | 
						|
		
 | 
						|
		$role = get_role('administrator');
 | 
						|
		if(!$role->has_cap('manage_statz')) {
 | 
						|
			$role->add_cap('manage_statz');
 | 
						|
		}
 | 
						|
    }
 | 
						|
 | 
						|
### Zugriff analysieren und in statz-Tabelle schreiben
 | 
						|
    add_action('wp_head', 'sem_writeStatz');
 | 
						|
    function sem_writeStatz() {
 | 
						|
        global $wpdb, $wp_query, $isBot, $isAdmin, $page;
 | 
						|
		$sem_options = get_option('semmelstatzR_options'); ### optionsarray auslesen
 | 
						|
        
 | 
						|
        sem_writeYesterdayToHist();
 | 
						|
        $useragent = $wpdb->escape($_SERVER['HTTP_USER_AGENT']);
 | 
						|
        $isBot = sem_AreYouBot($useragent);
 | 
						|
        $username = sem_getUsername();
 | 
						|
        
 | 
						|
        if(($isBot == true)
 | 
						|
        || ($isAdmin == 0 && $sem_options['statz_write_users'] == false)
 | 
						|
        || ($isAdmin == 1 && $sem_options['statz_write_admins'] == false)
 | 
						|
        || is_404()
 | 
						|
        ) return;
 | 
						|
        
 | 
						|
        $userip = $wpdb->escape($_SERVER['REMOTE_ADDR']);
 | 
						|
        if($sem_options['statz_encode_ip'] == true) $userip = sem_encodeIP($userip);
 | 
						|
        
 | 
						|
		$referer = $wpdb->escape(urldecode($_SERVER['HTTP_REFERER']));
 | 
						|
        $blogtime = gmdate('Y-m-d H:i:s', current_time('timestamp'));
 | 
						|
        
 | 
						|
        if (!empty($referer)) {
 | 
						|
            if(get_option('blog_charset') == 'iso-8859-1') $referer = utf8_decode($referer);
 | 
						|
			$referer = "'".$referer."'";
 | 
						|
        }
 | 
						|
		else {
 | 
						|
			$referer = 'NULL';
 | 
						|
		}
 | 
						|
 | 
						|
        $readingnow = wp_title('', false);
 | 
						|
        if(empty($readingnow)) {
 | 
						|
            $page = 0;
 | 
						|
        } else {
 | 
						|
            $page = $wp_query->post->ID;
 | 
						|
        }
 | 
						|
		
 | 
						|
		$wpdb->query("INSERT INTO $wpdb->statz (ip, time, referer, page, username)
 | 
						|
        VALUES('$userip', '$blogtime', $referer, $page, '$username')");
 | 
						|
        
 | 
						|
        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
 | 
						|
        }
 | 
						|
    }
 | 
						|
    
 | 
						|
### Zeitgesteuertes Limitieren der statz-Tabelle
 | 
						|
    // Wenn semmelKron JA UND statz_next_cron älter JETZT, dann...
 | 
						|
	$sem_options = get_option('semmelstatzR_options'); ### optionsarray auslesen
 | 
						|
	if($sem_options['statz_do_cron'] == true && $sem_options['statz_next_cron'] < time()) { 
 | 
						|
        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
 | 
						|
function sem_dashboardStatz() {
 | 
						|
    echo '<p>';
 | 
						|
    printf(_n("%d Visitor online", "%d Visitors online", sem_showNumUsersOnline(), "semmelstatzR"), sem_showNumUsersOnline());
 | 
						|
    echo ' - ';
 | 
						|
    printf(__("Today: %s", "semmelstatzR"),sem_showTodayStatz());
 | 
						|
    echo ' <a title="'.__("more...", "semmelstatzR").'" href="'.get_option('siteurl').'/wp-admin/admin.php?page=semmelstatzR/semmelstatzR-statz.php">»»</a>';
 | 
						|
    echo '</p>';
 | 
						|
}
 | 
						|
	
 | 
						|
### Widget für die Mini-STATZ
 | 
						|
add_action('wp_dashboard_setup', 'sem_dashboardStatz_setup');
 | 
						|
function sem_dashboardStatz_setup() {
 | 
						|
    $sem_options = get_option('semmelstatzR_options'); ### optionsarray auslesen
 | 
						|
    if(!current_user_can('manage_statz')) return;
 | 
						|
    if($sem_options['statz_on_dashboard'] != true) return;
 | 
						|
    wp_add_dashboard_widget( 'sem_dashboardStatz', 'SemmelstatzR', 'sem_dashboardStatz' );
 | 
						|
}
 | 
						|
 | 
						|
### Mini-Statz für Dashboard-Widget & AKTUELL-Anzeige 
 | 
						|
	function sem_showTodayStatz() {
 | 
						|
        global $wpdb;
 | 
						|
        $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");
 | 
						|
        $thedays = array(array('hits' => 33));
 | 
						|
        if (empty($thedays)) {
 | 
						|
            return "<small>".__("... no entries", "semmelstatzR")."</small>";
 | 
						|
        }
 | 
						|
        foreach($thedays as $key=>$theday) {
 | 
						|
            $date = mysql2date("l",$theday->date);
 | 
						|
            $hits = $theday->hits;
 | 
						|
            $visitors = $theday->visitors;
 | 
						|
            $referers = $theday->referers;
 | 
						|
        }
 | 
						|
        return sprintf(_n("%d Visitor","%d Visitors",$visitors, "semmelstatzR"),$visitors)." - "
 | 
						|
               .sprintf(_n("%d Hit","%d Hits",$hits, "semmelstatzR"),$hits)." -  "
 | 
						|
               .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
 | 
						|
 | 
						|
?>
 |