0) || (isset ($anketa) && $anketa > 0)) { $this->anketa = (isset ($_REQUEST['anketa']) && $_REQUEST['anketa'] > 0) ? $_REQUEST['anketa'] : $anketa; } else { return 'Anketa ID ne obstaja'; } # poiščemo aktivno anketo SurveyInfo :: getInstance()->SurveyInit($this->anketa); $this->db_table = SurveyInfo::getInstance()->getSurveyArchiveDBString(); if (isset($_GET['m']) && $_GET['m'] == 'tracking_data') $this->sub = 'data'; elseif (isset($_GET['appendMerge']) && $_GET['appendMerge'] == '1') $this->sub = 'append'; else $this->sub = 'survey'; // Filter po statusu if (isset($_GET['status']) && in_array($_GET['status'], array('0', '1', '2', '3', '4', '5', '6'))) $this->status = " AND status = '{$_GET[status]}' "; return $this; } private static $_instance; /** * V kolikor razred kličemo statično * * @return instance */ public static function init() { if (!static::$_instance) static::$_instance = new TrackingClass(); return static::$_instance; } /** * Filter po statusih * Filter omogoča, da se prvi parameter ne upošteva statusa, v koliko ni filtra upošteva vse statuse. * Drugi parameter naredi inverzno operacijo - išče samo po tem statusu * 0 => urejanje * 1 => uvoz podatkov * 2 => analiza * 3 => reporti * 4 => podatki * 5 => objava - vabila * 6 => hierarhija * 20 => hierarhija - splošno * 21 => hierarhija - gradnja strukture * 22 => hierarhija - uporabniki * * @param (int or array) $exclude_status * @param (boolean) $invert_status * @return $this */ public function filter($exclude_status = null, $invert_status = false) { $opcija = '!'; if ($invert_status) $opcija = ''; if (!is_null($exclude_status) && is_int($exclude_status)) { $this->status = " AND status " . $opcija . "= '" . $exclude_status . "' "; } elseif (!is_null($exclude_status) && is_array($exclude_status)) { if (!empty($opcija)) { $this->status = " AND status NOT IN (" . implode(',', $exclude_status) . ")"; } else { $this->status = " AND status IN (" . implode(',', $exclude_status) . ")"; } } return $this; } /** * @desc prikaze tracking sprememb * status: * -1 => unknown * 0 => urejanje * 1 => uvoz podatkov * 2 => analiza * 3 => reporti * 4 => podatki * 5 => objava - vabila * 20 => hierarhija - splošno * 21 => hierarhija - gradnja strukture * 22 => hierarhija - uporabniki */ public function trackingDisplay() { global $lang; $surveyName = SurveyInfo::getInstance()->getSurveyTitle(); echo '
'; echo '' . $lang['srv_survey_archives_tracking_' . $this->sub] . ''; // Tabela s podatki o spremembah podatkov if ($this->sub == 'data') { // Filter po podatkih $data = ' AND (`get` LIKE \'%edit_data%\' OR (`get` LIKE \'%a: "data", m: "quick_edit"%\' AND `get` LIKE \'%post: "1"%\') OR (`get` LIKE \'%a: "dataCopyRow"%\') OR (`get` LIKE \'%a: "dataDeleteMultipleRow"%\') OR (`get` LIKE \'%a: "dataDeleteRow"%\') OR (`get` LIKE \'%urejanje: "1"%\' AND status=\'4\') )'; // Vrstice s podatki $sql = sisplet_query("SELECT * FROM srv_tracking".$this->db_table." WHERE ank_id = '$this->anketa' " . $data . " ORDER BY datetime DESC"); if(!empty(mysqli_fetch_array($sql))) { echo '

'.$lang['srv_survey_archives_tracking_survey_text1'].' '.$lang['srv_survey_archives_tracking_survey_text1b'].' \''.$lang['navigation_NAVI_RESULTS'].'\' - \''.$lang['navigation_NAVI_DATA'].'\' '.$lang['srv_survey_archives_tracking_survey_text1c'].' \''.$surveyName.'\'. '.$lang['srv_survey_archives_tracking_survey_text2'].' '.$lang['srv_survey_archives_tracking_survey_text3'].'.

'; // Izvoz v Excel echo '
'; echo ''.$lang['srv_export_excel'].''; echo '
'; echo ''; // Prva vrstica echo ''; echo ' '; echo ' '; echo ' '; echo ' '; echo ' '; echo ' '; echo ''; $count = 0; while ($row = mysqli_fetch_array($sql)) { echo ' 24 ? 'class="displayNone"' : '').($count == 24 ? ' class="show_as_last_row"' : '').'>'; $sqlu = sisplet_query("SELECT name, surname FROM users WHERE id = '$row[user]'"); $rowu = mysqli_fetch_array($sqlu); // Pri podatkih dobimo posebej podatke o editiranem respondentu $usr_id = ''; $cookie = ''; // Preverimo ce imamo usr_id v GET-u $get_array_temp = explode(', ', $row['get']); foreach ($get_array_temp AS $get_val) { $param = explode(': ', $get_val); $get_array[$param[0]] = $param[1]; } if (isset($get_array['usr_id']) && $get_array['usr_id'] != '') { $usr_id = trim($get_array['usr_id'], '"'); } // Preverimo ce iammo slucajno cookie elseif (isset($get_array['survey-' . $this->anketa]) && $get_array['survey-' . $this->anketa] != '') { $cookie = trim($get_array['survey-' . $this->anketa], '"'); } else { // Preverimo ce imamo usr_id v POST-u $post_array_temp = explode(', ', $row['post']); foreach ($post_array_temp AS $post_val) { $param = explode(': ', $post_val); $post_array[$param[0]] = $param[1]; } if (isset($post_array['usr_id']) && $post_array['usr_id'] != '') $usr_id = trim($post_array['usr_id'], '"'); } if ($usr_id != '') { $sqlR = sisplet_query("SELECT recnum FROM srv_user WHERE id = '$usr_id'"); $rowR = mysqli_fetch_array($sqlR); $recnum = $rowR['recnum']; } elseif ($cookie != '') { $sqlR = sisplet_query("SELECT recnum FROM srv_user WHERE cookie = '$cookie'"); $rowR = mysqli_fetch_array($sqlR); $recnum = $rowR['recnum']; } else $recnum = 0; echo ' '; echo ' '; echo ' '; echo ' '; echo ' '; echo ' '; echo ''; $count++; } } else { echo '

