x => spr_id * -> y => loop id * -> z => grid_id * -> y => variable id * */ public $variablesList = null; # Seznam vseh variabel nad katerimi lahko izvajamo crostabulacije (zakeširamo) public $selectedVars = null; # Seznam izbranih variabel v tabeli public $crosstabData = null; # Izracunani podatki za izbrane spremenljivke public $crosstabClass = null; # Instanca crosstab razreda (za racunanje) public $colSpan = 0; # Celoten span stolpcev (stevilo vseh childov) public $rowSpan = 0; # Celoten span vrstic (stevilo vseh childov) public $colLevel2 = false; # Ali imamo v stolpcih kaksen 2. nivo public $rowLevel2 = false; # Ali imamo v vrsticah kaksen 2. nivo public $fullColSpan = 0; # Celoten span stolpcev (stevilo vseh childov) z sumami (ce jih imamo) public $isCheckbox = false; # Ce je kaksen checkbox v tabeli - potem imamo opcijo navedbe/enote /** * Inicializacija * * @param int $anketa */ public function __construct( $anketa = null ) { global $global_user_id, $site_path, $lang; // če je podan ID ankete if ((int)$anketa > 0) { $this->ank_id = $anketa; // Poskrbimo za datoteko s podatki $SDF = SurveyDataFile::get_instance(); $SDF->init($this->ank_id); $SDF->prepareFiles(); $this->headFileName = $SDF->getHeaderFileName(); $this->dataFileName = $SDF->getDataFileName(); $this->dataFileStatus = $SDF->getStatus(); # polovimo vrsto tabel (aktivne / neaktivne) SurveyInfo :: getInstance()->SurveyInit($this->ank_id); $this->db_table = SurveyInfo::getInstance()->getSurveyArchiveDBString(); // Pri glasovanju tega ne pustimo if(SurveyInfo::getInstance()->getSurveyColumn("survey_type") == 0){ die(); } $this->_CURRENT_STATUS_FILTER = STATUS_FIELD.' ~ /6|5/'; SurveyStatusProfiles::Init($this->ank_id); SurveyMissingProfiles :: Init($this->ank_id, $global_user_id); SurveyConditionProfiles :: Init($this->ank_id, $global_user_id); SurveyZankaProfiles :: Init($this->ank_id, $global_user_id); SurveyTimeProfiles :: Init($this->ank_id, $global_user_id); SurveyDataSettingProfiles :: Init($this->ank_id); # nastavimo vse filtre $this->setUpFilter(); SurveyUserSetting::getInstance()->Init($this->ank_id, $global_user_id); # Ce ne obstaja nobena tabela jo ustvarimo $sql = sisplet_query("SELECT id FROM srv_mc_table WHERE ank_id='$this->ank_id' AND usr_id='$global_user_id'"); if(mysqli_num_rows($sql) == 0){ $name = $lang['srv_table'].' 1'; sisplet_query("INSERT INTO srv_mc_table (ank_id, usr_id, time_created, name) VALUES('$this->ank_id', '$global_user_id', NOW(), '$name')"); $table_id = mysqli_insert_id($GLOBALS['connect_db']); $this->table_id = $table_id; SurveyUserSetting :: getInstance()->saveSettings('default_mc_table', $table_id); $this->table_settings[$this->table_id] = array( 'title' => '', 'numerus' => 1, 'percent' => 0, 'sums' => 0, 'navVsEno' => 1, 'avgVar' => '', 'delezVar' => '', 'delez' => '' ); } else{ $this->table_id = SurveyUserSetting :: getInstance()->getSettings('default_mc_table'); // Preberemo nastavitve trenutno izbrane tabele if(isset($this->table_id) && $this->table_id != ''){ $sql = sisplet_query("SELECT * FROM srv_mc_table WHERE id='$this->table_id' AND ank_id='$this->ank_id' AND usr_id='$global_user_id'"); } else{ $sql = sisplet_query("SELECT * FROM srv_mc_table WHERE ank_id='$this->ank_id' AND usr_id='$global_user_id' ORDER BY time_created ASC"); } $row = mysqli_fetch_array($sql); $this->table_id = $row['id']; $this->table_settings[$this->table_id] = array( 'title' => $row['title'], 'numerus' => $row['numerus'], 'percent' => $row['percent'], 'sums' => $row['sums'], 'navVsEno' => $row['navVsEno'], 'avgVar' => $row['avgVar'], 'delezVar' => $row['delezVar'], 'delez' => $row['delez'] ); } } else { die("Napaka!"); } } /** Funkcija ki nastavi vse filtre * */ private function setUpFilter() { if ($this->dataFileStatus == FILE_STATUS_NO_DATA || $this->dataFileStatus == FILE_STATUS_NO_FILE || $this->dataFileStatus == FILE_STATUS_SRV_DELETED){ return false; } if ($this->headFileName !== null && $this->headFileName != '') { $this->_HEADERS = unserialize(file_get_contents($this->headFileName)); } # poiščemo kater profil uporablja uporabnik $_currentMissingProfile = SurveyUserSetting :: getInstance()->getSettings('default_missing_profile'); $this->currentMissingProfile = (isset($_currentMissingProfile) ? $_currentMissingProfile : 1); # filtriranje po statusih $this->_CURRENT_STATUS_FILTER = SurveyStatusProfiles :: getStatusAsAWKString(); # filtriranje po časih $_time_profile_awk = SurveyTimeProfiles :: getFilterForAWK($this->_HEADERS['unx_ins_date']['grids']['0']['variables']['0']['sequence']); # dodamo še ife SurveyConditionProfiles :: setHeader($this->_HEADERS); $_condition_profile_AWK = SurveyConditionProfiles:: getAwkConditionString(); if (($_condition_profile_AWK != "" && $_condition_profile_AWK != null ) || ($_time_profile_awk != "" && $_time_profile_awk != null)) { $this->_CURRENT_STATUS_FILTER = '('.$this->_CURRENT_STATUS_FILTER; if ($_condition_profile_AWK != "" && $_condition_profile_AWK != null ) { $this->_CURRENT_STATUS_FILTER .= ' && '.$_condition_profile_AWK; } if ($_time_profile_awk != "" && $_time_profile_awk != null) { $this->_CURRENT_STATUS_FILTER .= ' && '.$_time_profile_awk; } $this->_CURRENT_STATUS_FILTER .= ')'; } $status_filter = $this->_CURRENT_STATUS_FILTER; if ($this->dataFileStatus == FILE_STATUS_OK || $this->dataFileStatus == FILE_STATUS_OLD) { if (isset($this->_HEADERS['testdata'])) { $this->_HAS_TEST_DATA = true; } } } function display () { global $lang; global $global_user_id; // Napolnimo variable s katerimi lahko operiramo $this->getVariableList(); //$this->displayLinks(); $this->displayFilters(); $this->displayExport(); echo '
'; // Div s spremenljivkami za drag - zaenkrat samo radio, checkbox, dropdown, multigrid, multicheckbox - ZAENKRAT BREZ CHECKBOXOV (2,16)! echo '
'; // Izris diva za izbiro tabele $this->displayMCTablesPopups(); // Izris diva za nastavitve tabele echo '
'; $this->displayTableSettings(); echo '
'; // Naslov tabele echo '
'; $this->displayTableTitle($this->table_settings[$this->table_id]['title']); echo '
'; // Izris tabele echo '
'; $this->displayTable(); echo '
'; echo '
'; } // Prikaze tabelo s podatki public function displayTable(){ global $lang; global $site_url; // Napolnimo variable ki so ze izbrane $this->getSelectedVars(); // Zvezdica za creport - ce smo v custom reportu tega ne izpisemo /*if($_GET['m'] != 'analysis_creport'){ echo '
'; // Zvezdica za vkljucitev v porocilo SurveyAnalysisHelper::getInstance()->addCustomReportElement($type=10, $sub_type=0, $spr1=$this->table_id); echo '
'; }*/ echo ''; // Imamo 2 nivoja if($this->colLevel2){ // Izrisemo VERTIKALNO izbrane spremenljivkec - 1. vrstica if($this->rowSpan == 0) $colspan = ' colspan="1"'; elseif(!$this->rowLevel2) $colspan = ' colspan="2"'; else $colspan = ' colspan="4"'; echo ''; if(count($this->selectedVars['ver'])){ foreach($this->selectedVars['ver'] as $var){ $rowspan = count($var['sub']) > 0 ? '':' rowspan="2"'; $colspan = ' colspan="'.$var['span'].'"'; echo ''; } } // Izrisemo se zadnjo prazno navpicno celico vrstico echo ''; echo ''; // Izrisemo VARIABLE za spremenljivko - 2. vrstica if($this->rowSpan == 0) $colspan = ' colspan="1"'; elseif(!$this->rowLevel2) $colspan = ' colspan="2"'; else $colspan = ' colspan="4"'; echo ''; if(count($this->selectedVars['ver'])){ foreach($this->selectedVars['ver'] as $var){ if(count($var['sub']) > 0){ // Loop cez variable spremenljivke foreach($this->variablesList[$var['spr']]['options'] as $option){ $colspan = ' colspan="'.( $var['span'] / count($this->variablesList[$var['spr']]['options']) ).'"'; echo ''; } } } } echo ''; // Izris vrstic za 2. nivo - 3. in 4. vrstica if($this->rowSpan == 0) $colspan = ' colspan="1"'; elseif(!$this->rowLevel2) $colspan = ' colspan="2"'; else $colspan = ' colspan="4"'; echo ''; if(count($this->selectedVars['ver'])){ foreach($this->selectedVars['ver'] as $parentVar){ foreach($this->variablesList[$parentVar['spr']]['options'] as $option){ // ce imamo childe na 2. nivoju if(count($parentVar['sub']) > 0){ foreach($parentVar['sub'] as $var){ $colspan = ' colspan="'.( count($this->variablesList[$var['spr']]['options']) ).'"'; echo ''; } } else{ $rowspan = ' rowspan="2"'; $colspan = ' colspan="'.( $parentVar['span'] / count($this->variablesList[$parentVar['spr']]['options']) ).'"'; echo ''; } } } } echo ''; if($this->rowSpan == 0) $colspan = ' colspan="1"'; elseif(!$this->rowLevel2) $colspan = ' colspan="2"'; else $colspan = ' colspan="4"'; echo ''; if(count($this->selectedVars['ver'])){ foreach($this->selectedVars['ver'] as $parentVar){ foreach($this->variablesList[$parentVar['spr']]['options'] as $option){ // ce imamo childe na 2. nivoju if(count($parentVar['sub']) > 0){ foreach($parentVar['sub'] as $var){ foreach($this->variablesList[$var['spr']]['options'] as $suboption){ echo ''; } } } } } } echo ''; } // Imamo samo 1 nivo else{ // Izrisemo VERTIKALNO izbrane spremenljivkec - 1. vrstica if($this->rowSpan == 0) $colspan = ' colspan="1"'; elseif(!$this->rowLevel2) $colspan = ' colspan="2"'; else $colspan = ' colspan="4"'; echo ''; if(isset($this->selectedVars['ver'])&&count($this->selectedVars['ver'])){ foreach($this->selectedVars['ver'] as $var){ $colspan = ' colspan="'.($this->table_settings[$this->table_id]['sums'] == 1 && !$this->rowLevel2 ? $var['span']+1 : $var['span']).'"'; echo ''; } } // Nimamo nobene vertikalne spremenljivke in 2 horizontalni elseif($this->rowLevel2){ echo ''; } // Izrisemo se zadnjo prazno navpicno celico vrstico echo ''; echo ''; // Izrisemo VARIABLE za spremenljivko - 2. vrstica if($this->rowSpan == 0) $colspan = ' colspan="1"'; elseif(!$this->rowLevel2) $colspan = ' colspan="2"'; else $colspan = ' colspan="4"'; echo ''; if(isset($this->selectedVars['ver'])&&count($this->selectedVars['ver'])){ foreach($this->selectedVars['ver'] as $var){ // Loop cez variable spremenljivke foreach($this->variablesList[$var['spr']]['options'] as $option){ $colspan = ' colspan="'.( $var['span'] / count($this->variablesList[$var['spr']]['options']) ).'"'; echo ''; } // Suma (ce jo imamo vklopljeno) if($this->table_settings[$this->table_id]['sums'] == 1 && !$this->rowLevel2){ echo ''; } } } echo ''; } // Izrisemo HORIZONTALNO izbrane variable if(isset($this->selectedVars['hor'])&&count($this->selectedVars['hor'])){ // Imamo 2 nivoja vrstic if($this->rowLevel2){ foreach($this->selectedVars['hor'] as $parentVar){ $cnt = 0; $order0 = 0; foreach($this->variablesList[$parentVar['spr']]['options'] as $option){ $cnt2 = 0; // ce imamo childe na 2. nivoju if(count($parentVar['sub']) > 0){ foreach($parentVar['sub'] as $var){ $cnt3 = 0; foreach($this->variablesList[$var['spr']]['options'] as $suboption){ echo ''; if($cnt == 0){ $span = $this->table_settings[$this->table_id]['sums'] == 1 && count($this->selectedVars['ver']) == 0 ? $parentVar['span']+(count($parentVar['sub'])*count($this->variablesList[$parentVar['spr']]['options'])) : $parentVar['span']; $rowspan = ' rowspan="'.$span.'"'; echo ''; } // Variabla if($cnt2 == 0){ $span = $this->table_settings[$this->table_id]['sums'] == 1 && count($this->selectedVars['ver']) == 0 ? $parentVar['span'] / count($this->variablesList[$parentVar['spr']]['options']) + count($parentVar['sub']) : $parentVar['span'] / count($this->variablesList[$parentVar['spr']]['options']); $rowspan = ' rowspan="'.$span.'"'; echo ''; } if($cnt3 == 0){ $span = $this->table_settings[$this->table_id]['sums'] == 1 && count($this->selectedVars['ver']) == 0 ? count($this->variablesList[$var['spr']]['options']) + 1 : count($this->variablesList[$var['spr']]['options']); $rowspan = ' rowspan="'.$span.'"'; echo ''; } // Variabla 2 echo ''; // Celice s podatki $this->displayDataCells($parentVar, $order0, $var, $cnt3); echo ''; echo ''; $cnt++; $cnt2++; $cnt3++; } $order0++; // Izrisemo se sumo ce je vklopljena if($this->table_settings[$this->table_id]['sums'] == 1 && count($this->selectedVars['ver']) == 0){ echo ''; echo ''; $crosstabs = $this->crosstabData[$parentVar['spr'].'-'.$var['spr']]; $keys1 = array_keys($crosstabs['options2']); $key = ceil($cnt / (count($this->variablesList[$var['spr']]['options'])*count($parentVar['sub']))) - 1; $val = $keys1[$key]; $this->displaySumsCell($parentVar, $var, $val, $orientation=0); echo ''; echo ''; } } } else{ echo ''; if($cnt == 0){ $rowspan = ' rowspan="'.$parentVar['span'].'"'; echo ''; } // Variabla $rowspan = ' rowspan="'.( $parentVar['span'] / count($this->variablesList[$parentVar['spr']]['options']) ).'"'; echo ''; // Celice s podatki $this->displayDataCells($parentVar, $cnt); echo ''; echo ''; $cnt++; } } } } // Imamo samo 1 nivo vrstic else{ foreach($this->selectedVars['hor'] as $var){ $cnt = 0; foreach($this->variablesList[$var['spr']]['options'] as $option){ echo ''; if($cnt == 0){ $rowspan = ' rowspan="'.($this->table_settings[$this->table_id]['sums'] == 1 && count($this->selectedVars['ver']) > 0 && !$this->colLevel2 ? $var['span']+1 : $var['span']).'"'; echo ''; } // Variabla echo ''; // Celice s podatki $this->displayDataCells($var, $cnt); echo ''; echo ''; $cnt++; } // Vrstica za sumo (ce jo imamo vklopljeno) if($this->table_settings[$this->table_id]['sums'] == 1 && count($this->selectedVars['ver']) > 0 && !$this->colLevel2){ echo ''; echo ''; // Loop cez vse stolpce foreach($this->selectedVars['ver'] as $spr2){ // Loop cez variable trenutnega stolpca $cnt = 0; foreach($this->variablesList[$spr2['spr']]['options'] as $var2){ $crosstabs = $this->crosstabData[$var['spr'].'-'.$spr2['spr']]; $keys1 = array_keys($crosstabs['options1']); $val = $keys1[$cnt]; $this->displaySumsCell($var, $spr2, $val, $orientation=1); $cnt++; } // Krizanje navpicne in vodoravne sume $this->displaySumsCell($var, $spr2, 0, $orientation=2); } echo ''; echo ''; } } } } // Izrisemo se zadnjo prazno vodoravno vrstico echo ''; if($this->rowSpan == 0) $colspan = ' colspan="1"'; elseif(!$this->rowLevel2) $colspan = ' colspan="2"'; else $colspan = ' colspan="4"'; echo ''; for($i=0; $i<=$this->colSpan; $i++){ echo ''; } // Dodatne prazne celice ce imamo sumo if($this->table_settings[$this->table_id]['sums'] == 1 && ((!$this->colLevel2 && !$this->rowLevel2) || count($this->selectedVars['ver']) == 0)){ for($i=0; $iselectedVars['ver']); $i++){ echo ''; } if(count($this->selectedVars['ver']) == 0 && $this->rowLevel2) echo ''; } echo ''; echo '
'; echo $this->snippet($this->variablesList[$var['spr']]['naslov'], 25); // Gumb za brisanje echo '
'; echo '
'.$lang['srv_multicrosstabs_add'].'
'; echo $this->snippet($option, 25); echo '
'; echo $this->snippet($this->variablesList[$var['spr']]['naslov'], 25); // Gumb za brisanje echo '
'; echo '
'; echo $this->snippet($option, 25); echo '
'; echo $this->snippet($suboption, 25); // Gumb za brisanje echo '
'; echo '
'; echo $this->snippet($this->variablesList[$var['spr']]['naslov'], 25); // Gumb za brisanje echo '
'; echo '
'.$lang['srv_multicrosstabs_add'].'
'; echo $this->snippet($option, 25); echo ''; echo $lang['srv_analiza_crosstab_skupaj']; echo '
'; echo $this->snippet($this->variablesList[$parentVar['spr']]['naslov'], 25); // Gumb za brisanje echo '
'; echo '
'; echo $this->snippet($option, 25); echo ''; echo $this->snippet($this->variablesList[$var['spr']]['naslov'], 25); // Gumb za brisanje echo '
'; echo '
'; echo $this->snippet($suboption, 25); echo '
'.$lang['srv_analiza_crosstab_skupaj'].'
'; echo $this->snippet($this->variablesList[$parentVar['spr']]['naslov'], 25); // Gumb za brisanje echo '
'; echo '
'; echo $this->snippet($option, 25); echo '
'; echo $this->snippet($this->variablesList[$var['spr']]['naslov'], 25); // Gumb za brisanje echo '
'; echo '
'; echo $this->snippet($option, 25); echo '
'.$lang['srv_analiza_crosstab_skupaj'].'
'; echo $lang['srv_multicrosstabs_add']; echo '
'; // Izrisemo legendo echo '
'; $this->displayLegend(); echo '
'; // JS echo ''; } // Izpis celic v vrstici s podatki function displayDataCells($spr1, $var1, $spr2='', $var2=''){ // Ce nimamo nobenega krizanja izpisemo prazne if($spr2 == '' && $this->colSpan == 0){ for($i=0; $i<$this->colSpan; $i++){ echo ''; } } // Ce nimamo stolpcev - krizanje dveh vrstic elseif($spr2 != '' && $this->colSpan == 0){ $spr1_temp = explode('-', $spr1['spr']); $grd = $this->variablesList[$spr1['spr']]['grd_id']; $variabla1 = array('seq' => $spr1_temp[1], 'spr' => $spr1_temp[0], 'grd' => $grd); $spr2_temp = explode('-', $spr2['spr']); $grd = $this->variablesList[$spr2['spr']]['grd_id']; $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd); // Ce se nimamo izracunanih rezultatov jih izracunamo if(isset($this->crosstabData[$spr1['spr'].'-'.$spr2['spr']])) $crosstabs = $this->crosstabData[$spr1['spr'].'-'.$spr2['spr']]; else{ $variables = array(); $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']); $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']); $this->crosstabData[$spr1['spr'].'-'.$spr2['spr']] = $this->createCrostabulation($variables); $crosstabs = $this->crosstabData[$spr1['spr'].'-'.$spr2['spr']]; } //$var1 = floor(($var1) / (count($this->variablesList[$spr2['spr']]['options'])*count($spr1['sub']))); $keys1 = array_keys($crosstabs['options1']); $val1 = $keys1[$var1]; $keys2 = array_keys($crosstabs['options2']); $val2 = $keys2[$var2]; $crosstab = (isset($crosstabs['crosstab'][$val1][$val2])) ? $crosstabs['crosstab'][$val1][$val2] : 0; $percent = ($crosstab > 0) ? $this->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0; $avg = (isset($crosstabs['avg'][$val1][$val2])) ? $crosstabs['avg'][$val1][$val2] : 0; $delez = (isset($crosstabs['delez'][$val1][$val2])) ? $crosstabs['delez'][$val1][$val2] : 0; $this->displayDataCell($crosstab, $percent, $avg, $delez); } // Krizanje 1 vrstice in 1 stolpca elseif($spr2 == '' && !$this->colLevel2){ // Loop cez vse stolpce foreach($this->selectedVars['ver'] as $spr2){ $spr1_temp = explode('-', $spr1['spr']); $grd = $this->variablesList[$spr1['spr']]['grd_id']; $variabla1 = array('seq' => $spr1_temp[1], 'spr' => $spr1_temp[0], 'grd' => $grd); $spr2_temp = explode('-', $spr2['spr']); $grd = $this->variablesList[$spr2['spr']]['grd_id']; $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd); // Ce se nimamo izracunanih rezultatov jih izracunamo if(isset($this->crosstabData[$spr1['spr'].'-'.$spr2['spr']])) $crosstabs = $this->crosstabData[$spr1['spr'].'-'.$spr2['spr']]; else{ $variables = array(); $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']); $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']); $this->crosstabData[$spr1['spr'].'-'.$spr2['spr']] = $this->createCrostabulation($variables); $crosstabs = $this->crosstabData[$spr1['spr'].'-'.$spr2['spr']]; } $keys1 = array_keys($crosstabs['options1']); $val1 = $keys1[$var1]; // Loop cez variable trenutnega stolpca $cnt = 0; foreach($this->variablesList[$spr2['spr']]['options'] as $var2){ $keys2 = array_keys($crosstabs['options2']); $val2 = $keys2[$cnt]; $crosstab = (isset($crosstabs['crosstab'][$val1][$val2])) ? $crosstabs['crosstab'][$val1][$val2] : 0; $percent = ($crosstab > 0) ? $this->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0; $avg = (isset($crosstabs['avg'][$val1][$val2])) ? $crosstabs['avg'][$val1][$val2] : 0; $delez = (isset($crosstabs['delez'][$val1][$val2])) ? $crosstabs['delez'][$val1][$val2] : 0; $this->displayDataCell($crosstab, $percent, $avg, $delez); $cnt++; } // Suma (ce jo imamo vklopljeno) if($this->table_settings[$this->table_id]['sums'] == 1 && !$this->rowLevel2){ $this->displaySumsCell($spr1, $spr2, $val1, $orientation=0); } } } // Izpisemo vecnivojske podatke (krizanje 3 ali 4 spremenljivk) else{ // Nastavimo 1. vrsticno variablo $spr1_temp = explode('-', $spr1['spr']); $grd = $this->variablesList[$spr1['spr']]['grd_id']; $variabla1 = array('seq' => $spr1_temp[1], 'spr' => $spr1_temp[0], 'grd' => $grd); // Krizanje 2 vrstic in 1 stolpca if(!$this->colLevel2){ // Nastavimo 2. vrsticno variablo $spr2_temp = explode('-', $spr2['spr']); $grd = $this->variablesList[$spr2['spr']]['grd_id']; $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd); // Loop cez vse stolpce foreach($this->selectedVars['ver'] as $spr3){ $spr3_temp = explode('-', $spr3['spr']); $grd = $this->variablesList[$spr3['spr']]['grd_id']; $variabla3 = array('seq' => $spr3_temp[1], 'spr' => $spr3_temp[0], 'grd' => $grd); // Ce se nimamo izracunanih rezultatov jih izracunamo if(isset($this->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']])) $crosstabs = $this->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']]; else{ $variables = array(); $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']); $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']); $variables[2] = array('seq' => $variabla3['seq'], 'spr' => $variabla3['spr'], 'grd' => $variabla3['grd']); $this->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']] = $this->createCrostabulation($variables); $crosstabs = $this->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']]; } $keys1 = array_keys($crosstabs['options1']); $val1 = $keys1[$var1]; $keys2 = array_keys($crosstabs['options2']); $val2 = $keys2[$var2]; // Loop cez variable trenutnega stolpca $cnt = 0; foreach($this->variablesList[$spr3['spr']]['options'] as $var3){ $keys3 = array_keys($crosstabs['options3']); $val3 = $keys3[$cnt]; $crosstab = (isset($crosstabs['crosstab'][$val1][$val2][$val3])) ? $crosstabs['crosstab'][$val1][$val2][$val3] : 0; $percent = ($crosstab > 0) ? $this->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0; $avg = (isset($crosstabs['avg'][$val1][$val2][$val3])) ? $crosstabs['avg'][$val1][$val2][$val3] : 0; $delez = (isset($crosstabs['delez'][$val1][$val2][$val3])) ? $crosstabs['delez'][$val1][$val2][$val3] : 0; $this->displayDataCell($crosstab, $percent, $avg, $delez); $cnt++; } } } // Krizanje 1 vrstice in 2 stolpcev elseif($spr2 == ''){ // Loop cez vse stolpce 1. navpicne spremenljivke foreach($this->selectedVars['ver'] as $spr2){ $spr2_temp = explode('-', $spr2['spr']); $grd = $this->variablesList[$spr2['spr']]['grd_id']; $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd); // Loop cez variable 1. navpicne spremnljivke $cnt2 = 0; foreach($this->variablesList[$spr2['spr']]['options'] as $var2){ // Loop cez vse navpicne spremenljivke 2. nivoja - ce obstajajo if(count($spr2['sub']) > 0){ foreach($spr2['sub'] as $spr3){ // Nastavimo navpicno spremenljivko 2. nivoja $spr3_temp = explode('-', $spr3['spr']); $grd = $this->variablesList[$spr3['spr']]['grd_id']; $variabla3 = array('seq' => $spr3_temp[1], 'spr' => $spr3_temp[0], 'grd' => $grd); // Ce se nimamo izracunanih rezultatov jih izracunamo if(isset($this->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']])) $crosstabs = $this->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']]; else{ $variables = array(); $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']); $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']); $variables[2] = array('seq' => $variabla3['seq'], 'spr' => $variabla3['spr'], 'grd' => $variabla3['grd']); $this->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']] = $this->createCrostabulation($variables); $crosstabs = $this->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']]; } $keys1 = array_keys($crosstabs['options1']); $val1 = $keys1[$var1]; $keys2 = array_keys($crosstabs['options2']); $val2 = $keys2[$cnt2]; // Loop cez variable spremenljivke 2. nivoja $cnt3 = 0; foreach($this->variablesList[$spr3['spr']]['options'] as $var3){ $keys3 = array_keys($crosstabs['options3']); $val3 = $keys3[$cnt3]; $crosstab = (isset($crosstabs['crosstab'][$val1][$val2][$val3])) ? $crosstabs['crosstab'][$val1][$val2][$val3] : 0; $percent = ($crosstab > 0) ? $this->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0; $avg = (isset($crosstabs['avg'][$val1][$val2][$val3])) ? $crosstabs['avg'][$val1][$val2][$val3] : 0; $delez = (isset($crosstabs['delez'][$val1][$val2][$val3])) ? $crosstabs['delez'][$val1][$val2][$val3] : 0; $this->displayDataCell($crosstab, $percent, $avg, $delez); $cnt3++; } } } // 1 nivojska spremenljivka v stolpcu else{ // Ce se nimamo izracunanih rezultatov jih izracunamo if(isset($this->crosstabData[$spr1['spr'].'-'.$spr2['spr']])) $crosstabs = $this->crosstabData[$spr1['spr'].'-'.$spr2['spr']]; else{ $variables = array(); $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']); $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']); $this->crosstabData[$spr1['spr'].'-'.$spr2['spr']] = $this->createCrostabulation($variables); $crosstabs = $this->crosstabData[$spr1['spr'].'-'.$spr2['spr']]; } $keys1 = array_keys($crosstabs['options1']); $val1 = $keys1[$var1]; $keys2 = array_keys($crosstabs['options2']); $val2 = $keys2[$cnt2]; $crosstab = (isset($crosstabs['crosstab'][$val1][$val2])) ? $crosstabs['crosstab'][$val1][$val2] : 0; $percent = ($crosstab > 0) ? $this->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0; $avg = (isset($crosstabs['avg'][$val1][$val2])) ? $crosstabs['avg'][$val1][$val2] : 0; $delez = (isset($crosstabs['delez'][$val1][$val2])) ? $crosstabs['delez'][$val1][$val2] : 0; $this->displayDataCell($crosstab, $percent, $avg, $delez); } $cnt2++; } } } // Krizanje 2 vrstic in 2 stolpcev else{ // Nastavimo 2. vrsticno variablo $spr2_temp = explode('-', $spr2['spr']); $grd = $this->variablesList[$spr2['spr']]['grd_id']; $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd); // Loop cez vse stolpce 1. navpicne spremenljivke foreach($this->selectedVars['ver'] as $spr3){ $spr3_temp = explode('-', $spr3['spr']); $grd = $this->variablesList[$spr3['spr']]['grd_id']; $variabla3 = array('seq' => $spr3_temp[1], 'spr' => $spr3_temp[0], 'grd' => $grd); // Loop cez variable 1. navpicne spremnljivke $cnt3 = 0; foreach($this->variablesList[$spr3['spr']]['options'] as $var3){ // Loop cez vse navpicne spremenljivke 2. nivoja if(count($spr3['sub']) > 0){ foreach($spr3['sub'] as $spr4){ // Nastavimo navpicno spremenljivko 2. nivoja $spr4_temp = explode('-', $spr4['spr']); $grd = $this->variablesList[$spr4['spr']]['grd_id']; $variabla4 = array('seq' => $spr4_temp[1], 'spr' => $spr4_temp[0], 'grd' => $grd); // Ce se nimamo izracunanih rezultatov jih izracunamo if(isset($this->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr'].'-'.$spr4['spr']])) $crosstabs = $this->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr'].'-'.$spr4['spr']]; else{ $variables = array(); $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']); $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']); $variables[2] = array('seq' => $variabla3['seq'], 'spr' => $variabla3['spr'], 'grd' => $variabla3['grd']); $variables[3] = array('seq' => $variabla4['seq'], 'spr' => $variabla4['spr'], 'grd' => $variabla4['grd']); $this->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr'].'-'.$spr4['spr']] = $this->createCrostabulation($variables); $crosstabs = $this->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr'].'-'.$spr4['spr']]; } $keys1 = array_keys($crosstabs['options1']); $val1 = $keys1[$var1]; $keys2 = array_keys($crosstabs['options2']); $val2 = $keys2[$var2]; $keys3 = array_keys($crosstabs['options3']); $val3 = $keys3[$cnt3]; // Loop cez variable spremenljivke 2. nivoja $cnt4 = 0; foreach($this->variablesList[$spr4['spr']]['options'] as $var4){ $keys4 = array_keys($crosstabs['options4']); $val4 = $keys4[$cnt4]; $crosstab = (isset($crosstabs['crosstab'][$val1][$val2][$val3][$val4])) ? $crosstabs['crosstab'][$val1][$val2][$val3][$val4] : 0; $percent = ($crosstab > 0) ? $this->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0; $avg = (isset($crosstabs['avg'][$val1][$val2][$val3][$val4])) ? $crosstabs['avg'][$val1][$val2][$val3][$val4] : 0; $delez = (isset($crosstabs['delez'][$val1][$val2][$val3][$val4])) ? $crosstabs['delez'][$val1][$val2][$val3][$val4] : 0; $this->displayDataCell($crosstab, $percent, $avg, $delez); $cnt4++; } } } // 1 nivo navpicne spremenljivke else{ // Ce se nimamo izracunanih rezultatov jih izracunamo if(isset($this->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']])) $crosstabs = $this->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']]; else{ $variables = array(); $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']); $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']); $variables[2] = array('seq' => $variabla3['seq'], 'spr' => $variabla3['spr'], 'grd' => $variabla3['grd']); $this->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']] = $this->createCrostabulation($variables); $crosstabs = $this->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']]; } $keys1 = array_keys($crosstabs['options1']); $val1 = $keys1[$var1]; $keys2 = array_keys($crosstabs['options2']); $val2 = $keys2[$var2]; $keys3 = array_keys($crosstabs['options3']); $val3 = $keys3[$cnt3]; $crosstab = (isset($crosstabs['crosstab'][$val1][$val2][$val3])) ? $crosstabs['crosstab'][$val1][$val2][$val3] : 0; $percent = ($crosstab > 0) ? $this->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0; $avg = (isset($crosstabs['avg'][$val1][$val2][$val3])) ? $crosstabs['avg'][$val1][$val2][$val3] : 0; $delez = (isset($crosstabs['delez'][$val1][$val2][$val3])) ? $crosstabs['delez'][$val1][$val2][$val3] : 0; $this->displayDataCell($crosstab, $percent, $avg, $delez); } $cnt3++; } } } // Loop cez vse stolpce /*for($i=0; $i<$this->colSpan; $i++){ echo ''; }*/ } } // Izpis celic v vrstici s sumami ($orientation 0->vrstica, 1->stolpec, 2->skupaj) function displaySumsCell($spr1, $spr2, $val, $orientation){ $crosstabs = $this->crosstabData[$spr1['spr'].'-'.$spr2['spr']]; echo ''; echo ''; // Celica s skupno sumo if($orientation == 2){ // Numerus if($this->table_settings[$this->table_id]['numerus'] == 1){ echo ''; } // Procenti if($this->table_settings[$this->table_id]['percent'] == 1){ echo ''; } // Povprecje if($this->table_settings[$this->table_id]['avgVar'] > 0){ // Loop cez vse in izracunamo povprecje z ustreznimi utezmi $avg = 0; if($crosstabs['crosstab']){ $tempAvg = 0; foreach($crosstabs['crosstab'] as $key1 => $row){ foreach($row as $key2 => $count){ $tempAvg += $count * $crosstabs['avg'][$key1][$key2]; } } $avg = ($crosstabs['sumaSkupna'] > 0) ? $tempAvg / $crosstabs['sumaSkupna'] : 0; } echo ''; } // Delez if($this->table_settings[$this->table_id]['delezVar'] > 0){ // Loop cez vrstico in izracunamo skupen delez $delez = 0; if($crosstabs['delez']){ foreach($crosstabs['delez'] as $row){ foreach($row as $tempDelez){ $delez += $tempDelez; } } } echo ''; } } // Suma na koncu vrstice elseif($orientation == 0){ // Izpisemo podatek if($crosstabs['sumaVrstica'][$val]){ // Numerus if($this->table_settings[$this->table_id]['numerus'] == 1){ echo ''; } // Procenti if($this->table_settings[$this->table_id]['percent'] == 1){ echo ''; } } else{ // Numerus if($this->table_settings[$this->table_id]['numerus'] == 1){ echo ''; } // Procenti if($this->table_settings[$this->table_id]['percent'] == 1){ echo ''; } } // Povprecje if($this->table_settings[$this->table_id]['avgVar'] > 0){ // Loop cez vrstico in izracunamo povprecje z ustreznimi utezmi $avg = 0; if($crosstabs['crosstab'][$val]){ $tempAvg = 0; foreach($crosstabs['crosstab'][$val] as $key => $count){ $tempAvg += $count * $crosstabs['avg'][$val][$key]; } $avg = ($crosstabs['sumaVrstica'][$val] > 0) ? $tempAvg / $crosstabs['sumaVrstica'][$val] : 0; } echo ''; } // Delez if($this->table_settings[$this->table_id]['delezVar'] > 0){ // Loop cez vrstico in izracunamo skupen delez $delez = 0; if($crosstabs['delez'][$val]){ foreach($crosstabs['delez'][$val] as $tempDelez){ $delez += $tempDelez; } } echo ''; } } // Suma za stolpce else{ // Izpisemo podatek if(isset($crosstabs['sumaStolpec'][$val])){ // Numerus if($this->table_settings[$this->table_id]['numerus'] == 1){ echo ''; } // Procenti if($this->table_settings[$this->table_id]['percent'] == 1){ echo ''; } } else{ // Numerus if($this->table_settings[$this->table_id]['numerus'] == 1){ echo ''; } // Procenti if($this->table_settings[$this->table_id]['percent'] == 1){ echo ''; } } // Povprecje if($this->table_settings[$this->table_id]['avgVar'] > 0){ // Loop cez vrstico in izracunamo povprecje z ustreznimi utezmi $avg = 0; if($crosstabs['crosstab']){ $tempAvg = 0; foreach($crosstabs['crosstab'] as $key => $row){ if($row[$val] > 0) $tempAvg += $row[$val] * $crosstabs['avg'][$key][$val]; } $avg = ($crosstabs['sumaStolpec'][$val] > 0) ? $tempAvg / $crosstabs['sumaStolpec'][$val] : 0; } echo ''; } // Delez if($this->table_settings[$this->table_id]['delezVar'] > 0){ // Loop cez vrstico in izracunamo skupen delez $delez = 0; if($crosstabs['delez']){ foreach($crosstabs['delez'] as $tempDelez){ $delez += $tempDelez[$val]; } } echo ''; } } echo '
'; echo ($crosstabs['sumaSkupna'] != '') ? $crosstabs['sumaSkupna'] : '0'; echo '
'; echo $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'); echo '
'; echo $this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE')); echo '
'; echo $this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'); echo '
'; echo $crosstabs['sumaVrstica'][$val]; echo '
'; echo $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'); echo '
'; echo '0'; echo '
'; echo $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'); echo '
'; echo $this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE')); echo '
'; echo $this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'); echo '
'; echo $crosstabs['sumaStolpec'][$val]; echo '
'; echo $this->formatNumber($this->getCrossTabPercentage($crosstabs['sumaSkupna'], $crosstabs['sumaStolpec'][$val]), SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'); echo '
'; echo '0'; echo '
'; echo $this->formatNumber(0, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'); echo '
'; echo $this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE')); echo '
'; echo $this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'); echo '
'; echo ''; } // Izpis celice z vrednostmi function displayDataCell($crosstab, $percent, $avg, $delez){ echo ''; echo ''; if($crosstab > 0){ // Numerus if($this->table_settings[$this->table_id]['numerus'] == 1){ echo ''; } // Procenti if($this->table_settings[$this->table_id]['percent'] == 1){ echo ''; } } else{ // Numerus if($this->table_settings[$this->table_id]['numerus'] == 1){ echo ''; } // Procenti if($this->table_settings[$this->table_id]['percent'] == 1){ echo ''; } } // Povprecje if($this->table_settings[$this->table_id]['avgVar'] > 0){ echo ''; } // Delez if($this->table_settings[$this->table_id]['delezVar'] > 0){ echo ''; } echo '
'; echo $crosstab; echo '
'; echo $this->formatNumber($percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'); echo '
'; echo '0'; echo '
'; echo $this->formatNumber(0, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'); echo '
'; echo $this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE')); echo '
'; //echo $this->formatNumber($delez, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE')); echo $this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'); echo '
'; echo ''; } function displayTableTitle($title){ global $lang; $titleString = ($title == '') ? $lang['srv_table'] : $title; echo '
'; echo $titleString; echo '
'; } // Izpisemo nastavitve za tabelo (procenti, numerus, navedbe/enote...) function displayTableSettings(){ global $lang; echo '

