Your IP : 216.73.216.240


Current Path : /home/juvelize/www/components/com_zhgooglemap/models/
Upload File :
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;
    }    
    
}