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 '
';
foreach($this->variablesList AS $spr){
if($spr['canChoose'] && in_array($spr['tip'], array(1,3,6))){
echo '';
echo ' '.$spr['variable'].' - '.$this->snippet($spr['naslov'], 25);
echo ' ';
}
}
echo ' ';
// Izris diva za izbiro tabele
$this->displayMCTablesPopups();
// Izris diva za nastavitve tabele
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 '';
echo $this->snippet($this->variablesList[$var['spr']]['naslov'], 25);
// Gumb za brisanje
echo '
';
echo ' ';
}
}
// Izrisemo se zadnjo prazno navpicno celico vrstico
echo ''.$lang['srv_multicrosstabs_add'].' ';
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 $this->snippet($option, 25);
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 '';
echo $this->snippet($this->variablesList[$var['spr']]['naslov'], 25);
// Gumb za brisanje
echo '
';
echo ' ';
}
}
else{
$rowspan = ' rowspan="2"';
$colspan = ' colspan="'.( $parentVar['span'] / count($this->variablesList[$parentVar['spr']]['options']) ).'"';
echo '';
echo $this->snippet($option, 25);
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 $this->snippet($suboption, 25);
// Gumb za brisanje
echo '
';
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(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 '';
echo $this->snippet($this->variablesList[$var['spr']]['naslov'], 25);
// Gumb za brisanje
echo '
';
echo ' ';
}
}
// Nimamo nobene vertikalne spremenljivke in 2 horizontalni
elseif($this->rowLevel2){
echo ' ';
}
// Izrisemo se zadnjo prazno navpicno celico vrstico
echo ''.$lang['srv_multicrosstabs_add'].' ';
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){
// Loop cez variable spremenljivke
foreach($this->variablesList[$var['spr']]['options'] as $option){
$colspan = ' colspan="'.( $var['span'] / count($this->variablesList[$var['spr']]['options']) ).'"';
echo '';
echo $this->snippet($option, 25);
echo ' ';
}
// Suma (ce jo imamo vklopljeno)
if($this->table_settings[$this->table_id]['sums'] == 1 && !$this->rowLevel2){
echo '';
echo $lang['srv_analiza_crosstab_skupaj'];
echo ' ';
}
}
}
echo ' ';
}
// Izrisemo HORIZONTALNO izbrane variable
if(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 '';
echo $this->snippet($this->variablesList[$parentVar['spr']]['naslov'], 25);
// Gumb za brisanje
echo '
';
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 '';
echo $this->snippet($option, 25);
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 '';
echo $this->snippet($this->variablesList[$var['spr']]['naslov'], 25);
// Gumb za brisanje
echo '
';
echo ' ';
}
// Variabla 2
echo '';
echo $this->snippet($suboption, 25);
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 ''.$lang['srv_analiza_crosstab_skupaj'].' ';
$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 '';
echo $this->snippet($this->variablesList[$parentVar['spr']]['naslov'], 25);
// Gumb za brisanje
echo '
';
echo ' ';
}
// Variabla
$rowspan = ' rowspan="'.( $parentVar['span'] / count($this->variablesList[$parentVar['spr']]['options']) ).'"';
echo '';
echo $this->snippet($option, 25);
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 '';
echo $this->snippet($this->variablesList[$var['spr']]['naslov'], 25);
// Gumb za brisanje
echo '
';
echo ' ';
}
// Variabla
echo '';
echo $this->snippet($option, 25);
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 ''.$lang['srv_analiza_crosstab_skupaj'].' ';
// 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 '';
echo $lang['srv_multicrosstabs_add'];
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 '
';
// 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 '';
echo ($crosstabs['sumaSkupna'] != '') ? $crosstabs['sumaSkupna'] : '0';
echo ' ';
}
// Procenti
if($this->table_settings[$this->table_id]['percent'] == 1){
echo '';
echo $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
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 '';
echo $this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'));
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 '';
echo $this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
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 '';
echo $crosstabs['sumaVrstica'][$val];
echo ' ';
}
// Procenti
if($this->table_settings[$this->table_id]['percent'] == 1){
echo '';
echo $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
echo ' ';
}
}
else{
// Numerus
if($this->table_settings[$this->table_id]['numerus'] == 1){
echo '';
echo '0';
echo ' ';
}
// Procenti
if($this->table_settings[$this->table_id]['percent'] == 1){
echo '';
echo $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
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 '';
echo $this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'));
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 '';
echo $this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
echo ' ';
}
}
// Suma za stolpce
else{
// Izpisemo podatek
if(isset($crosstabs['sumaStolpec'][$val])){
// Numerus
if($this->table_settings[$this->table_id]['numerus'] == 1){
echo '';
echo $crosstabs['sumaStolpec'][$val];
echo ' ';
}
// Procenti
if($this->table_settings[$this->table_id]['percent'] == 1){
echo '';
echo $this->formatNumber($this->getCrossTabPercentage($crosstabs['sumaSkupna'], $crosstabs['sumaStolpec'][$val]), SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
echo ' ';
}
}
else{
// Numerus
if($this->table_settings[$this->table_id]['numerus'] == 1){
echo '';
echo '0';
echo ' ';
}
// Procenti
if($this->table_settings[$this->table_id]['percent'] == 1){
echo '';
echo $this->formatNumber(0, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
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 '';
echo $this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'));
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 $this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
echo ' ';
}
}
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 '';
echo $crosstab;
echo ' ';
}
// Procenti
if($this->table_settings[$this->table_id]['percent'] == 1){
echo '';
echo $this->formatNumber($percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
echo ' ';
}
}
else{
// Numerus
if($this->table_settings[$this->table_id]['numerus'] == 1){
echo '';
echo '0';
echo ' ';
}
// Procenti
if($this->table_settings[$this->table_id]['percent'] == 1){
echo '';
echo $this->formatNumber(0, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
echo ' ';
}
}
// Povprecje
if($this->table_settings[$this->table_id]['avgVar'] > 0){
echo '';
echo $this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'));
echo ' ';
}
// Delez
if($this->table_settings[$this->table_id]['delezVar'] > 0){
echo '';
//echo $this->formatNumber($delez, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'));
echo $this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
echo ' ';
}
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\');" /> '.$lang['srv_multicrosstabs_numerus'].' ';
echo ' table_settings[$this->table_id]['percent'] == 1 ? ' checked="checked"':'').' onclick="changeMCSettings(\''.$this->table_id.'\', \'percent\');" /> '.$lang['srv_multicrosstabs_percent'].' ';
//echo ' table_settings[$this->table_id]['avg'] == 1 ? ' checked="checked"':'').' onclick="changeMCSettings(\''.$this->table_id.'\', \'avg\');" /> Povprečje ';
echo ' table_settings[$this->table_id]['sums'] == 1 ? ' checked="checked"':'').' onclick="changeMCSettings(\''.$this->table_id.'\', \'sums\');" /> '.$lang['srv_multicrosstabs_sum'].' ';
if($this->isCheckbox){
echo '';
echo ' table_settings[$this->table_id]['navVsEno'] == 0 ? ' checked="checked"':'').' value="0" onclick="changeMCSettings(\''.$this->table_id.'\', \'navVsEno\');" />'.$lang['srv_analiza_crosstab_navedbe'].' ';
echo ' table_settings[$this->table_id]['navVsEno'] == 1 ? ' checked="checked"':'').' value="1" onclick="changeMCSettings(\''.$this->table_id.'\', \'navVsEno\');" />'.$lang['srv_analiza_crosstab_enote'].' ';
echo ' ';
}*/
echo '';
// Gumbi na dnu
echo '';
echo ''.$lang['srv_zapri'].' ';
echo ''.$lang['srv_potrdi'].' ';
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 ' '.$option.' ';
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 ((int)$spremenljivka['hide_system'] == 1 && in_array($spremenljivka['variable'],array('email','ime','priimek','telefon','naziv','drugo'))) {
continue;
}
$tip = $spremenljivka['tip'];
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 ($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;
$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] = $spr[$key]['grids'][$variables[$key]['grd']];
$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 ($spr1['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']);
}
}
}
}
// 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;
}
// 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 '';
// 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 gumba brisi in preimenuj
echo '
';
echo ''.$lang['srv_multicrosstabs_tables_rename'].' ';
echo ''.$lang['srv_multicrosstabs_tables_delete'].' ';
echo '
';
echo '
';
// cover Div
echo '
';
echo '';
echo ''.$lang['srv_multicrosstabs_tables_use'].' ';
echo ''.$lang['srv_multicrosstabs_tables_add'].' ';
echo ''.$lang['srv_zapri'].' ';
echo '
';
echo '';
}
function displayMCTablesPopups(){
global $lang;
// div za kreacijo novega
echo '';
echo '
'.$lang['srv_new_table'].' ';
echo '
';
echo ''.$lang['srv_multicrosstabs_tables_name'].': ';
echo ' ';
echo '
';
echo '
';
echo ''.$lang['srv_analiza_arhiv'].' ';
echo ''.$lang['srv_zapri'].' ';
echo ''.$lang['save'].' ';
echo '
';
echo '
';
// div za preimenovanje
echo '';
echo '
';
echo '
';
echo ''.$lang['srv_multicrosstabs_tables_name'].': ';
echo ' ';
echo '
';
echo '
';
echo '
';
echo ''.$lang['srv_zapri'].' ';
echo ''.$lang['srv_multicrosstabs_tables_rename_short'].' ';
echo '
';
echo '
';
// div za brisanje
echo '';
echo $lang['srv_multicrosstabs_tables_delete_confirm'].':
?';
echo '
';
echo '
';
echo ''.$lang['srv_zapri'].' ';
echo ''.$lang['srv_multicrosstabs_tables_delete_short'].' ';
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;
}
}
?>