'.$lang['srv_multicrosstabs_settings'].'

'; /*echo 'table_settings[$this->table_id]['numerus'] == 1 ? ' checked="checked"':'').' onclick="changeMCSettings(\''.$this->table_id.'\', \'numerus\');" />'; echo 'table_settings[$this->table_id]['percent'] == 1 ? ' checked="checked"':'').' onclick="changeMCSettings(\''.$this->table_id.'\', \'percent\');" />'; //echo 'table_settings[$this->table_id]['avg'] == 1 ? ' checked="checked"':'').' onclick="changeMCSettings(\''.$this->table_id.'\', \'avg\');" />'; echo 'table_settings[$this->table_id]['sums'] == 1 ? ' checked="checked"':'').' onclick="changeMCSettings(\''.$this->table_id.'\', \'sums\');" />'; if($this->isCheckbox){ echo ''; echo ''; echo ' '; echo ''; }*/ echo '
'; echo ''; echo ''; echo '

'.$lang['srv_multicrosstabs_settings_val'].'

'; echo '
'; // Prikaz numerusa echo '
'; echo 'table_settings[$this->table_id]['numerus'] == 1 ? ' checked="checked"':'').' value="1" />'; echo '
'; // Prikaz procentov echo '
'; echo 'table_settings[$this->table_id]['percent'] == 1 ? ' checked="checked"':'').' value="1" />'; echo '
'; // Prikaz vsot echo '
'; echo 'table_settings[$this->table_id]['sums'] == 1 ? ' checked="checked"':'').' value="1" />'; echo '
'; echo '
'; echo '

