| Current Path : /home/juvelize/www/components/com_zhgooglemap/models/ |
| Current File : /home/juvelize/www/components/com_zhgooglemap/models/placemark.php |
<?php
/*------------------------------------------------------------------------
# com_zhgooglemap - Zh GoogleMap
# ------------------------------------------------------------------------
# author: Dmitry Zhuk
# copyright: Copyright (C) 2011 zhuk.cc. All Rights Reserved.
# license: http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 or later
# website: http://zhuk.cc
# Technical Support Forum: http://forum.zhuk.cc/
-------------------------------------------------------------------------*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
use Joomla\Utilities\ArrayHelper;
// import Joomla modelform library
jimport('joomla.application.component.modelitem');
/**
* ZhGoogleMarker Model
*/
class ZhGoogleMapModelPlacemark extends JModelItem
{
var $mapapikey;
var $currentplacemark;
/**
* Method to auto-populate the model state.
*
* Note. Calling getState in this method will result in recursion.
*
* @return void
* @since 1.6
*/
protected function populateState()
{
// menu item parameters
$pk = JRequest::getInt('id');
$this->setState('placemark.id', $pk);
$load_bootstrap = JRequest::getVar('load_bootstrap');
$this->setState('placemark.load_bootstrap', $load_bootstrap);
$thumbnail = JRequest::getVar('thumbnail');
$this->setState('placemark.thumbnail', $thumbnail);
$imagegalery = JRequest::getVar('imagegalery');
$this->setState('placemark.imagegalery', $imagegalery);
$hidedescriptionhtml = JRequest::getVar('hidedescriptionhtml');
$this->setState('placemark.hidedescriptionhtml', $hidedescriptionhtml);
$showdescriptionfullhtml = JRequest::getVar('showdescriptionfullhtml');
$this->setState('placemark.showdescriptionfullhtml', $showdescriptionfullhtml);
}
public function getItem($pk = null)
{
$pk = (!empty($pk)) ? $pk : (int) $this->getState('placemark.id');
if ($this->_item === null)
{
$this->_item = array();
}
if (!isset($this->_item[$pk]))
{
try
{
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$user = JFactory::getUser();
$query->select('h.*, '.
' c.title as category, g.icontype as groupicontype, g.overridemarkericon as overridemarkericon, g.published as publishedgroup, g.markermanagerminzoom as markermanagerminzoom, g.markermanagermaxzoom as markermanagermaxzoom, g.activeincluster as activeincluster, '.
' bub.disableanimation, bub.shadowstyle, bub.padding, bub.borderradius, bub.borderwidth, bub.bordercolor, bub.backgroundcolor, bub.minwidth, bub.maxwidth, bub.minheight, bub.maxheight, bub.arrowsize, bub.arrowposition, bub.arrowstyle, bub.disableautopan, bub.hideclosebutton, bub.backgroundclassname, bub.published infobubblepublished, '.
' mp.lang as maplang')
->from('#__zhgooglemaps_markers as h')
->leftJoin('#__zhgooglemaps_maps as mp ON h.mapid=mp.id')
->leftJoin('#__categories as c ON h.catid=c.id')
->leftJoin('#__zhgooglemaps_markergroups as g ON h.markergroup=g.id')
->leftJoin('#__zhgooglemaps_infobubbles as bub ON h.tabid=bub.id')
->where('h.id='.$pk);
$db->setQuery($query);
$data = $db->loadObject();
if (empty($data))
{
return JError::raiseError(404, JText::_('COM_ZHGOOGLEMAP_SITE_PLACEMARK_NOT_FOUND'));
}
$this->_item[$pk] = $data;
}
catch (Exception $e)
{
if ($e->getCode() == 404)
{
// Need to go thru the error handler to allow Redirect to work.
JError::raiseError(404, $e->getMessage());
}
else
{
$this->setError($e);
$this->_item[$pk] = false;
}
}
}
$this->currentplacemark = $this->_item[$pk];
return $this->_item[$pk];
}
public function getAPIKey()
{
// Get global params
$params = JComponentHelper::getParams( 'com_zhgooglemap' );
return $mapapikey = $params->get( 'map_map_key', '' );
}
public function getMapScriptHeader()
{
$retval = "";
if ($this->currentplacemark) {
$currentmarker = $this->currentplacemark;
$params = JComponentHelper::getParams( 'com_zhgooglemap' );
$apiversion = $params->get( 'map_api_version', '' );
$apitype = $params->get( 'api_type', '' );
$httpsprotocol = $params->get( 'httpsprotocol', '' );
$urlProtocol = 'http';
if ($httpsprotocol != "")
{
if ((int)$httpsprotocol == 0)
{
$urlProtocol = 'https';
}
}
$apikey4map = $params->get( 'map_map_key', '' );
if ($apitype != "")
{
if ((int)$apitype == 1)
{
$apiURL = 'ditu.google.cn';
}
else
{
$apiURL = 'maps.googleapis.com';
}
}
else
{
$apiURL = 'maps.googleapis.com';
}
$mainScriptBegin = "\n".' <script type="text/javascript" src="'.$urlProtocol.'://'.$apiURL.'/maps/api/js?';
$mainScriptMiddle = "&callback=Function.prototype";
$scriptParametersExist = 0;
if ($apiversion != "")
{
$scriptParametersExist = 1;
if ($mainScriptMiddle == "")
{
$mainScriptMiddle = 'v='.$apiversion;
}
else
{
$mainScriptMiddle .= '&v='.$apiversion;
}
}
if ($apikey4map != "")
{
$scriptParametersExist = 1;
if ($mainScriptMiddle == "")
{
$mainScriptMiddle = 'key='.$apikey4map;
}
else
{
$mainScriptMiddle .= '&key='.$apikey4map;
}
}
$mainScriptBegin .= $mainScriptMiddle;
$mainScriptAdd = "";
$main_lang = $currentmarker->maplang;
if (isset($main_lang) && $main_lang != "")
{
$mainLang = substr($main_lang,0, strpos($main_lang, '-'));
if ($mainLang != "")
{
$scriptParametersExist = 1;
$mainScriptAdd .= '&language='.$mainLang;
}
}
$mainScriptEnd = '"></script>' ."\n";
$retval = $mainScriptBegin . $mainScriptAdd . $mainScriptEnd;
}
return $retval;
}
public function getMapScript()
{
$retval = "";
if ($this->currentplacemark)
{
$currentmarker = $this->currentplacemark;
// Get global params
$params = JComponentHelper::getParams( 'com_zhgooglemap' );
$compatiblemodersf = (int)$params->get( 'map_compatiblemode_rsf', '' );
$loadtype = (int)$params->get( 'loadtype', '' );
if ($compatiblemodersf == 0)
{
$imgpathIcons = JURI::root() .'administrator/components/com_zhgooglemap/assets/icons/';
$imgpathUtils = JURI::root() .'administrator/components/com_zhgooglemap/assets/utils/';
$directoryIcons = 'administrator/components/com_zhgooglemap/assets/icons/';
}
else
{
$imgpathIcons = JURI::root() .'components/com_zhgooglemap/assets/icons/';
$imgpathUtils = JURI::root() .'components/com_zhgooglemap/assets/utils/';
$directoryIcons = 'components/com_zhgooglemap/assets/icons/';
}
$retval .= 'var icoIcon=\''.$imgpathIcons.'\';'."\n";
$retval .= 'var icoUtils=\''.$imgpathUtils.'\';'."\n";
$retval .= 'var icoDir=\''.$directoryIcons.'\';'."\n";
$retval .= 'function initialize() {'."\n";
$retval .= ' routeaddress = "";'."\n";
if (($currentmarker->latitude != "" && $currentmarker->longitude != "")
||($currentmarker->addresstext != ""))
{
if ($currentmarker->latitude != "" && $currentmarker->longitude != "")
{
$retval .= 'latlng = new google.maps.LatLng('.$currentmarker->latitude.', ' .$currentmarker->longitude.');' ."\n";
$retval .= ' var myOptions = {'."\n";
$retval .= ' center: latlng,'."\n";
$retval .= ' zoom: 14,'."\n";
$retval .= ' };'."\n";
$retval .= ' map = new google.maps.Map(document.getElementById("GMapsID"), myOptions);'."\n";
$retval .= ' var marker = new google.maps.Marker({'."\n";
$retval .= ' position: latlng, '."\n";
$retval .= ' map: map, ' ."\n";
if ((int)$currentmarker->overridemarkericon == 0)
{
$retval .= ' icon: icoIcon + "'.str_replace("#", "%23", $currentmarker->icontype).'.png" ' ."\n";
}
else
{
$retval .= ' icon: icoIcon + "'.str_replace("#", "%23", $currentmarker->groupicontype).'.png" ' ."\n";
}
$retval .= ' });'."\n";
}
else
{
// Begin marker creation with address by geocoding
$retval .= 'var geocoder = new google.maps.Geocoder();'."\n";
$retval .= ' geocoder.geocode( { \'address\': "'.$currentmarker->addresstext.'"}, function(results, status) {'."\n";
$retval .= ' if (status == google.maps.GeocoderStatus.OK) {'."\n";
$retval .= ' var latlng = new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng());' ."\n";
$retval .= ' var myOptions = {'."\n";
$retval .= ' center: latlng,'."\n";
$retval .= ' zoom: 14,'."\n";
$retval .= ' };'."\n";
$retval .= ' map = new google.maps.Map(document.getElementById("GMapsID"), myOptions);'."\n";
$retval .= ' var marker = new google.maps.Marker({'."\n";
$retval .= ' position: latlng, '."\n";
$retval .= ' map: map, ' ."\n";
if ((int)$currentmarker->overridemarkericon == 0)
{
$retval .= ' icon: icoIcon + "'.str_replace("#", "%23", $currentmarker->icontype).'.png" ' ."\n";
}
else
{
$retval .= ' icon: icoIcon + "'.str_replace("#", "%23", $currentmarker->groupicontype).'.png" ' ."\n";
}
$retval .= ' });'."\n";
$retval .= ' }'."\n";
$retval .= ' else'."\n";
$retval .= ' {'."\n";
$retval .= ' alert("'.JText::_('COM_ZHGOOGLEMAP_MAPMARKER_GEOCODING_ERROR_REASON').': " + status + "\n" + "'.JText::_('COM_ZHGOOGLEMAP_MAPMARKER_GEOCODING_ERROR_ADDRESS').': '.$currentmarker->addresstext.'" + "\n"+"id:'. $currentmarker->id.'");'."\n";
$retval .= ' }'."\n";
$retval .= '});'."\n";
}
}
$retval .= '}'."\n";
if ($loadtype == "1")
{
$retval .= ' window.addEvent(\'domready\', initialize);' ."\n";
}
else if ($loadtype == "2")
{
$retval .= ' var tmpJQ = jQuery.noConflict();'."\n";
$retval .= ' tmpJQ(document).ready(function() {initialize();});' ."\n";
}
else
{
$retval .= ' function addLoadEvent(func) {' ."\n";
$retval .= ' var oldonload = window.onload;' ."\n";
$retval .= ' if (typeof window.onload != \'function\') {' ."\n";
$retval .= ' window.onload = func;' ."\n";
$retval .= ' } else {' ."\n";
$retval .= ' window.onload = function() {' ."\n";
$retval .= ' if (oldonload) {' ."\n";
$retval .= ' oldonload();' ."\n";
$retval .= ' }' ."\n";
$retval .= ' func();' ."\n";
$retval .= ' }' ."\n";
$retval .= ' }' ."\n";
$retval .= '} ' ."\n";
$retval .= 'addLoadEvent(initialize);' ."\n";
}
}
return $retval;
}
}