diff options
author | Anton Luka Šijanec <anton@sijanec.eu> | 2022-01-11 12:35:47 +0100 |
---|---|---|
committer | Anton Luka Šijanec <anton@sijanec.eu> | 2022-01-11 12:35:47 +0100 |
commit | 19985dbb8c0aa66dc4bf7905abc1148de909097d (patch) | |
tree | 2cd5a5d20d7e80fc2a51adf60d838d8a2c40999e /admin/survey/export/latexclasses/class.LatexSurveyElement.php | |
download | 1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.tar 1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.tar.gz 1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.tar.bz2 1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.tar.lz 1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.tar.xz 1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.tar.zst 1ka-19985dbb8c0aa66dc4bf7905abc1148de909097d.zip |
Diffstat (limited to 'admin/survey/export/latexclasses/class.LatexSurveyElement.php')
-rw-r--r-- | admin/survey/export/latexclasses/class.LatexSurveyElement.php | 2372 |
1 files changed, 2372 insertions, 0 deletions
diff --git a/admin/survey/export/latexclasses/class.LatexSurveyElement.php b/admin/survey/export/latexclasses/class.LatexSurveyElement.php new file mode 100644 index 0000000..587fb3a --- /dev/null +++ b/admin/survey/export/latexclasses/class.LatexSurveyElement.php @@ -0,0 +1,2372 @@ +<?php
+
+/**
+ *
+ * Class ki skrbi za izris posameznega vprasanja za vprašalnik
+ *
+ *
+ */
+
+
+include('../../vendor/autoload.php');
+
+define("MAX_STRING_LENGTH", 90);
+define("LINE_BREAK_AT", '7 cm');
+define("RADIO_BTN_SIZE", 0.13);
+define("CHCK_BTN_SIZE", 0.13);
+define("PIC_SIZE_ANS", "\includegraphics[width=3cm]"); //slika dolocene sirine
+define("DROPDOWN_SIZE", 0.8);
+define("VAS_SIZE", 0.04); //VAS_SIZE
+
+
+class LatexSurveyElement{
+
+ public $anketa; // ID ankete
+ public static $spremenljivka;
+ public $spremenljivkaParams;
+ public $stevilcenje;
+ public $showIf = 0; // izpis if-ov
+ public $numbering = 0; // ostevillcevanje vprasanj
+ public $texNewLine = '\\\\ ';
+ //public $texNewLine = '\newline ';
+ public $export_format;
+ public $fillablePdf;
+ public $questionText;
+ protected $usr_id = null; // id userja ki je odgovarjal (na katerega so vezani podatki)
+ protected $db_table = '';
+ protected $loop_id = null; // id trenutnega loopa ce jih imamo
+ protected $userAnswer = array();
+ protected $texBigSkip = '\bigskip';
+ //protected $userDataPresent = array();
+ //protected $userDataPresent = 0;
+
+ protected $skipEmpty = 0; // izpusti vprasanja brez odgovora
+ protected $skipEmptySub = 0; // izpusti podvprasanja brez odgovora
+ protected $path2Images;
+ protected $path2UploadedImages;
+ protected $language;
+ protected $prevod;
+ protected $admin_type;
+ protected $variableName;
+
+
+ function __construct($anketa=null, $export_format='', $fillablePdf=null, $usr_id=null, $export_subtype='', $language=null){
+ global $site_path, $global_user_id, $admin_type, $lang;
+
+ $this->anketa = $anketa;
+ $this->path2Images = $site_path.'admin/survey/export/latexclasses/textemp/images/';
+ $this->path2UploadedImages = $site_path.'uploadi/editor/';
+ $this->path2UrlImages = $site_path.'uploadi/editor/';
+
+ $this->admin_type = $admin_type;
+
+/* $this->spremenljivka = $spremenljivka;
+ $this->stevilcenje = $stevilcenje; */
+ if($export_subtype=='q_empty'||$export_subtype=='q_comment'){
+ $this->showIf = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_show_if');
+ $this->numbering = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_numbering');
+ }elseif($export_subtype=='q_data'||$export_subtype=='q_data_all'){
+ $this->showIf = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_show_if');
+ $this->numbering = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_numbering');
+ $this->skipEmpty = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_skip_empty');
+ $this->skipEmptySub = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_skip_empty_sub');
+ }
+
+ $this->export_format = $export_format;
+ $this->fillablePdf = $fillablePdf;
+
+ //$this->usr_id = $_GET['usr_id'];
+ $this->usr_id = $usr_id;
+
+ if ($this->usr_id != '') {
+ $sqlL = sisplet_query("SELECT language FROM srv_user WHERE id = '$this->usr_id ' AND ank_id='$this->anketa' ");
+ $rowL = mysqli_fetch_array($sqlL);
+ $this->language = $rowL['language'];
+ }
+
+ //preverjanje, ali je prevod
+ if(isset($_GET['language'])){
+ $this->language = $_GET['language'];
+ $this->prevod = 1;
+ }else{
+ $this->prevod = 0;
+ }
+ //preverjanje, ali je prevod - konec
+
+ //if($language!=-1){ //ce ni default jezik, ampak je prevod
+ if($this->prevod){ //ce ni default jezik, ampak je prevod
+ $this->language = $language;
+ }
+
+ if ( SurveyInfo::getInstance()->SurveyInit($anketa))
+ {
+ SurveyUserSetting::getInstance()->Init($anketa, $global_user_id);
+
+ if (SurveyInfo::getInstance()->getSurveyColumn('db_table') == 1)
+ $this->db_table = '_active';
+ }
+ else{
+ return false;
+ }
+
+ }
+
+
+ #funkcija, ki pripravi latex kodo za prikazovanje besedila vprasanja ############################################################################
+ public function displayQuestionText($spremenljivke=null, $zaporedna=null, $export_subtype='', $preveriSpremenljivko=null, $loop_id=null, $export_data_type=''){
+ $tex = '';
+ $userDataPresent = null; //dodal definicijo spremenljivke zaradi intellisense napake
+ //echo "Funkcija displayQuestionText </br>";
+ self::$spremenljivka = $spremenljivke['id'];
+ $row = Cache::srv_spremenljivka($spremenljivke['id']);
+ $this->spremenljivkaParams = new enkaParameters($row['params']);
+
+ // Ce je spremenljivka v loopu
+ $this->loop_id = $loop_id;
+
+ #pridobitev podatkov o odgovorih respondenta na trenutno vprasanje
+ if($export_subtype!='q_empty'){
+ if( in_array($spremenljivke['tip'], array(1, 2, 3)) ){ //ce je radio,checkbox ali roleta
+ //if( in_array($spremenljivke['tip'], array(1, 2, 3)) && $spremenljivke['orientation']!=5){
+ //echo "orientation: ".$spremenljivke['orientation'];
+ $userDataPresent = $this->GetUsersData($this->db_table, $spremenljivke['id'], $spremenljivke['tip'], $this->usr_id, $this->loop_id);
+ }elseif( in_array($spremenljivke['tip'], array(6, 16, 19, 20)) ){ //ce je multigrid radio, checkbox, besedilo ali stevilo
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable, other, spr_id FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ //echo "Funkcija displayQuestionText </br>";
+ //pregled vseh moznih vrednosti (kategorij) po $sqlVrednosti
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti)){
+ $indeksZaWhile = 1;
+ //echo "rowVrednost['id']: ".$rowVrednost['id'].'</br>';
+ $sqlVsehVrednsti = sisplet_query("SELECT id, naslov FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY 'vrstni_red'");
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti)){
+ $sqlUserAnswer = $this->GetUsersDataGrid($spremenljivke, $this->db_table, $rowVrednost, $rowVsehVrednosti, $this->usr_id, 0, $this->loop_id);
+
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+ if($rowVsehVrednosti['id'] == $userAnswer['grd_id']){
+ $indeksZaWhile++;
+ }
+ if($indeksZaWhile!=1){
+ $userDataPresent = 1;
+ }
+ }
+ }
+ //}elseif(in_array($spremenljivke['tip'], array(21, 7, 8, 18, 17, 26, 27))){ //ce je besedilo ali stevilo ali datum ali vsota
+ }elseif(in_array($spremenljivke['tip'], array(21, 4, 7, 8, 18, 17, 26, 27))){ //ce je besedilo ali staro besedilo (4) ali stevilo ali datum ali vsota
+ $userDataPresent = $this->GetUsersData($this->db_table, $spremenljivke['id'], $spremenljivke['tip'], $this->usr_id, $this->loop_id);
+ }elseif($spremenljivke['tip']==24){ //ce je kombinirana tabela
+ //GetUsersDataKombinirana($spremenljivke, $db_table, $usr_id)
+ $questionText=1;
+ $indeksPolja = 0;
+ $userDataPresentArray = $this->GetUsersDataKombinirana($spremenljivke, $this->db_table, $this->usr_id, $questionText, $this->loop_id);
+ if (is_array($userDataPresentArray)){
+ //echo "je polje".'</br>';
+ $userDataPresent=0;
+ //echo "Dolzina polja: ".count($userDataPresentArray)."</br>";
+ //echo "Id: ".$spremenljivke['id']."</br>";
+ foreach($userDataPresentArray as $key=>$value){
+ if($key==$indeksPolja){
+ if($value!=''){
+ $userDataPresent=1;
+ }
+ //echo "Podatek z indeksom ".$key." je :".$value."</br>";
+ $indeksPolja++;
+ }
+ }
+ }else{
+ if($userDataPresent!=0){
+ $userDataPresent=1;
+ }else{
+ $userDataPresent=0;
+ }
+ }
+ }
+ }
+ //echo "userDataPresent za spremenljivko ".$spremenljivke['id'].': '.$userDataPresent.'</br>';
+ //echo "Preveri spremenljivko: $preveriSpremenljivko</br>";
+ #pridobitev podatkov o odgovorih respondenta na trenutno vprasanje - konec ####################################
+
+ if(($export_subtype=='q_empty')||($export_subtype=='q_comment')||(($export_subtype=='q_data'||$export_subtype=='q_data_all')&&($userDataPresent!=0||$preveriSpremenljivko))){ //ce je prazen vprasalnik ali (je vprasalnik poln in (so podatki prisotni ali je potrebno pokazati vprasanje tudi, ce ni podatkov))
+ $rowl = $this->srv_language_spremenljivka($spremenljivke);
+ if (strip_tags($rowl['naslov']) != '') $spremenljivke['naslov'] = $rowl['naslov'];
+ if (strip_tags($rowl['info']) != '') $spremenljivke['info'] = $rowl['info'];
+
+ #Pridobimo tekst vprasanja#################################################################################
+
+ $sqlVrstic = sisplet_query("SELECT count(*) FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."'");
+ $rowVrstic = mysqli_fetch_row($sqlVrstic);
+ $visina = round(($rowVrstic[0]+2) * 8);
+
+ //$linecount_vprasanja = $this->pdf->getNumLines($spremenljivke['naslov'], $this->pdf->getPageWidth());
+
+ //$tex = $spremenljivke['naslov'];
+ ######################################### Pridobimo tekst vprasanja - konec
+
+ #Stevilcenje vprasanj###############################################################
+ //$numberingText = ($this->numbering == 1) ? $spremenljivke['variable'].' - ' : '';
+ $numberingText = ($this->numbering == 1) ? $this->encodeText($spremenljivke['variable']).' - ' : '';
+ ######################################### Stevilcenje vprasanj - konec
+ //echo "goli naslov: ".$spremenljivke['naslov']."</br>";
+
+ //belezenje imena spremenljivke, zaradi GDPR vprasanja
+ $this->variableName =$spremenljivke['variable'];
+ //belezenje imena spremenljivke, zaradi GDPR vprasanja - konec
+
+ #Izris stevilke in besedila vprasanja ter IF ali BLOK, ce so prisotni ###############################################
+ //$text = strip_tags($numberingText . $spremenljivke['naslov'], '<a><img><ul><li><ol><br>');
+ $text = strip_tags($numberingText . $spremenljivke['naslov'], '<a><img><ul><li><ol><br><p>'); //je potrebno spustiti <p>, zaradi GDPR vprasanja
+
+ //echo "naslov: ".$text."</br>";
+ //$tex = $text." ".$texNewLine;
+ if( !in_array($spremenljivke['tip'], array(1, 2, 3, 4, 7, 8, 6, 16, 19, 20, 21, 17, 18, 24, 26, 27)) ){ //ce ni radio, check, roleta, stevilo, datum, multigrid radio, checkbox, besedilo, stevilo, razvrscanje, vsota ali kombinirana tabela, lokacija, ali heatmap
+ $tex .= ($this->export_format == 'pdf' ? '\\begin{absolutelynopagebreak} \\noindent ' : ' '); //ce je pdf uredimo, da med vprasanji ne bo prelomov strani
+ }
+
+ #Izpis if-ov pri vprasanju#########################################################
+ if($this->showIf == 1){
+
+ // TODO: Stara koda za iskanje po branchingu (briši, če je vse ok)
+ //$b = new Branching($this->anketa);
+ //$parents = $b->get_parents($spremenljivke['id']);
+ //$parents = explode('p_', $parents);
+ //foreach ($parents AS $key => $val) {
+ // if ( is_numeric(trim($val)) ) {
+ // $parents[$key] = (int)$val;
+ // } else {
+ // unset($parents[$key]);
+ // }
+ //}
+
+ /* $b = new Branching($this->anketa);
+ $parents = $b->get_parents($spremenljivke['id']);
+ $parents = explode('p_', $parents);
+ foreach ($parents AS $key => $val) {
+ if ( is_numeric(trim($val)) ) {
+ $parents[$key] = (int)$val;
+ } else {
+ unset($parents[$key]);
+ }
+ }
+
+ foreach ($parents AS $if) {
+ $tex .= $this->displayIf($if);
+ $tex .= $this->texNewLine;
+ }*/
+ ###### stara koda, ki je delavala
+
+
+ // Po novem izpisemo pred vsakim vprasanjem vse ife znotraj katerih se nahaja
+ Cache::cache_all_srv_branching($this->anketa);
+ $parents = Cache::srv_branching($spremenljivke['id'], 0)['parent'];
+ if($parents){
+ $tex .= $this->displayIf($parents);
+ $tex .= $this->texNewLine;
+ }
+ #preuredil kodo, da zadeva deluje tako kot ta stara, ki se nahaja nad tem
+
+ }
+ ######################################### Izpis if-ov pri vprasanju - konec
+
+ //$tex .= '\textbf{'.$text.'} '.$texNewLine; //izris besedila vprasanja
+
+ if($export_subtype=='q_data'||$export_subtype=='q_data_all'){ //ce je izpis odgovorov
+ $text = $this->dataPiping($text); //pokazi odgovore po zanki
+ }
+
+ $tex .= ' \noindent '; //dodal pred vsakim tekstom vprasanja, da ni indent-a
+
+ if($spremenljivke['orientation']==0){ //ce je vodoravno ob vprasanju
+ //if($spremenljivke['tip'] == 21){ //ce je besedilo (vodoravno ob vprasanju)
+ if($spremenljivke['tip'] == 21 || $spremenljivke['tip'] == 4){ //ce je besedilo (vodoravno ob vprasanju)
+ $tex .= ' \par { '; //dodaj zacetek odstavka, ki je pomemben za pravile izpis
+ }
+ }
+
+ $tex .= '\textbf{'.$this->encodeText($text).'} '; //izris besedila vprasanja
+
+ $this->questionText = $text; //zabelezimo tekst vprasanja, ki ga potrebujemo kasneje
+
+ #Izris stevilke in besedila vprasanja ter IF ali BLOK, ce so prisotni - konec ###############################################
+
+ #Izris opombe ###############################################################################
+ if($spremenljivke['orientation']!=0){ //ce ni vodoravno ob vprasanju,
+
+ //ce imamo opombo, jo izpisi
+ if($spremenljivke['info'] != ''){
+ $tex .= $this->texNewLine;
+ $tex .= '\vspace{2 mm}';
+ //$tex .= ' {\noindent \\footnotesize '.$this->encodeText($spremenljivke['info']).'}';
+ $tex .= ' \noindent \\footnotesize '.$this->encodeText($spremenljivke['info']).' \\normalsize ';
+ }
+
+ if( !in_array($spremenljivke['tip'], array(4, 6, 16, 19, 20, 21, 7, 8, 18)) ){ //ce ni multigrid radio, checkbox, besedilo, stevilo, datum ali vsota ki ne potrebujejo prazne vrstice zaradi uporabe tabele
+ $tex .= $this->texNewLine;
+ }
+
+
+ if($export_subtype=='q_data'||$export_subtype=='q_data_all'){ //ce je izpis odgovorov
+ if($export_data_type==0||$export_data_type==2){ //ce je Navaden ali Kratek izvoz
+ if( in_array($spremenljivke['tip'], array(4, 6, 16, 19, 20, 21)) ){ //ce je multigrid radio, checkbox, besedilo ali stevilo in je Navaden ali Kratek izpis
+ $tex .= $this->texNewLine;
+ }
+ }else{
+ if( in_array($spremenljivke['tip'], array(4, 21)) ){ //ce je besedilo
+ $tex .= $this->texNewLine;
+ }
+ }
+ }
+
+ ####################
+/* if( !in_array($spremenljivke['tip'], array(6, 16, 19, 20, 21, 7)) ){ //ce ni multigrid radio, checkbox, besedilo ali stevilo
+
+ //preveri, ce je itemize v besedilu in ustrezno uredi prazno vrstico
+ $findItemize = '\begin{itemize}';
+ $posItemize = strpos($tex, $findItemize); //v trenutni tex kodi najdi prisotnost besedila za itemize
+ if($posItemize === false){ //ce ni besedila itemize, dodaj prazno vrstico
+ //pejdi v novo vrstico
+ $tex .= $this->texNewLine;
+ }
+ //preveri, ce je itemize v besedilu in ustrezno uredi prazno vrstico - konec
+ }
+
+ if($export_subtype=='q_data'||$export_subtype=='q_data_all'){ //ce je izpis odgovorov
+ if( in_array($spremenljivke['tip'], array(6, 16, 19, 20, 21, 7)) ){ //ce je multigrid radio, checkbox, besedilo ali stevilo
+ $tex .= $this->texNewLine;
+ //echo "ni vodoravno ob vprašanju in je število ali besedilo </br>";
+ }
+ }
+
+ //ce imamo opombo, jo izpisi
+ if($spremenljivke['info'] != ''){
+ if( in_array($spremenljivke['tip'], array(6, 16, 19, 20, 21, 7)) ){ //ce je multigrid radio, checkbox, besedilo ali stevilo
+ $tex .= $this->texNewLine;
+ echo "ni vodoravno ob vprašanju in je število ali besedilo </br>";
+ }
+ //$tex .= $this->texNewLine;
+ $tex .= '\vspace{2 mm}';
+ $tex .= ' {\indent \\footnotesize '.$this->encodeText($spremenljivke['info']).'}';
+ if( !in_array($spremenljivke['tip'], array(6, 16, 19, 20, 21, 7)) ){ //ce ni multigrid radio, checkbox, besedilo ali stevilo
+ $tex .= $this->texNewLine;
+ }
+ } */
+ ####################
+ }else{ //ce je vodoravno ob vprasanju
+ //ce imamo opombo, jo izpisi
+ if($spremenljivke['info'] != ''){
+ //pejdi v novo vrstico
+ $tex .= $this->texNewLine;
+ $tex .= '\vspace{2 mm}';
+ //$tex .= ' {\indent \\footnotesize '.$this->encodeText($spremenljivke['info']).'} ';
+ $tex .= ' {\noindent \\footnotesize '.$this->encodeText($spremenljivke['info']).' \\normalsize } ';
+ }
+
+ if($export_subtype=='q_data'||$export_subtype=='q_data_all'){ //ce je izpis odgovorov
+ if(!in_array($spremenljivke['tip'], array(8))){ //ce ni datum
+ $tex .= $this->texNewLine; //dodaj prazno vrstico
+ }
+ }
+ }
+ #Izris opombe - konec #########################################################################
+
+ #ce vprasanje nima moznih odgovorov, je potrebno zakljuciti environment (absolutelynopagebreak) pri pdf
+ //echo $rowVrstic[0]."za spremenljivko: ".$spremenljivke['tip']."</br>";
+ if($rowVrstic[0]==0 && (in_array($spremenljivke['tip'], array(1, 2, 3, 6, 16, 17, 20, 9, 19, 17))) ){
+ if($this->export_format == 'pdf'){ //ce je pdf
+ if($spremenljivke['orientation']==0 || $spremenljivke['orientation']==2){ //ce sta vodoravni orientaciji
+ $tex .= $this->texNewLine; //dodaj na koncu vprasanja prazno vrstico
+ }
+ $tex .= $this->texBigSkip;
+ $tex .= $this->texBigSkip;
+ $tex .= '\\end{absolutelynopagebreak}'; //zakljucimo environment, da med vprasanji ne bo prelomov strani
+ }else{ //ce je rtf
+ if($spremenljivke['orientation']==0 || $spremenljivke['orientation']==2){ //ce sta vodoravni orientaciji
+ $tex .= $this->texNewLine; //dodaj na koncu vprasanja prazno vrstico
+ }
+ $tex .= $this->texBigSkip;
+ $tex .= $this->texBigSkip;
+ }
+ }
+ #ce vprasanje nima moznih odgovorov, je potrebno zakljuciti environment (absolutelynopagebreak) pri pdf - konec
+ }
+ //echo "tex: ".$tex."</br>";
+ return $tex;
+ }
+ #funkcija, ki pripravi latex kodo za prikazovanje besedila vprasanja - konec ############################################################################
+
+
+ #funkcija, ki pripravi latex kodo za prikazovanje moznih odgovorov glede na tip vprasanja################################################################
+ public function displayAnswers($spremenljivke=null, $export_subtype='', $preveriSpremenljivko=null, $export_data_type='', $loop_id=null){
+
+ switch ( $spremenljivke['tip'] )
+ {
+ case 1: //radio
+ case 2: //check
+ case 3: //select -> radio
+ return RadioCheckboxSelectLatex::getInstance()->export($spremenljivke, $this->export_format, $this->questionText, $this->fillablePdf, $this->texNewLine, $this->getUserId(), $this->db_table, $preveriSpremenljivko, $export_data_type, $export_subtype, $loop_id, $this->language);
+ break;
+ case 6: //multigrid
+ case 16:// multicheckbox
+ case 19:// multitext
+ case 20:// multinumber
+ return MultiGridLatex::getInstance()->export($spremenljivke, $this->export_format, $this->questionText, $this->fillablePdf, $this->texNewLine, $this->getUserId(), $this->db_table, $export_subtype, $preveriSpremenljivko, $this->skipEmptySub, $export_data_type, $this->skipEmpty, $loop_id, $this->language);
+ break;
+ case 21: //besedilo
+ return BesediloLatex::getInstance()->export($spremenljivke, $this->export_format, $this->questionText, $this->fillablePdf, $this->texNewLine, $this->getUserId(), $this->db_table, $this->anketa, $export_subtype, $preveriSpremenljivko, $export_data_type, $loop_id);
+ break;
+ case 4: //besedilo staro
+ return BesediloLatex::getInstance()->export($spremenljivke, $this->export_format, $this->questionText, $this->fillablePdf, $this->texNewLine, $this->getUserId(), $this->db_table, $this->anketa, $export_subtype, $preveriSpremenljivko, $export_data_type, $loop_id);
+ break;
+ case 7: //stevilo
+ return SteviloLatex::getInstance()->export($spremenljivke, $this->export_format, $this->questionText, $this->fillablePdf, $this->texNewLine, $this->getUserId(), $this->db_table, $export_subtype, $preveriSpremenljivko, $export_data_type, $loop_id);
+ break;
+ case 8: //datum
+ return DatumLatex::getInstance()->export($spremenljivke, $this->export_format, $this->questionText, $this->fillablePdf, $this->texNewLine, $this->getUserId(), $this->db_table, $export_subtype, $preveriSpremenljivko, $loop_id);
+ break;
+ case 17: //ranking
+ return RazvrscanjeLatex::getInstance()->export($spremenljivke, $this->export_format, $this->questionText, $this->fillablePdf, $this->texNewLine, $this->getUserId(), $this->db_table, $export_subtype, $preveriSpremenljivko, $export_data_type, $loop_id);
+ break;
+ case 18: //vsota
+ return VsotaLatex::getInstance()->export($spremenljivke, $this->export_format, $this->questionText, $this->fillablePdf, $this->texNewLine, $this->getUserId(), $this->db_table, $export_subtype, $preveriSpremenljivko, $loop_id);
+ break;
+ case 24: // kombinirana tabela
+ return GridMultipleLatex::getInstance()->export($spremenljivke, $this->export_format, $this->questionText, $this->fillablePdf, $this->texNewLine, $this->getUserId(), $this->db_table, $export_subtype, $preveriSpremenljivko, $export_data_type, $loop_id);
+ break;
+ case 26: //lokacija
+ return LokacijaLatex::getInstance()->export($spremenljivke, $this->export_format, $this->questionText, $this->fillablePdf, $this->texNewLine, $this->getUserId(), $this->db_table, $export_subtype, $preveriSpremenljivko, $loop_id);
+ break;
+ case 27: //heatmap
+ return HeatmapLatex::getInstance()->export($spremenljivke, $this->export_format, $this->questionText, $this->fillablePdf, $this->texNewLine, $this->getUserId(), $this->db_table, $export_subtype, $preveriSpremenljivko, $loop_id);
+ break;
+ case 5: //nagovor
+ return NagovorLatex::getInstance()->export($spremenljivke, $this->export_format, $this->questionText, $this->fillablePdf, $this->texNewLine, $export_subtype, $preveriSpremenljivko, $loop_id);
+ break;
+ case 22: //kalkulacija
+ return KalkulacijaLatex::getInstance()->export($spremenljivke, $this->export_format, $this->fillablePdf, $this->texNewLine, $export_subtype, $this->db_table, $this->getUserId(), $loop_id);
+ break;
+ case 25: //kvota
+ return KvotaLatex::getInstance()->export($spremenljivke, $this->export_format, $this->fillablePdf, $this->texNewLine, $export_subtype, $this->db_table, $this->anketa, $this->getUserId(), $loop_id);
+ break;
+ case 9: //SN-imena
+ return SNImenaLatex::getInstance()->export($spremenljivke, $this->export_format, $this->fillablePdf, $this->texNewLine, $export_subtype, $this->db_table, $this->anketa, $this->getUserId(), $loop_id);
+ break;
+ }
+ }
+ #funkcija, ki pripravi latex kodo za prikazovanje moznih odgovorov glede na tip vprasanja - konec #######################################################
+
+ /**
+ * prevod za srv_spremenljivka
+ */
+ function srv_language_spremenljivka ($spremenljivka=null) {
+
+ // if ($this->language != -1) {
+ if ($this->prevod) {
+ $sqll = sisplet_query("SELECT naslov, info FROM srv_language_spremenljivka WHERE ank_id='".$this->anketa."' AND spr_id='".$spremenljivka['id']."' AND lang_id='".$this->language."'");
+ $rowl = mysqli_fetch_array($sqll);
+
+ return $rowl;
+ }
+
+ return false;
+ }
+
+ function displayIf($if=null){
+ global $lang;
+ //echo "funckija za if </br>";
+ $sql_if = sisplet_query("SELECT tip FROM srv_if WHERE id = '$if'");
+ $row_if = mysqli_fetch_array($sql_if);
+
+ // Blok
+ if($row_if['tip'] == 1)
+ $output = strtoupper($lang['srv_block']).' ';
+ // Loop
+ elseif($row_if['tip'] == 2)
+ $output = strtoupper($lang['srv_loop']).' ';
+ // IF
+ else
+ $output = 'IF ';
+
+ $sql_if = sisplet_query("SELECT number, label FROM srv_if WHERE id = '$if'");
+ $row_if = mysqli_fetch_array($sql_if);
+ $output .= '('.$row_if['number'].') ';
+
+ $sql = Cache::srv_condition($if);
+
+ $bracket = 0;
+ $i = 0;
+ while ($row = mysqli_fetch_array($sql)) {
+
+ if ($i++ != 0)
+ if ($row['conjunction'] == 0)
+ $output .= ' and ';
+ else
+ $output .= ' or ';
+
+ if ($row['negation'] == 1)
+ $output .= ' NOT ';
+
+ for ($i=1; $i<=$row['left_bracket']; $i++)
+ $output .= ' ( ';
+
+ // obicajne spremenljivke
+ if ($row['spr_id'] > 0) {
+
+ $row2 = Cache::srv_spremenljivka($row['spr_id']);
+
+ // obicne spremenljivke
+ if ($row['vre_id'] == 0) {
+ $row1 = Cache::srv_spremenljivka($row['spr_id']);
+ // multigrid
+ } elseif ($row['vre_id'] > 0) {
+ $sql1 = sisplet_query("SELECT variable FROM srv_vrednost WHERE id = '$row[vre_id]'");
+ $row1 = mysqli_fetch_array($sql1);
+ } else
+ $row1 = null;
+
+ $output .= $this->encodeText($row1['variable']);
+ // radio, checkbox, dropdown in multigrid
+ if (($row2['tip'] <= 3 || $row2['tip'] == 6) && ($row['spr_id'] || $row['vre_id'])) {
+
+ if ($row['operator'] == 0)
+ $output .= ' = ';
+ else
+ $output .= ' != ';
+
+ $output .= '[';
+
+ // obicne spremenljivke
+ if ($row['vre_id'] == 0) {
+ $sql2 = sisplet_query("SELECT v.variable as variable FROM srv_condition_vre c, srv_vrednost v WHERE cond_id='$row[id]' AND c.vre_id=v.id");
+
+ $j = 0;
+ while ($row2 = mysqli_fetch_array($sql2)) {
+ if ($j++ != 0) $output .= ', ';
+ $output .= $row2['variable'];
+ }
+ // multigrid
+ } elseif ($row['vre_id'] > 0) {
+ $sql2 = sisplet_query("SELECT g.variable as variable FROM srv_condition_grid c, srv_grid g WHERE c.cond_id='$row[id]' AND c.grd_id=g.id AND g.spr_id='$row[spr_id]'");
+
+ $j = 0;
+ while ($row2 = mysqli_fetch_array($sql2)) {
+ if ($j++ != 0) $output .= ', ';
+ $output .= $row2['variable'];
+ }
+ }
+
+ $output .= ']';
+
+ // textbox in nubmer mata drugacne pogoje in opcije
+ } elseif ($row2['tip'] == 4 || $row2['tip'] == 21 || $row2['tip'] == 7 || $row2['tip'] == 22) {
+
+ if ($row['operator'] == 0)
+ $output .= ' = ';
+ elseif ($row['operator'] == 1)
+ $output .= ' <> ';
+ elseif ($row['operator'] == 2)
+ $output .= ' < ';
+ elseif ($row['operator'] == 3)
+ $output .= ' <= ';
+ elseif ($row['operator'] == 4)
+ $output .= ' > ';
+ elseif ($row['operator'] == 5)
+ $output .= ' >= ';
+
+ $output .= '\''.$row['text'].'\'';
+
+ }
+
+ // recnum
+ } elseif ($row['spr_id'] == -1) {
+
+ $output .= 'mod(recnum, '.$row['modul'].') = '.$row['ostanek'];
+
+ }
+
+ for ($i=1; $i<=$row['right_bracket']; $i++)
+ $output .= ' ) ';
+ }
+
+ if ($row_if['label'] != '') {
+ $output .= ' (';
+ $output .= ' '.$row_if['label'].' ';
+ $output .= ') ';
+ }
+
+ return $output;
+ }
+
+ #funkcija, ki skrbi za izbiro radio, checkbox ali ostale simbole, ki so potrebni za izris odgovorov #############################################################
+ function getAnswerSymbol($export_format='', $fillablePdf=null, $spremenljivkeTip=null, $spremenljivkeGrids=null, $numOfMissings=null, $data=null, $enota='', $indeksVASIcon='', $VASNumberRadio='', $spremenljivkeId=null){
+ $tip=$spremenljivkeTip;
+ global $site_path;
+ $this->path2Images = $site_path.'admin/survey/export/latexclasses/textemp/images/';
+ //echo $tip;
+ //$numGrids=$spremenljivke['grids'];
+ $numGrids=$spremenljivkeGrids;
+ //echo "Data:".($data)."</br>";
+ //echo "DataCount:".count($data)."</br>";
+ //if($tip==21||$tip==8){ //ce je besedilo ali datum,
+ if($tip==21||$tip==4||$tip==8){ //ce je besedilo ali datum,
+ $tip=2; //naj se pobere checkbox
+ }
+
+ if( ($export_format=='pdf'&&$fillablePdf==0)||$export_format=='rtf'){//ce je navaden pdf ali rtf dokument (brez moznosti izbire ali vnosa v polja)
+
+ if($data){
+ $data = $this->encodeText($data);
+ }
+
+ if($tip==1||$tip==6){ //radio ali multigrid z radio
+ if($data){ //ce je odgovor respondenta
+ if($enota!=11&&$enota!=12){ //ce ni VAS ali slikovni tip
+ $radioButtonTex = ($export_format=='pdf'?"{\\radio}" : "\\includegraphics[scale=".RADIO_BTN_SIZE."]{".$this->path2Images."radio2}"); //\radio je newcommand
+ }elseif($enota==11){ //drugace, ce je VAS
+ if($tip==1){
+ $VASNumber = $VASNumberRadio;
+ }else{
+ $spremenljivkeGrids = $spremenljivkeGrids - 1;
+ $VASNumber = $spremenljivkeGrids;
+ }
+ $indeksVASIcon = $indeksVASIcon - 1;
+ $radioButtonTex = [];
+ if($VASNumber>1){
+ switch ($VASNumber) {
+ case 1:
+ $radioButtonTex = "";
+ break;
+ case 2:
+ $arrayVAS = ['vas3checked', 'vas5checked'];
+ foreach($arrayVAS AS $VAS){
+ //$radioButtonTex[] = "\\includegraphics[scale=".VAS_SIZE."]{".$this->path2Images."".$VAS."}";
+ $radioButtonTex[] = "\\includegraphics[scale=".VAS_SIZE."]{".$this->path2Images."".$VAS."}";
+ }
+ break;
+ case 3:
+ $arrayVAS = ['vas3checked', 'vas4checked', 'vas5checked'];
+ foreach($arrayVAS AS $VAS){
+ $radioButtonTex[] = "\\includegraphics[scale=".VAS_SIZE."]{".$this->path2Images."".$VAS."}";
+ }
+ break;
+ case 4:
+ $arrayVAS = ['vas2checked', 'vas3checked', 'vas5checked', 'vas6checked'];
+ foreach($arrayVAS AS $VAS){
+ $radioButtonTex[] = "\\includegraphics[scale=".VAS_SIZE."]{".$this->path2Images."".$VAS."}";
+ }
+ break;
+ case 5:
+ $arrayVAS = [ 'vas2checked', 'vas3checked', 'vas4checked', 'vas5checked', 'vas6checked'];
+ foreach($arrayVAS AS $VAS){
+ $radioButtonTex[] = "\\includegraphics[scale=".VAS_SIZE."]{".$this->path2Images."".$VAS."}";
+ }
+ break;
+ case 6:
+ $arrayVAS = ['vas1checked', 'vas2checked', 'vas3checked', 'vas5checked', 'vas6checked', 'vas7checked'];
+ foreach($arrayVAS AS $VAS){
+ $radioButtonTex[] = "\\includegraphics[scale=".VAS_SIZE."]{".$this->path2Images."".$VAS."}";
+ }
+ break;
+ case 7:
+ $arrayVAS = ['vas1checked', 'vas2checked', 'vas3checked', 'vas4checked', 'vas5checked', 'vas6checked', 'vas7checked'];
+ foreach($arrayVAS AS $VAS){
+ $radioButtonTex[] = "\\includegraphics[scale=".VAS_SIZE."]{".$this->path2Images."".$VAS."}";
+ }
+ break;
+ }
+ return $radioButtonTex[$indeksVASIcon]; //$indeksVASIcon
+ }
+ }elseif($enota==12){ //drugace, ce je slikovni tip
+ $prviOdgovorSlikovniTip = 1;
+ $radioButtonTex = ICON_SIZE."{".$this->path2Images."".$this->getCustomRadioSymbol($spremenljivkeId, $prviOdgovorSlikovniTip)."}";
+ }
+ }else{
+ if($enota!=11&&$enota!=12){ //ce ni VAS ali slikovni tip
+ $radioButtonTex = ($export_format=='pdf'?"{\Large $\ocircle$}" : "\\includegraphics[scale=".RADIO_BTN_SIZE."]{".$this->path2Images."radio}");
+ }elseif($enota==11){ //drugace, ce je VAS
+ if($tip==1){
+ $VASNumber = $VASNumberRadio;
+ }else{
+ $spremenljivkeGrids = $spremenljivkeGrids - 1;
+ $VASNumber = $spremenljivkeGrids;
+ }
+ $indeksVASIcon = $indeksVASIcon - 1;
+ $radioButtonTex = [];
+ if($VASNumber>1){
+ switch ($VASNumber) {
+ case 1:
+ $radioButtonTex = "";
+ break;
+ case 2:
+ $arrayVAS = ['vas3', 'vas5'];
+ foreach($arrayVAS AS $VAS){
+ $radioButtonTex[] = "\\includegraphics[scale=".VAS_SIZE."]{".$this->path2Images."".$VAS."}";
+ }
+ break;
+ case 3:
+ $arrayVAS = ['vas3', 'vas4', 'vas5'];
+ foreach($arrayVAS AS $VAS){
+ $radioButtonTex[] = "\\includegraphics[scale=".VAS_SIZE."]{".$this->path2Images."".$VAS."}";
+ }
+ break;
+ case 4:
+ $arrayVAS = ['vas2', 'vas3', 'vas5', 'vas6'];
+ foreach($arrayVAS AS $VAS){
+ $radioButtonTex[] = "\\includegraphics[scale=".VAS_SIZE."]{".$this->path2Images."".$VAS."}";
+ }
+ break;
+ case 5:
+ $arrayVAS = [ 'vas2', 'vas3', 'vas4', 'vas5', 'vas6'];
+ foreach($arrayVAS AS $VAS){
+ $radioButtonTex[] = "\\includegraphics[scale=".VAS_SIZE."]{".$this->path2Images."".$VAS."}";
+ }
+ break;
+ case 6:
+ $arrayVAS = ['vas1', 'vas2', 'vas3', 'vas5', 'vas6', 'vas7'];
+ foreach($arrayVAS AS $VAS){
+ $radioButtonTex[] = "\\includegraphics[scale=".VAS_SIZE."]{".$this->path2Images."".$VAS."}";
+ }
+ break;
+ case 7:
+ $arrayVAS = ['vas1', 'vas2', 'vas3', 'vas4', 'vas5', 'vas6', 'vas7'];
+ foreach($arrayVAS AS $VAS){
+ $radioButtonTex[] = "\\includegraphics[scale=".VAS_SIZE."]{".$this->path2Images."".$VAS."}";
+ }
+ break;
+ }
+ return $radioButtonTex[$indeksVASIcon]; //$indeksVASIcon
+ }
+
+ }elseif($enota==12){
+ $prviOdgovorSlikovniTip = 0;
+ $radioButtonTex = ICON_SIZE."{".$this->path2Images."".$this->getCustomRadioSymbol($spremenljivkeId, $prviOdgovorSlikovniTip)."}";
+ }
+ }
+ return $radioButtonTex;
+ }else if($tip==2||$tip==16){ //checkbox ali multigrid s checkbox
+ if($data){
+ $checkboxTex = ($export_format=='pdf'?'{\Large \CheckedBox}' : "\\includegraphics[scale=".CHCK_BTN_SIZE."]{".$this->path2Images."checkbox2}");
+ }else{
+ $checkboxTex = ($export_format=='pdf'?'{\Large \Square}' : "\\includegraphics[scale=".CHCK_BTN_SIZE."]{".$this->path2Images."checkbox}");
+ }
+ return $checkboxTex;
+ }elseif($tip==19||$tip==20){ //multi text ali multi number
+ $textboxWidth = 0.5/($numGrids+$numOfMissings); //sirina praznega textbox-a
+ //priprava latex kode za prazen text box dolocene sirine in visine glede na export format
+ if($export_format == 'pdf'){
+ if($data!=''){
+ $TextBoxWithText = ' \\textcolor{crta}{\footnotesize{'.$data.'}} ';
+ //$TextBoxWithText = ' \\textcolor{crta}{\footnotesize{'.$this->encodeText($data).'}} ';
+ $emptyTextBox = $TextBoxWithText;
+ }else{
+ if($this->export_subtype == 'q_empty' || $this->export_subtype == 'q_comments'){
+ $emptyTextBox = ' \fbox{\parbox{'.$textboxWidth.'\textwidth}{ \hphantom{\hspace{'.$textboxWidth.'\textwidth}} }} ';
+ }else{
+ $emptyTextBox = ' ';
+ }
+
+ }
+ }elseif($export_format == 'rtf'){
+ if($data!=''){
+ $TextBoxWithText = ' '.$data.' ';
+ $emptyTextBox = $TextBoxWithText;
+ }else{
+ if($this->export_subtype == 'q_empty' || $this->export_subtype == 'q_comments'){
+ $emptyTextBox =' \fbox{\parbox{'.$textboxWidth.'\textwidth}{ \hphantom{\hspace{'.$textboxWidth.'\textwidth}} }} ';
+ }else{
+ $emptyTextBox = ' ';
+ }
+ }
+ }
+ return $emptyTextBox;
+ }
+ }else if($export_format=='pdf'&&$fillablePdf==1){//ce je pdf dokument, kjer je mozno vpisati v polja
+ $radioButtonTex ="{\Large $\ocircle$}";
+ $checkboxTex ='{\Large \Square}';
+ }
+ }
+ #funkcija, ki skrbi za izbiro radio, checkbox ali ostale simbole, ki so potrebni za izris odgovorov - konec #####################################################
+
+ #funkcija, ki ureja pretvorbo stevilskega ID vprasanja v "crkovsko" identifikacijo, ker Latex ne podpira imen s stevilkami ######################################
+ function UrediOznakoVprasanja($sprId=null){
+ $sprId = (string) $sprId;
+ $sprIdArray = str_split($sprId);
+ $temp='';
+ foreach($sprIdArray as $data){
+ $temp .= chr($data+65);
+ }
+ return $temp;
+ }
+ #funkcija, ki ureja pretvorbo stevilskega ID vprasanja v "crkovsko" identifikacijo, ker Latex ne podpira imen s stevilkami - konec #############################
+
+ #funkcija ki skrbi za encode dolocenih spornih delov besedila v latex-u prijazno
+ function encodeText($text='', $vre_id=0, $naslovStolpca = 0){
+ global $site_path, $lang;
+ //$text = str_replace(' ','X',$text); //nadomesti presledke
+ //echo "Encoding ".$text."</br>";
+ //echo "vre_id: ".$vre_id."</br>";
+ //echo "ime spremenljivke ".$this->variableName."</br>";
+
+ $text = htmlspecialchars_decode($text); //vse html special chars kot je & spremeni v ustrezne simbole (npr. &=>&)
+
+ //resevanje razbirajanja predolgih neprekinjenih besed in URL - spremenljivke za kasnejsi prilagojen izpis
+ //$numOfWords = str_word_count($text, 0);
+ $numOfSpacesPrej = substr_count($text, ' '); //stevilo presledkov v besedilu
+ $stringLength = strlen($text);
+
+ $findSpace = ' ';
+ $posSpace1 = strpos($text, $findSpace); //najdi pozicijo prvega presledka v besedilu
+ $posSpace2 = strripos($text, $findSpace); //najdi pozicijo zadnjega presledka v besedilu
+
+
+ $findHttp = 'http://';
+ $findHttps = 'https://';
+ $posHttp = strpos($text, $findHttp);
+ $posHttps = strpos($text, $findHttps);
+ $isURL = 0;
+ /* if($posHttp !== false || $posHttps !== false) { //imamo URL naslov
+ $isURL = 1;
+ } */
+ //resevanje razbirajanja predolgih neprekinjenih besed in URL - konec
+
+ $this->path2UploadedImages = $site_path.'uploadi/editor/';
+ if($text == ''){ //ce ni teksta, vrni se
+ return;
+ }
+ $textOrig = $text;
+ $findme = '<br />';
+ $findmeLength = strlen($findme);
+ $findImg = '<img';
+ $findImgLength = strlen($findImg);
+ $findUl = '<ul';
+ $findUlLength = strlen($findUl);
+ $findOl = '<ol';
+ $findLi = '<li';
+
+ $findPar = '<p>';
+
+ $pos = strpos($text, $findme);
+ $posImg = strpos($text, $findImg);
+ $posUl = strpos($text, $findUl);
+ $posOl = strpos($text, $findOl);
+ $posLi = strpos($text, $findLi);
+ $posPar = strpos($text, $findPar);
+
+ //echo "pozicija paragrafa: $posPar </br>";
+
+ //ureditev izrisa slike
+ if($posImg !== false){
+ $numOfImgs = substr_count($text, $findImg); //stevilo '<img ' v tekstu
+ $posImg = strpos($text, $findImg);
+ $textPrej = '';
+ $textPotem = '';
+ for($i=0; $i<$numOfImgs; $i++){
+ $posImg = strpos($text, $findImg);
+ $textPrej = substr($text, 0, $posImg); //tekst do img
+ $textPotem = substr($text, $posImg); //tekst po img, z vkljuceno hmlt kodo z img
+ $posImgEnd = strpos($textPotem, '/>'); //pozicija, kjer se konca html koda za img
+ $textPotem = substr($textPotem, $posImgEnd+strlen('/>')); //tekst od konca html kode za img dalje
+
+ //$text = $textPrej.' '.PIC_SIZE_ANS."{".$this->path2UploadedImages."".$this->getImageName($text, 0, '<img')."}".' '.$textPotem;
+ //$text = $textPrej.' '.PIC_SIZE_ANS."{".$this->path2UploadedImages."".$this->getImageName($text, 0, '<img', $vre_id)."}".' '.$textPotem;
+ $imageName = $this->path2UploadedImages."".$this->getImageName($text, 0, '<img', $vre_id);
+ $imageNameTest = $imageName.'.png'; //za preveriti, ali obstaja slikovna datoteka na strezniku
+ //error_log("iz survey element: ".$imageNameTest);
+ //echo("iz survey element: ".$imageNameTest."</br>");
+ if(filesize($imageNameTest) > 0){
+ $text = $textPrej.' '.PIC_SIZE_ANS."{".$imageName."}".' '.$textPotem;
+ }else{
+ $image = $lang['srv_pc_unavailable'];
+ $text = $textPrej.' '.$image.' '.$textPotem;
+ }
+ }
+
+ //pred ureditvijo posebnih karakterjev, odstrani del teksta s kodo za sliko, da se ne pojavijo tezave zaradi imena datoteke od slike
+ $findImgCode = '\includegraphics';
+ $posOfImgCode = strpos($text, $findImgCode);
+ //echo $posOfImgCode."</br>";
+ $textToImgCode = substr($text, 0, $posOfImgCode); //tekst do $findImgCode
+ //echo $textToImgCode."</br>";
+ $textFromImgCode = substr($text, $posOfImgCode); //tekst po $findImgCode
+ //echo $textFromImgCode."</br>";
+ $findImgCodeEnd = '}';
+ //$posOfImgCodeEnd = strpos($text, $findImgCodeEnd);
+ $posOfImgCodeEnd = strpos($textFromImgCode, $findImgCodeEnd);
+ //echo $posOfImgCodeEnd."</br>";
+ $textAfterImgCode = substr($textFromImgCode, $posOfImgCodeEnd+1); //tekst po $findImgCodeEnd
+ //echo $textAfterImgCode."</br>";
+ $textOfImgCode = substr($text, $posOfImgCode, $posOfImgCodeEnd+1);
+ //echo $textOfImgCode."</br>";
+
+ $text = $textToImgCode.$textAfterImgCode;
+
+ //pred ureditvijo posebnih karakterjev, odstrani del teksta s kodo za sliko, da se ne pojavijo tezave zaradi imena datoteke od slike - konec
+ }
+ //ureditev izrisa slike - konec
+
+ //ureditev posebnih karakterjev za Latex http://www.cespedes.org/blog/85/how-to-escape-latex-special-characters, https://en.wikibooks.org/wiki/LaTeX/Special_Characters#Other_symbols
+ $text = str_replace('\\','\textbackslash{} ',$text);
+ //$text = str_replace('{','\{',$text);
+ //$text = str_replace('}','\}',$text);
+ $text = str_replace('$','\$ ',$text);
+
+ if(substr_count($text, '#')){ //ce je stevilo # vecje od 1
+ $text = str_replace('#','\#',$text);
+ }else{
+ $text = str_replace('#','\# ',$text);
+ }
+ $text = str_replace('%','\% ',$text);
+ $text = str_replace('€','\euro',$text);
+ $text = str_replace('^','\textasciicircum{} ',$text);
+ $text = str_replace('_','\_ ',$text);
+ $text = str_replace('~','\textasciitilde{} ',$text);
+ if(strpos($text, '&')){ //ce je prisotno v besedilu &'
+ $text = str_replace('&','\& ',$text);
+ }else{
+ $text = str_replace('&','\& ',$text);
+ }
+ $text = str_replace(' ','~',$text);
+ //$text = str_replace('<','\textless ',$text);
+ $text = str_replace('<',' \textless ',$text);
+ //$text = str_replace('>','\textgreater ',$text);
+ $text = str_replace('>',' \textgreater ',$text);
+ //ureditev posebnih karakterjev za Latex - konec
+
+ //ureditev grskih crk
+ $text = str_replace('α','\textalpha ',$text);
+ $text = str_replace('β','\textbeta ',$text);
+ $text = str_replace('γ','\textgamma ',$text);
+ $text = str_replace('δ','\textdelta ',$text);
+ $text = str_replace('ε','\textepsilon ',$text);
+ $text = str_replace('ζ','\textzeta ',$text);
+ $text = str_replace('η','\texteta ',$text);
+ $text = str_replace('θ','\texttheta ',$text);
+ $text = str_replace('ι','\textiota ',$text);
+ $text = str_replace('κ','\textkappa ',$text);
+ $text = str_replace('λ','\textlambda ',$text);
+ $text = str_replace('μ','\textmugreek ',$text);
+ $text = str_replace('ν','\textnu ',$text);
+ $text = str_replace('ξ','\textxi ',$text);
+ //$text = str_replace('ο','\textomikron ',$text);
+ $text = str_replace('π','\textpi ',$text);
+ $text = str_replace('ρ','\textrho ',$text);
+ $text = str_replace('σ','\textsigma ',$text);
+ $text = str_replace('τ','\texttau ',$text);
+ $text = str_replace('υ','\textupsilon ',$text);
+ $text = str_replace('φ','\textphi ',$text);
+ $text = str_replace('χ','\textchi ',$text);
+ $text = str_replace('ψ','\textpsi ',$text);
+ $text = str_replace('ω','\textomega ',$text);
+ //ureditev grskih crk - konec
+
+ //ureditev preureditve html kode ul in li v latex itemize
+ if($posUl !== false){
+ //echo "text prej: ".$text."</br>";
+ $numOfUl = substr_count($text, $findUl); //stevilo '<ul' v tekstu
+ //echo "numOfUl ".$numOfUl."</br>";
+ ######################
+ //if($numOfUl!=0){
+ if($numOfUl!=0 && $posLi !== false){ //ce imamo ul in li
+ $text = str_replace('<ul>','\begin{itemize} ', $text);
+ $text = str_replace('<ul','\begin{itemize} ', $text);
+ $text = str_replace('<li>','\item ', $text);
+ $text = str_replace('<li','\item ', $text);
+ $text = str_replace('</ul>','\end{itemize} \ ', $text);
+ }
+ //echo "prazno v html: ".strpos($text, '\r')."</br>";
+ //echo "text potem: ".$text."</br>";
+ ######################
+ }
+ //ureditev preureditve html kode ul in li v latex itemize - konec
+
+ //ureditev preureditve html kode ol in li v latex enumerate, ki je ostevilcen
+ if($posOl !== false){
+ //echo "text prej: ".$text."</br>";
+ $numOfOl = substr_count($text, $findOl); //stevilo '<ol' v tekstu
+ //echo "numOfUl ".$numOfUl."</br>";
+ ######################
+ //if($numOfUl!=0){
+ if($numOfOl!=0 && $posLi !== false){ //ce imamo ol in li
+ $text = str_replace('<ol>','\begin{enumerate} ', $text);
+ $text = str_replace('<li>','\item ', $text);
+ $text = str_replace('<li','\item ', $text);
+ $text = str_replace('</ol>','\end{enumerate} \ ', $text);
+ }
+ //echo "prazno v html: ".strpos($text, '\r')."</br>";
+ //echo "text potem: ".$text."</br>";
+ ######################
+ }
+ //ureditev preureditve html kode ol in li v latex enumerate, ki je ostevilcen - konec
+
+ //po ureditvi posebnih karakterjev, dodati del teksta s kodo za sliko, ce je slika prisotna
+ if($posImg !== false){
+ $text = substr_replace($text, $textOfImgCode, $posOfImgCode, 0);
+ }
+ //po ureditvi posebnih karakterjev, dodati del teksta s kodo za sliko, ce je slika prisotna
+
+ if($posPar !== false){ //ce je kaksen html tag <p>, dodaj prazno vrstico oz. break
+ if($this->variableName=='gdpr'){
+ if($numOfUl!=0 && $posLi !== false){ //ce imamo ul in li
+ $divider = ' ';
+ }else{
+ $divider = ' \\ \\\\ ';
+ }
+ $text = str_replace('<p>',$divider, $text);
+ }else{
+ $text = str_replace('<p>',' ', $text);
+ }
+ }
+
+
+ //priprava izpisa zelo dolgega besedila brez presledkov (URL, email, ...)
+ //if($numOfSpacesPrej == 0 && ($stringLength >= MAX_STRING_LENGTH)){ //ce v besedilu ni presledkov in je besedilo daljse od max dovoljene dolzine
+ if( ($numOfSpacesPrej == 0 && ($stringLength >= MAX_STRING_LENGTH)) || ($numOfSpacesPrej == 1 && $posSpace1 == $posSpace2 && $stringLength >= MAX_STRING_LENGTH)){ //ce v besedilu ni presledkov in je besedilo daljse od max dovoljene dolzine
+ //$text = "\seqsplit{".$text."}"; //ni v redu seqsplit, ker ne dela, če so posebni znaki
+ $text = substr_replace($text, $this->texNewLine, MAX_STRING_LENGTH, 0); //dodaj na ustrezni dolzini besedila prehod v novo vrstico
+ }
+ //priprava izpisa zelo dolgega besedila brez presledkov - konec
+ //echo "text potem: ".$text."</br>";
+
+ //detekcija prisotnosti e-naslova v besedilu in primerna preureditev, da pride do pravilnega izpisa
+ $findAt = '@';
+ $numOfAt = substr_count($text, $findAt); //stevilo '@' v besedilu
+
+ $posAt = strpos($text, $findAt);
+ if($posAt && $posSpace1){ //ce je prisotna afna in je prisoten presledek v besedilu
+ //echo "afna je: $posAt </br>";
+ //echo "Encoding: ".$text."</br>";
+
+ //najdi prvi presledek po afni
+ //echo substr($text, $posAt) ."</br>";
+ $posSpace1Mail = strpos(substr($text, $posAt), $findSpace); //najdi pozicijo prvega presledka v besedilu po e-naslovu
+ $posSpace1Mail = $posSpace1Mail+$posAt; //koncna pozicija, ce se gleda celotno besedilo
+ //echo $posSpace1Mail."</br>";
+
+ //najdi prvi presledek pred afno
+ $posSpace2Mail = strripos(substr($text, 0, $posAt), $findSpace); //najdi pozicijo zadnjega presledka v besedilu pred e-naslovom
+ //echo $posSpace2Mail."</br>";
+
+ //dodaj po e-naslovu potrebno latex kodo za zakljucek url
+ $text = substr_replace($text, '}', $posSpace1Mail, 0);
+
+ //dodaj pred e-naslovom potrebno latex kodo za url
+ //substr_replace(string_name, replacement_string, start_pos, length)
+ $text = substr_replace($text, ' \url{', $posSpace2Mail+1, 0);
+ //echo $text."</br>";
+ }
+ //detekcija prisotnosti e-naslova v besedilu in primerna preureditev, da pride do pravilnega izpisa - konec
+
+
+ //RESEVANJE BESEDILA V CIRILICI
+ $contains_cyrillic = (bool) preg_match('/[\p{Cyrillic}]/u', $text); //ali je v besedilu cirilica?
+ if($contains_cyrillic){ // ce je cirilica v besedilu
+ $text = '\foreignlanguage{russian}{'.$text.'}';
+ }
+ //RESEVANJE BESEDILA V CIRILICI - konec
+
+
+
+ //RESEVANJE odstranitve dodatnih style tag-ov po ul, ipd. #######################################################
+ $findStyleTag = 'style="';
+ //$findStyleTagEnd = '"';
+ $findStyleTagEnd = '">';
+ $numOfStyleTags = substr_count($text, $findStyleTag); //stevilo 'style=" ' v tekstu
+ //echo "stevilo style: ".$numOfStyleTags." </br>";
+ //echo $text."</br>";
+ for($s=0; $s<$numOfStyleTags; $s++){ //za vsako najdeno 'style=" ' besedilo, uredi njeno odstranitev
+ $posStyleTag = strpos($text, $findStyleTag);
+ $posStyleTagEnd = strpos($text, $findStyleTagEnd, $posStyleTag); //strpos(string,find,start) najdi $findStyleTagEnd v $text, isci od $posStyleTag dalje
+ $dolzinaOff = $posStyleTagEnd - $posStyleTag + 2;
+ $text = substr_replace($text, "", $posStyleTag, $dolzinaOff);
+
+ }
+ //RESEVANJE odstranitve dodatnih style tag-ov po ul, ipd. - konec #################################################
+
+ if($pos === false && $posImg === false) { //v tekstu ni br in img
+
+ $text = preg_replace("/(\R){2,}/", "$1", $text);
+ return strip_tags($text);
+ }else { //v tekstu sta prisotna br ali img
+ $text2Return = ''; //tekst ki bo vrnjen
+
+ //ureditev preureditev html kode za novo vrstico v latex, ureditev prenosa v novo vrstico
+ if($naslovStolpca==0){ // ce besedilo ni naslov stolpca tabele
+ if($pos !== false){
+ $pos = strpos($text, $findme);
+ $numOfBr = substr_count($text, $findme); //stevilo '<br />' v tekstu
+ for($i=0; $i<$numOfBr; $i++){
+ if($i == 0){ //ce je prvi najdeni '<br />'
+ $textPrej = substr($text, 0, $pos);
+ $textPotem = substr($text, $pos+$findmeLength);
+ if($i == $numOfBr-1){
+ //$text2Return .= $textPrej.' \break '.$textPotem;
+ $text2Return .= $textPrej.' \\\\ '.$textPotem;
+ }else{
+ //$text2Return .= $textPrej.' \break ';
+ $text2Return .= $textPrej.' \\\\ ';
+ }
+ }else{ //drugace
+ $pos = strpos($textPotem, $findme);
+ $textPrej = substr($textPotem, 0, $pos);
+ $textPotem = substr($textPotem, $pos+$findmeLength);
+ if($i == $numOfBr-1){
+ //$text2Return .= $textPrej.' \break '.$textPotem;
+ $text2Return .= $textPrej.' \\\\ '.$textPotem;
+ }else{
+ //$text2Return .= $textPrej.' \break ';
+ $text2Return .= $textPrej.' \\\\ ';
+ }
+ }
+ }
+ $text = $text2Return;
+ }
+ }
+ //ureditev preureditev html kode za novo vrstico v latex, ureditev prenosa v novo vrstico - konec
+ //echo "text potem: ".$text."</br>";
+ $text = preg_replace("/(\R){2,}/", "$1", $text);
+ return strip_tags($text); //vrni tekst brez html tag-ov
+ }
+ }
+ #funkcija ki skrbi za encode dolocenih spornih delov besedila v latex-u prijazno - konec
+
+ #funkcija, ki skrbi za pridobitev imena slike, ki jo je potrebno izrisati ######################################
+ function getImageName($text='', $sprId=null, $findme='', $vre_id=0){
+ global $site_path;
+ $imageName = '';
+
+ if($text == 'hotspot' && $findme == 'hotspot_image='){
+ $sqlParametrov = sisplet_query("SELECT params FROM srv_spremenljivka WHERE id='".$sprId."'");
+ $rowParametrov = mysqli_fetch_row($sqlParametrov);
+ $text = $rowParametrov[0];
+ }
+
+ $pos = strpos($text, $findme); //najdi pozicijo teksta v $findme
+ //echo "text za echo: ".$text."</br>";
+ //if($pos!=''){ //ce je slika v bazi
+ if($pos!=''||$pos==0){ //ce je slika v bazi
+ $imageName = substr($text,$pos); //pokazi le del text od besedila $findme dalje (vkljucno z besedilom)
+ //echo "imageName prej: ".$imageName."</br>";
+
+ $findme = $site_path.'uploadi/editor/';
+ //$findme = 'uploadi/editor/';
+
+ $pos = strpos($imageName, $findme); //najdi pozicijo teksta v $findme
+ //echo "najdi tole: ".$findme."</br>";
+ //echo "najdi tukaj: ".$imageName."</br>";
+ //echo "pozicija tega: ".$pos."</br>";
+ if($pos){ //ce je slika na strezniku
+ $slikaNaStrezniku = 1;
+ }else{//ce slike ni na strezniku
+ $slikaNaStrezniku = 0;
+ }
+ //echo "ali je slika na strežniku: ".$slikaNaStrezniku."</br>";
+ if($slikaNaStrezniku==1){ //ce je slika na strezniku
+ $imageName = substr($imageName,$pos+7); //pokazi le del params od besedila 'editor/' dalje, brez besedila 'editor/'
+ $pos = $this->getEndPosition($imageName); //najdi pozicijo konca URL slike
+ $imageExtension = substr($imageName, $pos-3, 3); //pridobi koncnico slike (za gif je potrebno sliko pretvoriti v png, saj latex ne podpira gif)
+ /* echo "exr1: ".$imageExtension."</br>";
+ $imageExtension = strrchr($imageName, '.'); //pridobi koncnico slike (za gif je potrebno sliko pretvoriti v png, saj latex ne podpira gif, jpg in jpeg)
+ echo "exr2: ".$imageExtension."</br>"; */
+
+ $imageName = substr($imageName, 0, $pos); //pokazi le del params od zacetka besedila do '"' oz. konca URL slike
+
+ $path = $site_path.'uploadi/editor/'.$imageName;
+
+ if($imageExtension == 'gif'){ //ce je slika gif, jo je potrebno pretvoriti v png
+ $this->convertGifToPng($path, $slikaNaStrezniku);
+ }
+
+ if($imageExtension == 'jpg' || $imageExtension == 'peg'){ //ce je slika jpg ali jpeg, jo je potrebno pretvoriti v png
+ $this->convertJpgToPng($path, $slikaNaStrezniku, $imageExtension);
+ }
+ }elseif($slikaNaStrezniku==0){ //ce slike ni na strezniku
+ //echo "vre_id: $vre_id </br>";
+ $imageName = $this->getOnlineImageName($imageName, $slikaNaStrezniku, $vre_id); //pridobi njen URL
+ }
+
+ $imageName = substr($imageName, 0, strrpos($imageName, '.'));
+
+ }
+
+ //echo "imagename pred return: ".$imageName."</br>";
+ return $imageName;
+ }
+ #funkcija, ki skrbi za pridobitev imena slike, ki jo je potrebno izrisati - konec ###############################
+
+
+ #funkcija, ki skrbi za pridobitev ustrezne strezniske poti do slike - trenutno ni v uporabi ########################################################
+ function getPath2Images($text='', $sprId=null, $findme=''){
+ global $site_path;
+ $imageName = '';
+
+ if($text == 'hotspot' && $findme == 'hotspot_image='){
+ $sqlParametrov = sisplet_query("SELECT params FROM srv_spremenljivka WHERE id='".$sprId."'");
+ $rowParametrov = mysqli_fetch_row($sqlParametrov);
+ $text = $rowParametrov[0];
+ }
+
+ $pos = strpos($text, $findme); //najdi pozicijo teksta v $findme
+
+ if($pos!=''||$pos==0){ //ce je slika v bazi
+ $imageName = substr($text,$pos); //pokazi le del text od besedila $findme dalje (vkljucno z besedilom)
+
+ $findme = 'editor/';
+ $pos = strpos($imageName, $findme); //najdi pozicijo teksta 'editor/'
+
+ if($pos){ //ce je slika na strezniku
+ $slikaNaStrezniku = 1;
+ }else{//ce slike ni na strezniku
+ $slikaNaStrezniku = 0;
+ }
+
+ if($slikaNaStrezniku==1){ //ce slika je bila prenesena na streznik
+ $path2Images = $site_path.'admin/survey/export/latexclasses/textemp/images/';
+ }elseif($slikaNaStrezniku==0){ //ce slika je bila na dolocenem URL
+ $path2Images = $site_path.'uploadi/editor/';
+ }
+
+ }
+ //echo "pot do slik: ".$path2Images."</br>";
+ return $path2Images;
+ }
+ #funkcija, ki skrbi za pridobitev ustrezne strezniske poti do slike - konec ########################################################
+
+
+ #funkcija, ki skrbi za pridobitev slike, ki se nahaja nekje online in jo je potrebno izrisati, in vrne lokalno ime slike ######################################
+ function getOnlineImageName($imageName='', $slikaNaStrezniku=null, $vre_id=null){
+ global $site_path;
+ //echo "imageName v getOnlineImageName nekje vmes 1: ".$imageName."</br>";
+ $row = Cache::srv_spremenljivka(self::$spremenljivka);
+ //echo "sprem: ".self::$spremenljivka."</br>";
+ $spremenljivkaParams = new enkaParameters($row['params']);
+ //echo "params: ".$spremenljivkaParams->get('hotspot_image')."</br>";
+ $imageNameTmp = $spremenljivkaParams->get('hotspot_image');
+ //if($imageNameTmp!=''){ //ce je hotspot
+ if($imageNameTmp!=''&&$vre_id==0){ //ce je hotspot
+ $imageName = $imageNameTmp;
+ }
+
+ $findHttp = 'http';
+ $posHttp = strpos($imageName, $findHttp);
+ $imageName = substr($imageName,$posHttp); //besedilo do zacetka http
+
+ $pos = $this->getEndPosition($imageName); //najdi pozicijo konca URL slike
+ $imageName = substr($imageName, 0, $pos); //pokazi le del params od zacetka besedila do '"' oz. konca URL slike
+ //echo "imageName v getOnlineImageName nekje vmes 2: ".$imageName."</br>";
+ $imageExtension = substr($imageName, $pos-3, 3); //pridobi koncnico slike
+ //echo "imageExtension: ".$imageExtension."</br>";
+
+ if($imageExtension!='jpg'&&$imageExtension!='png'&&$imageExtension!='gif'&&$imageExtension!='jpeg'){ //ce ni veljavnen extension, spremeni ga v png
+ $imageExtension='png';
+ }
+
+ if($vre_id){ //ce se pridobiva imena tmp slik iz vrednosti vprasanja
+ $imgFilename = self::$spremenljivka.'_'.$vre_id.'_tmpImage.'.$imageExtension; //tmp ime slike, ki je sestavljeno iz id spremenljivke+tmpImage+extension
+ }else{
+ $imgFilename = self::$spremenljivka.'_tmpImage.'.$imageExtension; //tmp ime slike, ki je sestavljeno iz id spremenljivke+tmpImage+extension
+ }
+
+ $pathDir = $site_path.'uploadi/editor/'; //pot za novo mapo, kjer se bodo shranjevale slike za trenutno anketo
+ $path = $pathDir.$imgFilename; //pot do datoteke z imenom datoteke
+
+ # ukaz za pretakanje slike
+ if(IS_WINDOWS){
+ //za windows sisteme //powershell -command "& { iwr URL -OutFile 'PATH' }"
+ $command = 'powershell -command "& { iwr \''.$imageName.'\' -OutFile \''.$path.'\' }"';
+ //$command = 'wget -O \''.$imageName.'\' -O '.$path.' ';
+ }elseif(IS_LINUX){
+ //za linux sisteme //exec('wget URL -P PATH ');
+ //$command = 'wget \''.$imageName.'\' -P '.$path.' ';
+ $command = 'wget -O '.$path.' \''.$imageName.'\' ';
+ }
+
+ //echo "command: ".$command."</br>";
+ exec($command); //pretoci sliko
+
+ //$path = $pathDir.$imgFilename; //pot do datoteke z imenom datoteke
+
+/* if($imageExtension == 'gif'){ //ce je slika gif, jo je potrebno pretvoriti v png, saj latex ne podpira gif
+ $this->convertGifToPng($path, $slikaNaStrezniku);
+ } */
+
+ if($imageExtension != 'png'){ //ce slika ni png, jo pretvori
+ if($imageExtension == 'gif'){ //ce je slika gif, jo je potrebno pretvoriti v png, saj latex ne podpira gif
+ $this->convertGifToPng($path, $slikaNaStrezniku);
+ }else{
+ $this->convertJpgToPng($path, $slikaNaStrezniku, $imageExtension);
+ }
+ }
+
+ //echo "imgfilename: ".$imgFilename."</br>";
+ return $imgFilename;
+ }
+ #funkcija, ki skrbi za pridobitev slike, ki se nahaja nekje online in jo je potrebno izrisati, in vrne lokalno ime slike - konec ###############################
+
+
+ function convertGifToPng($path='', $slikaNaStrezniku=null){
+ //echo "path: ".$path."</br>";
+ $image = imagecreatefromgif($path); //pripravi sliko iz gif za pretvorbo
+ $imageName = substr($path, 0, -3); //ime slike brez extension-a
+ //echo $imageName."</br>";
+ $imageNamePNG = $imageName.'png'; //ime slike z ustreznim extension
+ imagepng($image, $imageNamePNG); //pretvori pripravljeno gif sliko v png
+
+ if($slikaNaStrezniku==0){ //ce slika je iz URL in ni na strezniku, GIF izbrisi
+ unlink($imageName.'gif'); //izbrisi gif sliko
+ }
+ }
+
+ function convertJpgToPng($path='', $slikaNaStrezniku=null, $imageExtension=''){
+ $image = imagecreatefromjpeg($path); //pripravi sliko iz jpg za pretvorbo
+ $imageName = substr($path, 0, strrpos($path, '.')); //ime slike brez extension-a
+
+ $imageNamePNG = $imageName.'.png'; //ime slike z ustreznim extension
+ imagepng($image, $imageNamePNG); //pretvori pripravljeno jpg sliko v png
+
+ //$origExtension = strrchr($path, '.');
+
+ if($slikaNaStrezniku==0){ //ce slika je iz URL in ni na strezniku, izbrisi jo
+ if($imageExtension == 'jpg'){
+ unlink($imageName.'.'.$imageExtension); //izbrisi sliko
+ }elseif($imageExtension == 'peg'){
+ unlink($imageName.'.j'.$imageExtension); //izbrisi sliko
+ }
+ }
+ }
+
+ function getEndPosition($imageName=''){
+ $findme = '"';
+ $pos = strpos($imageName, $findme); //najdi pozicijo teksta '"'
+ return $pos;
+ }
+
+
+ #funkcija, ki skrbi za pridobitev simbola za slikovni tip ######################################
+ function getCustomRadioSymbol($sprId=null, $odgovor=null){
+ $customRadioSymbol = '';
+ $findme = 'customRadio=';
+ $finishAt = 'customRadioNumber';
+
+ $row = Cache::srv_spremenljivka($sprId);
+ $this->spremenljivkaParams = new enkaParameters($row['params']);
+ $customRadioSymbol = $this->spremenljivkaParams->get('customRadio');
+
+ if($odgovor){ //ce je odgovor
+ $customRadioSymbol = $customRadioSymbol."Inverted"; //preuredi, da bo razvidna grafika, ko je prisoten odgovor respondenta
+ }
+ //echo $customRadioSymbol.' asca</br>';
+ return $customRadioSymbol;
+ }
+ #funkcija, ki skrbi za pridobitev simbola za slikovni tip - konec ###############################
+
+
+ /**
+ * vrne prevod za srv_vrednost
+ *
+ * @param mixed $vrednost
+ */
+ function srv_language_vrednost ($vre_id=null) {
+ //if ($this->language != -1) {
+ if ($this->prevod) {
+ $sqllString = "SELECT naslov, naslov2 FROM srv_language_vrednost WHERE vre_id='".$vre_id."' AND lang_id='".$this->language."'";
+ $sqll = sisplet_query($sqllString);
+ $rowl = mysqli_fetch_array($sqll);
+ return $rowl;
+ }
+ return false;
+ }
+
+ /**
+ * vrne prevod za srv_grid
+ *
+ * @param mixed $vrednost
+ */
+ function srv_language_grid ($grd_id=null, $spr_id=null) {
+
+ //if ($this->language != -1) {
+ if ($this->prevod) {
+ $sqllString = "SELECT naslov FROM srv_language_grid WHERE spr_id = '".$spr_id."' AND grd_id='".$grd_id."' AND lang_id='".$this->language."'";
+ $sqll = sisplet_query($sqllString);
+ $rowl = mysqli_fetch_array($sqll);
+ return $rowl;
+ }
+
+ return false;
+ }
+/* function srv_language_grid ($spremenljivka, $grid) {
+
+ if ($this->language != -1) {
+ $sqll = sisplet_query("SELECT * FROM srv_language_grid WHERE ank_id='".$this->anketa['id']."' AND spr_id='".$spremenljivka."' AND grd_id='".$grid."' AND lang_id='".$this->language."'");
+ $rowl = mysqli_fetch_array($sqll);
+
+ if ($rowl['naslov'] != '') return $rowl['naslov'];
+ }
+
+ return false;
+ } */
+
+ #funkcija, ki skrbi za filanje obstojecega polja z odgovori z missing odgovori #############################################################
+ function AddMissingsToAnswers($vodoravniOdgovori=[], $missingOdgovori=[]){
+ for($m=0;$m<count($missingOdgovori);$m++){
+ array_push($vodoravniOdgovori,$missingOdgovori[$m]);
+ }
+ return $vodoravniOdgovori;
+ }
+ #funkcija, ki skrbi za filanje obstojecega polja z odgovori z missing odgovori - konec #####################################################
+
+ #funkcija, ki skrbi za izpis latex kode za zacetek tabele ##################################################################################
+ #argumenti 1. export_format, 2. parametri tabele, 3. tip tabele za pdf, 4. tip tabele za rtf, 5. sirina pdf tabele (delez sirine strani), 6. sirina rtf tabele (delez sirine strani)
+ function StartLatexTable($export_format='', $parameterTabular='', $pdfTable=null, $rtfTable=null, $pdfTableWidth=null, $rtfTableWidth=null){
+ $tex = '';
+ $tex .= '\keepXColumns';
+ if($export_format == 'pdf'){
+ $tex .= '\begin{'.$pdfTable.'}';
+ if($pdfTable=='tabularx'){
+ $tex .= '{'.$pdfTableWidth.'\textwidth}';
+ }
+ $tex .= '{ '.$parameterTabular.' }';
+ }elseif($export_format == 'rtf'){
+ $tex .= '\begin{'.$rtfTable.'}';
+ if($rtfTable=='tabular*'){
+ $tex .= '{'.$pdfTableWidth.'\textwidth}';
+ }
+ //$tex .= '{ '.$parameterTabular.' }';
+ $tex .= '{@{} '.$parameterTabular.' }'; //dodal @{} , da ni indent-a
+ }
+
+ return $tex;
+ }
+ #funkcija, ki skrbi za izpis latex kode za zacetek tabele - konec ##########################################################################
+
+ #funkcija, ki skrbi za izpis latex kode za zakljucek tabele ##################################################################################
+ #argumenti 1. export_format, 2. tip tabele za pdf, 3. tip tabele za rtf
+ function EndLatexTable($export_format='', $pdfTable=null, $rtfTable=null){
+ $tex = '';
+ $tex .= ($export_format == 'pdf' ? '\end{'.$pdfTable.'}' : '\end{'.$rtfTable.'}');
+ return $tex;
+ }
+ #funkcija, ki skrbi za izpis latex kode za zakljucek tabele - konec ##########################################################################
+
+ #funkcija, ki skrbi za pripravo latex kode za text box (okvirja) (prazen ali z besedilom) dolocene sirine in visine glede na export format ####################
+ #argumenti 1. export_format, 2. visina okvirja, 3. sirina okvirja, 4. besedilo v okvirju, 5. poravnava, 6. obrobe
+ function LatexTextBox($export_format='', $textboxHeight=null, $textboxWidth=null, $text='', $textboxAllignment=null, $noBorders=null){
+ $tex = '';
+
+ //zacetek okvirja
+ if($export_format == 'pdf'&&$textboxHeight!=0&&$noBorders==0){
+ $tex .= ' \fbox{\parbox['.$textboxAllignment.']['.$textboxHeight.']{'.$textboxWidth.'\textwidth}';
+ }elseif((($export_format == 'pdf'&&$textboxHeight==0))&&$noBorders==0){
+ $tex .= ' \fbox{\parbox{'.$textboxWidth.'\textwidth}';
+ }elseif( ($export_format == 'rtf'||$export_format == 'pdf')&&$noBorders ){
+ $tex .= ' {\parbox{'.$textboxWidth.'\textwidth}';
+ }
+
+
+ if($text==''){ //ce ni teksta, je okvir prazen
+ if($export_format == 'pdf'){
+ $tex .= '{ \hphantom{\hspace{'.$textboxWidth.'\textwidth}} }}';
+ }elseif($export_format == 'rtf'){
+ //$tex .= ' \rule{40mm}{.1pt} '; //izpisi neprekinjeno crto, ki je dolga 40mmm in debela 0.1pt
+ $tex .= ' \rule{'.$textboxWidth.'\textwidth}{.1pt} '; //izpisi neprekinjeno crto, ki je dolga 40mmm in debela 0.1pt
+ }
+ }else{ //drugace, izpisi besedilo
+ if($export_format == 'pdf'){
+ $tex .= '{ '.$text.' }}'; //izpis besedila v okvirju
+ }elseif($export_format == 'rtf'){
+ $tex .= '{ '.$text.' }'; //izpis besedila v okvirju
+ }
+ }
+
+ return $tex;
+ }
+ #funkcija, ki skrbi za pripravo latex kode za text box (okvirja) (prazen ali z besedilom) dolocene sirine in visine glede na export format - konec ############
+
+ #funkcija, ki skrbi za pripravo latex U oblike dolocene sirine in visine glede na export format ####################
+ #argumenti 1. export_format, 2. visina okvirja, 3. sirina okvirja
+ function LatexUShape($export_format='', $textboxHeight=null, $textboxWidth=null){
+ $tex = '';
+ if($export_format == 'pdf'&&$textboxHeight!=0){
+ $tex .= '\keepXColumns\begin{tabularx}{0.25\textwidth}{C} '; //zacetek tabele, ki bo zgledala kot okvir
+ $tex .= ' \begin{tikzpicture} ';
+ //$tex .= ' \draw (0,0) -- (4,0) -- (4,4) (0,4) -- (0,0);';
+ $tex .= ' \draw (0,0) -- ('.$textboxWidth.',0) -- ('.$textboxWidth.','.$textboxHeight.') (0,'.$textboxHeight.') -- (0,0);';
+ $tex .= ' \end{tikzpicture} ';
+
+ }elseif($export_format == 'rtf'||($export_format == 'pdf'&&$textboxHeight==0)){
+ $tex .= ' \fbox{\parbox{'.$textboxWidth.'\textwidth}';
+ }
+ return $tex;
+ }
+ #funkcija, ki skrbi za pripravo latex U oblike dolocene sirine in visine glede na export format - konec ############
+
+ #funkcija, ki skrbi za pripravo latex U oblike s tekstom dolocene sirine in visine glede na export format ####################
+ #argumenti 1. export_format, 2. visina okvirja, 3. sirina okvirja, 4. tekst oz. koda za odgovore v okvirjih
+ function LatexTextInUShape($export_format='', $textboxHeight=null, $textboxWidth=null, $text=''){
+ //\begin{tikzpicture} \draw (-2,0) -- (2,0) -- (2,1.5 cm) (-2,1.5 cm) -- (-2,0) node[above right] {\begin{tabular}{c} \fbox{\parbox{0.2\textwidth}{ \centering Vpišite besedilo odgovora 11 }} \\ \fbox{\parbox{0.2\textwidth}{ \centering Vpišite besedilo odgovora 12 }} \end{tabular} }; \end{tikzpicture}
+ $tex = '';
+ if($export_format == 'pdf'&&$textboxHeight!=0){
+
+ $tex .= '\keepXColumns\begin{tabularx}{0.25\textwidth}{C} '; //zacetek tabele, ki bo zgledala kot okvir
+ $tex .= ' \begin{tikzpicture} ';
+
+ //\draw (-2,0) -- (2,0) -- (2,1.5 cm) (-2,1.5 cm) -- (-2,0)
+ $tex .= ' \draw (-'.$textboxWidth.',0) -- ('.$textboxWidth.',0) -- ('.$textboxWidth.','.$textboxHeight.' cm) (-'.$textboxWidth.','.$textboxHeight.' cm) -- (-'.$textboxWidth.',0) node[above right] { ';
+
+ $tex .= '\begin{tabular}{c} '; //zacetek tabele znotraj skatle, da je lahko vec odgovorov (eden pod drugim) znotraj skatle
+
+ $tex .= $text;
+
+ $tex .= ' \end{tabular} '; //konec tabele znotraj skatle
+
+
+ $tex .= ' }; \end{tikzpicture} ';
+
+ }elseif($export_format == 'rtf'||($export_format == 'pdf'&&$textboxHeight==0)){
+ $tex .= ' \fbox{\parbox{'.$textboxWidth.'\textwidth}';
+ }
+ return $tex;
+ }
+ #funkcija, ki skrbi za pripravo latex U oblike s tekstom dolocene sirine in visine glede na export format - konec ############
+
+ #funkcija, ki skrbi za pripravo latex okvirja za grid drag and drop ####################
+ #argumenti 1. export_format, 2. visina okvirja, 3. sirina okvirja, 4. tekst naslova okvirja, 5. ali je odgovor prisoten, 6. tekst za odgovore v okvirjih
+ function LatexTextGridOfBoxes($export_format='', $textboxHeight=null, $textboxWidth=null, $textNaslovOkvir='', $jeOdgovor=null, $textIzpis=''){
+ $tex = '';
+ if($export_format == 'pdf'&&$textboxHeight!=0){
+ if($jeOdgovor==0){
+ $tex .= '\keepXColumns\begin{tabularx}{0.25\textwidth}{|C|} '; //zacetek tabele, ki bo zgledala kot okvir
+ $tex .= '\hline'; //izris horizontalne obrobe za zacetek tabele
+ $tex .= '{\parbox{0.25\textwidth}{\vspace{0.5\baselineskip} \centering ';
+ $tex .= $textNaslovOkvir;
+ $tex .= '\vspace{0.5\baselineskip}}}';
+ $tex .= $this->texNewLine;
+ $tex .= '\hline'; //izris horizontalne obrobe za zakljuciti tabelo
+ $tex .= '{\parbox{0.25\textwidth}{\vspace{0.5\baselineskip} \centering ';
+ $tex .= '';
+ $tex .= '\vspace{0.5\baselineskip}}}';
+ $tex .= $this->texNewLine;
+ $tex .= '\hline'; //izris horizontalne obrobe za zakljuciti tabelo
+ $tex .= '\end{tabularx}'; //konec tabele znotraj skatle
+ }else{
+ $tex .= '\keepXColumns\begin{tabularx}{0.25\textwidth}{|C|} '; //zacetek tabele, ki bo zgledala kot okvir
+ $tex .= '\hline'; //izris horizontalne obrobe za zacetek tabele
+ $tex .= $textNaslovOkvir;
+ $tex .= '\hline'; //izris horizontalne obrobe za zakljuciti tabelo
+ $tex .= $textIzpis;
+ $tex .= '\hline'; //izris horizontalne obrobe za zakljuciti tabelo
+ $tex .= '\end{tabularx}'; //konec tabele znotraj skatle
+ }
+ }elseif($export_format == 'rtf'||($export_format == 'pdf'&&$textboxHeight==0)){
+ $tex .= ' \fbox{\parbox{'.$textboxWidth.'\textwidth}';
+ }
+ return $tex;
+ }
+ #funkcija, ki skrbi za pripravo latex okvirja za grid drag and drop - konec ############
+
+
+
+ #funkcija, ki skrbi za pravilen izris prve vrstice v tabelah (vrstica z vodoravnimi naslovi multigridov) #############################
+ function LatexPrvaVrsticaMultiGrid($steviloStolpcev=null, $enota=null, $trak=null, $customColumnLabelOption=null, $spremenljivke=null, $vodoravniOdgovori=null, $missingOdgovori=null){
+ $tex = '';
+ for($i = 0; $i < $steviloStolpcev; $i++){
+ if ($i != 0){ //ce ni prvi stolpec
+ //if($enota==11 || $enota==12 || ($enota==0 && ($trak==0&&$customColumnLabelOption==1)) ||($enota==0 && $spremenljivke['tip']==16) ||($enota==1 && ($trak==0&&$customColumnLabelOption==1)) || $enota==8 || $enota==3){ //klasicna ali diferencial tabela (brez traku) ali tabela da/ne ali dvojna tabela ali VAS ali slikovni tip
+ if(($enota==0 && ($trak==0&&$customColumnLabelOption==1)) ||($enota==0 && $spremenljivke['tip']==16) ||($enota==1 && ($trak==0&&$customColumnLabelOption==1)) || $enota==8 || $enota==3 || $enota==11 || $enota==12 || ($enota==2 && $spremenljivke['tip']==24)){ // ce je klasicna ali diferencial tabela (brez traku) ali tabela da/ne ali dvojna tabela ali VAS ali slikovni tip ali roleta/seznam v kombinirani tabeli
+ if($i==$steviloStolpcev-1 && $enota==1){ //ce je zadnji stolpec in je diferencial
+ for($m=0;$m<count($missingOdgovori);$m++){
+ $tex .= " & ".$missingOdgovori[$m];
+ }
+ $tex .= " & ";
+ }else{
+ $tex .= " & ".$vodoravniOdgovori[$i-1];
+ }
+ }elseif($enota == 5){ //maxdiff
+ if($i == 1){
+ $tex .= ' & ';
+ }
+ $tex .= $vodoravniOdgovori[$i];
+ }
+ }elseif($i == 0 && $enota != 5){ //ce je prvi stolpec tabele in ni "maxdiff"
+ $tex .= '';
+ }elseif($i == 0 && $enota == 5){ //ce je prvi stolpec tabele in "maxdiff"
+ $tex .= $vodoravniOdgovori[$i].' & ';
+ //}elseif( ($i == $steviloStolpcev-1 && $enota != 5) || $enota == 1){ //ce je zadnji stolpec tabele in ni "maxdiff" ali je diferencial
+ }elseif( ($i == $steviloStolpcev-1 && $enota != 5) ){ //ce je zadnji stolpec tabele in ni "maxdiff" ali je diferencial
+ $tex .= ' & ';
+ }
+
+
+ //echo "odgovori ".$i.": ".$vodoravniOdgovori[$i-1]." </br>";
+ //echo "koda za indeks ".$i.": ".$tex." </br>";
+ }
+
+ #Nastavitev UPORABA LABEL
+ if( $customColumnLabelOption!=1 && $trak==0 && ($enota==0||$enota==1) && $spremenljivke['tip'] == 6 ){ //ce ni potrebno izrisati vseh label vodoravnih odgovorov in je "klasicna tabela" ali "diferencial" (uredi vodoravne labele nad radio buttoni)
+ $numGrids = $spremenljivke['grids'];
+ if($customColumnLabelOption == 2){ //ce je trenutna moznost prilagajanja "le koncne"
+ if(($numGrids%2) == 0){ //ce je parno stevilo, spoji polovico label na vsako skupino label
+ $colParameter1 = $colParameter2 = intval(($numGrids)/2);
+ }else if(($numGrids%2) != 0){ //ce ni parno stevilo, spoji prvi skupini label eno celico vec kot pri drugi skupini label
+ $colParameter1 = intval(($numGrids)/2 + 0.5);
+ $colParameter2 = intval(($numGrids)/2 - 0.5);
+ }
+ for($i=0; $i<$numGrids; $i++){
+ if($i==0){ //ce je prvi stolpec nadnaslovov
+ $tex .= ' & \multicolumn{'.$colParameter1.'}{l}{'.$vodoravniOdgovori[$i].'}';
+ }elseif( $i==($numGrids-1) ){ //ce je zadnji stolpec nadnaslovov
+ $tex .= ' & \multicolumn{'.$colParameter2.'}{r}{'.$vodoravniOdgovori[$i].'}';
+ }
+ }
+ }else if($customColumnLabelOption == 3){ //ce je trenutna moznost prilagajanja "koncne in vmesna"
+ if(($numGrids%3) == 0){ //ce je velikost deljiva s 3, spoji vsako tretjino label
+ $colParameter1 = $colParameter2 = $colParameter3 = $numGrids/3;
+ $sredina = $numGrids/3;
+ }else if(($numGrids%3) == 1){ //ce pri deljenju z 3 je ostanek 1
+ $colParameter1 = $colParameter2 = intval($numGrids/3);
+ $colParameter3 = intval($numGrids/3)+1;
+ $sredina = intval(1 + $numGrids/3);
+ }elseif(($numGrids%3) == 2){ //ce pri deljenju z 3 je ostanek 2
+ $colParameter1 = $colParameter2 = 1 + intval($numGrids/3);
+ $colParameter3 = intval($numGrids/3);
+ $sredina = $numGrids%3 + intval($numGrids/3);
+ }
+
+ for($i=0; $i<$numGrids; $i++){
+ if($i==0){ //ce je prvi stolpec nadnaslovov (prva labela)
+ $tex .= ' & \multicolumn{'.$colParameter1.'}{l}{'.$vodoravniOdgovori[$i].'}';
+ }elseif($i==$sredina){ //ce je sredina (vmesna labela)
+ $tex .= ' & \multicolumn{'.$colParameter3.'}{c}{'.$vodoravniOdgovori[$i].'}';
+ }elseif( $i==(($numGrids)-1) ){ //ce je zadnji stolpec nadnaslovov (zadnja labela)
+ $tex .= ' & \multicolumn{'.$colParameter2.'}{r}{'.$vodoravniOdgovori[$i].'}';
+ }
+
+ }
+ }
+ }
+ #Nastavitev UPORABA LABEL - KONEC
+ //echo "</br>";
+ //$tex .= '\endhead'; //da se naslovna vrstica ponovi na vsaki strani, ce tabela gre na novo stran
+ //echo "koda: ".$tex."</br>";
+ return $tex;
+ }
+ #funkcija, ki skrbi za pravilen izris prve vrstice v tabelah (vrstica z vodoravnimi naslovi multigridov) - konec #####################
+
+ #funkcija, ki skrbi za izris vrstic tabele (z multigrid) ###########################################################
+ function LatexVrsticeMultigrid($numRowsSql=null, $export_format='', $enota=null, $simbolTex=null, $navpicniOdgovori=null, $trakStartingNumberTmp=null, $fillablePdf=null, $numColSql=null, $spremenljivke=null, $trak=null, $vodoravniOdgovori=null, $texNewLine='', $navpicniOdgovori2=null, $missingOdgovori=null, $vodoravniOdgovoriTip=null, $vodoravniOdgovoriEnota=null, $vodoravniOdgovoriSprId=null, $data=null, $export_subtype=null, $preveriSpremenljivko=null, $userDataPresent=null, $presirokaKombo = null, $export_data_type=null){
+ $this->export_subtype = $export_subtype;
+ $tex = '';
+ global $lang, $site_path;
+ $this->path2Images = $site_path.'admin/survey/export/latexclasses/textemp/images/';
+ //$radioButtonTex = ($export_format=='pdf'?"{\Large $\ocircle$}" : "\\includegraphics[scale=".RADIO_BTN_SIZE."]{radio}");
+ $indeksOdgovorovRespondentMultiNumText = 0;
+
+ if($spremenljivke['enota']==2||$spremenljivke['enota']==6){ //ce je seznam ali roleta //$enota == 2 || $enota == 6
+ if(count($missingOdgovori)==0){ //ce ni missing vrednosti
+ $numColSql = $numColSql + 1;
+ }
+ }
+ $userAnswerIndex = array();
+ $userAnswerIndex[$spremenljivke['id']] = 0;
+ $z = 0;
+ $skipRow = false;
+
+ $this->skipEmpty = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_skip_empty'); // izpusti vprasanja brez odgovora
+ $this->skipEmptySub = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_skip_empty_sub'); // izpusti podvprasanja brez odgovora
+
+ if($spremenljivke['tip']==24){ //ce je kombinirana tabela
+ //echo "stevilo stolpcev za izpis kombinirane podan: ".$numColSql."</br>";
+ //print_r($data);
+ //if($presirokaKombo == 1 && count($data) != 0 && ($enota == 2 || $enota == 6)){
+ if($presirokaKombo == 1 && count($data) != 0 && (($enota == 2 || $enota == 6) || $export_data_type == 2 && $vodoravniOdgovoriTip[0] == 6)){
+ $numColSql = 1 + 1;
+ //echo "stevilo stolpcev za izpis kombinirane izračunan: ".$numColSql."</br>";
+ }else{
+ $numColSql = count($vodoravniOdgovoriEnota) + 1;
+ }
+ }
+
+ //echo "stevilo vrstic: $numRowsSql za enoto: ".$spremenljivke['enota']."</br>";
+
+ //IZRIS PO VRSTICAH
+ for ($i = 1; $i <= $numRowsSql; $i++){ //za vsako vrstico
+
+ if($i == 1 && ($enota == 2 || $enota == 6)&&$spremenljivke['tip']!=24){ //ce je prvi dogovor IN je roleta ALI seznam IN ni kombinirana tabela
+ if($export_format == 'rtf'){ //ce je rtf
+ $tex .= ' \hline '; //dodaj crto
+ }
+ }
+
+ //echo "preskakovanje vprašanj: ".$this->skipEmptySub."</br>";
+
+ // Ce imamo nastavljeno preskakovanje podvprasanj preverimo ce je kaksen odgovor v vrstici
+ if($this->skipEmptySub == 1){
+ $skipRow = true;
+ for($z=$z;$z<$i*($numColSql-1);$z++){
+ //echo "Podatek: ".$data[$z]."</br>";
+ if($data[$z]){
+ //echo "Podatek je"."</br>";
+ $skipRow = false;
+ $podatekZaSlikovniTip = $data[$z]; //belezi podatek za slikovni tip, ki pride prav za pravilen izpis izvoza
+ }
+ }
+ }
+
+ /* echo "skipRow je $skipRow"."</br>";
+ echo "userDataPresent je $userDataPresent"."</br>";
+ echo "skipEmpty je ".$this->skipEmpty."</br>"; */
+ //echo "____________________________________________</br>";
+ // Ce imamo nastavljeno preskakovanje podvprasanj preverimo ce je kaksen odgovor v vrstici - konec
+ //echo "za vrstico $i je $skipRow na stolpcih: $numColSql</br>";
+ //if(!$skipRow||(!$userDataPresent&&$this->skipEmpty==0)){ /* ce je potrebno preskociti vrstico ALI (ni podatkov za prikaz, vendar je potrebno pokazati vprasanja brez odgovorov) */
+ if(!$skipRow||(!$userDataPresent&&$this->skipEmpty==0)||$export_subtype == 'q_empty'){ /* ce je potrebno preskociti vrstico ALI (ni podatkov za prikaz, vendar je potrebno pokazati vprasanja brez odgovorov) */
+ if($i%2 != 0 && $export_format == 'pdf'){
+ if($enota == 5){ //ce je maxdiff
+ //$tex .= "\\rowcolor[gray]{.9}".$simbolTex.' & '; //pobarvaj ozadje vrstice
+ $tex .= "\\rowcolor[gray]{.9}".$this->getAnswerSymbol($export_format, $fillablePdf, $spremenljivke['tip'], $numColSql, 0, $data[$userAnswerIndex[$spremenljivke['id']]]).' & '; //pobarvaj ozadje vrstice
+ $userAnswerIndex[$spremenljivke['id']]++;
+ }else{
+ $tex .= "\\rowcolor[gray]{.9}".$navpicniOdgovori[$i-1]; //pobarvaj ozadje vrstice
+ }
+ }else{
+ if($enota == 5){ //ce je maxdiff
+ //$tex .= $simbolTex.' & ';
+ $tex .= $this->getAnswerSymbol($export_format, $fillablePdf, $spremenljivke['tip'], $numColSql, 0, $data[$userAnswerIndex[$spremenljivke['id']]]).' & ';
+ $userAnswerIndex[$spremenljivke['id']]++;
+ }else{
+ $tex .= $navpicniOdgovori[$i-1];
+ }
+ }
+
+ //tmp spremenljivka, ki je potrebna za pravilen izris stevilk, ce imamo trak
+ //$trakStartingNumberTmp = intval($trakStartingNumber);
+ $trakStartingNumberTmp = intval($trakStartingNumberTmp); //spremenil, zaradi intelephense napake
+
+ //ureditev spremenljivk za pravilen kasnejsi izris seznama ali rolete
+ $roletaAliSeznam = 0; //belezi, ali je tak tip podtabele ali tabele prisoten
+ $indeksRoleta = 1;
+ $noItem = 1;
+ if($spremenljivke['tip']==24){ //ce je kombinirana tabela, uredi enote znotraj te tabele
+ foreach($vodoravniOdgovoriEnota as $enota){
+ if($enota == 2 || $enota == 6){ //roleta ali izberite s seznama, uredi ogrodje za itemize, da se bo dalo zadevo pravilno izrisati
+ $roletaAliSeznam = 1;
+ $indeksRoleta = 1;
+ $noItem = 1;
+ }
+ }
+
+
+ //$numColSql = count($vodoravniOdgovoriEnota) + 1;
+
+
+ //echo "stevilo stolpcev za izpis kombinirane izračunan: ".$numColSql."</br>";
+ //echo "stevilo stolpcev za izpis kombinirane izračunan: ".count($vodoravniOdgovoriEnota)."</br>";
+ //print_r($vodoravniOdgovoriEnota);
+ //$numColSql = 4;
+ /* echo "Enote: ";
+ print_r($vodoravniOdgovoriEnota);
+ echo "</br>";
+ echo "Vodoravni odgvoroi spr id: ";
+ print_r($vodoravniOdgovoriSprId);
+ echo "</br>";
+ echo "Podatki: ";
+ print_r($data);
+ echo "</br>";
+ echo "Tip: ";
+ print_r($vodoravniOdgovoriTip);
+ echo "</br>"; */
+ }
+ //ureditev spremenljivk za pravilen kasnejsi izris seznama ali rolete - konec
+ //echo "___________________________________________________</br>";
+
+
+ $izpisRoletePresiroka = 0;
+
+ if($fillablePdf == 0){ //naveden pdf (brez vnosnih polj) in rtf
+ //echo "INDEKS vrstic: ".$i."</br>";
+ //IZRIS PO STOLPCIH
+ //echo "___________________________________________________</br>";
+ //echo "stevilo stolpcev izpis: ".$numColSql."</br>";
+ for($j = 1; $j < $numColSql; $j++){ //izris posameznega stolpca v vrstici
+
+ //for($j = 1; $j <= $numColSql; $j++){ //izris posameznega stolpca v vrstici #################### PAZI!!! DODAL ROČNO ZA TESTIRANJE
+ if($spremenljivke['tip']==24){ //ce je kombinirana tabela, uredi enote znotraj te tabele
+
+ if($presirokaKombo == 1 && count($data) != 0 && ($enota == 2 || $enota == 6)){
+ $enota = $vodoravniOdgovoriEnota[0];
+ }else{
+ $enota = $vodoravniOdgovoriEnota[$j-1];
+ }
+
+ //$enota = $vodoravniOdgovoriEnota[$j-1];
+ $sprID = $vodoravniOdgovoriSprId[$j-1];
+
+
+ //echo "Odgovori: ".$vodoravniOdgovori[$j-1]."</br>";
+ //echo "INDEKS: ".$j."</br>";
+ //echo "id spremenljivke: ".$sprID."</br>";
+ //echo "enota tukaj: ".$enota."</br>";
+ //if($j == 1){
+ /* echo "___________________________________________________</br>";
+ echo "Enote: ";
+ print_r($vodoravniOdgovoriEnota);
+ echo "</br>";
+ echo "Vodoravni odgovori spr id: ";
+ print_r($vodoravniOdgovoriSprId);
+ echo "</br>";
+ echo "Odgovori: ";
+ print_r($vodoravniOdgovori);
+ echo "</br>";
+ echo "Tip: ";
+ print_r($vodoravniOdgovoriTip);
+ echo "</br>"; */
+
+ /* echo "indeks for zanke: ".($j-1)."</br>";
+ echo "enota for zanke: ".($enota)."</br>";
+ echo "spr for zanke: ".($sprID )."</br>";
+ echo "___________________________________________________</br>"; */
+ //}
+ }
+
+ if($enota==0||$enota==1||$enota==3||$enota==11||$enota==12||$spremenljivke['tip']==19||$spremenljivke['tip']==20){ //klasika ali diferencial ali VAS ali slikovni tip ali multitext ali multinumber
+ if(($trak == 1 && $enota != 3 && $spremenljivke['tip'] == 6)||($spremenljivke['tip']==19||$spremenljivke['tip']==20)){ //ce je trak ali multitext
+ if($j<=$spremenljivke['grids']){ //ce so stolpci, ki vsebujejo trak s stevilkami ali textbox-e
+ if($spremenljivke['tip']==19||$spremenljivke['tip']==20){ //ce je multitext ali multinumber
+ if($export_subtype=='q_data'||$export_subtype=='q_data_all'){ //ce je odgovor respondenta ali vec respondentov
+ $tex .= "& ".$simbolTex[$indeksOdgovorovRespondentMultiNumText];
+ }elseif($export_subtype=='q_empty'||$export_subtype=='q_comment'){
+ $tex .= "& ".$simbolTex;
+ }
+ }else{
+ $tex .= '& '.($trakStartingNumberTmp); //prikazovanje brez obrob celic
+
+ //$tabela .= '& \multicolumn{1}{|c|}{'.($trakStartingNumberTmp).'} '; //1. moznost z navpicnimi obrobami
+
+ //2. moznost z navpicnimi obrobami
+ /*if($j==1){ //ce je prvi stolpec, ko je trak
+ $tabela .= '& \multicolumn{1}{|c}{'.($trakStartingNumberTmp).'} ';
+ }else{
+ $tabela .= '& \multicolumn{1}{c|}{'.($trakStartingNumberTmp).'} ';
+ } */
+ $trakStartingNumberTmp++;
+ }
+ }else{ //drugace so missing-i, kjer je potrebno izrisati ustrezen simbol (radio button)
+ if($enota==0&&($spremenljivke['tip']==6||$spremenljivke['tip']==16)){ //ce je klasicna tabela ali multitext ali multinumber
+ $tex .= "& ".$simbolTex;
+ }elseif($spremenljivke['tip']==19||$spremenljivke['tip']==20){//ce je multitext ali multinumber, izrisi missing simbol kot radio
+ if($export_subtype=='q_data'||$export_subtype=='q_data_all'){ //ce je odgovor respondenta ali vec respondentov
+ $tex .= "& ".$simbolTex[$indeksOdgovorovRespondentMultiNumText];
+ }else{
+ $radioButtonTex = ($export_format=='pdf'?"{\Large $\ocircle$}" : "\\includegraphics[scale=".RADIO_BTN_SIZE."]{".$this->path2Images."radio}");
+ $tex .= "& ".$radioButtonTex;
+ }
+ //$tex .= "& ".$radioButtonTex;
+
+ //echo "radio button, ko je missing: ".$radioButtonTex."</br>";
+ }
+ }
+ }else{
+ if($spremenljivke['tip']==24){ //ce je kombinirana tabela, s klasicno podtabelo
+
+ //$tex .= "& ".$this->getAnswerSymbol($export_format, $fillablePdf, $vodoravniOdgovoriTip[$j-1], $numColSql, 0, $data[$userAnswerIndex[$spremenljivke['id']]]);
+ //$test = "& ".$this->getAnswerSymbol($export_format, $fillablePdf, $vodoravniOdgovoriTip[$j-1], $numColSql, 0, $data[$userAnswerIndex[$spremenljivke['id']]]);
+ //echo "vodoravni odgovori tip ".$vodoravniOdgovoriTip[$j-1]." $i</br>";
+ //echo "tip exp: ".$export_data_type."</br>";
+ //echo "testna koda $test z enoto $enota</br>";
+
+ if($export_data_type==0 || $export_data_type==1 || ($export_data_type==2 && $vodoravniOdgovoriTip[$j-1] != 6)){ //ce je razsirjen izvoz ALI je skrcen izvoz IN ni klasicna tabela
+ $tex .= "& ".$this->getAnswerSymbol($export_format, $fillablePdf, $vodoravniOdgovoriTip[$j-1], $numColSql, 0, $data[$userAnswerIndex[$spremenljivke['id']]]);
+ //$test = "& ".$this->getAnswerSymbol($export_format, $fillablePdf, $vodoravniOdgovoriTip[$j-1], $numColSql, 0, $data[$userAnswerIndex[$spremenljivke['id']]]);
+ //echo "testna koda $test z enoto $enota</br>";
+ //echo "tip exp: ".$export_data_type."</br>";
+ //echo $vodoravniOdgovoriTip[$j-1]."</br>";
+
+ }else{
+ $tex .= ' & \\textcolor{crta}{\footnotesize{'.$data[$userAnswerIndex[$spremenljivke['id']]].'}}';
+ //echo "vodoravni odgovori tip ".$vodoravniOdgovoriTip[$j-1]." $i</br>";
+ }
+ /* elseif($export_data_type==2 && $vodoravniOdgovoriTip[$j-1]){ //ce je skrcen izvoz IN
+
+ } */
+
+ }else{ //ce so ostali tipi vprasanj
+ if($enota == 12){ //ce je slikovni tip
+ $podatekSlikovniTip = $podatekZaSlikovniTip;
+ if($j <= $podatekSlikovniTip){
+ $podatekSlikovniTipTmp = $podatekSlikovniTip;
+ }else{
+ $podatekSlikovniTipTmp = 0;
+ }
+ $tex .= "& ".$this->getAnswerSymbol($export_format, $fillablePdf, $spremenljivke['tip'], $numColSql, 0,
+ $podatekSlikovniTipTmp, $enota, $j, '', $spremenljivke['id']);
+ }else{
+ $tex .= "& ".$this->getAnswerSymbol($export_format, $fillablePdf, $spremenljivke['tip'], $numColSql, 0, $data[$userAnswerIndex[$spremenljivke['id']]], $enota, $j, '', $spremenljivke['id']);
+ }
+ //echo "tukaj ".$spremenljivke['id']." </br>";
+ //echo "userAnswerData: ".$data[$userAnswerIndex[$spremenljivke['id']]]."</br>";
+ }
+ }
+ }elseif($enota==2||$enota==6){ //roleta ali izberite s seznama
+ if($export_format == 'pdf'){ //ce je pdf
+ $beginItemize = '& \begin{itemize}[leftmargin=*]'; //zacetek itemize, ce je pdf
+ }else{
+ $beginItemize = '& \begin{itemize}'; //zacetek itemize, ce je rtf
+ }
+ if($spremenljivke['tip']!=24){ //ce ni kombinirana tabela
+ if($j==1){ //ce je prvi mozen odgovor v roleti ali seznamu
+ $tex .= $beginItemize; //zacetek itemize
+ }
+ //$tex .= '\item[] '.$vodoravniOdgovori[$j-1]; //izris odgovora v roleti ali seznamu kot item
+ }/* elseif($spremenljivke['tip']==24){ //ce je kombinirana tabela
+ if($presirokaKombo == 0){ //ce ni presiroka kombinirana tabela, zacni z itemize
+ if($roletaAliSeznam){ //ce je zacetek seznama ali rolete
+ //$tex .= $beginItemize; //zacetek itemize
+ //$tex .= ' & ';
+ $roletaAliSeznam = 0;
+ }
+ }
+ } */
+
+ if($export_subtype=='q_empty'){ //ce je prazen vprasalnik
+ //echo count($vodoravniOdgovori);
+ if($spremenljivke['tip']==24){ //ce je kombinirana tabela z izberite s seznama (ali roleto)
+ //echo "id spremenljivk $sprID ".$vodoravniOdgovoriSprId[$j]." za indeks $j </br>";
+ //$tex .= ' & '.$vodoravniOdgovori[$j-1]; //izpis odgovora
+ //$tex .= ' & radio'; //izpis kot radio odgovora
+ $tex .= "& ".$this->getAnswerSymbol($export_format, $fillablePdf, $vodoravniOdgovoriTip[$j-1], $numColSql, 0, $data[$userAnswerIndex[$spremenljivke['id']]]);
+ }
+ else{ //ce je roleta ali seznam
+ if($i==1){ //samo za prvo vrstico izpisi vse mozne odgovore v roleti
+ $tex .= '\item[] '.$vodoravniOdgovori[$j-1]; //izris odgovora v roleti kot item
+ }elseif($j==1){
+ $tex .= '\item[] '; //prazno vrstico
+ }
+ }
+ }else{ //drugace, ce je vprasalnik z odgovori
+ if($spremenljivke['tip'] != 24){ //ce ni kombinirana tabela z izberite s seznama (ali roleto)
+ if($data[$userAnswerIndex[$spremenljivke['id']]]==($indeksRoleta)){ //ce je prisoten podatek za doloceni indeks seznama, ga izpisi
+ //$tex .= '& \\textcolor{crta}{'.$vodoravniOdgovori[$j-1].'}'; //izris odgovora respondenta v roleti ali seznamu
+ //$tex .= '& \\textcolor{crta}{\footnotesize{'.$vodoravniOdgovori[$j-1].'}}'; //izris odgovora respondenta v roleti ali seznamu
+ if($export_data_type==0||$export_data_type==2){ //ce skrcen izvoz
+ $tex .= '& \\textcolor{crta}{\footnotesize{'.$vodoravniOdgovori[$j-1].'}}'; //izris odgovora respondenta v roleti ali
+ }else{ //drugace, ce je razsirjen izvoz
+ $tex .= '\item[] \\textcolor{crta}{\footnotesize{'.$vodoravniOdgovori[$j-1].'}}'; //izris odgovora respondenta v roleti ali
+ }
+ $noItem = 0;
+
+ }else{
+ //echo "tip exp: ".$export_data_type."</br>";
+ if($export_data_type==0||$export_data_type==2){ //ce skrcen izvoz
+ $tex .= ' & '.$vodoravniOdgovori[$j-1];
+ }else{ //drugace, ce je razsirjen izvoz
+
+ }
+
+ }
+ }else{ //ce je kombinirana tabela z izberite s seznama (ali roleto)
+ $tex .= ' & \\textcolor{crta}{\footnotesize{'.$data[$userAnswerIndex[$spremenljivke['id']]].'}}';
+ /* echo "odgovor : ".$data[$userAnswerIndex[$spremenljivke['id']]]."</br>";
+ print_r($data); */
+
+ }
+
+ }
+
+ $indeksRoleta++;
+ /* echo "indeks za testirati tale del: ".$j."</br>";
+ echo "spremenljivka sprID: ".$sprID."</br>";
+ echo "spremenljivka odoravniOdgovoriSprId: ".$vodoravniOdgovoriSprId[$j]."</br>"; */
+
+
+
+ if($spremenljivke['tip']==24&&$sprID!=$vodoravniOdgovoriSprId[$j]){//ce je naslednji ID spremenljivke razlicen od trenutnega ID
+ if($presirokaKombo == 0){
+ //$tex .= '\end{itemize}'; //zakljucek itemize
+ }
+ $roletaAliSeznam = 1;
+ }
+
+
+ }elseif($enota == 4){ //ena moznost proti drugi
+ //$tex .= '& '.$simbolTex.' & '.$lang['srv_tip_sample_t6_4_vmes'].' & '.$simbolTex;
+ //$this->getAnswerSymbol($export_format, $fillablePdf, $vodoravniOdgovoriTip[$j-1], $numColSql, 0, $data[$userAnswerIndex[$spremenljivke['id']]])
+ //echo "userAnswerData: ".$data[$userAnswerIndex[$spremenljivke['id']]]." ".$spremenljivke['id']."</br>";
+ //echo "V latexSurveyElement </br>";
+ //echo "userAnswerData: ".$data[$userAnswerIndex[$spremenljivke['id']]]." </br>";
+ //echo "indeks: ".$userAnswerIndex[$spremenljivke['id']]." </br>";
+ if($data[$userAnswerIndex[$spremenljivke['id']]]==1){
+ $simbolTex1=$this->getAnswerSymbol($export_format, $fillablePdf, $spremenljivke['tip'], $numColSql, 0, $data[$userAnswerIndex[$spremenljivke['id']]]);
+ $simbolTex2=$simbolTex;
+ //echo "levo </br>";
+ }elseif($data[$userAnswerIndex[$spremenljivke['id']]]==2){
+ $simbolTex1=$simbolTex;
+ $simbolTex2=$this->getAnswerSymbol($export_format, $fillablePdf, $spremenljivke['tip'], $numColSql, 0, 1);
+ //echo "desno</br>";
+ }elseif($data[$userAnswerIndex[$spremenljivke['id']]]==''){
+ $simbolTex1=$simbolTex;
+ $simbolTex2=$simbolTex;
+ $simbolTex3='';
+ }
+ $tex .= '& '.$simbolTex1.' & '.$lang['srv_tip_sample_t6_4_vmes'].' & '.$simbolTex2;
+ //echo "userAnswerData: ".$data[$userAnswerIndex[$spremenljivke['id']]]."</br>";
+ }elseif($enota == 5){ //maxdiff
+ //$tex .= $navpicniOdgovori[$i-1].' & '.$simbolTex;
+ $tex .= $navpicniOdgovori[$i-1].' & '.$this->getAnswerSymbol($export_format, $fillablePdf, $spremenljivke['tip'], $numColSql, 0, $data[$userAnswerIndex[$spremenljivke['id']]]);
+ }elseif($enota == 8){ //tabela da/ne
+ //$tex .= ' & '.$simbolTex;
+ $tex .= ' & '.$this->getAnswerSymbol($export_format, $fillablePdf, $spremenljivke['tip'], $numColSql, 0, $data[$userAnswerIndex[$spremenljivke['id']]]);
+ }
+
+ $indeksOdgovorovRespondentMultiNumText++;
+
+ $userAnswerIndex[$spremenljivke['id']]++;
+ //echo "simbolTex: ".$simbolTex."</br>";
+ } //IZRIS PO STOLPCIH - KONEC
+ }else if($fillablePdf == 1){
+ $isCheckBox = null;
+ for($j = 1; $j < $numColSql; $j++){
+ if($isCheckBox){
+ $tex .= '& {\CheckBox[name=checkbox_'.$j.'_'.$i.',checkboxsymbol=\ding{56}]{}}';
+ }else{
+ $tex .= '& {\ChoiceMenu[radio, name=radio_'.$i.',radiosymbol=\ding{108}]{}{='.$j.'}}';
+ }
+ }
+ }
+
+ if($enota==1 || $enota==4){ //ce je "diferencial tabela" ali "ena moznost proti drugi", dodaj se tekst v zadnjem stolpcu tabele
+ $tex .= ' & '.$navpicniOdgovori2[$i-1].' '; //tekst v drugem stolpcu ob symbol
+
+ if(($enota==4 && count($missingOdgovori)!=0)||($enota==1 && $trak==1 && count($missingOdgovori)!=0)){ //ce je "ena moznost proti drugi" in so missingi ALI je "diferencial tabela" na traku in so missingi
+ for($m=0;$m<count($missingOdgovori);$m++){
+ //$tex .= ' & '.$simbolTex;
+ $tex .= ' & '.$this->getAnswerSymbol($export_format, $fillablePdf, $spremenljivke['tip'], $numColSql, 0, $data[$userAnswerIndex[$spremenljivke['id']]]);
+ $userAnswerIndex[$spremenljivke['id']]++;
+ if($enota==4){ //ce je "ena moznost proti drugi"
+ $tex .= ' '.$missingOdgovori[$m]; //izpisi se missing odgovor
+ }
+ }
+ }
+
+ }
+
+ if($enota==5&&count($missingOdgovori)!=0){ //ce je maxdiff in so missingi
+ for($m=0;$m<count($missingOdgovori);$m++){
+ //$tex .= ' & '.$simbolTex.' '.$missingOdgovori[$m];
+ $tex .= ' & '.$this->getAnswerSymbol($export_format, $fillablePdf, $spremenljivke['tip'], $numColSql, 0, $data[$userAnswerIndex[$spremenljivke['id']]]).' '.$missingOdgovori[$m];
+ $userAnswerIndex[$spremenljivke['id']]++;
+ }
+ }
+
+ if(($enota == 2 || $enota == 6)&&$spremenljivke['tip']!=24){ //ce je roleta ali seznam in ni kombinirana tabela
+ $tex .= '\end{itemize}'; //zakljucek itemize
+
+ /* if($export_format == 'rtf'){ //ce je rtf
+ $tex .= ' \hline '; //dodaj crto na koncu vrstice
+ } */
+
+ }
+
+ $tex .= $texNewLine;
+ //echo "tex: ".$tex."</br>";
+ if($spremenljivke['tip']==24){
+ //$userAnswerIndex++;
+ }
+ }else{
+ $userAnswerIndex[$spremenljivke['id']]=$z;
+ }
+ if(($enota == 2 || $enota == 6)&&$spremenljivke['tip']!=24){ //ce je roleta ali seznam in ni kombinirana tabela
+ if($export_format == 'rtf'){ //ce je rtf
+ $tex .= ' \hline '; //dodaj crto na koncu vrstice
+ }
+ }
+ }
+ //IZRIS PO VRSTICAH - KONEC
+ //echo "tex: ".$tex."</br>";
+ return $tex;
+ }
+ #funkcija, ki skrbi za izris vrstic tabele (z multigrid) - konec ###########################################################
+
+ function getUserId() {return ($this->usr_id)?$this->usr_id:false;}
+
+ #funkcija, ki skrbi za preverjanje obstoja podatkov za vprasanja, ki niso grid ali kombinirana tabela
+ function GetUsersData($db_table=null, $spremenljivkeId=null, $spremenljivkeTip=null, $usr_id=null, $loop_id_raw=null){
+ $userDataPresent = 0; //belezi, ali je odgovor respondenta prisoten in je indeks za določena polja, ki shranjujejo podatke o odgovorih respondenta
+ $loop_id = $loop_id_raw == null ? " IS NULL" : " = '".$loop_id_raw."'";
+ //echo "loop_id v GetUsersData: ".$loop_id."</br>";
+
+ // če imamo vnose, pogledamo kaj je odgovoril uporabnik
+ //if( in_array($spremenljivkeTip, array(21, 7, 8, 18)) ){ //ce je tip besedilo ali stevilo ali datum ali vsota
+ if( in_array($spremenljivkeTip, array(21, 4, 7, 8, 18)) ){ //ce je tip besedilo ali besedilo staro (4) ali stevilo ali datum ali vsota
+ $sqlUserAnswerString ="SELECT text FROM srv_data_text".$db_table." WHERE spr_id='".$spremenljivkeId."' AND usr_id='".$usr_id."' AND loop_id $loop_id ";
+ }elseif($spremenljivkeTip==17){ //ce je razvrscanje
+ //$sqlUserAnswer = sisplet_query("SELECT vrstni_red FROM srv_data_rating WHERE spr_id=".$spremenljivke['id']." AND usr_id='".$this->getUserId()."' AND vre_id='".$rowVrednost['id']."' AND loop_id $loop_id");
+ //$sqlUserAnswerString = "SELECT vrstni_red FROM srv_data_rating WHERE spr_id='".$spremenljivkeId."' AND usr_id='".$usr_id."' ";
+ $sqlUserAnswerString = "SELECT vrstni_red FROM srv_data_rating WHERE spr_id='".$spremenljivkeId."' AND usr_id='$usr_id' AND loop_id $loop_id ";
+ //echo $sqlUserAnswerString."</br>";
+ }elseif($spremenljivkeTip==26){ //ce je lokacija
+ //$sqlUserAnswerString ="SELECT lat, lng, address, text FROM srv_data_map WHERE spr_id='".$spremenljivkeId."' AND usr_id='".$usr_id."' ";
+ $sqlUserAnswerString ="SELECT IF(dm.lat > 0, dm.lat, vm.lat) as lat, IF(dm.lng > 0, dm.lng, vm.lng) as lng, IF(dm.address != \"\", dm.address, vm.address) as address, text FROM srv_data_map as dm "
+ . "LEFT JOIN (SELECT lat, lng, address, vre_id FROM srv_vrednost_map) AS vm on vm.vre_id=dm.vre_id "
+ . "WHERE spr_id='".$spremenljivkeId."' AND usr_id='$usr_id' AND loop_id $loop_id ";
+ //echo $sqlUserAnswerString."</br>";
+ }elseif($spremenljivkeTip==27){ //ce je heatmap
+ //$sqlUserAnswerString ="SELECT lat, lng, address, text FROM srv_data_heatmap WHERE spr_id='".$spremenljivkeId."' AND usr_id='".$usr_id."' ";
+ $sqlUserAnswerString ="SELECT lat, lng, address, text FROM srv_data_heatmap WHERE spr_id='".$spremenljivkeId."' AND usr_id='$usr_id' AND loop_id $loop_id ";
+ //echo $sqlUserAnswerString."</br>";
+ }else{
+ //$sqlUserAnswerString = "SELECT vre_id FROM srv_data_vrednost".$db_table." WHERE spr_id='$spremenljivkeId' AND usr_id=$usr_id";
+ $sqlUserAnswerString = "SELECT vre_id FROM srv_data_vrednost".$db_table." WHERE spr_id='$spremenljivkeId' AND usr_id='$usr_id' AND loop_id $loop_id";
+ //echo $sqlUserAnswerString."</br>";
+ }
+
+ $sqlUserAnswer = sisplet_query($sqlUserAnswerString);
+
+ if( in_array($spremenljivkeTip, array(21, 4, 7, 8, 18, 17)) ){//ce je tip besedilo ali stevilo ali datum ali vsota ali razvrscanje
+ $rowAnswers = mysqli_fetch_assoc($sqlUserAnswer);
+ if($rowAnswers){ //ce je kaj v bazi
+ //echo "Nekaj je v bazi za spremenljivko".$spremenljivkeId." in usr ".$usr_id."</br>";
+ $userDataPresent++;
+ }
+ }else{
+ if($sqlUserAnswer){ //ce je kaj v bazi
+ while ($rowAnswers = mysqli_fetch_assoc($sqlUserAnswer)){
+ if($spremenljivkeTip==26||$spremenljivkeTip==27){
+ //$this->userAnswer = $rowAnswers;
+ $this->userAnswer[$userDataPresent] = $rowAnswers;
+ //echo "rowAnswers: ".$this->userAnswer['address'].' za odgovore tip '.$spremenljivkeTip.' id '.$spremenljivkeId.' usr '.$usr_id.'</br>';
+ $userDataPresent++;
+ }else{
+ $this->userAnswer[$rowAnswers['vre_id']] = $rowAnswers['vre_id'];
+ //echo "rowAnswers: ".$rowAnswers['vre_id'].' za odgovore tip '.$spremenljivkeTip.' id '.$spremenljivkeId.' usr '.$usr_id.'</br>';
+ if($rowAnswers['vre_id']>0){
+ $userDataPresent++;
+ }
+ }
+ }
+ }
+ }
+ //echo "userDataPresent za tip ".$spremenljivkeTip." id ".$spremenljivkeId." usr ".$usr_id." je:".$userDataPresent." in loop: $loop_id</br>";
+ return $userDataPresent;
+ }
+ #funkcija, ki skrbi za preverjanje obstoja podatkov za vprasanja, ki niso grid ali kombinirana tabela - konec
+
+ #funkcija, ki skrbi za preverjanje obstoja podatkov za vprasanja z grid
+ function GetUsersDataGrid($spremenljivke=null, $db_table=null, $rowVrednost=null, $rowVsehVrednosti=null, $usr_id=null, $subtip=null, $loop_id_raw=null, $export_data_type=null){
+ $loop_id = $loop_id_raw == null ? " IS NULL" : " = '".$loop_id_raw."'";
+
+ // poiščemo kaj je odgovoril uporabnik: PREVERITI, CE JE POTREBEN STAVEK Z LOOP IN KDAJ JE TO AKTUALNO
+ if(($spremenljivke['tip']==16)||($spremenljivke['tip']==6&&$spremenljivke['enota']==3)){ //ce je grid checkbox ali dvojna tabela
+ //$sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = '".$rowVsehVrednosti['id']."' AND loop_id $loop_id");
+ //$sqlString = "SELECT grd_id FROM srv_data_checkgrid".$db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = ".$rowVsehVrednosti['id'];
+
+ //$sqlString = "SELECT grd_id, vre_id FROM srv_data_checkgrid".$db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = ".$rowVsehVrednosti['id'];
+ $sqlString = "SELECT grd_id, vre_id FROM srv_data_checkgrid".$db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = ".$rowVsehVrednosti['id']." AND loop_id $loop_id";
+
+ //$sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = ".$rowVsehVrednosti['id']);
+ $sqlUserAnswer = sisplet_query($sqlString);
+ //}elseif($spremenljivke['tip']==6){ //ce je grid radio
+ }elseif($spremenljivke['tip']==6){ //ce je grid radio
+ //$sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_grid".$db_table." where spr_id = '".$rowVrednost['spr_id']."' and usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND loop_id $loop_id");
+
+ //$sqlString ="SELECT grd_id FROM srv_data_grid".$db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = ".$rowVsehVrednosti['id'];
+
+ //$sqlString ="SELECT grd_id, vre_id FROM srv_data_grid".$db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = ".$rowVsehVrednosti['id'];
+ $sqlString ="SELECT grd_id, vre_id FROM srv_data_grid".$db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = ".$rowVsehVrednosti['id']." AND loop_id $loop_id";
+ //echo $sqlString."</br>";
+ $sqlUserAnswer = sisplet_query($sqlString);
+
+ //echo $sqlString."</br>";
+ }elseif($spremenljivke['tip']==19||$spremenljivke['tip']==20){ //ce je grid besedila ali stevil
+ $sqlString = "SELECT grd_id, text, vre_id FROM srv_data_textgrid".$db_table." where spr_id = '".$rowVrednost['spr_id']."' and usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = ".$rowVsehVrednosti['id'];
+ //$sqlUserAnswer = sisplet_query("SELECT grd_id, text FROM srv_data_textgrid".$db_table." where spr_id = '".$rowVrednost['spr_id']."' and usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = ".$rowVsehVrednosti['id']);
+ //echo "sqlString: ".$sqlString."</br>";
+ $sqlUserAnswer = sisplet_query($sqlString);
+ }elseif($spremenljivke['tip']==24){ //ce je kombo
+ //echo "Subtip kombo vprasanja: ".$subtip."</br>";
+ //echo "enota kombo vprasanja: ".$rowVrednost['enota']."</br>";
+
+ if($subtip==6){ //ce je grid radio
+ //$sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_grid".$db_table." where spr_id = '".$rowVrednost['spr_id']."' and usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND loop_id $loop_id");
+ //$sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_grid".$db_table." where spr_id = '".$rowVrednost['spr_id']."' and usr_id = '".$usr_id."' AND vre_id = ".$rowVrednost['id']);
+ //$sqlString ="SELECT grd_id FROM srv_data_grid".$db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$usr_id."' AND vre_id = ".$rowVrednost['id'];
+ //$sqlString ="SELECT grd_id FROM srv_data_grid".$db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = ".$rowVsehVrednosti['id'];
+ //if($rowVrednost['enota'] != 2 && $rowVrednost['enota'] != 6){ //ce ni roleta ali seznam
+ if($rowVrednost['enota'] != 2 && $rowVrednost['enota'] != 6 && ($export_data_type == 1)){ //ce ni roleta in seznam IN je razsirjen izvoz
+ $sqlString ="SELECT grd_id FROM srv_data_grid".$db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = ".$rowVsehVrednosti['id']." AND loop_id $loop_id";
+ }else{ //ce je roleta ali seznam
+ //$sqlString ="SELECT grd_id FROM srv_data_grid".$db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND loop_id $loop_id";
+ $sqlString ="SELECT g.naslov, gdata.grd_id FROM srv_grid g, srv_data_grid".$db_table." gdata WHERE g.id=gdata.grd_id AND g.spr_id = '".$rowVrednost['spr_id']."' AND gdata.usr_id = '".$usr_id."' AND gdata.vre_id = '".$rowVrednost['id']."' AND gdata.loop_id $loop_id";
+ }
+
+ //echo $sqlString."</br>";
+ $sqlUserAnswer = sisplet_query($sqlString);
+
+ //echo $sqlString."</br>";
+ }elseif($subtip==16){ //ce je grid checkbox ali dvojna tabela
+ //$sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = '".$rowVsehVrednosti['id']."' AND loop_id $loop_id");
+
+ //$sqlString = "SELECT grd_id FROM srv_data_checkgrid".$db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = ".$rowVsehVrednosti['id'];
+ $sqlString = "SELECT grd_id FROM srv_data_checkgrid".$db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = ".$rowVsehVrednosti['id']." AND loop_id $loop_id";
+ //$sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = ".$rowVsehVrednosti['id']);
+ $sqlUserAnswer = sisplet_query($sqlString);
+ }elseif($subtip==19||$subtip==20){ //ce je grid besedila ali stevil
+ $sqlString = "SELECT grd_id, text FROM srv_data_textgrid".$db_table." where spr_id = '".$rowVrednost['spr_id']."' and usr_id = '".$usr_id."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = ".$rowVsehVrednosti['id'];
+
+ $sqlUserAnswer = sisplet_query($sqlString);
+
+ //$this->userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+ //echo "userAnswer v funkciji: ".$this->userAnswer['text'].'</br>';
+ }
+ }
+
+ //echo $sqlString."</br>";
+ //$this->userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+ //$userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+ //echo "userAnswer v funkciji: ".$this->userAnswer['grd_id'].'</br>';
+ //echo "userAnswer v funkciji: ".$userAnswer['text'].'</br>';
+ //echo "userAnswer v funkciji: ".$userAnswer['grd_id'].'</br>';
+
+ return $sqlUserAnswer;
+
+ }
+ #funkcija, ki skrbi za preverjanje obstoja podatkov za vprasanja z grid - konec
+
+ #funkcija, ki skrbi za preverjanje obstoja podatkov za vprasanja s kombinirano tabelo
+ function GetUsersDataKombinirana($spremenljivke=null, $db_table=null, $usr_id=null, $presirokaTabela=0, $loop_id_raw=null, $export_data_type=null){
+ //function GetUsersDataKombinirana($spremenljivke=null, $db_table=null, $usr_id=null, $questionText=null, $loop_id_raw=null, $export_data_type=null){
+ $userDataPresent = 0; //belezi, ali je odgovor respondenta prisoten in je indeks za določena polja, ki shranjujejo podatke o odgovorih respondenta
+ $userAnswerSprIds = array();
+ $userAnswerSprTip = array();
+ $userAnswerSprIdsIndex = 0;
+ $orStavek = '';
+ //$loop_id = $loop_id_raw == null ? " IS NULL" : " = '".$loop_id_raw."'";
+ $loop_id = $loop_id_raw;
+
+ #za pridobitev stevila vrstic
+ //echo "SELECT id, naslov, naslov2, variable, other FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red </br>";
+ $sqlVrednostiKombo = sisplet_query("SELECT id, naslov, naslov2, variable, other FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $numRowsSql = mysqli_num_rows($sqlVrednostiKombo);
+ //echo $numRowsSql."</br>";
+ //echo $spremenljivke['id']."</br>";
+
+ #za pridobitev stevila vrstic - konec
+
+ #za pridobitev stevila stolpcev
+ $sqlStVrednostiKombo = sisplet_query("SELECT count(*) FROM srv_grid g, srv_grid_multiple m WHERE m.spr_id=g.spr_id AND m.parent='".$spremenljivke['id']."'");
+ $rowStVrednost = mysqli_fetch_array($sqlStVrednostiKombo); //stevilo stolpcev
+ $numColSql = $rowStVrednost['count(*)']; //stevilo vseh stolpcev
+ //echo "stevilo stolpcev: ".$numColSql."</br>";
+ #za pridobitev stevila stolpcev - konec
+
+ //echo "presirokaTabela: ".$presirokaTabela."</br>";
+ if($presirokaTabela==0){ //ce tabela ni presiroka
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, s.tip FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivke['id']."' AND m.spr_id=s.id ORDER BY m.vrstni_red"); //pridobimo spr_id in tip podvprasanj, ki sestavljajo kombinirano tabelo
+ //echo "SELECT m.spr_id, s.tip FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivke['id']."' AND m.spr_id=s.id ORDER BY m.vrstni_red"."</br>";
+
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid)){
+ array_push($userAnswerSprIds, $rowSubGrid['spr_id'] ); //filanje polja s spr_id podvprasanj
+ array_push($userAnswerSprTip, $rowSubGrid['tip'] ); //filanje polja s tip podvprasanj
+ if($userAnswerSprIdsIndex){
+ $orStavek .= ' OR ';
+ }
+ //$orStavek .= "spr_id='".$rowSubGrid['spr_id']."' ";
+ $orStavek .= "v.spr_id='".$rowSubGrid['spr_id']."' ";
+ $userAnswerSprIdsIndex++;
+ }
+ }else{
+ $orStavek = "v.spr_id='".$spremenljivke['id']."' ";
+ }
+ //echo $orStavek."</br>";
+
+ //echo count($userAnswerSprTip)."</br>";
+
+ for($i=1;$i<=$numRowsSql;$i++){
+ //$sqlVrednostiString = "SELECT id, naslov, spr_id FROM srv_vrednost WHERE (".$orStavek.") AND vrstni_red=".($i).";";
+ //$sqlVrednostiString = "SELECT v.spr_id, v.naslov, s.tip, v.id FROM srv_vrednost v, srv_spremenljivka s WHERE v.spr_id=s.id AND (".$orStavek.") AND v.vrstni_red=".($i).";";
+ $sqlVrednostiString = "SELECT v.spr_id, v.naslov, s.tip, v.id, s.enota FROM srv_vrednost v, srv_spremenljivka s WHERE v.spr_id=s.id AND (".$orStavek.") AND v.vrstni_red=".($i).";";
+ //echo $sqlVrednostiString."</br>";
+ $sqlVrednosti = sisplet_query($sqlVrednostiString);
+ while($rowVrednosti = mysqli_fetch_assoc($sqlVrednosti)){
+ $sqlVsehVrednostiString = "SELECT id, naslov FROM srv_grid WHERE spr_id='".$rowVrednosti['spr_id']."' ORDER BY 'vrstni_red'";
+
+ //echo $sqlVsehVrednostiString."</br>";
+ //echo $rowVrednosti['tip']."</br>";
+ //echo $rowVrednosti['other']."</br>";
+ //echo "Vrednost: ".$rowVrednosti['spr_id']."</br>";
+ $sqlVsehVrednosti = sisplet_query($sqlVsehVrednostiString);
+ //echo mysqli_num_rows($sqlVsehVrednosti)."</br>";
+
+
+
+ $roletaZabelezena = 0;
+
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednosti)){
+ if($roletaZabelezena == 0){
+ $sqlUserAnswer = $this->GetUsersDataGrid($spremenljivke, $db_table, $rowVrednosti, $rowVsehVrednosti, $usr_id, $rowVrednosti['tip'], $loop_id, $export_data_type);
+ }
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+ if($rowVrednosti['tip']==19||$rowVrednosti['tip']==20){
+ $userAnswers[$userDataPresent] = $userAnswer['text'];
+ }else{
+ if($roletaZabelezena == 0){
+ //$userAnswers[$userDataPresent] = $userAnswer['grd_id'];
+ $userAnswers[$userDataPresent] = $userAnswer['naslov'];
+ //if($rowVrednosti['enota']==2 || $rowVrednosti['enota']==6){ //ce je roleta ali seznam
+ if($rowVrednosti['enota']==2 || $rowVrednosti['enota']==6 || ($export_data_type==2 && $rowVrednosti['tip']==6)){ //ce je roleta ali seznam
+ $roletaZabelezena = 1;
+ $userDataPresent++;
+ }else{
+ $userAnswers[$userDataPresent] = $userAnswer['grd_id'];
+ }
+
+ }
+ }
+ //echo $this->userAnswer[$userDataPresent]."</br>";
+ //echo "odgovori respondenta: ".$userAnswers[$userDataPresent]."</br>";
+ //echo "index userDataPresent: ".$userDataPresent."</br>";
+ /* if($rowVrednosti['enota']==2){
+ $roletaZabelezena = 1;
+ }*/
+ if($roletaZabelezena == 0){
+ $userDataPresent++;
+ }
+ }
+
+ }
+
+ }
+ //if($questionText){
+ //return $userDataPresent;
+ //}else{
+ //return $this->userAnswer;
+ return $userAnswers;
+ //}
+ }
+ #funkcija, ki skrbi za preverjanje obstoja podatkov za vprasanja s kombinirano tabelo - konec
+
+ #funkcija, ki skrbi za pridobitev operatorja iz stevilskega podatka ###########################################################
+ function GetOperator($operatorNum=null){
+ if ($operatorNum == 0){
+ $operator = $this->encodeText('+');
+ }elseif ($operatorNum == 1){
+ $operator = $this->encodeText('-');
+ }elseif ($operatorNum == 2){
+ $operator = $this->encodeText('*');
+ }elseif ($operatorNum == 3){
+ $operator = $this->encodeText('/');
+ }
+ return $operator;
+ }
+ #funkcija, ki skrbi za pridobitev operatorja iz stevilskega podatka - konec ###################################################
+
+ /**
+ * @desc V podanem stringu poisce spremenljivke in jih spajpa z vrednostmi
+ */
+ function dataPiping ($text='') {
+/* echo "text: ".$text."</br>";
+ echo "Usr_id: ".$this->usr_id."</br>";
+ echo "Loop_id: ".$this->loop_id."</br>";
+ echo "_____________________</br>"; */
+ Common::getInstance()->Init($this->anketa);
+ //echo Common::getInstance()->dataPiping($text, $this->usr_id, $this->loop_id);
+ return Common::getInstance()->dataPiping($text, $this->usr_id, $this->loop_id);
+ }
+
+
+}
\ No newline at end of file |