summaryrefslogblamecommitdiffstats
path: root/admin/survey/export/xmlClasses/class.XmlDocument.php
blob: 0ef63973f95072699701e41c51e2bde43273c8d9 (plain) (tree)







































































































































































































































































































































































                                                                                                                                                                         
<?php

/**
 *
 *	Class ki skrbi inicializacijo xml dokumenta
 *
 *
 */
 
####################################

####################################konec

include('../../vendor/autoload.php');
define("CODEBOOK_VERSION", 2.1);
 
class XmlDocument{
	
	var $export_type;			// Tip izvoza (vprašalnik, analize...)
	var $export_subtype;		// Podtip izvoza
	var $export_format;			// Format izvoza (latex->pdf, latex->rtf, xls...)
	
	var $anketa;				// ID ankete
	var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
	
	var $grupa = null;				// trenutna grupa
	var $usrId = null;			// trenutni user
	var $spremenljivka;		// trenutna spremenljivka
	
	//spremenljivke za Nastavitve pdf/rtf izvozov	
	var $export_font_size = 10;
	var $export_numbering = 0;
	var $export_show_if = 0;
	var $export_show_intro = 0;
	var $export_data_type = 0;	// nacin izpisa vprasanlnika - kratek -> 0, dolg -> 1, zelo kratek -> 2
	var $export_data_font_size;
	var $export_data_numbering;
	var $export_data_show_recnum;
	var $export_data_show_if;
	var $export_data_PB;
	var $export_data_skip_empty;
	var $export_data_skip_empty_sub;
	var $export_data_landscape;
	//spremenljivke za Nastavitve pdf/rtf izvozov - konec
	
	var $head;	// za shrambo tex preamble in zacetek dokumenta
	var $tail;		// za shrambo tex zakljucka dokumenta
	var $naslovnicaUkaz; //za shrambo ukaza za izris naslovnice dokumenta
	var $headerAndFooter; //za shrambo ukaza za izris glave in noge dokumenta
	protected $surveyStyle; //za shrambo environmenta vprasalnika (omogoca spreminjanje velikosti besedila glede na izbrano nastavitev)
	protected $analysisStyle; //za shrambo environmenta vprasalnika (omogoca spreminjanje velikosti besedila glede na izbrano nastavitev)
	protected $statusStyle; //za shrambo environmenta vprasalnika (omogoca spreminjanje velikosti besedila glede na izbrano nastavitev)
	
	protected $isAnswer = '';
	protected $isAnswerBreakPodVprasanjem = '';
	
	protected $xml='';
	
	function __construct($anketa=null){
		global $site_path, $global_user_id, $admin_type, $lang;		
		$this->anketa = $anketa;
	}
	###################################### konec construct-a
	
