.  
 *
 * $Id$
 * 
 */
/**  
 * based upon semmelstatz
 * Copyright (c) 2005-2009 Andreas 'Redunzl' Mueller (redunzl@gmx.de)
 *    
 * @license http://www.gnu.org/licenses/gpl-2.0.html
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License (version 2) as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
 
if(!current_user_can('manage_statz')) {
	die('Zugriff verweigert');
}
include_once plugin_dir_path(__FILE__).'includes/pChart/class/pData.class.php';
include_once plugin_dir_path(__FILE__).'includes/pChart/class/pDraw.class.php';
include_once plugin_dir_path(__FILE__).'includes/pChart/class/pImage.class.php';
### AKTUELL - Funktionen
	function sem_showWhoIsOnline() {
        global $wpdb;
		
		$sem_options = get_option('semmelstatzR_options'); ### optionsarray auslesen
		$onlinetime = $sem_options["statz_online_time"];
		
        $onlineusers = $wpdb->get_results("SELECT DISTINCT username, page, ip, time
		FROM ".$wpdb->statz." WHERE time > Now() - INTERVAL ".$onlinetime." SECOND GROUP BY ip ORDER BY page DESC");
        
        print "
".sem_showNumUsersOnline()." Besucher online - Heute: ".sem_showTodayStatz()."
";
        
        if (empty($onlineusers)) {
            print "... keine Einträge";
			print "
";
            return;
        }
        print "";
        print "";
        print "";
        print "| Username | ";
        print "Post/Page | ";
        print "TCP/IP | ";
        print "Zeit | ";
        print "
";
        print "";
        print "";
            foreach ($onlineusers as $key=>$onlineuser) {
                $username = $onlineuser->username;
                $page = $onlineuser->page;
                if ($page == 0) {
                    $link = get_option('siteurl');
                    $title = 'startseite'; //oder wie auch immer
                    }
                else {
                    $link = get_permalink($page);
                    $title = get_post($page); // muss so sein, da get_post = ARRAY
                    $title = $title->post_title; // sonst könnte man gleich diese Zeile nehmen
                }
                
                $ip = $onlineuser->ip;
                if(sem_checkIfIPisEncoded($ip) == true) $ip = sem_decodeIP($ip);
                $time = mysql2date("H:i",$onlineuser->time);
                print "";
                print "| ".$username." | ";
                print "".$title." | ";
                print "
                
                  
                
                  
                
                  | ";
                print "$time | ";
                print "
";
            }
        print "";
        print "
";
		print "
";
	}
	
	function sem_draw24HoursGoo() {
		global $wpdb;
		
		$results = $wpdb->get_results("SELECT time as hours, COUNT(DISTINCT ip) as visitors
		FROM ".$wpdb->statz." WHERE time >= NOW() - INTERVAL 23 HOUR GROUP BY HOUR(time) ORDER BY time ASC");
		
		print "Besucher: Die letzten 24 Stunden
";
        print "";
		
		if (empty($results)) {
            print "... noch keine Einträge
";
			print "
";
            return;
        }
		
    foreach ($results as $result) {
        $visitors[] = $result->visitors;
        $hours[] = mysql2date('H', $result->hours);
    }
    $MyData = new pData();  
    $MyData->addPoints($visitors,"Visitors");
    $MyData->setAxisName(0,"Visitors");
    $MyData->addPoints($hours,"Hours");
    $MyData->setAbscissa("Hours");
   
    $myPicture = new pImage(780,150,$MyData);    
    $myPicture->Antialias = FALSE;    
    $myPicture->drawRectangle(0,0,779,149,array("R"=>0,"G"=>0,"B"=>0));   
    $myPicture->setFontProperties(array("FontName"=>plugin_dir_path(__FILE__)."includes/pChart/fonts/Bedizen.ttf","FontSize"=>8));    
    $myPicture->setGraphArea(30,20,760,130);
    $scaleSettings = array("GridR"=>200,"GridG"=>200,"GridB"=>200);
    $myPicture->drawScale($scaleSettings);
    $myPicture->drawBarChart();
    @$myPicture->Render(WP_CONTENT_DIR."/cache/24HourGoo.png"); 
  
    print "";
    
    if(is_readable(WP_CONTENT_DIR."/cache/24HourGoo.png")) {
        print '

';
    } else if(!is_dir(WP_CONTENT_DIR."/cache")) {
        print semr_i18n('No Chart: Cannot find cache-folder!');
    } else if(!is_writable(WP_CONTENT_DIR."/cache")) {
        print semr_i18n('No Chart: Missing rights for cache-folder!');
    }
    print "
 ";
    print "";
    print "
";
}
	
	function sem_showDailyStatz() {
        global $wpdb;
		
		$sem_options = get_option('semmelstatzR_options'); ### optionsarray auslesen
		$limit = $sem_options["statz_days_limit"];
		$daylimit = $limit - 1;
		
		$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() - INTERVAL ".$daylimit." DAY
		GROUP BY date ORDER BY time DESC");
        
        print "".$limit."-Tage-Statistik
";
        if (empty($thedays)) {
            print "... noch keine Einträge";
			print "
";
            return;
        }
        print "";
        print "";
        print "";
        print "| Datum | ";
        print "Besucher | ";
        print "Hits | ";
        print "Referer | ";
        print "
";
        print "";
        print "";
            foreach ($thedays as $key=>$theday) {
                $date = $theday->date;
                $date = strtotime(substr($theday->date,1,10));
                $today = time();
                $difference = ceil(($today - $date) / (60*60*24))-1;
                if($difference == 0) {
                    $date = "Heute";
                }
                elseif($difference == 1) {
                    $date = "Gestern";
                }
                elseif($difference == 2) {
                    $date = "Vorgestern";
                }
                else {
                    $date = mysql2date("d.m.Y",$theday->date);
                }
                $hits = $theday->hits;
                $visitors = $theday->visitors;
                $referers = $theday->referers;
                print "";
                print "| $date | ";
                print "$visitors | ";
                print "$hits | ";
                print "$referers | ";
                print "
";
            }
        print "";
        print "| mehr... | ";
        print "
";
        print "";
        print "
";
		print "
";
	}
    
	function sem_showReferers() {
        global $wpdb, $homehost;
		
		$sem_options = get_option('semmelstatzR_options'); ### optionsarray auslesen
		$limit = $sem_options["statz_referer_limit"];
        $mask = $sem_options["statz_mask_referer"];
        
		$lastreferers = $wpdb->get_results("SELECT DISTINCT referer, time FROM ".$wpdb->statz." WHERE referer
        NOT LIKE '".$homehost."' ORDER BY time DESC  LIMIT 0, ".$limit);
        
        print "Die letzten ".$limit." Referer
";
        if (empty($lastreferers)) {
            print "... noch keine Einträge";
			print "
";
            return;
        }
        print "";
        print "";
        print "";
		print "| Zeit | ";
        print "Referer | ";
        print "
";
        print "";
        print "";
            foreach ($lastreferers as $key=>$lastreferer) {
                $referer = $lastreferer->referer;
                if(strlen($referer) >= 120) {
                    $printreferer = substr($referer, 0, 120)." ...";
                }
                else {
                    $printreferer = $referer;
                }
                $time = mysql2date("d.m.Y - H:i",$lastreferer->time);
                print "";
				print "| ".$time." | ";
                if($mask != true) {
                    print "".$printreferer." | ";
                }
                else {
                    $referer = htmlspecialchars($referer, ENT_QUOTES);
                    print "".$printreferer." | ";
                }
                print "
";
            }
        print "";
        print "
";
		print "
";
	}
	
	function sem_showKeyword() {
        global $wpdb;
		
		$sem_options = get_option('semmelstatzR_options'); ### optionsarray auslesen
        $limit = $sem_options["statz_keyword_limit"];
		
        $results = $wpdb->get_results("SELECT referer, time, ip FROM $wpdb->statz WHERE referer != 'NULL' ORDER BY time DESC");
		
		print "Die letzten $limit Suchbegriffe
";
        if (empty($results)) {
            print "... noch keine Einträge";
			print "
";
            return;
        }
        print "";
        print "";
        print "";
		print "| Zeit | ";
        print "Suchbegriff | ";
        print "TCP/IP | ";
        print "
";
        print "";
        print "";
		$i=0;
			foreach($results as $result) {
				$referer = $result->referer;
				$keyword = sem_getKeyword($referer);
				$ip = $result->ip;
				if(sem_checkIfIPisEncoded($ip) == true) $ip = sem_decodeIP($ip);
				$time = mysql2date('d.m.Y - H:i',$result->time);
					if($keyword) {
						print "";
						print "| ".$time." | ";
						print "".$keyword." | ";
						print "
						
						  
						
						  
						
						  | ";
						
						print "
";
						$i++;
					}
				if($i == $limit) break;
			}
		print "";
        print "
";
		print "
";
	}
	
	function sem_showTodayTopReads() {
        global $wpdb;
        $today = date("Y-m-d");
        $topreads = $wpdb->get_results("SELECT post_title AS posttitle, post_name as postname, guid AS postid,
        COUNT(".$wpdb->statz.".page) AS count FROM ".$wpdb->posts.", ".$wpdb->statz." WHERE
        ".$wpdb->statz.".page = ".$wpdb->posts.".ID AND time >= '$today' GROUP BY postid ORDER BY count DESC LIMIT 10");
        
        print "Die Top10 aller Posts & Pages heute
";
        if (empty($topreads)) {
            print "... noch keine Einträge";
			print "
";
            return;
        }
        print "";
        print "";
        print "";
        print "| Post/Page | ";
        print "Postname | ";
        print "Hits | ";
        print "
";
        print "";
        print "";
            foreach ($topreads as $key=>$topread) {
                $posttitle = $topread->posttitle;
                $postname = $topread->postname;
                $postid = $topread->postid;
                $count = $topread->count;
                print "";
                print "| ".$posttitle." | ";
                print "".$postname." | ";
                print "".$count." | ";
                print "
";
            }
        print "";
        print "
";
		print "
";
    }
	
	function sem_showTopReads() {
        global $wpdb;
		
		$sem_options = get_option('semmelstatzR_options'); ### optionsarray auslesen
        $limit = $sem_options["statz_topreads_limit"];
		
        $topreads = $wpdb->get_results("SELECT post_title AS posttitle, post_name as postname, guid AS postid,
        hits AS count FROM ".$wpdb->posts." WHERE hits != '0' GROUP BY postid ORDER BY hits DESC LIMIT 0, ".$limit);
        
        print "Die Top".$limit." aller Posts & Pages
";
        if (empty($topreads)) {
            print "... noch keine Einträge";
			print "
";
            return;
        }
        print "";
        print "";
        print "";
        print "| Post/Page | ";
        print "Postname | ";
        print "Hits | ";
        print "
";
        print "";
        print "";
            foreach ($topreads as $key=>$topread) {
                $posttitle = $topread->posttitle;
                $postname = $topread->postname;
                $postid = $topread->postid;
                $count = $topread->count;
                print "";
                print "| ".$posttitle." | ";
                print "".$postname." | ";
                print "".$count." | ";
                print "
";
            }
        print "";
        print "
";
		print "
";
    }
	
    function sem_showWhoWasOnlineToday() {
        global $wpdb;
        $today = date("Y-m-d");
        $todaysonlineusers = $wpdb->get_results("SELECT DISTINCT username, COUNT(username) as num FROM ".$wpdb->statz." WHERE
        time >= '$today' AND username != 'Gast' GROUP BY username ORDER BY num DESC");
        
        print "Bekannte Besucher heute
";
        if (empty($todaysonlineusers)) {
            print "... noch keine Einträge";
			print "
";
            return;
        }
        print "";
        print "";
        print "";
        print "| Besucher (Hits) | ";
        print "
";
        print "";
        print "";
            foreach ($todaysonlineusers as $key=>$todayonlineuser) {
                $username = $todayonlineuser->username;
                $num = $todayonlineuser->num;
                print "";
                print "| ".$username." (".$num.") | ";
                print "
";
            }
        print "";
        print "
";
		print "
";
    }
	
	function sem_showTopCommented() {
        global $wpdb;
        $topcommentedposts = $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 guid ORDER BY count DESC LIMIT 0, 10");
        
        print "Die Top10 aller kommentierter Posts
";
        if (empty($topcommentedposts)) {
            print "... noch keine Einträge";
			print "
";
            return;
        }
        
        print "";
        print "";
        print "";
        print "| Post/Page | ";
        print "Kommentare | ";
        print "
";
        print "";
        print "";
        
            foreach ($topcommentedposts as $key => $topcommentedpost) {
                $posttitle = $topcommentedpost->post_title;
                $count = $topcommentedpost->count;
                $postid = $topcommentedpost->guid;
                print "";
                print "|  ".$posttitle." | ";
                print "".$count." | ";
                print "
";
            }
            
        print "";
        print "
";
		print "
";
    }
    function sem_showCommenters() {
        global $wpdb;
		
		$sem_options = get_option('semmelstatzR_options'); ### optionsarray auslesen
        $limit = $sem_options["statz_comment_limit"];
		
        $topcommenters = $wpdb->get_results("SELECT comment_author AS commenter, COUNT(comment_ID) AS count,
        comment_author_email AS email, comment_author_url AS homepage FROM " .$wpdb->comments . " WHERE
        comment_approved = '1' GROUP BY comment_author ORDER BY count DESC LIMIT 0, ".$limit);
        
        print "Die Top".$limit." aller Kommentierer
";
        if (empty($topcommenters)) {
            print "... noch keine Einträge";
			print "
";
            return;
        }
        
        print "";
        print "";
        print "";
        print "| User | ";
        print "Email | ";
        print "Homepage | ";
        print "Kommentare | ";
        print "
";
        print "";
        print "";
        
            foreach ($topcommenters as $key=>$topcommenter) {
                $commenter = $topcommenter->commenter;
                $email = $topcommenter->email;
                $homepage = $topcommenter->homepage;
                    if($homepage=="http://") $homepage="";
                    $url=parse_url($homepage);
                    $homepage = $url['host'];
                $count = $topcommenter->count;
                print "";
                print "| ".$commenter." | ";
                print "".$email." | ";
                print "".$homepage." | ";
                print "".$count." | ";
                print "
";
            }
        
        print "";
        print "
";
		print "
";
    }
    
### AKTUELL Anzeige
	print "";
		print "
";
		print "
";
		print "
SemmelstatzR › Aktuell
";
		$sem_options = get_option('semmelstatzR_options'); ### optionsarray auslesen
		if ($sem_options["statz_show_useronline"]) sem_showWhoIsOnline();
		sem_draw24HoursGoo();
		if ($sem_options["statz_show_todayusers"]) sem_showWhoWasOnlineToday();
		if ($sem_options["statz_show_dailystatz"]) sem_showDailyStatz();
		if ($sem_options["statz_show_referers"]) sem_showReferers();
		if ($sem_options["statz_show_keywords"]) sem_showKeyword();
		if ($sem_options["statz_show_todayreads"]) sem_showTodayTopReads();
		if ($sem_options["statz_show_reads"]) sem_showTopReads();
		if ($sem_options["statz_show_topcommposts"]) sem_showTopCommented();
		if ($sem_options["statz_show_commenters"]) sem_showCommenters();
		sem_showCopyright();
	print "
 ";
		
?>