xref: /plugin/statistics/admin.php (revision 13a86c14dd44fecbedcec6e9aeeac65f7b6a4f45)
11878f16fSAndreas Gohr<?php
21878f16fSAndreas Gohr/**
31878f16fSAndreas Gohr * statistics plugin
41878f16fSAndreas Gohr *
51878f16fSAndreas Gohr * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
66b6f8822SAndreas Gohr * @author     Andreas Gohr <gohr@splitbrain.org>
71878f16fSAndreas Gohr */
81878f16fSAndreas Gohr
91878f16fSAndreas Gohr// must be run within Dokuwiki
101878f16fSAndreas Gohrif(!defined('DOKU_INC')) die();
111878f16fSAndreas Gohr
122998b1f6SAndreas Gohr
131878f16fSAndreas Gohr/**
141878f16fSAndreas Gohr * All DokuWiki plugins to extend the admin function
151878f16fSAndreas Gohr * need to inherit from this class
161878f16fSAndreas Gohr */
171878f16fSAndreas Gohrclass admin_plugin_statistics extends DokuWiki_Admin_Plugin {
18a901d721SAndreas Gohr    public    $dblink = null;
19a901d721SAndreas Gohr    protected $opt    = '';
20a901d721SAndreas Gohr    protected $from   = '';
21a901d721SAndreas Gohr    protected $to     = '';
22a901d721SAndreas Gohr    protected $start  = '';
23a901d721SAndreas Gohr    protected $tlimit = '';
24a901d721SAndreas Gohr
25a901d721SAndreas Gohr    /**
26a901d721SAndreas Gohr     * Available statistic pages
27a901d721SAndreas Gohr     */
28a901d721SAndreas Gohr    protected $pages  = array('dashboard','page','referer','newreferer',
295bccfe87SAndreas Gohr                              'outlinks','searchengines','searchphrases',
305bccfe87SAndreas Gohr                              'searchwords', 'internalsearchphrases',
315bccfe87SAndreas Gohr                              'internalsearchwords','browsers','os',
3225446aa2SAndreas Gohr                              'countries','resolution','viewport');
331878f16fSAndreas Gohr
341878f16fSAndreas Gohr    /**
356b6f8822SAndreas Gohr     * Initialize the helper
366b6f8822SAndreas Gohr     */
376b6f8822SAndreas Gohr    public function __construct() {
386b6f8822SAndreas Gohr        $this->hlp = plugin_load('helper','statistics');
396b6f8822SAndreas Gohr    }
406b6f8822SAndreas Gohr
416b6f8822SAndreas Gohr    /**
421878f16fSAndreas Gohr     * Access for managers allowed
431878f16fSAndreas Gohr     */
446b6f8822SAndreas Gohr    public function forAdminOnly(){
451878f16fSAndreas Gohr        return false;
461878f16fSAndreas Gohr    }
471878f16fSAndreas Gohr
481878f16fSAndreas Gohr    /**
491878f16fSAndreas Gohr     * return sort order for position in admin menu
501878f16fSAndreas Gohr     */
516b6f8822SAndreas Gohr    public function getMenuSort() {
526b6f8822SAndreas Gohr        return 350;
531878f16fSAndreas Gohr    }
541878f16fSAndreas Gohr
551878f16fSAndreas Gohr    /**
561878f16fSAndreas Gohr     * handle user request
571878f16fSAndreas Gohr     */
586b6f8822SAndreas Gohr    public function handle() {
59264f1744SAndreas Gohr        $this->opt = preg_replace('/[^a-z]+/','',$_REQUEST['opt']);
60a901d721SAndreas Gohr        if(!in_array($this->opt,$this->pages)) $this->opt = 'dashboard';
61a901d721SAndreas Gohr
6295eb68e6SAndreas Gohr        $this->start = (int) $_REQUEST['s'];
63e8699bceSAndreas Gohr        $this->setTimeframe($_REQUEST['f'],$_REQUEST['t']);
64e8699bceSAndreas Gohr    }
6595eb68e6SAndreas Gohr
66e8699bceSAndreas Gohr    /**
67e8699bceSAndreas Gohr     * set limit clause
68e8699bceSAndreas Gohr     */
696b6f8822SAndreas Gohr    public function setTimeframe($from,$to){
70264f1744SAndreas Gohr        // fixme add better sanity checking here:
71e8699bceSAndreas Gohr        $from = preg_replace('/[^\d\-]+/','',$from);
72e8699bceSAndreas Gohr        $to   = preg_replace('/[^\d\-]+/','',$to);
73e8699bceSAndreas Gohr        if(!$from) $from = date('Y-m-d');
74e8699bceSAndreas Gohr        if(!$to)   $to   = date('Y-m-d');
75264f1744SAndreas Gohr
76264f1744SAndreas Gohr        //setup limit clause
772ee939eeSAndreas Gohr        $tlimit = "A.dt >= '$from 00:00:00' AND A.dt <= '$to 23:59:59'";
78e8699bceSAndreas Gohr        $this->tlimit = $tlimit;
79e8699bceSAndreas Gohr        $this->from   = $from;
80e8699bceSAndreas Gohr        $this->to     = $to;
811878f16fSAndreas Gohr    }
821878f16fSAndreas Gohr
831878f16fSAndreas Gohr    /**
8479b4a855SAndreas Gohr     * Output the Statistics
851878f16fSAndreas Gohr     */
861878f16fSAndreas Gohr    function html() {
871d2d78ccSAndreas Gohr        echo '<div id="plugin__statistics">';
880c3b1e44SAndreas Gohr        echo '<h1>'.$this->getLang('menu').'</h1>';
89264f1744SAndreas Gohr        $this->html_timeselect();
90441bfb8eSAndreas Gohr        tpl_flush();
91264f1744SAndreas Gohr
9279b4a855SAndreas Gohr        $method = 'html_'.$this->opt;
9379b4a855SAndreas Gohr        if(method_exists($this,$method)){
94a901d721SAndreas Gohr            echo '<div class="plg_stats_'.$this->opt.'">';
95a901d721SAndreas Gohr            echo '<h2>'.$this->getLang($this->opt).'</h2>';
9679b4a855SAndreas Gohr            $this->$method();
97a901d721SAndreas Gohr            echo '</div>';
9814d99ec0SAndreas Gohr        }
991d2d78ccSAndreas Gohr        echo '</div>';
10014d99ec0SAndreas Gohr    }
10114d99ec0SAndreas Gohr
1026b6f8822SAndreas Gohr    /**
1036b6f8822SAndreas Gohr     * Return the TOC
1046b6f8822SAndreas Gohr     *
1056b6f8822SAndreas Gohr     * @return array
1066b6f8822SAndreas Gohr     */
10747ffcf7dSAndreas Gohr    function getTOC(){
10847ffcf7dSAndreas Gohr        $toc = array();
109a901d721SAndreas Gohr        foreach($this->pages as $page){
11047ffcf7dSAndreas Gohr            $toc[] = array(
11147ffcf7dSAndreas Gohr                    'link'  => '?do=admin&amp;page=statistics&amp;opt='.$page.'&amp;f='.$this->from.'&amp;t='.$this->to,
11247ffcf7dSAndreas Gohr                    'title' => $this->getLang($page),
11347ffcf7dSAndreas Gohr                    'level' => 1,
11447ffcf7dSAndreas Gohr                    'type'  => 'ul'
11547ffcf7dSAndreas Gohr            );
11647ffcf7dSAndreas Gohr        }
11747ffcf7dSAndreas Gohr        return $toc;
1189da6395dSAndreas Gohr    }
1199da6395dSAndreas Gohr
120dc7b1e5eSAndreas Gohr
121dc7b1e5eSAndreas Gohr    function html_graph($name,$width,$height){
122dc7b1e5eSAndreas Gohr        $url = DOKU_BASE.'lib/plugins/statistics/img.php?img='.$name.
123dc7b1e5eSAndreas Gohr               '&amp;f='.$this->from.'&amp;t='.$this->to;
124dc7b1e5eSAndreas Gohr        echo '<img src="'.$url.'" class="graph" width="'.$width.'" height="'.$height.'"/>';
125dc7b1e5eSAndreas Gohr    }
126dc7b1e5eSAndreas Gohr
127dc7b1e5eSAndreas Gohr
1286b6f8822SAndreas Gohr    /**
1296b6f8822SAndreas Gohr     * Outputs pagination links
1306b6f8822SAndreas Gohr     *
1316b6f8822SAndreas Gohr     * @param type $limit
1326b6f8822SAndreas Gohr     * @param type $next
1336b6f8822SAndreas Gohr     */
1342507f8e0SAndreas Gohr    function html_pager($limit,$next){
1352507f8e0SAndreas Gohr        echo '<div class="plg_stats_pager">';
1362507f8e0SAndreas Gohr
1372507f8e0SAndreas Gohr        if($this->start > 0){
1382507f8e0SAndreas Gohr            $go = max($this->start - $limit, 0);
1390c3b1e44SAndreas Gohr            echo '<a href="?do=admin&amp;page=statistics&amp;opt='.$this->opt.'&amp;f='.$this->from.'&amp;t='.$this->to.'&amp;s='.$go.'" class="prev">'.$this->getLang('prev').'</a>';
1402507f8e0SAndreas Gohr        }
1412507f8e0SAndreas Gohr
1422507f8e0SAndreas Gohr        if($next){
1432507f8e0SAndreas Gohr            $go = $this->start + $limit;
1440c3b1e44SAndreas Gohr            echo '<a href="?do=admin&amp;page=statistics&amp;opt='.$this->opt.'&amp;f='.$this->from.'&amp;t='.$this->to.'&amp;s='.$go.'" class="next">'.$this->getLang('next').'</a>';
1452507f8e0SAndreas Gohr        }
1462507f8e0SAndreas Gohr        echo '</div>';
1472507f8e0SAndreas Gohr    }
1482507f8e0SAndreas Gohr
149264f1744SAndreas Gohr    /**
150264f1744SAndreas Gohr     * Print the time selection menu
151264f1744SAndreas Gohr     */
15214d99ec0SAndreas Gohr    function html_timeselect(){
1536985b606SAndreas Gohr        $today   = date('Y-m-d');
1546985b606SAndreas Gohr        $last1   = date('Y-m-d',time()-(60*60*24));
1556985b606SAndreas Gohr        $last7   = date('Y-m-d',time()-(60*60*24*7));
1566985b606SAndreas Gohr        $last30  = date('Y-m-d',time()-(60*60*24*30));
15714d99ec0SAndreas Gohr
158264f1744SAndreas Gohr        echo '<div class="plg_stats_timeselect">';
1596985b606SAndreas Gohr        echo '<span>'.$this->getLang('time_select').'</span> ';
160264f1744SAndreas Gohr
161264f1744SAndreas Gohr        echo '<form action="" method="get">';
162264f1744SAndreas Gohr        echo '<input type="hidden" name="do" value="admin" />';
163264f1744SAndreas Gohr        echo '<input type="hidden" name="page" value="statistics" />';
164264f1744SAndreas Gohr        echo '<input type="hidden" name="opt" value="'.$this->opt.'" />';
165264f1744SAndreas Gohr        echo '<input type="text" name="f" value="'.$this->from.'" class="edit" />';
166264f1744SAndreas Gohr        echo '<input type="text" name="t" value="'.$this->to.'" class="edit" />';
167264f1744SAndreas Gohr        echo '<input type="submit" value="go" class="button" />';
16814d99ec0SAndreas Gohr        echo '</form>';
169264f1744SAndreas Gohr
1706985b606SAndreas Gohr        echo '<ul>';
1716985b606SAndreas Gohr        foreach(array('today','last1','last7','last30') as $time){
1726985b606SAndreas Gohr            echo '<li>';
1736985b606SAndreas Gohr            echo '<a href="?do=admin&amp;page=statistics&amp;opt='.$this->opt.'&amp;f='.$$time.'&amp;t='.$today.'">';
1746985b606SAndreas Gohr            echo $this->getLang('time_'.$time);
1756985b606SAndreas Gohr            echo '</a>';
1766985b606SAndreas Gohr            echo '</li>';
1776985b606SAndreas Gohr        }
1786985b606SAndreas Gohr        echo '</ul>';
1796985b606SAndreas Gohr
180264f1744SAndreas Gohr        echo '</div>';
18114d99ec0SAndreas Gohr    }
18214d99ec0SAndreas Gohr
18314d99ec0SAndreas Gohr
184f5f32cbfSAndreas Gohr    /**
185f5f32cbfSAndreas Gohr     * Print an introductionary screen
186f5f32cbfSAndreas Gohr     */
18714d99ec0SAndreas Gohr    function html_dashboard(){
188878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_dashboard').'</p>';
1892812a751SAndreas Gohr
1902812a751SAndreas Gohr        // general info
1912812a751SAndreas Gohr        echo '<div class="plg_stats_top">';
1926b6f8822SAndreas Gohr        $result = $this->hlp->Query()->aggregate($this->tlimit);
1931d2d78ccSAndreas Gohr
1941d2d78ccSAndreas Gohr        echo '<ul class="left">';
1951d2d78ccSAndreas Gohr        foreach(array('pageviews','sessions','visitors','users','logins') as $name){
196eabe0d07SAndreas Gohr            echo '<li><div class="li">'.sprintf($this->getLang('dash_'.$name),$result[$name]).'</div></li>';
197eabe0d07SAndreas Gohr        }
1982812a751SAndreas Gohr        echo '</ul>';
1991d2d78ccSAndreas Gohr
2001d2d78ccSAndreas Gohr        echo '<ul class="left">';
2011d2d78ccSAndreas Gohr        foreach(array('bouncerate','timespent','avgpages','newvisitors','registrations') as $name){
2021d2d78ccSAndreas Gohr            echo '<li><div class="li">'.sprintf($this->getLang('dash_'.$name),$result[$name]).'</div></li>';
2031d2d78ccSAndreas Gohr        }
2041d2d78ccSAndreas Gohr        echo '</ul>';
2051d2d78ccSAndreas Gohr
206dc7b1e5eSAndreas Gohr        $this->html_graph('trend',700,280);
2072812a751SAndreas Gohr        echo '</div>';
2082812a751SAndreas Gohr
20914d99ec0SAndreas Gohr
21087d5e44bSAndreas Gohr        // top pages today
211264f1744SAndreas Gohr        echo '<div>';
212dc7b1e5eSAndreas Gohr        echo '<h2>'.$this->getLang('dash_mostpopular').'</h2>';
2136b6f8822SAndreas Gohr        $result = $this->hlp->Query()->pages($this->tlimit,$this->start,15);
2142812a751SAndreas Gohr        $this->html_resulttable($result);
2150c3b1e44SAndreas Gohr        echo '<a href="?do=admin&amp;page=statistics&amp;opt=page&amp;f='.$this->from.'&amp;t='.$this->to.'" class="more">'.$this->getLang('more').'</a>';
216264f1744SAndreas Gohr        echo '</div>';
21787d5e44bSAndreas Gohr
21887d5e44bSAndreas Gohr        // top referer today
219264f1744SAndreas Gohr        echo '<div>';
220dc7b1e5eSAndreas Gohr        echo '<h2>'.$this->getLang('dash_newincoming').'</h2>';
2216b6f8822SAndreas Gohr        $result = $this->hlp->Query()->newreferer($this->tlimit,$this->start,15);
2222812a751SAndreas Gohr        $this->html_resulttable($result);
2230c3b1e44SAndreas Gohr        echo '<a href="?do=admin&amp;page=statistics&amp;opt=newreferer&amp;f='.$this->from.'&amp;t='.$this->to.'" class="more">'.$this->getLang('more').'</a>';
224264f1744SAndreas Gohr        echo '</div>';
22554f6c432SAndreas Gohr
22629dea504SAndreas Gohr        // top searches today
227264f1744SAndreas Gohr        echo '<div>';
228dc7b1e5eSAndreas Gohr        echo '<h2>'.$this->getLang('dash_topsearch').'</h2>';
2296b6f8822SAndreas Gohr        $result = $this->hlp->Query()->searchphrases($this->tlimit,$this->start,15);
23029dea504SAndreas Gohr        $this->html_resulttable($result);
2310c3b1e44SAndreas Gohr        echo '<a href="?do=admin&amp;page=statistics&amp;opt=searchphrases&amp;f='.$this->from.'&amp;t='.$this->to.'" class="more">'.$this->getLang('more').'</a>';
232264f1744SAndreas Gohr        echo '</div>';
23314d99ec0SAndreas Gohr    }
23414d99ec0SAndreas Gohr
235c67866d1SAndreas Gohr    function html_countries(){
236878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_countries').'</p>';
237878be5c9SAndreas Gohr        $this->html_graph('countries',400,200);
2386b6f8822SAndreas Gohr        $result = $this->hlp->Query()->countries($this->tlimit,$this->start,150);
2392507f8e0SAndreas Gohr        $this->html_resulttable($result,'',150);
2409da6395dSAndreas Gohr    }
2419da6395dSAndreas Gohr
2429da6395dSAndreas Gohr    function html_page(){
243878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_page').'</p>';
2446b6f8822SAndreas Gohr        $result = $this->hlp->Query()->pages($this->tlimit,$this->start,150);
2452507f8e0SAndreas Gohr        $this->html_resulttable($result,'',150);
2469da6395dSAndreas Gohr    }
2479da6395dSAndreas Gohr
2484f41a2ccSAndreas Gohr    function html_browsers(){
249878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_browsers').'</p>';
250878be5c9SAndreas Gohr        $this->html_graph('browsers',400,200);
2516b6f8822SAndreas Gohr        $result = $this->hlp->Query()->browsers($this->tlimit,$this->start,150,true);
2522507f8e0SAndreas Gohr        $this->html_resulttable($result,'',150);
25375fa767dSAndreas Gohr    }
25475fa767dSAndreas Gohr
255bd4217d3SAndreas Gohr    function html_os(){
256878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_os').'</p>';
257878be5c9SAndreas Gohr        $this->html_graph('os',400,200);
2586b6f8822SAndreas Gohr        $result = $this->hlp->Query()->os($this->tlimit,$this->start,150,true);
2592507f8e0SAndreas Gohr        $this->html_resulttable($result,'',150);
260bd4217d3SAndreas Gohr    }
261bd4217d3SAndreas Gohr
2629da6395dSAndreas Gohr    function html_referer(){
2636b6f8822SAndreas Gohr        $result = $this->hlp->Query()->aggregate($this->tlimit);
2642812a751SAndreas Gohr
2652812a751SAndreas Gohr        $all    = $result['search']+$result['external']+$result['direct'];
2662812a751SAndreas Gohr
26794023548SAndreas Gohr        if($all){
268878be5c9SAndreas Gohr            printf('<p>'.$this->getLang('intro_referer').'</p>',
269878be5c9SAndreas Gohr                   $all,$result['direct'],(100*$result['direct']/$all),
2702812a751SAndreas Gohr                   $result['search'],(100*$result['search']/$all),$result['external'],
2712812a751SAndreas Gohr                   (100*$result['external']/$all));
27294023548SAndreas Gohr        }
2732812a751SAndreas Gohr
2746b6f8822SAndreas Gohr        $result = $this->hlp->Query()->referer($this->tlimit,$this->start,150);
2752507f8e0SAndreas Gohr        $this->html_resulttable($result,'',150);
2769da6395dSAndreas Gohr    }
2779da6395dSAndreas Gohr
278e7a2f1e0SAndreas Gohr    function html_newreferer(){
279878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_newreferer').'</p>';
280e7a2f1e0SAndreas Gohr
2816b6f8822SAndreas Gohr        $result = $this->hlp->Query()->newreferer($this->tlimit,$this->start,150);
2822507f8e0SAndreas Gohr        $this->html_resulttable($result,'',150);
283e7a2f1e0SAndreas Gohr    }
284e7a2f1e0SAndreas Gohr
285e25286daSAndreas Gohr    function html_outlinks(){
286878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_outlinks').'</p>';
2876b6f8822SAndreas Gohr        $result = $this->hlp->Query()->outlinks($this->tlimit,$this->start,150);
288e25286daSAndreas Gohr        $this->html_resulttable($result,'',150);
289e25286daSAndreas Gohr    }
290e25286daSAndreas Gohr
29112dcdeccSAndreas Gohr    function html_searchphrases(){
292878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_searchphrases').'</p>';
2935bccfe87SAndreas Gohr        $result = $this->hlp->Query()->searchphrases(true,$this->tlimit,$this->start,150);
29412dcdeccSAndreas Gohr        $this->html_resulttable($result,'',150);
29512dcdeccSAndreas Gohr    }
29612dcdeccSAndreas Gohr
29712dcdeccSAndreas Gohr    function html_searchwords(){
298878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_searchwords').'</p>';
2995bccfe87SAndreas Gohr        $result = $this->hlp->Query()->searchwords(true,$this->tlimit,$this->start,150);
3005bccfe87SAndreas Gohr        $this->html_resulttable($result,'',150);
3015bccfe87SAndreas Gohr    }
3025bccfe87SAndreas Gohr
3035bccfe87SAndreas Gohr    function html_internalsearchphrases(){
304878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_internalsearchphrases').'</p>';
3055bccfe87SAndreas Gohr        $result = $this->hlp->Query()->searchphrases(false,$this->tlimit,$this->start,150);
3065bccfe87SAndreas Gohr        $this->html_resulttable($result,'',150);
3075bccfe87SAndreas Gohr    }
3085bccfe87SAndreas Gohr
3095bccfe87SAndreas Gohr    function html_internalsearchwords(){
310878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_internalsearchwords').'</p>';
3115bccfe87SAndreas Gohr        $result = $this->hlp->Query()->searchwords(false,$this->tlimit,$this->start,150);
31212dcdeccSAndreas Gohr        $this->html_resulttable($result,'',150);
31312dcdeccSAndreas Gohr    }
31412dcdeccSAndreas Gohr
31512dcdeccSAndreas Gohr    function html_searchengines(){
316878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_searchengines').'</p>';
3176b6f8822SAndreas Gohr        $result = $this->hlp->Query()->searchengines($this->tlimit,$this->start,150);
31812dcdeccSAndreas Gohr        $this->html_resulttable($result,'',150);
31912dcdeccSAndreas Gohr    }
32012dcdeccSAndreas Gohr
321c73e16f1SAndreas Gohr    function html_resolution(){
32225446aa2SAndreas Gohr        echo '<p>'.$this->getLang('intro_resolution').'</p>';
32325446aa2SAndreas Gohr        $this->html_graph('resolution',650,490);
324307baf3fSAndreas Gohr        $result = $this->hlp->Query()->resolution($this->tlimit,$this->start,150);
325307baf3fSAndreas Gohr        $this->html_resulttable($result,'',150);
32625446aa2SAndreas Gohr    }
327307baf3fSAndreas Gohr
32825446aa2SAndreas Gohr    function html_viewport(){
32925446aa2SAndreas Gohr        echo '<p>'.$this->getLang('intro_viewport').'</p>';
33025446aa2SAndreas Gohr        $this->html_graph('viewport',650,490);
33125446aa2SAndreas Gohr        $result = $this->hlp->Query()->viewport($this->tlimit,$this->start,150);
33225446aa2SAndreas Gohr        $this->html_resulttable($result,'',150);
333c73e16f1SAndreas Gohr    }
3349da6395dSAndreas Gohr
3359da6395dSAndreas Gohr
33614d99ec0SAndreas Gohr    /**
33714d99ec0SAndreas Gohr     * Display a result in a HTML table
33814d99ec0SAndreas Gohr     */
3392507f8e0SAndreas Gohr    function html_resulttable($result,$header='',$pager=0){
34014d99ec0SAndreas Gohr        echo '<table>';
3412812a751SAndreas Gohr        if(is_array($header)){
34214d99ec0SAndreas Gohr            echo '<tr>';
34314d99ec0SAndreas Gohr            foreach($header as $h){
34414d99ec0SAndreas Gohr                echo '<th>'.hsc($h).'</th>';
34514d99ec0SAndreas Gohr            }
34614d99ec0SAndreas Gohr            echo '</tr>';
3472812a751SAndreas Gohr        }
34814d99ec0SAndreas Gohr
3492507f8e0SAndreas Gohr        $count = 0;
3502ee939eeSAndreas Gohr        if(is_array($result)) foreach($result as $row){
35114d99ec0SAndreas Gohr            echo '<tr>';
35214d99ec0SAndreas Gohr            foreach($row as $k => $v){
353f3818071SAndreas Gohr                if($k == 'res_x') continue;
354f3818071SAndreas Gohr                if($k == 'res_y') continue;
355f3818071SAndreas Gohr
3562812a751SAndreas Gohr                echo '<td class="plg_stats_X'.$k.'">';
35714d99ec0SAndreas Gohr                if($k == 'page'){
35814d99ec0SAndreas Gohr                    echo '<a href="'.wl($v).'" class="wikilink1">';
35914d99ec0SAndreas Gohr                    echo hsc($v);
36014d99ec0SAndreas Gohr                    echo '</a>';
36114d99ec0SAndreas Gohr                }elseif($k == 'url'){
36254f6c432SAndreas Gohr                    $url = hsc($v);
36383b63546SAndreas Gohr                    $url = preg_replace('/^https?:\/\/(www\.)?/','',$url);
3642812a751SAndreas Gohr                    if(strlen($url) > 45){
3652812a751SAndreas Gohr                        $url = substr($url,0,30).' &hellip; '.substr($url,-15);
36654f6c432SAndreas Gohr                    }
36714d99ec0SAndreas Gohr                    echo '<a href="'.$v.'" class="urlextern">';
36854f6c432SAndreas Gohr                    echo $url;
36914d99ec0SAndreas Gohr                    echo '</a>';
3705bccfe87SAndreas Gohr                }elseif($k == 'ilookup'){
3715bccfe87SAndreas Gohr                    echo '<a href="'.wl('',array('id'=>$v,'do'=>'search')).'">Search</a>';
37229dea504SAndreas Gohr                }elseif($k == 'lookup'){
37329dea504SAndreas Gohr                    echo '<a href="http://www.google.com/search?q='.rawurlencode($v).'">';
374*13a86c14SAndreas Gohr                    echo '<img src="'.DOKU_BASE.'lib/plugins/statistics/ico/search/google.png" alt="Google" border="0" />';
37529dea504SAndreas Gohr                    echo '</a> ';
37629dea504SAndreas Gohr
37729dea504SAndreas Gohr                    echo '<a href="http://search.yahoo.com/search?p='.rawurlencode($v).'">';
378*13a86c14SAndreas Gohr                    echo '<img src="'.DOKU_BASE.'lib/plugins/statistics/ico/search/yahoo.png" alt="Yahoo!" border="0" />';
37929dea504SAndreas Gohr                    echo '</a> ';
38029dea504SAndreas Gohr
381*13a86c14SAndreas Gohr                    echo '<a href="http://www.bing.com/search?q='.rawurlencode($v).'">';
382*13a86c14SAndreas Gohr                    echo '<img src="'.DOKU_BASE.'lib/plugins/statistics/ico/search/bing.png" alt="Bing" border="0" />';
38329dea504SAndreas Gohr                    echo '</a> ';
38429dea504SAndreas Gohr
38512dcdeccSAndreas Gohr                }elseif($k == 'engine'){
386*13a86c14SAndreas Gohr                    include_once(dirname(__FILE__).'/inc/searchengines.php');
387*13a86c14SAndreas Gohr                    if(isset($SEARCHENGINEINFO[$v])){
388*13a86c14SAndreas Gohr                        echo '<a href="'.$SEARCHENGINEINFO[$v][1].'">'.$SEARCHENGINEINFO[$v][0].'</a>';
389*13a86c14SAndreas Gohr                    }else{
390*13a86c14SAndreas Gohr                        echo hsc(ucwords($v));
391*13a86c14SAndreas Gohr                    }
392*13a86c14SAndreas Gohr                }elseif($k == 'eflag'){
393*13a86c14SAndreas Gohr                    $this->html_icon('search',$v);
39475fa767dSAndreas Gohr                }elseif($k == 'bflag'){
395*13a86c14SAndreas Gohr                    $this->html_icon('browser',$v);
396bd4217d3SAndreas Gohr                }elseif($k == 'osflag'){
397*13a86c14SAndreas Gohr                    $this->html_icon('os',$v);
39875fa767dSAndreas Gohr                }elseif($k == 'cflag'){
399*13a86c14SAndreas Gohr                    $this->html_icon('flags',$v);
40014d99ec0SAndreas Gohr                }elseif($k == 'html'){
40114d99ec0SAndreas Gohr                    echo $v;
40214d99ec0SAndreas Gohr                }else{
40314d99ec0SAndreas Gohr                    echo hsc($v);
40414d99ec0SAndreas Gohr                }
40514d99ec0SAndreas Gohr                echo '</td>';
40614d99ec0SAndreas Gohr            }
40714d99ec0SAndreas Gohr            echo '</tr>';
4082507f8e0SAndreas Gohr
4092507f8e0SAndreas Gohr            if($pager && ($count == $pager)) break;
4102507f8e0SAndreas Gohr            $count++;
41114d99ec0SAndreas Gohr        }
41214d99ec0SAndreas Gohr        echo '</table>';
4132507f8e0SAndreas Gohr
4142507f8e0SAndreas Gohr        if($pager) $this->html_pager($pager,count($result) > $pager);
4151878f16fSAndreas Gohr    }
4161878f16fSAndreas Gohr
417*13a86c14SAndreas Gohr    function html_icon($type,$value){
418*13a86c14SAndreas Gohr        $value = strtolower(preg_replace('/[^\w]+/','',$value));
419*13a86c14SAndreas Gohr        $file  = 'lib/plugins/statistics/ico/'.$type.'/'.$value.'.png';
420*13a86c14SAndreas Gohr        if(file_exists(DOKU_INC.$file)){
421*13a86c14SAndreas Gohr            echo '<img src="'.DOKU_BASE.$file.'" alt="'.hsc($value).'" width="16" height="16" />';
422*13a86c14SAndreas Gohr        }
423*13a86c14SAndreas Gohr    }
4241878f16fSAndreas Gohr}
425