xref: /plugin/statistics/admin.php (revision f3818071cceb59d411af14ce9d681e63bacb16c8)
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">';
88264f1744SAndreas Gohr        echo '<h1>Access Statistics</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     * @fixme does this still work?
1326b6f8822SAndreas Gohr     *
1336b6f8822SAndreas Gohr     * @param type $limit
1346b6f8822SAndreas Gohr     * @param type $next
1356b6f8822SAndreas Gohr     */
1362507f8e0SAndreas Gohr    function html_pager($limit,$next){
1372507f8e0SAndreas Gohr        echo '<div class="plg_stats_pager">';
1382507f8e0SAndreas Gohr
1392507f8e0SAndreas Gohr        if($this->start > 0){
1402507f8e0SAndreas Gohr            $go = max($this->start - $limit, 0);
1412507f8e0SAndreas 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">previous page</a>';
1422507f8e0SAndreas Gohr        }
1432507f8e0SAndreas Gohr
1442507f8e0SAndreas Gohr        if($next){
1452507f8e0SAndreas Gohr            $go = $this->start + $limit;
1462507f8e0SAndreas 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">next page</a>';
1472507f8e0SAndreas Gohr        }
1482507f8e0SAndreas Gohr        echo '</div>';
1492507f8e0SAndreas Gohr    }
1502507f8e0SAndreas Gohr
151264f1744SAndreas Gohr    /**
152264f1744SAndreas Gohr     * Print the time selection menu
153264f1744SAndreas Gohr     */
15414d99ec0SAndreas Gohr    function html_timeselect(){
1556985b606SAndreas Gohr        $today   = date('Y-m-d');
1566985b606SAndreas Gohr        $last1   = date('Y-m-d',time()-(60*60*24));
1576985b606SAndreas Gohr        $last7   = date('Y-m-d',time()-(60*60*24*7));
1586985b606SAndreas Gohr        $last30  = date('Y-m-d',time()-(60*60*24*30));
15914d99ec0SAndreas Gohr
160264f1744SAndreas Gohr        echo '<div class="plg_stats_timeselect">';
1616985b606SAndreas Gohr        echo '<span>'.$this->getLang('time_select').'</span> ';
162264f1744SAndreas Gohr
163264f1744SAndreas Gohr        echo '<form action="" method="get">';
164264f1744SAndreas Gohr        echo '<input type="hidden" name="do" value="admin" />';
165264f1744SAndreas Gohr        echo '<input type="hidden" name="page" value="statistics" />';
166264f1744SAndreas Gohr        echo '<input type="hidden" name="opt" value="'.$this->opt.'" />';
167264f1744SAndreas Gohr        echo '<input type="text" name="f" value="'.$this->from.'" class="edit" />';
168264f1744SAndreas Gohr        echo '<input type="text" name="t" value="'.$this->to.'" class="edit" />';
169264f1744SAndreas Gohr        echo '<input type="submit" value="go" class="button" />';
17014d99ec0SAndreas Gohr        echo '</form>';
171264f1744SAndreas Gohr
1726985b606SAndreas Gohr        echo '<ul>';
1736985b606SAndreas Gohr        foreach(array('today','last1','last7','last30') as $time){
1746985b606SAndreas Gohr            echo '<li>';
1756985b606SAndreas Gohr            echo '<a href="?do=admin&amp;page=statistics&amp;opt='.$this->opt.'&amp;f='.$$time.'&amp;t='.$today.'">';
1766985b606SAndreas Gohr            echo $this->getLang('time_'.$time);
1776985b606SAndreas Gohr            echo '</a>';
1786985b606SAndreas Gohr            echo '</li>';
1796985b606SAndreas Gohr        }
1806985b606SAndreas Gohr        echo '</ul>';
1816985b606SAndreas Gohr
182264f1744SAndreas Gohr        echo '</div>';
18314d99ec0SAndreas Gohr    }
18414d99ec0SAndreas Gohr
18514d99ec0SAndreas Gohr
186f5f32cbfSAndreas Gohr    /**
187f5f32cbfSAndreas Gohr     * Print an introductionary screen
188f5f32cbfSAndreas Gohr     */
18914d99ec0SAndreas Gohr    function html_dashboard(){
190878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_dashboard').'</p>';
1912812a751SAndreas Gohr
1922812a751SAndreas Gohr        // general info
1932812a751SAndreas Gohr        echo '<div class="plg_stats_top">';
1946b6f8822SAndreas Gohr        $result = $this->hlp->Query()->aggregate($this->tlimit);
1951d2d78ccSAndreas Gohr
1961d2d78ccSAndreas Gohr        echo '<ul class="left">';
1971d2d78ccSAndreas Gohr        foreach(array('pageviews','sessions','visitors','users','logins') as $name){
198eabe0d07SAndreas Gohr            echo '<li><div class="li">'.sprintf($this->getLang('dash_'.$name),$result[$name]).'</div></li>';
199eabe0d07SAndreas Gohr        }
2002812a751SAndreas Gohr        echo '</ul>';
2011d2d78ccSAndreas Gohr
2021d2d78ccSAndreas Gohr        echo '<ul class="left">';
2031d2d78ccSAndreas Gohr        foreach(array('bouncerate','timespent','avgpages','newvisitors','registrations') as $name){
2041d2d78ccSAndreas Gohr            echo '<li><div class="li">'.sprintf($this->getLang('dash_'.$name),$result[$name]).'</div></li>';
2051d2d78ccSAndreas Gohr        }
2061d2d78ccSAndreas Gohr        echo '</ul>';
2071d2d78ccSAndreas Gohr
208dc7b1e5eSAndreas Gohr        $this->html_graph('trend',700,280);
2092812a751SAndreas Gohr        echo '</div>';
2102812a751SAndreas Gohr
21114d99ec0SAndreas Gohr
21287d5e44bSAndreas Gohr        // top pages today
213264f1744SAndreas Gohr        echo '<div>';
214dc7b1e5eSAndreas Gohr        echo '<h2>'.$this->getLang('dash_mostpopular').'</h2>';
2156b6f8822SAndreas Gohr        $result = $this->hlp->Query()->pages($this->tlimit,$this->start,15);
2162812a751SAndreas Gohr        $this->html_resulttable($result);
2172507f8e0SAndreas Gohr        echo '<a href="?do=admin&amp;page=statistics&amp;opt=page&amp;f='.$this->from.'&amp;t='.$this->to.'" class="more">more</a>';
218264f1744SAndreas Gohr        echo '</div>';
21987d5e44bSAndreas Gohr
22087d5e44bSAndreas Gohr        // top referer today
221264f1744SAndreas Gohr        echo '<div>';
222dc7b1e5eSAndreas Gohr        echo '<h2>'.$this->getLang('dash_newincoming').'</h2>';
2236b6f8822SAndreas Gohr        $result = $this->hlp->Query()->newreferer($this->tlimit,$this->start,15);
2242812a751SAndreas Gohr        $this->html_resulttable($result);
2252507f8e0SAndreas Gohr        echo '<a href="?do=admin&amp;page=statistics&amp;opt=newreferer&amp;f='.$this->from.'&amp;t='.$this->to.'" class="more">more</a>';
226264f1744SAndreas Gohr        echo '</div>';
22754f6c432SAndreas Gohr
22829dea504SAndreas Gohr        // top searches today
229264f1744SAndreas Gohr        echo '<div>';
230dc7b1e5eSAndreas Gohr        echo '<h2>'.$this->getLang('dash_topsearch').'</h2>';
2316b6f8822SAndreas Gohr        $result = $this->hlp->Query()->searchphrases($this->tlimit,$this->start,15);
23229dea504SAndreas Gohr        $this->html_resulttable($result);
23329dea504SAndreas Gohr        echo '<a href="?do=admin&amp;page=statistics&amp;opt=searchphrases&amp;f='.$this->from.'&amp;t='.$this->to.'" class="more">more</a>';
234264f1744SAndreas Gohr        echo '</div>';
23514d99ec0SAndreas Gohr    }
23614d99ec0SAndreas Gohr
237c67866d1SAndreas Gohr    function html_countries(){
238878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_countries').'</p>';
239878be5c9SAndreas Gohr        $this->html_graph('countries',400,200);
2406b6f8822SAndreas Gohr        $result = $this->hlp->Query()->countries($this->tlimit,$this->start,150);
2412507f8e0SAndreas Gohr        $this->html_resulttable($result,'',150);
2429da6395dSAndreas Gohr    }
2439da6395dSAndreas Gohr
2449da6395dSAndreas Gohr    function html_page(){
245878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_page').'</p>';
2466b6f8822SAndreas Gohr        $result = $this->hlp->Query()->pages($this->tlimit,$this->start,150);
2472507f8e0SAndreas Gohr        $this->html_resulttable($result,'',150);
2489da6395dSAndreas Gohr    }
2499da6395dSAndreas Gohr
2504f41a2ccSAndreas Gohr    function html_browsers(){
251878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_browsers').'</p>';
252878be5c9SAndreas Gohr        $this->html_graph('browsers',400,200);
2536b6f8822SAndreas Gohr        $result = $this->hlp->Query()->browsers($this->tlimit,$this->start,150,true);
2542507f8e0SAndreas Gohr        $this->html_resulttable($result,'',150);
25575fa767dSAndreas Gohr    }
25675fa767dSAndreas Gohr
257bd4217d3SAndreas Gohr    function html_os(){
258878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_os').'</p>';
259878be5c9SAndreas Gohr        $this->html_graph('os',400,200);
2606b6f8822SAndreas Gohr        $result = $this->hlp->Query()->os($this->tlimit,$this->start,150,true);
2612507f8e0SAndreas Gohr        $this->html_resulttable($result,'',150);
262bd4217d3SAndreas Gohr    }
263bd4217d3SAndreas Gohr
2649da6395dSAndreas Gohr    function html_referer(){
2656b6f8822SAndreas Gohr        $result = $this->hlp->Query()->aggregate($this->tlimit);
2662812a751SAndreas Gohr
2672812a751SAndreas Gohr        $all    = $result['search']+$result['external']+$result['direct'];
2682812a751SAndreas Gohr
26994023548SAndreas Gohr        if($all){
270878be5c9SAndreas Gohr            printf('<p>'.$this->getLang('intro_referer').'</p>',
271878be5c9SAndreas Gohr                   $all,$result['direct'],(100*$result['direct']/$all),
2722812a751SAndreas Gohr                   $result['search'],(100*$result['search']/$all),$result['external'],
2732812a751SAndreas Gohr                   (100*$result['external']/$all));
27494023548SAndreas Gohr        }
2752812a751SAndreas Gohr
2766b6f8822SAndreas Gohr        $result = $this->hlp->Query()->referer($this->tlimit,$this->start,150);
2772507f8e0SAndreas Gohr        $this->html_resulttable($result,'',150);
2789da6395dSAndreas Gohr    }
2799da6395dSAndreas Gohr
280e7a2f1e0SAndreas Gohr    function html_newreferer(){
281878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_newreferer').'</p>';
282e7a2f1e0SAndreas Gohr
2836b6f8822SAndreas Gohr        $result = $this->hlp->Query()->newreferer($this->tlimit,$this->start,150);
2842507f8e0SAndreas Gohr        $this->html_resulttable($result,'',150);
285e7a2f1e0SAndreas Gohr    }
286e7a2f1e0SAndreas Gohr
287e25286daSAndreas Gohr    function html_outlinks(){
288878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_outlinks').'</p>';
2896b6f8822SAndreas Gohr        $result = $this->hlp->Query()->outlinks($this->tlimit,$this->start,150);
290e25286daSAndreas Gohr        $this->html_resulttable($result,'',150);
291e25286daSAndreas Gohr    }
292e25286daSAndreas Gohr
29312dcdeccSAndreas Gohr    function html_searchphrases(){
294878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_searchphrases').'</p>';
2955bccfe87SAndreas Gohr        $result = $this->hlp->Query()->searchphrases(true,$this->tlimit,$this->start,150);
29612dcdeccSAndreas Gohr        $this->html_resulttable($result,'',150);
29712dcdeccSAndreas Gohr    }
29812dcdeccSAndreas Gohr
29912dcdeccSAndreas Gohr    function html_searchwords(){
300878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_searchwords').'</p>';
3015bccfe87SAndreas Gohr        $result = $this->hlp->Query()->searchwords(true,$this->tlimit,$this->start,150);
3025bccfe87SAndreas Gohr        $this->html_resulttable($result,'',150);
3035bccfe87SAndreas Gohr    }
3045bccfe87SAndreas Gohr
3055bccfe87SAndreas Gohr    function html_internalsearchphrases(){
306878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_internalsearchphrases').'</p>';
3075bccfe87SAndreas Gohr        $result = $this->hlp->Query()->searchphrases(false,$this->tlimit,$this->start,150);
3085bccfe87SAndreas Gohr        $this->html_resulttable($result,'',150);
3095bccfe87SAndreas Gohr    }
3105bccfe87SAndreas Gohr
3115bccfe87SAndreas Gohr    function html_internalsearchwords(){
312878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_internalsearchwords').'</p>';
3135bccfe87SAndreas Gohr        $result = $this->hlp->Query()->searchwords(false,$this->tlimit,$this->start,150);
31412dcdeccSAndreas Gohr        $this->html_resulttable($result,'',150);
31512dcdeccSAndreas Gohr    }
31612dcdeccSAndreas Gohr
31712dcdeccSAndreas Gohr    function html_searchengines(){
318878be5c9SAndreas Gohr        echo '<p>'.$this->getLang('intro_searchengines').'</p>';
3196b6f8822SAndreas Gohr        $result = $this->hlp->Query()->searchengines($this->tlimit,$this->start,150);
32012dcdeccSAndreas Gohr        $this->html_resulttable($result,'',150);
32112dcdeccSAndreas Gohr    }
32212dcdeccSAndreas Gohr
323c73e16f1SAndreas Gohr    function html_resolution(){
32425446aa2SAndreas Gohr        echo '<p>'.$this->getLang('intro_resolution').'</p>';
32525446aa2SAndreas Gohr        $this->html_graph('resolution',650,490);
326307baf3fSAndreas Gohr        $result = $this->hlp->Query()->resolution($this->tlimit,$this->start,150);
327307baf3fSAndreas Gohr        $this->html_resulttable($result,'',150);
32825446aa2SAndreas Gohr    }
329307baf3fSAndreas Gohr
33025446aa2SAndreas Gohr    function html_viewport(){
33125446aa2SAndreas Gohr        echo '<p>'.$this->getLang('intro_viewport').'</p>';
33225446aa2SAndreas Gohr        $this->html_graph('viewport',650,490);
33325446aa2SAndreas Gohr        $result = $this->hlp->Query()->viewport($this->tlimit,$this->start,150);
33425446aa2SAndreas Gohr        $this->html_resulttable($result,'',150);
335c73e16f1SAndreas Gohr    }
3369da6395dSAndreas Gohr
3379da6395dSAndreas Gohr
33814d99ec0SAndreas Gohr    /**
33914d99ec0SAndreas Gohr     * Display a result in a HTML table
34014d99ec0SAndreas Gohr     */
3412507f8e0SAndreas Gohr    function html_resulttable($result,$header='',$pager=0){
34214d99ec0SAndreas Gohr        echo '<table>';
3432812a751SAndreas Gohr        if(is_array($header)){
34414d99ec0SAndreas Gohr            echo '<tr>';
34514d99ec0SAndreas Gohr            foreach($header as $h){
34614d99ec0SAndreas Gohr                echo '<th>'.hsc($h).'</th>';
34714d99ec0SAndreas Gohr            }
34814d99ec0SAndreas Gohr            echo '</tr>';
3492812a751SAndreas Gohr        }
35014d99ec0SAndreas Gohr
3512507f8e0SAndreas Gohr        $count = 0;
3522ee939eeSAndreas Gohr        if(is_array($result)) foreach($result as $row){
35314d99ec0SAndreas Gohr            echo '<tr>';
35414d99ec0SAndreas Gohr            foreach($row as $k => $v){
355*f3818071SAndreas Gohr                if($k == 'res_x') continue;
356*f3818071SAndreas Gohr                if($k == 'res_y') continue;
357*f3818071SAndreas Gohr
3582812a751SAndreas Gohr                echo '<td class="plg_stats_X'.$k.'">';
35914d99ec0SAndreas Gohr                if($k == 'page'){
36014d99ec0SAndreas Gohr                    echo '<a href="'.wl($v).'" class="wikilink1">';
36114d99ec0SAndreas Gohr                    echo hsc($v);
36214d99ec0SAndreas Gohr                    echo '</a>';
36314d99ec0SAndreas Gohr                }elseif($k == 'url'){
36454f6c432SAndreas Gohr                    $url = hsc($v);
36583b63546SAndreas Gohr                    $url = preg_replace('/^https?:\/\/(www\.)?/','',$url);
3662812a751SAndreas Gohr                    if(strlen($url) > 45){
3672812a751SAndreas Gohr                        $url = substr($url,0,30).' &hellip; '.substr($url,-15);
36854f6c432SAndreas Gohr                    }
36914d99ec0SAndreas Gohr                    echo '<a href="'.$v.'" class="urlextern">';
37054f6c432SAndreas Gohr                    echo $url;
37114d99ec0SAndreas Gohr                    echo '</a>';
3725bccfe87SAndreas Gohr                }elseif($k == 'ilookup'){
3735bccfe87SAndreas Gohr                    echo '<a href="'.wl('',array('id'=>$v,'do'=>'search')).'">Search</a>';
37429dea504SAndreas Gohr                }elseif($k == 'lookup'){
37529dea504SAndreas Gohr                    echo '<a href="http://www.google.com/search?q='.rawurlencode($v).'">';
37629dea504SAndreas Gohr                    echo '<img src="'.DOKU_BASE.'lib/plugins/statistics/ico/search/google.png" alt="lookup in Google" border="0" />';
37729dea504SAndreas Gohr                    echo '</a> ';
37829dea504SAndreas Gohr
37929dea504SAndreas Gohr                    echo '<a href="http://search.yahoo.com/search?p='.rawurlencode($v).'">';
38029dea504SAndreas Gohr                    echo '<img src="'.DOKU_BASE.'lib/plugins/statistics/ico/search/yahoo.png" alt="lookup in Yahoo" border="0" />';
38129dea504SAndreas Gohr                    echo '</a> ';
38229dea504SAndreas Gohr
38329dea504SAndreas Gohr                    echo '<a href="http://search.msn.com/results.aspx?q='.rawurlencode($v).'">';
38429dea504SAndreas Gohr                    echo '<img src="'.DOKU_BASE.'lib/plugins/statistics/ico/search/msn.png" alt="lookup in MSN Live" border="0" />';
38529dea504SAndreas Gohr                    echo '</a> ';
38629dea504SAndreas Gohr
38712dcdeccSAndreas Gohr                }elseif($k == 'engine'){
38812dcdeccSAndreas Gohr                    include_once(dirname(__FILE__).'/inc/search_engines.php');
38912dcdeccSAndreas Gohr                    echo $SearchEnginesHashLib[$v];
39075fa767dSAndreas Gohr                }elseif($k == 'bflag'){
3912998b1f6SAndreas Gohr                    echo '<img src="'.DOKU_BASE.'lib/plugins/statistics/ico/browser/'.strtolower(preg_replace('/[^\w]+/','',$v)).'.png" alt="'.hsc($v).'" />';
392bd4217d3SAndreas Gohr                }elseif($k == 'osflag'){
3932998b1f6SAndreas Gohr                    echo '<img src="'.DOKU_BASE.'lib/plugins/statistics/ico/os/'.strtolower(preg_replace('/[^\w]+/','',$v)).'.png" alt="'.hsc($v).'" />';
39475fa767dSAndreas Gohr                }elseif($k == 'cflag'){
39575fa767dSAndreas Gohr                    echo '<img src="'.DOKU_BASE.'lib/plugins/statistics/ico/flags/'.hsc($v).'.png" alt="'.hsc($v).'" width="18" height="12" />';
39614d99ec0SAndreas Gohr                }elseif($k == 'html'){
39714d99ec0SAndreas Gohr                    echo $v;
39814d99ec0SAndreas Gohr                }else{
39914d99ec0SAndreas Gohr                    echo hsc($v);
40014d99ec0SAndreas Gohr                }
40114d99ec0SAndreas Gohr                echo '</td>';
40214d99ec0SAndreas Gohr            }
40314d99ec0SAndreas Gohr            echo '</tr>';
4042507f8e0SAndreas Gohr
4052507f8e0SAndreas Gohr            if($pager && ($count == $pager)) break;
4062507f8e0SAndreas Gohr            $count++;
40714d99ec0SAndreas Gohr        }
40814d99ec0SAndreas Gohr        echo '</table>';
4092507f8e0SAndreas Gohr
4102507f8e0SAndreas Gohr        if($pager) $this->html_pager($pager,count($result) > $pager);
4111878f16fSAndreas Gohr    }
4121878f16fSAndreas Gohr
4131878f16fSAndreas Gohr}
414