2, // Tip vprasanja - kombinirana tabela - 24 'question_type_ranking' => 2, // Tip vprasanja - razvrscanje - 17 'question_type_sum' => 2, // Tip vprasanja - vsota - 18 'question_type_location' => 2, // Tip vprasanja - lokacija - 26 'question_type_heatmap' => 2, // Tip vprasanja - heatmap - 27 'question_type_calculation' => 3, // Tip vprasanja - kalkulacija - 22 'question_type_quota' => 3, // Tip vprasanja - kvota - 25 'question_type_signature' => 3, // Tip vprasanja - podpis - 21_6 'loop' => 3, // Zanke 'if' => 2, // If-i 'block' => 2, // Bloki 'validation' => 2, // Validacija 'theme-editor' => 2, // Urejanje teme ankete, upload logotipa... 'theme-editor_css' => 3, // Urejanje lastnega css-ja !!! 'theme-editor_upload' => 3, // Urejanje lastnega css-ja !!! /* Status */ 'para_graph' => 2, // Statistika naprav 'geoip_location' => 3, // Statistika ip lokacije 'nonresponse_graph' => 3, // Neodgovor spremenljivke 'speeder_index' => 3, // Speeder index 'usable_resp' => 3, // Uporabni respondenti 'text_analysis' => 3, // Analiza besedil 'edits_analysis' => 3, // Analiza urejanj /* Podatki */ 'data_export' => 2, // Izvoz podatkov - spss, xls, csv... 'data_append' => 3, // Uvoz - dodaj podatke 'data_merge' => 3, // Uvoz - zdruzi podatke 'data_calculation' => 3, // Izracunane vrednosti 'data_coding_auto' => 3, // Avtomatsko kodiranje 'data_coding' => 3, // Kodiranje 'data_recoding' => 3, // Rekodiranje /* Analiza */ 'analysis_export' => 2, // Izvoz analiz - pdf, rtf, xls 'analysis_analysis_links' => 2, // Javne 'analysis_charts' => 2, // Grafi 'analysis_crosstabs' => 2, // Tabele 'analysis_break' => 2, // Razbitje 'analysis_ttest' => 3, // Ttest 'analysis_means' => 3, // Povprecje 'analysis_multicrosstabs' => 3, // Multitabele 'analysis_analysis_creport' => 3, // Porocilo po meri /* Napredni moduli */ 'uporabnost' => 3, // Evalvacija strani (split screen) //'vnos' => 2, // Vnos vprasalnikov 'kviz' => 2, // Kviz 'voting' => 3, // Volitve 'social_network' => 3, // Socialna omrezja 'slideshow' => 3, // Prezentacija 'telephone' => 3, // Telefonska anketa 'chat' => 3, // Chat 'panel' => 3, // Panel 'email_access' => 3, // Dostop z emailom /* Ostale funkcionalnosti */ 'prevajanje' => 2, // Vecjezikovna anketa 'export' => 2, // Izvozi ankete 'filters' => 2, // Filtriranje podatkov in analiz 'nice_url' => 2, // Lepi linki 'password' => 2, // Dostop do ankete z geslom 'gdpr_export' => 2, // Izvoz porocil evidenc za gdpr 'skupine' => 2, // Skupine 'archive' => 2, // Arhiviranje 'arhivi' => 2, // Arhiviranje - izvoz datoteke ankete, podatkov //'arhivi_export' => 2, // Arhiviranje - izvoz datoteke vprasalnika in vprasalnika s podatki 'analysis_anal_arch' => 2, // Arhiviranje analiz 'public_link' => 3, // Javne povezave //'ustvari_anketo_archive' => 2, // Ustvarjanje ankete iz datoteke 'ustvari_anketo_from_text' => 2, // Ustvarjanje ankete iz besedila 'ustvari_anketo_template' => 2, // Ustvarjanje ankete iz predloge 'komentarji' => 3, // Komentarji na anketo 'komentarji_anketa' => 3, // Komentarji na anketo 'urejanje' => 3, // Komentarji na anketo 'alert' => 2, // Obvescanje 'invitations' => 3, // Email vabila /* Moje ankete */ 'my_survey_folders' => 2, // Mape v mojih anketah ); public static function getInstance($usr_id){ if (!self::$instance) self::$instance = new UserAccess($usr_id); return self::$instance; } private function __construct($usr_id){ // Ce so paketi onemogoceni nič ne preverjamo if(AppSettings::getInstance()->getSetting('app_settings-commercial_packages') !== true){ return; } // Ce nimamo usr_id-ja ga poskusimo pridobiti iz id-ja ankete if(!isset($usr_id) || $usr_id < 1 || $usr_id == ''){ if(isset($_POST['anketa']) || isset($_GET['anketa'])){ $ank_id = (isset($_GET['anketa'])) ? $_GET['anketa'] : $_POST['anketa']; // Pogledamo, ce smo v izpolnjevanju ankete - imamo hash in pridobimo id iz njega if($_SERVER["SCRIPT_NAME"] == '/main/survey/index.php') $ank_id = getSurveyIdFromHash($ank_id); $sqlU = sisplet_query("SELECT insert_uid FROM srv_anketa WHERE id='".$ank_id."'"); $rowU = mysqli_fetch_array($sqlU); $usr_id = $rowU['insert_uid']; } else{ $usr_id = 0; } } if($usr_id > 0){ $this->usr_id = $usr_id; // Preverimo, ce smo znotraj dolocene ankete in ce je usr_id enak id-ju avtorja ankete $this->checkSurveyAuthor(); // Zakesiramo vse dostope userja $this->cacheUserAccess(); // Zakesiramo vse pakete $this->cachePackages(); // Pogledamo ce smo v anketi in ce gre za staro anketo - stare ankete nimajo vklopljenih paketov $this->checkAnketaOld(); } else{ echo 'Napaka! Manjka ID uporabnika.'; die(); } } // Dobimo podatke o dostopu za posameznega uporabnika private function cacheUserAccess(){ $sqlUserAccess = sisplet_query("SELECT ua.*, up.name AS package_name, up.description AS package_description, up.price AS package_price FROM user_access ua, user_access_paket up WHERE ua.usr_id='".$this->usr_id."' AND up.id=ua.package_id "); // Uporabnik se nima nobenega paketa if(mysqli_num_rows($sqlUserAccess) == 0) return; $rowUserAccess = mysqli_fetch_array($sqlUserAccess); // Dodatno preverimo, ce je paket ze potekel if(strtotime($rowUserAccess['time_expire']) < time()) return; // Vse ok - uporabniku nastavimo trenuten paket $this->user_access = $rowUserAccess; } // Dobimo podatke o vseh paketih private function cachePackages(){ $sqlPackages = sisplet_query("SELECT * FROM user_access_paket"); while($row = mysqli_fetch_array($sqlPackages)){ $this->packages[$row['id']] = $row; } } // Pogledamo ce smo v anketi in ce gre za staro anketo - stare ankete nimajo vklopljenih paketov private function checkAnketaOld(){ // Ce nismo znotraj ankete ti ignoriramo if(!isset($_GET['anketa']) && !isset($_POST['anketa'])){ return; } // Nastavimo id ankete $ank_id = isset($_GET['anketa']) ? $_GET['anketa'] : $_POST['anketa']; $sqlA = sisplet_query("SELECT insert_time FROM srv_anketa WHERE id='".$ank_id."'"); $rowA = mysqli_fetch_array($sqlA); // Ce je datum kreiranja starejši je stara anketa if(strtotime($rowA['insert_time']) < strtotime($this->anketa_old_date)){ $this->anketa_old = true; } } public function isAnketaOld(){ return $this->anketa_old; } public function userNotAuthor(){ return $this->user_not_author; } // Preverimo ce ima uporabnik dostop do neke funkcionalnosti public function checkUserAccess($what=''){ global $admin_type; global $global_user_id; global $mysql_database_name; // Ce so paketi onemogoceni vrnemo vedno true if(AppSettings::getInstance()->getSetting('app_settings-commercial_packages') !== true){ return true; } // Ce nimamo usr_id-ja zaenkrat pustimo vse if(!isset($this->usr_id) || $this->usr_id < 1 || $this->usr_id == ''){ return true; } // Ce je metaadmin ali admin enklikanketa@gmail.com lahko tudi vedno vse uporablja if(Dostop::isMetaAdmin() || ($mysql_database_name == 'real1kasi' && $admin_type == 0 && $global_user_id == '440')){ return true; } // Ce je anketa ustvarjena pred nekim datumom, ne preverjamo paketov if($this->anketa_old == true){ return true; } // Ce ne nastavimo funkcionalnosti pogledamo url kje se nahajamo if($what == ''){ $what = $this->getFunctionalityFromUrl(); } // Preverimo, ce funkcionalnost ni v paketu, ki ga ima uporabnik $package_id = $this->getPackage(); if(isset($this->functionality_package[$what]) && $this->functionality_package[$what] > $package_id){ return false; } return true; } // Vrnemo vse podatke o dostopu uporabnika public function getAccess(){ return $this->user_access; } // Vrnemo paket uporabnika public function getPackage(){ global $admin_type; // Ce so paketi onemogoceni vrnemo -1 if(AppSettings::getInstance()->getSetting('app_settings-commercial_packages') !== true){ return -1; } // Ce je admin ali manager lahko tudi vedno vse uporablja /*if($admin_type == 0 || $admin_type == 1){ return 3; }*/ // Ce nima nastavljeno nic je brez paketa if(!isset($this->user_access['package_id'])) return 1; return $this->user_access['package_id']; } // Vrnemo aray vseh paketov public function getPackages(){ return $this->packages; } // Preverimo, ce smo znotraj dolocene ankete in ce je usr_id enak id-ju avtorja ankete private function checkSurveyAuthor(){ // Nastavimo id ankete if(isset($_GET['anketa'])){ $ank_id = $_GET['anketa']; } elseif(isset($_POST['anketa']) && $_POST['anketa'] != 'undefined'){ $ank_id = $_POST['anketa']; } // Ce nismo znotraj ankete je vse ok else{ return; } // Ce smo znotraj ankete, preverimo, ce je usr_id enak avtorju ankete $sqlA = sisplet_query("SELECT insert_uid FROM srv_anketa WHERE id='".$ank_id."'"); if(mysqli_num_rows($sqlA) > 0){ $rowA = mysqli_fetch_array($sqlA); // Ce user ni avtor, preverjamo za avtorja if($this->usr_id != $rowA['insert_uid']){ $this->usr_id = $rowA['insert_uid']; $this->user_not_author = true; } } return; } // Izpisemo obvestilo, da je funkcionalnost onemogocena in naj kupi paket public function displayNoAccess($what=''){ global $lang; global $site_url; // Ce ne nastavimo funkcionalnosti pogledamo url kje se nahajamo if($what == ''){ $what = $this->getFunctionalityFromUrl(); } // Kateri paket je potreben za to funkcionalnost $package_required = (isset($this->functionality_package[$what])) ? $this->functionality_package[$what] : 3; $package_temp = $this->packages[$package_required]['name']; $package_required_name = $lang['paket_opis_'.$package_temp]; if($lang['id'] == '2') $drupal_url = $site_url.'d/en/purchase/'.$package_required.'/package'; else $drupal_url = $site_url.'d/izvedi-nakup/'.$package_required.'/podatki'; echo '
'; echo '
'; echo '
'.$lang['srv_access_no_access_title'].'
'; // Ce user ni avtor ankete if($this->user_not_author){ echo '

