559 lines
15 KiB
PHP
559 lines
15 KiB
PHP
![]() |
<?php
|
||
|
|
||
|
/*
|
||
|
* Modul za pripravo izvoza naprednih parapodatkov
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
|
||
|
class SurveyAdvancedParadataExport {
|
||
|
|
||
|
var $anketa; // ID ankete
|
||
|
|
||
|
var $limit = 100; // Max vrstic pri izpisu
|
||
|
|
||
|
|
||
|
function __construct($anketa){
|
||
|
global $site_url;
|
||
|
|
||
|
// Ce imamo anketo
|
||
|
if ((int)$anketa > 0){
|
||
|
$this->anketa = $anketa;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
// Izvozimo ustrezno tabelo v csv
|
||
|
public function exportTable($table_name='srv_advanced_paradata_page'){
|
||
|
global $site_path;
|
||
|
|
||
|
ini_set('memory_limit', '4048M');
|
||
|
|
||
|
// Dobimo naslove stolpcev
|
||
|
$header = $this->getHeader($table_name);
|
||
|
|
||
|
|
||
|
// Pripravimo datoteko za izvoz
|
||
|
$file = $site_path.'admin/survey/modules/mod_advanced_paradata/temp/'.$table_name.'_'.$this->anketa.'.csv';
|
||
|
$fd = fopen($file, "w");
|
||
|
|
||
|
$convertTypes = array('charSet' => 'windows-1250',
|
||
|
'delimit' => ',',
|
||
|
'newLine' => "\n",
|
||
|
'BOMchar' => "\xEF\xBB\xBF");
|
||
|
# dodamo boomchar za utf-8
|
||
|
fwrite($fd, $convertTypes['BOMchar']);
|
||
|
|
||
|
// Zapisemo header row
|
||
|
$header_line = '';
|
||
|
foreach($header as $col){
|
||
|
$header_line .= $col.',';
|
||
|
}
|
||
|
$header_line = substr($header_line, 0, -1);
|
||
|
fwrite($fd, $header_line."\r\n");
|
||
|
|
||
|
// Zapisemo vsako vrstico posebej
|
||
|
// Dobimo vrstice s podatki
|
||
|
switch($table_name){
|
||
|
|
||
|
case 'srv_advanced_paradata_question':
|
||
|
$data = $this->writeQuestionParadata($fd, $header);
|
||
|
break;
|
||
|
|
||
|
case 'srv_advanced_paradata_vrednost':
|
||
|
$data = $this->writeVrednostParadata($fd, $header);
|
||
|
break;
|
||
|
|
||
|
case 'srv_advanced_paradata_other':
|
||
|
$data = $this->writeOtherParadata($fd, $header);
|
||
|
break;
|
||
|
|
||
|
case 'srv_advanced_paradata_movement':
|
||
|
$data = $this->writeMovementParadata($fd, $header);
|
||
|
break;
|
||
|
|
||
|
case 'srv_advanced_paradata_alert':
|
||
|
$data = $this->writeAlertParadata($fd, $header);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
$data = $this->writePageParadata($fd, $header);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
fclose($fd);
|
||
|
|
||
|
|
||
|
// Pripravimo file za download
|
||
|
if(file_exists($file)){
|
||
|
|
||
|
header('Content-Description: File Transfer');
|
||
|
//header('Content-Type: application/octet-stream');
|
||
|
header('Content-Disposition: attachment; filename='.basename(''.$table_name.'_'.$this->anketa.'.csv'.''));
|
||
|
|
||
|
header("Content-type: text/x-csv; charset=utf-8");
|
||
|
//header("Content-type: text/csv");
|
||
|
|
||
|
header('Content-Transfer-Encoding: binary');
|
||
|
header('Expires: 0');
|
||
|
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
|
||
|
header('Pragma: public');
|
||
|
header('Content-Length: ' . filesize($file));
|
||
|
|
||
|
ob_clean();
|
||
|
flush();
|
||
|
|
||
|
readfile($file);
|
||
|
}
|
||
|
|
||
|
// Na koncu pobrisemo zacasne datoteke
|
||
|
if (file_exists($file)) {
|
||
|
unlink($file);
|
||
|
}
|
||
|
|
||
|
// Ugasnemo skripto:)
|
||
|
die();
|
||
|
}
|
||
|
|
||
|
|
||
|
// Izpisemo tabelo parapodatkov vezanih na strani
|
||
|
public function displayPageTable(){
|
||
|
global $lang;
|
||
|
|
||
|
$data = $this->getPageParadata();
|
||
|
|
||
|
echo '<table class="advanced_paradata_table page_paradata styled_table">';
|
||
|
|
||
|
echo '<tr>';
|
||
|
echo '<th>ID</th>';
|
||
|
echo '<th>User ID</th>';
|
||
|
echo '<th>Page ID</th>';
|
||
|
echo '<th>Recnum</th>';
|
||
|
echo '<th>Load time</th>';
|
||
|
echo '<th>Post time</th>';
|
||
|
echo '<th>User Agent</th>';
|
||
|
echo '<th>Device pixel ratio</th>';
|
||
|
echo '<th>width x height</th>';
|
||
|
echo '<th>availWidth x availHeight</th>';
|
||
|
echo '<th>jQuery windowWidth x windowHeight</th>';
|
||
|
echo '<th>jQuery documentWidth x documentHeight</th>';
|
||
|
echo '<th>Language</th>';
|
||
|
echo '</tr>';
|
||
|
|
||
|
foreach($data as $row){
|
||
|
|
||
|
echo '<tr>';
|
||
|
|
||
|
echo '<td>'.$row['id'].'</td>';
|
||
|
echo '<td>'.$row['usr_id'].'</td>';
|
||
|
echo '<td>'.$row['gru_id'].'</td>';
|
||
|
echo '<td>'.$row['recnum'].'</td>';
|
||
|
echo '<td>'.$row['load_time'].'</td>';
|
||
|
echo '<td>'.$row['post_time'].'</td>';
|
||
|
echo '<td>'.$row['user_agent'].'</td>';
|
||
|
echo '<td>'.$row['devicePixelRatio'].'</td>';
|
||
|
echo '<td>'.$row['width'].'px X '.$row['height'].'px</td>';
|
||
|
echo '<td>'.$row['availWidth'].'px X '.$row['availHeight'].'px</td>';
|
||
|
echo '<td>'.$row['jquery_windowW'].'px X '.$row['jquery_windowH'].'px</td>';
|
||
|
echo '<td>'.$row['jquery_documentW'].'px X '.$row['jquery_documentH'].'px</td>';
|
||
|
echo '<td>'.$row['language'].'</td>';
|
||
|
|
||
|
echo '</tr>';
|
||
|
}
|
||
|
|
||
|
echo '</table>';
|
||
|
}
|
||
|
// Izpisemo tabelo parapodatkov vezanih na vprasanja
|
||
|
public function displayQuestionTable(){
|
||
|
|
||
|
$data = $this->getQuestionParadata();
|
||
|
|
||
|
echo '<table class="advanced_paradata_table question_paradata styled_table">';
|
||
|
|
||
|
echo '<tr>';
|
||
|
echo '<th>Page session ID</th>';
|
||
|
echo '<th>Question ID</th>';
|
||
|
echo '<th>Order</th>';
|
||
|
echo '</tr>';
|
||
|
|
||
|
foreach($data as $row){
|
||
|
|
||
|
echo '<tr>';
|
||
|
|
||
|
echo '<td>'.$row['page_id'].'</td>';
|
||
|
echo '<td>'.$row['spr_id'].'</td>';
|
||
|
echo '<td>'.$row['vre_order'].'</td>';
|
||
|
|
||
|
echo '</tr>';
|
||
|
}
|
||
|
|
||
|
echo '</table>';
|
||
|
}
|
||
|
|
||
|
// Izpisemo tabelo parapodatkov vezanih na vredosti
|
||
|
public function displayVrednostTable(){
|
||
|
|
||
|
$data = $this->getVrednostParadata();
|
||
|
|
||
|
echo '<table class="advanced_paradata_table vrednost_paradata styled_table">';
|
||
|
|
||
|
echo '<tr>';
|
||
|
echo '<th>Page session ID</th>';
|
||
|
echo '<th>Question ID</th>';
|
||
|
echo '<th>Vrednost ID</th>';
|
||
|
echo '<th>Time</th>';
|
||
|
echo '<th>Event</th>';
|
||
|
echo '<th>Value</th>';
|
||
|
echo '</tr>';
|
||
|
|
||
|
foreach($data as $row){
|
||
|
|
||
|
echo '<tr>';
|
||
|
|
||
|
echo '<td>'.$row['page_id'].'</td>';
|
||
|
echo '<td>'.$row['spr_id'].'</td>';
|
||
|
echo '<td>'.$row['vre_id'].'</td>';
|
||
|
echo '<td>'.$row['time'].'</td>';
|
||
|
echo '<td>'.$row['event'].'</td>';
|
||
|
echo '<td>'.$row['value'].'</td>';
|
||
|
|
||
|
echo '</tr>';
|
||
|
}
|
||
|
|
||
|
echo '</table>';
|
||
|
}
|
||
|
|
||
|
// Izpisemo tabelo ostalih parapodatkov
|
||
|
public function displayOtherTable(){
|
||
|
|
||
|
$data = $this->getOtherParadata();
|
||
|
|
||
|
echo '<table class="advanced_paradata_table other_paradata styled_table">';
|
||
|
|
||
|
echo '<tr>';
|
||
|
echo '<th>Page session ID</th>';
|
||
|
echo '<th>Time</th>';
|
||
|
echo '<th>Event</th>';
|
||
|
echo '<th>Value</th>';
|
||
|
echo '<th>Position</th>';
|
||
|
echo '<th>Element type</th>';
|
||
|
echo '<th>Element id</th>';
|
||
|
echo '<th>Element class</th>';
|
||
|
echo '</tr>';
|
||
|
|
||
|
foreach($data as $row){
|
||
|
|
||
|
echo '<tr>';
|
||
|
|
||
|
echo '<td>'.$row['page_id'].'</td>';
|
||
|
echo '<td>'.$row['time'].'</td>';
|
||
|
echo '<td>'.$row['event'].'</td>';
|
||
|
echo '<td>'.$row['value'].'</td>';
|
||
|
echo '<td>X: '.$row['pos_x'].', Y: '.$row['pos_y'].'</td>';
|
||
|
echo '<td>'.$row['div_type'].'</td>';
|
||
|
echo '<td>'.$row['div_id'].'</td>';
|
||
|
echo '<td>'.$row['div_class'].'</td>';
|
||
|
|
||
|
echo '</tr>';
|
||
|
}
|
||
|
|
||
|
echo '</table>';
|
||
|
}
|
||
|
|
||
|
// Izpisemo tabelo premikov miske
|
||
|
public function displayMovementTable(){
|
||
|
|
||
|
$data = $this->getMovementParadata();
|
||
|
|
||
|
echo '<table class="advanced_paradata_table movement_paradata styled_table">';
|
||
|
|
||
|
echo '<tr>';
|
||
|
echo '<th>Page session ID</th>';
|
||
|
echo '<th>Time start</th>';
|
||
|
echo '<th>Time end</th>';
|
||
|
echo '<th>Position start</th>';
|
||
|
echo '<th>Position end</th>';
|
||
|
echo '<th>Distance traveled</th>';
|
||
|
echo '</tr>';
|
||
|
|
||
|
foreach($data as $row){
|
||
|
|
||
|
echo '<tr>';
|
||
|
|
||
|
echo '<td>'.$row['page_id'].'</td>';
|
||
|
echo '<td>'.$row['time_start'].'</td>';
|
||
|
echo '<td>'.$row['time_end'].'</td>';
|
||
|
echo '<td>X: '.$row['pos_x_start'].', Y: '.$row['pos_y_start'].'</td>';
|
||
|
echo '<td>X: '.$row['pos_x_end'].', Y: '.$row['pos_y_end'].'</td>';
|
||
|
echo '<td>'.$row['distance'].'</td>';
|
||
|
|
||
|
echo '</tr>';
|
||
|
}
|
||
|
|
||
|
echo '</table>';
|
||
|
}
|
||
|
|
||
|
// Izpisemo tabelo ostalih parapodatkov
|
||
|
public function displayAlertTable(){
|
||
|
|
||
|
$data = $this->getAlertParadata();
|
||
|
|
||
|
echo '<table class="advanced_paradata_table alert_paradata styled_table">';
|
||
|
|
||
|
echo '<tr>';
|
||
|
echo '<th>Page session ID</th>';
|
||
|
echo '<th>Display time</th>';
|
||
|
echo '<th>Close time</th>';
|
||
|
echo '<th>Type</th>';
|
||
|
echo '<th>Trigger ID</th>';
|
||
|
echo '<th>Trigger type</th>';
|
||
|
echo '<th>Ignorable</th>';
|
||
|
echo '<th>Alert text</th>';
|
||
|
echo '<th>User action</th>';
|
||
|
echo '</tr>';
|
||
|
|
||
|
foreach($data as $row){
|
||
|
|
||
|
echo '<tr>';
|
||
|
|
||
|
echo '<td>'.$row['page_id'].'</td>';
|
||
|
echo '<td>'.$row['time_display'].'</td>';
|
||
|
echo '<td>'.$row['time_close'].'</td>';
|
||
|
echo '<td>'.$row['type'].'</td>';
|
||
|
echo '<td>'.$row['trigger_id'].'</td>';
|
||
|
echo '<td>'.$row['trigger_type'].'</td>';
|
||
|
echo '<td>'.$row['ignorable'].'</td>';
|
||
|
echo '<td>'.$row['text'].'</td>';
|
||
|
echo '<td>'.$row['action'].'</td>';
|
||
|
|
||
|
echo '</tr>';
|
||
|
}
|
||
|
|
||
|
echo '</table>';
|
||
|
}
|
||
|
|
||
|
|
||
|
// Pridobimo naslove parapodatkov vezane na strani
|
||
|
private function getHeader($table_name='srv_advanced_paradata_page'){
|
||
|
|
||
|
$header = array();
|
||
|
|
||
|
$sql = sisplet_query("SHOW columns FROM ".$table_name."");
|
||
|
while($row = mysqli_fetch_array($sql)){
|
||
|
$header[] = $row['Field'];
|
||
|
}
|
||
|
|
||
|
return $header;
|
||
|
}
|
||
|
|
||
|
// Pridobimo parapodatke vezane na strani
|
||
|
private function getPageParadata($all=false){
|
||
|
|
||
|
$data = array();
|
||
|
|
||
|
$limit = $all ? '' : ' LIMIT '.$this->limit;
|
||
|
|
||
|
$sql = sisplet_query("SELECT * FROM srv_advanced_paradata_page
|
||
|
WHERE ank_id='".$this->anketa."'
|
||
|
ORDER BY id DESC ".$limit."");
|
||
|
while($row = mysqli_fetch_array($sql)){
|
||
|
$data[] = $row;
|
||
|
}
|
||
|
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
// Pridobimo parapodatke vezane na vprasanja
|
||
|
private function getQuestionParadata($all=false){
|
||
|
|
||
|
$data = array();
|
||
|
|
||
|
$limit = $all ? '' : ' LIMIT '.$this->limit;
|
||
|
|
||
|
$sql = sisplet_query("SELECT q.* FROM srv_advanced_paradata_question q, srv_advanced_paradata_page p
|
||
|
WHERE p.ank_id='".$this->anketa."' AND q.page_id=p.id
|
||
|
ORDER BY id DESC ".$limit."");
|
||
|
while($row = mysqli_fetch_array($sql)){
|
||
|
$data[] = $row;
|
||
|
}
|
||
|
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
// Pridobimo parapodatke vezane na vrednosti v vprasanju
|
||
|
private function getVrednostParadata($all=false){
|
||
|
|
||
|
$data = array();
|
||
|
|
||
|
$limit = $all ? '' : ' LIMIT '.$this->limit;
|
||
|
|
||
|
$sql = sisplet_query("SELECT v.* FROM srv_advanced_paradata_vrednost v, srv_advanced_paradata_page p
|
||
|
WHERE p.ank_id='".$this->anketa."' AND v.page_id=p.id
|
||
|
ORDER BY id DESC ".$limit."");
|
||
|
while($row = mysqli_fetch_array($sql)){
|
||
|
$data[] = $row;
|
||
|
}
|
||
|
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
// Pridobimo ostale parapodatke
|
||
|
private function getOtherParadata($all=false){
|
||
|
|
||
|
$data = array();
|
||
|
|
||
|
$limit = $all ? '' : ' LIMIT '.$this->limit;
|
||
|
|
||
|
$sql = sisplet_query("SELECT o.* FROM srv_advanced_paradata_other o, srv_advanced_paradata_page p
|
||
|
WHERE p.ank_id='".$this->anketa."' AND o.page_id=p.id
|
||
|
ORDER BY id DESC ".$limit."");
|
||
|
while($row = mysqli_fetch_array($sql)){
|
||
|
$data[] = $row;
|
||
|
}
|
||
|
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
// Pridobimo parapodatke premikov miske
|
||
|
private function getMovementParadata($all=false){
|
||
|
|
||
|
$data = array();
|
||
|
|
||
|
$limit = $all ? '' : ' LIMIT '.$this->limit;
|
||
|
|
||
|
$sql = sisplet_query("SELECT m.* FROM srv_advanced_paradata_movement m, srv_advanced_paradata_page p
|
||
|
WHERE p.ank_id='".$this->anketa."' AND m.page_id=p.id
|
||
|
ORDER BY id DESC ".$limit."");
|
||
|
while($row = mysqli_fetch_array($sql)){
|
||
|
$data[] = $row;
|
||
|
}
|
||
|
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
// Pridobimo parapodatke alertov
|
||
|
private function getAlertParadata($all=false){
|
||
|
|
||
|
$data = array();
|
||
|
|
||
|
$limit = $all ? '' : ' LIMIT '.$this->limit;
|
||
|
|
||
|
$sql = sisplet_query("SELECT a.* FROM srv_advanced_paradata_alert a, srv_advanced_paradata_page p
|
||
|
WHERE p.ank_id='".$this->anketa."' AND a.page_id=p.id
|
||
|
ORDER BY id DESC ".$limit."");
|
||
|
while($row = mysqli_fetch_array($sql)){
|
||
|
$data[] = $row;
|
||
|
}
|
||
|
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
|
||
|
// Zapisemo v datoteko parapodatke vezane na strani
|
||
|
private function writePageParadata($fd, $header){
|
||
|
|
||
|
$sql = sisplet_query("SELECT * FROM srv_advanced_paradata_page
|
||
|
WHERE ank_id='".$this->anketa."'
|
||
|
ORDER BY id DESC ".$limit."");
|
||
|
while($row = mysqli_fetch_array($sql)){
|
||
|
|
||
|
$data_line = '';
|
||
|
foreach($header as $col){
|
||
|
$data_line .= '\''.$row[$col].'\',';
|
||
|
}
|
||
|
$data_line = substr($data_line, 0, -1);
|
||
|
|
||
|
fwrite($fd, $data_line."\r\n");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Zapisemo v datoteko parapodatke vezane na vprasanja
|
||
|
private function writeQuestionParadata($fd, $header){
|
||
|
|
||
|
$sql = sisplet_query("SELECT q.* FROM srv_advanced_paradata_question q, srv_advanced_paradata_page p
|
||
|
WHERE p.ank_id='".$this->anketa."' AND q.page_id=p.id
|
||
|
ORDER BY id DESC ".$limit."");
|
||
|
while($row = mysqli_fetch_array($sql)){
|
||
|
|
||
|
$data_line = '';
|
||
|
foreach($header as $col){
|
||
|
$data_line .= '\''.$row[$col].'\',';
|
||
|
}
|
||
|
$data_line = substr($data_line, 0, -1);
|
||
|
|
||
|
fwrite($fd, $data_line."\r\n");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Zapisemo v datoteko parapodatke vezane na vrednosti v vprasanju
|
||
|
private function writeVrednostParadata($fd, $header){
|
||
|
|
||
|
$sql = sisplet_query("SELECT v.* FROM srv_advanced_paradata_vrednost v, srv_advanced_paradata_page p
|
||
|
WHERE p.ank_id='".$this->anketa."' AND v.page_id=p.id
|
||
|
ORDER BY id DESC ".$limit."");
|
||
|
while($row = mysqli_fetch_array($sql)){
|
||
|
|
||
|
$data_line = '';
|
||
|
foreach($header as $col){
|
||
|
$data_line .= '\''.$row[$col].'\',';
|
||
|
}
|
||
|
$data_line = substr($data_line, 0, -1);
|
||
|
|
||
|
fwrite($fd, $data_line."\r\n");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Zapisemo v datoteko ostale parapodatke
|
||
|
private function writeOtherParadata($fd, $header){
|
||
|
|
||
|
$sql = sisplet_query("SELECT o.* FROM srv_advanced_paradata_other o, srv_advanced_paradata_page p
|
||
|
WHERE p.ank_id='".$this->anketa."' AND o.page_id=p.id
|
||
|
ORDER BY id DESC ".$limit."");
|
||
|
while($row = mysqli_fetch_array($sql)){
|
||
|
|
||
|
$data_line = '';
|
||
|
foreach($header as $col){
|
||
|
$data_line .= '\''.$row[$col].'\',';
|
||
|
}
|
||
|
$data_line = substr($data_line, 0, -1);
|
||
|
|
||
|
fwrite($fd, $data_line."\r\n");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Zapisemo v datoteko parapodatke premikov miske
|
||
|
private function writeMovementParadata($fd, $header){
|
||
|
|
||
|
$sql = sisplet_query("SELECT m.* FROM srv_advanced_paradata_movement m, srv_advanced_paradata_page p
|
||
|
WHERE p.ank_id='".$this->anketa."' AND m.page_id=p.id
|
||
|
ORDER BY id DESC ".$limit."");
|
||
|
while($row = mysqli_fetch_array($sql)){
|
||
|
|
||
|
$data_line = '';
|
||
|
foreach($header as $col){
|
||
|
$data_line .= '\''.$row[$col].'\',';
|
||
|
}
|
||
|
$data_line = substr($data_line, 0, -1);
|
||
|
|
||
|
fwrite($fd, $data_line."\r\n");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Zapisemo v datoteko parapodatke alertov
|
||
|
private function writeAlertParadata($fd, $header){
|
||
|
|
||
|
$sql = sisplet_query("SELECT a.* FROM srv_advanced_paradata_alert a, srv_advanced_paradata_page p
|
||
|
WHERE p.ank_id='".$this->anketa."' AND a.page_id=p.id
|
||
|
ORDER BY id DESC ".$limit."");
|
||
|
while($row = mysqli_fetch_array($sql)){
|
||
|
|
||
|
$data_line = '';
|
||
|
foreach($header as $col){
|
||
|
$data_line .= '\''.$row[$col].'\',';
|
||
|
}
|
||
|
$data_line = substr($data_line, 0, -1);
|
||
|
|
||
|
fwrite($fd, $data_line."\r\n");
|
||
|
}
|
||
|
}
|
||
|
}
|