1466 lines
65 KiB
PHP
1466 lines
65 KiB
PHP
<?php
|
||
|
||
/**
|
||
*
|
||
* Class ki skrbi inicializacijo latex dokumenta
|
||
*
|
||
*
|
||
*/
|
||
|
||
####################################
|
||
/*Uporabljeni Latex Packages:
|
||
- geometry za robove, ipd.
|
||
- tabularx za lazje urejanje tabel (ni podprto v latex2rtf)
|
||
- \usepackage{ltablex} - za vecstransko tabelo, \textheight=730pt za portrait, pred vsako tabelo \keepXColumns, da obdrzi sirino tabele na sirini teksta
|
||
- inputenc za uporabo utf8
|
||
- fancyhdr za ureditev glav in nog
|
||
- lastpage za pridobitev zadnje strani v dokumentu oz. stevilo strani v dokumentu, da deluje, je potrebno tex compile-at 2 krat
|
||
- \usepackage{multirow} za vecvrsticno tabelo
|
||
- \usepackage{tikz} in \usetikzlibrary{calc} za risanje drsnikov
|
||
- \usepackage{enumitem} za itemize, ki je potreben za pravilen izris rolet in izberite iz seznama v tabelah
|
||
- \usepackage{eurosym} za izpis simbola €
|
||
- \usepackage[export]{adjustbox} za poravnavo slik
|
||
|
||
|
||
linespread je razmik med vrsticami
|
||
|
||
\renewcommand{\tabularxcolumn}[1]{>{\arraybackslash}m{#1}} za sredinsko poravnane zadeve v tabularx tabeli
|
||
|
||
newenvironment{absolutelynopagebreak} za prepreciti prelome strani, kjer ni potrebno
|
||
|
||
\newcolumntype{s}{>{\hsize=.55\hsize \centering\arraybackslash}X} za sredinsko poravnane celice manjse dimenzije (0.55 navadne dimenzije)
|
||
|
||
\newcolumntype{S}{>{\hsize=.2\hsize}X} za celice manjse dimenzije (0.3 navadne dimenzije)
|
||
|
||
\newcolumntype{b}{>{\hsize=.5\hsize}X} za celice manjse dimenzije (0.5 navadne dimenzije)
|
||
|
||
\newcolumntype{B}{>{\hsize=1.3\hsize}X} za celico vecje dimenzije od navadne (1.3 navadne dimenzije)
|
||
|
||
\newcolumntype{A}{>{\hsize=3cm}X} za fiksno sirino prvega stolpca@tabularx
|
||
|
||
\newcolumntype{C}{>{\centering\arraybackslash}X} za sredinsko poravnavo celice, ki se samodejno prilagaja sirini
|
||
|
||
\newcolumntype{R}{>{\raggedleft\arraybackslash}X} za desno poravnavo celice, ki se samodejno prilagaja sirini
|
||
|
||
\newcolumntype{P}{>{\hsize=.1\hsize \centering\arraybackslash}X} za fiksno 10% fiksno sirino stolpca, ki ima sredinsko poravnavo (npr. analiza prvi, levi stolpec)
|
||
|
||
\usepackage{montserrat} pisava v novem slogu 1KA
|
||
|
||
\usepackage{wasysym} za neposredno risanje checkbox in radio button
|
||
|
||
#za prenos predolgega odgovora v novo vrstico########################
|
||
\usepackage{pgf} za aritmetiko z length
|
||
|
||
#za prenos predolgega odgovora v novo vrstico za vodoravno pod vprasanjem
|
||
\newcommand{\isAnswerBreakPodVprasanjem}[1]{\settowidth{\answerLength}{#1} \addtolength{\questionTotalLength}{\answerLength} \ifnum\questionTotalLength>\textwidth \mbox{} \\\\ #1 \settowidth{\questionTotalLength}{0} \else #1 \fi}
|
||
|
||
\renewcommand{\isAnswerBreakPodVprasanjem}[1]{
|
||
\settowidth{\answerLength}{#1} %dolzina odgovora
|
||
\addtolength{\questionTotalLength}{\answerLength} %dolzini odgovora dodaj trenutni dolzini celotnega vprasanja (vrstice)
|
||
\ifnum\questionTotalLength>\textwidth %ce je trenutna dolzina vprasanja vecja od sirine teksta (lista)
|
||
\mbox{} \\\\ #1 %pejdi v novo vrstico in izpisi odgovor
|
||
\ifnum\answerLength>\textwidth %ce je dolzina odgovora daljsa od od sirine teksta (lista)
|
||
\pgfmathsetmacro{\ratio}{\answerLength/\textwidth} %koliko je tekst vprasanja daljsi od sirine teksta (lista)
|
||
\pgfmathtruncatemacro{\macro}{\answerLength/\textwidth} %kaksen je ostanek, decimalke, brez celih stevilk
|
||
\pgfmathsetmacro{\newLengthA}{\the\textwidth * (\ratio-\macro)} %dolzina vrstice, kjer se konca predolgo besedilo odgovora
|
||
\setlength{\questionTotalLength}{\newLengthA pt} %trenutna dolzina celotnega vprasanja (vrstice) je enaka dolzini vrstice, kjer se konca predolgo besedilo odgovora
|
||
\else %drugace, torej dolzina odgovora ni daljsa od ene vrstice
|
||
\setlength{\questionTotalLength}{\answerLength} %trenutna dolzina celotnega vprasanja (vrstice) je enaka dolzini odgovora
|
||
\fi
|
||
\else %drugace, torej trenutna dolzina vprasanja ni vecja od sirine teksta (lista)
|
||
#1 %izpisi odgovor
|
||
\fi
|
||
}
|
||
#za prenos predolgega odgovora v novo vrstico za vodoravno pod vprasanjem - konec
|
||
|
||
#za prenos predolgega odgovora v novo vrstico za vodoravno ob vprasanju
|
||
|
||
#za prenos predolgega odgovora v novo vrstico za vodoravno ob vprasanju - konec
|
||
|
||
#za prenos predolgega odgovora v novo vrstico - konec########################
|
||
|
||
#za izris izbranega radio button
|
||
\newcommand{\radio}{\ooalign{\hidewidth$\bullet$\hidewidth\cr$\ocircle$}}
|
||
#za izris izbranega radio button - konec
|
||
|
||
#ureditev barve za celotno besedilo
|
||
default barva je #333 oz. RGB: 51, 51, 51
|
||
omenjeno kodo je potrebno deliti z 255, da dobimo stevilke, ki ustrezajo Latex => 51/255=0.2
|
||
\definecolor{oneclick}{rgb}{0.2, 0.2, 0.2} - definicija barve
|
||
\color{oneclick} v preamble, torej pred \begin{document} - sprozi uporabo barve za celoten dokument
|
||
#ureditev barve za celotno besedilo - konec
|
||
|
||
|
||
*/
|
||
####################################konec
|
||
|
||
//namespace Export\Latexclasses;
|
||
//include('../../function.php');
|
||
include('../../vendor/autoload.php');
|
||
define("ENKA_LOGO_SIZE", 'width=3.51cm,height=2cm,keepaspectratio');
|
||
define("ENKA_LOGO_SIZE_HEADER", 'width=1.75cm,height=1cm,keepaspectratio');
|
||
define("SINGLE_TABLE_WIDTH", 3000);
|
||
define("PAGE_TEXT_WIDTH", 10200); //17 cm, 170 mm, je 10200 twips, 1 mm je 60 twips
|
||
|
||
#definicija za izris drsnika s kroglico
|
||
define ("circleSlider", '\def\circleSLIDER#1#2{% 1: length, 2: position of the mark (0 to 1)
|
||
\tikz[baseline=-0.1cm]{
|
||
\coordinate (start) at (0,-0.1cm);
|
||
\coordinate (end) at (#1,0.1cm);
|
||
\coordinate (mark) at ($(start|-0,0)!#2!(end|-0,0)$);
|
||
\fill[rounded corners=0.1cm, draw=gray, fill=lightgray] (start) rectangle (end);
|
||
\fill[draw=gray, rounded corners=0.2mm, fill=gray!20!gray] (mark) circle(.15) ;
|
||
}
|
||
}');
|
||
|
||
#definicija za izris drsnika brez kroglice
|
||
define ("emptySlider", '\def\emptySLIDER#1{% 1: length
|
||
\tikz[baseline=-0.1cm]{
|
||
\coordinate (start) at (0,-0.1cm);
|
||
\coordinate (end) at (#1,0.1cm);
|
||
\fill[rounded corners=0.1cm, draw=gray, fill=lightgray] (start) rectangle (end);
|
||
}
|
||
}');
|
||
|
||
#definicija latex kode za dodajanje skripte za generiranje xls iz html
|
||
define ("headWithXlsScript",
|
||
'\ifdefined\HCode
|
||
\AtBeginDocument{%
|
||
\Configure{@HEAD}{\HCode{<script src="./export/script/saveAsExcel2.js"></script>\Hnewline}}
|
||
\ConfigureEnv{quote}{\Tg<quote>}{\Tg</quote>}{}{}
|
||
}
|
||
\fi');
|
||
|
||
class LatexDocument{
|
||
|
||
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 = null; // 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_show_gdpr_intro = 0;
|
||
//var $export_data_type = 0; // nacin izpisa vprasanlnika - kratek -> 0, dolg -> 1, zelo kratek -> 2
|
||
var $export_data_type = 0; // nacin izpisa vprasalnika - Razsirjen -> 1, Skrcen -> 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)
|
||
|
||
var $commentType = 1; // tip izpisa komentarjev
|
||
|
||
var $texNewLine = '\\\\ ';
|
||
|
||
protected $isAnswer = '';
|
||
protected $isAnswerBreakPodVprasanjem = '';
|
||
|
||
protected $pathToTexFile;
|
||
|
||
protected $path2Images;
|
||
|
||
protected $language = -1; // Katero verzijo prevoda izvazamo
|
||
protected $usr_id; //id respondenta
|
||
|
||
protected $admin_type;
|
||
public $casIzvajanjaPhp = null; //Funkcija namenjena samo testiranju
|
||
|
||
function __construct($anketa=null){
|
||
global $site_path, $global_user_id, $admin_type, $lang;
|
||
$this->anketa = $anketa;
|
||
$this->path2Images = $site_path.'admin/survey/export/latexclasses/textemp/images/';
|
||
$this->admin_type = $admin_type;
|
||
|
||
$this->casIzvajanjaPhp = microtime(true);
|
||
}
|
||
###################################### konec construct-a
|
||
|
||
public function createDocument($export_type='', $export_subtype='', $export_format='', $sprID = null){
|
||
global $lang, $site_path;
|
||
$this->usr_id = $_GET['usr_id'];
|
||
if($export_subtype=='heatmap_image'){ //ce je potrebno zgenerirati sliko heatmap
|
||
$this->HeatmapImage($_GET['sprID']);
|
||
return;
|
||
}
|
||
|
||
$this->spremenljivka = $sprID;
|
||
|
||
// 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 = $this->encodeText(SurveyInfo::getSurveyColumn('akronim'));
|
||
|
||
if($this->language!=-1){ //ce ni default jezik, ampak je prevod
|
||
$_lang = '_'.$this->language;
|
||
$kratkoImeAnkete = SurveySetting::getInstance()->getSurveyMiscSetting('srvlang_srv_novaanketa_kratkoime'.$_lang);
|
||
}else{
|
||
$kratkoImeAnkete = SurveyInfo::getSurveyColumn('naslov');
|
||
}
|
||
$kratkoImeAnkete = $this->encodeText($kratkoImeAnkete);
|
||
|
||
$steviloVprasanj = SurveyInfo::getSurveyQuestionCount();
|
||
$anketaSpremenjena = SurveyInfo::getSurveyEditDate();
|
||
$avtorAnkete = SurveyInfo::getSurveyInsertName();
|
||
$avtorSpremenilAnketo = SurveyInfo::getSurveyEditName();
|
||
$surveyId = SurveyInfo::getSurveyId();
|
||
################################################
|
||
#spremenljivke################################################################# konec
|
||
|
||
/*echo 'export_type: '.$export_type.'</br>';
|
||
echo 'export_subtype: '.$export_subtype.'</br>';
|
||
echo 'export_format: '.$export_format.'</br>';
|
||
echo 'anketaID: '.$_GET['anketa'].'</br>';
|
||
/*echo 'sprID: '.$_GET['sprID'].'</br>';
|
||
echo '$this->export_font_size: '.$this->export_font_size.'</br>';
|
||
echo '$this->export_data_type: '.$this->export_data_type.'</br>';
|
||
echo 'SurveyId: '.SurveyInfo::getSurveyId().'</br>'; */
|
||
|
||
#za pridobitev jezika respondenta
|
||
//pridobitev splosnega jezika ankete za respondenta nastavitev=> Osnovni jezik za respondente:
|
||
$sqlL = sisplet_query("SELECT lang_resp FROM srv_anketa WHERE id='$this->anketa' ");
|
||
$rowL = mysqli_fetch_array($sqlL);
|
||
$this->language = $rowL['lang_resp'];
|
||
|
||
############testiranje za jezik
|
||
if(isset($_GET['language'])){
|
||
$this->language = $_GET['language'];
|
||
//echo "jezik test: ".$this->language."</br>";
|
||
// Naložimo jezikovno datoteko
|
||
$file = '../../lang/'.$this->language.'.php';
|
||
include($file);
|
||
$_SESSION['langX'] = $site_url .'lang/'.$this->language.'.php';
|
||
}
|
||
############testiranje za jezik - konec
|
||
|
||
if ($this->usr_id != '') { //ce je izpis za dolocenega respondenta
|
||
$sqlL = sisplet_query("SELECT language FROM srv_user WHERE id = '$this->usr_id ' AND ank_id='$this->anketa' ");
|
||
$rowL = mysqli_fetch_array($sqlL);
|
||
$this->language = $rowL['language'];
|
||
$lang['id'] = $this->language;
|
||
}
|
||
#za pridobitev jezika respondenta - konec
|
||
|
||
//Tex preamble in zacetek latex dokumenta
|
||
$tex = $this->head;
|
||
|
||
//Dodatek h kodi, da bo črka đ vidna v pdf
|
||
if($export_format == 'pdf'){
|
||
$tex .= "\\fontencoding{T1}\selectfont \n";
|
||
}
|
||
|
||
if($export_format != 'xls'){ //ce ni xls
|
||
//izris glave pa noge
|
||
$tex .= $this->GenerateHeaderFooter($dolgoImeAnkete, $lang['page'], $datumGeneriranjaIzvoza, $export_format);
|
||
|
||
//ce ni izpis za enega respondenta IN ni izpis analize IN ni izpis status
|
||
if($export_subtype!='q_data' && $export_type!='analysis' && $export_type!='status' && $export_subtype!='edits_analysis' && $export_type!='gdpr'){
|
||
|
||
//Izris naslovnice
|
||
if($export_subtype=='q_data_all'){ //ce je izpis vseh odgovorov
|
||
$vsiOdgovoriBesedilo = $lang['export_firstpage_results'];
|
||
}else{
|
||
$vsiOdgovoriBesedilo = $lang['srv_rep_vprasalnik'];
|
||
}
|
||
$tex .= $this->GenerateNaslovnica ($export_format, $anketaSpremenjena, $lang['export_firstpage_shortname'], $kratkoImeAnkete, $lang['export_firstpage_longname'], $lang['export_firstpage_qcount'], $steviloVprasanj, $lang['export_firstpage_author'], $avtorAnkete, $lang['export_firstpage_edit'], $avtorSpremenilAnketo, $anketaUstvarjena, $dolgoImeAnkete, $lang['export_firstpage_date'], $vsiOdgovoriBesedilo);
|
||
//za ureditev naslova in podnaslova na naslovnici
|
||
//$tex .= $this->GenerateNaslovnicaNaslovi ($export_format, $anketaSpremenjena, $lang['export_firstpage_shortname'], $kratkoImeAnkete, $lang['export_firstpage_longname'], $lang['export_firstpage_qcount'], $steviloVprasanj, $lang['export_firstpage_author'], $avtorAnkete, $lang['export_firstpage_edit'], $avtorSpremenilAnketo, $anketaUstvarjena, $dolgoImeAnkete, $lang['export_firstpage_date'], $vsiOdgovoriBesedilo);
|
||
}
|
||
}
|
||
|
||
//zacetek izpisa ############################################################################
|
||
$tex .= '\begin{'.$export_type.'} ';
|
||
|
||
if($export_format == 'rtf'){ //ce je rtf, pred prvim vprasanjem, dodatna prazna vrstica zaradi tezav s poravnavo
|
||
$tex .= $this->texNewLine;
|
||
}
|
||
|
||
// Glede na tip in podtip poklicemo ustrezen razred za izris vsebine porocila (npr LatexFreq, LatexTTest, ...)
|
||
|
||
switch ( $export_type )
|
||
{
|
||
case 'survey':
|
||
$survey = new LatexSurvey($this->anketa, $export_format, $this->export_show_intro, $this->export_show_if, $this->export_data_skip_empty, $this->export_data_skip_empty_sub);
|
||
//$tex .= $survey->displaySurvey($export_subtype);
|
||
switch ( $export_subtype )
|
||
{
|
||
case 'q_empty':
|
||
$tex .= $survey->displaySurvey($export_subtype, $this->export_data_type, $this->language);
|
||
break;
|
||
case 'q_data':
|
||
$tex .= $survey->displaySurvey($export_subtype, $this->export_data_type, $this->language);
|
||
break;
|
||
case 'q_data_all':
|
||
$tex .= $survey->displayAllSurveys($export_subtype, $export_format, $this->export_data_type);
|
||
break;
|
||
case 'q_comment':
|
||
$tex .= $survey->displaySurveyCommentaries($export_subtype, $this->export_data_type);
|
||
break;
|
||
}
|
||
break;
|
||
|
||
case 'analysis':
|
||
$analysis = new LatexAnalysis($this->anketa, $export_format, $this->spremenljivka);
|
||
$tex .= $analysis->displayAnalysis($export_subtype);
|
||
break;
|
||
|
||
case 'status':
|
||
$status = new LatexStatus($this->anketa);
|
||
$tex .= $status->displayStatus();
|
||
break;
|
||
|
||
case 'gdpr':
|
||
$gdpr = new LatexGDPR($this->anketa);
|
||
$tex .= $gdpr->displayGDPR($export_subtype);
|
||
break;
|
||
|
||
case 'other':
|
||
if($export_subtype == 'edits_analysis'){
|
||
/* if ($_GET['seansa'] > 0){
|
||
//if (isset ($_GET['seansa'])){
|
||
$seansa = $_GET['seansa'];
|
||
}else{
|
||
$seansa = '30';
|
||
}
|
||
if (isset ($_GET['time'])){
|
||
$time = $_GET['time'];
|
||
}else{
|
||
$time = '1 month';
|
||
}
|
||
if (isset ($_GET['status'])){
|
||
$status = $_GET['status'];
|
||
}else{
|
||
$status = 0;
|
||
}
|
||
if (isset ($_GET['from'])){
|
||
$from = $_GET['from'];
|
||
}else{
|
||
$from = '';
|
||
}
|
||
if (isset ($_GET['to'])){
|
||
$to = $_GET['to'];
|
||
}else{
|
||
$to = '';
|
||
}
|
||
if (isset ($_GET['user'])){
|
||
$user = $_GET['user'];
|
||
}else{
|
||
$user = 'all';
|
||
}
|
||
if (isset ($_GET['period'])){
|
||
$period = $_GET['period'];
|
||
}else{
|
||
$period = 'day';
|
||
}
|
||
//print_r($_GET);
|
||
//print_r($_POST);
|
||
if (isset ($_GET['seansa'])){
|
||
echo "seansa iz get: ".$_GET['seansa']."</br>";
|
||
} */
|
||
|
||
//$editAnalysis = new LatexEditsAnalysis($this->anketa, $seansa, $time, $status, $from, $to, $user, $period);
|
||
$editAnalysis = new LatexEditsAnalysis($this->anketa);
|
||
$tex .= $editAnalysis->displayEditAnalysis();
|
||
}
|
||
break;
|
||
|
||
case 'data':
|
||
echo "exporting data";
|
||
$tex .= 'To je tip data \\\\ ';
|
||
case 'full':
|
||
$tex .= 'To je podtip full';
|
||
break;
|
||
case 'list':
|
||
$tex .= 'To je podtip list';
|
||
break;
|
||
break;
|
||
}
|
||
|
||
//konec izpisa######################################################################################################
|
||
$tex .= ' \end{'.$export_type.'}';
|
||
|
||
//zakljucek latex dokumenta
|
||
$tex.= $this->tail;
|
||
############################################################### - zakljucek latex dokumenta
|
||
|
||
|
||
//izris latex kode
|
||
|
||
$this->export_subtype = $export_subtype;
|
||
$this->export_format = $export_format;
|
||
|
||
# generating tex file
|
||
$this->pathToTexFile = $site_path.'admin/survey/export/latexclasses/textemp/';
|
||
//$filenameTex = $this->pathToTexFile.'export_'.$export_subtype.'_'.$surveyId.'_'.$export_format.'.tex';
|
||
|
||
$niPrijavljenUporabnik = 0;
|
||
if ($this->admin_type==-1) { //ce ni prijavljen uporabnik
|
||
$niPrijavljenUporabnik = 1; //dodaj info v imenu tex datoteke
|
||
}
|
||
$filenameTex = $this->pathToTexFile.'export_'.$export_subtype.'_'.$surveyId.'_'.$export_format.'_'.$niPrijavljenUporabnik.'.tex';
|
||
$filename = $this->pathToTexFile.'export_'.$export_subtype.'_'.$surveyId.'_'.$export_format.'_'.$niPrijavljenUporabnik;
|
||
$fp = fopen($filenameTex, "w") or
|
||
die ("cannot generate file $filenameTex<br>\n");
|
||
fwrite($fp, $tex) or
|
||
die ("cannot send data to file<br>\n");
|
||
fclose($fp);
|
||
# generating tex file - konec
|
||
|
||
/*********************** TEST ********************************/
|
||
//TODO: Samo za test briši na produkciji
|
||
global $admin_type;
|
||
if($admin_type == 0){
|
||
$koncniCas = number_format((microtime(true) - $this->casIzvajanjaPhp), 2);
|
||
|
||
$SL = new SurveyLog();
|
||
$SL->addMessage(SurveyLog::IZVOZ, 'PHP: '.$koncniCas.'s, anketa: '.$this->anketa.', vrsta datoteke: '.$export_format.', vrsta izvoza: '.$export_subtype);
|
||
$SL->write();
|
||
|
||
$samoLatex = microtime(true);
|
||
}
|
||
/********************* END TEST ******************************/
|
||
|
||
/*UREDITEV ODSTRANJEVANJA PRAZNIH VRSTIC IN CHARACTER-JEV IZ TEX DATOTEKE******************/
|
||
$ukazOdstrani = "sed -i '/^[[:space:]]*$/d' ".$filenameTex;
|
||
exec($ukazOdstrani);
|
||
/*UREDITEV ODSTRANJEVANJA PRAZNIH VRSTIC IN CHARACTER-JEV IZ TEX DATOTEKE - END ******************/
|
||
|
||
if($export_format == 'pdf'){
|
||
# generating pdf output
|
||
$this->OutputPdf($filenameTex, $surveyId, $niPrijavljenUporabnik);
|
||
# generating pdf output - konec
|
||
}elseif($export_format == 'rtf'){
|
||
# generating rtf output
|
||
$this->OutputRtf($filenameTex, $surveyId, $niPrijavljenUporabnik);
|
||
# generating rtf output - konec
|
||
}elseif($export_format == 'xls'){
|
||
# generating html output
|
||
$this->OutputHtml($filenameTex, $surveyId, $filename);
|
||
# generating html output - konec
|
||
}
|
||
|
||
/*********************** TEST ********************************/
|
||
//TODO: Samo za test briši na produkciji
|
||
if($admin_type == 0){
|
||
$koncniCas = number_format((microtime(true) - $samoLatex), 2);
|
||
|
||
$SL = new SurveyLog();
|
||
$SL->addMessage(SurveyLog::IZVOZ, 'Latex: '.$koncniCas.'s, anketa: '.$this->anketa.', vrsta datoteke: '.$export_format.', vrsta izvoza: '.$export_subtype);
|
||
$SL->write();
|
||
}
|
||
/********************* END TEST *****************************/
|
||
|
||
//brisanje temp datotek tex
|
||
unlink($filenameTex); //tex
|
||
unlink($filename.".aux"); //aux
|
||
unlink($filename.".log"); //log
|
||
unlink($filename.".pdf"); //pdf
|
||
unlink($filename.".out"); //out
|
||
//brisanje temp datotek tex - konec
|
||
|
||
//brisanje temp slikovnih datotek
|
||
$this->DeleteTmpImages($surveyId);
|
||
//brisanje temp slikovnih datotek - konec
|
||
|
||
}
|
||
###################################### konec funkcije createDocument
|
||
|
||
|
||
#####################################################################################################
|
||
//Podporne funkcije za delovanje createDocument
|
||
#####################################################################################################
|
||
function InitDocumentVars($export_type='', $export_subtype='', $export_format='')
|
||
{
|
||
global $site_path;
|
||
global $lang;
|
||
$baseLineSkip = intval($this->export_font_size*1.2);
|
||
|
||
$this->export_type = $export_type;
|
||
$this->export_subtype = $export_subtype;
|
||
|
||
if($export_format == 'xls'){
|
||
//$xlsExportFilename = $export_format.'_'.$export_type.'_'.$export_subtype.'_'.$this->anketa;
|
||
if($this->spremenljivka){
|
||
$xlsExportFilename = $export_format.'_'.$export_type.'_'.$export_subtype.'_'.$this->anketa.'_'.$this->spremenljivka;
|
||
}else{
|
||
$xlsExportFilename = $export_format.'_'.$export_type.'_'.$export_subtype.'_'.$this->anketa;
|
||
}
|
||
|
||
$button4XlsExport = '\Configure{BODY}
|
||
{\SaveEndP\IgnorePar
|
||
\HCode{<input type="button" value="'.$lang['srv_export_2_xls_button'].'" onclick="exportTableToExcel(\''.$xlsExportFilename.'\', \''.$this->export_subtype.'\')"/>\Hnewline
|
||
}\ShowPar\par}';
|
||
|
||
}
|
||
|
||
//if($export_type == 'survey'||$export_type == 'analysis'){ //ce je format 'survey' ali 'analysis', potrebuje naslednje nastavitve
|
||
if($export_type == 'survey'){ //ce je format 'survey', potrebuje naslednje nastavitve
|
||
|
||
#Nastavitve pdf/rtf izvozov################################################################
|
||
|
||
SurveySetting::getInstance()->Init($this->anketa);
|
||
|
||
############testiranje za jezik
|
||
if(isset($_GET['language'])){
|
||
$this->language = $_GET['language'];
|
||
//echo "jezik test: ".$this->language."</br>";
|
||
// Naložimo jezikovno datoteko
|
||
$file = '../../lang/'.$this->language.'.php';
|
||
include($file);
|
||
$_SESSION['langX'] = $site_url .'lang/'.$this->language.'.php';
|
||
}
|
||
############testiranje za jezik - konec
|
||
|
||
//Izpis vprasalnika
|
||
// Prikazi uvoda (default ne)
|
||
$this->export_show_intro = SurveySetting::getInstance()->getSurveyMiscSetting('export_show_intro');
|
||
//Ce je vprasalnik z izpisom odgovorov respondentov - $export_subtype => 'q_data' || 'q_data_all'
|
||
if($export_subtype == 'q_data' || $export_subtype == 'q_data_all'){ // ce je subtype-a 'q_data' || 'q_data_all'
|
||
// Tip izvoza (0->navaden-default, 1->dolg, 2->kratek) -> ne velja vec, saj sedaj sta samo dva tipa izvozov (razsirjen in skrcen)
|
||
// Tip izvoza (1->razsirjen, 2->skrcen)
|
||
$this->export_data_type = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_type');
|
||
//echo "tip izvoza: ".$this->export_data_type."</br>";
|
||
if($this->export_data_type == 0) {
|
||
$this->export_data_type = 1;
|
||
}
|
||
//$this->export_type = SurveySetting::getInstance()->getSurveyMiscSetting('export_data_type');
|
||
//$this->type = SurveySetting::getInstance()->getSurveyMiscSetting('export_data_type');
|
||
// Velikost pisave (default 10)
|
||
//$this->export_data_font_size = SurveySetting::getInstance()->getSurveyMiscSetting('export_data_font_size');
|
||
$this->export_font_size = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_font_size');
|
||
// Številčenje vprašanj (default da)
|
||
//$this->export_data_numbering = SurveySetting::getInstance()->getSurveyMiscSetting('export_data_numbering');
|
||
$this->export_numbering = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_numbering');
|
||
// Prikaz recnuma (default da)
|
||
//$this->export_data_show_recnum = SurveySetting::getInstance()->getSurveyMiscSetting('export_data_show_recnum');
|
||
$this->export_show_recnum = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_show_recnum');
|
||
// Prikaz pogojev (default da)
|
||
//$this->export_data_show_if = SurveySetting::getInstance()->getSurveyMiscSetting('export_data_show_if');
|
||
$this->export_show_if = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_show_if');
|
||
// Page break med posameznimi respondenti (default ne)
|
||
$this->export_data_PB = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_PB');
|
||
// Izpusti vprasanja brez odgovora (default ne)
|
||
$this->export_data_skip_empty = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_skip_empty');
|
||
// Izpusti podvprasanja brez odgovora (default ne)
|
||
$this->export_data_skip_empty_sub = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_skip_empty_sub');
|
||
// Landscape postavitev izvoza (default ne)
|
||
$this->export_data_landscape = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_landscape');
|
||
}else{ //ce je prazen vprasalnik
|
||
//$this->export_type = SurveySetting::getInstance()->getSurveyMiscSetting('export_type');
|
||
// Prikaz pogojev (default da)
|
||
$this->export_show_if = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_show_if');
|
||
// Velikost pisave (default 10) - samo vprasanj
|
||
$this->export_font_size = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_font_size');
|
||
// Številčenje vprašanj (default da)
|
||
$this->export_numbering = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_numbering');
|
||
}
|
||
#Nastavitve pdf/rtf izvozov################################################################konec
|
||
}
|
||
|
||
//echo "export show if: ".$this->export_show_if."</br>";
|
||
//echo "export type: ".$export_type." subtype: ".$this->export_subtype."</br>";
|
||
#### pokomentiral, ker z uporabo template ni vec potrebno in ker po novih specifikacijah je velikost pisave in razmik med vrsticami predefiniran
|
||
/* if($export_type == 'analysis'||$export_type == 'status'||$export_type == 'other'){ //ce je izpis analize ALI status ALI drugo
|
||
if($export_type == 'analysis'){
|
||
$tableAnalysisEnvironment = ' \newenvironment{tableAnalysis}
|
||
{\parindent0pt \fontsize{6}{'.$baseLineSkip.'} \selectfont }
|
||
{ }';
|
||
if($export_format == 'xls' || $export_format == 'pdf'){
|
||
$lTablex = '\usepackage{ltablex}';
|
||
}
|
||
//$linespread = 1.15;
|
||
$linespread = 1.5;
|
||
//}elseif($export_type == 'status'){
|
||
}elseif($export_type == 'status'||$export_subtype == 'edits_analysis'){
|
||
$tableStatusEnvironment = ' \newenvironment{tableStatus}
|
||
{\parindent0pt \fontsize{8}{'.$baseLineSkip.'} \selectfont }
|
||
{ }';
|
||
//$linespread = 0.8;
|
||
$linespread = 1;
|
||
}
|
||
}else{
|
||
$tableAnalysisEnvironment = '';
|
||
$tableStatusEnvironment = '';
|
||
$lTablex = ''; //ce je ltablex prisoten pri survey izvozih, so tezave
|
||
//$linespread = 1.15;
|
||
$linespread = 1.5;
|
||
}
|
||
if($this->export_data_landscape==1||($export_type=='analysis'&&($this->export_subtype=='crosstab'||$this->export_subtype=='mean'||$this->export_subtype=='ttest'||$this->export_subtype=='multicrosstab')||$this->export_subtype=='break'||$this->export_subtype=='chart'||$this->export_subtype=='creport'||$this->export_subtype=='status')){ //ce je postavitev landscape ALI je izvoz analiz in (Tabele ali Povprecja ali T-test ali Multitabele ali razbitje)
|
||
$landscapePostavitev = "landscape";
|
||
$visinaTeksta = 210;
|
||
$sirinaTeksta = 294;
|
||
$hSize = '\hsize='.$sirinaTeksta.'mm';
|
||
}else{
|
||
$landscapePostavitev = "portrait";
|
||
$visinaTeksta = 294;
|
||
$hSize = '';
|
||
} */
|
||
#### pokomentiral, ker z uporabo template ni vec potrebno in ker po novih specifikacijah je velikost pisave in razmik med vrsticami predefiniran - konec
|
||
|
||
if($export_format == 'pdf'){
|
||
####################################
|
||
//tex template dokumenta za pdf
|
||
if($export_type=='analysis'&&($this->export_subtype=='sums'||$this->export_subtype=='freq'||$this->export_subtype=='desc')){ //ce je analiza, kjer ni potreben landscape pogled
|
||
$this->head = '
|
||
\documentclass{latexTemplatePdfAnalysisPortrait} %include datoteke s template
|
||
\graphicspath{ {'.$site_path.'admin/survey/export/latexclasses/textemp/images/}, {'.$site_path.'uploadi/editor/}, {'.$site_path.'main/survey/uploads/}, {'.$site_path.'admin/survey/pChart/Cache/} }
|
||
\begin{document}
|
||
';
|
||
//}elseif($this->export_data_landscape==1||($export_type=='analysis'&&($this->export_subtype=='crosstab'||$this->export_subtype=='mean'||$this->export_subtype=='ttest'||$this->export_subtype=='multicrosstab')||$this->export_subtype=='break'||$this->export_subtype=='chart'||$this->export_subtype=='creport'||$this->export_subtype=='status')||($export_type=='other'&&$export_subtype == 'edits_analysis')){ //ce je potreben landscape pogled
|
||
}elseif(($export_type=='analysis'&&($this->export_subtype=='crosstab'||$this->export_subtype=='mean'||$this->export_subtype=='ttest'||$this->export_subtype=='multicrosstab')||$this->export_subtype=='break'||$this->export_subtype=='chart'||$this->export_subtype=='creport'||$this->export_subtype=='status')||($export_type=='other'&&$export_subtype == 'edits_analysis')){ //ce je potreben landscape pogled
|
||
$this->head = '
|
||
\documentclass{latexTemplatePdfAnalysisAndOtherLandscape} %include datoteke s template
|
||
\graphicspath{ {'.$site_path.'admin/survey/export/latexclasses/textemp/images/}, {'.$site_path.'uploadi/editor/}, {'.$site_path.'main/survey/uploads/}, {'.$site_path.'admin/survey/pChart/Cache/} }
|
||
\begin{document}
|
||
';
|
||
|
||
}else{ //ce je vprasalnik
|
||
$this->head = '
|
||
\documentclass{latexTemplatePdfSurvey} %include datoteke s template
|
||
\graphicspath{ {'.$site_path.'admin/survey/export/latexclasses/textemp/images/}, {'.$site_path.'uploadi/editor/}, {'.$site_path.'main/survey/uploads/}, {'.$site_path.'admin/survey/pChart/Cache/} }
|
||
'.circleSlider.' %funkcija za izris sliderja z bunkico
|
||
'.emptySlider.' %funkcija za izris sliderja
|
||
\begin{document}
|
||
';
|
||
}
|
||
#################################### definiranje ukaza za glave in noge pdf - konec
|
||
|
||
}else if($export_format == 'rtf'||$export_format == 'xls'){
|
||
####################################
|
||
//tex preamble + zacetek dokumenta za rtf
|
||
$this->head = '
|
||
\documentclass[10pt]{article}
|
||
\usepackage[a4paper, margin=20mm]{geometry}
|
||
\usepackage[utf8]{inputenc}
|
||
\usepackage{color}
|
||
\usepackage{graphicx}
|
||
\newenvironment{'.$export_type.'}
|
||
{ }
|
||
{ }
|
||
\newenvironment{tableAnalysis}
|
||
{\parindent0pt \fontsize{6}{'.$baseLineSkip.'} \selectfont }
|
||
{ }
|
||
\usepackage{fancyhdr}
|
||
\pagestyle{fancy}
|
||
';
|
||
|
||
if($export_format == 'rtf'&&$export_type=='analysis'){
|
||
//$this->head .= '\graphicspath{ {'.$site_path.'admin/survey/export/latexclasses/textemp/images/}, {'.$site_path.'uploadi/editor/}, {'.$site_path.'main/survey/uploads/}, {'.$site_path.'admin/survey/pChart/Cache/} }';
|
||
}
|
||
|
||
if($export_format == 'xls'){
|
||
$this->head .= '
|
||
'.headWithXlsScript.'
|
||
'.$button4XlsExport.'
|
||
';
|
||
}
|
||
|
||
$this->head .= '
|
||
\begin{document}
|
||
';
|
||
|
||
#################################### tex preamble + zacetek dokumenta za rtf - konec
|
||
####################################
|
||
//definiranje ukaza za glave in noge za rtf
|
||
/*ima 5 vhodnih podatkov:
|
||
1. ime ankete v glavi levo;
|
||
2. logo 1KA v glavi na desni;
|
||
3. besedilo "Stran" v nogi na desni;
|
||
4. velikost logo 1KA v glavi na desni;
|
||
5. datum generiranja izvoza v nogi na levi.
|
||
*/
|
||
/* $this->headerAndFooter = '
|
||
\\newcommand{\headerfooter}[5]{
|
||
\\lhead{\\includegraphics[scale=#4]{#2} #1}
|
||
\\lfoot{www.1ka.si}
|
||
\\rfoot{#3 \\thepage}
|
||
}
|
||
'; */
|
||
|
||
if($this->usr_id){
|
||
//echo "usr id: ".$this->usr_id;
|
||
$recnum = $this->getRecnum();
|
||
if($recnum && (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_show_recnum')){
|
||
$recnumBesedilo = "(Recnum $recnum)";
|
||
}else{
|
||
$recnumBesedilo = "";
|
||
}
|
||
}
|
||
|
||
$this->headerAndFooter = '
|
||
\\newcommand{\headerfooter}[6]{
|
||
\\lhead{\\includegraphics[scale=#4]{#2} #1 '.$recnumBesedilo.'}
|
||
\\lfoot{www.1ka.si}
|
||
\\rfoot{#3 \\thepage}
|
||
}
|
||
';
|
||
/* $this->headerAndFooter = '
|
||
\\newcommand{\headerfooter}[5]{
|
||
\\lhead{#1}
|
||
\\rhead{\\includegraphics[scale=#4]{#2}}
|
||
\\lfoot{www.1ka.si}
|
||
\\rfoot{#3 \\thepage}
|
||
}
|
||
'; */
|
||
#################################### definiranje ukaza za glave in noge za rtf - konec
|
||
}
|
||
|
||
####################################
|
||
//zakljucek dokumenta
|
||
$this->tail='
|
||
\end{document}
|
||
';
|
||
####################################konec
|
||
|
||
}
|
||
###################################### konec InitDocumentVars
|
||
|
||
//Funkcija za izris glave in noge za pdf ######################################
|
||
function GenerateHeaderFooter($imeAnkete='', $stranDokumenta=null, $datumGeneriranjaIzvoza='', $export_format=''){
|
||
global $lang, $site_path;
|
||
//Definiranje ukaza
|
||
$tex = $this->headerAndFooter; //definiranje ukaza za glavo in nogo dokumenta
|
||
|
||
//izbira ustreznega logotipa za določen jezik
|
||
if($lang['id'] == 1){ //ce je id 1, naj bo slovenski
|
||
$logo1ka = 'logo1ka';
|
||
}else{ //ce je bilo kateri drugi, naj bo angleski
|
||
$logo1ka = 'logo1kaeng';
|
||
}
|
||
//izbira ustreznega logotipa za določen jezik - konec
|
||
|
||
if($this->usr_id){
|
||
|
||
$recnum = $this->getRecnum();
|
||
|
||
if($recnum && (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_show_recnum') == 1){
|
||
$recnumBesedilo = "(Recnum $recnum)";
|
||
}else{
|
||
$recnumBesedilo = "";
|
||
}
|
||
}
|
||
|
||
//Izris glave in noge s predefiniranim ukazom za pdf
|
||
$tex .= "\headerfooter{".$imeAnkete."}{".$this->path2Images."".$logo1ka."}{".$stranDokumenta."}{".ENKA_LOGO_SIZE_HEADER."}{".$datumGeneriranjaIzvoza."}{".$recnumBesedilo."}";
|
||
|
||
return $tex;
|
||
}
|
||
######################################
|
||
|
||
|
||
//Funkcija za izpis naslovnice ######################################
|
||
function GenerateNaslovnica($export_format='', $anketaSpremenjenaNaslovnica='', $kratkoImeAnketeBesedilo='', $kratkoImeAnkete='', $dolgoImeAnketeBesedilo='', $steviloVprasanjNaslovnicaBesedilo='', $steviloVprasanjNaslovnica='', $avtorNaslovnicaBesedilo='', $avtorNaslovnica='', $avtorSpremenilNaslovnicaBesedilo='', $avtorSpremenilNaslovnica='', $anketaUstvarjenaNaslovnica='', $imeAnkete='', $dneBesedilo='', $vsiOdgovoriBesedilo=''){
|
||
global $lang, $site_path;
|
||
$tex = '';
|
||
|
||
//Aktiviranost ankete ##########################################################
|
||
$activity = SurveyInfo::getSurveyActivity();
|
||
$activityTex = $this->GetAktiviranostAnkete($activity);
|
||
//Aktiviranost ankete - konec ##################################################
|
||
|
||
//izbira ustreznega logotipa za določen jezik
|
||
if($lang['id'] == 1){ //ce je id 1, naj bo slovenski
|
||
$logo1ka = 'logo1ka';
|
||
}else{ //ce je bilo kateri drugi, naj bo angleski
|
||
$logo1ka = 'logo1kaeng';
|
||
}
|
||
//izbira ustreznega logotipa za določen jezik - konec
|
||
//echo "stevilo spremenljivk: ".(SurveyInfo::getSurveyVariableCount());
|
||
$steviloSpremenljivk = SurveyInfo::getSurveyVariableCount();
|
||
|
||
|
||
|
||
if($export_format == 'pdf'){
|
||
####################################
|
||
//klicanje latex funkcije za generiranje naslovnice
|
||
$tex .= '
|
||
\naslovnica
|
||
{'.ENKA_LOGO_SIZE.', right}
|
||
{'.$logo1ka.'}
|
||
{'.$imeAnkete.'}
|
||
{'.$vsiOdgovoriBesedilo.'}
|
||
{\MakeUppercase{{'.$kratkoImeAnketeBesedilo.'}}: & {'.$kratkoImeAnkete.'}}
|
||
{\MakeUppercase{{'.$steviloVprasanjNaslovnicaBesedilo.'}}: & {'.$steviloVprasanjNaslovnica.'} \\\\
|
||
& \\\\
|
||
\MakeUppercase{{'.$lang['srv_usableResp_qcount'].'}}: & {'.$steviloSpremenljivk.'}}
|
||
{\MakeUppercase{{'.$lang['srv_displaydata_status'].'}}: & {'.$activityTex.'}}
|
||
{\MakeUppercase{{'.$avtorNaslovnicaBesedilo.'}}: & {'.$avtorNaslovnica.', '.$anketaUstvarjenaNaslovnica.'}}
|
||
{\MakeUppercase{{'.$avtorSpremenilNaslovnicaBesedilo.'}}: & {'.$avtorSpremenilNaslovnica.', '.$anketaSpremenjenaNaslovnica.'}}
|
||
';
|
||
#################################### //tex za pdf naslovnico - konec
|
||
}else if($export_format == 'rtf'){
|
||
####################################
|
||
//tex za rtf naslovnico
|
||
$tex .= '
|
||
%\\includegraphics['.ENKA_LOGO_SIZE.', right]{'.$this->path2Images.''.$logo1ka.'} \\par
|
||
\\vspace{4cm}
|
||
\\noindent
|
||
{\\huge \\textbf{\\noindent {'.$imeAnkete.'} }} \\par
|
||
\\vspace{1cm}
|
||
\\vspace{0.5cm}
|
||
\\noindent
|
||
{\\huge \\textbf{\\noindent {'.$vsiOdgovoriBesedilo.'} }} \\par
|
||
\\noindent
|
||
\\begin{tabular}{ll}
|
||
& \\\\
|
||
'.$kratkoImeAnketeBesedilo.': & '.$kratkoImeAnkete.' \\\\
|
||
& \\\\
|
||
'.$steviloVprasanjNaslovnicaBesedilo.': & '.$steviloVprasanjNaslovnica.' \\\\
|
||
& \\\\
|
||
'.$lang['srv_usableResp_qcount'].': & '.$steviloSpremenljivk.' \\\\
|
||
& \\\\
|
||
'.$lang['srv_displaydata_status'].': & '.$activityTex.' \\\\
|
||
& \\\\
|
||
'.$avtorNaslovnicaBesedilo.': & '.$avtorNaslovnica.', '.$anketaUstvarjenaNaslovnica.' \\\\
|
||
& \\\\
|
||
'.$avtorSpremenilNaslovnicaBesedilo.': & '.$avtorSpremenilNaslovnica.', '.$anketaSpremenjenaNaslovnica.'
|
||
\\end{tabular}
|
||
\\newline
|
||
\\newpage
|
||
';
|
||
#################################### //tex za rtf naslovnico - konec
|
||
}
|
||
return $tex;
|
||
}
|
||
###########################################
|
||
|
||
//Funkcija za pridobitev aktiviranosti ankete
|
||
function GetAktiviranostAnkete($activity=''){
|
||
global $lang;
|
||
$tex = '';
|
||
$_last_active = end($activity);
|
||
if (SurveyInfo::getSurveyColumn('active') == 1) { //ce je anketa aktivna
|
||
$tex = ''.$lang['srv_anketa_active2'].''; //zapisi: "Anketa je aktivna"
|
||
}else {
|
||
# preverimo ali je bila anketa že aktivirana
|
||
if (!isset($_last_active['starts'])) {
|
||
# anketa še sploh ni bila aktivirana
|
||
$tex = ''.$lang['srv_survey_non_active_notActivated1'].''; //zapisi: "Anketa se ni bila aktivirana"
|
||
} else {
|
||
# anketa je že bila aktivirana ampak je sedaj neaktivna
|
||
$tex = ''.$lang['srv_survey_non_active1'].''; //zapisi: "Anketa je zakljucena"
|
||
}
|
||
}
|
||
// Aktivnost
|
||
if( count($activity) > 0 ){
|
||
$tex = ''.$lang['export_firstpage_active_from'].': '.SurveyInfo::getSurveyStartsDate().''; //zapisi: "Aktivna od:"
|
||
$tex .= ' '.$lang['export_firstpage_active_until'].': '.SurveyInfo::getInstance()->getSurveyExpireDate().' '; //zapisi: "Aktivna do:"
|
||
}
|
||
return $tex;
|
||
}
|
||
#############################################
|
||
|
||
//Funkcija za generiranje in brisanje datotek za pdf izvoz
|
||
function OutputPdf($filenameTex='', $surveyId=null, $niPrijavljenUporabnik=null){
|
||
global $site_path;
|
||
|
||
# generating pdf file //ukaz je potrebno zagnati 2x, ker drugace ne pride do koncnega stevila strani, ki se nahaja v nogi, poleg trenutne strani
|
||
chdir($this->pathToTexFile);
|
||
if(IS_WINDOWS){
|
||
//za windows sisteme
|
||
$ukaz = 'latexmk -pdf '.$filenameTex;
|
||
//$ukaz = "latexmk -silent -f -pdf -e \'$max_repeat=2\' -pdflatex=\"/usr/bin/pdflatex -interaction=batchmode \"". $filenameTex;
|
||
exec($ukaz);
|
||
}elseif(IS_LINUX){
|
||
//za linux sisteme
|
||
exec("/usr/bin/pdflatex ".$filenameTex);
|
||
//exec("/usr/bin/buf_size=2000000 pdflatex ".$filenameTex);
|
||
|
||
}
|
||
# generating pdf file - konec
|
||
|
||
$filename = 'export_'.$this->export_subtype.'_'.$surveyId.'_'.$this->export_format.'_'.$niPrijavljenUporabnik;
|
||
$filenamePdf = $filename.'.pdf';
|
||
$filenameAux = $filename.'.aux';
|
||
$filenameLog = $filename.'.log';
|
||
$filenameOut = $filename.'.out';
|
||
$file = $this->pathToTexFile.$filenamePdf;
|
||
|
||
header('Content-type: application/pdf');
|
||
header('Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1');
|
||
header('Pragma: public');
|
||
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
|
||
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
|
||
//header('Content-Transfer-Encoding: binary');
|
||
//header('Accept-Ranges: bytes');
|
||
//header("Content-Length: " . filesize($file));
|
||
header('Content-Disposition: inline; filename="' . $filenamePdf . '"');
|
||
|
||
readfile($file);
|
||
|
||
//brisanje temp datotek slik
|
||
$this->DeleteChartTmpImage();
|
||
//brisanje temp datotek slik - konec
|
||
}
|
||
#############################################
|
||
|
||
//Funkcija, ki skrbi za brisanje tmp png datotek za izpis izvozov chart
|
||
function DeleteChartTmpImage(){
|
||
global $site_path;
|
||
$path = $site_path.'admin/survey/pChart/Cache/';
|
||
$dirList = glob($path . '*');
|
||
foreach ($dirList as $file) {
|
||
$fileExtArr = explode('.', $file);
|
||
$fileExt = $fileExtArr[count($fileExtArr)-1];
|
||
//if($fileExt == 'png'){
|
||
if($fileExt == 'pdf'){
|
||
unlink($file);
|
||
}
|
||
}
|
||
}
|
||
//Funkcija, ki skrbi za brisanje tmp png datotek za izpis izvozov chart - konec
|
||
|
||
//Funkcija, ki skrbi za brisanje tmp slikovnih datotek
|
||
function DeleteTmpImages($surveyId=null){
|
||
global $site_path;
|
||
$path = $site_path.'uploadi/editor/'; //pot do mape s tmp slikovnimi datotekami
|
||
|
||
$sqlSprem = sisplet_query("SELECT element_spr FROM srv_branching WHERE ank_id='".$surveyId."' ");
|
||
$sqlStavek = "SELECT element_spr FROM srv_branching WHERE ank_id='".$surveyId."' ";
|
||
|
||
while ($rowSprem = mysqli_fetch_assoc($sqlSprem)){
|
||
|
||
if($rowSprem['element_spr']){
|
||
//$textTest = $path.$rowSprem['element_spr'];
|
||
$textTest = $path.$rowSprem['element_spr']."_tmpImage";
|
||
//echo "Funkcija DeleteTmpImages ".$textTest." </br>";
|
||
$file2Delete = glob($textTest.'*');
|
||
//echo count($file2Delete)."</br>";
|
||
foreach ($file2Delete as $file) {
|
||
//echo "Funkcija DeleteTmpImages ".$file." </br>";
|
||
unlink($file);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//Funkcija, ki skrbi za brisanje tmp slikovnih datotek - konec
|
||
|
||
|
||
|
||
//Funkcija za generiranje in brisanje datotek za rtf izvoz
|
||
function OutputRtf($filenameTex='', $surveyId=null, $niPrijavljenUporabnik=null){
|
||
global $site_path;
|
||
|
||
# generating rtf file
|
||
if(IS_WINDOWS){
|
||
//za windows sisteme
|
||
$latex2Rtf = 'latex2rt';
|
||
}elseif(IS_LINUX){
|
||
//za linux sisteme
|
||
$latex2Rtf = 'latex2rtf';
|
||
}
|
||
|
||
$rtfGeneratingCommand = $latex2Rtf.' '.$filenameTex;
|
||
//$rtfGeneratingCommand = $latex2Rtf.' -d 2 '.$filenameTex.' 2>latex2rtf2.log'; //ukaz, ki ustavri se log datoteko
|
||
chdir($this->pathToTexFile);
|
||
//exec($rtfGeneratingCommand);
|
||
|
||
shell_exec($rtfGeneratingCommand);
|
||
# generating rtf file - konec
|
||
|
||
//$filename = 'export_'.$this->export_subtype.'_'.$surveyId.'_'.$this->export_format;
|
||
$filename = 'export_'.$this->export_subtype.'_'.$surveyId.'_'.$this->export_format.'_'.$niPrijavljenUporabnik;
|
||
$filenameRtf = $filename.'.rtf';
|
||
$file = $this->pathToTexFile.$filenameRtf;
|
||
//$file = $filenameRtf;
|
||
//echo "file: ".$file;
|
||
|
||
#uredi sirino stolpca tabele glede na stevilo stolpcev v tabeli neposredno v rtf ############################################
|
||
$this->urediStolpceTabele($file);
|
||
#uredi sirino stolpca tabele glede na stevilo stolpcev v tabeli neposredno v rtf - konec ####################################
|
||
|
||
#spremeni font v Montserrat neposredno v rtf ############################################
|
||
$this->urediFont($file);
|
||
#spremeni font v Montserrat neposredno v rtf - konec ####################################
|
||
|
||
#dodaj ustrezno barvo za crto glave in naslovnice neposredno v rtf ############################################
|
||
$this->urediBarvoCrte($file);
|
||
#dodaj ustrezno barvo za crto glave in naslovnice neposredno v rtf - konec ####################################
|
||
|
||
#dodaj ustrezno navpicno crto pred informacijami o anketi neposredno v rtf ############################################
|
||
if($this->export_subtype=="q_empty"||$this->export_subtype=="q_data_all"){
|
||
$this->dodajCrtoPred($file);
|
||
}
|
||
#dodaj ustrezno navpicno crto pred informacijami o anketi neposredno v rtf - konec ####################################
|
||
|
||
#dodaj ustrezno navpicno crto v glavi dokumenta neposredno v rtf ############################################
|
||
$this->dodajCrtoGlava($file);
|
||
#dodaj ustrezno navpicno crto v glavi dokumenta neposredno v rtf - konec ####################################
|
||
|
||
#dodaj ustrezno navpicno crto v nogi dokumenta neposredno v rtf ############################################
|
||
$this->dodajCrtoNoga($file);
|
||
#dodaj ustrezno navpicno crto v nogi dokumenta neposredno v rtf - konec ####################################
|
||
|
||
#header-ji rtf datoteke
|
||
header('Content-type: application/rtf');
|
||
header('Content-Transfer-Encoding: binary');
|
||
//header('Content-Length: ' . filesize($file));
|
||
header('Content-Disposition: inline; filename="' . $filenameRtf . '"');
|
||
//header('Content-Disposition: attachment;filename="'.basename($filename).'"');
|
||
#header-ji rtf datoteke - konec
|
||
|
||
#Stara varianta
|
||
//readfile($file);
|
||
#Stara varianta - konec
|
||
|
||
#nova varianta
|
||
set_time_limit(0);
|
||
$chunksize = 2 * (1024 * 1024); //5 MB (= 5 242 880 bytes) per one chunk of file.
|
||
//$fileD = @fopen($file,"r");
|
||
$fileD = @fopen($file,"rb");
|
||
while(!feof($fileD))
|
||
{
|
||
print(@fread($fileD, $chunksize));
|
||
ob_flush();
|
||
flush();
|
||
}
|
||
#nova varianta - konec
|
||
|
||
//brisanje temp datotek
|
||
unlink($file); //rtf
|
||
//brisanje temp datotek - konec
|
||
}
|
||
#############################################
|
||
|
||
//Funkcija za generiranje html kode
|
||
function OutputHtml($filenameTex='', $surveyId=null, $filename=''){
|
||
global $site_path;
|
||
//echo "filename: ".$filename." ";
|
||
|
||
# generating html file
|
||
$htmlGeneratingCommand = 'htlatex '.$filenameTex;
|
||
//$htmlGeneratingCommand = 'htlatex '.$filenameTex.' hello';
|
||
chdir($this->pathToTexFile);
|
||
exec($htmlGeneratingCommand); //5 kratna ponovitev ukaza, da se \multicolumn latex koda lahko prenese pravilno v colspan HTML
|
||
exec($htmlGeneratingCommand);
|
||
exec($htmlGeneratingCommand);
|
||
exec($htmlGeneratingCommand);
|
||
exec($htmlGeneratingCommand);
|
||
# generating html file - konec
|
||
|
||
echo file_get_contents($filename.'.html'); //odpri in pokazi html izvoz z gumbom za izvoz iz html v xls
|
||
|
||
$filenameCss = $filename.'.css';
|
||
$filenameHtml = $filename.'.html';
|
||
$filenameIdv = $filename.'.idv';
|
||
$filenameLg = $filename.'.lg';
|
||
$filenameTmp = $filename.'.tmp';
|
||
$filename4tc = $filename.'.4tc';
|
||
$filenameAux = $filename.'.aux';
|
||
$filenameDvi = $filename.'.dvi';
|
||
$filenameLog = $filename.'.log';
|
||
$filenameXref = $filename.'.xref';
|
||
$filename4ct = $filename.'.4ct';
|
||
|
||
//brisanje temp datotek
|
||
unlink($filenameCss); //css
|
||
unlink($filenameHtml); //html
|
||
unlink($filenameIdv); //idv
|
||
unlink($filenameLg); //lg
|
||
unlink($filenameTmp); //tmp
|
||
unlink($filename4tc); //4tc
|
||
unlink($filenameAux); //Aux
|
||
unlink($filenameDvi); //Dvi
|
||
unlink($filenameLog); //log
|
||
unlink($filenameXref); //Xref
|
||
unlink($filename4ct); //4ct
|
||
//brisanje temp datotek - konec
|
||
}
|
||
#############################################
|
||
|
||
|
||
####################################################################################
|
||
//Funkcija, ki skrbi za urejanje sirine stolpca tabele glede na stevilo stolpcev v tabeli
|
||
function urediStolpceTabele($file=null){
|
||
$rtfCode = file_get_contents($file); //string z generirano rtf kodo
|
||
|
||
$pos = 0; //belezi pozicijo cellx kode v rtf
|
||
$posRowB = 0; //belezi pozicijo \\trowd kode v rtf, zacetek vrstice tabele
|
||
$posRowEnd = 0; //belezi pozicijo \\row kode v rtf, zakljucek vrstice tabele
|
||
$findB = 'trowd'; //rtf koda za zacetek tabele
|
||
$findCellx = 'cellx'; //rtrf koda za ureditev sirine celice
|
||
$findRow = '\row';
|
||
$numOfRowOccurrences = substr_count ($rtfCode, $findB); //belezi stevilo najdenih "trowd" v rtf kodi, stevilo vrstic v tabeli
|
||
|
||
if($numOfRowOccurrences){ //ce se pojavi kaksna vrstica v tabeli
|
||
|
||
for($i=0;$i<$numOfRowOccurrences;$i++){ //preleti vsako vrstico tabele
|
||
$posRowB = strpos($rtfCode, '\trowd', $posRowB+1); //belezi pozicijo zacetka kode za vrstico v tabeli
|
||
$posRowEnd = strpos($rtfCode, $findRow, $posRowEnd+1); //belezi pozicijo konca kode za vrstico v tabeli
|
||
$posRowEnd = $posRowEnd + strlen($findRow);
|
||
|
||
$substringVrstice = substr($rtfCode, $posRowB, (($posRowEnd-$posRowB)+1)); //belezi kodo celotne vrstice v tabeli
|
||
|
||
$lengthSubstringVrstice = strlen($substringVrstice); //dolzina trenutnega substring-a s katero se bo odstranilo staro kodo
|
||
|
||
$numOfCellxOccurrences = substr_count ($substringVrstice, $findCellx); //belezi stevilo najdenih "cellx" v rtf kodi za eno vrstico tabele
|
||
$pos = 0;
|
||
$posB = 0;
|
||
//echo "trowd: ".$posRowB."</br>";
|
||
//echo "numOfCellxOccurrences: ".$numOfCellxOccurrences."</br>";
|
||
|
||
if($numOfCellxOccurrences>2){ //ce imamo vec kot 2 stolpca, prilagodi sirino stolpca glede na stevilo stolpcev
|
||
for($j=1;$j<=$numOfCellxOccurrences;$j++){
|
||
$width = round( $j*PAGE_TEXT_WIDTH/($numOfCellxOccurrences) );
|
||
//echo "substringVrstice: ".$substringVrstice."</br></br>";
|
||
|
||
$posB = strpos($substringVrstice, 'cellx', $posB+1); //pozicija zacetka cellx kode, ki jo je potrebno nadomestiti
|
||
$posE = strpos($substringVrstice, "\\", $posB+1); //pozicija konca cellx kode, ki jo je potrebno nadomestiti
|
||
|
||
$cellXString = substr($substringVrstice, $posB, (($posE-$posB))); //trenutna cellx koda s sirino stolpca
|
||
//echo $cellXString."</br>";
|
||
$lastCellx = substr_count ($cellXString, '{'); //belezi stevilo najdenih "cellx" v rtf kodi za eno vrstico tabele
|
||
if($lastCellx){
|
||
$posSymbol = strpos($cellXString, '{', 0);
|
||
$cellXString = substr($cellXString,0,$posSymbol);
|
||
//echo $cellXString."</br>";
|
||
}
|
||
//echo $cellXString."</br>";
|
||
$replace = 'cellx'.$width; //nadomestna cellx koda s prilagojeno sirino glede na stevilo stolpcev
|
||
|
||
$substringVrstice = substr_replace($substringVrstice,'',$posB,strlen($cellXString)); //izbrisi trenutno kodo za cellx
|
||
|
||
$substringVrstice = substr_replace($substringVrstice,$replace,$posB,0); //nadomesti z novo kodo s posodobljeno sirino stolpca za cellx
|
||
|
||
}
|
||
//echo "</br> substringVrstice changed: ".$substringVrstice."</br></br></br>";
|
||
|
||
//iz trenutne rtf kode odstrani del s starim substring-om
|
||
$rtfCode = substr_replace($rtfCode,'',$posRowB, $lengthSubstringVrstice);
|
||
|
||
//na mestu starega substring dodaj spremenjenega
|
||
$rtfCode = substr_replace($rtfCode,$substringVrstice,$posRowB,0);
|
||
|
||
}elseif($numOfCellxOccurrences==1){ //ce je samo ena tabela (Izberite s seznama, Povleci-spusti, ...)
|
||
//echo "substringVrstice: ".$substringVrstice."</br></br>";
|
||
|
||
$posB = strpos($substringVrstice, 'cellx', $posB+1); //pozicija zacetka cellx kode, ki jo je potrebno nadomestiti
|
||
$posE = strpos($substringVrstice, "\\", $posB+1); //pozicija konca cellx kode, ki jo je potrebno nadomestiti
|
||
|
||
$cellXString = substr($substringVrstice, $posB, (($posE-$posB))); //trenutna cellx koda s sirino stolpca
|
||
//echo $cellXString."</br>";
|
||
$lastCellx = substr_count ($cellXString, '{'); //belezi stevilo najdenih "cellx" v rtf kodi za eno vrstico tabele
|
||
if($lastCellx){
|
||
$posSymbol = strpos($cellXString, '{', 0);
|
||
$cellXString = substr($cellXString,0,$posSymbol);
|
||
//echo $cellXString."</br>";
|
||
}
|
||
//echo $cellXString."</br>";
|
||
//$replace = 'cellx'.$width; //nadomestna cellx koda s prilagojeno sirino glede na stevilo stolpcev
|
||
$replace = 'cellx'.SINGLE_TABLE_WIDTH; //nadomestna cellx koda s prilagojeno sirino glede na stevilo stolpcev
|
||
|
||
$substringVrstice = substr_replace($substringVrstice,'',$posB,strlen($cellXString)); //izbrisi trenutno kodo za cellx
|
||
|
||
$substringVrstice = substr_replace($substringVrstice,$replace,$posB,0); //nadomesti z novo kodo s posodobljeno sirino stolpca za cellx
|
||
|
||
//iz trenutne rtf kode odstrani del s starim substring-om
|
||
$rtfCode = substr_replace($rtfCode,'',$posRowB, $lengthSubstringVrstice);
|
||
|
||
//na mestu starega substring dodaj spremenjenega
|
||
$rtfCode = substr_replace($rtfCode,$substringVrstice,$posRowB,0);
|
||
}
|
||
}
|
||
}
|
||
|
||
file_put_contents($file, $rtfCode); //prenesi preurejeno kodo v obstojeco rtf datoteko
|
||
}
|
||
|
||
//Funkcija, ki skrbi za urejanje sirine stolpca tabele glede na stevilo stolpcev v tabeli - konec
|
||
###################################################################################################
|
||
|
||
####################################################################################
|
||
//Funkcija, ki skrbi za spremembo fonta rtf dokumenta neposredno v rtf
|
||
function urediFont($file=null){
|
||
$rtfCode = file_get_contents($file); //string z generirano rtf kodo
|
||
|
||
$posOrigFont = 0; //belezi pozicijo imena fonta "Times New Roman" v rtf
|
||
$origFont = 'Times New Roman'; //belezi ime fonta, ki ga zelimo zamenjati
|
||
$lenOrigFont = strlen($origFont);
|
||
$newFont = 'Montserrat';
|
||
|
||
$posOrigFont = strpos($rtfCode, $origFont);
|
||
//echo "posOrigFont: ".$posOrigFont."</br>";
|
||
//echo "lenOrigFont: ".$lenOrigFont."</br>";
|
||
|
||
//iz trenutne rtf kode odstrani del s starim substring-om
|
||
$rtfCode = substr_replace($rtfCode,'', $posOrigFont, $lenOrigFont);
|
||
|
||
//na mestu starega substring dodaj spremenjenega
|
||
$rtfCode = substr_replace($rtfCode, $newFont, $posOrigFont, 0);
|
||
|
||
// echo "rtfCode: </br>";
|
||
// echo $rtfCode;
|
||
|
||
file_put_contents($file, $rtfCode); //prenesi preurejeno kodo v obstojeco rtf datoteko
|
||
}
|
||
//Funkcija, ki skrbi za spremembo fonta rtf dokumenta neposredno v rtf - konec
|
||
###################################################################################################
|
||
|
||
####################################################################################
|
||
//Funkcija, ki skrbi za dodajanje ustrezne barve navpicne crte neposredno v rtf
|
||
function urediBarvoCrte($file=null){
|
||
$rtfCode = file_get_contents($file); //string z generirano rtf kodo
|
||
|
||
$posColorTbl = 0; //belezi pozicijo besedila "\colortbl;" v rtf
|
||
$textColorTbl = '\colortbl;'; //belezi besedilo, ki iscemo
|
||
$lenColorTbl = strlen($textColorTbl); //dolzina besedila "\colortbl;", po kateri je potrebno dodati novo barvo
|
||
|
||
$newColor = '\red30\green136\blue229;';
|
||
|
||
$posColorTbl = strpos($rtfCode, $textColorTbl);
|
||
$posNewColor = $posColorTbl + $lenColorTbl; //hrani pozicijo nove barve
|
||
|
||
//na ustreznem mestu dodaj novo barvo - substr_replace(string,replacement,start,length)
|
||
$rtfCode = substr_replace($rtfCode, $newColor, $posNewColor, 0);
|
||
|
||
file_put_contents($file, $rtfCode); //prenesi preurejeno kodo v obstojeco rtf datoteko
|
||
}
|
||
//Funkcija, ki skrbi za dodajanje ustrezne barve navpicne crte neposredno v rtf - konec
|
||
###################################################################################################
|
||
|
||
####################################################################################
|
||
//Funkcija, ki skrbi za dodajanje navpicne crte pred informacijami o anketi neposredno v rtf
|
||
function dodajCrtoPred($file=null){
|
||
$rtfCode = file_get_contents($file); //string z generirano rtf kodo
|
||
|
||
$textPar = '{\pard\plain\s0\qj\widctlpar\f0\fs20\sl240\slmult1 \fi0 \par'; //hrani besedilo za zacetek naslednjega odstavka pred katerim se mora nahajati crta
|
||
$posBesedila = 0; //dodal definicijo pred klicem strpos, ker je javilo napako
|
||
$posPar = strpos($rtfCode, $textPar, $posBesedila); //pozicija zacetka naslednjega odstavka pred katerim se mora nahajati crta - //strpos(string,find,start)
|
||
|
||
$textCrta = '\pard \brdrb \brdrs\brdrw120\brsp20\brdrcf1 {\fs4\~}\par \pard'; //hrani besedilo za izris crte zelene debeline (120) in barve (brdrcf1), ki je potrebno dodati rtf kodi
|
||
$posCrta = $posPar; //hrani pozicijo kode z zeleno crto
|
||
|
||
//na ustreznem mestu dodaj zeleno crto - substr_replace(string,replacement,start,length)
|
||
$rtfCode = substr_replace($rtfCode, $textCrta, $posCrta, 0);
|
||
|
||
file_put_contents($file, $rtfCode); //prenesi preurejeno kodo v obstojeco rtf datoteko
|
||
}
|
||
//Funkcija, ki skrbi za dodajanje navpicne crte pred informacijami o anketi neposredno v rtf - konec
|
||
###################################################################################################
|
||
|
||
###################################################################################
|
||
//Funkcija, ki skrbi za dodajanje crte v glavi neposredno v rtf
|
||
function dodajCrtoGlava($file=null){
|
||
global $lang;
|
||
|
||
$rtfCode = file_get_contents($file); //string z generirano rtf kodo
|
||
|
||
$findHeaderStart = '\header'; //hrani besedilo zacetka glave, ki jo je potrebno najti
|
||
$posHeaderStart = strrpos($rtfCode, $findHeaderStart); //pozicija besedila za zacetek glave dokumenta - //strrpos(string,find)
|
||
|
||
$findPicStart = '\pict'; //hrani besedilo zacetka slike v glavi, kjer je potrebno dodati crto
|
||
$posPicStart = strpos($rtfCode, $findPicStart, $posHeaderStart); //pozicija besedila zacetka slike - //strpos(string,find,start)
|
||
|
||
$findPicEnd = '}'; //hrani besedilo konca slike v glavi
|
||
$posPicEnd = strpos($rtfCode, $findPicEnd, $posPicStart); //pozicija besedila konca slike v glavi dokumenta - //strpos(string,find,start)
|
||
|
||
$findTitleEnd = '\tab'; //hrani besedilo konca naslova vprasalnika v glavi, kjer je potrebno dodati crto
|
||
$posTitleEnd = strpos($rtfCode, $findTitleEnd, $posPicEnd); //pozicija besedila konca naslova vprasalnika v glavi dokumenta - //strpos(string,find,start)
|
||
|
||
$textCrta = '\pard \brdrb \brdrs\brdrw120\brsp20\brdrcf1 {\fs4\~}\par \pard'; //hrani besedilo za izris crte zelene debeline (120) in barve (brdrcf1), ki je potrebno dodati rtf kodi
|
||
$posCrta = $posTitleEnd+strlen($findTitleEnd); //hrani pozicijo kode z zeleno crto
|
||
|
||
//na ustreznem mestu dodaj zeleno crto - substr_replace(string,replacement,start,length)
|
||
$rtfCode = substr_replace($rtfCode, $textCrta, $posCrta, 0);
|
||
|
||
file_put_contents($file, $rtfCode); //prenesi preurejeno kodo v obstojeco rtf datoteko
|
||
}
|
||
//Funkcija, ki skrbi za dodajanje crte v glavi neposredno v rtf
|
||
###################################################################################################
|
||
|
||
|
||
####################################################################################
|
||
//Funkcija, ki skrbi za dodajanje crte v nogi neposredno v rtf
|
||
function dodajCrtoNoga($file=null){
|
||
global $lang;
|
||
|
||
$rtfCode = file_get_contents($file); //string z generirano rtf kodo
|
||
|
||
$findFooterStart = '\footer'; //hrani besedilo zacetka noge
|
||
$posFooterStart = strrpos($rtfCode, $findFooterStart); //pozicija besedila za zacetek noge dokumenta - //strrpos(string,find,start) - najde zadnje besedilo v kodi
|
||
$lenFooterStart = strlen($findFooterStart); //dolzina besedila "\footer", po kateri je potrebno dodati kodo za crto v nogi
|
||
|
||
$textCrta = '\pard \brdrb \brdrs\brdrw10\brsp20\brdrcf2 {\fs4\~}\par \pard'; //hrani besedilo za izris crte zelene debeline (10) in barve (brdrcf2), ki je potrebno dodati rtf kodi
|
||
$posCrta = $posFooterStart + $lenFooterStart; //hrani pozicijo kode z zeleno crto
|
||
|
||
//na ustreznem mestu dodaj zeleno crto - substr_replace(string,replacement,start,length)
|
||
$rtfCode = substr_replace($rtfCode, $textCrta, $posCrta, 0);
|
||
|
||
file_put_contents($file, $rtfCode); //prenesi preurejeno kodo v obstojeco rtf datoteko
|
||
}
|
||
//Funkcija, ki skrbi za dodajanje crte v nogi neposredno v rtf - konec
|
||
###################################################################################################
|
||
|
||
function HeatmapImage($sprId=null){
|
||
$imageFileName = 'heatmap'.$sprId.'.png';
|
||
//echo "imageFileName: ".$imageFileName."</br>";
|
||
global $site_path;
|
||
global $site_url;
|
||
//echo '<img alt="" src="'.$site_url.'main/survey/uploads/'.$fileName.'"></br>';
|
||
$src = $site_url.'main/survey/uploads/'.$imageFileName;
|
||
$image = imagecreatefrompng($src);
|
||
|
||
imagealphablending($image, false);
|
||
imagesavealpha($image, true);
|
||
|
||
header('Content-Disposition: Attachment;filename='.$imageFileName.';filename*=utf8'.$imageFileName);
|
||
header('Content-Type: image/png');
|
||
//header('Content-Type: image/png; charset=utf-8');
|
||
//header('Content-Type: application/force-download');
|
||
|
||
imagepng($image);
|
||
imagedestroy($image);
|
||
}
|
||
|
||
function getRecnum(){
|
||
$izbranStatusProfile = SurveyStatusProfiles :: getStatusAsQueryString();
|
||
$sqluString = "SELECT id, last_status, lurker, recnum FROM srv_user WHERE ank_id = '".$this->anketa."' ".$izbranStatusProfile." AND deleted='0' AND preview='0' AND id='".$this->usr_id."' ORDER BY recnum";
|
||
//echo $sqluString;
|
||
$sqlu = sisplet_query($sqluString);
|
||
$rowu = mysqli_fetch_array($sqlu);
|
||
$recnum = $rowu['recnum'];
|
||
return $recnum;
|
||
}
|
||
|
||
#funkcija ki skrbi za encode dolocenih spornih delov besedila v latex-u prijazno
|
||
function encodeText($text=''){
|
||
global $site_path, $lang;
|
||
//$text = str_replace(' ','X',$text); //nadomesti presledke
|
||
//echo "Encoding ".$text."</br>";
|
||
|
||
$this->path2UploadedImages = $site_path.'uploadi/editor/';
|
||
if($text == ''){ //ce ni teksta, vrni se
|
||
return;
|
||
}
|
||
|
||
$findSpace = ' ';
|
||
$posSpace1 = strpos($text, $findSpace); //najdi pozicijo prvega presledka v besedilu
|
||
$posSpace2 = strripos($text, $findSpace); //najdi pozicijo zadnjega presledka v besedilu
|
||
|
||
//ureditev posebnih karakterjev za Latex http://www.cespedes.org/blog/85/how-to-escape-latex-special-characters, https://en.wikibooks.org/wiki/LaTeX/Special_Characters#Other_symbols
|
||
$text = str_replace('\\','\textbackslash{} ',$text);
|
||
//$text = str_replace('{','\{',$text);
|
||
//$text = str_replace('}','\}',$text);
|
||
$text = str_replace('$','\$ ',$text);
|
||
$text = str_replace('#','\# ',$text);
|
||
$text = str_replace('%','\% ',$text);
|
||
$text = str_replace('€','\euro',$text);
|
||
$text = str_replace('^','\textasciicircum{} ',$text);
|
||
$text = str_replace('_','\_ ',$text);
|
||
$text = str_replace('~','\textasciitilde{} ',$text);
|
||
if(strpos($text, '&')){ //ce je prisotno v besedilu &'
|
||
$text = str_replace('&','\& ',$text);
|
||
}else{
|
||
$text = str_replace('&','\& ',$text);
|
||
}
|
||
$text = str_replace(' ','~',$text);
|
||
//$text = str_replace('<','\textless ',$text);
|
||
$text = str_replace('<',' \textless ',$text);
|
||
//$text = str_replace('>','\textgreater ',$text);
|
||
$text = str_replace('>',' \textgreater ',$text);
|
||
//ureditev posebnih karakterjev za Latex - konec
|
||
|
||
//ureditev grskih crk
|
||
$text = str_replace('α','\textalpha ',$text);
|
||
$text = str_replace('β','\textbeta ',$text);
|
||
$text = str_replace('γ','\textgamma ',$text);
|
||
$text = str_replace('δ','\textdelta ',$text);
|
||
$text = str_replace('ε','\textepsilon ',$text);
|
||
$text = str_replace('ζ','\textzeta ',$text);
|
||
$text = str_replace('η','\texteta ',$text);
|
||
$text = str_replace('θ','\texttheta ',$text);
|
||
$text = str_replace('ι','\textiota ',$text);
|
||
$text = str_replace('κ','\textkappa ',$text);
|
||
$text = str_replace('λ','\textlambda ',$text);
|
||
$text = str_replace('μ','\textmugreek ',$text);
|
||
$text = str_replace('ν','\textnu ',$text);
|
||
$text = str_replace('ξ','\textxi ',$text);
|
||
//$text = str_replace('ο','\textomikron ',$text);
|
||
$text = str_replace('π','\textpi ',$text);
|
||
$text = str_replace('ρ','\textrho ',$text);
|
||
$text = str_replace('σ','\textsigma ',$text);
|
||
$text = str_replace('τ','\texttau ',$text);
|
||
$text = str_replace('υ','\textupsilon ',$text);
|
||
$text = str_replace('φ','\textphi ',$text);
|
||
$text = str_replace('χ','\textchi ',$text);
|
||
$text = str_replace('ψ','\textpsi ',$text);
|
||
$text = str_replace('ω','\textomega ',$text);
|
||
//ureditev grskih crk - konec
|
||
|
||
|
||
//detekcija prisotnosti e-naslova v besedilu in primerna preureditev, da pride do pravilnega izpisa
|
||
$findAt = '@1'; //IZKLOPIL DETEKCIJO, KER DELA TUDI BREZ TEGA
|
||
$numOfAt = substr_count($text, $findAt); //stevilo '@' v besedilu
|
||
$findNewline = 'br';
|
||
|
||
$text = preg_replace("/<\/?a( [^>]*)?>/i", "", $text); //remove anchor tag from string <a href= ... </a>, to se je uredilo za rešiti <a href= mailto: ...
|
||
|
||
$posAt = strpos($text, $findAt);
|
||
if($posAt && $posSpace1){ //ce je prisotna afna in je prisoten presledek v besedilu
|
||
$posSpace1Mail = strpos(substr($text, $posAt), $findSpace); //najdi pozicijo prvega presledka v besedilu po e-naslovu
|
||
$posSpace1Mail = $posSpace1Mail+$posAt; //koncna pozicija, ce se gleda celotno besedilo
|
||
//echo $posSpace1Mail."</br>";
|
||
|
||
//najdi prvi presledek pred afno
|
||
$posSpace2Mail = strripos(substr($text, 0, $posAt), $findSpace); //najdi pozicijo zadnjega presledka v besedilu pred e-naslovom
|
||
//echo $posSpace2Mail."</br>";
|
||
|
||
//najdi prvi simbol za v novo vrstico "br" po afni
|
||
//echo substr($text, $posAt) ."</br>";
|
||
$posNewLineMail = strpos(substr($text, $posAt), $findNewline); //najdi pozicijo prvega simbola za v novo vrstico v besedilu po e-naslovu
|
||
$posNewLineMail = $posNewLineMail+$posAt-1; //koncna pozicija, ce se gleda celotno besedilo
|
||
|
||
if($posSpace1Mail<$posNewLineMail){ //ce se po e-naslovu pojavi prej presledek
|
||
$posKonec = $posSpace1Mail; //se zakljuci pri presledku, ker je ta lokacija za zakljucek url
|
||
}else{
|
||
$posKonec = $posNewLineMail; //se zakljuci pred simbolom za novo vrstico, ker je ta lokacija za zakljucek url
|
||
}
|
||
|
||
//dodaj po e-naslovu potrebno latex kodo za zakljucek url
|
||
//$text = substr_replace($text, '}', $posSpace1Mail, 0);
|
||
$text = substr_replace($text, '}', $posKonec, 0);
|
||
|
||
//dodaj pred e-naslovom potrebno latex kodo za url
|
||
//substr_replace(string_name, replacement_string, start_pos, length)
|
||
$text = substr_replace($text, ' \url{', $posSpace2Mail+1, 0);
|
||
//echo $text."</br>";
|
||
}
|
||
//detekcija prisotnosti e-naslova v besedilu in primerna preureditev, da pride do pravilnega izpisa - konec
|
||
|
||
//RESEVANJE BESEDILA V CIRILICI
|
||
$contains_cyrillic = (bool) preg_match('/[\p{Cyrillic}]/u', $text); //ali je v besedilu cirilica?
|
||
if($contains_cyrillic){ // ce je cirilica v besedilu
|
||
$text = '\foreignlanguage{russian}{'.$text.'}';
|
||
}
|
||
//RESEVANJE BESEDILA V CIRILICI - konec
|
||
|
||
return $text;
|
||
}
|
||
#funkcija ki skrbi za encode dolocenih spornih delov besedila v latex-u prijazno - konec
|
||
} |