'.$lang['srv_multicrosstabs_settings_avg'].'

'; // Variabla za racunanje povprecja - numeric in ordinal (radio, dropdown, mg) $checked = $this->table_settings[$this->table_id]['avgVar'] == '' ? false : true; echo '
'; echo '
'; echo ''; echo '
'; echo ''; echo '
'; echo '

'.$lang['srv_multicrosstabs_settings_del'].'

'; // Variabla za racunanje deleza - ordinal in nominal (radio, dropdown, mg, po novem tudi checkbox, multicheckbox) $checked = $this->table_settings[$this->table_id]['delezVar'] == '' ? false : true; echo '
'; echo '
'; echo ''; echo '
'; echo ''; echo '
'; echo ''; echo '
'; // Gumbi na dnu echo '
'; echo ''; echo ''; echo '
'; } // Prikazemo opcije variable (checkboxe) za delez function displayDelez($var){ // Ce imamo nastavljeno variablo za delez prikazemo vse njene opcije if($var != ''){ $delez = unserialize($this->table_settings[$this->table_id]['delez']); $cnt = 0; foreach($this->variablesList[$var]['options'] as $option){ if($this->table_settings[$this->table_id]['delezVar'] == $var) $val = $delez[$cnt]; else $val = 0; echo '
'; echo '
'; echo ''; echo '
'; echo '
'; $cnt++; } } } // Prikazuje filtre function displayFilters() { if ($this->dataFileStatus == FILE_STATUS_SRV_DELETED || $this->dataFileStatus == FILE_STATUS_NO_DATA){ return false; } # nastavitve tabele multicrosstab $SSH = new SurveyStaticHtml($this->ank_id); $SSH -> displayMulticrosstabSettings(); } // Prikaze dropdown z linki function displayLinks() { # izrišemo navigacijo za analize $SSH = new SurveyStaticHtml($this->ank_id); $SSH -> displayAnalizaSubNavigation(); } // Prikaze izvoz za PDF/RTF function displayExport () { $href_print = makeEncodedIzvozUrlString('izvoz.php?b=export&m=multicrosstabs_izpis&anketa='.$this->ank_id); $href_pdf = makeEncodedIzvozUrlString('izvoz.php?b=export&m=multicrosstabs_izpis&anketa='.$this->ank_id); $href_rtf = makeEncodedIzvozUrlString('izvoz.php?b=export&m=multicrosstabs_izpis_rtf&anketa='.$this->ank_id); $href_xls = makeEncodedIzvozUrlString('izvoz.php?b=export&m=multicrosstabs_izpis_xls&anketa='.$this->ank_id); echo ''; } // Prikazemo legendo (povprecje, delez) function displayLegend(){ global $lang; if($this->table_settings[$this->table_id]['avgVar'] > 0 || $this->table_settings[$this->table_id]['delezVar'] > 0){ echo '
'; // Povprecje if($this->table_settings[$this->table_id]['avgVar'] > 0){ echo ''.$lang['srv_multicrosstabs_avg'].': '.$this->variablesList[$this->table_settings[$this->table_id]['avgVar']]['variable'].''; } // Delez if($this->table_settings[$this->table_id]['delezVar'] > 0){ echo ''.$lang['srv_multicrosstabs_delez'].': '.$this->variablesList[$this->table_settings[$this->table_id]['delezVar']]['variable']; $delez = unserialize($this->table_settings[$this->table_id]['delez']); $string = ''; $cnt = 1; foreach($delez as $val){ if($val == 1) $string .= $cnt.', '; $cnt++; } echo ' ('.substr($string, 0, -2).')'; } echo '
'; } } // funkcija vrne seznam variabel za drag public function getVariableList() { if (isset($this->variablesList) && is_array($this->variablesList) && count($this->variablesList) > 0) { return $this->variablesList; } else { # pobrišemo array() $this->variablesList = array(); # zloopamo skozi header in dodamo variable (potrebujemo posamezne sekvence) foreach ($this->_HEADERS AS $skey => $spremenljivka) { if (isset($spremenljivka['hide_system'])&&(int)$spremenljivka['hide_system'] == 1 && in_array($spremenljivka['variable'],array('email','ime','priimek','telefon','naziv','drugo'))) { continue; } $tip = isset($spremenljivka['tip'])?$spremenljivka['tip']:null; if (is_numeric($tip) # tekstovnih tipov ne dodajamo && $tip != 4 #text && $tip != 5 #label #&& $tip != 7 #number #&& $tip != 8 #datum && $tip != 9 #SN-imena #&& $tip != 18 #vsota #&& $tip != 19 #multitext #&& $tip != 20 #multinumber #&& $tip != 21 #besedilo* && $tip != 22 #compute && $tip != 25 #kvota ) { $cnt_all = (int)$spremenljivka['cnt_all']; # radio in select in checkbox if ($cnt_all == '1' || $tip == 1 || $tip == 3 || $tip == 2) { # pri tipu radio ali select dodamo tisto variablo ki ni polje "drugo" if ($tip == 1 || $tip == 3 ) { if (count($spremenljivka['grids']) == 1 ) { # če imamo samo en grid ( lahko je več variabel zaradi polja drugo. $grid = $spremenljivka['grids'][0]; if (count ($grid['variables']) > 0) { foreach ($grid['variables'] AS $vid => $variable ){ if ($variable['other'] != 1) { // Napolnimo variable $options = $spremenljivka['options']; # imamo samo eno sekvenco grids[0]variables[0] $this->variablesList[$skey.'-'.$spremenljivka['grids'][0]['variables'][$vid]['sequence']] = array( 'tip'=>$tip, 'spr_id'=>$skey, 'grd_id'=>'undefined', 'sequence'=>$spremenljivka['grids'][0]['variables'][$vid]['sequence'], 'naslov'=>strip_tags($spremenljivka['naslov']), 'variable'=>$spremenljivka['variable'], 'canChoose'=>true, 'sub'=>0, /*'cnt'=>count($spremenljivka['options']), 'options'=>$spremenljivka['options']);*/ 'options'=>$options); } } } } } else { // Napolnimo variable $options = array(); foreach($spremenljivka['grids'][0]['variables'] as $key => $var){ if(!$var['other']) $options[($key+1)] = $var['naslov']; } # imamo samo eno sekvenco grids[0]variables[0] $this->variablesList[$skey.'-'.$spremenljivka['grids'][0]['variables'][0]['sequence']] = array( 'tip'=>$tip, 'spr_id'=>$skey, 'grd_id'=>'undefined', 'sequence'=>$spremenljivka['grids'][0]['variables'][0]['sequence'], 'naslov'=>strip_tags($spremenljivka['naslov']), 'variable'=>$spremenljivka['variable'], 'canChoose'=>true, 'sub'=>0, /*'cnt'=>count($spremenljivka['grids'][0]));var_dump($spremenljivka['grids'][0]['variables']);*/ 'options'=>$options); } } else if ($cnt_all > 1){ # imamo več skupin ali podskupin, zato zlopamo skozi gride in variable if (count($spremenljivka['grids']) > 0 ) { $this->variablesList[$skey] = array( 'tip'=>$tip, 'naslov'=>strip_tags($spremenljivka['naslov']), 'variable'=>$spremenljivka['variable'], 'canChoose'=>false, 'sub'=>0); # ali imamo en grid, ali več (ranking, vsota, text(vec kosov), number(vec kosov)) if (count($spremenljivka['grids']) == 1 ) { # če imamo samo en grid ( lahko je več variabel zaradi polja drugo. $grid = $spremenljivka['grids'][0]; if (count ($grid['variables']) > 0) { foreach ($grid['variables'] AS $vid => $variable ){ if ($variable['other'] != 1) { // Napolnimo variable $options = array(); foreach($spremenljivka['grids'][0]['variables'] as $key => $var){ if(!$var['other']) $options[($key+1)] = $var['naslov']; } $this->variablesList[$skey.'-'.$variable['sequence']] = array( 'tip'=>$tip, 'spr_id'=>$skey, 'grd_id'=>'undefined', 'sequence'=>$variable['sequence'], 'naslov'=>strip_tags($variable['naslov']), 'variable'=>$variable['variable'], 'canChoose'=>true, 'sub'=>1, /*'cnt'=>$spremenljivka['cnt_all']);*/ 'options'=>$options); } } } } # Imamo multicheckbox else if($tip == 16 || $tip == 18) { foreach($spremenljivka['grids'] AS $gid => $grid) { $sub = 0; if ($grid['variable'] != '') { // Napolnimo variable $options = array(); foreach($spremenljivka['grids'][0]['variables'] as $key => $var){ if(!$var['other']) $options[($key+1)] = $var['naslov']; } $sub++; $this->variablesList[$skey.'-'.$grid['variables'][0]['sequence']] = array( 'tip'=>$tip, 'spr_id'=>$skey, 'grd_id'=>$gid, 'sequence'=>$grid['variables'][0]['sequence'], 'naslov'=>strip_tags($grid['naslov']), 'variable'=>$grid['variable'], 'canChoose'=>true, 'sub'=>1, /*'cnt'=>count($grid['variables']));*/ 'options'=>$options); } } } # imamo več gridov - multigrid, multitext, multinumber else { foreach($spremenljivka['grids'] AS $gid => $grid) { $sub = 0; if (isset($grid['variable'])&&$grid['variable'] != '') { $sub++; $this->variablesList[$skey] = array( 'tip'=>$tip, 'naslov'=>strip_tags($grid['naslov']), 'variable'=>$grid['variable'], 'canChoose'=>false, 'sub'=>$sub); } if (count ($grid['variables']) > 0) { $sub++; foreach ($grid['variables'] AS $vid => $variable ){ if ($variable['other'] != 1) { // Napolnimo variable $options = array(); if($spremenljivka['tip'] == 6){ $options = $spremenljivka['options']; } else{ foreach($spremenljivka['grids'][0]['variables'] as $key => $var){ if(!$var['other']) $options[($key+1)] = $var['naslov']; } } $this->variablesList[$skey.'-'.$variable['sequence']] = array( 'tip'=>$tip, 'spr_id'=>$skey, 'grd_id'=>'undefined', 'sequence'=>$variable['sequence'], 'naslov'=>strip_tags($variable['naslov']), 'variable'=>$variable['variable'], 'canChoose'=>true, 'sub'=>$sub, /*'cnt'=>count($spremenljivka['options']));*/ 'options'=>$options); } } } } } } } } } return $this->variablesList; } } // funkcija vrne izbrane variable v arrayu public function getSelectedVars() { // Najprej napolnimo prvi nivo $sql = sisplet_query("SELECT * FROM srv_mc_element WHERE table_id='$this->table_id' AND parent='' ORDER BY vrstni_red"); while($row = mysqli_fetch_array($sql)){ $colSpan = 0; $rowSpan = 0; // Horizontalne spremenljivke if($row['position'] == '0'){ $this->selectedVars['hor'][$row['vrstni_red']] = $row; $sql2 = sisplet_query("SELECT * FROM srv_mc_element WHERE table_id='$this->table_id' AND parent='$row[vrstni_red]' AND position='0'"); // Ce ni 2.nivoja if(mysqli_num_rows($sql2) == 0){ $rowSpan = count($this->variablesList[$row['spr']]['options']); $this->selectedVars['hor'][$row['vrstni_red']]['span'] = $rowSpan; if($this->variablesList[$row['spr']]['tip'] == 2 || $this->variablesList[$row['spr']]['tip'] == 16) $this->isCheckbox = true; } // Napolnimo se 2.nivo else{ while($row2 = mysqli_fetch_array($sql2)){ $this->selectedVars['hor'][$row['vrstni_red']]['sub'][$row2['vrstni_red']] = $row2; $rowSpan += count($this->variablesList[$row['spr']]['options'])*count($this->variablesList[$row2['spr']]['options']); $this->selectedVars['hor'][$row['vrstni_red']]['sub'][$row2['vrstni_red']]['span'] = count($this->variablesList[$row2['spr']]['options']); $this->rowLevel2 = true; if($this->variablesList[$row2['spr']]['tip'] == 2 || $this->variablesList[$row2['spr']]['tip'] == 16) $this->isCheckbox = true; } $this->selectedVars['hor'][$row['vrstni_red']]['span'] = $rowSpan; } $this->rowSpan += $rowSpan; } // Vertikalne spremenljivke else{ $this->selectedVars['ver'][$row['vrstni_red']] = $row; $fullColSpan = 0; $sql2 = sisplet_query("SELECT * FROM srv_mc_element WHERE table_id='$this->table_id' AND parent='$row[vrstni_red]' AND position='1'"); // Ce ni 2.nivoja if(mysqli_num_rows($sql2) == 0){ $colSpan = count($this->variablesList[$row['spr']]['options']); $fullColSpan = $colSpan; $this->selectedVars['ver'][$row['vrstni_red']]['span'] = $colSpan; if($this->variablesList[$row['spr']]['tip'] == 2 || $this->variablesList[$row['spr']]['tip'] == 16) $this->isCheckbox = true; if($this->table_settings[$this->table_id]['sums'] == 1) $fullColSpan++; } // Napolnimo se 2.nivo else{ while($row2 = mysqli_fetch_array($sql2)){ $this->selectedVars['ver'][$row['vrstni_red']]['sub'][$row2['vrstni_red']] = $row2; $colSpan += count($this->variablesList[$row['spr']]['options'])*count($this->variablesList[$row2['spr']]['options']); $fullColSpan += count($this->variablesList[$row['spr']]['options'])*count($this->variablesList[$row2['spr']]['options']); $this->selectedVars['ver'][$row['vrstni_red']]['sub'][$row2['vrstni_red']]['span'] = count($this->variablesList[$row2['spr']]['options']); $this->colLevel2 = true; if($this->variablesList[$row2['spr']]['tip'] == 2 || $this->variablesList[$row2['spr']]['tip'] == 16) $this->isCheckbox = true; } $this->selectedVars['ver'][$row['vrstni_red']]['span'] = $colSpan; } $this->colSpan += $colSpan; $this->fullColSpan += $fullColSpan; } } //echo 'Cols:'.$this->colSpan.'_Rows:'.$this->rowSpan.' '; //var_dump($this->selectedVars['hor']); } // Izvedemo izracune crosstabulacij public function createCrostabulation($variables) { global $site_path; $folder = $site_path . EXPORT_FOLDER.'/'; $R_folder = $site_path . R_FOLDER.'/'; if ($this->dataFileName != '' && file_exists($this->dataFileName)){ $spr = array(); $grid = array(); $sekvence = array(); $var_options = array(); $_all_options = array(); foreach($variables as $key => $variable){ $spr[$key] = $this->_HEADERS[$variables[$key]['spr']]; $grid[$key] = isset($spr[$key]['grids'][$variables[$key]['grd']])?$spr[$key]['grids'][$variables[$key]['grd']]:null; $sekvenca = $variables[$key]['seq']; $spr_checkbox = false; # za checkboxe gledamo samo odgovore ki so bili 1 in za vse opcije if ($spr[$key]['tip'] == 2 || $spr[$key]['tip'] == 16) { $spr_checkbox = true; if ($spr[$key]['tip'] == 2) { if (count($spr[$key]['grids'][0]['variables']) > 0) foreach ($spr[$key]['grids'][0]['variables'] AS $_vkey =>$_variable) { if ((int)$_variable['text'] != 1) { $sekvence[$key][] = $_variable['sequence']; } } else { $sekvence[$key] = explode('_',$spr[$key]['sequences']); } } if ($spr[$key]['tip'] == 16) { foreach ($grid[$key]['variables'] AS $_variables) { $sekvence[$key][] = $_variables['sequence']; } } } else { $sekvence[$key][] = $sekvenca; } # poiščemo pripadajočo spremenljivko $var_options[$key] = $this->_HEADERS[$variable['spr']]['options']; # najprej poiščemo (združimo) vse opcije ki so definirane kot opcije spremenljivke in vse ki so v crosstabih if (count($var_options[$key]) > 0 && $spr_checkbox !== true ) { foreach ($var_options[$key] as $okey => $opt) { $_all_options[$key][$okey] = array('naslov'=>$opt, 'cnt'=>null, 'type'=>'o'); } } # za checkboxe dodamo posebej vse opcije if ($spr_checkbox == true ) { if ($spr[$key]['tip'] == 2 ) { $grid[$key] = $this->_HEADERS[$variable['spr']]['grids']['0']; } foreach ($grid[$key]['variables'] As $vkey => $var) { if ($var['other'] != 1) { $_all_options[$key][$var['sequence']] = array('naslov'=>$var['naslov'], 'cnt'=>null, 'type'=>'o', 'vr_id'=> $var['variable']); } } } } $crosstabVars = ''; // Nastavimo string s katerim filtriramo datoteko za prave stolpce foreach($sekvence as $sekvenca){ if(count($sekvenca) > 1){ foreach($sekvenca as $grd){ $crosstabVars .= '$'.$grd.','; } } else $crosstabVars .= '$'.$sekvenca[0].','; } // Ce imamo racunanje povprecja $avgVar = 0; if($this->table_settings[$this->table_id]['avgVar'] != ''){ $avg = explode('-',$this->table_settings[$this->table_id]['avgVar']); $crosstabVars .= '$'.$avg[1].','; $avgVar = 1; } $delez=array(); // Ce imamo racunanje deleza if($this->table_settings[$this->table_id]['delezVar'] != ''){ $delezVar = explode('-',$this->table_settings[$this->table_id]['delezVar']); // Ce imamo delez za checkbox if($this->variablesList[$this->table_settings[$this->table_id]['delezVar']]['tip'] == 2 || $this->variablesList[$this->table_settings[$this->table_id]['delezVar']]['tip'] == 16){ $delez = unserialize($this->table_settings[$this->table_id]['delez']); $i = 0; foreach($delez as $val){ if($val == 1){ $stolpec = (int)$delezVar[1] + $i; $crosstabVars .= '$'.$stolpec.','; } $i++; } $delez = -1; } else{ $crosstabVars .= '$'.$delezVar[1].','; $delez = unserialize($this->table_settings[$this->table_id]['delez']); } } $crosstabVars = substr($crosstabVars, 0, -1); // Ce se nimamo datoteke s pripravljenimi podatki jo ustvarimo $tmp_file = $R_folder . '/TempData/crosstab_data.tmp'; if (!file_exists($tmp_file)) { $this->prepareDataFile($crosstabVars); } // Inicializiramo R in pozenemo skripto za crosstabulacije $R = new SurveyAnalysisR($this->ank_id); $crosstabs = $R->createMultiCrosstabulation($sekvence, $avgVar, $delez); $crosstabs['options1'] = $_all_options[0]; $crosstabs['options2'] = $_all_options[1]; if(isset($_all_options[2])) $crosstabs['options3'] = $_all_options[2]; if(isset($_all_options[3])) $crosstabs['options4'] = $_all_options[3]; $crosstabs['isCheckbox'] = $this->isCheckbox; // Testiranje... /*echo '
'; var_dump($crosstabs['sumaVrstica']); var_dump($crosstabs['sumaStolpec']); var_dump($crosstabs['sumaSkupna']); echo '
';*/ // Na koncu pobrisemo zacasen file s podatki $this->deleteDataFile(); return $crosstabs; } } // Pripravimo file iz katerega preberemo podatke in izvedemo crosstabulacije public function prepareDataFile($cols){ global $site_path; $folder = $site_path . EXPORT_FOLDER.'/'; $R_folder = $site_path . R_FOLDER.'/'; # pogoji so že dodani v _CURRENT_STATUS_FILTER $status_filter = $this->_CURRENT_STATUS_FILTER; # dodamo status filter za vse sekvence checkbox-a da so == 1 /* if ($additional_status_filter != null) { $status_filter .= $additional_status_filter; } */ # odstranimo vse zapise, kjer katerakoli od variabel vsebuje missing $_allMissing_answers = SurveyMissingValues::GetMissingValuesForSurvey(array(1,2,3)); $_pageMissing_answers = $this->getInvalidAnswers(MISSING_TYPE_CROSSTAB); // File kamor zapisemo filtrirane podatke $tmp_file = $R_folder . '/TempData/crosstab_data.tmp'; # polovimo obe sekvenci /*if (count($sekvences1)>0) foreach ($sekvences1 AS $sequence1) { if (count($sekvences2)>0) foreach ($sekvences2 AS $sequence2) { #skreira variable: $crosstab, $cvar1, $cvar2 $additional_filter = ''; if ($spr_1_checkbox == true) { $_seq_1_text = ''.$sequence1; # pri checkboxih gledamo samo kjer je 1 ( ne more bit missing) $additional_filter = ' && ($'.$sequence1.' == 1)'; } else { $_seq_1_text = '$'.$sequence1; # dodamo še pogoj za missinge foreach ($_pageMissing_answers AS $m_key1 => $missing1) { $additional_filter .= ' && ($'.$sequence1.' != '.$m_key1.')'; } } if ($spr_2_checkbox == true) { $_seq_2_text = ''.$sequence2; # pri checkboxih gledamo samo kjer je 1 ( ne more bit missing) $additional_filter .= ' && ($'.$sequence2.' == 1)'; } else { $_seq_2_text = '$'.$sequence2; # dodamo še pogoj za missinge foreach ($_pageMissing_answers AS $m_key2 => $missing2) { $additional_filter .= ' && ($'.$sequence2.' != '.$m_key2.')'; } } if (IS_WINDOWS) { #$command = 'awk -F"|" "BEGIN {{OFS=\"\"} {ORS=\"\n\"}} '.$_status_filter.' { print \"$crosstab[\x27\",$'.$sequence1.',\"\x27][\x27\",$'.$sequence2.',\"\x27]++; $options1[\x27\",$'.$sequence1.',\"\x27]++; $options2[\x27\",$'.$sequence2.',\"\x27]++;\"}" '.$this->dataFileName.' >> '.$tmp_file; $command = 'awk -F"|" "BEGIN {{OFS=\"\"} {ORS=\"\n\"}} '.$status_filter.$additional_filter.' { print $0 }" '.$this->dataFileName.' >> '.$tmp_file; } else { #$command = 'awk -F"|" \'BEGIN {{OFS=""} {ORS="\n"}} '.$_status_filter.' { print "$crosstab[\x27",$'.$sequence1.',"\x27][\x27",$'.$sequence2.',"\x27]++; $options1[\x27",$'.$sequence1.',"\x27]++; $options2[\x27",$'.$sequence2.',"\x27]++;"}\' '.$this->dataFileName.' >> '.$tmp_file; $command = 'awk -F"|" \'BEGIN {{OFS=""} {ORS="\n"}} '.$status_filter.$additional_filter.' { print $0 }\' '.$this->dataFileName.' >> '.$tmp_file; } $out = shell_exec($command); } }*/ // Filtriramo podatke po statusu in loopih in jih zapisemo v temp folder R-ja if (IS_WINDOWS) { $command = 'awk -F"|" "BEGIN {{OFS=\",\"} {ORS=\"\n\"}} '.$status_filter.' { print '.$cols.' }" '.$this->dataFileName.' >> '.$tmp_file; } else { $command = 'awk -F"|" \'BEGIN {{OFS=","} {ORS="\n"}} '.$status_filter.' { print '.$cols.'; }\' '.$this->dataFileName.' >> '.$tmp_file; } $out = shell_exec($command); return $out; } // Pobrisemo zacasen file s podatki public function deleteDataFile(){ global $site_path; $R_folder = $site_path . R_FOLDER.'/'; $tmp_file = $R_folder . '/TempData/crosstab_data.tmp'; // Na koncu pobrisemo zacasen file s podatki if (file_exists($tmp_file)) { unlink($tmp_file); } } // Prikaze izbiro med vsemi tabelami function displayMCTables(){ global $site_path; global $global_user_id; global $lang; // Trenutna aktivna tabela $sql = sisplet_query("SELECT * FROM srv_mc_table WHERE id='$this->table_id' AND ank_id='$this->ank_id' AND usr_id='$global_user_id'"); $current_table = mysqli_fetch_array($sql); echo '

