summaryrefslogblamecommitdiffstats
path: root/admin/survey/export/class.ExportController.php
blob: e3318e8ee025a460d17f56f6950e7c7ebaa1d83d (plain) (tree)









































































































































                                                                                                                                                                    
                                                                                                                                                                                             


























































































































































                                                                                                                                                                                         
                                      























































                                                                                                                                                            
                                      































































































































                                                                                              
                                      




























                                                                                         
                                      
































































                                                                                                         
<?php

/**
 *
 *	Class ki skrbi za izvedbo ustreznega izvoza (prenešeno iz izvoz.php in dopolnjeno)
 *
 *
 *	Tipi izvoza:
 *	'survey' - izvoz vprašalnika (ankete)
 *		- 'q_empty' - prazen vprašalnik
 *		- 'q_data' - vprašalnik z vnešenimi odgovori za 1 respondenta
 *		- 'q_data_all' - vprašalnik z vnešenimi odgovori za vse respondente
 *		- 'q_comment' - vprašalnik s komentarji
 *
 *	'analysis' - izvoz analiz
 *		- 'sums' - sumarnik
 *		- 'freq' - frekvence 
 *		- 'desc' - opisne statistike
 *		- 'chart' - grafi
 *		- 'crosstab' - crosstabi
 *		- 'multicrosstab' - multi-crosstabi
 *		- 'mean' - povprečja
 *		- 'ttest' - ttest
 *		- 'break' - razbitje
 *		- 'heatmap' - heatmap
 *
 *	'creport' - izvoz poročila po meri sestavljenega iz različnih elementov analiz (custom report)
 *
 *	'status' - izvoz statusov (dashboard pod "Status->povzetek")
 *
 *	'data' - izvoz podatkov 
 *		- 'full' - celotna tabela podatkov - potrebno prenesti iz SurveyExport - TO SE LAHKO PRENAŠA NAKNADNO
 *		- 'list' - kratek izpis podatkov - samo prvih 5 spremenljivk
 *
 *	'other' - poseben izvoz (Evoli, Hierarhija, MFDPS, MJU...) 
 *		- 'usable' - uporabni respondenti
 *		- 'text_analysis' - analiza besedil v anketi
 *		- 'speeder' - speeder index
 *		- 'edits_analysis' - analiza urejanja ankete
 *		- 'evoli' 
 *		- 'evoli_teammeter' 
 *		- 'hierarhija' 
 *		- 'mfdps'
 *		- 'adecco_360' - treba dodatno prenesti
 *		- '1ka_360' - treba dodatno prenesti
 *
 *	'gdpr' - izvoz gdpr porocil (ce je vklopljen gdpr v anketi)
 *		- 'individual' - podrobnosti o zbiranju osebnih podatkov
 *		- 'activity' - evidenca dejavnosti obdelav	
 *	
 *	Formati izvoza:
 *		- 'pdf'
 *		- 'rtf'
 *		- 'xls'
 *		- 'csv'
 *		- 'txt'
 *		- 'html'
 *		- 'spss_syntax'
 *		- 'spss_sav'
 *		- 'ppt'
 *
 *
 */


