summaryrefslogblamecommitdiffstats
path: root/admin/survey/modules/mod_advanced_paradata/class.SurveyAdvancedParadataLog.php
blob: acaef1f9d7d16f5fd547b504756bc4960c7b9f8e (plain) (tree)


















                                                                         
                                          
                 




                                                                                                                    




                                                                                                                                     












                                                                           



                                                                                                                    
































































































































































































































































                                                                                                                                                                                                                                                    
<?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 () {
		
        if((isset($_GET['m']) && $_GET['m'] == 'quick_edit') || (isset($_GET['t']) && $_GET['t'] == 'postprocess'))
            return false;
            
		$anketa_hash = $_REQUEST['anketa'];		
		$this->anketa = getSurveyIdFromHash($anketa_hash);	
		
		if($this->anketa > 0){
			SurveyInfo::getInstance()->SurveyInit($this->anketa);
			$this->collectParadata = (SurveyInfo::getInstance()->checkSurveyModule('advanced_paradata')) ? true : false;
		}
	}
	
	// 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(){

        if((isset($_GET['m']) && $_GET['m'] == 'quick_edit') || (isset($_GET['t']) && $_GET['t'] == 'postprocess'))
            return false;

		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);
	}
}
	
?>