Current File : /home/pacjaorg/www/km/plugins/djclassifieds/leaflet/leaflet.php
<?php
/**
 * @package DJ-Classifieds
 * @copyright Copyright (C) DJ-Extensions.com, All rights reserved.
 * @license http://www.gnu.org/licenses GNU/GPL
 * @author url: http://dj-extensions.com
 * @author email contact@dj-extensions.com
 *
 */
defined ( '_JEXEC' ) or die ( 'Restricted access' );

class plgDJClassifiedsLeaflet extends JPlugin {
	public function __construct(&$subject, $config) {
		parent::__construct ( $subject, $config );
		$this->loadLanguage ();
	}

	public function onIncludeMapsScripts(&$load_gm_script){	
	 	$document = JFactory::getDocument();

		$ver = $this->params->get('ver','1.3.4');
		$document->addStyleSheet('https://unpkg.com/leaflet@'.$ver.'/dist/leaflet.css');
		$document->addScript('https://unpkg.com/leaflet@'.$ver.'/dist/leaflet.js');
		
		$load_gm_script = 0;
		return true;
	}
	
	function onGeocoderGetLocation(&$use_gm, $address) {
		$use_gm = 0;		
		return $this->leafletGetLocation($address);
	}

	function onGeocoderGetLocationPostCode(&$use_gm, $post_code, $address) {
		$use_gm = 0;
		return $this->leafletGetLocation($address, $post_code);
	}

	public function onItemEditForm($item, $par ,$subscr_id, $promotions, $categories, $types) {
		$par->set('allow_user_lat_lng','0');
		return null;
	}

	public function onProfileEditFormSections($user, $custom_fields, $custom_values_c, $profile_image, $par){
		$par->set('allow_user_lat_lng','0');
		return null;
	}

	public function onBeforeDJClassifiedsDisplayAdvertMap($item, $par, $view_type){

		$par->set('show_googlemap',0);
		
		if($item->latitude=='0.000000000000000' && $item->longitude=='0.000000000000000'){
			return null;
		}

		$tile_data = $this->getLeafletTileProvider(); //$dispatcher->trigger('getLeafletTileProvider', array());
		$tile_data = isset($tile_data[0]) && is_array($tile_data[0]) ? $tile_data[0] : $tile_data;

		if(empty($tile_data)){
			die('no Leaflet tile data found');
		}

		$use_gm = 0;
		$this->onIncludeMapsScripts($use_gm);

		$icon_img = ''; 
		$icon_size = ['',''];
     	if($par->get('gm_icon',1)==1 && file_exists(JPATH_ROOT.'/images/djcf_gmicon_'.$item->cat_id.'.png')){ 
     		$icon_size = getimagesize(JPATH_ROOT.'/images/djcf_gmicon_'.$item->cat_id.'.png');
     		$icon_img = JURI::base().'images/djcf_gmicon_'.$item->cat_id.'.png';             		
		}else if($par->get('gm_icon',1)==1 && file_exists(JPATH_ROOT.'/images/djcf_gmicon.png')){
			$icon_size = getimagesize(JPATH_ROOT.'/images/djcf_gmicon.png');
        	$icon_img = JURI::base()."images/djcf_gmicon.png";
        }elseif($par->get('gm_icon',1)==1){ 
        	$icon_size = getimagesize(JPATH_ROOT.'/components/com_djclassifieds/assets/images/djcf_gmicon.png');
        	$icon_img = JURI::base()."components/com_djclassifieds/assets/images/djcf_gmicon.png";
		}
		
		$content = '<div id="map" style="width: 320px; height: 210px;"></div>
		<script>
			jQuery(document).ready(function(){

				var lat = "'.$item->latitude.'";
				var lng = "'.$item->longitude.'";
				var zoom = "'.$par->get('gm_zoom','10').'";
				var scrollWheelZoom = "'.($par->get('gm_scrollwheel','1') ? true : false).'";

				var myIcon = L.icon({
					iconUrl: "'.$icon_img.'",
					iconSize: ['.$icon_size[0].', '.$icon_size[1].']
					//iconAnchor: [22, 94]
				});

				var mapOptions = {
					center: new L.LatLng(lat, lng),
					scrollWheelZoom: scrollWheelZoom,
					//zoom: zoom,
					//layers: new L.TileLayer("https://a.tiles.mapbox.com/v3/mapbox.world-bright/{z}/{x}/{y}.png"),
					zoom: zoom
				};

				var map = new L.Map("map", mapOptions);

				L.tileLayer("'.$tile_data[0].'", '.json_encode($tile_data[1]).').addTo(map);

				//var marker = L.marker([lat, lng]).addTo(map);
				var marker = new L.Marker([lat, lng]'.($icon_img ? ', {icon: myIcon}' : '').');
				marker.bindPopup("<div style=\"width:200px\"><b>'.addslashes($item->name).'</b><br>'.addslashes(str_replace(array("\n","\r","\r\n"), '',$item->intro_desc)).'</div>");
				map.addLayer(marker);
			});

		</script>';
		
		//$par->set('show_googlemap',0);

		return $content;		
	}

	public function onBeforeDJClassifiedsDisplayProfileMap($profile, $par, $view_type){
		$item = new stdClass();

		if(is_array($profile)){ // front
			if(!empty($profile['details']->latitude) && !empty($profile['details']->longitude)){
				$item->latitude = $profile['details']->latitude;
				$item->longitude = $profile['details']->longitude;
				$item->name = $profile['name'];
				$item->intro_desc = !empty($profile['details']->address) ? $profile['details']->address : '';
			}
		}else{ // back-end
			$item->latitude = $profile->latitude;
			$item->longitude = $profile->longitude;
			$item->name = $profile->user_id;
			$item->intro_desc = $profile->address;
		}
		return $this->onBeforeDJClassifiedsDisplayAdvertMap($item, $par, $view_type);
	}

	public function getLeafletTileProvider(){

		$default_tile_provider = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
		$tile_provider = $this->params->get('tile_provider', $default_tile_provider);
		$access_token = $this->params->get('access_token', '');
		
		$tile_options = [];
		if($tile_provider == $default_tile_provider){
			$tile_options['attribution'] = '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a>';
		}

		if($access_token){
			$tile_options['accessToken'] = $access_token;
		}

		return [$tile_provider, $tile_options];
	}

	private function leafletGetLocation($address, $post_code = ''){
		$url = "https://nominatim.openstreetmap.org/search?format=json&q=".urlencode($address);

		if($post_code){
			$url .= "&postalcode=".urlencode($post_code);
		}

		$c = curl_init();
        curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($c, CURLOPT_URL, $url);
        curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($c, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($c, CURLOPT_REFERER, JURI::root()); // nominatim requires providing HTTP REFERER
        
		$resp_json = curl_exec($c);
        curl_close($c);
			        	        
		$resp = json_decode($resp_json, true);

		if(isset($resp[0])){
			return array('lat' => $resp[0]['lat'], 'lng' => $resp[0]['lon']);
		}else{
            return null;
        }
	}
	
}
Site is undergoing maintenance

PACJA Events

Maintenance mode is on

Site will be available soon. Thank you for your patience!