//use Export\Latexclasses\LatexDocument as LatexDocument;
//include('../../function.php');
include('../../vendor/autoload.php');
include('export_definitions.php');

 
class ExportController{
	
	
	var $anketa;				// ID ankete
	
	
	function __construct(){
		global $site_path, $global_user_id, $admin_type, $lang;
		
		# če pridemo iz rekodiranga urlja
		if (!isset($_GET['anketa']) && isset($_GET['dc']) && $_GET['dc'] != null) {
			$data = $_GET['dc'];
			$data = base64_decode($data);
			$data = unserialize($data);
			foreach ($data AS $get_param => $value) {
				if ($get_param != null && $get_param != '' && $value != null && $value != '' && $value != 'undefined') {
					$_GET[$get_param] = $value;
				}
			}
		}

		// Nastavimo ID ankete
		$this->anketa = $_GET['anketa'];

		# PDF lahko vidijo vsi, ki kliknejo na link za kreacijo PDF-ja
		# zato, kadar uporabnik ni logiran v CMS za pdf nastavimo $global_user_id kateri je enak avtorju ankete
		if ($global_user_id === null || $global_user_id === 0) {
			$sql = sisplet_query("SELECT insert_uid FROM srv_anketa WHERE id='$this->anketa'");
			$row = mysqli_fetch_assoc($sql);
			$global_user_id = $row['insert_uid'];
		}

		// nastavimo jezik
		SurveyInfo::SurveyInit($this->anketa);
		$lang_admin = SurveyInfo::getInstance()->getSurveyColumn('lang_admin');		
		//$file = '../../../lang/'.$lang_admin.'.php';
		$file = $site_path.'lang/'.$lang_admin.'.php';		
		include($file);
	}
	
	
	// Izvedemo export
	public function executeExport(){
        global $site_path;
        
		// Nastavimo tip, podtip in format izvoza
		$export_type = $this->getExportType();
		$export_format = $this->getExportFormat();
		$exportType = $export_type['export_type'];
		$subtype = $export_type['export_subtype'];
    	
        /* echo "anketa: ".$this->anketa."</br>";
		echo "subtype: ".$subtype."</br>";
		echo "exportType: ".$exportType."</br>";
		echo "export_format: ".$export_format."</br>"; */
		
		// Posebni izvozi, ki se izvajajo drugje (za npr. locene module - evoli, mfdps...)
		if( $exportType == 'other' && in_array($subtype, array('evoli', 'evoli_teammeter', 'mfdps', 'heirarhija', 'text_analysis', 'usable', 'speeder')) ){
			$this->exportOther($subtype);	
		}
		else{
			switch($export_format){
				case 'pdf':
				case 'rtf':
				case 'html':
					// Ustvarimo latex dokument					
					$document = new LatexDocument($this->anketa);
					$document->createDocument($export_type['export_type'], $export_type['export_subtype'], $export_format, (isset($_GET['sprID'])?$_GET['sprID']:null));
					break;
				
				case 'xml':
					// Ustvarimo xml dokument
					$document = new XmlDocument($this->anketa);					
					$document->createXmlDocument($export_type['export_type'], $export_type['export_subtype'], $export_format);
					break;
					
 				case 'xls':		// Mogoce lahko tudi xls po novem naredimo preko html-ja iz latexa? Html tabele se naceloma vredu izpisejo v xls...		
				
					//Nov nacin izvoza xls iz Latex datoteke
					//$document = new LatexDocument($this->anketa);
					//$document->createDocument($export_type['export_type'], $export_type['export_subtype'], $export_format, $_GET['sprID']);
					//Nov nacin izvoza xls iz Latex datoteke - konec
					
					//Star nacin izvoza xls
  					switch($subtype){
						case 'sums':
							$path = $site_path.'admin/exportclases/class.xlsIzvozAnalizaSums.php';
							include ($path);
							$izvoz = new XlsIzvozAnalizaSums ($_GET['anketa'], $_GET['sprID'], $_GET['loop']);
						break;
						case 'desc':
 							$path = $site_path.'admin/exportclases/class.xlsIzvozAnalizaStatistics.php';
							include ($path);							
							$izvoz = new XlsIzvozAnalizaStatistics ($_GET['anketa'], $_GET['sprID'], $_GET['loop']);
						break;
						case 'freq':
 							$path = $site_path.'admin/exportclases/class.xlsIzvozAnalizaFrekvenca.php';
							include ($path);							
							$izvoz = new XlsIzvozAnalizaFrekvenca ($_GET['anketa'], $_GET['sprID'], $_GET['loop']);
						break;						
						case 'crosstab':
							//poberemo tabelo s podatki
 							$crossData1 = explode(",", $_GET['data1']);
							$crossData2 = explode(",", $_GET['data2']);
							$path = $site_path.'admin/exportclases/class.xlsIzvozAnalizaCrosstab.php';
							include ($path);							
							$izvoz = new XlsIzvozAnalizaCrosstab ($_GET['anketa'], $crossData1, $crossData2);
						break;						
						case 'multicrosstab':
 							$path = $site_path.'admin/exportclases/class.xlsIzvozAnalizaMultiCrosstab.php';
							include ($path);							
							$izvoz = new XlsIzvozAnalizaMultiCrosstab ($_GET['anketa']);
						break;						
						case 'mean':
 							$path = $site_path.'admin/exportclases/class.xlsIzvozAnalizaMean.php';
							include ($path);							
							$izvoz = new XlsIzvozAnalizaMean ($_GET['anketa']);
						break;						
						case 'ttest':
 							$path = $site_path.'admin/exportclases/class.xlsIzvozAnalizaTTest.php';
							include ($path);							
							$izvoz = new XlsIzvozAnalizaTTest ($_GET['anketa']);
						break;						
						case 'break':
 							$path = $site_path.'admin/exportclases/class.xlsIzvozAnalizaBreak.php';
							include ($path);							
							$izvoz = new XlsIzvozAnalizaBreak ($_GET['anketa']);
						break;
					}
					
					$izvoz->createXls();
					$izvoz->getFile('xls_analiza_'.$subtype.'_'.time().'.xls');
					//Star nacin izvoza xls - konec

					break;
					
				case 'ppt':
					switch($subtype){
						case 'chart':
							$path = $site_path.'admin/exportclases/class.pptIzvozAnalizaCharts.php';
							include ($path);
							$izvoz = new PptIzvozAnalizaCharts ($_GET['anketa'], $_GET['sprID'], $_GET['loop']);
							$izvoz->createPpt();
							$izvoz->getFile('ppt_analiza_'.$subtype.'_'.time().'.pptx');
						break;						
						case 'heatmap':
							$path = $site_path.'admin/exportclases/class.pptIzvozHeatmapImage.php';
							include ($path);
							$izvoz = new pptIzvozHeatmapImage ($_GET['anketa'], $_GET['sprID'], $_GET['loop']);
							$izvoz->createPpt();
							$izvoz->getFile('ppt_analiza_heatmap_image_'.$_GET['sprID'].'_'.time().'.ppt');
						break;
					}
					break;
				
				case 'csv':
				case 'txt':
				case 'spss_syntax':
				case 'spss_sav':			
					break;
			}
		}
	}
	