'.$lang['srv_access_no_access_not_author'].'

'; } echo '
'; echo '

'.$lang['srv_access_no_access'].' "'.$package_required_name.'".

'; echo '

'.$lang['srv_access_no_access_funkcionalnosti_intro'].'

'; echo '
    '; echo '
  • '.$lang['srv_access_no_access_funkcionalnost_1'].'
  • '; echo '
  • '.$lang['srv_access_no_access_funkcionalnost_2'].'
  • '; echo '
  • '.$lang['srv_access_no_access_funkcionalnost_3'].'
  • '; echo '
  • '.$lang['srv_access_no_access_funkcionalnost_4'].'
  • '; echo '
'; echo '
'; if(!$this->user_not_author) echo '
'; echo ''; echo '
'; echo '
'; echo '
'; } // Izpisemo popup obvestilo, da je funkcionalnost onemogocena in naj kupi paket public function displayNoAccessPopup($what){ global $lang; global $site_url; // Kateri paket je potreben za to funkcionalnost $package_required = (isset($this->functionality_package[$what])) ? $this->functionality_package[$what] : 3; $package_temp = $this->packages[$package_required]['name']; $package_required_name = $lang['paket_opis_'.$package_temp]; if($lang['id'] == '2') $drupal_url = $site_url.'d/en/purchase/'.$package_required.'/package'; else $drupal_url = $site_url.'d/izvedi-nakup/'.$package_required.'/podatki'; echo '