	public function createXmlDocument($export_type='', $export_subtype='', $export_format=''){
		global $lang, $site_path;
		
		// Ustvarimo ogrodje dokumenta (locena funkcija), glavo, nogo, naslovnico...		
		$this->InitDocumentVars($export_type, $export_subtype, $export_format);	//pridobi vse potrebne spremenljivke za ustvarjanje ogrodja dokumenta
		
		#spremenljivke#################################################################
		$datumGeneriranjaIzvoza = date("d. m. Y");
		
		$anketaUstvarjena = SurveyInfo::getInstance()->getSurveyInsertDate();
		$dolgoImeAnkete = SurveyInfo::getSurveyColumn('naslov');
		$kratkoImeAnkete = SurveyInfo::getSurveyColumn('akronim');		
		$steviloVprasanj = SurveyInfo::getSurveyQuestionCount();		
		$anketaSpremenjena = SurveyInfo::getSurveyEditDate();		
		$avtorAnkete = SurveyInfo::getSurveyInsertName();
		$avtorSpremenilAnketo = SurveyInfo::getSurveyEditName();		
		$surveyId = SurveyInfo::getSurveyId();
		$userName = SurveyInfo::getUserInsertInfo('name');
		$userSurname = SurveyInfo::getUserInsertInfo('surname');
		$enkaVersion = SurveyInfo::getEnkaVersion('value');
		$datumAktivacije = SurveyInfo::getSurveyStartsDate();
		$datumDeaktivacije = SurveyInfo::getSurveyExpireDate();
		$firstEntryDate = SurveyInfo::getSurveyFirstEntryDate();
		$lastEntryDate = SurveyInfo::getSurveyLastEntryDate();		
		$completedSurveys = SurveyInfo::getValidSurveysCount();
		$partiallyCompletedSurveys = SurveyInfo::getPartiallyValidSurveysCount();			
		$emptySurveys = SurveyInfo::getInvalidSurveysCount();
		
		$sas = new SurveyAdminSettings(0, $surveyId);
		$skupni_cas = $sas->testiranje_cas(1);
		
		################################################
		#spremenljivke################################################################# konec
		
		$xml = xmlwriter_open_memory(); //Creating new xmlwriter using memory for string output
		$this->xml = $xml;
		
		//zacetek xml dokumenta
		xmlwriter_set_indent($this->xml, 1);
		$res = xmlwriter_set_indent_string($this->xml, ' ');
		xmlwriter_start_document($this->xml, '1.0', 'UTF-8');
		//zacetek xml dokumenta - konec
		
		//Dodajanje DOCTYPE'<!DOCTYPE codeBook SYSTEM "http://www.ddialliance.org/sites/default/files/Version2-1.dtd">'
		xmlwriter_start_dtd($this->xml, 'codeBook', null, 'http://www.ddialliance.org/sites/default/files/Version2-1.dtd');
		xmlwriter_end_dtd($this->xml);
		//Dodajanje DOCTYPE - konec
		
		//Zacetek elementa codeBook
		xmlwriter_start_element($this->xml, 'codeBook');
		$attribute = 'version';
		$element = CODEBOOK_VERSION;
		$this->writeXmlAttr4Element($this->xml, $attribute, $element);
		//Zacetek elementa codeBook - konec
				
		//Element stdyDscr ##################################################################
		xmlwriter_start_element($this->xml, 'stdyDscr'); //Zacetek elementa stdyDscr
		
			xmlwriter_start_element($this->xml, 'citation'); //Zacetek elementa citation
			
				xmlwriter_start_element($this->xml, 'titlStmt'); //Zacetek elementa titlStmt					
					//Element titl		
					$element  = 'titl';
					$text = $dolgoImeAnkete;		
					$this->writeXmlElement($this->xml, $text, $element);
					//Element titl - konec
					
					//Element altTitl
					$element  = 'altTitl';
					$text = $kratkoImeAnkete;		
					$this->writeXmlElement($this->xml, $text, $element);
					//Element altTitl - konec
					
					//Element IDNo
					$element  = 'IDNo';
					$text = $surveyId;		
					$this->writeXmlElement($this->xml, $text, $element);
					//Element IDNo - konec					
				xmlwriter_end_element($this->xml); //Zakljucek elementa titlStmt
				
				xmlwriter_start_element($this->xml, 'rspStmt'); //Zacetek elementa rspStmt				
					//Element AuthEnty
					$element  = 'AuthEnty';
					//$text = $userName.' '.$userSurname;					
					$text = $avtorAnkete;					
					$this->writeXmlElement($this->xml, $text, $element);
					//Element AuthEnty - konec				
				xmlwriter_end_element($this->xml); //Zakljucek elementa rspStmt
				
				xmlwriter_start_element($this->xml, 'prodStmt'); //Zacetek elementa prodStmt				
					xmlwriter_start_element($this->xml, 'prodDate');	//Zacetek elementa prodDate
						$attribute = 'date';
						$element = date('Y-m-d');
						$writeAttribute = 1;
						$this->writeXmlAttr4Element($this->xml, $attribute, $element, $writeAttribute);
					xmlwriter_end_element($this->xml); //Zakljucek elementa prodDate

					xmlwriter_start_element($this->xml, 'software');	//Zacetek elementa software
						$attribute = 'version';
						$element = $enkaVersion;
						$writeAttribute = 0;
						$string = 1;
						$text = '1KA - OneClick Survey';
						$this->writeXmlAttr4Element($this->xml, $attribute, $element, $writeAttribute, $string, $text);
					xmlwriter_end_element($this->xml); //Zakljucek elementa software					
				xmlwriter_end_element($this->xml); //Zakljucek elementa prodStmt
				
				xmlwriter_start_element($this->xml, 'verStmt'); //Zacetek elementa verStmt				
					xmlwriter_start_element($this->xml, 'version');	//Zacetek elementa version
						
						//izpis type in date
						$attribute = 'type';
						$element = 'version';
						$this->writeXmlAttr4Element($this->xml, $attribute, $element);
						
						$attribute = 'date';
						$element = date('Y-m-d');
						$writeAttribute = 1;
						$this->writeXmlAttr4Element($this->xml, $attribute, $element, $writeAttribute);
					xmlwriter_end_element($this->xml); //Zakljucek elementa version					
				xmlwriter_end_element($this->xml); //Zakljucek elementa verStmt
			
			xmlwriter_end_element($this->xml); //Zakljucek elementa citation
			
			xmlwriter_start_element($this->xml, 'stdyInfo'); //Zacetek elementa stdyInfo
			
				xmlwriter_start_element($this->xml, 'sumDscr'); //Zacetek elementa sumDscr
				
					xmlwriter_start_element($this->xml, 'collDate');	//Zacetek elementa collDate						
						//izpis event in date
						$attribute = 'event';
						$element = 'start';
						$this->writeXmlAttr4Element($this->xml, $attribute, $element);
						
						$attribute = 'date';
						$date = date_create($datumAktivacije);
						$element = date_format($date, 'Y-m-d');
						$writeAttribute = 1;
						$this->writeXmlAttr4Element($this->xml, $attribute, $element, $writeAttribute);
					xmlwriter_end_element($this->xml); //Zakljucek elementa collDate
					
					xmlwriter_start_element($this->xml, 'collDate');	//Zacetek elementa collDate						
						//izpis event in date
						$attribute = 'event';
						$element = 'end';
						$this->writeXmlAttr4Element($this->xml, $attribute, $element);
						
						$attribute = 'date';
						$date = date_create($datumDeaktivacije);
						$element = date_format($date, 'Y-m-d');
						$writeAttribute = 1;
						$this->writeXmlAttr4Element($this->xml, $attribute, $element, $writeAttribute);
					xmlwriter_end_element($this->xml); //Zakljucek elementa collDate
					
					//Element dataKind
					$element  = 'dataKind';				
					$text = 'survey';					
					$this->writeXmlElement($this->xml, $text, $element);
					//Element dataKind - konec	
					
				xmlwriter_end_element($this->xml); //Zakljucek elementa sumDscr
				
			xmlwriter_end_element($this->xml); //Zakljucek elementa stdyInfo
			
			xmlwriter_start_element($this->xml, 'method'); //Zacetek elementa method
				
				xmlwriter_start_element($this->xml, 'dataCol'); //Zacetek elementa dataCol
					//Element collMode		
					$element  = 'collMode';
					$text = 'web survey';		
					$this->writeXmlElement($this->xml, $text, $element);
					//Element collMode - konec
					
					//Element collSitu
					$dateFirstEntryDate = date_create($firstEntryDate);
					$elementFirstEntryDate = date_format($dateFirstEntryDate, 'Y-m-d');
					$dateLastEntryDate = date_create($lastEntryDate);
					$elementLastEntryDate = date_format($dateLastEntryDate, 'Y-m-d');
					
					$element  = 'collSitu';
 					$text = '
						Completed questionnaires: '.$completedSurveys.' 
						Partially completed questionnaires:  '.$partiallyCompletedSurveys.' 
						Empty questionnaires: '.$emptySurveys.' 
						First entry: '.$elementFirstEntryDate.' 
						Last entry: '.$elementLastEntryDate.' 
						Average duration: '.$skupni_cas.' '; 
					xmlwriter_start_cdata($this->xml, $text);					
					xmlwriter_end_cdata($this->xml);
					
					$this->writeXmlElement($this->xml, $text, $element);
					//Element collSitu - konec
					
				xmlwriter_end_element($this->xml); //Zakljucek elementa dataCol
				
			xmlwriter_end_element($this->xml); //Zakljucek elementa method

			
		xmlwriter_end_element($this->xml); //Zakljucek elementa stdyDscr
		//Element stdyDscr - konec ##################################################################
		
		//Glede na tip in podtip poklicemo ustrezen razred za izris vsebine xml porocila
		switch ($export_type){
			case 'survey':
				$survey = new XmlSurvey($this->anketa, $export_format, $xml);
 				switch ($export_subtype){
					case 'q_empty_xml':
						$survey->displaySurvey($export_subtype, $this->export_data_type);
					break;
				}
			break;	
		}
		
		//Glede na tip in podtip poklicemo ustrezen razred za izris vsebine xml porocila - konec
		
		//Zakljucek elementa Codebook
		xmlwriter_end_element($this->xml);
		//Zakljucek elementa Codebook - konec
		
		//Zakljucek xml dokumenta
		xmlwriter_end_document($this->xml);

		$this->xml = xmlwriter_output_memory($xml);	//Returns current buffer with xml
		
		# generating xml file
 		$filename = 'export_'.$export_subtype.'_'.$surveyId.'.xml';

		$fp = fopen(admin_temp($filename), "w") or
				die ("cannot generate file $filename<br>\n");
		fwrite($fp, $this->xml) or
				die ("cannot send data to file<br>\n");
		fclose($fp);
		# generating xml file - konec
		
		# generating xml output
		$this->OutputXml($filename);
		# generating xml output - konec
		
	}
	###################################### konec funkcije createDocument
	
	
	#####################################################################################################
	//Podporne funkcije za delovanje createDocument
	#####################################################################################################
	function InitDocumentVars($export_type='', $export_subtype='', $export_format=''){
		global $site_path;
		
		$this->export_type = $export_type;
		$this->export_subtype = $export_subtype;
		$this->export_format = $export_format;		
		
		if($export_type == 'survey'){	//ce je format 'survey', potrebuje naslednje nastavitve			
			SurveySetting::getInstance()->Init($this->anketa);
		}
		
	}
	###################################### konec InitDocumentVars
	
	//Funkcija za generiranje in brisanje datotek za pdf izvoz
	function OutputXml($filename=''){
		//priprava header za xml in forced download
		header('Content-type: application/xml');
		header('Content-Disposition: attachment; filename="' . $filename . '"');
		//priprava header za xml in forced download - konec
		
		readfile(admin_temp($filename));
		
		//brisanje temp xml datoteke
		unlink(admin_temp($filename));
		//brisanje temp xml datoteke - konec
	}
	#############################################	
		
	function writeXmlAttr4Element($xml=null, $attribute=null, $element=null, $writeAttribute=0, $string=0, $text=''){
		$this->xml = $xml;		
		if($writeAttribute){
			xmlwriter_write_attribute($this->xml, $attribute, $element);
		}else{
			xmlwriter_start_attribute($this->xml,  $attribute);
		}
		xmlwriter_text($this->xml, $element);		
		xmlwriter_end_attribute($this->xml);
		
		if($string){
			xmlwriter_text($this->xml, $text);
		}		
	}
	
	function writeXmlElement($xml=null, $text=null, $element=null){
		$this->xml = $xml;
		xmlwriter_start_element($this->xml,  $element);
		xmlwriter_text($this->xml, $text);
		xmlwriter_end_element($this->xml);
	}	
}