	// Izvozi, ki se izvedejo drugje v locenih modulih (npr. evoli, mfdps, hierarhija...)
	private function exportOther($subtype=''){
		global $site_path;
		switch($subtype){
			
			case 'evoli':
				$usr_id = (isset($_GET['usr_id']) && $_GET['usr_id'] > 0) ? $_GET['usr_id'] : 0; 
				$evoli = new SurveyEvoli($_GET['anketa']);
				$evoli->executeExport($usr_id);
				break;
				
			case 'evoli_teammeter':
				$skupina = (isset($_GET['skupina']) && $_GET['skupina'] > 0) ? $_GET['skupina'] : 0; 
				$evoli_tm = new SurveyTeamMeter($_GET['anketa']);
				$evoli_tm->executeExport($skupina);
				break;
				
			case 'mfdps':
				$usr_id = (isset($_GET['usr_id']) && $_GET['usr_id'] > 0) ? $_GET['usr_id'] : 0; 
				$evoli = new SurveyMFDPS($_GET['anketa']);
				$evoli->executePDFExport($usr_id);
				break;
				
			case 'hierarhija':
				//include ($site_path.'admin/survey/modules/mod_hierarhija/class/HierarhijaIzvozAnalize.php');
				$izvoz = new \Hierarhija\HierarhijaIzvozAnalize($_GET['anketa']);
				$izvoz->createPdf();

				$izvoz->getFile('pdf_analiza1'.time().'.pdf');
				break;
				
			case 'text_analysis':
				//include ($site_path.'admin/survey/classes/class.SurveyTextAnalysis.php');
				$STA = new SurveyTextAnalysis($_GET['anketa']);
				$STA->exportCSVTable($_GET['type']);
				break;
			
			case 'usable':
				$path = $site_path.'admin/exportclases/class.xlsIzvozUsable.php';
				include ($path);
				$izvoz = new XlsIzvozUsable ($_GET['anketa']);
				$izvoz->createXls();
				$izvoz->getFile('xls_usable'.time().'.xls');
				break;

			case 'speeder':
				include ($site_path.'admin/exportclases/class.xlsIzvozSpeeder.php');
				$izvoz = new XlsIzvozSpeeder ($_GET['anketa']);
				$izvoz->createXls();
				$izvoz->getFile('xls_speeder'.time().'.xls');
					break;
		}			
	}
	
	
		
