kaktusy/modules/statsdata/statsdata.php

135 lines
4.2 KiB
PHP

<?php
/**
* Statistics
* @category stats
*
* @author Damien Metzger / Epitech
* @copyright Epitech / PrestaShop
* @license http://www.opensource.org/licenses/osl-3.0.php Open-source licence 3.0
* @version 1.2
*/
class StatsData extends Module
{
private $_html = '';
function __construct()
{
$this->name = 'statsdata';
$this->tab = 'Stats';
$this->version = 1.0;
parent::__construct();
$this->displayName = $this->l('Data mining for statistics');
$this->description = $this->l('This module must be enabled if you want to use Statistics');
}
function install()
{
// Everything is done in the footer (and not in the header because a page can redirect to another) except for identifying a guest as a customer
if (!parent::install() OR !$this->registerHook('footer') OR !$this->registerHook('authentication') OR !$this->registerHook('createAccount'))
return false;
}
function hookFooter($params)
{
global $protocol_content, $server_host;
// Identification information are encrypted to prevent hacking attempts
$blowfish = new Blowfish(_COOKIE_KEY_, _COOKIE_IV_);
if (!isset($params['cookie']->id_guest))
{
Guest::setNewGuest($params['cookie']);
// Ajax request sending browser information
$token = $blowfish->encrypt($params['cookie']->id_guest);
$this->_html = '
<script type="text/javascript" src="'.$protocol_content.$server_host.__PS_BASE_URI__.'js/pluginDetect.js"></script>
<script type="text/javascript">
plugins = new Object;
plugins.adobe_director = (PluginDetect.getVersion("Shockwave") != null) ? 1 : 0;
plugins.adobe_flash = (PluginDetect.getVersion("Flash") != null) ? 1 : 0;
plugins.apple_quicktime = (PluginDetect.getVersion("QuickTime") != null) ? 1 : 0;
plugins.windows_media = (PluginDetect.getVersion("WindowsMediaPlayer") != null) ? 1 : 0;
plugins.sun_java = (PluginDetect.getVersion("java") != null) ? 1 : 0;
plugins.real_player = (PluginDetect.getVersion("RealPlayer") != null) ? 1 : 0;
$(document).ready(
function() {
navinfo = new Object;
navinfo = { screen_resolution_x: screen.width, screen_resolution_y: screen.height, screen_color:screen.colorDepth};
for (var i in plugins)
navinfo[i] = plugins[i];
navinfo.type = "navinfo";
navinfo.token = "'.$token.'";
$.post("'.$protocol_content.$server_host.__PS_BASE_URI__.'statistics.php", navinfo);
}
);
</script>';
}
// Record the guest path then increment the visit counter of the page
$tokenArray = Connection::setPageConnection($params['cookie']);
ConnectionsSource::logHttpReferer();
Page::setPageViewed($tokenArray['id_page']);
// Ajax request sending the time spend on the page
$token = $blowfish->encrypt($tokenArray['id_connections'].'|'.$tokenArray['id_page'].'|'.$tokenArray['time_start']);
$this->_html .= '
<script type="text/javascript">
var time_start;
$(window).load(
function() {
time_start = new Date();
}
);
$(window).unload(
function() {
var time_end = new Date();
var pagetime = new Object;
pagetime.type = "pagetime";
pagetime.token = "'.$token.'";
pagetime.time = time_end-time_start;
$.post("'.$protocol_content.$server_host.__PS_BASE_URI__.'statistics.php", pagetime);
}
);
</script>';
return $this->_html;
}
function hookCreateAccount($params)
{
return $this->hookAuthentication($params);
}
function hookAuthentication($params)
{
// Update or merge the guest with the customer id (login and account creation)
$guest = new Guest($params['cookie']->id_guest);
$result = Db::getInstance()->getRow('
SELECT `id_guest`
FROM `'._DB_PREFIX_.'guest`
WHERE `id_customer` = '.intval($params['cookie']->id_customer));
if (intval($result['id_guest']))
{
// The new guest is merged with the old one when it's connecting to an account
$guest->mergeWithCustomer($result['id_guest'], $params['cookie']->id_customer);
$params['cookie']->id_guest = $guest->id;
}
else
{
// The guest is duplicated if it has multiple customer accounts
$method = ($guest->id_customer) ? 'add' : 'update';
$guest->id_customer = $params['cookie']->id_customer;
$guest->{$method}();
}
}
}
?>