summaryrefslogtreecommitdiffstats
path: root/main/survey/app/Controllers/Vprasanja/MapsController.php
diff options
context:
space:
mode:
Diffstat (limited to 'main/survey/app/Controllers/Vprasanja/MapsController.php')
-rw-r--r--main/survey/app/Controllers/Vprasanja/MapsController.php364
1 files changed, 364 insertions, 0 deletions
diff --git a/main/survey/app/Controllers/Vprasanja/MapsController.php b/main/survey/app/Controllers/Vprasanja/MapsController.php
new file mode 100644
index 0000000..a188a7b
--- /dev/null
+++ b/main/survey/app/Controllers/Vprasanja/MapsController.php
@@ -0,0 +1,364 @@
+<?php
+/* * *************************************
+ * Description: Maps (google maps lokacija)
+ *
+ * Vprašanje je prisotno:
+ * tip 26 - lokacija
+ * podtip 2 - multi lokacija
+ * podtip 1 - moja lokacija
+ *
+ * Autor: Uros Podkriznik
+ * Created date: 22.04.2016
+ * *************************************** */
+
+namespace App\Controllers\Vprasanja;
+
+// Osnovni razredi
+use App\Controllers\Controller;
+use App\Controllers\HelperController as Helper;
+use App\Controllers\LanguageController as Language;
+use App\Models\Model;
+use enkaParameters;
+
+/**
+ * Description of MapsController
+ *
+ * @author uros p.
+ */
+class MapsController extends Controller {
+
+ public function __construct() {
+ parent::getGlobalVariables();
+ }
+
+ /* * **********************************************
+ * Get instance
+ * ********************************************** */
+
+ private static $_instance;
+
+ public static function getInstance() {
+ if (self::$_instance)
+ return self::$_instance;
+
+ return new MapsController();
+ }
+
+ public function display($spremenljivka, $oblika) {
+ global $lang;
+ $row = Model::select_from_srv_spremenljivka($spremenljivka);
+
+ $loop_id = get('loop_id') == null ? " IS NULL" : " = '" . get('loop_id') . "'";
+
+ $spremenljivkaParams = new enkaParameters($row['params']);
+ $podtip = $row['enota'];
+ //$selected = Model::getOtherValue($spremenljivka);
+
+ echo '<div id="spremenljivka_' . $spremenljivka . '_variabla" class="variabla ' . $oblika['cssFloat'] . '">' . "\n";
+
+ //get input type - marker, polyline, polygon
+ $multi_input_type = $spremenljivkaParams->get('multi_input_type');
+
+ $map_data = array();
+ $map_data_info_shapes = array();
+
+ //ce je choose location
+ if($podtip == 3){
+
+ $loop_id_3 = "";
+ //force text to be null from sql
+ $force_text_null = 'false';
+
+ //do we have loop
+ if(get('loop_id') != null){
+ //does data for this loop already exist?
+ $sql1 = sisplet_query("SELECT id FROM srv_data_map WHERE usr_id='" . get('usr_id') .
+ "' AND spr_id='$spremenljivka' AND loop_id $loop_id", 'array');
+
+ //data does not exist, force null on text
+ if(count($sql1) == 0)
+ $force_text_null = 'true';
+ else
+ $loop_id_3 = " AND dm.loop_id = '" . get('loop_id') . "'";
+ }
+
+
+ $sql1 = sisplet_query("SELECT vm.vre_id, vm.lat, vm.lng, vm.address, v.naslov, IF($force_text_null, NULL, dm.text) as text FROM srv_vrednost AS v
+ LEFT JOIN srv_vrednost_map AS vm ON v.id = vm.vre_id
+ LEFT JOIN srv_data_map AS dm ON v.id = dm.vre_id AND dm.usr_id='" . get('usr_id') . "'
+ WHERE v.spr_id='$spremenljivka' $loop_id_3", 'array');
+
+ //je vec vrednosti
+ if(!isset($sql1['lat']))
+ $map_data = $sql1;
+ //je ena vrednost
+ else
+ $map_data[] = $sql1;
+
+
+ //get info shapes
+ $sql2 = sisplet_query("SELECT lat, lng, address, overlay_id FROM srv_vrednost_map
+ WHERE spr_id='$spremenljivka' AND overlay_type='polyline' ORDER BY overlay_id, vrstni_red", 'array');
+
+ //create json data for info shapes
+ $st_linij=0;
+ $last_id=0;
+ foreach ($sql2 as $line_row) {
+ if($line_row['overlay_id'] != $last_id){
+ $st_linij++;
+ $last_id = $line_row['overlay_id'];
+ $map_data_info_shapes[$st_linij-1]['overlay_id']=$line_row['overlay_id'];
+ $map_data_info_shapes[$st_linij-1]['address']=$line_row['address'];
+ $map_data_info_shapes[$st_linij-1]['path']= array();
+ }
+
+ $path = array();
+ $path['lat']=floatval($line_row['lat']);
+ $path['lng']=floatval($line_row['lng']);
+
+ array_push($map_data_info_shapes[$st_linij-1]['path'], $path);
+ }
+ }
+ //ce je polygon ali polyline
+ else if($podtip == 2 && $multi_input_type != '' && $multi_input_type != 'marker'){
+ //ce so podatki ze v bazi (rec. uporabnik klikne 'Prejsnja stran')
+ $sql1 = sisplet_query("SELECT lat, lng FROM srv_data_map WHERE spr_id='$spremenljivka' AND usr_id='" . get('usr_id') . "' AND loop_id $loop_id "
+ . "ORDER BY vrstni_red", 'array');
+
+ //if not empty
+ if(count($sql1)>0){
+ $map_data = $sql1;
+
+ //iterate and convert all coordinates to float - needed for JS
+ for($i=0; $i<count($map_data); $i++){
+ $map_data[$i]['lat'] = floatval($map_data[$i]['lat']);
+ $map_data[$i]['lng'] = floatval($map_data[$i]['lng']);
+ }
+ }
+ }
+ //ce so markerji
+ else{
+ //ce so podatki ze v bazi (rec. uporabnik klikne 'Prejsnja stran')
+ $sql1 = sisplet_query("SELECT lat, lng, address, text FROM srv_data_map WHERE spr_id='$spremenljivka' AND usr_id='" . get('usr_id') . "' AND loop_id $loop_id "
+ . "ORDER BY vrstni_red", 'array');
+
+ //je vec vrednosti
+ if(!isset($sql1['lat']))
+ $map_data = $sql1;
+ //je ena vrednost
+ else
+ $map_data[] = $sql1;
+ }
+
+ //dobi fokus mape
+ $fokus = $spremenljivkaParams->get('fokus_mape');
+
+ //pridobi parametre za centriranje mape in jo nastavi za kasnejso uporabo v js
+ $fokus_koordinate = $spremenljivkaParams->get('fokus_koordinate'); //dobi fokus koordinat mape
+ if(!isset(json_decode($fokus_koordinate)->center->lat))
+ $fokus_koordinate = false;
+
+ //dobi max odgovore
+ $maxmark = $spremenljivkaParams->get('max_markers');
+ //staro, kasneje sem dodal max_markers - to je zaradi vasjinega workshopa
+ if($maxmark == '')
+ $maxmark = $spremenljivkaParams->get('date_range_max');
+
+ //dobi user location
+ $spremenljivkaParams->get('user_location') == 1 ? $userLocation = json_encode(true) :
+ $userLocation = json_encode(false);
+
+ //dobi podvprasanje za marker
+ $spremenljivkaParams->get('marker_podvprasanje') == 1 ? $podvprasanje = json_encode(true) :
+ $podvprasanje = json_encode(false);
+
+ //dobi naslov podvprasanje za marker
+ $podvprasanje_naslov = $spremenljivkaParams->get('naslov_podvprasanja_map');
+ if(!$spremenljivkaParams->get('naslov_podvprasanja_map'))
+ $podvprasanje_naslov = '';
+
+ //ali se prikaze searchbox
+ $spremenljivkaParams->get('dodaj_searchbox') == 1 ? $dodaj_searchbox = json_encode(true) :
+ $dodaj_searchbox = json_encode(false);
+
+ //ce je tip moja lokacija
+ if($podtip == 1){
+ //vkljucijo se funkcije za klik na mapi
+ $klikNaMapo = json_encode(true);
+ //vkljuci se iskanje lokacije uporabnika
+ //$userLocation = json_encode(True);
+ $mojaLokacija = json_encode(True);
+ if(!$fokus)
+ $fokus = "Slovenia";
+ }
+ //ce je tip multi lokacija
+ elseif($podtip == 2){
+ //vkljuci se iskanje lokacije uporabnika
+ //$userLocation = json_encode(false);
+ $mojaLokacija = json_encode(false);
+ if(!$fokus)
+ $fokus = "Slovenia";
+
+ if($multi_input_type != 'marker'){
+ $klikNaMapo = json_encode(false);
+ //izrisi opozorilo o max odgovorov
+ echo '<div id="end_shape_info_'.$spremenljivka.'" style="display: inline-block; color:red; font-size:0.8em;">'.$lang['srv_resevanje_info_end_shpe_map'].'</div>';
+ }
+ else{
+ //izrisi opozorilo o max odgovorov
+ echo '<div id="max_marker_'.$spremenljivka.'" style="display: none; color:red; font-size:0.8em;">'.$lang['srv_resevanje_max_marker_opozorilo_map'].'</div>';
+ //vkljucijo se funkcije za klik na mapi
+ $klikNaMapo = json_encode(true);
+ }
+ }
+ //ce je podtip izberi lokacijo
+ elseif($podtip == 3){
+ //izkljucijo se funkcije za klik na mapi
+ $klikNaMapo = json_encode(false);
+ $mojaLokacija = json_encode(false);
+ }
+
+ //ali smo v pregledu izpolnjene ankete? ce da, se v JS nastavi na viewMode=true
+ $quick_view = json_encode(get('quick_view'));
+ //disablaj klik na mapo, ce je v quick_view
+ if(get('quick_view'))
+ $klikNaMapo = json_encode(false);
+
+ //warningi za geolokacijo
+ echo '<div id="warning_geo_'.$spremenljivka.'" style="display: none; color:orange; font-size:0.8em;"></div>';
+
+ //izrisi search box za v mapo
+ echo '<input id="pac-input_'.$spremenljivka.'" class="pac-input" type="text" onkeypress="return event.keyCode != 13;" style="display: none;">';
+ //izrisi mapo
+ echo '<div id="map_'.$spremenljivka.'" style="width:100%;height:300px;border-style: solid;border-width: 1px;border-color: #b4b3b3;"></div>';
+
+ ?>
+ <script type="text/javascript">
+ //zaradi resevanja preko mobilnikov, dodaj ta class, da se iznici top padding (mobile.css)
+ document.getElementById("spremenljivka_<?php echo $spremenljivka; ?>")
+ .getElementsByClassName("variable_holder")[0].className += " map_spremenljivka";
+
+ //preveri, ce je google API ze loadan (ce se je vedno na novo naloadal, je prislo do errorjev)
+ if((typeof google === 'object' && typeof google.maps === 'object'))
+ MapDeclaration();
+ else{
+ mapsAPIseNi(MapDeclaration);
+ }
+
+ function MapDeclaration(){
+ //spremenljivke
+ var spremenljivka = "<?php echo $spremenljivka; ?>";
+ //podtip
+ var podtip = "<?php echo $podtip; ?>";
+ max_mark[spremenljivka] = "<?php echo $maxmark; ?>";
+ //je ta spremenljivka tipa moja lokacija?
+ var mojaLokacija = <?php echo $mojaLokacija; ?>;
+ //ze ta spremenljivka vsebuje podatke? primer, ce gre uporabnik na prejsnjo stran
+ var map_data = JSON.parse('<?php echo addslashes(json_encode($map_data)); ?>');
+ //vsebuje ta spremenljivka F user location (trenutna lokacija)
+ var doUserLocation = <?php echo $userLocation; ?>;
+ //ali se izrise podvprasanje v infowindow
+ podvprasanje[spremenljivka] = <?php echo $podvprasanje; ?>;
+ //naslov podvprasanja v infowindow
+ podvprasanje_naslov[spremenljivka] = '<?php echo $podvprasanje_naslov; ?>';
+ //se naj izvede F klik na mapo (najbrz bo to vedno true)
+ var doKlikNaMapo = <?php echo $klikNaMapo; ?>;
+ //smo v pregledu izpolnjene ankete?
+ viewMode = <?php echo $quick_view; ?>;
+ //centerInMap = string naslova, kaj bo zajel zemljevid. Rec. Slovenija / ali Ljubljana
+ var centerInMap = "<?php echo $fokus; ?>";
+ //get input type - marker, polyline, polygon
+ var multi_input_type = "<?php echo $multi_input_type; ?>";
+ //steje markerje (int id spremenljivke: int st markerjev)
+ st_markerjev[spremenljivka] = 0;
+ //array of all marksers
+ allMarkers['<?php echo $spremenljivka; ?>'] = [];
+
+ //pridobi parametre za centriranje mape in jo nastavi za kasnejso uporabo
+ var centerInMapKoordinate = <?php echo json_encode($fokus_koordinate)?>;
+ if(centerInMapKoordinate)
+ centerInMapKoordinate = JSON.parse(centerInMapKoordinate);
+
+ //ce je spremenljivka tipa moj lokacija, jo shrani v array
+ if(mojaLokacija)
+ ml_sprem.push(spremenljivka);
+
+ //mapType = tip zemljevida, ki bo prikazan. Recimo za satelitsko sliko google.maps.MapTypeId.SATELLITE (možno še .ROADMAP)
+ var mapType = google.maps.MapTypeId.ROADMAP;
+
+ //Deklaracija potrebnih stvari za delovanje in upravljanje google maps JS API
+ var mapOptions = {
+ streetViewControl: false,
+ navigationControl: false,
+ mapTypeId: mapType
+ };
+
+ //ce je v bazi naslov enak vpisanemu v nastavitvah, nastavi po parametrih
+ if(centerInMapKoordinate){
+ mapOptions.center = {lat: parseFloat(centerInMapKoordinate.center.lat),
+ lng: parseFloat(centerInMapKoordinate.center.lng)};
+ mapOptions.zoom = parseInt(centerInMapKoordinate.zoom);
+ }
+
+ //deklaracija geocoderja (API)
+ if(!geocoder)
+ geocoder = new google.maps.Geocoder();
+ //infowindow iz API-ja, za prikaz markerja in informacije o markerju
+ if(!infowindow)
+ infowindow = new google.maps.InfoWindow();
+ //deklaracija zemljevida
+ var mapdiv = document.getElementById("map_"+spremenljivka);
+ var map = new google.maps.Map(mapdiv, mapOptions);
+ //shrani podatke za center v mapo v primeru, ce je spremenljivka hidden
+ //zaradi loopa, da se lahko ob prikayu ponovno nastavi
+ map.centerInMap = centerInMap;
+ map.centerInMapKoordinate = centerInMapKoordinate;
+ //to se kasneje uporabi za pridobitev mape z id-em spremenljivke
+ mapdiv.gMap = map;
+ //deklaracija mej/okvira prikaza na zemljevidu
+ bounds[spremenljivka] = new google.maps.LatLngBounds();
+
+ //ce ze obstajajo markerji ali podatki za mapo, jo nafilaj
+ if (multi_input_type && multi_input_type != 'marker'){
+ if(map_data.length > 0)
+ map_data_fill_shape(spremenljivka, map_data, multi_input_type);
+ else
+ drawShape(spremenljivka, null, multi_input_type);
+ }
+ else if (map_data.length > 0)
+ map_data_fill(spremenljivka, map_data, podtip);
+ //ce ne obstajajo podatki, centriraj mapo na nastavljeno obmocje
+ else if(!centerInMapKoordinate)
+ centrirajMap(centerInMap, map);
+
+ if(podtip == 3){
+ //fill info shapes in map if exists
+ var map_data_info_shapes = JSON.parse('<?php echo addslashes(json_encode($map_data_info_shapes)); ?>');
+ if (map_data_info_shapes.length > 0)
+ map_data_fill_info_shapes('<?php echo $spremenljivka; ?>', map_data_info_shapes);
+ }
+
+ //izvedi, ce je nastavljena trenutna lokacija respodenta
+ if (doUserLocation && map_data.length === 0){
+ usrLoc_sprem.push(spremenljivka);
+ userLocation(spremenljivka);
+ }
+
+ //izvedi, ce je nastavljen klik na mapo
+ if (doKlikNaMapo)
+ klikNaMapo(spremenljivka);
+
+ //izrisi in nastavi search box na zemljevidu
+ if(<?php echo $dodaj_searchbox; ?>)
+ searchBox(spremenljivka, function doAfterPlaceFromSearchBox(pos, address){
+ if(max_mark[spremenljivka]-st_markerjev[spremenljivka] > 0)
+ createMarker(spremenljivka, address, pos, true);
+ });
+ }
+
+ </script>
+ <?php
+ echo '</div>';
+ }
+
+}