summaryrefslogtreecommitdiffstats
path: root/admin/survey/export/latexclasses/class.LatexDocument.php
diff options
context:
space:
mode:
authorAnton Luka Šijanec <anton@sijanec.eu>2024-05-27 13:08:29 +0200
committerAnton Luka Šijanec <anton@sijanec.eu>2024-05-27 13:08:29 +0200
commit75160b12821f7f4299cce7f0b69c83c1502ae071 (patch)
tree27e25e4ccaef45f0c58b22831164050d1af1d4db /admin/survey/export/latexclasses/class.LatexDocument.php
parentprvi-commit (diff)
download1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.tar
1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.tar.gz
1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.tar.bz2
1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.tar.lz
1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.tar.xz
1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.tar.zst
1ka-75160b12821f7f4299cce7f0b69c83c1502ae071.zip
Diffstat (limited to 'admin/survey/export/latexclasses/class.LatexDocument.php')
-rw-r--r--admin/survey/export/latexclasses/class.LatexDocument.php686
1 files changed, 467 insertions, 219 deletions
diff --git a/admin/survey/export/latexclasses/class.LatexDocument.php b/admin/survey/export/latexclasses/class.LatexDocument.php
index dce1108..63b6cac 100644
--- a/admin/survey/export/latexclasses/class.LatexDocument.php
+++ b/admin/survey/export/latexclasses/class.LatexDocument.php
@@ -99,8 +99,10 @@ omenjeno kodo je potrebno deliti z 255, da dobimo stevilke, ki ustrezajo Latex =
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("ENKA_LOGO_SIZE_HEADER_RTF", 'width=40cm,keepaspectratio');
define("SINGLE_TABLE_WIDTH", 3000);
define("PAGE_TEXT_WIDTH", 10200); //17 cm, 170 mm, je 10200 twips, 1 mm je 60 twips
+if (!defined("MAX_STRING_LENGTH")) define("MAX_STRING_LENGTH", 90);
#definicija za izris drsnika s kroglico
define ("circleSlider", '\def\circleSLIDER#1#2{% 1: length, 2: position of the mark (0 to 1)
@@ -142,7 +144,7 @@ class LatexDocument{
var $grupa = null; // trenutna grupa
var $usrId = null; // trenutni user
- var $spremenljivka = null; // trenutna spremenljivka
+ protected static $spremenljivka = null; // trenutna spremenljivka
//spremenljivke za Nastavitve pdf/rtf izvozov
var $export_font_size = 10;
@@ -173,7 +175,7 @@ class LatexDocument{
var $commentType = 1; // tip izpisa komentarjev
- var $texNewLine = '\\\\ ';
+ public static $texNewLine = '\\\\ ';
protected $isAnswer = '';
protected $isAnswerBreakPodVprasanjem = '';
@@ -181,6 +183,10 @@ class LatexDocument{
protected $pathToTexFile;
protected $path2Images;
+
+ protected $export_show_recnum;
+
+ protected $path2UploadedImages;
protected $language = -1; // Katero verzijo prevoda izvazamo
protected $usr_id; //id respondenta
@@ -200,9 +206,11 @@ class LatexDocument{
public function createDocument($export_type='', $export_subtype='', $export_format='', $sprID = null){
global $lang, $site_path;
- $this->usr_id = $_GET['usr_id'];
+ $this->usr_id = isset($_GET['usr_id'])?$_GET['usr_id']:null;
if($export_subtype=='heatmap_image'){ //ce je potrebno zgenerirati sliko heatmap
- $this->HeatmapImage($_GET['sprID']);
+ //$this->HeatmapImage($_GET['sprID']);
+ $spr_heatmap = isset($_GET['sprID'])?$_GET['sprID']:null;
+ $this->HeatmapImage($spr_heatmap);
return;
}
@@ -232,16 +240,8 @@ class LatexDocument{
$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>'; */
+ //$time_start = microtime(true);
#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' ");
@@ -250,7 +250,7 @@ class LatexDocument{
############testiranje za jezik
if(isset($_GET['language'])){
- $this->language = $_GET['language'];
+ $this->language = isset($_GET['language'])?$_GET['language']:null;
//echo "jezik test: ".$this->language."</br>";
// Naložimo jezikovno datoteko
$file = '../../lang/'.$this->language.'.php';
@@ -259,12 +259,18 @@ class LatexDocument{
}
############testiranje za jezik - konec
+ //$time_end = microtime(true);
+ //$execution_time = ($time_end - $time_start)/60;
+ //echo '<b>Total Execution Time:</b> '.$execution_time.' Mins';
+
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;
}
+ //echo "jezik: ".$this->language."</br>";
+ //$this->language = 1; //rocno dodal, da uredim polja stevil, saj iz baze pobira 0 (???)
#za pridobitev jezika respondenta - konec
//Tex preamble in zacetek latex dokumenta
@@ -272,7 +278,7 @@ class LatexDocument{
//Dodatek h kodi, da bo črka đ vidna v pdf
if($export_format == 'pdf'){
- $tex .= "\\fontencoding{T1}\selectfont \n";
+ //$tex .= "\\fontencoding{T1}\selectfont \n";
}
if($export_format != 'xls'){ //ce ni xls
@@ -307,7 +313,7 @@ class LatexDocument{
{
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':
@@ -342,48 +348,6 @@ class LatexDocument{
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();
@@ -477,11 +441,11 @@ class LatexDocument{
/********************* 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
+ file_exists($filenameTex)?unlink($filenameTex):null; //tex
+ file_exists($filename.".aux")?unlink($filename.".aux"):null; //aux
+ file_exists($filename.".log")?unlink($filename.".log"):null; //log
+ file_exists($filename.".pdf")?unlink($filename.".pdf"):null; //pdf
+ file_exists($filename.".out")?unlink($filename.".out"):null; //out
//brisanje temp datotek tex - konec
//brisanje temp slikovnih datotek
@@ -497,7 +461,7 @@ class LatexDocument{
#####################################################################################################
function InitDocumentVars($export_type='', $export_subtype='', $export_format='')
{
- global $site_path;
+ global $site_path, $site_url;
global $lang;
$baseLineSkip = intval($this->export_font_size*1.2);
@@ -528,7 +492,8 @@ class LatexDocument{
############testiranje za jezik
if(isset($_GET['language'])){
- $this->language = $_GET['language'];
+ //$this->language = $_GET['language'];
+ $this->language = isset($_GET['language'])?$_GET['language']:null;
//echo "jezik test: ".$this->language."</br>";
// Naložimo jezikovno datoteko
$file = '../../lang/'.$this->language.'.php';
@@ -583,45 +548,6 @@ class LatexDocument{
#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'){
####################################
@@ -632,7 +558,6 @@ class LatexDocument{
\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
@@ -688,23 +613,18 @@ class LatexDocument{
#################################### 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.
+ /*ima 7 vhodnih podatkov:
+ 1. ime ankete v glavi;
+ 2. logo 1KA v glavi;
+ 3. besedilo "Stran" v nogi ;
+ 4. velikost logo 1KA v glavi;
+ 5. datum generiranja izvoza v nogi na levi;
+ 6. identifikator respondenta;
+ 7. url korenske spletne strani.
*/
- /* $this->headerAndFooter = '
- \\newcommand{\headerfooter}[5]{
- \\lhead{\\includegraphics[scale=#4]{#2} #1}
- \\lfoot{www.1ka.si}
- \\rfoot{#3 \\thepage}
- }
- '; */
-
+
+ $recnumBesedilo = "";
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)";
@@ -712,22 +632,13 @@ class LatexDocument{
$recnumBesedilo = "";
}
}
-
$this->headerAndFooter = '
- \\newcommand{\headerfooter}[6]{
- \\lhead{\\includegraphics[scale=#4]{#2} #1 '.$recnumBesedilo.'}
- \\lfoot{www.1ka.si}
+ \\newcommand{\headerfooter}[7]{
+ \\lhead{#1 '.$recnumBesedilo.' \\includegraphics[#4]{#2}}
+ \\lfoot{#7}
\\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
}
@@ -743,10 +654,10 @@ class LatexDocument{
//Funkcija za izris glave in noge za pdf ######################################
function GenerateHeaderFooter($imeAnkete='', $stranDokumenta=null, $datumGeneriranjaIzvoza='', $export_format=''){
- global $lang, $site_path;
+ global $lang, $site_path, $site_url;
//Definiranje ukaza
$tex = $this->headerAndFooter; //definiranje ukaza za glavo in nogo dokumenta
-
+ $recnumBesedilo = "";
//izbira ustreznega logotipa za določen jezik
if($lang['id'] == 1){ //ce je id 1, naj bo slovenski
$logo1ka = 'logo1ka';
@@ -766,8 +677,15 @@ class LatexDocument{
}
}
- //Izris glave in noge s predefiniranim ukazom za pdf
- $tex .= "\headerfooter{".$imeAnkete."}{".$this->path2Images."".$logo1ka."}{".$stranDokumenta."}{".ENKA_LOGO_SIZE_HEADER."}{".$datumGeneriranjaIzvoza."}{".$recnumBesedilo."}";
+ //Izris glave in noge s predefiniranim ukazom
+ if($export_format == 'rtf'){
+ $enka_logo_size_header = ENKA_LOGO_SIZE_HEADER_RTF;
+ }else{
+ $enka_logo_size_header = ENKA_LOGO_SIZE_HEADER;
+ }
+
+
+ $tex .= "\headerfooter{".$imeAnkete."}{".$this->path2Images."".$logo1ka."}{".$stranDokumenta."}{".$enka_logo_size_header."}{".$datumGeneriranjaIzvoza."}{".$recnumBesedilo."}{".$site_url."}";
return $tex;
}
@@ -791,7 +709,6 @@ class LatexDocument{
$logo1ka = 'logo1kaeng';
}
//izbira ustreznega logotipa za določen jezik - konec
- //echo "stevilo spremenljivk: ".(SurveyInfo::getSurveyVariableCount());
$steviloSpremenljivk = SurveyInfo::getSurveyVariableCount();
@@ -801,17 +718,8 @@ class LatexDocument{
//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.'}}
+ {'.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'){
@@ -851,7 +759,7 @@ class LatexDocument{
###########################################
//Funkcija za pridobitev aktiviranosti ankete
- function GetAktiviranostAnkete($activity=''){
+ function GetAktiviranostAnkete($activity=null){
global $lang;
$tex = '';
$_last_active = end($activity);
@@ -882,16 +790,18 @@ class LatexDocument{
# 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){
+ }
+ elseif(IS_LINUX){
//za linux sisteme
- exec("/usr/bin/pdflatex ".$filenameTex);
+ exec("/usr/bin/xelatex --no-shell-escape ".$filenameTex);
+ //exec("/usr/bin/pdflatex ".$filenameTex);
//exec("/usr/bin/buf_size=2000000 pdflatex ".$filenameTex);
-
}
# generating pdf file - konec
@@ -984,12 +894,9 @@ class LatexDocument{
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;
+ $file = $this->pathToTexFile.$filenameRtf;
#uredi sirino stolpca tabele glede na stevilo stolpcev v tabeli neposredno v rtf ############################################
$this->urediStolpceTabele($file);
@@ -1025,11 +932,6 @@ class LatexDocument{
//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");
@@ -1040,7 +942,6 @@ class LatexDocument{
ob_flush();
flush();
}
- #nova varianta - konec
//brisanje temp datotek
unlink($file); //rtf
@@ -1348,76 +1249,423 @@ class LatexDocument{
return $recnum;
}
+
#funkcija ki skrbi za encode dolocenih spornih delov besedila v latex-u prijazno
- function encodeText($text=''){
+ public static function encodeText($text = '', $vre_id = 0, $no_br = 0, $img_id = 0, $variable_name = '', $no_par = 0){
global $site_path, $lang;
- //$text = str_replace(' ','X',$text); //nadomesti presledke
+
//echo "Encoding ".$text."</br>";
+
+ $text = htmlspecialchars_decode($text); //vse html special chars kot je &amp; spremeni v ustrezne simbole (npr. &amp;=>&)
+ $text = html_entity_decode($text);
+
+ //Pucanje html kode *****************************************************************
+ if($no_par){ //ce ne sme biti <p> tag
+ $allowed_tags = '<br><img><ul><ol><li>'; //Seznam dovoljenih html znack
+ }else{
+ $allowed_tags = '<br><img><p><ul><ol><li>'; //Seznam dovoljenih html znack
+ }
+
+
+ $text = strip_tags($text, $allowed_tags); //Odstranitev vseh znack, razen dovoljenih
+
+ $text = preg_replace('/(<[^>]+) style=".*?"/i', '$1', $text); //Pucanje stylinga iz znack, ki so ostale
+
+ //echo "Po pucanju".$text."</br>";
+ //Pucanje html kode - konec ********************************************************
+
+ $numOfUl = 0;
+
+ //resevanje razbirajanja predolgih neprekinjenih besed in URL - spremenljivke za kasnejsi prilagojen izpis - PREVERITI, CE JE SE POTREBNO GLEDE NA SKOK NA XELATEX - PATRIK 8.1.2024
+ $numOfSpacesPrej = substr_count($text, ' '); //stevilo presledkov v besedilu
+ $stringLength = strlen($text);
+
+ $findSpace = ' ';
+ $posSpace1 = strpos($text, $findSpace); //najdi pozicijo prvega presledka v besedilu
+ $posSpace2 = strripos($text, $findSpace); //najdi pozicijo zadnjega presledka v besedilu
+
+
+ $findHttp = 'http://';
+ $findHttps = 'https://';
+ $posHttp = strpos($text, $findHttp);
+ $posHttps = strpos($text, $findHttps);
+ $isURL = 0;
+ //resevanje razbirajanja predolgih neprekinjenih besed in URL - konec
- $this->path2UploadedImages = $site_path.'uploadi/editor/';
+
+ $path2UploadedImages = $site_path.'uploadi/editor/';
if($text == ''){ //ce ni teksta, vrni se
return;
}
+
+ $textOrig = $text;
+ $findme = '<br />';
+ $findmeLength = strlen($findme);
+ $findImg = '<img';
+ $findImgLength = strlen($findImg);
+ $findUl = '<ul';
+ $findUlLength = strlen($findUl);
+ $findOl = '<ol';
+ $findLi = '<li';
+
+ $findPar = '<p>';
+
+ $pos = strpos($text, $findme);
+ $posImg = strpos($text, $findImg);
+ $posUl = strpos($text, $findUl);
+ $posOl = strpos($text, $findOl);
+ $posLi = strpos($text, $findLi);
+ $posPar = strpos($text, $findPar);
+
+ //ureditev izrisa slike
+ if($posImg !== false){
+ $numOfImgs = substr_count($text, $findImg); //stevilo '<img ' v tekstu
+ $posImg = strpos($text, $findImg);
+ $textPrej = '';
+ $textPotem = '';
+ for($i=0; $i<$numOfImgs; $i++){
+ $posImg = strpos($text, $findImg);
+ $textPrej = substr($text, 0, $posImg); //tekst do img
+ $textPotem = substr($text, $posImg); //tekst po img, z vkljuceno hmlt kodo z img
+ $posImgEnd = strpos($textPotem, '/>'); //pozicija, kjer se konca html koda za img
+ $textPotem = substr($textPotem, $posImgEnd+strlen('/>')); //tekst od konca html kode za img dalje
+
+ $imageName = $path2UploadedImages."".self::getImageName($text, 0, '<img', $vre_id, $img_id);
+ $imageNameTest = $imageName.'.png'; //za preveriti, ali obstaja slikovna datoteka na strezniku
+
+ $text = '';
+
+ if(file_exists($imageNameTest)){
+ $text .= $textPrej.' '.PIC_SIZE_ANS."{".$imageName."}";
+ }
+ else{
+ $image = $lang['srv_pc_unavailable'];
+ $text .= $image;
+ }
+ $text .= ' '.$textPotem;
+ }
- //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, '&amp;')){ //ce je prisotno v besedilu &amp;'
- $text = str_replace('&amp;','\& ',$text);
- }else{
- $text = str_replace('&','\& ',$text);
+
+ //pred ureditvijo posebnih karakterjev, odstrani del teksta s kodo za sliko, da se ne pojavijo tezave zaradi imena datoteke od slike
+ $findImgCode = '\includegraphics';
+ $posOfImgCode = strpos($text, $findImgCode);
+ //echo $posOfImgCode."</br>";
+ $textToImgCode = substr($text, 0, $posOfImgCode); //tekst do $findImgCode
+ //echo $textToImgCode."</br>";
+ $textFromImgCode = substr($text, $posOfImgCode); //tekst po $findImgCode
+ //echo $textFromImgCode."</br>";
+ $findImgCodeEnd = '}';
+ //$posOfImgCodeEnd = strpos($text, $findImgCodeEnd);
+ $posOfImgCodeEnd = strpos($textFromImgCode, $findImgCodeEnd);
+ //echo $posOfImgCodeEnd."</br>";
+ $textAfterImgCode = substr($textFromImgCode, $posOfImgCodeEnd+1); //tekst po $findImgCodeEnd
+ //echo $textAfterImgCode."</br>";
+ $textOfImgCode = substr($text, $posOfImgCode, $posOfImgCodeEnd+1);
+ //echo $textOfImgCode."</br>";
+
+ $text = $textToImgCode.$textAfterImgCode;
+ //pred ureditvijo posebnih karakterjev, odstrani del teksta s kodo za sliko, da se ne pojavijo tezave zaradi imena datoteke od slike - konec
}
- $text = str_replace('&nbsp;','~',$text);
- //$text = str_replace('&lt;','\textless ',$text);
- $text = str_replace('&lt;',' \textless ',$text);
- //$text = str_replace('&gt;','\textgreater ',$text);
- $text = str_replace('&gt;',' \textgreater ',$text);
+ //ureditev izrisa slike - konec
+
+
+ //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
+ //brez tega se sesuje tudi pri uporabi XeLatex
+ $text = str_replace('\\','\textbackslash ',$text);
+ if(substr_count($text, '#')){ //ce je stevilo # vecje od 1
+ $text = str_replace('#','\#',$text);
+ }
+ else{
+ $text = str_replace('#','\# ',$text);
+ }
+ $text = str_replace('$','\$ ',$text);
+ $text = str_replace('%','\% ',$text);
+ $text = str_replace('{','\{',$text);
+ $text = str_replace('}','\}',$text);
+ $text = str_replace('^','\textasciicircum ',$text);
+ $text = str_replace('_','\_',$text);
+ $text = str_replace('~','\textasciitilde ',$text);
+ $text = str_replace('&','\&',$text);
+ //brez tega se sesuje tudi pri uporabi XeLatex - konec
+
+
//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
-
-
- //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.'}';
+
+ //ureditev preureditve html kode ul oz. ol in li v latex itemize oz. enumate
+ if($posUl !== false || $posOl !== false){
+ $numOfUl = substr_count($text, $findUl); //stevilo '<ul' v tekstu
+ $numOfOl = substr_count($text, $findOl); //stevilo '<ol' v tekstu
+ ######################
+ if($numOfUl!=0 && $posLi !== false){ //ce imamo ul in li
+ $text = str_replace(['<ul>', '<ul'],'', $text);
+ $text = str_replace(['<li>', '<li'],' \\\\ ', $text);
+ $text = str_replace('</ul>','', $text);
+ }
+ ######################
+ }
+ //ureditev preureditve html kode ul oz. ol in li v latex itemize oz. enumate - konec
+
+ //po ureditvi posebnih karakterjev, dodati del teksta s kodo za sliko, ce je slika prisotna
+ if($posImg !== false){
+ $text = substr_replace($text, $textOfImgCode, $posOfImgCode, 0);
+ }
+ //po ureditvi posebnih karakterjev, dodati del teksta s kodo za sliko, ce je slika prisotna
+
+ if($posPar !== false){ //ce je kaksen html tag <p> in jih je potrebno izpisati, dodaj prazno vrstico oz. break
+ if($variable_name == 'gdpr' || $variable_name == 'intro'){
+ if($numOfUl!=0 && $posLi !== false){ //ce imamo ul in li
+ $divider = ' ';
+ }else{
+ $divider = ' \\ \\\\ ';
+ }
+ $text = str_replace(['<p>', '</p>'], $divider, $text);
+ }else{
+ $text = str_replace(['<p>', '</p>'],' ', $text);
+ }
+ }
+
+ //priprava izpisa zelo dolgega besedila brez presledkov (URL, email, ...) - PREVERITI, CE JE SE POTREBNO GLEDE NA SKOK NA XELATEX - PATRIK 8.1.2024
+ //if($numOfSpacesPrej == 0 && ($stringLength >= MAX_STRING_LENGTH)){ //ce v besedilu ni presledkov in je besedilo daljse od max dovoljene dolzine
+ if( ($numOfSpacesPrej == 0 && ($stringLength >= MAX_STRING_LENGTH)) || ($numOfSpacesPrej == 1 && $posSpace1 == $posSpace2 && $stringLength >= MAX_STRING_LENGTH)){ //ce v besedilu ni presledkov in je besedilo daljse od max dovoljene dolzine
+ $text = "\seqsplit{".$text."}";
+ }
+ //priprava izpisa zelo dolgega besedila brez presledkov - konec
+
+ //echo "text potem: ".$text."</br>";
+
+ if($pos !== false){ // ce je v tekstu prisoten br
+ //ureditev preureditev html kode za novo vrstico v latex, ureditev prenosa v novo vrstico
+ if($no_br == 0){ // ce besedilo potrebuje ustrezen nadomestek <br> v latex kodi
+ $text = str_replace(['<br>', '<br/>', '<br />'],' '.self::$texNewLine, $text); //preuredi
+ }
+ //ureditev preureditev html kode za novo vrstico v latex, ureditev prenosa v novo vrstico - konec
+
+ //Odstranitev odvecnega skoka v novo vrtico na zacetku in koncu besedila
+ $find_texNewLine = ' \\\\ ';
+ $pos_find_texNewLine_1 = strpos($text, $find_texNewLine); //najdi pozicijo prvega simbola za novo vrstico v besedilu
+ if($pos_find_texNewLine_1 == 0 && $pos_find_texNewLine_1 !== false){ //ce je simbol na samem zacetku besedila
+ $text = substr_replace($text, ' ', $pos_find_texNewLine_1, strlen($find_texNewLine)); //nadomesti ga s presledkom
+ }
+
+ $pos_find_texNewLine_2 = strripos($text, $find_texNewLine); //najdi pozicijo zadnjega simbola za novo vrstico v besedilu
+ if($pos_find_texNewLine_2 == (strlen($text) - strlen($find_texNewLine)) && $pos_find_texNewLine_2 !== false){ //ce je simbol na ustrezni poziciji na koncu besedila
+ $text = substr_replace($text, ' ', $pos_find_texNewLine_2, strlen($find_texNewLine)); //nadomesti ga s presledkom
+ }
+
+ $text = trim($text); //Odstranitev posebnih znakov za novo vrstico, presledek, ... na zacetku in koncu besedila
+ //Odstranitev odvecnega skoka v novo vrtico na zacetku in koncu besedila - konec
}
- //RESEVANJE BESEDILA V CIRILICI - konec
- return $text;
+ return strip_tags($text);
}
#funkcija ki skrbi za encode dolocenih spornih delov besedila v latex-u prijazno - konec
+
+ #funkcija, ki skrbi za pridobitev imena slike, ki jo je potrebno izrisati ######################################
+ public static function getImageName($text='', $sprId=null, $findme='', $vre_id=0, $img_id=0){
+ global $site_path, $site_url;
+ $imageName = '';
+ //echo "id slike $img_id </br>";
+ if($text == 'hotspot' && $findme == 'hotspot_image='){
+ $sqlParametrov = sisplet_query("SELECT params FROM srv_spremenljivka WHERE id='".$sprId."'");
+ $rowParametrov = mysqli_fetch_row($sqlParametrov);
+ $text = $rowParametrov[0];
+ }
+
+ $pos = strpos($text, $findme); //najdi pozicijo teksta v $findme
+ if($pos!=''||$pos==0){ //ce je slika v bazi
+ $imageName = substr($text,$pos); //pokazi le del text od besedila $findme dalje (vkljucno z besedilom)
+
+ $findme = $site_url.'uploadi/editor/';
+ $pos = strpos($imageName, $findme); //najdi pozicijo teksta v $findme
+ if($pos){ //ce je slika na strezniku
+ $slikaNaStrezniku = 1;
+ }else{//ce slike ni na strezniku
+ $slikaNaStrezniku = 0;
+ }
+ if($slikaNaStrezniku==1){ //ce je slika na strezniku
+ $findEditor = 'editor/';
+ $posEditor = strpos($imageName, $findEditor); //najdi pozicijo teksta v $findEditor
+ $imageName = substr($imageName,$posEditor+7); //pokazi le del params od besedila 'editor/' dalje, brez besedila 'editor/'
+
+ $pos = self::getEndPosition($imageName); //najdi pozicijo konca URL slike
+ $imageExtension = substr($imageName, $pos-3, 3); //pridobi koncnico slike (za gif je potrebno sliko pretvoriti v png, saj latex ne podpira gif)
+ $imageName = substr($imageName, 0, $pos); //pokazi le del params od zacetka besedila do '"' oz. konca URL slike
+
+ $path = $site_path.'uploadi/editor/'.$imageName;
+
+ if($imageExtension == 'gif'){ //ce je slika gif, jo je potrebno pretvoriti v png
+ self::convertGifToPng($path, $slikaNaStrezniku);
+ }
+
+ if($imageExtension == 'jpg' || $imageExtension == 'peg'){ //ce je slika jpg ali jpeg, jo je potrebno pretvoriti v png
+ self::convertJpgToPng($path, $slikaNaStrezniku, $imageExtension);
+ }
+ }elseif($slikaNaStrezniku==0){ //ce slike ni na strezniku
+ self::$spremenljivka = $sprId;
+ $row = Cache::srv_spremenljivka($sprId);
+ $spremenljivkaParams = new enkaParameters($row['params']);
+ $imageName = ($spremenljivkaParams->get('hotspot_image') ? $spremenljivkaParams->get('hotspot_image') : "");
+ if($imageName!=''){
+ $imageName = self::getOnlineImageName($imageName, $slikaNaStrezniku, $vre_id, $img_id); //pridobi njen URL
+ }
+ }
+ if($imageName!=''){
+ $imageName = substr($imageName, 0, strrpos($imageName, '.'));
+ }else{
+ $imageName = 'ni slike';
+ }
+
+ }
+
+ //echo "imagename pred return: ".$imageName."</br>";
+ return $imageName;
+ }
+ #funkcija, ki skrbi za pridobitev imena slike, ki jo je potrebno izrisati - konec ###############################
+
+ #funkcija, ki skrbi za pridobitev ustrezne strezniske poti do slike - trenutno ni v uporabi ########################################################
+ function getPath2Images($text='', $sprId=null, $findme=''){
+ global $site_path;
+ $imageName = '';
+
+ if($text == 'hotspot' && $findme == 'hotspot_image='){
+ $sqlParametrov = sisplet_query("SELECT params FROM srv_spremenljivka WHERE id='".$sprId."'");
+ $rowParametrov = mysqli_fetch_row($sqlParametrov);
+ $text = $rowParametrov[0];
+ }
+
+ $pos = strpos($text, $findme); //najdi pozicijo teksta v $findme
+
+ if($pos!=''||$pos==0){ //ce je slika v bazi
+ $imageName = substr($text,$pos); //pokazi le del text od besedila $findme dalje (vkljucno z besedilom)
+
+ $findme = 'editor/';
+ $pos = strpos($imageName, $findme); //najdi pozicijo teksta 'editor/'
+
+ if($pos){ //ce je slika na strezniku
+ $slikaNaStrezniku = 1;
+ }else{//ce slike ni na strezniku
+ $slikaNaStrezniku = 0;
+ }
+
+ if($slikaNaStrezniku==1){ //ce slika je bila prenesena na streznik
+ $path2Images = $site_path.'admin/survey/export/latexclasses/textemp/images/';
+ }elseif($slikaNaStrezniku==0){ //ce slika je bila na dolocenem URL
+ $path2Images = $site_path.'uploadi/editor/';
+ }
+
+ }
+ //echo "pot do slik: ".$path2Images."</br>";
+ return $path2Images;
+ }
+ #funkcija, ki skrbi za pridobitev ustrezne strezniske poti do slike - konec ########################################################
+
+
+ #funkcija, ki skrbi za pridobitev slike, ki se nahaja nekje online in jo je potrebno izrisati, in vrne lokalno ime slike ######################################
+ public static function getOnlineImageName($imageName='', $slikaNaStrezniku=null, $vre_id=null, $img_id=0){
+ global $site_path;
+ //echo "imageName v getOnlineImageName nekje vmes 1: ".$imageName."</br>";
+ $row = Cache::srv_spremenljivka(self::$spremenljivka);
+ //echo "sprem: ".self::$spremenljivka."</br>";
+ $spremenljivkaParams = new enkaParameters($row['params']);
+ //echo "params: ".$spremenljivkaParams->get('hotspot_image')."</br>";
+ $imageNameTmp = $spremenljivkaParams->get('hotspot_image');
+ //echo "imageNameTmp: ".$imageNameTmp."</br>";
+ //if($imageNameTmp!=''){ //ce je hotspot
+ if($imageNameTmp!=''&&$vre_id==0){ //ce je hotspot
+ $imageName = $imageNameTmp;
+ }
+
+ $findHttp = 'http';
+ $posHttp = strpos($imageName, $findHttp);
+ $imageName = substr($imageName,$posHttp); //besedilo do zacetka http
+
+ $pos = self::getEndPosition($imageName); //najdi pozicijo konca URL slike
+ $imageName = substr($imageName, 0, $pos); //pokazi le del params od zacetka besedila do '"' oz. konca URL slike
+ //echo "imageName v getOnlineImageName nekje vmes 2: ".$imageName."</br>";
+ $imageExtension = substr($imageName, $pos-3, 3); //pridobi koncnico slike
+ //echo "imageExtension: ".$imageExtension."</br>";
+
+ //if($imageExtension!='jpg'&&$imageExtension!='png'&&$imageExtension!='gif'&&$imageExtension!='jpeg'){ //ce ni veljavnen extension, spremeni ga v png
+ if($imageExtension=='jpg'||$imageExtension=='gif'||$imageExtension=='jpeg'){ //ce ni veljavnen extension, spremeni ga v png
+ //echo "spremeni extension </br>";
+ $imageExtension='png';
+ }
+
+ if($vre_id){ //ce se pridobiva imena tmp slik iz vrednosti vprasanja
+ $imgFilename = self::$spremenljivka.'_'.$vre_id.'_tmpImage_'.$img_id.'.'.$imageExtension; //tmp ime slike, ki je sestavljeno iz id spremenljivke+vre_id+tmpImage+img_id+extension
+ }else{
+ $imgFilename = self::$spremenljivka.'_tmpImage_'.$img_id.'.'.$imageExtension; //tmp ime slike, ki je sestavljeno iz id spremenljivke+tmpImage+img_id+extension
+ }
+
+ $pathDir = $site_path.'uploadi/editor/'; //pot za novo mapo, kjer se bodo shranjevale slike za trenutno anketo
+ $path = $pathDir.$imgFilename; //pot do datoteke z imenom datoteke
+
+ # ukaz za pretakanje slike
+ if(IS_WINDOWS){
+ //za windows sisteme //powershell -command "& { iwr URL -OutFile 'PATH' }"
+ $command = 'powershell -command "& { iwr \''.$imageName.'\' -OutFile \''.$path.'\' }"';
+ //$command = 'wget -O \''.$imageName.'\' -O '.$path.' ';
+ }elseif(IS_LINUX){
+ //za linux sisteme //exec('wget URL -P PATH ');
+ //$command = 'wget \''.$imageName.'\' -P '.$path.' ';
+ $command = 'wget -O '.$path.' \''.$imageName.'\' ';
+ //echo "ukaz za pobiranje: $command </br>";
+ }
+
+ //echo "command: ".$command."</br>";
+ exec($command); //pretoci sliko
+
+ if($imageExtension != 'png'){ //ce slika ni png, jo pretvori
+ if($imageExtension == 'gif'){ //ce je slika gif, jo je potrebno pretvoriti v png, saj latex ne podpira gif
+ self::convertGifToPng($path, $slikaNaStrezniku);
+ }else{
+ self::convertJpgToPng($path, $slikaNaStrezniku, $imageExtension);
+ }
+ }
+
+ //echo "imgfilename na koncu: ".$imgFilename."</br>";
+ return $imgFilename;
+ }
+ #funkcija, ki skrbi za pridobitev slike, ki se nahaja nekje online in jo je potrebno izrisati, in vrne lokalno ime slike - konec ###############################
+
+
+ public static function convertGifToPng($path='', $slikaNaStrezniku=null){
+ //echo "path: ".$path."</br>";
+ $image = imagecreatefromgif($path); //pripravi sliko iz gif za pretvorbo
+ $imageName = substr($path, 0, -3); //ime slike brez extension-a
+ //echo $imageName."</br>";
+ $imageNamePNG = $imageName.'png'; //ime slike z ustreznim extension
+ imagepng($image, $imageNamePNG); //pretvori pripravljeno gif sliko v png
+
+ if($slikaNaStrezniku==0){ //ce slika je iz URL in ni na strezniku, GIF izbrisi
+ unlink($imageName.'gif'); //izbrisi gif sliko
+ }
+ }
+
+ public static function convertJpgToPng($path='', $slikaNaStrezniku=null, $imageExtension=''){
+ $image = imagecreatefromjpeg($path); //pripravi sliko iz jpg za pretvorbo
+ $imageName = substr($path, 0, strrpos($path, '.')); //ime slike brez extension-a
+ //echo $imageName."</br>";
+ $imageNamePNG = $imageName.'.png'; //ime slike z ustreznim extension
+ imagepng($image, $imageNamePNG); //pretvori pripravljeno jpg sliko v png
+ //echo "pretvorba v png: ".$imageNamePNG."</br>";
+ //echo "xtens: ".$imageExtension."</br>";
+ //$origExtension = strrchr($path, '.');
+ //echo "ali je slika na strežniku: ".$slikaNaStrezniku."</br>";
+ if($slikaNaStrezniku==0){ //ce slika je iz URL in ni na strezniku, izbrisi jo
+ //echo "tukaj </br>";
+ if($imageExtension == 'jpg'){
+ unlink($imageName.'.'.$imageExtension); //izbrisi sliko
+ }elseif($imageExtension == 'peg'){
+ unlink($imageName.'.j'.$imageExtension); //izbrisi sliko
+ }
+ }
+ }
+
+ public static function getEndPosition($imageName=''){
+ $findme = '"';
+ $pos = strpos($imageName, $findme); //najdi pozicijo teksta '"'
+ return $pos;
+ }
} \ No newline at end of file