'.$lang['srv_access_upgrade'].'

'; echo ''; // Ce user ni avtor ankete if($this->user_not_author){ echo '

'.$lang['srv_access_no_access_not_author'].'

'; } echo '

'.$lang['srv_access_no_access'].' "'.$package_required_name.'".

'; echo '
'; echo ' '; if(!$this->user_not_author) echo ' '; echo '
'; } // Izpisemo obvestilo, da je funkcionalnost onemogocena in naj kupi paket public function displayNoAccessText($what=''){ global $lang; // Ce ne nastavimo funkcionalnosti pogledamo url kje se nahajamo if($what == ''){ $what = $this->getFunctionalityFromUrl(); } // Kateri paket je potreben za to funkcionalnost $package_required = (isset($this->functionality_package[$what])) ? $this->functionality_package[$what] : 3; $package_temp = $this->packages[$package_required]['name']; $package_required_name = $lang['paket_opis_'.$package_temp]; echo '

'; // Ce user ni avtor ankete if($this->user_not_author){ echo $lang['srv_access_no_access_not_author'].'

'; } echo $lang['srv_access_no_access'].' "'.$package_required_name.'"'; echo '

'; } // Vrnemo funkcionalnost glede na urle kjer se nahajamo private function getFunctionalityFromUrl(){ $what = ''; // Ce ne nastavimo funkcionalnosti pogledamo url kje se nahajamo if(isset($_GET['a'])){ $what = $_GET['a']; if($_GET['a'] == 'analysis' || $_GET['a'] == 'data'){ if(isset($_GET['m'])){ $what .= '_'.$_GET['m']; } } elseif($_GET['a'] == 'ustvari_anketo'){ if(isset($_GET['b'])){ $what .= '_'.$_GET['b']; } } elseif($_GET['a'] == 'theme-editor'){ if(isset($_GET['t'])){ $what .= '_'.$_GET['t']; } } elseif($_GET['a'] == 'langStatistic'){ $what = 'prevajanje'; } elseif($_GET['a'] == 'skupine'){ $what = ''; } elseif($_GET['a'] == 'arhivi' && isset($_GET['m']) && ($_GET['m'] == 'survey_data' || $_GET['m'] == 'survey')){ $what .= '_export'; } } return $what; } public function getPackageName($package_id) { global $lang; $string = ''; if ($package_id == 1) { $string = $lang['paket_opis_1ka']; } else if($package_id == 2) { $string = $lang['paket_opis_2ka']; } else if($package_id == 3) { $string = $lang['paket_opis_3ka']; } return $string; } // Ajax klici public function ajax(){ if (isset($_POST['what'])) $what = $_POST['what']; // Prikazemo popup z obvestilom, da je funkcionalnost onemogocena in naj kupi paket if($_GET['a'] == 'displayNoAccessPopup') { $this->displayNoAccessPopup($what); } } }