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&page=statistics&opt='.$page.'&f='.$this->from.'&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 '&f='.$this->from.'&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&page=statistics&opt='.$this->opt.'&f='.$this->from.'&t='.$this->to.'&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&page=statistics&opt='.$this->opt.'&f='.$this->from.'&t='.$this->to.'&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&page=statistics&opt='.$this->opt.'&f='.$$time.'&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&page=statistics&opt=page&f='.$this->from.'&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&page=statistics&opt=newreferer&f='.$this->from.'&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&page=statistics&opt=searchphrases&f='.$this->from.'&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).' … '.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