'.ucfirst($lang['srv_survey_archives_tracking_survey_text1b']).' \''.$lang['navigation_NAVI_RESULTS'].'\' - \''.$lang['navigation_NAVI_DATA'].'\' '.$lang['srv_survey_archives_tracking_survey_text1d'].'.

'; } } // Tabela s podatki o spremembah - vse oz. merge/append else { // Legenda statusov $statuses = array( -1 => $lang['srv_unknown'], 0 => $lang['srv_urejanje'], 1 => $lang['import_data'], 2 => $lang['export_analisys'], 3 => $lang['srv_reporti'], 4 => $lang['srv_podatki'], 5 => $lang['srv_inv_nav_email'], 20 => $lang['srv_hierarchy'], // Splošni podatki o hierarhiji 21 => $lang['srv_hierarchy_structure'], // Grajenje hierarhije 22 => $lang['srv_hierarchy_users'], // Urejanje uporabnikov ); // Filter za uvoze if ($this->sub == 'append') $appendMerge = " AND (`get` LIKE '%appendMerge%' OR status='1') "; else $appendMerge = ""; // Vrstice s podatki $sql = sisplet_query("SELECT * FROM srv_tracking".$this->db_table." WHERE ank_id = '$this->anketa' " . $this->status . " " . $appendMerge . " ORDER BY datetime DESC"); if(!empty(mysqli_fetch_array($sql))) { if($appendMerge == "") echo '

'.$lang['srv_survey_archives_tracking_survey_text1'].' '.$lang['srv_survey_archives_tracking_survey_text1a'].' \''. $surveyName .'\'. '.$lang['srv_survey_archives_tracking_survey_text2'].' '.$lang['srv_survey_archives_tracking_survey_text3'].'.

'; else echo '

'.$lang['srv_survey_archives_tracking_survey_text1'].', '.$lang['srv_survey_archives_tracking_survey_text_appendmerge'].' '.$lang['srv_survey_archives_tracking_survey_text1a'].' \''. $surveyName .'\'. '.$lang['srv_survey_archives_tracking_survey_text2'].' '.$lang['srv_survey_archives_tracking_survey_text3'].'.

