Init(self::$sid, self::$uid); # polovimo profile iz baze $stringSelect = "SELECT * FROM srv_zoom_profiles WHERE sid='" . self::$sid . "' AND uid='" . self::$uid . "'"; $querySelect = sisplet_query($stringSelect); #prvi profil je privezti - brez zooma self::$profiles[0] = array('id'=>0, 'name'=>$lang['srv_default_without']); # če obstajajo profili iz baze jih dodamo if (mysqli_num_rows($querySelect)) { #najprej dodamo sejo če obstaja session_start(); if (isset($_SESSION['surveyZoom'][self::$sid])) { self::$profiles[-1] = $_SESSION['surveyZoom'][self::$sid]; } while ( $rowSelect = mysqli_fetch_assoc($querySelect) ) { self::$profiles[$rowSelect['id']] = $rowSelect; self::$profiles[$rowSelect['id']]['vars'] = unserialize($rowSelect['vars']); self::$profiles[$rowSelect['id']]['conditions'] = unserialize($rowSelect['conditions']); } } else { # v bazi ni profilov #nato dodamo sejo če obstaja session_start(); if (isset($_SESSION['surveyZoom'][self::$sid])) { self::$profiles[-1] = $_SESSION['surveyZoom'][self::$sid]; } } # preverimo ali ima uporabnik nastavljen privzet profil $dzp = SurveyUserSetting :: getInstance()->getSettings('default_zoom_profile'); if ($dzp == -1 || $dzp > 0 ) { self::$currentProfileId = $dzp; } else { self::$currentProfileId = 0; self::SetDefaultProfile(0); } # če uporabnik nima profilov, in obstajajo demografske spremenljivke naredimo nov DM profil if (count(self::$profiles) == 1 ) { # 1profil je vedno (privzeti) $all_spr = Cache::cache_all_srv_spremenljivka(self::$sid); $variables_to_add = array(); if (is_countable($all_spr) && count($all_spr) > 0) { foreach ($all_spr AS $id => $spr) { if (in_array($spr['variable'], array('XSPOL','XIZOBRAZBA','XSTAROST','DMspol','DMizobrazba','DMstarost')) || Demografija::getInstance()->isDemografija($spr['variable'])) { $variables_to_add[] = $id; } } } if (count ($variables_to_add) > 0 ) { # dodamo profil in ga izberemo za privzetega $_SESSION['surveyZoom'][self::$sid] = array('id'=>-1, 'name'=>$lang['srv_zoom_profile_demografija'],'vars'=>$variables_to_add, 'conditions'=> '', 'if_id'=>0); self::$profiles[-1] = array('id'=>$pid, 'sid'=>self::$sid, 'uid'=>self::$uid, 'name'=>$lang['srv_zoom_profile_demografija'], 'vars'=>$variables_to_add,'conditions'=>''); if (!isset($_POST['pid']) && !((int)$_POST['pid'] > 0)) { #self::SetDefaultProfile(-1); #self::$currentProfileId = -1; } } } } static function DisplayLink($hideAdvanced = true) { global $lang; $css = (self::$currentProfileId == 0 ? ' gray' : ''); if ($hideAdvanced == false || self::$currentProfileId != 0) { echo '
  •  
  • '; echo '
  • '; echo ''.$lang['srv_zoom_setting'].''; echo '
  • '; } } function ajax() { switch ($_GET['a']) { case 'showProfile': self::showProfile(); break; case 'changeProfile': self::changeProfile($_POST['pid']); break; case 'saveProfile': self::saveProfile(); break; case 'deleteProfile': self::deleteProfile($_POST['pid']); break; case 'renameProfile': self::renameProfile(); break; case 'changeZoomCheckbox': self::changeZoomCheckbox(); break; case 'removeZoomCheckbox': self::removeZoomCheckbox(); break; case 'createNewProfile': self::createNewProfile(); break; case 'togleExtended': self::togleExtended(); break; case 'toggleShowZoomVariables': self::toggleShowZoomVariables(); break; case 'doZoomFromInspect': self::doZoomFromInspect(); break; default: print_r("
    ");
    				print_r($_GET);
    				print_r($_POST);
    				print_r("
    "); break; } } static function getCurentProfileId() { return self::$currentProfileId; } /** Ponastavi id privzetega profila * */ static function SetDefaultProfile($pid) { self::$currentProfileId = $pid; $saved = SurveyUserSetting :: getInstance()->saveSettings('default_zoom_profile',$pid); } function changeProfile($pid) { $tmp_profiles = self::$profiles; # če profil z pid ne obstaja nastavimo prvega iz baze (ki pa ni demografija) if (!isset($tmp_profiles[$pid]) && count($tmp_profiles) > 0) { if (isset($tmp_profiles[-1]) && (int)$pid != -1) { unset($tmp_profiles[-1]); } if (count($tmp_profiles) > 0){ $pid = key(self::$profiles); } else { $pid = 0; } } self::SetDefaultProfile($pid); } function showProfile() { global $lang; echo ''; // Naslov echo '

    '.$lang['srv_zoom_setting'].'

    '; if ($current_pid == null) { $current_pid = self::getCurentProfileId(); } $currentFilterProfile = self::$profiles[$current_pid]; if ( self::$currentProfileId != ZOOM_DEFAULT_PROFILE ) { echo '
    '; echo $lang['srv_not_default_setting']; echo '

    '; } echo '
    '; echo ''; # zlistamo vse profile echo ''; if (count(self::$profiles)) { foreach (self::$profiles as $id => $profile) { echo '
    '; echo $profile['name']; if($current_pid == $id){ # sistemskega ne moremo izbrisati if ($current_pid != 0) { echo ''."\n"; } # sistemskega in seje ne moremo preimenovati if ($current_pid > 0) { echo ''."\n"; } } echo '
    '; } } echo '
    '; # zoom_profilea echo '
    '; # zoom_profiles_holder echo '
    '; # zoom_profiles_left echo '
    '."\n"; if ($current_pid == 0) { echo '
    '; echo $lang['srv_change_default_profile']; echo '
    '; // zoom_profile_note echo '
    '."\n"; } echo '
    '; self::DisplayProfileData($current_pid); echo '
    '; // zoom_profile_content echo '
    '; // zoom_profile_right echo '
    '."\n"; if ((int)$current_pid <= 0 ) { echo ''; echo ''; echo ''; } else { echo ''; echo ''; echo ''; echo ''; } echo '
    '."\n"; // zoom_button_holder // cover Div //echo '
    '."\n"; // div za kreacijo novega echo '
    '.$lang['srv_missing_profile_name'].': '."\n"; echo ''."\n"; echo ''.$lang['srv_analiza_arhiviraj_save'].''."\n"; echo ''.$lang['srv_close_profile'].''."\n"; echo '
    '."\n"; // div za preimenovanje echo '
    '.$lang['srv_missing_profile_name'].': '."\n"; echo ''."\n"; echo ''."\n"; echo ''.$lang['srv_rename_profile_yes'].''."\n"; echo ''.$lang['srv_close_profile'].''."\n"; echo '
    '."\n"; // div za brisanje echo '
    '.$lang['srv_missing_profile_delete_confirm'].': ' . $currentFilterProfile['name'] . '?'."\n"; echo ''."\n"; echo ''.$lang['srv_delete_profile_yes'].''."\n"; echo ''.$lang['srv_close_profile'].''."\n"; echo '
    '."\n"; } /** Funkcija prikaze osnovnih informacije profila * */ function DisplayProfileData($current_pid=null) { global $lang; if (isset($_POST['error'])) { echo '* '.$lang[$_POST['error']].'
    '; } # podatki profila if ($current_pid == null) { $current_pid = self::$currentProfileId; } $cp = self::$profiles[$current_pid]; $vars = $cp['vars']; $all_spr = Cache::cache_all_srv_spremenljivka(self::$sid,true); echo ''.$lang['srv_zoom_choose'].''; if (count($all_spr) > 0) foreach ($all_spr AS $id => $spremenljivka) { if ( in_array($spremenljivka['tip'], array(1,2,3) ) ) { echo '
    '; echo ''; echo '
    '; } else if ( in_array($spremenljivka['tip'], array(6,16,17))) { echo '
    '; # izpišemo glavno spremenljivko echo ''; # izpišemo gride (zamaknjeno) $sql = sisplet_query("SELECT id, naslov, variable FROM srv_vrednost WHERE spr_id='$id' AND other = 0 ORDER BY vrstni_red"); while ($row = mysqli_fetch_assoc($sql)) { echo ''; } echo '
    '; } } echo '
    '; } /* Shranimo izbrane variable in resetiramo if na 0, ter pobrišemo morebitni pogoj če obstaja * */ static function SaveProfile() { global $lang, $global_user_id; $pid = isset($_POST['pid']) && (int)$_POST['pid'] > 0 ? (int)$_POST['pid'] # normaln profil : -1; #seja $profil_data = self::$profiles[$pid]; # preverimo ali je star profil imel kak if če ja ga pobrišemo if ((int)$profil_data['if_id'] > 0 ) { if ((int)$if_id > 0) { $delStr = "DELETE FROM srv_if WHERE id = '$if_id'"; sisplet_query($delStr); $delStr = "DELETE FROM srv_condition WHERE if_id = '$if_id'"; sisplet_query($delStr); sisplet_query("COMMIT"); } } # ali delamo preko seje ali baze if ($pid > 0) { # shranimo v bazo $vars = serialize(isset($_POST['vars']) ? $_POST['vars'] : ''); $updateString = "UPDATE srv_zoom_profiles SET vars = '$vars', conditions='', if_id=0 WHERE id='$pid'"; $updatequery = sisplet_query($updateString); sisplet_query("COMMIT"); } else { session_start(); # shranjujenmo v sejo $pid=-1; #LANG $_SESSION['surveyZoom'][self::$sid] = array('id'=>-1,'vars'=>$_POST['vars'], 'conditions'=> '', 'if_id'=>0); if (!isset($_SESSION['surveyZoom'][self::$sid]['name']) || $_SESSION['surveyZoom'][self::$sid]['name'] == '') { $_SESSION['surveyZoom'][self::$sid]['name'] = $lang['srv_zoom_profile_session']; } session_commit(); } self::SetDefaultProfile($pid); } /** shranimo nov profil * * Enter description here ... */ function createNewProfile() { global $lang,$global_user_id; $return = array('newId' => -1, 'error'=>'1','msg'=> 'Profila ni bilo mogoče kreirati!' ); #LANG $name = isset($_POST['name']) ? $_POST['name'] : 'Nov profil'; $vars = serialize(isset($_POST['vars']) ? $_POST['vars'] : ''); $iStr = "INSERT INTO srv_zoom_profiles (sid, uid, name,vars,conditions) VALUES ('".self::$sid."', '".self::$uid."', '$name','$vars','')"; $sql = sisplet_query($iStr); $return['msg'] =$iStr; if (!$sql) { $return['error'] = '1'; $return['msg'] = 'Pri kreiranju profila so bile težave!'; } else { $pid = mysqli_insert_id($GLOBALS['connect_db']); sisplet_query("COMMIT"); $return['newId'] = $pid; self::getProfiles(); self::SetDefaultProfile($pid); $return['error'] = '0'; $return['msg'] = 'Profil je bil uspešno kreiran:'.$pid; } echo json_encode($return); exit; } static function deleteProfile($pid = 0) { #pobrišemo pogoj če obstaha $if_id = self::$profiles[$pid]['if_id']; if ((int)$if_id > 0) { $stringUpdate = "DELETE FROM srv_if WHERE id = ".$if_id; $updated = sisplet_query($stringUpdate); sisplet_query("COMMIT"); } if (isset($pid) && $pid == -1) { session_start(); unset($_SESSION['surveyZoom'][self::$sid]); session_commit(); } else if (isset($pid) && $pid > 0) { // Izbrišemo profil in nastavimo privzetega $stringUpdate = "DELETE FROM srv_zoom_profiles WHERE id = ".$pid; $updated = sisplet_query($stringUpdate); sisplet_query("COMMIT"); } # nastavimo privzet profil self::getProfiles(); self::SetDefaultProfile('0'); } static function displayZoomConditions($showDiv = true) { global $lang; $vars = self::$profiles[self::$currentProfileId]['vars']; $all_spr = Cache::cache_all_srv_spremenljivka(self::$sid); if (is_countable($vars) && count($vars) > 0) { $conditions = self::$profiles[self::$currentProfileId]['conditions']; if ($showDiv == true) { echo ''; } } } function removeZoomCheckbox() { #odstranimo if $if_id=(int)self::$profiles[self::$currentProfileId]['if_id']; if ( $if_id> 0) { if(self::$currentProfileId == -1) { session_start(); $_SESSION['surveyZoom'][self::$sid]['if_id'] = 0; $_SESSION['surveyZoom'][self::$sid]['conditions'] = null; } else { $update = "UPDATE srv_zoom_profiles SET if_id = 0, conditions='' where id='".self::$currentProfileId."'"; $sql = sisplet_query($update); sisplet_query("COMMIT"); } if ((int)$if_id > 0) { $delStr = "DELETE FROM srv_if WHERE id = '$if_id'"; sisplet_query($delStr); sisplet_query("COMMIT"); } } } function changeZoomCheckbox() { if (isset($_POST['vars']) && is_array($_POST['vars']) && count($_POST['vars']) > 0 ) { $spr_groups = array(); foreach ($_POST['vars'] AS $tmpvar) { $_var = explode('_',$tmpvar); # med posameznimi sub grupami imamo OR pogoje med grupami pa AND #zgrupiramo po spremenljivkah in grupah if (isset($_var[1]) && $_var[1]!=null) { $spr_groups[$_var[0]][$_var[1]][] = $_var[2]; } else { $spr_groups[$_var[0]][0][] = $_var[2]; } } self::createZoomCondition($spr_groups); # še shranimo checkboxe session_start(); #če seja ne obstaja nastavimo privzet porfil na 0 - default if(self::$currentProfileId == -1) { session_start(); $_SESSION['surveyZoom'][self::$sid]['conditions'] = $spr_groups; } else { $conditions = serialize($spr_groups); $update = "UPDATE srv_zoom_profiles SET conditions = '$conditions' where id='".self::$currentProfileId."'"; $sql = sisplet_query($update); sisplet_query("COMMIT"); } } else { #odstranimo if $if_id=(int)self::$profiles[self::$currentProfileId]['if_id']; if ( $if_id> 0) { if(self::$currentProfileId == -1) { session_start(); $_SESSION['surveyZoom'][self::$sid]['if_id'] = 0; } else { $update = "UPDATE srv_zoom_profiles SET if_id = 0, conditions='' where id='".self::$currentProfileId."'"; $sql = sisplet_query($update); sisplet_query("COMMIT"); } if ((int)$if_id > 0) { $delStr = "DELETE FROM srv_if WHERE id = '$if_id'"; sisplet_query($delStr); sisplet_query("COMMIT"); } } } SurveyAnalysis::Init(self::$sid); SurveyAnalysis::Display(); } function createZoomCondition($spr_groups) { global $lang,$global_user_id; #najprej skreiramo nov if če še ne obstaja if ((int)self::$profiles[self::$currentProfileId]['if_id'] > 0) { $if_id = (int)self::$profiles[self::$currentProfileId]['if_id']; # preverimo dejanski obstoj ifa if ((int)$if_id > 0) { $chks1 = "SELECT id FROM srv_if WHERE id='$if_id'"; $chkq1 = sisplet_query($chks1); if (mysqli_num_rows($chkq1) == 0) { $if_id = 0; } } } if ( (int)$if_id == 0 || $if_id == null) { // if še ne obstaja, skreiramo novga $sql = sisplet_query("INSERT INTO srv_if (id) VALUES ('')"); $if_id = mysqli_insert_id($GLOBALS['connect_db']); sisplet_query("COMMIT"); } if ((int)$if_id > 0) { # updejtamo še zoom profil self::$profiles[self::$currentProfileId]['if_id'] = (int)$if_id; if ((int)self::$currentProfileId > 0 ) { # v bazi $updateString = "UPDATE srv_zoom_profiles SET if_id=".(int)$if_id." WHERE id='".(int)self::$currentProfileId."'"; $sql = sisplet_query($updateString); sisplet_query("COMMIT"); } else { # v seji session_start(); $_SESSION['surveyZoom'][self::$sid]['if_id'] = (int)$if_id; } #poiščemo katere condition_id-je lahko obdržimo, ostale pobrišemo if (is_array($spr_groups) &&count($spr_groups ) > 0 ) { $spr_vre = array(); foreach ($spr_groups AS $spr_id => $spr_group) { $cids = array(); foreach($spr_group AS $key => $values) { $cids[] = (int)$key; } # pobrišemo predhodne ife if (count($cids) > 0) { $spr_vre[] = "(spr_id = '$spr_id' AND vre_id IN (".implode(',',$cids)."))"; } } $delStr = "DELETE FROM srv_condition WHERE if_id = '$if_id' AND NOT (".implode(' OR ',$spr_vre).")"; sisplet_query($delStr); sisplet_query("COMMIT"); # dodamo pogoje za posamezne skupine spremenljivk $vrstni_red = 1; foreach ($spr_groups AS $spr_id => $spr_group) { $vrstni_red = self::createSubCondition($if_id,$spr_id,$spr_group,$vrstni_red); } } else { $delStr = "DELETE FROM srv_condition WHERE if_id = '$if_id'"; sisplet_query($delStr); sisplet_query("COMMIT"); } } } function createSubCondition($if_id,$spr_id,$spr_group,$vrstni_red) { foreach($spr_group AS $key => $values) { # če imamo vrednosti if ((int)$key == 0) { # preverimo ali že obstaja condition id $sStr = "SELECT id FROM srv_condition WHERE if_id='$if_id' AND spr_id='$spr_id'"; $sQry = sisplet_query($sStr); if (mysqli_num_rows($sQry) > 0) { # cond_id že obstaja uporabimo obstoječega $sRow = mysqli_fetch_assoc($sQry); $cond_id = $sRow['id']; } else { #vstavimo nov pogoj $istr = "INSERT INTO srv_condition (if_id, spr_id, vrstni_red) VALUES ('$if_id', '$spr_id', '$vrstni_red')" . " ON DUPLICATE KEY UPDATE spr_id='$spr_id', vrstni_red = '$vrstni_red'"; $sql = sisplet_query($istr); if (!$sql) { echo '
    -3 :: '.$istr; echo mysqli_error($GLOBALS['connect_db']); } $cond_id = mysqli_insert_id($GLOBALS['connect_db']); } # pobrišemo vrednosti if ($cond_id > 0) { $delStr = "DELETE FROM srv_condition_vre WHERE cond_id = '$cond_id'"; sisplet_query($delStr); } foreach ($values AS $value) { if ((int)$value > 0 || (int)$cond_id > 0) { $istr = "INSERT INTO srv_condition_vre (cond_id, vre_id) VALUES ('$cond_id', '$value')"; $sql = sisplet_query($istr); if (!$sql) { echo '
    -4 :: '.$istr; echo mysqli_error($GLOBALS['connect_db']); } } } } else { # če imamo grupe # preverimo ali že obstaja condition id $sStr = "SELECT id FROM srv_condition WHERE if_id='$if_id' AND spr_id='$spr_id' AND vre_id='$key'"; $sQry = sisplet_query($sStr); if (mysqli_num_rows($sQry) > 0) { # cond_id že obstaja uporabimo obstoječega $sRow = mysqli_fetch_assoc($sQry); $cond_id = $sRow['id']; } else { $istr = "INSERT INTO srv_condition (if_id, spr_id, vre_id, vrstni_red) VALUES ('$if_id', '$spr_id', '$key', '$vrstni_red')" . " ON DUPLICATE KEY UPDATE spr_id='$spr_id', vrstni_red = '$vrstni_red'"; $sql = sisplet_query($istr); if (!$sql) { echo '
    -3 :: '.$istr; echo mysqli_error($GLOBALS['connect_db']); } $cond_id = mysqli_insert_id($GLOBALS['connect_db']); } # pobrišemo gride if ($cond_id > 0) { $delStr = "DELETE FROM srv_condition_grid WHERE cond_id = '$cond_id'"; sisplet_query($delStr); } foreach ($values AS $value) { if ((int)$value > 0 || (int)$cond_id > 0) { $istr = "INSERT INTO srv_condition_grid (cond_id, grd_id) VALUES ('$cond_id', '".$value."')"; $sql = sisplet_query($istr); if (!$sql) { echo '
    -4 :: '.$istr; echo mysqli_error($GLOBALS['connect_db']); } } } } sisplet_query("COMMIT"); $vrstni_red++; } return $vrstni_red; } function togleExtended() { session_start(); if (isset($_POST['what']) && $_POST['what'] == 1) { $_SESSION['surveyZoom'][self::$sid]['extended'] = false; } else { $_SESSION['surveyZoom'][self::$sid]['extended'] = true; } } function toggleShowZoomVariables() { session_start(); if (isset($_POST['what']) && $_POST['what'] == 1) { $_SESSION['surveyZoom'][self::$sid]['showVariables'] = false; } else { $_SESSION['surveyZoom'][self::$sid]['showVariables'] = true; } } function renameProfile() { $pid = $_POST['pid']; $name = $_POST['name']; if (isset($pid) && $pid > 0 && isset($name) && trim($name) != "") { // popravimo podatek za variables $stringUpdate = "UPDATE srv_zoom_profiles SET name = '".$name."' WHERE id = '".$pid."'"; $updated = sisplet_query($stringUpdate); sisplet_query("COMMIT"); return $updated; } else { return -1; } } static function generateAwkCondition() { global $global_user_id; $zoom_if_id = (int)self::$profiles[self::$currentProfileId]['if_id']; if ($zoom_if_id > 0 ) { SurveyConditionProfiles :: Init(self::$sid, $global_user_id); return SurveyConditionProfiles:: generateAwkCondition($zoom_if_id); } else { return null; } } static function getConditionString() { global $lang; # $condition_label = self::$profiles[self::$currentProfileId]['condition_label']; ob_start(); $b = new Branching(self::$sid ); $if_id = (int)self::$profiles[self::$currentProfileId]['if_id']; $b->display_if_label($if_id); #$condition_label = mysqli_escape_string(ob_get_contents()); $condition_label = ob_get_contents(); ob_end_clean(); if ( $if_id > 0 && $condition_label != '') { echo '
    '; echo ''; # dodamo še +/- za razpiranje variabel echo ''; echo ' '; echo ''; echo ''; echo ' '; echo ''; echo ''; echo ''.$lang['srv_zoom_filter_note'].''; echo ''.$condition_label.''; /* // ali imamo napake v ifu if ((int)self::$profiles[self :: $currentProfileId]['condition_error'] != 0) { echo '
    '; echo ' '; echo ''.$lang['srv_profile_condition_has_error'].''; echo ''; } */ echo ''.$lang['srv_profile_edit'].''; echo ''.$lang['srv_profile_remove'].''; echo '
    '; echo '
    '; return true; } return false; } function doZoomFromInspect() { global $lang; # polovimo id-je variabel iz inspect profila in nastavimo zoom profil $SI = new SurveyInspect(self::$sid); $variables_to_add = $SI->getInspectVariables(); session_start(); # shranjujenmo v sejo # dodamo profil in ga izberemo za privzetega $_SESSION['surveyZoom'][self::$sid] = array('id'=>-1, 'name'=>$lang['srv_zoom_profile_session'],'vars'=>$variables_to_add, 'conditions'=> '', 'if_id'=>0); self::$profiles[-1] = array('id'=>$pid, 'sid'=>self::$sid, 'uid'=>self::$uid, 'name'=>$lang['srv_zoom_profile_session'], 'vars'=>$variables_to_add,'conditions'=>''); self::SetDefaultProfile(-1); self::$currentProfileId = -1; session_commit(); # prikažemo segmente $showDiv = ((int)$_POST['showDiv'] == 1)?true:false; self::displayZoomConditions($showDiv); } }