summaryrefslogblamecommitdiffstats
path: root/admin/survey/export/latexclasses/class.LatexAnalysis.php
blob: 98815ed462603bcd055edb30769a810bdf947ed5 (plain) (tree)























































































                                                                                                             

                                                                                                                                         
 











                                                                                                         


                                                                                    




















































                                                                                                                                                                                                
                                                                                                                  


                                                                                                                           
































































                                                                                                                                                                                          



                                                                                                                 




















                                                                                                                                                                              

                                                                                                             


                                                                                                                                                                       

                                                                                                


















                                                                                                                                                                                                                                                                                          
<?php

/**
 *
 *	Class ki skrbi za izris porocila analiz v latex
 *
 *
 */


//include('../../function.php');
include('../../vendor/autoload.php');
include_once('../../function.php');
include_once('../survey/definition.php');

 
class LatexAnalysis{
	
	protected $anketa;
	protected $export_format;
	protected $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
	protected $pdf;
	protected $currentStyle;
	protected $spremenljivka = null;
	
	private $headFileName = null;					# pot do header fajla
	
	protected $current_loop = 'undefined';
	
	protected $texNewLine = '\\\\ ';
	protected $texBigSkip = '\bigskip';
	
	
	function __construct($anketa=null, $export_format='', $sprID = null){
		global $site_path, $global_user_id, $admin_type, $lang;
		
		// preverimo ali imamo stevilko ankete
		if ( is_numeric($anketa) ){
		
			$this->anketa['id'] = $anketa;
			
			$this->spremenljivka = $sprID;
			
			$this->export_format = $export_format;
			//echo 'To je tip analysis za anketo: '.$anketa.' za '.$this->export_format.'</br>';
			
			SurveyAnalysis::Init($this->anketa['id']);
			SurveyAnalysis::$setUpJSAnaliza = false;
						
            // Poskrbimo za datoteko s podatki
            $SDF = SurveyDataFile::get_instance();
            $SDF->init($this->anketa['id']);           
            $SDF->prepareFiles();  

            $this->headFileName = $SDF->getHeaderFileName();
			
			$loop = SurveyZankaProfiles :: Init($this->anketa, $global_user_id);

			$this->current_loop = ($loop != null) ? $loop : $this->current_loop;
		}else{
			$this->pi['msg'] = "Anketa ni izbrana!";
			$this->pi['canCreate'] = false;
			return false;
		}

		//if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init()){
		if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) ){
			$this->anketa['uid'] = $global_user_id;
			SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
		}else{
			return false;
		}
			
		// ce smo prisli do tu je vse ok
		$this->pi['canCreate'] = true;

		return true;		
	}
	
		
	public function displayAnalysis($export_subtype=''){
		global $lang;
		$tex = '';

		// Pripravimo podatke, ki se uporabijo v tabelah		
		# preberemo header
		if ($this->headFileName !== null) {
			//polovimo podatke o nastavitvah trenutnega profila (missingi..)
			SurveyMissingProfiles :: Init($this->spremenljivka,$this->anketa['uid']);
			SurveyAnalysis::$missingProfileData = SurveyMissingProfiles::getProfile(SurveyAnalysis::$currentMissingProfile);

			// Preverimo ce imamo zanke (po skupinah)
			SurveyAnalysis::$_LOOPS = SurveyZankaProfiles::getFiltersForLoops();

			#preberemo HEADERS iz datoteke
			SurveyAnalysis::$_HEADERS = unserialize(file_get_contents($this->headFileName));
			//echo $this->headFileName."</br>";

			# polovimo frekvence
			SurveyAnalysis::getFrequencys();

			#odstranimo sistemske variable
			SurveyAnalysis::removeSystemVariables();
			
			//$vars_count = count(SurveyAnalysis::$_FILTRED_VARIABLES);
			
			/*Izpis naslova izvoza*/
			switch ( $export_subtype ){
				case 'sums':
					$naslovIzvoza = $lang['export_analisys_sums'];
				break;
				case 'freq':
					$naslovIzvoza = $lang['export_analisys_freq'];
				break;
				case 'desc':
					$naslovIzvoza = $lang['export_analisys_desc'];
				break;
				case 'chart':
					$naslovIzvoza = $lang['export_analisys_charts'];
				break;
				case 'crosstab':
					$naslovIzvoza = $lang['export_analisys_crosstabs'];
				break;
				case 'multicrosstab':
					$naslovIzvoza = $lang['export_analisys_multicrosstabs'];
				break;
				case 'mean':
					$naslovIzvoza = $lang['export_analisys_means'];
				break;
				case 'ttest':
					$naslovIzvoza = $lang['export_analisys_ttest'];
				break;
				case 'break':
					$naslovIzvoza = $lang['export_analisys_break'];
				break;
				case 'heatmap_image_pdf':
					$naslovIzvoza = $lang['export_analysis_heatmap_image'];
				break;
			}			
			
			if($export_subtype!='creport'){
				//$tex .= '\textbf{'.$naslovIzvoza.'}'.$this->texBigSkip.$this->texNewLine;
				$tex .= '\MakeUppercase{\huge \textbf{'.$naslovIzvoza.'}}'.$this->texBigSkip.$this->texNewLine;	//{\\huge {'.$imeAnkete.'} \\par}
			}

			
			/*Izpis naslova izvoza - konec*/
			
			//if($this->export_format == 'pdf'){
			if($this->export_format == 'pdf'&&$export_subtype!='creport'){
				$tex .= '\begin{tableAnalysis}';	/*zacetek environmenta z manjsim fontom*/
			}

 			switch ($export_subtype){
				case 'sums':
				case 'freq':
					foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
						$analysisTable = new LatexAnalysisElement($this->anketa, $spremenljivka, $this->export_format, 0, $spid, $this->headFileName, $export_subtype);
						//if(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]){							
						if ((isset($spremenljivka['tip']) && $spremenljivka['tip'] != 'm'
						 && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES )) 
						 && (!isset($_spid) || (isset($_spid) && $_spid == $spid))
						 &&	($this->spremenljivka == $spid || $this->spremenljivka == null) ){
							# če nimamo zank
							if(count(SurveyAnalysis::$_LOOPS) == 0){
								$tex .= $analysisTable->displayTablesLatex($spid, $this->export_format);
							}
							else{
								// izrisemo samo eno tabelo iz enega loopa
								if($this->current_loop > 0){
									
									$loop = SurveyAnalysis::$_LOOPS[(int)$this->current_loop-1];
									$loop['cnt'] = $this->current_loop;
									SurveyAnalysis::$_CURRENT_LOOP = $loop;
									
									// Izpisemo naslov zanke za skupino
									$tex .= $analysisTable->displayTablesLatex($spid, $this->export_format);
								}
								// Izrisemo vse tabele spremenljivka (iz vseh loopov)
								else{
									$loop_cnt = 0;
									# če mamo zanke
									foreach(SurveyAnalysis::$_LOOPS AS $loop) {
										$loop_cnt++;
										$loop['cnt'] = $loop_cnt;
										SurveyAnalysis::$_CURRENT_LOOP = $loop;
										$tex .= $analysisTable->displayTablesLatex($spid, $this->export_format);
									}
								}
							}
						}					
					} // end foreach SurveyAnalysis::$_HEADERS
				break;
				case 'desc':
					//$analysisTable = new LatexAnalysisElement($this->anketa, $spremenljivka, $this->export_format, 0, $spid, $this->headFileName, $export_subtype);
					
 					$analysisTable = new LatexAnalysisElement($this->anketa, 0, $this->export_format, 0, 0, $this->headFileName, $export_subtype);
						
						# če nimamo zank
						if(count(SurveyAnalysis::$_LOOPS) == 0){
							$tex .= $analysisTable->displayTablesLatex(0, $this->export_format);
						}
						else{
							// izrisemo samo eno tabelo iz enega loopa
							if($this->current_loop > 0){
								
								$loop = SurveyAnalysis::$_LOOPS[(int)$this->current_loop-1];
								$loop['cnt'] = $this->current_loop;
								SurveyAnalysis::$_CURRENT_LOOP = $loop;
								
								// Izpisemo naslov zanke za skupino
								$tex .= $analysisTable->displayTablesLatex(0, $this->export_format);
							}
							// Izrisemo vse tabele spremenljivka (iz vseh loopov)
							else{
								$loop_cnt = 0;
								# če mamo zanke
								foreach(SurveyAnalysis::$_LOOPS AS $loop) {
									$loop_cnt++;
									$loop['cnt'] = $loop_cnt;
									SurveyAnalysis::$_CURRENT_LOOP = $loop;
									$tex .= $analysisTable->displayTablesLatex(0, $this->export_format);
								}
							}
						}
					
				break;
				case 'crosstab':
					$tmp_data1 = isset($_GET['data1'])?$_GET['data1']:null;
					$tmp_data2 = isset($_GET['data2'])?$_GET['data2']:null;
					$crossData1 = explode(",", $tmp_data1);
					$crossData2 = explode(",", $tmp_data2);					
					$analysisTable = new LatexAnalysisElement($this->anketa, 0, $this->export_format, 0, 0, $this->headFileName, $export_subtype);
					$tex .= $analysisTable->displayCrosstabsTablesLatex($crossData1, $crossData2);
				break;
				case 'multicrosstab':
					$analysisTable = new LatexAnalysisElement($this->anketa, 0, $this->export_format, 0, 0, $this->headFileName, $export_subtype);
					$tex .= $analysisTable->displayMultiCrosstabsTablesLatex();
				break;
				case 'mean':
					$analysisTable = new LatexAnalysisElement($this->anketa, 0, $this->export_format, 0, 0, $this->headFileName, $export_subtype);
					$tex .= $analysisTable->displayMeanTablesLatex();					
				break;
				case 'ttest':
					$analysisTable = new LatexAnalysisElement($this->anketa, 0, $this->export_format, 0, 0, $this->headFileName, $export_subtype);
					$tex .= $analysisTable->displayTTestTablesLatex();
				break;
				case 'break':
					$analysisTable = new LatexAnalysisElement($this->anketa, 0, $this->export_format, 0, 0, $this->headFileName, $export_subtype);
					$tex .= $analysisTable->displayBreakTablesLatex();
				break;
				case 'heatmap_image_pdf':
					$analysisHeatmapImage = new LatexAnalysisElement($this->anketa, 0, $this->export_format, 0, 0, $this->headFileName, $export_subtype);
					$tmp_sprID = isset($_GET['sprID'])?$_GET['sprID']:null;
					$tex .= $analysisHeatmapImage->displayHeatmapImageLatex($tmp_sprID);
				break;
				case 'chart':
					$analysisChart = new LatexAnalysisElement($this->anketa, 0, $this->export_format, 0, 0, $this->headFileName, $export_subtype);
					$tmp_sprID = isset($_GET['sprID'])?$_GET['sprID']:null;
					$tex .= $analysisChart->displayChartLatex($tmp_sprID);
				break;
				case 'creport':
					$analysisCreport = new LatexAnalysisElement($this->anketa, 0, $this->export_format, 0, 0, $this->headFileName, $export_subtype);
					$tex .= $analysisCreport->displayCreportLatex();
				break;
			}
			
			
			//if($this->export_format == 'pdf'){
			if($this->export_format == 'pdf'&&$export_subtype!='creport'){
				$tex .= '\end{tableAnalysis}';	/*zakljucek environmenta z manjsim fontom*/
			}
			
		} // end if else ($_headFileName == null)
		return $tex;
		// Loop cez vsa vprasanja
		// Znotraj loopa vsak element posebej izrisemo kot objekt LatexFreqElement - pomembno, ker zelimo recimo posamezno tabelo frekvenc (sa specificno vprasanje) izrisati tudi v kaksnem drugem porocilu (npr custom report). Zato se mora vsak element neodvisno izrisovati.
	}
}