309 lines
11 KiB
PHP
309 lines
11 KiB
PHP
![]() |
<?php
|
||
|
|
||
|
/*
|
||
|
* Modul za beleženje naprednih parapodatkov med izpolnjevanjem ankete
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
class SurveyAdvancedParadataLog {
|
||
|
|
||
|
|
||
|
private static $instance = false;
|
||
|
|
||
|
private $collectParadata = false;
|
||
|
|
||
|
private $anketa = 0;
|
||
|
private $session_id = 0;
|
||
|
|
||
|
|
||
|
// Privatni construct, ki ga 1x poklice getInstance
|
||
|
private function __construct (/*$anketa*/) {
|
||
|
|
||
|
/*ini_set('display_errors', 1);
|
||
|
ini_set('display_startup_errors', 1);
|
||
|
error_reporting(E_ALL);*/
|
||
|
|
||
|
// Ce imamo anketo
|
||
|
/*if ((int)$anketa > 0){
|
||
|
$this->anketa = $anketa;
|
||
|
}*/
|
||
|
|
||
|
$this->anketa = (int)$_REQUEST['anketa'];
|
||
|
//$this->anketa = $anketa_id;
|
||
|
|
||
|
if($this->anketa > 0){
|
||
|
SurveyInfo::getInstance()->SurveyInit($this->anketa);
|
||
|
$this->collectParadata = (SurveyInfo::getInstance()->checkSurveyModule('advanced_paradata')) ? true : false;
|
||
|
}
|
||
|
else
|
||
|
throw new Exception('Survey ID not set in class.SurveyAdvancedParadataLog.php !');
|
||
|
}
|
||
|
|
||
|
// Vrne instanco classa - da mamo singleton
|
||
|
public static function getInstance () {
|
||
|
|
||
|
if (!self::$instance)
|
||
|
self::$instance = new SurveyAdvancedParadataLog();
|
||
|
|
||
|
return self::$instance;
|
||
|
}
|
||
|
|
||
|
// Vrne ce zbiramo napredne parapodatke
|
||
|
public function paradataEnabled(){
|
||
|
return $this->collectParadata;
|
||
|
}
|
||
|
|
||
|
// Vrne ce zbiramo post time
|
||
|
public function collectPostTime(){
|
||
|
|
||
|
$collectPostTime = true;
|
||
|
|
||
|
$sql = sisplet_query("SELECT collect_post_time FROM srv_advanced_paradata_settings WHERE ank_id='".$this->anketa."'");
|
||
|
if(mysqli_num_rows($sql) > 0){
|
||
|
|
||
|
$row = mysqli_fetch_array($sql);
|
||
|
|
||
|
if($row['collect_post_time'] == '0')
|
||
|
$collectPostTime = false;
|
||
|
}
|
||
|
|
||
|
return $collectPostTime;
|
||
|
}
|
||
|
|
||
|
|
||
|
// Ustvarimo polje v bazi za session (vezan na load posamezne strani) in nastavimo session_id za js
|
||
|
public function prepareLogging () {
|
||
|
|
||
|
$user_agent = $_SERVER['HTTP_USER_AGENT'];
|
||
|
|
||
|
// Vstavimo v bazo novo polje za session na strani
|
||
|
$sql = sisplet_query("INSERT INTO srv_advanced_paradata_page (ank_id, load_time, user_agent) VALUES ('".$this->anketa."', NOW(3), '".$user_agent."')");
|
||
|
|
||
|
if (!$sql){
|
||
|
echo mysqli_error($GLOBALS['connect_db']);
|
||
|
}
|
||
|
else{
|
||
|
// Nastavimo session_id
|
||
|
$this->session_id = mysqli_insert_id($GLOBALS['connect_db']);
|
||
|
|
||
|
// Nastavimo session_id se za JS
|
||
|
echo '<script> var _session_id = '.$this->session_id.'; </script>';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Zapiše log v bazo
|
||
|
public function logData ($event_type, $event, $data) {
|
||
|
|
||
|
switch ($event_type) {
|
||
|
|
||
|
case 'page':
|
||
|
$this->logDataPage($event, $data);
|
||
|
break;
|
||
|
|
||
|
case 'question':
|
||
|
$this->logDataQuestion($event, $data);
|
||
|
break;
|
||
|
|
||
|
case 'vrednost':
|
||
|
$this->logDataVrednost($event, $data);
|
||
|
break;
|
||
|
|
||
|
case 'other':
|
||
|
$this->logDataOther($event, $data);
|
||
|
break;
|
||
|
|
||
|
case 'movement':
|
||
|
$this->logDataMovement($event, $data);
|
||
|
break;
|
||
|
|
||
|
case 'alert':
|
||
|
$this->logDataAlert($event, $data);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Zabelezimo dogodek na nivoju strani
|
||
|
private function logDataPage($event, $data){
|
||
|
|
||
|
$update = '';
|
||
|
|
||
|
// Nastavimo katere parametre updatamo
|
||
|
switch($event){
|
||
|
case 'load_page':
|
||
|
$update = " gru_id = '".$data['page']."',
|
||
|
usr_id = '".$data['usr_id']."',
|
||
|
recnum = '".$data['recnum']."',
|
||
|
language = '".$data['language']."',
|
||
|
load_time = '".$data['timestamp']."',
|
||
|
devicePixelRatio = '".$data['data']['devicePixelRatio']."',
|
||
|
width = '".$data['data']['width']."',
|
||
|
height = '".$data['data']['height']."',
|
||
|
availWidth = '".$data['data']['availWidth']."',
|
||
|
availHeight = '".$data['data']['availHeight']."',
|
||
|
jquery_windowW = '".$data['data']['jquery_windowW']."',
|
||
|
jquery_windowH = '".$data['data']['jquery_windowH']."',
|
||
|
jquery_documentW = '".$data['data']['jquery_documentW']."',
|
||
|
jquery_documentH = '".$data['data']['jquery_documentH']."'";
|
||
|
break;
|
||
|
|
||
|
case 'unload_page':
|
||
|
$update = " post_time='".$data['timestamp']."' ";
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
$sql = sisplet_query("UPDATE srv_advanced_paradata_page SET ".$update." WHERE id='$this->session_id'");
|
||
|
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
|
||
|
|
||
|
/*var_dump($data);
|
||
|
echo "UPDATE srv_advanced_paradata_page SET ".$update." WHERE id='$this->session_id'";*/
|
||
|
}
|
||
|
|
||
|
// Zabelezimo dogodek na nivoju vprasanja
|
||
|
private function logDataQuestion($event, $data){
|
||
|
|
||
|
// Preverimo, ce gre ya vprasanje v ifu - potem se preveri da se zapise samo 1x
|
||
|
$sqlU = sisplet_query("SELECT p.id
|
||
|
FROM srv_advanced_paradata_page p, srv_advanced_paradata_question q
|
||
|
WHERE p.usr_id='".$data['usr_id']."' AND p.id=q.page_id AND q.spr_id='".$data['data']['spr_id']."'
|
||
|
");
|
||
|
|
||
|
// Ce se nimamo vnosa za vprasanje in userja zapisemo
|
||
|
if(mysqli_num_rows($sqlU) == 0){
|
||
|
|
||
|
$sql = sisplet_query("INSERT INTO srv_advanced_paradata_question
|
||
|
(page_id, spr_id, vre_order)
|
||
|
VALUES
|
||
|
('".$this->session_id."', '".$data['data']['spr_id']."', '".$data['data']['vre_order']."')");
|
||
|
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Zabelezimo dogodek na nivoju vrednosti vprasanja
|
||
|
private function logDataVrednost($event, $data){
|
||
|
|
||
|
$value = isset($data['data']['value']) ? $data['data']['value'] : '';
|
||
|
|
||
|
$sql = sisplet_query("INSERT INTO srv_advanced_paradata_vrednost
|
||
|
(page_id, spr_id, vre_id, time, event, value)
|
||
|
VALUES
|
||
|
('".$this->session_id."', '".$data['data']['spr_id']."', '".$data['data']['vre_id']."', '".$data['timestamp']."', '".$event."', '".$value."')");
|
||
|
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
|
||
|
}
|
||
|
|
||
|
// Zabelezimo ostale dogodke
|
||
|
private function logDataOther($event, $data){
|
||
|
|
||
|
$value = isset($data['data']['value']) ? $data['data']['value'] : '';
|
||
|
$pos_x = isset($data['data']['pos_x']) ? $data['data']['pos_x'] : '';
|
||
|
$pos_y = isset($data['data']['pos_y']) ? $data['data']['pos_y'] : '';
|
||
|
$div_type = isset($data['data']['div_type']) ? $data['data']['div_type'] : '';
|
||
|
$div_id = isset($data['data']['div_id']) ? $data['data']['div_id'] : '';
|
||
|
$div_class = isset($data['data']['div_class']) ? $data['data']['div_class'] : '';
|
||
|
|
||
|
$sql = sisplet_query("INSERT INTO srv_advanced_paradata_other
|
||
|
(page_id, time, event, value, pos_x, pos_y, div_type, div_id, div_class)
|
||
|
VALUES
|
||
|
('".$this->session_id."', '".$data['timestamp']."', '".$event."', '".$value."', '".$pos_x."', '".$pos_y."', '".$div_type."', '".$div_id."', '".$div_class."')");
|
||
|
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
|
||
|
}
|
||
|
|
||
|
// Zabelezimo premike miske
|
||
|
private function logDataMovement($event, $data){
|
||
|
|
||
|
$time_start_raw = mysqli_real_escape_string($GLOBALS['connect_db'], $data['data']['time_start']);
|
||
|
$time_start = date("Y-m-d H:i:s", $time_start_raw/1000).'.'.substr($time_start_raw, -3);
|
||
|
|
||
|
$time_end_raw = mysqli_real_escape_string($GLOBALS['connect_db'], $data['data']['time_end']);
|
||
|
$time_end = date("Y-m-d H:i:s", $time_end_raw/1000).'.'.substr($time_end_raw, -3);
|
||
|
|
||
|
$pos_x_start = isset($data['data']['pos_x_start']) ? $data['data']['pos_x_start'] : '';
|
||
|
$pos_y_start = isset($data['data']['pos_y_start']) ? $data['data']['pos_y_start'] : '';
|
||
|
$pos_x_end = isset($data['data']['pos_x_end']) ? $data['data']['pos_x_end'] : '';
|
||
|
$pos_y_end = isset($data['data']['pos_y_end']) ? $data['data']['pos_y_end'] : '';
|
||
|
$distance = isset($data['data']['distance']) ? $data['data']['distance'] : '';
|
||
|
|
||
|
$sql = sisplet_query("INSERT INTO srv_advanced_paradata_movement
|
||
|
(page_id, time_start, time_end, pos_x_start, pos_y_start, pos_x_end, pos_y_end, distance)
|
||
|
VALUES
|
||
|
('".$this->session_id."', '".$time_start."', '".$time_end."', '".$pos_x_start."', '".$pos_y_start."', '".$pos_x_end."', '".$pos_y_end."', '".$distance."')");
|
||
|
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
|
||
|
}
|
||
|
|
||
|
// Zabelezimo alerte
|
||
|
private function logDataAlert($event, $data){
|
||
|
|
||
|
$type = isset($data['data']['type']) ? $data['data']['type'] : '';
|
||
|
$trigger_id = isset($data['data']['trigger_id']) ? $data['data']['trigger_id'] : 0;
|
||
|
$trigger_type = isset($data['data']['trigger_type']) ? $data['data']['trigger_type'] : '';
|
||
|
$ignorable = isset($data['data']['ignorable']) ? $data['data']['ignorable'] : 0;
|
||
|
$text = isset($data['data']['text']) ? $data['data']['text'] : '';
|
||
|
$action = isset($data['data']['action']) ? $data['data']['action'] : '';
|
||
|
|
||
|
$timestamp_display_raw = isset($data['data']['time_display']) ? $data['data']['time_display'] : '';
|
||
|
$timestamp_display = date("Y-m-d H:i:s", $timestamp_display_raw/1000).'.'.substr($timestamp_display_raw, -3);
|
||
|
|
||
|
$sql = sisplet_query("INSERT INTO srv_advanced_paradata_alert
|
||
|
(page_id, time_display, time_close, type, trigger_id, trigger_type, ignorable, text, action)
|
||
|
VALUES
|
||
|
('".$this->session_id."', '".$timestamp_display."', '".$data['timestamp']."', '".$type."', '".$trigger_id."', '".$trigger_type."', '".$ignorable."', '".$text."', '".$action."')");
|
||
|
if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
|
||
|
}
|
||
|
|
||
|
|
||
|
// Izpise link na javascript datoteko v header htmlja
|
||
|
public function linkJavaScript() {
|
||
|
global $site_url;
|
||
|
|
||
|
// Osnovni js za belezenje parapodatkov
|
||
|
echo ' <script src="'.$site_url.'admin/survey/modules/mod_advanced_paradata/js/advanced_paradata.js"></script>'."\n";
|
||
|
|
||
|
// Belezenje post tima (upocasni prehode cez strani)
|
||
|
if($this->collectPostTime())
|
||
|
echo ' <script src="'.$site_url.'admin/survey/modules/mod_advanced_paradata/js/advanced_paradata_postTime.js"></script>'."\n";
|
||
|
|
||
|
// JS za belezenje alertov
|
||
|
echo ' <script src="'.$site_url.'admin/survey/modules/mod_advanced_paradata/js/sledenjeOpozoril.js"></script>'."\n";
|
||
|
}
|
||
|
|
||
|
// Izpise trenutno grupo v JS
|
||
|
public function displayGrupa ($grupa) {
|
||
|
|
||
|
echo '<script> var srv_meta_grupa_id = '.$grupa.'; </script>';
|
||
|
}
|
||
|
|
||
|
|
||
|
// Ajax klici
|
||
|
public function ajax() {
|
||
|
|
||
|
if ($_GET['a'] == 'logData') {
|
||
|
$this->ajax_logData();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Logiranje eventa
|
||
|
private function ajax_logData () {
|
||
|
|
||
|
$this->session_id = $_POST['session_id'];
|
||
|
|
||
|
$event_type = mysqli_real_escape_string($GLOBALS['connect_db'], $_POST['event_type']);
|
||
|
$event = mysqli_real_escape_string($GLOBALS['connect_db'], $_POST['event']);
|
||
|
|
||
|
$timestamp_raw = mysqli_real_escape_string($GLOBALS['connect_db'], $_POST['timestamp']);
|
||
|
$timestamp = date("Y-m-d H:i:s", $timestamp_raw/1000).'.'.substr($timestamp_raw, -3);
|
||
|
|
||
|
$data_array = array(
|
||
|
'page' => mysqli_real_escape_string($GLOBALS['connect_db'], $_POST['page']),
|
||
|
'usr_id' => mysqli_real_escape_string($GLOBALS['connect_db'], $_POST['usr_id']),
|
||
|
'recnum' => mysqli_real_escape_string($GLOBALS['connect_db'], $_POST['recnum']),
|
||
|
'language' => mysqli_real_escape_string($GLOBALS['connect_db'], $_POST['language']),
|
||
|
'timestamp' => $timestamp,
|
||
|
'data' => $_POST['data']
|
||
|
);
|
||
|
|
||
|
var_dump($_POST);
|
||
|
|
||
|
$this->logData($event_type, $event, $data_array);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
?>
|