'; // Izvoz v Excel echo '
'; echo ''.$lang['srv_export_excel'].''; echo '
'; echo '
' . $lang['date'] . '' . $lang['user'] . 'IPRespondentGETPOST
' . datetime($row['datetime']) . '
' . $rowu['name'] . ' ' . $rowu['surname'] . '
' . $row['ip'] . '' . $recnum . '
' . $row['get'] . '
' . (($row['post'] != "") ? $row['post'] : '/') . '
'; // Prva vrstica echo ''; echo ' '; echo ' '; echo ' '; echo ' '; echo ' '; echo ' '; echo ''; $count = 0; while ($row = mysqli_fetch_array($sql)) { echo ' 24 ? 'class="displayNone"' : '').($count == 24 ? ' class="show_as_last_row"' : '').'>'; $sqlu = sisplet_query("SELECT name, surname FROM users WHERE id = '$row[user]'"); $rowu = mysqli_fetch_array($sqlu); echo ' '; echo ' '; echo ' '; echo ' '; echo ' '; echo ' '; echo ''; $count++; } } else{ echo $lang['srv_survey_archives_tracking_append_no_data']; } } echo '
' . $lang['date'] . '' . $lang['user'] . 'IPPodstranGETPOST
' . datetime($row['datetime']) . '
' . $rowu['name'] . ' ' . $rowu['surname'] . '
' . $row['ip'] . '' . $statuses[$row['status']] . '
' . $row['get'] . '
' . (($row['post'] != "") ? $row['post'] : '/') . '
'; echo '
'; } public function csvExport(){ define('delimiter', ';'); $podatki = 'datetime' . delimiter; $podatki .= 'user_id' . delimiter; $podatki .= 'user_name' . delimiter; $podatki .= 'ip' . delimiter; $podatki .= 'status' . delimiter; $podatki .= 'parameter' . delimiter; $podatki .= 'value' . delimiter; $podatki .= 'parameter' . delimiter; $podatki .= 'value' . delimiter; $podatki .= "\n"; $sql = sisplet_query("SELECT t.*, u.name, u.surname FROM srv_tracking".$this->db_table." t, users u WHERE t.ank_id = '" . $this->anketa."' ".str_replace('status', 't.status', $this->status)." AND u.id=t.user ORDER BY t.datetime DESC "); while ($row = mysqli_fetch_array($sql)) { $podatki .= '' . datetime($row['datetime']) . delimiter; $podatki .= '' . $row['user'] . delimiter; $podatki .= '' . $row['name'].' '.$row['surname'] . delimiter; $podatki .= '' . $row['ip'] . delimiter; $podatki .= '' . $row['status'] . delimiter; foreach (explode(',', $row['get']) AS $value) { $value = explode(':', $value); $podatki .= trim($value[0]) . delimiter; $podatki .= trim($value[1]) . delimiter; } $podatki .= "\n"; } $ime = str_replace('-', '_', $_GET['a']); return Export::init()->csv('Spremembe_' . $ime, $podatki); } /** * Update srv_tracking table * @desc vnese spremembo v srv_tracking za sledenje sprememb * * @param (int) $anketa * @param (int) $status */ private static $time_start; static function update($anketa, $status = 0) { global $global_user_id; # poiščemo aktivno anketo SurveyInfo :: getInstance()->SurveyInit($anketa); $db_table = SurveyInfo::getInstance()->getSurveyArchiveDBString(); $get = ''; foreach ($_GET AS $key => $val) { if ($get != '') $get .= ', '; $get .= $key . ': "' . $val . '"'; } $post = ''; foreach ($_POST AS $key => $val) { if ($post != '') $post .= ', '; if (is_array($val)) $val = self::arrayToString($val); $post .= $key . ': "' . $val . '"'; } // izracunamo trajanje skripte v sekundah if (self::$time_start != null) $time_seconds = microtime(true) - self::$time_start; else $time_seconds = 0; // IP uporabnika $ip = GetIP(); $s = sisplet_query("INSERT INTO srv_tracking".$db_table." (ank_id, datetime, ip, user, `get`, post, status, time_seconds) VALUES ('$anketa', NOW(), '".$ip."', '$global_user_id', '$get', '$post','$status', '$time_seconds')"); if (!$s) echo mysqli_error($GLOBALS['connect_db']); } static function update_user($status = 0) { global $global_user_id; $get = ''; foreach ($_GET AS $key => $val) { if ($get != '') $get .= ', '; $get .= $key . ': "' . $val . '"'; } $post = ''; foreach ($_POST AS $key => $val) { if ($post != '') $post .= ', '; if (is_array($val)) $val = self::arrayToString($val); $post .= $key . ': "' . $val . '"'; } // izracunamo trajanje skripte v sekundah if (self::$time_start != null) $time_seconds = microtime(true) - self::$time_start; else $time_seconds = 0; // IP uporabnika $ip = GetIP(); $s = sisplet_query("INSERT INTO user_tracking (datetime, ip, user, `get`, post, status, time_seconds) VALUES (NOW(), '".$ip."', '$global_user_id', '$get', '$post','$status', '$time_seconds')"); if (!$s) echo mysqli_error($GLOBALS['connect_db']); } private static function arrayToString($array) { $string = ""; if (is_array($array)) { foreach ($array as $key => $value) { if (is_array($value)) { $string .= ', '.$key .': [' . self::arrayToString($value) . '] '; } else { if ($key == 0) $string .= $key . ': ' . $value . ' '; } } } return $string; } }