	// Nastavimo tip izvoza
	private function getExportType(){
		global $site_path, $global_user_id, $admin_type, $lang;
		if(isset($_GET['a']))
		switch ( $_GET['a'] ) {
			case A_REPORT_VPRASALNIK_PDF:
			case A_REPORT_VPRASALNIK_RTF:
				$export_type = 'survey';
				$export_subtype = 'q_empty';
				break;
				
			case A_REPORT_VPRASALNIK_XML:
				$export_type = 'survey';
				$export_subtype = 'q_empty_xml';
				break;

			case A_REPORT_PDF_RESULTS:	
			case A_REPORT_RTF_RESULTS:	
				$export_type = 'survey';
				if(isset($_GET['usr_id']))
					$export_subtype = 'q_data'; 		// če je definiran $_GET['usr_id'] izpisemo samo njegove odgovore
				else
					$export_subtype = 'q_data_all';	// če ni usr_id definiran vprasalnike z odgovori vseh respondentov enega za drugim
				break;

			case A_REPORT_PDF_COMMENT:
			case A_REPORT_RTF_COMMENT:
				$export_type = 'survey';
				$export_subtype = 'q_comment';
				break;
			
			case A_REPORT_PDF_STATUS:
				$export_type = 'status';
				$export_subtype = 'status';
				break;
				
			case A_REPORT_PDF_EDITS_ANALYSIS:
				$export_type = 'other';
				$export_subtype = 'edits_analysis';
				break;
				
			case A_REPORT_PDF_LIST:
			case A_REPORT_RTF_LIST:
			case A_REPORT_XLS_LIST:
				$export_type = 'data';
				$export_subtype = 'list';
                break;
            
            case A_GDPR_PDF_INDIVIDUAL:
            case A_GDPR_RTF_INDIVIDUAL:
                $export_type = 'gdpr';
                $export_subtype = 'individual';
                break;
            
            case A_GDPR_PDF_ACTIVITY:
            case A_GDPR_RTF_ACTIVITY:
                $export_type = 'gdpr';
                $export_subtype = 'activity';
                break;
		}	
		if(isset($_GET['m']))
		switch ( $_GET['m'] ) {
			
			// Kakšna je razlika med tema dvema izvozoma??
			//case M_REPORT_ANALIZA_HEATMAP_IMAGE:
			//case M_REPORT_PDF_HEATMAP_IMAGE:				
			case M_REPORT_ANALIZA_PPT_HEATMAP_IMAGE:
				$export_type = 'analysis';
				$export_subtype = 'heatmap';
				break;
				
			case M_REPORT_ANALIZA_HEATMAP_IMAGE:
				$export_type = 'analysis';
				$export_subtype = 'heatmap_image';
				break;
				
			case M_REPORT_PDF_HEATMAP_IMAGE:
			case M_REPORT_ANALIZA_RTF_HEATMAP_IMAGE:
				$export_type = 'analysis';
				$export_subtype = 'heatmap_image_pdf';
				break;

			case M_REPORT_ANALIZA_PDF_SUMS:
			case M_REPORT_ANALIZA_RTF_SUMS:
			case M_REPORT_ANALIZA_XLS_SUMS:
				$export_type = 'analysis';
				$export_subtype = 'sums';
				break;
			
			case M_REPORT_ANALIZA_PDF_FREKVENCA:
			case M_REPORT_ANALIZA_RTF_FREKVENCA:
			case M_REPORT_ANALIZA_XLS_FREKVENCA:
				$export_type = 'analysis';
				$export_subtype = 'freq';
				break;
			
			case M_REPORT_ANALIZA_PDF_STAT:
			case M_REPORT_ANALIZA_RTF_STAT:
			case M_REPORT_ANALIZA_XLS_STAT:
				$export_type = 'analysis';
				$export_subtype = 'desc';
				break;
			
			case M_REPORT_ANALIZA_PDF_CHARTS:
			case M_REPORT_ANALIZA_RTF_CHARTS:
			case M_REPORT_ANALIZA_PPT_CHARTS:
				$export_type = 'analysis';
				$export_subtype = 'chart';
				break;
			
			case M_REPORT_ANALIZA_PDF_CROSSTAB_IZPIS:
			case M_REPORT_ANALIZA_RTF_CROSSTAB_IZPIS:
			case M_REPORT_ANALIZA_XLS_CROSSTAB_IZPIS:
				$export_type = 'analysis';
				$export_subtype = 'crosstab';
				break;
			
			case M_REPORT_ANALIZA_PDF_MULTICROSSTAB_IZPIS:
			case M_REPORT_ANALIZA_RTF_MULTICROSSTAB_IZPIS:
			case M_REPORT_ANALIZA_XLS_MULTICROSSTAB_IZPIS:
				$export_type = 'analysis';
				$export_subtype = 'multicrosstab';
				break;
			
			case M_REPORT_ANALIZA_PDF_MEAN_IZPIS:
			case M_REPORT_ANALIZA_RTF_MEAN_IZPIS:
			case M_REPORT_ANALIZA_XLS_MEAN_IZPIS:
				$export_type = 'analysis';
				$export_subtype = 'mean';
				break;
			
			case M_REPORT_ANALIZA_PDF_TTEST_IZPIS:
			case M_REPORT_ANALIZA_RTF_TTEST_IZPIS:
			case M_REPORT_ANALIZA_XLS_TTEST_IZPIS:
				$export_type = 'analysis';
				$export_subtype = 'ttest';
				break;
			
			case M_REPORT_ANALIZA_PDF_BREAK_IZPIS:
			case M_REPORT_ANALIZA_RTF_BREAK_IZPIS:
			case M_REPORT_ANALIZA_XLS_BREAK_IZPIS:
				$export_type = 'analysis';
				$export_subtype = 'break';
				break;
			
			case M_REPORT_ANALIZA_PDF_CREPORT:
			case M_REPORT_ANALIZA_RTF_CREPORT:
				$export_type = 'analysis';
				$export_subtype = 'creport';
				break;
								
			
			case M_REPORT_PDF_EVOLI:
				$export_type = 'other';
				$export_subtype = 'evoli';
				break;
			case M_REPORT_PDF_TEAMMETER:
				$export_type = 'other';
				$export_subtype = 'evoli_teammeter';
				break;
			case M_REPORT_PDF_MFDPS:
				$export_type = 'other';
				$export_subtype = 'mfdps';
				break;
			case M_REPORT_HIERARHIJA_PDF_IZPIS:
				$export_type = 'other';
				$export_subtype = 'hierarhija';
				break;
			case A_REPORT_XLS_USABLE:
				$export_type = 'other';
				$export_subtype = 'usable';
				break;
			case A_REPORT_XLS_SPEEDER:
				$export_type = 'other';
				$export_subtype = 'speeder';
				break;
			case A_REPORT_XLS_TEXT_ANALYSIS:
			case A_REPORT_CSV_TEXT_ANALYSIS:
				$export_type = 'other';
				$export_subtype = 'text_analysis';
				break;
		}
		
		return array('export_type'=>$export_type, 'export_subtype'=>$export_subtype);
	}
	
