1KA_F2F/admin/survey/export/xmlClasses/class.XmlDocument.php

360 lines
14 KiB
PHP
Raw Normal View History

2020-08-14 13:36:36 +02:00
<?php
/**
*
* Class ki skrbi inicializacijo xml dokumenta
*
*
*/
####################################
####################################konec
include('../../vendor/autoload.php');
define("CODEBOOK_VERSION", 2.1);
2020-08-14 13:36:36 +02:00
class XmlDocument{
var $export_type; // Tip izvoza (vprašalnik, analize...)
var $export_subtype; // Podtip izvoza
var $export_format; // Format izvoza (latex->pdf, latex->rtf, xls...)
var $anketa; // ID ankete
var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
var $grupa = null; // trenutna grupa
var $usrId = null; // trenutni user
var $spremenljivka; // trenutna spremenljivka
//spremenljivke za Nastavitve pdf/rtf izvozov
var $export_font_size = 10;
var $export_numbering = 0;
var $export_show_if = 0;
var $export_show_intro = 0;
var $export_data_type = 0; // nacin izpisa vprasanlnika - kratek -> 0, dolg -> 1, zelo kratek -> 2
var $export_data_font_size;
var $export_data_numbering;
var $export_data_show_recnum;
var $export_data_show_if;
var $export_data_PB;
var $export_data_skip_empty;
var $export_data_skip_empty_sub;
var $export_data_landscape;
//spremenljivke za Nastavitve pdf/rtf izvozov - konec
var $head; // za shrambo tex preamble in zacetek dokumenta
var $tail; // za shrambo tex zakljucka dokumenta
var $naslovnicaUkaz; //za shrambo ukaza za izris naslovnice dokumenta
var $headerAndFooter; //za shrambo ukaza za izris glave in noge dokumenta
protected $surveyStyle; //za shrambo environmenta vprasalnika (omogoca spreminjanje velikosti besedila glede na izbrano nastavitev)
protected $analysisStyle; //za shrambo environmenta vprasalnika (omogoca spreminjanje velikosti besedila glede na izbrano nastavitev)
protected $statusStyle; //za shrambo environmenta vprasalnika (omogoca spreminjanje velikosti besedila glede na izbrano nastavitev)
protected $isAnswer = '';
protected $isAnswerBreakPodVprasanjem = '';
protected $xml='';
function __construct($anketa=null){
global $site_path, $global_user_id, $admin_type, $lang;
$this->anketa = $anketa;
}
###################################### konec construct-a
public function createXmlDocument($export_type='', $export_subtype='', $export_format=''){
global $lang, $site_path;
// Ustvarimo ogrodje dokumenta (locena funkcija), glavo, nogo, naslovnico...
$this->InitDocumentVars($export_type, $export_subtype, $export_format); //pridobi vse potrebne spremenljivke za ustvarjanje ogrodja dokumenta
#spremenljivke#################################################################
$datumGeneriranjaIzvoza = date("d. m. Y");
$anketaUstvarjena = SurveyInfo::getInstance()->getSurveyInsertDate();
$dolgoImeAnkete = SurveyInfo::getSurveyColumn('naslov');
$kratkoImeAnkete = SurveyInfo::getSurveyColumn('akronim');
$steviloVprasanj = SurveyInfo::getSurveyQuestionCount();
$anketaSpremenjena = SurveyInfo::getSurveyEditDate();
$avtorAnkete = SurveyInfo::getSurveyInsertName();
$avtorSpremenilAnketo = SurveyInfo::getSurveyEditName();
$surveyId = SurveyInfo::getSurveyId();
$userName = SurveyInfo::getUserInsertInfo('name');
$userSurname = SurveyInfo::getUserInsertInfo('surname');
$enkaVersion = SurveyInfo::getEnkaVersion('value');
$datumAktivacije = SurveyInfo::getSurveyStartsDate();
$datumDeaktivacije = SurveyInfo::getSurveyExpireDate();
$firstEntryDate = SurveyInfo::getSurveyFirstEntryDate();
$lastEntryDate = SurveyInfo::getSurveyLastEntryDate();
$completedSurveys = SurveyInfo::getValidSurveysCount();
$partiallyCompletedSurveys = SurveyInfo::getPartiallyValidSurveysCount();
$emptySurveys = SurveyInfo::getInvalidSurveysCount();
$sas = new SurveyAdminSettings(0, $surveyId);
$skupni_cas = $sas->testiranje_cas(1);
################################################
#spremenljivke################################################################# konec
$xml = xmlwriter_open_memory(); //Creating new xmlwriter using memory for string output
$this->xml = $xml;
//zacetek xml dokumenta
xmlwriter_set_indent($this->xml, 1);
$res = xmlwriter_set_indent_string($this->xml, ' ');
xmlwriter_start_document($this->xml, '1.0', 'UTF-8');
//zacetek xml dokumenta - konec
//Dodajanje DOCTYPE'<!DOCTYPE codeBook SYSTEM "http://www.ddialliance.org/sites/default/files/Version2-1.dtd">'
xmlwriter_start_dtd($this->xml, 'codeBook', null, 'http://www.ddialliance.org/sites/default/files/Version2-1.dtd');
xmlwriter_end_dtd($this->xml);
//Dodajanje DOCTYPE - konec
//Zacetek elementa codeBook
xmlwriter_start_element($this->xml, 'codeBook');
$attribute = 'version';
$element = CODEBOOK_VERSION;
$this->writeXmlAttr4Element($this->xml, $attribute, $element);
//Zacetek elementa codeBook - konec
//Element stdyDscr ##################################################################
xmlwriter_start_element($this->xml, 'stdyDscr'); //Zacetek elementa stdyDscr
xmlwriter_start_element($this->xml, 'citation'); //Zacetek elementa citation
xmlwriter_start_element($this->xml, 'titlStmt'); //Zacetek elementa titlStmt
//Element titl
$element = 'titl';
$text = $dolgoImeAnkete;
$this->writeXmlElement($this->xml, $text, $element);
//Element titl - konec
//Element altTitl
$element = 'altTitl';
$text = $kratkoImeAnkete;
$this->writeXmlElement($this->xml, $text, $element);
//Element altTitl - konec
//Element IDNo
$element = 'IDNo';
$text = $surveyId;
$this->writeXmlElement($this->xml, $text, $element);
//Element IDNo - konec
xmlwriter_end_element($this->xml); //Zakljucek elementa titlStmt
xmlwriter_start_element($this->xml, 'rspStmt'); //Zacetek elementa rspStmt
//Element AuthEnty
$element = 'AuthEnty';
//$text = $userName.' '.$userSurname;
$text = $avtorAnkete;
$this->writeXmlElement($this->xml, $text, $element);
//Element AuthEnty - konec
xmlwriter_end_element($this->xml); //Zakljucek elementa rspStmt
xmlwriter_start_element($this->xml, 'prodStmt'); //Zacetek elementa prodStmt
xmlwriter_start_element($this->xml, 'prodDate'); //Zacetek elementa prodDate
$attribute = 'date';
$element = date('Y-m-d');
$writeAttribute = 1;
$this->writeXmlAttr4Element($this->xml, $attribute, $element, $writeAttribute);
xmlwriter_end_element($this->xml); //Zakljucek elementa prodDate
xmlwriter_start_element($this->xml, 'software'); //Zacetek elementa software
$attribute = 'version';
$element = $enkaVersion;
$writeAttribute = 0;
$string = 1;
$text = '1KA - OneClick Survey';
$this->writeXmlAttr4Element($this->xml, $attribute, $element, $writeAttribute, $string, $text);
xmlwriter_end_element($this->xml); //Zakljucek elementa software
xmlwriter_end_element($this->xml); //Zakljucek elementa prodStmt
xmlwriter_start_element($this->xml, 'verStmt'); //Zacetek elementa verStmt
xmlwriter_start_element($this->xml, 'version'); //Zacetek elementa version
//izpis type in date
$attribute = 'type';
$element = 'version';
$this->writeXmlAttr4Element($this->xml, $attribute, $element);
$attribute = 'date';
$element = date('Y-m-d');
$writeAttribute = 1;
$this->writeXmlAttr4Element($this->xml, $attribute, $element, $writeAttribute);
xmlwriter_end_element($this->xml); //Zakljucek elementa version
xmlwriter_end_element($this->xml); //Zakljucek elementa verStmt
xmlwriter_end_element($this->xml); //Zakljucek elementa citation
xmlwriter_start_element($this->xml, 'stdyInfo'); //Zacetek elementa stdyInfo
xmlwriter_start_element($this->xml, 'sumDscr'); //Zacetek elementa sumDscr
xmlwriter_start_element($this->xml, 'collDate'); //Zacetek elementa collDate
//izpis event in date
$attribute = 'event';
$element = 'start';
$this->writeXmlAttr4Element($this->xml, $attribute, $element);
$attribute = 'date';
$date = date_create($datumAktivacije);
$element = date_format($date, 'Y-m-d');
$writeAttribute = 1;
$this->writeXmlAttr4Element($this->xml, $attribute, $element, $writeAttribute);
xmlwriter_end_element($this->xml); //Zakljucek elementa collDate
xmlwriter_start_element($this->xml, 'collDate'); //Zacetek elementa collDate
//izpis event in date
$attribute = 'event';
$element = 'end';
$this->writeXmlAttr4Element($this->xml, $attribute, $element);
$attribute = 'date';
$date = date_create($datumDeaktivacije);
$element = date_format($date, 'Y-m-d');
$writeAttribute = 1;
$this->writeXmlAttr4Element($this->xml, $attribute, $element, $writeAttribute);
xmlwriter_end_element($this->xml); //Zakljucek elementa collDate
//Element dataKind
$element = 'dataKind';
$text = 'survey';
$this->writeXmlElement($this->xml, $text, $element);
//Element dataKind - konec
xmlwriter_end_element($this->xml); //Zakljucek elementa sumDscr
xmlwriter_end_element($this->xml); //Zakljucek elementa stdyInfo
xmlwriter_start_element($this->xml, 'method'); //Zacetek elementa method
xmlwriter_start_element($this->xml, 'dataCol'); //Zacetek elementa dataCol
//Element collMode
$element = 'collMode';
$text = 'web survey';
$this->writeXmlElement($this->xml, $text, $element);
//Element collMode - konec
//Element collSitu
$dateFirstEntryDate = date_create($firstEntryDate);
$elementFirstEntryDate = date_format($dateFirstEntryDate, 'Y-m-d');
$dateLastEntryDate = date_create($lastEntryDate);
$elementLastEntryDate = date_format($dateLastEntryDate, 'Y-m-d');
$element = 'collSitu';
$text = '
Completed questionnaires: '.$completedSurveys.'
Partially completed questionnaires: '.$partiallyCompletedSurveys.'
Empty questionnaires: '.$emptySurveys.'
First entry: '.$elementFirstEntryDate.'
Last entry: '.$elementLastEntryDate.'
Average duration: '.$skupni_cas.' ';
xmlwriter_start_cdata($this->xml, $text);
xmlwriter_end_cdata($this->xml);
$this->writeXmlElement($this->xml, $text, $element);
//Element collSitu - konec
xmlwriter_end_element($this->xml); //Zakljucek elementa dataCol
xmlwriter_end_element($this->xml); //Zakljucek elementa method
xmlwriter_end_element($this->xml); //Zakljucek elementa stdyDscr
//Element stdyDscr - konec ##################################################################
//Glede na tip in podtip poklicemo ustrezen razred za izris vsebine xml porocila
switch ($export_type){
case 'survey':
$survey = new XmlSurvey($this->anketa, $export_format, $xml);
switch ($export_subtype){
case 'q_empty_xml':
$survey->displaySurvey($export_subtype, $this->export_data_type);
break;
}
break;
}
//Glede na tip in podtip poklicemo ustrezen razred za izris vsebine xml porocila - konec
//Zakljucek elementa Codebook
xmlwriter_end_element($this->xml);
//Zakljucek elementa Codebook - konec
//Zakljucek xml dokumenta
xmlwriter_end_document($this->xml);
$this->xml = xmlwriter_output_memory($xml); //Returns current buffer with xml
# generating xml file
$filename = 'export_'.$export_subtype.'_'.$surveyId.'.xml';
$fp = fopen(admin_temp($filename), "w") or
die ("cannot generate file $filename<br>\n");
fwrite($fp, $this->xml) or
die ("cannot send data to file<br>\n");
fclose($fp);
# generating xml file - konec
# generating xml output
$this->OutputXml($filename);
# generating xml output - konec
}
###################################### konec funkcije createDocument
#####################################################################################################
//Podporne funkcije za delovanje createDocument
#####################################################################################################
function InitDocumentVars($export_type='', $export_subtype='', $export_format=''){
global $site_path;
$this->export_type = $export_type;
$this->export_subtype = $export_subtype;
$this->export_format = $export_format;
if($export_type == 'survey'){ //ce je format 'survey', potrebuje naslednje nastavitve
SurveySetting::getInstance()->Init($this->anketa);
}
}
###################################### konec InitDocumentVars
//Funkcija za generiranje in brisanje datotek za pdf izvoz
function OutputXml($filename=''){
//priprava header za xml in forced download
header('Content-type: application/xml');
header('Content-Disposition: attachment; filename="' . $filename . '"');
//priprava header za xml in forced download - konec
readfile(admin_temp($filename));
//brisanje temp xml datoteke
unlink(admin_temp($filename));
//brisanje temp xml datoteke - konec
}
#############################################
function writeXmlAttr4Element($xml=null, $attribute=null, $element=null, $writeAttribute=0, $string=0, $text=''){
$this->xml = $xml;
if($writeAttribute){
xmlwriter_write_attribute($this->xml, $attribute, $element);
}else{
xmlwriter_start_attribute($this->xml, $attribute);
}
xmlwriter_text($this->xml, $element);
xmlwriter_end_attribute($this->xml);
if($string){
xmlwriter_text($this->xml, $text);
}
}
function writeXmlElement($xml=null, $text=null, $element=null){
$this->xml = $xml;
xmlwriter_start_element($this->xml, $element);
xmlwriter_text($this->xml, $text);
xmlwriter_end_element($this->xml);
}
}