summaryrefslogtreecommitdiffstats
path: root/admin/survey/export/latexclasses/Vprasanja/HeatmapLatex.php
diff options
context:
space:
mode:
Diffstat (limited to 'admin/survey/export/latexclasses/Vprasanja/HeatmapLatex.php')
-rw-r--r--admin/survey/export/latexclasses/Vprasanja/HeatmapLatex.php337
1 files changed, 337 insertions, 0 deletions
diff --git a/admin/survey/export/latexclasses/Vprasanja/HeatmapLatex.php b/admin/survey/export/latexclasses/Vprasanja/HeatmapLatex.php
new file mode 100644
index 0000000..94e86fb
--- /dev/null
+++ b/admin/survey/export/latexclasses/Vprasanja/HeatmapLatex.php
@@ -0,0 +1,337 @@
+<?php
+/***************************************
+ * Description: Priprava Latex kode za Heatmap
+ *
+ * Vprašanje je prisotno:
+ * tip 27
+ *
+ * Autor: Patrik Pucer
+ * Datum: 09/2017
+ *****************************************/
+//use enkaParameters;
+define("PIC_SIZE", "\includegraphics[width=10cm]"); //slika sirine 50mm
+define("ICON_SIZE", "\includegraphics[width=0.5cm]"); //za ikone @ slikovni tip
+define("RADIO_BTN_SIZE", 0.13);
+
+class HeatmapLatex extends LatexSurveyElement
+{
+ protected $polyX = array();
+ protected $polyY = array();
+ protected $path2Images;
+
+ public function __construct()
+ {
+ global $site_path;
+ $this->path2Images = $site_path.'uploadi/editor/';
+ //parent::getGlobalVariables();
+ }
+
+ /************************************************
+ * Get instance
+ ************************************************/
+ private static $_instance;
+ protected $texBigSkip = '\bigskip';
+ protected $loop_id = null; // id trenutnega loopa ce jih imamo
+
+ public static function getInstance()
+ {
+ if (self::$_instance)
+ return self::$_instance;
+
+ return new HeatmapLatex();
+ }
+
+
+ public function export($spremenljivke=null, $export_format='', $questionText='', $fillablePdf=null, $texNewLine='', $usr_id=null, $db_table=null, $export_subtype='', $preveriSpremenljivko=null, $loop_id=null){
+ // Ce je spremenljivka v loopu
+ $this->loop_id = $loop_id;
+
+ //preveri, ce je kaj v bazi
+ //$userDataPresent = $this->GetUsersData($db_table, $spremenljivke['id'], $spremenljivke['tip'], $usr_id);
+ $userDataPresent = $this->GetUsersData($db_table, $spremenljivke['id'], $spremenljivke['tip'], $usr_id, $this->loop_id);
+ //echo "userDataPresent za spremenljivko".$spremenljivke['id']." je: ".$userDataPresent."</br>";
+
+ if($userDataPresent||$export_subtype=='q_empty'||$export_subtype=='q_comment'||$preveriSpremenljivko){ //ce je kaj v bazi ali je prazen vprasalnik ali je potrebno pokazati tudi ne odgovorjena vprasanja
+ global $lang;
+
+ // iz baze preberemo vse moznosti - ko nimamo izpisa z odgovori respondenta
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable, other FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $numRowsSql = mysqli_num_rows($sqlVrednosti);
+
+ $tex = '';
+ $point = array();
+ //nastavitve iz baze ##########################
+ $spremenljivkaParams = new enkaParameters($spremenljivke['params']);
+ //nastavitve iz baze - konec ####################
+
+ $navpicniOdgovori = array();
+ $navpicniOdgovori = [];
+ $obmocjaNaSliki = array();
+ $coordsObmocijNaSliki = array();
+
+ $texNewLineAfterTable = $texNewLine." ".$texNewLine." ".$texNewLine;
+
+ //pregled vseh moznih vrednosti (kategorij) po $sqlVrednosti
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti)){
+ $stringTitleRow = $rowVrednost['naslov']; //odgovori na levi strani
+ array_push($navpicniOdgovori, $this->encodeText($stringTitleRow) ); //filanje polja z navpicnimi odgovori (po vrsticah)
+ }
+ //pregled vseh moznih vrednosti (kategorij) po $sqlVrednosti - konec
+
+
+ //$tex .= $this->IzrisVsotaTabela($spremenljivke, $numRowsSql, $navpicniOdgovori, $texNewLine, $texNewLineAfterTable, $export_format, 0);
+
+ $imageName = $this->getImageName('hotspot', $spremenljivke['id'], 'hotspot_image=');
+ //echo("iz heatmap ime slike: ".$imageName."</br>");
+ $path2Images = $this->path2Images;
+
+ $imageNameTest = $path2Images.$imageName.'.png'; //za preveriti, ali obstaja slikovna datoteka na strezniku
+
+ //error_log("iz heatmap: ".$imageNameTest);
+ //echo("iz heatmap: ".$imageNameTest."</br>");
+
+ $imageName = $path2Images.$imageName;
+
+ if(filesize($imageNameTest) > 0){
+ $image = PIC_SIZE."{".$imageName."}"; //priprave slike predefinirane dimenzije
+ }else{
+ //$image = 'ni slike';
+ $image = $lang['srv_pc_unavailable'];
+ }
+
+ $tex .= $image."".$texNewLine; //izris slike
+
+ //iz baze poberi imena obmocij
+ $sqlHotSpotRegions = sisplet_query("SELECT region_name, region_coords FROM srv_hotspot_regions WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+
+ //izris imen obmocij po $sqlHotSpotRegions
+ $whileIndeks = 0;
+ while ($rowHotSpotRegions = mysqli_fetch_assoc($sqlHotSpotRegions)){
+ if($whileIndeks == 0){ //ce so prisotna imena obmocij, izpisi besedilo "Obmocja na sliki"
+ $tex .= $lang['srv_export_hotspot_regions_names'].': '.$texNewLine; //izpis besedila "Obmocja na sliki"
+ }
+ $tex .= $rowHotSpotRegions['region_name'].''.$texNewLine;
+ if($rowHotSpotRegions['region_name']){
+ array_push($obmocjaNaSliki, $rowHotSpotRegions['region_name']);
+ //array_push($coordsObmocijNaSliki, $rowHotSpotRegions['region_coords']);
+ $coordsObmocijNaSliki[$rowHotSpotRegions['region_name']]=$rowHotSpotRegions['region_coords'];
+ $point[$rowHotSpotRegions['region_name']] = 0;
+ }
+ $whileIndeks++;
+ }
+
+ $tex .= $texNewLine;
+
+ //ureditev missing-ov
+ if(count($missingOdgovori)!=0){ //ce so missing-i
+ $vodoravniOdgovori = $this->AddMissingsToAnswers($vodoravniOdgovori, $missingOdgovori);
+ }
+ //ureditev missing-ov - konec
+
+
+ /* //izris moznih odgovorov
+ $tex .= $lang['srv_drag_drop_answers'].': '.$texNewLine;
+ for($i=0; $i<$numColSql; $i++){
+ $tex .= $vodoravniOdgovori[$i].$texNewLine;
+ } */
+
+
+ if($userDataPresent){ //ce je kaj v bazi, je potrebno izrisati tabelo s koordinatami in naslovom
+
+ #pobiranje parametrov heatmap
+ $sql = sisplet_query("SELECT params FROM srv_spremenljivka WHERE id = '".$spremenljivke['id']."'");
+ $row = mysqli_fetch_assoc($sql);
+ $spremenljivkaParams = new enkaParameters($row['params']);
+ //html slike
+ $hotspot_image = ($spremenljivkaParams->get('hotspot_image') ? $spremenljivkaParams->get('hotspot_image') : "");
+ //stevilo dovoljenih klikov
+ $heatmap_num_clicks = ($spremenljivkaParams->get('heatmap_num_clicks') ? $spremenljivkaParams->get('heatmap_num_clicks') : 1);
+ #pobiranje parametrov heatmap - konec
+
+ $textboxWidthOdgovori = '1'; //sirina okvirja z odgovorom
+ $textboxHeightOdgovori = 0; //visina okvirja z odgovorom
+ $noBordersOdgovori = 0;
+ $parameterTabular = 'l';
+ //za ureditev stevila tock v izbranih obmocjih
+ $dataPointValue = array();
+ $data = array();
+ $numOfAnswers=count($this->userAnswer);
+ //za ureditev stevila tock v izbranih obmocjih - konec
+ //echo "stevilo odgovorov: ".count($this->userAnswer)."</br>";
+
+ #sporocilo o stevilu moznih klikov
+ $tex .= $lang['srv_vprasanje_heatmap_num_clicks'].": ";
+ //$tex .= $lang['srv_vprasanje_heatmap_num_clicks'].": ".$texNewLine;
+ if($export_format == 'pdf'){
+ $tex .= '\\textcolor{crta}{'.$numOfAnswers.'/'.$heatmap_num_clicks.'}'.$texNewLine;
+ }else if($export_format == 'rtf'){
+ $tex .= ' '.$numOfAnswers.'/'.$heatmap_num_clicks.' '.$texNewLine.$texNewLine;
+ }
+
+
+ #sporocilo o stevilu moznih klikov - konec
+
+ #sporocilo o koordinatah klikov
+ $tex .= $lang['srv_analiza_heatmap_clicked_coords'].": ";
+
+
+ for($i=0; $i<count($this->userAnswer);$i++){ //sprehodi se po tockah
+
+ //echo "rowAnswers: ".$this->userAnswer[$i]['address'].' za odgovore tip '.$spremenljivke['tip'].' id '.$spremenljivke['id'].' usr '.$usr_id.'</br>';
+ #priprava odgovora respondenta #######################################################################################
+ if($export_format == 'pdf'){
+ $answer = "\\textcolor{crta}{".$this->userAnswer[$i]['lat'].", ".$this->userAnswer[$i]['lng']."}";
+ }else if($export_format == 'rtf'){
+ $answer = " ".$this->userAnswer[$i]['lat'].", ".$this->userAnswer[$i]['lng']." ";
+ }
+ $lat = $this->userAnswer[$i]['lat'];
+ $lng = $this->userAnswer[$i]['lng'];
+ if($this->userAnswer[$i]['address']){ //ce je prisoten tudi podatek o naslovu, ga dodaj
+ if($export_format == 'pdf'){
+ $answer .= ", \\textcolor{crta}{".$this->userAnswer[$i]['address']."}";
+ }else if($export_format == 'rtf'){
+ $answer .= ", ".$this->userAnswer[$i]['address']." ";
+ }
+ }
+ if($this->userAnswer[$i]['text']&&!is_numeric($this->userAnswer[$i]['text'])){ //ce je prisoten tudi podatek 'text' (kjer je po navadi odgovor na podvprasanje) in ta ni stevilo, ga dodaj
+ $answer .= $texNewLine;
+ $answer .= $lang['srv_export_marker_podvpr_answer'].": \\textcolor{crta}{".$this->userAnswer[$i]['text']."}";
+ }
+
+ #pridobitev podatkov o obmocjih in podatka o prisotnosti tocke v obmocju
+ if(count($obmocjaNaSliki)!=0){ //ce imamo obmocja na sliki
+ $izpisiObmocij = 0;
+ for($o=0; $o<count($obmocjaNaSliki);$o++){
+
+ $this->polyX = array();
+ $this->polyY = array();
+
+ //pretvori koordinate obmocja
+ $this->convertPolyString($coordsObmocijNaSliki[$obmocjaNaSliki[$o]]);
+
+ //preveri, ce je trenutna tocka v trenutnem obmocju
+ $inside=$this->insidePoly($this->polyX, $this->polyY, $lat, $lng);
+
+ if($inside&&$izpisiObmocij==0){
+ $answer .= " v ".$obmocjaNaSliki[$o];
+ $izpisiObmocij = 1;
+ $point[$obmocjaNaSliki[$o]]++;
+ }elseif($inside&&$izpisiObmocij!=0){
+ $answer .= ", ".$obmocjaNaSliki[$o];
+ $point[$obmocjaNaSliki[$o]]++;
+ }
+ }
+ //echo "stevilo tock znotraj obmocja: ".$point["Besedilo"]."</br>";
+ }
+ #pridobitev podatkov o obmocjih in podatka o prisotnosti tocke v obmocju - konec
+ //echo $answer."</br>";
+
+ #priprava odgovora respondenta - konec ##############################################################################
+
+
+ //zacetek tabele
+ $tex .= $this->StartLatexTable($export_format, $parameterTabular, 'tabularx', 'tabular', 1, 1);
+
+ //izpis latex kode za prazen okvir oz. okvir z odgovori respondenta
+ $tex .= $this->LatexTextBox($export_format, $textboxHeightOdgovori, $textboxWidthOdgovori, $answer, $textboxAllignment, $noBordersOdgovori);
+
+ //zakljucek tabele
+ $tex .= $this->EndLatexTable($export_format, 'tabularx', 'tabular');
+ //$tex .= $texNewLine;
+ }
+
+ if(count($obmocjaNaSliki)!=0){ //ce imamo obmocja na sliki
+ //$tex .= '\par {';
+ //$tex .= $texNewLine.$lang['srv_export_respondent_data_heatmap_regions_number'].": ".$texNewLine;
+ $tex .= $lang['srv_export_respondent_data_heatmap_regions_number'].": ";
+ //$tex .= '\par }';
+ for($o=0; $o<count($obmocjaNaSliki);$o++){
+ //echo "stevilo tock znotraj obmocja: ".$obmocjaNaSliki[$o]." je ".$point[$obmocjaNaSliki[$o]]."</br>";
+ //srv_export_respondent_data_heatmap_regions_number
+
+ if($export_format == 'pdf'){
+ $answerRegions = $obmocjaNaSliki[$o].": \\textcolor{crta}{".$point[$obmocjaNaSliki[$o]]."}";
+ }else if($export_format == 'rtf'){
+ $answerRegions = $obmocjaNaSliki[$o].": ".$point[$obmocjaNaSliki[$o]]."";
+ }
+
+ //zacetek tabele
+ $tex .= $this->StartLatexTable($export_format, $parameterTabular, 'tabularx', 'tabular', 1, 1);
+
+ //izpis latex kode za prazen okvir oz. okvir z odgovori respondenta
+ $tex .= $this->LatexTextBox($export_format, $textboxHeightOdgovori, $textboxWidthOdgovori, $answerRegions, $textboxAllignment, $noBordersOdgovori);
+
+ //zakljucek tabele
+ $tex .= $this->EndLatexTable($export_format, 'tabularx', 'tabular');
+ //$tex .= $texNewLine;
+ }
+
+ }
+/* if($point){ //ce je kaksna tocka v obmocju, izpisi tabelo
+ //zacetek tabele
+ $tex .= $this->StartLatexTable($export_format, $parameterTabular, 'tabularx', 'tabular', 1, 1);
+
+ //izpis latex kode za prazen okvir oz. okvir z odgovori respondenta
+ $tex .= $this->LatexTextBox($export_format, $textboxHeightOdgovori, $textboxWidthOdgovori, ': '.$point, $textboxAllignment, $noBordersOdgovori);
+
+ //zakljucek tabele
+ $tex .= $this->EndLatexTable($export_format, 'tabularx', 'tabular');
+ $tex .= $texNewLine;
+ } */
+ }
+
+ $tex .= $this->texBigSkip;
+ $tex .= $this->texBigSkip;
+/* $tex .= $texNewLine;
+ $tex .= $texNewLine; */
+ if($export_format == 'pdf'){ //ce je pdf
+ //$tex .= '\\end{absolutelynopagebreak}'; //zakljucimo environment, da med vprasanji ne bo prelomov strani
+ }else{ //ce je rtf
+
+ }
+
+ return $tex;
+ }
+ }
+
+
+ #funkcija, ki skrbi za pretvorbo stringa koordinat obmocja v polja
+ function convertPolyString($polypoints=null){
+ $poly = [];
+ //$tmpX;
+ //$tmpY;
+ $j = 0;
+
+ $poly = explode(",", $polypoints);
+ //echo count($poly);
+
+ for($i=0; $i<count($poly); $i++){
+ if($i == 0 || $i%2 == 0){
+ $tmpX = (int)$poly[$i];
+ //echo "x: ".$tmpX."</br>";
+ }else{
+ $tmpY = (int)$poly[$i];
+ //echo "y: ".$tmpY."</br>";
+ array_push($this->polyX, $tmpX);
+ array_push($this->polyY, $tmpY);
+ }
+ }
+ //echo ("dolzina polja za x je: ".count($this->polyX));
+ //echo ("dolzina polja za y je: ".count($this->polyY));
+ }
+ #funkcija, ki skrbi za pretvorbo stringa koordinat obmocja v polja - konec
+
+ #funkcija, ki preveri, ali je dolocena tocka v notranjosti dolocenega obmocja
+ function insidePoly($polyX=null, $polyY=null, $pointx=null, $pointy=null) {
+ //echo("Za poly: je x: ".$pointx." y: ".$pointy."</br>");
+ $inside = false;
+ for ($i = 0, $j = count($polyX) - 1; $i < count($polyX); $j = $i++) {
+ //echo $polyX[$i]." ".$polyY[$i]."</br>";
+ if((($polyY[$i] > $pointy) != ($polyY[$j] > $pointy)) && ($pointx < ($polyX[$j]-$polyX[$i]) * ($pointy-$polyY[$i]) / ($polyY[$j]-$polyY[$i]) + $polyX[$i]) ) $inside = !$inside;
+ }
+ //echo "inside je: ".$inside."</br>";
+ return $inside;
+ }
+ #funkcija, ki preveri, ali je dolocena tocka v notranjosti dolocenega obmocja - konec
+
+} \ No newline at end of file