	// Nastavimo format izvoza
	private function getExportFormat(){
		global $site_path, $global_user_id, $admin_type, $lang;
		if(isset($_GET['a']))
		switch ( $_GET['a'] ) {
			case A_REPORT_VPRASALNIK_PDF:
			case A_REPORT_PDF_RESULTS:					
			case A_REPORT_PDF_COMMENT:
			case A_REPORT_PDF_STATUS:
			case A_REPORT_PDF_EDITS_ANALYSIS:
            case A_REPORT_PDF_LIST:
            case A_GDPR_PDF_INDIVIDUAL:
            case A_GDPR_PDF_ACTIVITY:
				$export_format = 'pdf';
				break;
				
			case A_REPORT_RTF_COMMENT:
			case A_REPORT_VPRASALNIK_RTF:
			case A_REPORT_RTF_RESULTS:
            case A_REPORT_RTF_LIST:
            case A_GDPR_RTF_INDIVIDUAL:
            case A_GDPR_RTF_ACTIVITY:
				$export_format = 'rtf';
				break;
				
			case A_REPORT_XLS_LIST:
				$export_format = 'xls';
				break;
			
			case A_REPORT_VPRASALNIK_XML:
				$export_format = 'xml';
				break;
		}	
		if(isset($_GET['m']))
		switch ( $_GET['m'] ) {
			
			// Kakšna je razlika med tema dvema izvozoma??
			case M_REPORT_ANALIZA_HEATMAP_IMAGE:		
			case M_REPORT_PDF_HEATMAP_IMAGE:		

			case M_REPORT_ANALIZA_PDF_FREKVENCA:
			case M_REPORT_ANALIZA_PDF_CROSSTAB_IZPIS:					
			case M_REPORT_ANALIZA_PDF_MULTICROSSTAB_IZPIS:
			case M_REPORT_ANALIZA_PDF_MEAN_IZPIS:
			case M_REPORT_ANALIZA_PDF_TTEST_IZPIS:
			case M_REPORT_ANALIZA_PDF_BREAK_IZPIS:
			case M_REPORT_ANALIZA_PDF_STAT:
			case M_REPORT_ANALIZA_PDF_SUMS:
			case M_REPORT_ANALIZA_PDF_CHARTS:
			case M_REPORT_ANALIZA_PDF_CREPORT:
			case M_REPORT_PDF_EVOLI:
			case M_REPORT_PDF_TEAMMETER:
			case M_REPORT_PDF_MFDPS:
			case M_REPORT_HIERARHIJA_PDF_IZPIS:
				$export_format = 'pdf';
				break;
	
			case M_REPORT_ANALIZA_RTF_STAT:
			case M_REPORT_ANALIZA_RTF_SUMS:
			case M_REPORT_ANALIZA_RTF_FREKVENCA:
			case M_REPORT_ANALIZA_RTF_CROSSTAB_IZPIS:
			case M_REPORT_ANALIZA_RTF_MULTICROSSTAB_IZPIS:
			case M_REPORT_ANALIZA_RTF_MEAN_IZPIS:
			case M_REPORT_ANALIZA_RTF_TTEST_IZPIS:
			case M_REPORT_ANALIZA_RTF_BREAK_IZPIS:
			case M_REPORT_ANALIZA_RTF_CHARTS:
			case M_REPORT_ANALIZA_RTF_CREPORT:
			case M_REPORT_ANALIZA_RTF_HEATMAP_IMAGE:
				$export_format = 'rtf';
				break;

			case M_REPORT_ANALIZA_XLS_FREKVENCA:
			case M_REPORT_ANALIZA_XLS_CROSSTAB_IZPIS:
			case M_REPORT_ANALIZA_XLS_MULTICROSSTAB_IZPIS:
			case M_REPORT_ANALIZA_XLS_STAT:
			case M_REPORT_ANALIZA_XLS_SUMS:
			case M_REPORT_ANALIZA_XLS_MEAN_IZPIS:
			case M_REPORT_ANALIZA_XLS_TTEST_IZPIS:
			case M_REPORT_ANALIZA_XLS_BREAK_IZPIS:
			case A_REPORT_XLS_USABLE:
			case A_REPORT_XLS_SPEEDER:
			case A_REPORT_XLS_TEXT_ANALYSIS:
				$export_format = 'xls';
				break;
				
			case A_REPORT_CSV_TEXT_ANALYSIS:
				$export_format = 'csv';
				break;

			case M_REPORT_ANALIZA_PPT_CHARTS:
			case M_REPORT_ANALIZA_PPT_HEATMAP_IMAGE:
				$export_format = 'ppt';
				break;
		}
		
		return $export_format;
	}
	
}