name = 'statsorigin'; $this->tab = 'Stats'; $this->version = 1.0; parent::__construct(); $this->displayName = $this->l('Visitors origin'); $this->description = $this->l('Display the websites from where your visitors come from'); } function install() { return (parent::install() AND $this->registerHook('AdminStatsModules')); } private function getOrigins($dateBetween) { $directLink = $this->l('Direct link'); $result = mysql_query(' SELECT c.http_referer FROM '._DB_PREFIX_.'connections c WHERE c.date_add BETWEEN '.$dateBetween); $websites = array($directLink => 0); while ($row = mysql_fetch_assoc($result)) { if (!isset($row['http_referer']) OR empty($row['http_referer'])) ++$websites[$directLink]; else { $website = preg_replace('/^www./', '', parse_url($row['http_referer'], PHP_URL_HOST)); if (!isset($websites[$website])) $websites[$website] = 1; else ++$websites[$website]; } } mysql_free_result($result); arsort($websites); return $websites; } function hookAdminStatsModules() { $websites = $this->getOrigins(ModuleGraph::getDateBetween()); $this->_html = '
'.$this->l('Origin').''; if (sizeof($websites)) { $this->_html .= '

'. $this->l('Here is the percentage of the 10 most popular referrer websites by which visitors went through to get on your shop.').'

'.ModuleGraph::engine(array('type' => 'pie')).'

'; foreach ($websites as $website => $total) $this->_html .= ''; $this->_html .= '
'.$this->l('Origin').' '.$this->l('Total').'
'.(!strstr($website, ' ') ? '' : '').$website.(!strstr($website, ' ') ? '' : '').''.$total.'
'; } else $this->_html .= '

'.$this->l('Direct links only').'

'; $this->_html .= '

'.$this->l('Guide').'

'.$this->l('What is a referrer website?').'

'.$this->l('When visiting a webpage, the referrer is the URL of the previous webpage from which a link was followed.').'
'.$this->l('A referrer enables you to know which keywords are entered by visitors in search engines when they try to get on your shop; and also to optimize your web promotion.').'

'. $this->l('A referrer can be:').'

'; return $this->_html; } protected function getData($layers) { $this->_titles['main'] = $this->l('10 first websites'); $websites = $this->getOrigins($this->getDate()); $total = 0; $total2 = 0; $i = 0; foreach ($websites as $website => $totalRow) { if (!$totalRow) continue; $total += $totalRow; if ($i++ < 9) { $this->_legend[] = $website; $this->_values[] = $totalRow; $total2 += $totalRow; } } if ($total != $total2) { $this->_legend[] = $this->l('Others'); $this->_values[] = $total - $total2; } } } ?>