2020-08-14 13:36:36 +02:00
< ? 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 = 730 pt 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 = 3 cm } 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 1 KA
\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' );
2020-12-07 09:43:59 +01:00
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
2020-08-14 13:36:36 +02:00
#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.1 cm ]{
\coordinate ( start ) at ( 0 , - 0.1 cm );
\coordinate ( end ) at ( #1,0.1cm);
\coordinate ( mark ) at ( $ ( start |- 0 , 0 ) ! #2!(end|-0,0)$);
\fill [ rounded corners = 0.1 cm , draw = gray , fill = lightgray ] ( start ) rectangle ( end );
\fill [ draw = gray , rounded corners = 0.2 mm , fill = gray ! 20 ! gray ] ( mark ) circle ( . 15 ) ;
}
2021-01-12 14:09:06 +01:00
} ' );
2020-08-14 13:36:36 +02:00
#definicija za izris drsnika brez kroglice
define ( " emptySlider " , ' \def\emptySLIDER #1{% 1: length
\tikz [ baseline =- 0.1 cm ]{
\coordinate ( start ) at ( 0 , - 0.1 cm );
\coordinate ( end ) at ( #1,0.1cm);
\fill [ rounded corners = 0.1 cm , draw = gray , fill = lightgray ] ( start ) rectangle ( end );
}
2021-01-12 14:09:06 +01:00
} ' );
2020-08-14 13:36:36 +02:00
#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 > }{}{}
}
2021-01-12 14:09:06 +01:00
\fi ' );
2020-08-14 13:36:36 +02:00
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 ();
2020-11-08 08:31:55 +01:00
$dolgoImeAnkete = $this -> encodeText ( SurveyInfo :: getSurveyColumn ( 'akronim' ));
2020-08-14 13:36:36 +02:00
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' );
2020-11-08 08:31:55 +01:00
}
$kratkoImeAnkete = $this -> encodeText ( $kratkoImeAnkete );
2020-08-14 13:36:36 +02:00
$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
2021-01-31 18:29:09 +01:00
//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' ];
2020-08-14 13:36:36 +02:00
2021-01-31 18:29:09 +01:00
############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
2020-08-14 13:36:36 +02:00
$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 );
}
2020-09-23 17:02:19 +02:00
/********************* 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 ******************/
2020-08-14 13:36:36 +02:00
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
2021-06-29 22:02:47 +02:00
unlink ( $filenameTex ); //tex
2020-08-14 13:36:36 +02:00
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
2022-06-14 16:40:32 +02:00
$this -> DeleteTmpImages ( $surveyId );
2020-08-14 13:36:36 +02:00
//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 [ 10 pt ]{ article }
\usepackage [ a4paper , margin = 20 mm ]{ 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 1 KA v glavi na desni ;
3. besedilo " Stran " v nogi na desni ;
4. velikost logo 1 KA 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 . 1 ka . 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 . 1 ka . si }
\\rfoot { #3 \\thepage}
}
' ;
/* $this -> headerAndFooter = '
\\newcommand { \headerfooter }[ 5 ]{
\\lhead { #1}
\\rhead { \\includegraphics [ scale = #4]{#2}}
\\lfoot { www . 1 ka . 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 ();
2020-11-08 08:31:55 +01:00
2020-08-14 13:36:36 +02:00
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 { 4 cm }
\\noindent
{ \\huge \\textbf { \\noindent { '.$imeAnkete.' } }} \\par
\\vspace { 1 cm }
\\vspace { 0.5 cm }
\\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 );
2020-08-20 09:29:41 +02:00
//exec("/usr/bin/buf_size=2000000 pdflatex ".$filenameTex);
2020-08-14 13:36:36 +02:00
}
# 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 ;
}
2020-11-08 08:31:55 +01:00
#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 ;
}
2022-07-12 16:48:58 +02:00
$findSpace = ' ' ;
$posSpace1 = strpos ( $text , $findSpace ); //najdi pozicijo prvega presledka v besedilu
$posSpace2 = strripos ( $text , $findSpace ); //najdi pozicijo zadnjega presledka v besedilu
2020-11-08 08:31:55 +01:00
//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 );
2020-12-08 15:30:43 +01:00
if ( strpos ( $text , '&' )){ //ce je prisotno v besedilu &'
$text = str_replace ( '&' , '\& ' , $text );
} else {
$text = str_replace ( '&' , '\& ' , $text );
}
2020-11-08 08:31:55 +01:00
$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
2022-07-12 16:48:58 +02:00
//detekcija prisotnosti e-naslova v besedilu in primerna preureditev, da pride do pravilnega izpisa
$findAt = '@' ;
$numOfAt = substr_count ( $text , $findAt ); //stevilo '@' v besedilu
$findNewline = 'br' ;
2022-08-22 22:56:43 +02:00
$text = preg_replace ( " /< \ /?a( [^>]*)?>/i " , " " , $text ); //remove anchor tag from string <a href= ... </a>, to se je uredilo za rešiti <a href= mailto: ...
2022-07-12 16:48:58 +02:00
$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
2020-11-08 08:31:55 +01:00
//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
2020-08-14 13:36:36 +02:00
}