395 lines
14 KiB
PHP
395 lines
14 KiB
PHP
<?php
|
|
/***************************************
|
|
* Description: Priprava Xml kode za klasicne tabele
|
|
*
|
|
*
|
|
* Autor: Patrik Pucer
|
|
* Datum: 10/2018
|
|
*****************************************/
|
|
|
|
define("VARGRP_ELEMENT_TYPE_GRID", "Grid");
|
|
define("VARGRP_ELEMENT_TYPE_MULTIRESP", "multipleResp");
|
|
define("VARFORMAT_ELEMENT_TYPE_GRID", "numeric");
|
|
|
|
class MultiGridXml extends XmlSurveyElement
|
|
{
|
|
public function __construct()
|
|
{
|
|
//parent::getGlobalVariables();
|
|
}
|
|
|
|
/************************************************
|
|
* Get instance
|
|
************************************************/
|
|
private static $_instance;
|
|
protected $loop_id = null; // id trenutnega loopa ce jih imamo
|
|
protected $xml;
|
|
|
|
public static function getInstance()
|
|
{
|
|
if (self::$_instance)
|
|
return self::$_instance;
|
|
|
|
return new MultiGridXml();
|
|
}
|
|
|
|
public function export($spremenljivke=null, $db_table=null, $preveriSpremenljivko=null, $export_subtype=null, $loop_id=null, $xml=null){
|
|
global $lang;
|
|
|
|
// Ce je spremenljivka v loopu
|
|
$this->loop_id = $loop_id;
|
|
$this->xml = $xml;
|
|
|
|
//polja za shranjevanje podatkov za izpis
|
|
$qstnLits = array();
|
|
$varNames = array();
|
|
$missings = array();
|
|
$catValus = array();
|
|
$labls = array();
|
|
$varNamesDb = array(); //atribut name ob dvojni tabeli
|
|
//polja za shranjevanje podatkov za izpis - konec
|
|
|
|
//Pobiranje podatkov za izpis ######################################################################################################
|
|
|
|
|
|
//VREDNOSTI
|
|
// iz baze preberemo vse moznosti - ko nimamo izpisa z odgovori respondenta
|
|
$sqlVrednostiString = "SELECT id, naslov, naslov2, variable, other FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red";
|
|
$sqlVrednosti = sisplet_query($sqlVrednostiString);
|
|
|
|
//$numRowsSql = mysqli_num_rows($sqlVrednosti);
|
|
//pregled vseh moznih vrednosti (kategorij) po $sqlVrednosti
|
|
while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti)){
|
|
$mozenOdgovor = ((( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) ));
|
|
|
|
$varName = strip_tags($rowVrednost['variable']);
|
|
$qstnLit = strip_tags($mozenOdgovor);
|
|
|
|
//belezenje podatkov za kasnejsi izpis
|
|
$varNames[] = $varName;
|
|
$qstnLits[] = $qstnLit;
|
|
//belezenje podatkov za kasnejsi izpis - konec
|
|
}
|
|
//pregled vseh moznih vrednosti (kategorij, mozni odgovori) po $sqlVrednosti - konec
|
|
//VREDNOSTI - Konec
|
|
|
|
//MOZNI ODGOVORI
|
|
$sqlMozniOdgovoriString = "SELECT naslov, variable, other FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red";
|
|
$sqlMozniOdgovori = sisplet_query($sqlMozniOdgovoriString);
|
|
while ($rowMozniOdgovori = mysqli_fetch_assoc($sqlMozniOdgovori)){
|
|
$labl = strip_tags($rowMozniOdgovori['naslov']);
|
|
if($rowMozniOdgovori['other']==0){ //ce ni missing
|
|
$catValu = strip_tags($rowMozniOdgovori['variable']);
|
|
}else{
|
|
$catValu = $rowMozniOdgovori['other'];
|
|
}
|
|
|
|
if($rowMozniOdgovori['other']<0){
|
|
$missing = "Y";
|
|
}else{
|
|
$missing = "N";
|
|
}
|
|
|
|
//belezenje podatkov za kasnejsi izpis
|
|
$labls[] = $labl;
|
|
$missings[] = $missing;
|
|
$catValus[] = $catValu;
|
|
//belezenje podatkov za kasnejsi izpis - konec
|
|
}
|
|
//MOZNI ODGOVORI - KONEC
|
|
|
|
//Pobiranje podatkov za izpis - konec ###############################################################################################
|
|
|
|
//Zacetek elementa varGrp
|
|
/* xmlwriter_start_element($this->xml, 'varGrp');
|
|
$attribute = 'name';
|
|
$element = $spremenljivke['variable'];
|
|
$this->writeXmlAttr4Element($this->xml, $attribute, $element);
|
|
|
|
$attribute = 'type';
|
|
$element = VARGRP_ELEMENT_TYPE_GRID;
|
|
$this->writeXmlAttr4Element($this->xml, $attribute, $element);
|
|
|
|
$attribute = 'var';
|
|
$element = "";
|
|
foreach($varNames as $key => $varName){
|
|
if((int)$varName==0){ //ce ni missing vrednost
|
|
if($key == 0){
|
|
$element .= $varName;
|
|
}elseif($key == 2&&$spremenljivke['enota']==3&&$spremenljivke['tip']==6){ //ce je index 2 in je dvojna tabela klasicne tabele, ne rabimo vec oznak spremenljivke
|
|
break;
|
|
}
|
|
else{
|
|
$element .= " ".$varName;
|
|
}
|
|
}
|
|
}
|
|
$this->writeXmlAttr4Element($this->xml, $attribute, $element);
|
|
|
|
//Element labl
|
|
if($spremenljivke['label']){ //ce je Labela pod Napredno, jo dodamo
|
|
$element = 'labl';
|
|
$text = $spremenljivke['label'];
|
|
$this->writeXmlElement($this->xml, $text, $element);
|
|
}
|
|
//Element labl - konec
|
|
|
|
xmlwriter_end_element($this->xml); // varGrp */
|
|
//Konec elementa varGrp
|
|
|
|
//CE JE DVOJNA TABELA KLASICNE TABELE ###############################################################
|
|
if($spremenljivke['enota']==3&&$spremenljivke['tip']==6){ //ce je dvojna tabela klasicne tabele
|
|
|
|
//Preureditev $catValus, da se razpolovi dolzino polja
|
|
$startIndexCatValus = count($catValus)/2 - 1;
|
|
$numOfCatValus = count($catValus)/2;
|
|
array_splice($catValus, $startIndexCatValus, $numOfCatValus);
|
|
//Preureditev $catValus, da se razpolovi dolzino polja - konec
|
|
|
|
//Preureditev $labls in $qstnLits, da se doda se enkrat toliko odgovorov
|
|
foreach($labls as $labl){
|
|
$labls[] = $labl;
|
|
}
|
|
foreach($qstnLits as $qstnLit){
|
|
$qstnLits[] = $qstnLit;
|
|
}
|
|
//Preureditev $labls in $qstnLit, da se doda se enkrat toliko odgovorov - konec
|
|
|
|
//Zacetek elementa varGrp za prvo podtabelo
|
|
/* xmlwriter_start_element($this->xml, 'varGrp');
|
|
$attribute = 'name';
|
|
$element = $spremenljivke['variable'].'a';
|
|
$this->writeXmlAttr4Element($this->xml, $attribute, $element);
|
|
|
|
$attribute = 'type';
|
|
$element = VARGRP_ELEMENT_TYPE_GRID;
|
|
$this->writeXmlAttr4Element($this->xml, $attribute, $element);
|
|
|
|
$attribute = 'var';
|
|
$element = "";
|
|
$char = 'a'; //za dodatno oznacevanje var
|
|
foreach($varNames as $key => $varName){
|
|
if((int)$varName==0){ //ce ni missing vrednost
|
|
if($key == 0){
|
|
//$element .= $spremenljivke['variable'].'a'.$char;
|
|
$elementTmp = $spremenljivke['variable'].'a'.$char;
|
|
$element .= $elementTmp;
|
|
}else{
|
|
//$element .= " ".$spremenljivke['variable'].'a'.$char;
|
|
$elementTmp = " ".$spremenljivke['variable'].'a'.$char;
|
|
$element .= $elementTmp;
|
|
}
|
|
$varNamesDb[] = $elementTmp;
|
|
}
|
|
$char++;
|
|
}
|
|
$this->writeXmlAttr4Element($this->xml, $attribute, $element);
|
|
|
|
//Element labl
|
|
if($spremenljivke['grid_subtitle1']){ //ce je label za podnaslov 1
|
|
$element = 'labl';
|
|
$text = $spremenljivke['grid_subtitle1'];
|
|
$this->writeXmlElement($this->xml, $text, $element);
|
|
}
|
|
//Element labl - konec
|
|
|
|
xmlwriter_end_element($this->xml); // varGrp */
|
|
//Konec elementa varGrp za prvo podtabelo
|
|
|
|
//Zacetek elementa varGrp za drugo podtabelo
|
|
/* xmlwriter_start_element($this->xml, 'varGrp');
|
|
$attribute = 'name';
|
|
$element = $spremenljivke['variable'].'b';
|
|
$this->writeXmlAttr4Element($this->xml, $attribute, $element);
|
|
|
|
$attribute = 'type';
|
|
$element = VARGRP_ELEMENT_TYPE_GRID;
|
|
$this->writeXmlAttr4Element($this->xml, $attribute, $element);
|
|
|
|
$attribute = 'var';
|
|
$element = "";
|
|
$char = 'a'; //za dodatno oznacevanje var
|
|
foreach($varNames as $key => $varName){
|
|
if((int)$varName==0){ //ce ni missing vrednost
|
|
$elementTmpDb = $spremenljivke['variable'].'b'.$char;
|
|
if($key == 0){
|
|
$element .= $elementTmpDb;
|
|
}else{
|
|
$elementTmp = " ".$elementTmpDb;
|
|
$element .= $elementTmp;
|
|
}
|
|
$varNamesDb[] = $elementTmpDb;
|
|
}
|
|
$char++;
|
|
}
|
|
$this->writeXmlAttr4Element($this->xml, $attribute, $element);
|
|
|
|
//Element labl
|
|
if($spremenljivke['grid_subtitle2']){ //ce je label za podnaslov 2
|
|
$element = 'labl';
|
|
$text = $spremenljivke['grid_subtitle2'];
|
|
$this->writeXmlElement($this->xml, $text, $element);
|
|
}
|
|
//Element labl - konec
|
|
|
|
xmlwriter_end_element($this->xml); // varGrp */
|
|
//Konec elementa varGrp za drugo podtabelo
|
|
|
|
//$char = 'a'; //za dodatno oznacevanje var v naslednjih elementih
|
|
$varNames = $varNamesDb;
|
|
}
|
|
//CE JE DVOJNA TABELA KLASICNE TABELE - KONEC ###############################################################
|
|
|
|
if($spremenljivke['tip']==16){ //ce je multicheckbox, uredi varGrp
|
|
|
|
/* for($l=0;$l<count($varNames);$l++){
|
|
//Preureditev $labls in $qstnLits, da je dovolj elementov v polju za izpis
|
|
foreach($labls as $labl){
|
|
$labls[] = $labl;
|
|
}
|
|
foreach($qstnLits as $qstnLit){
|
|
$qstnLits[] = $qstnLit;
|
|
}
|
|
//Preureditev $labls in $qstnLit, da je dovolj elementov v polju za izpis - konec
|
|
}
|
|
|
|
foreach($varNames as $key => $varName){ //za vsak mozen odgovor
|
|
//Zacetek elementa varGrp za prvo podtabelo
|
|
xmlwriter_start_element($this->xml, 'varGrp');
|
|
$attribute = 'name';
|
|
$element = $varName;
|
|
$this->writeXmlAttr4Element($this->xml, $attribute, $element);
|
|
|
|
$attribute = 'type';
|
|
$element = VARGRP_ELEMENT_TYPE_MULTIRESP;
|
|
$this->writeXmlAttr4Element($this->xml, $attribute, $element);
|
|
|
|
$attribute = 'var';
|
|
$element = "";
|
|
$char = 'a'; //za dodatno oznacevanje var
|
|
foreach($varNames as $key2 => $varName2){
|
|
if((int)$varName2==0){ //ce ni missing vrednost
|
|
$elementTmpDb = $varName.$char;
|
|
if($key2 == 0){
|
|
$element .= $elementTmpDb;
|
|
}else{
|
|
$elementTmp = " ".$elementTmpDb;
|
|
$element .= $elementTmp;
|
|
}
|
|
$varNamesDb[] = $elementTmpDb;
|
|
}
|
|
$char++;
|
|
}
|
|
$this->writeXmlAttr4Element($this->xml, $attribute, $element);
|
|
|
|
//Element labl
|
|
if($spremenljivke['grid_subtitle1']){ //ce je label za podnaslov 1
|
|
$element = 'labl';
|
|
$text = $spremenljivke['grid_subtitle1'];
|
|
$this->writeXmlElement($this->xml, $text, $element);
|
|
}
|
|
//Element labl - konec
|
|
|
|
xmlwriter_end_element($this->xml); // varGrp
|
|
//Konec elementa varGrp za prvo podtabelo
|
|
}
|
|
$varNames = $varNamesDb; */
|
|
|
|
}
|
|
|
|
|
|
foreach($varNames as $key => $varName){ //za vsak mozen odgovor
|
|
|
|
//if((int)$varName==0){ //ce ni missing vrednost
|
|
//Zacetek elementa var ###############################################################################
|
|
xmlwriter_start_element($this->xml, 'var');
|
|
|
|
//izpis ID in name
|
|
$attribute = 'ID';
|
|
$element = $varName;
|
|
$this->writeXmlAttr4Element($this->xml, $attribute, $element);
|
|
$attribute = 'name';
|
|
$this->writeXmlAttr4Element($this->xml, $attribute, $element);
|
|
//izpis ID in name - konec
|
|
|
|
//Element labl
|
|
$element = 'labl';
|
|
$text = strip_tags($qstnLits[$key], '<a><img><ul><li><ol><br>');
|
|
$this->writeXmlElement($this->xml, $text, $element);
|
|
//Element labl - konec
|
|
|
|
//Priprava besedila vprasanja in njen izpis #################################################################
|
|
$rowl = $this->srv_language_spremenljivka($spremenljivke);
|
|
if (strip_tags($rowl['naslov']) != '') $spremenljivke['naslov'] = $rowl['naslov'];
|
|
if (strip_tags($rowl['info']) != '') $spremenljivke['info'] = $rowl['info'];
|
|
//Element qstn
|
|
xmlwriter_start_element($this->xml, 'qstn');
|
|
$element = 'preQTxt';
|
|
$text = strip_tags($spremenljivke['naslov'], '<a><img><ul><li><ol><br>');
|
|
$this->writeXmlElement($this->xml, $text, $element);
|
|
|
|
$element = 'qstnLit';
|
|
//$text = strip_tags($qstnLits[$key], '<a><img><ul><li><ol><br>');
|
|
$text = strip_tags($qstnLits[$key], '<a><img><ul><li><ol><br>');
|
|
$this->writeXmlElement($this->xml, $text, $element);
|
|
xmlwriter_end_element($this->xml);
|
|
//Element qstn - konec
|
|
//Priprava besedila vprasanja in njen izpis - konec #################################################################
|
|
|
|
//Element catgry
|
|
$attribute = 'missing';
|
|
if($spremenljivke['tip']==16){ //ce je multicheckbox,
|
|
//$missingElement = $missings[$key];
|
|
/* $catValu = [1, 0];
|
|
$lablCatgry = ['Izbran', 'Ni izbran'];
|
|
foreach($catValu as $keyCatgry => $catVal){
|
|
xmlwriter_start_element($this->xml, 'catgry');
|
|
$missingElement = $missings[$keyCatgry];
|
|
xmlwriter_write_attribute($this->xml, $attribute, $missingElement); //zacetek missing
|
|
//Element catValu
|
|
$element = 'catValu';
|
|
$text = $catVal;
|
|
$this->writeXmlElement($this->xml, $text, $element);
|
|
//Element catValu - konec
|
|
//Element labl
|
|
$element = 'labl';
|
|
$text = $lablCatgry[$keyCatgry];
|
|
$this->writeXmlElement($this->xml, $text, $element);
|
|
//Element labl - konec
|
|
xmlwriter_end_attribute($this->xml); //konec missing
|
|
xmlwriter_end_element($this->xml);
|
|
} */
|
|
}else{
|
|
foreach($catValus as $keyCatgry => $catVal){
|
|
xmlwriter_start_element($this->xml, 'catgry');
|
|
$missingElement = $missings[$keyCatgry];
|
|
xmlwriter_write_attribute($this->xml, $attribute, $missingElement); //zacetek missing
|
|
//Element catValu
|
|
$element = 'catValu';
|
|
$text = $catVal;
|
|
$this->writeXmlElement($this->xml, $text, $element);
|
|
//Element catValu - konec
|
|
//Element labl
|
|
$element = 'labl';
|
|
$text = $labls[$keyCatgry];
|
|
$this->writeXmlElement($this->xml, $text, $element);
|
|
//Element labl - konec
|
|
xmlwriter_end_attribute($this->xml); //konec missing
|
|
xmlwriter_end_element($this->xml);
|
|
}
|
|
}
|
|
//Element catgry - konec
|
|
|
|
//Element varFormat
|
|
xmlwriter_start_element($this->xml, 'varFormat');
|
|
$attribute = 'type';
|
|
$element = VARFORMAT_ELEMENT_TYPE_GRID;
|
|
$this->writeXmlAttr4Element($this->xml, $attribute, $element);
|
|
xmlwriter_end_element($this->xml);
|
|
//Element varFormat - konec
|
|
//Konec elementa var ###############################################################################
|
|
xmlwriter_end_element($this->xml); // var
|
|
//}
|
|
}
|
|
}
|
|
} |