'.$lang['srv_multicrosstabs_tables'].'

'; echo ''; echo '
'; // Prednastavljen profil echo ''; $mc_tables = $this->getTables(); foreach($mc_tables as $table){ echo '
'.$table['name'].'
'; } echo '
'; /*/ Cas kreiranja tabele echo '
'; $time_created = strtotime($current_table['time_created']); echo $lang['srv_multicrosstabs_tables_time'].': '.date("d.m.Y H:i", $time_created).''; echo '
';*/ // Na dnu imamo linka brisi in preimenuj echo '

'.$lang['srv_multicrosstabs_tables_rename'].'

'; echo '

'.$lang['srv_multicrosstabs_tables_delete'].'

'; echo '
'; // cover Div echo '
'; echo '
'; echo ''; echo ''; echo ''; echo '
'; echo ''; } function displayMCTablesPopups(){ global $lang; // div za kreacijo novega echo '
'; echo '

'.$lang['srv_new_table'].'

'; echo '
'; echo ''; echo ''; echo '
'; echo '
'; echo ''; echo ''; echo ''; echo '
'; echo '
'; // div za preimenovanje echo '
'; echo '
'; echo '
'; echo ''; echo ''; echo '
'; echo '
'; echo '
'; echo ''; echo ''; echo '
'; echo '
'; // div za brisanje echo '
'; echo $lang['srv_multicrosstabs_tables_delete_confirm'].': ?'; echo ''; echo '
'; echo ''; echo ''; echo '
'; echo '
'; } // Vrnemo vse tabele uporabnika public function getTables(){ global $global_user_id; $mc_tables = array(); $sql = sisplet_query("SELECT * FROM srv_mc_table WHERE ank_id='$this->ank_id' AND usr_id='$global_user_id' ORDER BY time_created ASC"); while($row = mysqli_fetch_array($sql)){ $mc_tables[] = $row; } return $mc_tables; } function ajax(){ global $lang; global $global_user_id; $this->getVariableList(); if (isset ($_POST['anketa'])) $this->ank_id = $_POST['anketa']; if (isset($_POST['table_id'])) $this->table_id = $_POST['table_id']; if ($_GET['a'] == 'add_variable') { if (isset($_POST['spr'])) $spr = $_POST['spr']; if (isset($_POST['parent'])) $parent = $_POST['parent']; if (isset($_POST['position'])) $position = $_POST['position']; // Dobimo vrstni red $sql = sisplet_query("SELECT COUNT(id) AS cnt FROM srv_mc_element WHERE table_id='$this->table_id' AND parent='$parent' AND position='$position'"); $row = mysqli_fetch_array($sql); $vrstni_red = $row['cnt']; sisplet_query("INSERT INTO srv_mc_element (table_id, spr, parent, vrstni_red, position) VALUES('$this->table_id', '$spr', '$parent', '$vrstni_red', '$position')"); $this->displayTable(); } if ($_GET['a'] == 'remove_variable') { if (isset($_POST['vrstni_red'])) $vrstni_red = $_POST['vrstni_red']; if (isset($_POST['position'])) $position = $_POST['position']; if (isset($_POST['parent'])) $parent = $_POST['parent']; // Ce brisemo element na 1. nivoju if($parent == 'undefined'){ // Pobrisemo element sisplet_query("DELETE FROM srv_mc_element WHERE table_id='$this->table_id' AND position='$position' AND vrstni_red='$vrstni_red' AND parent=''"); // Pobrisemo se vse childe sisplet_query("DELETE FROM srv_mc_element WHERE table_id='$this->table_id' AND position='$position' AND parent='$vrstni_red'"); // Popravimo vrstni red ostalih sisplet_query("UPDATE srv_mc_element SET vrstni_red=vrstni_red-1 WHERE table_id='$this->table_id' AND position='$position' AND vrstni_red>'$vrstni_red' AND parent=''"); // Popravimo parente pri childih sisplet_query("UPDATE srv_mc_element SET parent=parent-1 WHERE table_id='$this->table_id' AND position='$position' AND parent>'$vrstni_red' AND parent!=''"); } // Brisemo element na 2. nivoju else{ // Pobrisemo element sisplet_query("DELETE FROM srv_mc_element WHERE table_id='$this->table_id' AND position='$position' AND vrstni_red='$vrstni_red' AND parent='$parent'"); // Popravimo vrstni red ostalih childov sisplet_query("UPDATE srv_mc_element SET vrstni_red=vrstni_red-1 WHERE table_id='$this->table_id' AND position='$position' AND vrstni_red>'$vrstni_red' AND parent='$parent'"); } $this->displayTable(); } if ($_GET['a'] == 'change_settings') { if (isset($_POST['what'])) $what = $_POST['what']; if (isset($_POST['value'])) $value = $_POST['value']; $this->table_settings[$this->table_id][$what] = $value; sisplet_query("UPDATE srv_mc_table SET $what='$value' WHERE table_id='$this->table_id'"); $this->displayTable(); } if ($_GET['a'] == 'edit_title') { $value = isset($_POST['value']) ? $_POST['value'] : ''; sisplet_query("UPDATE srv_mc_table SET title='$value' WHERE id='$this->table_id'"); } if ($_GET['a'] == 'save_settings') { $this->table_settings[$this->table_id]['numerus'] = (isset($_POST['numerus'])) ? $_POST['numerus'] : 0; $this->table_settings[$this->table_id]['percent'] = (isset($_POST['percent'])) ? $_POST['percent'] : 0; $this->table_settings[$this->table_id]['sums'] = (isset($_POST['sums'])) ? $_POST['sums'] : 0; $this->table_settings[$this->table_id]['navVsEno'] = (isset($_POST['navVsEno'])) ? $_POST['navVsEno'] : 0; $this->table_settings[$this->table_id]['avgVar'] = (isset($_POST['avgVar']) && isset($_POST['avgSetting'])) ? $_POST['avgVar'] : ''; $this->table_settings[$this->table_id]['delezVar'] = (isset($_POST['delezVar']) && isset($_POST['delezSetting'])) ? $_POST['delezVar'] : ''; // Ce imamo nastavljeno variablo za delez loopamo cez njene opcije in pogledamo katere so checkane if($this->table_settings[$this->table_id]['delezVar'] != ''){ $delez = array(); $cnt = 0; foreach($this->variablesList[$this->table_settings[$this->table_id]['delezVar']]['options'] as $option){ $val = (isset($_POST['delez_'.$cnt])) ? $_POST['delez_'.$cnt] : 0; $delez[$cnt] = $val; $cnt++; } $this->table_settings[$this->table_id]['delez'] = serialize($delez); } else{ $this->table_settings[$this->table_id]['delez'] = ''; } $sql = sisplet_query("UPDATE srv_mc_table SET numerus='".$this->table_settings[$this->table_id]['numerus']."', percent='".$this->table_settings[$this->table_id]['percent']."', sums='".$this->table_settings[$this->table_id]['sums']."', navVsEno='".$this->table_settings[$this->table_id]['navVsEno']."', avgVar='".$this->table_settings[$this->table_id]['avgVar']."', delezVar='".$this->table_settings[$this->table_id]['delezVar']."', delez='".$this->table_settings[$this->table_id]['delez']."' WHERE id='".$this->table_id."'"); if(!$sql) echo mysqli_error($GLOBALS['connect_db']); $this->displayTable(); } if ($_GET['a'] == 'set_delez') { //$this->table_settings[$this->table_id]['delezVar'] = (isset($_POST['delezVar'])) ? $_POST['delezVar'] : ''; $delezVar = (isset($_POST['delezVar'])) ? $_POST['delezVar'] : ''; $this->displayDelez($delezVar); } if ($_GET['a'] == 'mc_show_tables'){ $this->displayMCTables(); } if ($_GET['a'] == 'use_mc_table'){ $value = isset($_POST['value']) ? $_POST['value'] : $this->table_id; SurveyUserSetting :: getInstance()->saveSettings('default_mc_table', $value); } if ($_GET['a'] == 'rename_table'){ $id = isset($_POST['id']) ? $_POST['id'] : ''; $name = isset($_POST['name']) ? $_POST['name'] : ''; sisplet_query("UPDATE srv_mc_table SET name='$name' WHERE id='$id' AND ank_id='$this->ank_id' AND usr_id='$global_user_id'"); $this->displayMCTables(); } if ($_GET['a'] == 'delete_table'){ $id = isset($_POST['id']) ? $_POST['id'] : ''; sisplet_query("DELETE FROM srv_mc_table WHERE id='$id' AND ank_id='$this->ank_id' AND usr_id='$global_user_id'"); // Preklopimo na prvo tabelo $sql = sisplet_query("SELECT id FROM srv_mc_table WHERE ank_id='$this->ank_id' AND usr_id='$global_user_id' ORDER BY time_created ASC"); $row = mysqli_fetch_array($sql); $this->table_id = $row['id']; SurveyUserSetting :: getInstance()->saveSettings('default_mc_table', $row['id']); $this->displayMCTables(); } if ($_GET['a'] == 'new_table'){ $name = isset($_POST['name']) ? $_POST['name'] : ''; sisplet_query("INSERT INTO srv_mc_table (ank_id, usr_id, time_created, name) VALUES('$this->ank_id', '$global_user_id', NOW(), '$name')"); $table_id = mysqli_insert_id($GLOBALS['connect_db']); $this->table_id = $table_id; SurveyUserSetting :: getInstance()->saveSettings('default_mc_table', $table_id); } if ($_GET['a'] == 'mc_change_table'){ $id = isset($_POST['id']) ? $_POST['id'] : $this->table_id; $this->table_id = $id; $this->displayMCTables(); } } // Skrajsa tekst in doda '...' na koncu function snippet($text, $length=64, $tail="..."){ $text = trim($text); $txtl = strlen($text); if($txtl > $length) { for($i=1;$text[$length-$i]!=" ";$i++) { if($i == $length) { return substr($text,0,$length) . $tail; } } $text = substr($text,0,$length-$i+1) . $tail; } return strip_tags($text); } /** Naredimo formatiran izpis * * @param $value * @param $digit * @param $sufix */ static function formatNumber ($value, $digit = 0, $sufix = "") { if ($value <> 0 && $value != null) $result = round($value, $digit); else $result = "0"; # polovimo decimalna mesta in vejice za tisočice $decimal_point = SurveyDataSettingProfiles :: getSetting('decimal_point'); $thousands = SurveyDataSettingProfiles :: getSetting('thousands'); $result = number_format($result, $digit, $decimal_point, $thousands) . $sufix; return $result; } function getCrossTabPercentage ($sum, $value) { $result = 0; if ($value ) { $result = (int)$sum == 0 ? 0 : $value / $sum * 100; } return $result; } /** Sestavi array nepravilnih odgovorov * */ function getInvalidAnswers($type) { $result = array(); $missingValuesForAnalysis = SurveyMissingProfiles :: GetMissingValuesForAnalysis($type); foreach ($missingValuesForAnalysis AS $k => $answer) { $result[$k] = array('text'=>$answer,'cnt'=>0); } return $result; } } ?>