tip) * radio -> tip = 1 * checkbox -> tip = 2 * select -> tip = 3 * text -> tip = 4 // ni vec v uporabi * besedilo* -> tip = 21 * label -> tip = 5 * multigrid -> tip = 6 * multicheckbox -> tip = 16 * multitext -> tip = 19 * multinumber -> tip = 20 * number -> tip = 7 * compute -> tip = 22 // samo v naprednejših anketah (ifi ali test anketa) * quota -> tip = 25 // samo v naprednejših anketah (ifi ali test anketa) * datum -> tip = 8 * ranking -> tip = 17 * vsota -> tip = 18 * grid - multiple -> tip = 24 * iz knjiznice -> tip = 23 // podtip nam pove za tip vprasanja, ki ga poiscemo glede na variablo * SN-imena -> tip = 9 * Lokacija -> tip = 26 * HeatMap -> tip = 27 * * * Tipi anket: (srv_anketa -> survey_type) * Glasovanja -> survey_type = 0 * Forma -> survey_type = 1 * Navadna anketa -> survey_type = 2 || survey_type = 3 (oboje enako - ostanek starih verzij) * * * Moduli anket: (srv_anketa_module) * email (email vabila) * phone (telefonska anketa) * slideshow (prezentacija) * social_network (socialna omrežja - generator imen) * quiz (kviz s pravilnimi/napacnimi odgovori) * voting (volitve z anonimnimi vabili) * uporabnost (evalvacija strani - split screen) * panel (povezovanje ankete s panelom - npr. Valicon, GFK...) * 360_stopinj (adecco) * 360_stopinj_1ka * evoli * evoli team meter * evoli employeeship meter * hierarhija * mfdps * borza * mju * excelleration matrix * advanced paradata (zbiranje in izvoz naprednih parapodatkov) * maza (mobilna aplikacija za anketirance - 1kapanel) * wpn (web push notifications) **/ /** * KONSTANTE * */ // STARO define("A_IZVOZI", "izvozi"); define("M_IZVOZI_EXCEL", "excel"); define("M_IZVOZI_SPSS", "spss"); define("M_IZVOZI_txt", "txt"); define("A_REPORT_VPRASALNIK_PDF", "vprasalnik_pdf"); define("A_REPORT_VPRASALNIK_RTF", "vprasalnik_rtf"); define("M_REPORT_TEXT", "text"); define("M_REPORT_GRAPHICAL", "graphical"); define("M_REPORT_TOTAL", "total"); // ali je enka še v fazi razvoja (za potrebe skrivanja navigacije,zavihkov,ipd...) // skrite elemente prikaže samo administratorju define("SRV_DEVELOPMENT_VERSION", true); // tipi uporabnikov, (za kontrolo prikaza posameznih elementov) za preverjanje kličemo funkcijo user_role_cehck define("U_ROLE_ADMIN", 0); define("U_ROLE_MANAGER", 1); define("U_ROLE_CLAN", 2); define("U_ROLE_NAROCNIK", 3); global $site_path; class SurveyAdmin { var $anketa; // trenutna anketa var $grupa; // trenutna grupa var $spremenljivka; // trenutna spremenljivka var $branching = 0; // pove, ce smo v branchingu var $stran; var $podstran; var $skin = 0; var $survey_type; // privzet tip je anketa na vecih straneh var $displayLinkIcons = false; // zaradi nenehnih sprememb je trenutno na false, se kasneje lahko doda v nastavitve var $displayLinkText = true; // zaradi nenehnih sprememb je trenutno na true, se kasneje lahko doda v nastavitve var $setting = null; var $db_table = ''; var $icons_always_on = false; # ali ima uporabnik nastavljeno da so ikone vedno vidne var $full_screen_edit = false; # ali ima uporabnik nastavljeno da ureja vprašanja v fullscreen načinu var $isAnketar = false; # Ali je uporabnik anketar ankete privzeto je ne var $first_action = ''; // Prvi nivo navigacije kjer se nahajamo var $second_action = ''; // Drugi nivo navigacije kjer se nahajamo var $third_action = ''; // Tretji nivo navigacije kjer se nahajamo var $layout_width = ''; // Layout strani kjer se nahajamo - "fullwidth", "wide" ali "narrow" var $layout_menu = ''; // Layout strani kjer se nahajamo - "menu_lef" (prisoten levi meni) /** * @desc konstruktor */ function __construct($action = 0, $anketa = 0) { global $surveySkin, $site_url, $global_user_id; if (isset ($surveySkin)) $this->skin = $surveySkin; else $this->skin = 0; // polovimo anketa ID if ($anketa != 0) $this->anketa = $anketa; elseif (isset ($_GET['anketa'])) $this->anketa = $_GET['anketa']; elseif (isset ($_POST['anketa'])) $this->anketa = $_POST['anketa']; # clearing E_NOTICE if (!isset($_GET['a'])) { $_GET['a'] = null; } if (!isset($_GET['m'])) { $_GET['m'] = null; } if (!isset($_GET['t'])) { $_GET['t'] = null; } if (!isset($_GET['mode'])) { $_GET['mode'] = null; } UserSetting:: getInstance()->Init($global_user_id); $this->icons_always_on = UserSetting:: getInstance()->getUserSetting('icons_always_on'); $this->full_screen_edit = UserSetting:: getInstance()->getUserSetting('full_screen_edit'); $this->isAnketar = Common::isUserAnketar($this->anketa, $global_user_id); SurveyInfo::getInstance()->SurveyInit($this->anketa); $this->db_table = SurveyInfo::getInstance()->getSurveyArchiveDBString(); $this->survey_type = $this->getSurvey_type($this->anketa); if ($_GET['a'] == 'branching' || $this->survey_type > 1) $this->branching = 1; if ($this->anketa > 0) { // preverimo ali anketa sploh obstaja if (!$this->checkAnketaExist()) { header('location: ' . $site_url . 'admin/survey/index.php'); } else { // preverimo userjev dostop //if ($this->checkDostop() || $this->checkDostopAktiven() || $_GET['a'] == A_ANALYSIS || $_GET['a'] == 'analiza' || $_GET['a'] == 'analizaReloadData' || $_GET['t'] == A_ANALYSIS || $_GET['a'] == A_REPORTI) { if ($this->checkDostop() && ($this->isAnketar || $this->checkDostopAktiven() || $_GET['a']==A_ANALYSIS || $_GET['a']=='analiza' || $_GET['a']=='analizaReloadData' || $_GET['t']==A_ANALYSIS || $_GET['a']==A_REPORTI)) { // pasivne uporabnike preusmerimo na status tudi pri neaktivni anketi if ($this->checkDostop() && !$this->checkDostopAktiven() && !isset($_GET['a'])) { header('location: ' . $site_url . 'admin/survey/index.php?anketa=' . $this->anketa . '&a=' . A_REPORTI); die(); } // ugotovimo ali je uporabnik telefonski anketar else if ($this->isAnketar && $_GET['a'] != A_TELEPHONE) { #če je anketar lahko samo kliče header('Location: index.php?anketa=' . $this->anketa . '&a=' . A_TELEPHONE . '&m=start_call'); exit(); } // ok } else { // pri ajax klicih ne sme naprej, da ne more pisat v bazo header('location: ' . $site_url . 'admin/survey/'); die(); } } } if ($action == 0) { if (isset ($_GET['anketa'])) { SurveyInfo:: getInstance()->SurveyInit($this->anketa); if (isset ($_GET['grupa'])) { $this->grupa = $_GET['grupa']; } elseif (!isset ($_GET['a'])) { $sql = sisplet_query("SELECT id FROM srv_grupa WHERE ank_id='$this->anketa' ORDER BY vrstni_red LIMIT 1"); $row = mysqli_fetch_array($sql); $this->grupa = $row['id']; } // meta podatki, ki jih beremo z JS echo '
'; ?> } } // tole je, ce se inicializira v branhingu z $action=-1 (pa mogoce/najbrz se kje), da se ne prikazujejo 2x te meta podatki in redirecta... else { if ($this->anketa == 0) die(); } $this->stran = $_GET['a']; } /** * @desc pohendla zadeve in prikaze ustrezne elemente ankete */ function display(){ global $site_url; global $global_user_id; global $lang; global $admin_type; global $site_domain; // prvi in drugi nivo (tretji samo za mobilno navigacijo) $navigationArray = CrossRoad::MainNavigation($this->anketa, true); $this->first_action = $navigationArray['first_action']; $this->second_action = $navigationArray['second_action']; $this->third_action = $navigationArray['third_action']; // Layout strani $this->layout_width = $navigationArray['layout_width']; $this->layout_menu = $navigationArray['layout_menu']; $this->hide_header = $navigationArray['hide_header']; echo '' . $lang['srv_copied_spr'] . ':
' . strip_tags($row['naslov']) . ' (' . $row['variable'] . ')
'; } // prikazemo if if ($if > 0) { $sql = sisplet_query("SELECT tip, label FROM srv_if WHERE id = '$if'"); $row = mysqli_fetch_array($sql); $b = new Branching($this->anketa); if ($row['tip'] == 0) { echo '' . $lang['srv_copied_if'] . ':
' . $b->conditions_display($if) . '
'; } else { echo '' . $lang['srv_copied_block'] . ':
' . $row['label'] . '
'; } } if ($spremenljivka > 0 || $if > 0) { echo '' . $lang['srv_copy_remove'] . '
'; echo ''; } // zbrisemo iz clipboarda (kukija) if ($spremenljivka == -1) { setcookie('srv_clipboard_' . $this->anketa, '', time() - 3600); setcookie('srv_cut_' . $this->anketa, '', time() - 3600); echo ''; } } /** * @desc prestevilci variable vseh vprasanj v anketi */ function prestevilci($spremenljivka = 0, $all = false) { Common::getInstance()->Init($this->anketa); Common::getInstance()->prestevilci($spremenljivka, $all); } /** * @desc prestevilci ife */ function prestevilci_if($parent = 0, & $number = 1) { Common::getInstance()->Init($this->anketa); Common::getInstance()->prestevilci_if($parent, $number); } /** * @desc popravi celotno anketo */ function repareAnketa($anketa = 0) { if ($anketa == 0) $anketa = $this->anketa; Common::repareAnketa($anketa); } /** * @desc popravi vrstni red v tabeli srv_grupa */ function repareGrupa($anketa) { Common::repareGrupa($anketa); } /** * @desc popravi vrstni red v tabeli srv_spremenljivka */ function repareSpremenljivka($grupa) { Common::repareSpremenljivka($grupa); } /** * @desc popravi vrstni red v tabeli srv_vrednost */ function repareVrednost($spremenljivka) { Common::repareVrednost($spremenljivka); } /** * @desc preveri pravice trenutnega userja za urejanje ankete */ function checkDostop($anketa = 0) { $d = new Dostop(); return $d->checkDostop($anketa); } /** * preveri nivo dostopa za uporabnika (ce je aktiven ali pasiven) */ function checkDostopAktiven($anketa = 0) { $d = new Dostop(); return $d->checkDostopAktiven($anketa); } /** * @desc Vrne ID trenutnega uporabnika (ce ni prijavljen vrne 0) */ function uid() { global $global_user_id; return $global_user_id; } /** * @desc Vrne vse uporabnike iz baze */ static function db_select_users() { return sisplet_query("SELECT name, surname, id, email FROM users ORDER BY name ASC"); } /** * @desc Vrne podatke o uporabniku */ static function db_select_user($uid) { return sisplet_query("SELECT * FROM users WHERE id='$uid'"); } /** * TODO ??? * * @param mixed $spremenljivka */ function addMissingGrids($spremenljivka) { $row = Cache::srv_spremenljivka($spremenljivka); $maxGrids = $row['grids']; // najprej pobrišemo polja 99,98,97 (na koncu jih spet dodamo) $deleteString = "DELETE FROM srv_grid WHERE spr_id='" . $spremenljivka . "' AND (id IN (99,98,97))"; $sqlD = sisplet_query($deleteString); $sqlGrids = sisplet_query("SELECT id, vrstni_red FROM srv_grid WHERE spr_id='$spremenljivka' ORDER BY id"); $countGrids = mysqli_num_rows($sqlGrids); // če imamo v gridu več spremenljivk kot jih rabimo jih pobrišemo if ($countGrids > $maxGrids) { $deleteString = "DELETE FROM srv_grid WHERE spr_id='" . $spremenljivka . "' AND id > $maxGrids"; $deleteQuery = sisplet_query($deleteString); } // dodamo manjkajoče spremenljivke if ($countGrids < $maxGrids) { for ($i = $countGrids + 1; $i <= $maxGrids; $i++) { $rowG = mysqli_fetch_array($sqlGrids); if ($rowG['vrstni_red'] != $i) { //nastavimo id na najvecji v vprasanju $sqlID = sisplet_query("SELECT MAX(id) FROM srv_grid WHERE spr_id='$spremenljivka' "); $rowID = mysqli_fetch_array($sqlID); $newId = $rowID['MAX(id)'] + 1; $insertString = "INSERT INTO srv_grid (id, spr_id, vrstni_red, variable) VALUES ('$newId', '$spremenljivka', '$i', '$i')"; $sqlInsert = sisplet_query($insertString); } } } $this->repareVrednost($spremenljivka); // nato samo še dodamo sistemske če je potrebno $_otherStatus = array(99 => "-99", 98 => "-98", 97 => "-97"); $_otherStatusFields = array( 99 => 'undecided', 98 => 'rejected', 97 => 'inappropriate' ); $_otherStatusDefaults = array( 99 => 'Ne vem', 98 => 'Zavrnil', 97 => 'Neustrezno' ); $_updateState = ""; foreach ($_otherStatus as $status => $statusVariable) { // dodamo samo če je čekirano polje v spremenljivki if ($row[$_otherStatusFields[$status]] == 1) { $sqlUD = sisplet_query("SELECT id FROM srv_grid WHERE spr_id='$spremenljivka' AND vrstni_red='" . $status . "'"); $rowUD = mysqli_fetch_array($sqlUD); if ($rowUD == FALSE) { $sqlUD2 = sisplet_query("SELECT MAX(vrstni_red) FROM srv_grid WHERE spr_id='$spremenljivka' "); $rowUD2 = mysqli_fetch_array($sqlUD2); //nastavimo id na najvecji v vprasanju $id = $rowUD2['MAX(vrstni_red)'] + 1; //vnesemo polje (ne vem, zavrnil, neustrezno) v bazo (default vrednosti: NE VEM, vrstni_red 99, variable 99 $sqlUD3String = "INSERT INTO srv_grid (id, spr_id, naslov, vrstni_red, variable) " . "VALUES ('$status', '$spremenljivka', '" . $_otherStatusDefaults[$status] . "', '" . $status . "', '" . $statusVariable . "')"; $sqlUD3 = sisplet_query($sqlUD3String); } } } } /** * TODO ??? * * @param mixed $spremenljivka */ function getSpremenljivkaZaporedna($spremenljivka) { $rowSpr = Cache::srv_spremenljivka($spremenljivka); // Preštejemo koliko vprašanj je bilo do sedaj na prejšnih straneh $sqlg = sisplet_query("SELECT vrstni_red FROM srv_grupa WHERE id='" . $rowSpr['gru_id'] . "'"); $rowg = mysqli_fetch_assoc($sqlg); $vrstni_red = $rowg['vrstni_red']; $sqlCountPast = sisplet_query("SELECT count(*) as cnt FROM srv_spremenljivka s, srv_grupa g WHERE g.ank_id='$this->anketa' AND s.gru_id=g.id AND g.vrstni_red < '$vrstni_red' ORDER BY g.vrstni_red ASC, s.vrstni_red ASC"); $rowCount = mysqli_fetch_assoc($sqlCountPast); $offset = $rowCount['cnt']; // preštejemo katera premenljivka je trenutna $stringCountPast = "SELECT count(*) as cnt FROM srv_spremenljivka WHERE gru_id = '" . $rowSpr['gru_id'] . "' AND vrstni_red <= '" . $rowSpr['vrstni_red'] . "' ORDER BY vrstni_red ASC"; $sqlCountPast = sisplet_query($stringCountPast); $rowCountPast = mysqli_fetch_assoc($sqlCountPast); return $offset + $rowCountPast['cnt']; } /** * @desc Če je anketa aktivna, preverimo da ni slučajno potekel čas aktivnosti, * če je, jo deaktiviramo */ function checkSurveyActive($anketa = null) { // pretecena anketa, kontroliramo datum na: starts in expire sisplet_query("UPDATE srv_anketa SET active = '0' WHERE id='" . ($anketa ? $anketa : $this->anketa) . "' AND active = '1' AND expire < CURDATE()"); SurveyInfo:: getInstance()->SurveyInit($this->anketa); // vsilimo refresh podatkov SurveyInfo:: getInstance()->resetSurveyData(); $sqls = sisplet_query("SELECT active FROM srv_anketa WHERE id='" . ($anketa ? $anketa : $this->anketa) . "'"); $rows = mysqli_fetch_assoc($sqls); return $rows['active']; } /** * porihtana funkcija, da poklice SurveyRespondents::checkSystemVariables(), ki je zadolzena za dodajanje sistemskih spremenljivk * * @param mixed $phone * @param mixed $email */ function createUserbaseSystemVariable($phone, $email, $language = 0) { $user_base = 0; $cookie = -1; $rowb = SurveyInfo::getInstance()->getSurveyRow(); $phone = (int)(SurveyInfo::getInstance()->checkSurveyModule('phone') || (int)$phone == 1); $email = (int)(SurveyInfo::getInstance()->checkSurveyModule('email') || (int)$email == 1); $variables = array(); if ($phone == 1) { array_push($variables, "telefon"); $user_base = 1; } if ($email == 1) { array_push($variables, "email"); $user_base = 1; } if ($language == 1) { array_push($variables, "language"); } SurveyRespondents:: getInstance()->Init($this->anketa); SurveyRespondents:: checkSystemVariables($variables); if ($rowb['user_base'] != $user_base || (int)SurveyInfo::getInstance()->checkSurveyModule('phone') != $phone || (int)SurveyInfo::getInstance()->checkSurveyModule('email') != $email) {// nastavimo še userbase // v userbase vedno prikazujemo uvod if ($user_base == 1) $intro = " '1' "; else $intro = " show_intro "; $sql = sisplet_query("UPDATE srv_anketa SET user_base='$user_base', phone='$phone', email='$email', show_intro=$intro WHERE id='" . $this->anketa . "'"); // vsilimo refresh podatkov SurveyInfo:: getInstance()->resetSurveyData(); } return SurveyInfo::getInstance()->getSurveyRow(); } /** * TODO *** * * @param mixed $curent_id * @param mixed $errorMsg */ function show_email_invitation_templates($curent_id = 1, $errorMsg = null) { global $lang; echo ''; echo ''; } /** * TODO ???? * * @param mixed $curent_id * @param mixed $errorMsg */ function show_email_invitation_values($curent_id = 1, $errorMsg = null) { global $lang; $sql_email_invitations_profiles = sisplet_query("SELECT name, subject, text FROM srv_userbase_invitations WHERE id = '" . $curent_id . "'"); $row_email_invitations_profiles = mysqli_fetch_assoc($sql_email_invitations_profiles); $temp_name = $row_email_invitations_profiles['name']; $temp_subject = $row_email_invitations_profiles['subject']; $temp_text = $row_email_invitations_profiles['text']; if ($errorMsg != null) { echo 'Ime:'; echo '
'; echo 'Zadeva:'; echo '
'; echo '' . $lang['text'] . ':'; echo '
' . $lang['srv_userbase_list_name'] . ':'; echo '
'; echo '' . $lang['srv_userbase_variables'] . ':'; echo '
'; echo '' . $lang['srv_userbase_respondents'] . ':'; echo '