summaryrefslogblamecommitdiffstats
path: root/admin/survey/export/xmlClasses/Vprasanja/MultiGridXml.php
blob: 89146252e2e1f98d3e092a47a4120a86806351c0 (plain) (tree)










































































































































































































































































































































































































                                                                                                                                                                                                               
<?php
/***************************************
 * Description: Priprava Xml kode za klasicne tabele
 *
 *
 * Autor: Patrik Pucer
 * Datum: 10/2018
 *****************************************/

define("VARGRP_ELEMENT_TYPE_GRID", "Grid");
define("VARGRP_ELEMENT_TYPE_MULTIRESP", "multipleResp");
define("VARFORMAT_ELEMENT_TYPE_GRID", "numeric");

class MultiGridXml extends XmlSurveyElement
{
    public function __construct()
    {
        //parent::getGlobalVariables();
    }

    /************************************************
     * Get instance
     ************************************************/
    private static $_instance;
	protected $loop_id = null;	// id trenutnega loopa ce jih imamo
	protected $xml;

    public static function getInstance()
    {
        if (self::$_instance)
            return self::$_instance;

        return new MultiGridXml();
    }
	
	public function export($spremenljivke=null, $db_table=null, $preveriSpremenljivko=null, $export_subtype=null, $loop_id=null, $xml=null){
		global $lang;
		
		// Ce je spremenljivka v loopu
		$this->loop_id = $loop_id;
		$this->xml = $xml;
		
		//polja za shranjevanje podatkov za izpis
		$qstnLits = array();
		$varNames = array();
		$missings = array();
		$catValus = array();
		$labls = array();
		$varNamesDb = array();	//atribut name ob dvojni tabeli
		//polja za shranjevanje podatkov za izpis - konec
		
		//Pobiranje podatkov za izpis ######################################################################################################
		
		
		//VREDNOSTI
		// iz baze preberemo vse moznosti - ko nimamo izpisa z odgovori respondenta
		$sqlVrednostiString = "SELECT id, naslov, naslov2, variable, other FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red";
		$sqlVrednosti = sisplet_query($sqlVrednostiString);
		
		//$numRowsSql = mysqli_num_rows($sqlVrednosti);
		//pregled vseh moznih vrednosti (kategorij) po $sqlVrednosti
		while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti)){			
			$mozenOdgovor = ((( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) ));
			
			$varName = strip_tags($rowVrednost['variable']);
			$qstnLit = strip_tags($mozenOdgovor);
			
			//belezenje podatkov za kasnejsi izpis
			$varNames[] = $varName;
			$qstnLits[] = $qstnLit;
			//belezenje podatkov za kasnejsi izpis - konec
		}
		//pregled vseh moznih vrednosti (kategorij, mozni odgovori) po $sqlVrednosti - konec
		//VREDNOSTI - Konec
		
		//MOZNI ODGOVORI
		$sqlMozniOdgovoriString = "SELECT naslov, variable, other FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red";
		$sqlMozniOdgovori = sisplet_query($sqlMozniOdgovoriString);
		while ($rowMozniOdgovori = mysqli_fetch_assoc($sqlMozniOdgovori)){
			$labl = strip_tags($rowMozniOdgovori['naslov']);
			if($rowMozniOdgovori['other']==0){	//ce ni missing
				$catValu = strip_tags($rowMozniOdgovori['variable']);
			}else{
				$catValu = $rowMozniOdgovori['other'];
			}
			
			if($rowMozniOdgovori['other']<0){
				$missing = "Y";
			}else{
				$missing = "N";
			}	
			
			//belezenje podatkov za kasnejsi izpis
			$labls[] = $labl;
			$missings[] = $missing;
			$catValus[] = $catValu;
			//belezenje podatkov za kasnejsi izpis - konec
		}
		//MOZNI ODGOVORI - KONEC		
		
		//Pobiranje podatkov za izpis - konec ###############################################################################################

		//Zacetek elementa varGrp
/* 		xmlwriter_start_element($this->xml, 'varGrp');
			$attribute = 'name';
			$element = $spremenljivke['variable'];
			$this->writeXmlAttr4Element($this->xml, $attribute, $element);
			
			$attribute = 'type';
			$element = VARGRP_ELEMENT_TYPE_GRID;
			$this->writeXmlAttr4Element($this->xml, $attribute, $element);

			$attribute = 'var';
			$element = "";			
			foreach($varNames as $key => $varName){
				if((int)$varName==0){	//ce ni missing vrednost
					if($key == 0){
						$element .= $varName;
					}elseif($key == 2&&$spremenljivke['enota']==3&&$spremenljivke['tip']==6){	//ce je index 2 in je dvojna tabela klasicne tabele, ne rabimo vec oznak spremenljivke
						break;
					}
					else{
						$element .= " ".$varName;
					}
				}			
			}	
			$this->writeXmlAttr4Element($this->xml, $attribute, $element);

				//Element labl				
				if($spremenljivke['label']){	//ce je Labela pod Napredno, jo dodamo
					$element  = 'labl';
					$text = $spremenljivke['label'];
					$this->writeXmlElement($this->xml, $text, $element);
				}
				//Element labl - konec

		xmlwriter_end_element($this->xml); // varGrp */
		//Konec elementa varGrp
		
		//CE JE DVOJNA TABELA KLASICNE TABELE ###############################################################
		if($spremenljivke['enota']==3&&$spremenljivke['tip']==6){	//ce je dvojna tabela klasicne tabele
		
			//Preureditev $catValus, da se razpolovi dolzino polja
			$startIndexCatValus = count($catValus)/2 - 1;
			$numOfCatValus = count($catValus)/2;
			array_splice($catValus, $startIndexCatValus, $numOfCatValus);
			//Preureditev $catValus, da se razpolovi dolzino polja - konec			

			//Preureditev $labls in $qstnLits, da se doda se enkrat toliko odgovorov
			foreach($labls as $labl){
				$labls[] = $labl;
			}
			foreach($qstnLits as $qstnLit){
				$qstnLits[] = $qstnLit;
			}
			//Preureditev $labls in $qstnLit, da se doda se enkrat toliko odgovorov - konec				
		
			//Zacetek elementa varGrp za prvo podtabelo
/* 			xmlwriter_start_element($this->xml, 'varGrp');
				$attribute = 'name';
				$element = $spremenljivke['variable'].'a';
				$this->writeXmlAttr4Element($this->xml, $attribute, $element);
				
				$attribute = 'type';
				$element = VARGRP_ELEMENT_TYPE_GRID;
				$this->writeXmlAttr4Element($this->xml, $attribute, $element);

				$attribute = 'var';
				$element = "";
				$char = 'a';	//za dodatno oznacevanje var
				foreach($varNames as $key => $varName){					
					if((int)$varName==0){	//ce ni missing vrednost
						if($key == 0){
							//$element .= $spremenljivke['variable'].'a'.$char;
							$elementTmp = $spremenljivke['variable'].'a'.$char;
							$element .= $elementTmp;
						}else{							
							//$element .= " ".$spremenljivke['variable'].'a'.$char;
							$elementTmp = " ".$spremenljivke['variable'].'a'.$char;
							$element .= $elementTmp;
						}
						$varNamesDb[] = $elementTmp;
					}
					$char++;
				}		
				$this->writeXmlAttr4Element($this->xml, $attribute, $element);

					//Element labl
					if($spremenljivke['grid_subtitle1']){	//ce je label za podnaslov 1
						$element  = 'labl';
						$text = $spremenljivke['grid_subtitle1'];
						$this->writeXmlElement($this->xml, $text, $element);
					}
					//Element labl - konec
				
			xmlwriter_end_element($this->xml); // varGrp */
			//Konec elementa varGrp	za prvo podtabelo
			
			//Zacetek elementa varGrp za drugo podtabelo
/* 			xmlwriter_start_element($this->xml, 'varGrp');
				$attribute = 'name';
				$element = $spremenljivke['variable'].'b';
				$this->writeXmlAttr4Element($this->xml, $attribute, $element);
				
				$attribute = 'type';
				$element = VARGRP_ELEMENT_TYPE_GRID;
				$this->writeXmlAttr4Element($this->xml, $attribute, $element);

				$attribute = 'var';
				$element = "";
				$char = 'a';	//za dodatno oznacevanje var
				foreach($varNames as $key => $varName){					
					if((int)$varName==0){	//ce ni missing vrednost
						$elementTmpDb = $spremenljivke['variable'].'b'.$char;
						if($key == 0){							
							$element .= $elementTmpDb;
						}else{
							$elementTmp = " ".$elementTmpDb;
							$element .= $elementTmp;
						}
						$varNamesDb[] = $elementTmpDb;
					}
					$char++;
				}
				$this->writeXmlAttr4Element($this->xml, $attribute, $element);
				
					//Element labl
					if($spremenljivke['grid_subtitle2']){	//ce je label za podnaslov 2			
						$element  = 'labl';
						$text = $spremenljivke['grid_subtitle2'];
						$this->writeXmlElement($this->xml, $text, $element);
					}
					//Element labl - konec

				xmlwriter_end_element($this->xml); // varGrp */
			//Konec elementa varGrp	za drugo podtabelo
			
			//$char = 'a';	//za dodatno oznacevanje var v naslednjih elementih
			$varNames = $varNamesDb;
		}
		//CE JE DVOJNA TABELA KLASICNE TABELE - KONEC ###############################################################

		if($spremenljivke['tip']==16){	//ce je multicheckbox, uredi varGrp
			
/* 			for($l=0;$l<count($varNames);$l++){
				//Preureditev $labls in $qstnLits, da je dovolj elementov v polju za izpis
				foreach($labls as $labl){
					$labls[] = $labl;
				}
				foreach($qstnLits as $qstnLit){
					$qstnLits[] = $qstnLit;
				}
				//Preureditev $labls in $qstnLit, da je dovolj elementov v polju za izpis - konec	
			}
			
			foreach($varNames as $key => $varName){	//za vsak mozen odgovor
				//Zacetek elementa varGrp za prvo podtabelo
				xmlwriter_start_element($this->xml, 'varGrp');
					$attribute = 'name';
					$element = $varName;
					$this->writeXmlAttr4Element($this->xml, $attribute, $element);
					
					$attribute = 'type';
					$element = VARGRP_ELEMENT_TYPE_MULTIRESP;
					$this->writeXmlAttr4Element($this->xml, $attribute, $element);

					$attribute = 'var';
					$element = "";
					$char = 'a';	//za dodatno oznacevanje var
 					foreach($varNames as $key2 => $varName2){				
						if((int)$varName2==0){	//ce ni missing vrednost
							$elementTmpDb = $varName.$char;
							if($key2 == 0){								
								$element .= $elementTmpDb;
							}else{								
								$elementTmp = " ".$elementTmpDb;
								$element .= $elementTmp;
							}
							$varNamesDb[] = $elementTmpDb;
						}
						$char++;
					}
					$this->writeXmlAttr4Element($this->xml, $attribute, $element);

						//Element labl
						if($spremenljivke['grid_subtitle1']){	//ce je label za podnaslov 1
							$element  = 'labl';
							$text = $spremenljivke['grid_subtitle1'];
							$this->writeXmlElement($this->xml, $text, $element);
						}
						//Element labl - konec
					
				xmlwriter_end_element($this->xml); // varGrp
				//Konec elementa varGrp	za prvo podtabelo
			}
			$varNames = $varNamesDb; */
			
		}
		
		
		foreach($varNames as $key => $varName){	//za vsak mozen odgovor
		
			//if((int)$varName==0){	//ce ni missing vrednost
				//Zacetek elementa var ###############################################################################
				xmlwriter_start_element($this->xml, 'var');
					
					//izpis ID in name
					$attribute = 'ID';
					$element = $varName;
					$this->writeXmlAttr4Element($this->xml, $attribute, $element);					
					$attribute = 'name';
					$this->writeXmlAttr4Element($this->xml, $attribute, $element);
					//izpis ID in name - konec
					
					//Element labl		
					$element  = 'labl';
					$text = strip_tags($qstnLits[$key], '<a><img><ul><li><ol><br>');
					$this->writeXmlElement($this->xml, $text, $element);
					//Element labl - konec
					
					//Priprava besedila vprasanja in njen izpis #################################################################
					$rowl = $this->srv_language_spremenljivka($spremenljivke);
					if (strip_tags($rowl['naslov']) != '') $spremenljivke['naslov'] = $rowl['naslov'];
					if (strip_tags($rowl['info']) != '') $spremenljivke['info'] = $rowl['info'];					
					//Element qstn
					xmlwriter_start_element($this->xml, 'qstn');						
						$element  = 'preQTxt';
						$text = strip_tags($spremenljivke['naslov'], '<a><img><ul><li><ol><br>');
						$this->writeXmlElement($this->xml, $text, $element);

						$element  = 'qstnLit';
						//$text = strip_tags($qstnLits[$key], '<a><img><ul><li><ol><br>');
						$text = strip_tags($qstnLits[$key], '<a><img><ul><li><ol><br>');
						$this->writeXmlElement($this->xml, $text, $element);
					xmlwriter_end_element($this->xml);
					//Element qstn - konec					
					//Priprava besedila vprasanja in njen izpis - konec #################################################################
					
					//Element catgry
					$attribute = 'missing';
					if($spremenljivke['tip']==16){	//ce je multicheckbox,
						//$missingElement = $missings[$key];		
/* 						$catValu = [1, 0];
						$lablCatgry = ['Izbran', 'Ni izbran'];
						foreach($catValu as $keyCatgry => $catVal){
							xmlwriter_start_element($this->xml, 'catgry');
								$missingElement = $missings[$keyCatgry];
								xmlwriter_write_attribute($this->xml, $attribute, $missingElement);	//zacetek missing
									//Element catValu
									$element  = 'catValu';
									$text = $catVal;		
									$this->writeXmlElement($this->xml, $text, $element);
									//Element catValu - konec					
									//Element labl		
									$element  = 'labl';
									$text = $lablCatgry[$keyCatgry];		
									$this->writeXmlElement($this->xml, $text, $element);
									//Element labl - konec
								xmlwriter_end_attribute($this->xml);	//konec missing
							xmlwriter_end_element($this->xml);
						} */
					}else{
						foreach($catValus as $keyCatgry => $catVal){
							xmlwriter_start_element($this->xml, 'catgry');
								$missingElement = $missings[$keyCatgry];
								xmlwriter_write_attribute($this->xml, $attribute, $missingElement);	//zacetek missing
									//Element catValu
									$element  = 'catValu';
									$text = $catVal;		
									$this->writeXmlElement($this->xml, $text, $element);
									//Element catValu - konec					
									//Element labl		
									$element  = 'labl';
									$text = $labls[$keyCatgry];		
									$this->writeXmlElement($this->xml, $text, $element);
									//Element labl - konec
								xmlwriter_end_attribute($this->xml);	//konec missing
							xmlwriter_end_element($this->xml);
						}
					}
					//Element catgry - konec
					
					//Element varFormat
					xmlwriter_start_element($this->xml, 'varFormat');
					$attribute = 'type';
					$element = VARFORMAT_ELEMENT_TYPE_GRID;
					$this->writeXmlAttr4Element($this->xml, $attribute, $element);
					xmlwriter_end_element($this->xml);
					//Element varFormat - konec
				//Konec elementa var ###############################################################################
				xmlwriter_end_element($this->xml); // var
			//}			
		}
	}	
}