Вход Регистрация
Файл: plugins/google_map_location/classes/location.php
Строк: 383
<?php

class GOOGLELOCATION_CLASS_Location extends InvitationFormElement
{
    protected 
$region;

    
/**
     * Constructor.
     *
     * @param string $name
     */
    
public function __construct$name )
    {
        
parent::__construct($name);

        
$this->region GOOGLELOCATION_BOL_LocationService::getInstance()->getLanguageCode();

        
$this->addAttribute('type''text');
        
$this->addAttribute('id''google_location_' uniqid(rand(0999999)));
        
$this->setHasInvitation(false);
        
$this->addAttribute('class''');
        
        
PEEP::getEventManager()->trigger(new PEEP_Event('googlelocation.add_js_lib'));
    }

    
/**
     * Sets form element value.
     *
     * @param mixed $value
     * @return FormElement
     */
    
public function setValue$value )
    {
        if ( !empty(
$value) && is_array($value) && ( !empty($value['json']) || !empty($value['remove']) ) )
        {
            
$this->value $value;
        }

        
/* if ( !empty($value) && is_string($value) )
        {
            $list = preg_split('/' . preg_quote(GOOGLELOCATION_BOL_LocationService::STRIP_STR) . '/', $value);

            if ( is_array($list) && !empty($list[7]) )
            {
                $result = array();
                $result['address'] = !empty($list[0]) ? $list[0] : '';
                $result['latitude'] = !empty($list[1]) ? $list[1] : '';
                $result['longitude'] = !empty($list[2]) ? $list[2] : '';
                $result['northEastLat'] = !empty($list[3]) ? $list[3] : '';
                $result['northEastLng'] = !empty($list[4]) ? $list[4] : '';
                $result['southWestLat'] = !empty($list[5]) ? $list[5] : '';
                $result['southWestLng'] = !empty($list[6]) ? $list[6] : '';
                $result['json'] = !empty($list[7]) ? $list[7] : '';

                $this->setListValue($result);
            }
        } */

        
return $this;
    }

    private function 
setListValue$value )
    {
        if ( !empty(
$value) && !empty($value['json']) )
        {
            
$this->value $value;
        }

        return 
$this;
    }

    public function 
setRequired$value true )
    {
        if ( 
$value )
        {
            
$this->addValidator(new LocationRequireValidator());
        }
        else
        {
            foreach ( 
$this->validators as $key => $validator )
            {
                if ( 
$validator instanceof RequiredValidator )
                {
                    unset(
$this->validators[$key]);
                    break;
                }
            }
        }

        return 
$this;
    }

    
/**
     * Sets form element value.
     *
     * @param mixed $value
     * @return FormElement
     */
    
public function getValue()
    {
        
/* if ( !empty($this->value) )
        {
            $value = (!empty($this->value['address']) ? $this->value['address'] : '') . GOOGLELOCATION_BOL_LocationService::STRIP_STR;
            $value .= ( !empty($this->value['latitude']) ? $this->value['latitude'] : '') . GOOGLELOCATION_BOL_LocationService::STRIP_STR;
            $value .= ( !empty($this->value['longitude']) ? $this->value['longitude'] : '') . GOOGLELOCATION_BOL_LocationService::STRIP_STR;
            $value .= ( !empty($this->value['northEastLat']) ? $this->value['northEastLat'] : '') . GOOGLELOCATION_BOL_LocationService::STRIP_STR;
            $value .= ( !empty($this->value['northEastLng']) ? $this->value['northEastLng'] : '') . GOOGLELOCATION_BOL_LocationService::STRIP_STR;
            $value .= ( !empty($this->value['southWestLat']) ? $this->value['southWestLat'] : '') . GOOGLELOCATION_BOL_LocationService::STRIP_STR;
            $value .= ( !empty($this->value['southWestLng']) ? $this->value['southWestLng'] : '') . GOOGLELOCATION_BOL_LocationService::STRIP_STR;
            $value .= ( !empty($this->value['json']) ? $this->value['json'] : '');
            return $value;
        } */

        
return $this->value;
    }

    
/**
     * Sets form element value.
     *
     * @param mixed $value
     * @return FormElement
     */
    
public function getListValue()
    {
        return 
$this->value;
    }

    
/**
     * @see FormElement::renderInput()
     *
     * @param array $params
     * @return string
     */
    
public function renderInput$params null )
    {
        
parent::renderInput($params);

        
PEEP::getDocument()->addScript(PEEP::getPluginManager()->getPlugin('googlelocation')->getStaticJsUrl() . 'location.js'"text/javascript"GOOGLELOCATION_BOL_LocationService::JQUERY_LOAD_PRIORITY 1);

        
$name json_encode($this->getName());
        
$id json_encode($this->getId());
        
$lat = !empty($this->value['latitude']) ? (float) $this->value['latitude'] : 0;
        
$lon = !empty($this->value['longitude']) ? (float) $this->value['longitude'] : 0;
        
$northEastLat = !empty($this->value['northEastLat']) ? (float) $this->value['northEastLat'] : 0;
        
$northEastLng = !empty($this->value['northEastLng']) ? (float) $this->value['northEastLng'] : 0;
        
$southWestLat = !empty($this->value['southWestLat']) ? (float) $this->value['southWestLat'] : 0;
        
$southWestLng = !empty($this->value['southWestLng']) ? (float) $this->value['southWestLng'] : 0;

        
$params = array(
            
'lat' => $lat,
            
'lng' => $lon,
            
'northEastLat' => $northEastLat,
            
'northEastLng' => $northEastLng,
            
'southWestLat' => $southWestLat,
            
'southWestLng' => $southWestLng,
            
'region' => $this->region,
            
'countryRestriction' => GOOGLELOCATION_BOL_LocationService::getInstance()->getCountryRestriction(),
            
'customMarkerIcon' => GOOGLELOCATION_BOL_LocationService::getInstance()->getDefaultMarkerIcon()
        );

        
PEEP::getDocument()->addOnloadScript(' $( document ).ready( function(){ window.googlemap_location = new PEEP_GoogleMapLocation( ' json_encode($this->getName()) . ', ' json_encode($this->getId()) . ', ' json_encode($this->getName() . '_map') . ' );
                                             window.googlemap_location.initialize(' 
json_encode($params) . '); }); ');
        
        
$attribute = array(
            
'type' => 'hidden',
            
'name' => $this->getName() . '[address]',
            
'value' => !empty($this->value['address']) ? $this->escapeValue($this->value['address']) : '');

        
$html UTIL_HtmlTag::generateTag('input'$attribute);

        
$attribute = array(
            
'type' => 'hidden',
            
'name' => $this->getName() . '[latitude]',
            
'value' => !empty($this->value['latitude']) ? $this->escapeValue($this->value['latitude']) : '');

        
$html .= UTIL_HtmlTag::generateTag('input'$attribute);

        
$attribute = array(
            
'type' => 'hidden',
            
'name' => $this->getName() . '[longitude]',
            
'value' => !empty($this->value['longitude']) ? $this->escapeValue($this->value['longitude']) : '');

        
$html .= UTIL_HtmlTag::generateTag('input'$attribute);

        
$attribute = array(
            
'type' => 'hidden',
            
'name' => $this->getName() . '[northEastLat]',
            
'value' => !empty($this->value['northEastLat']) ? $this->escapeValue($this->value['northEastLat']) : '');

        
$html .= UTIL_HtmlTag::generateTag('input'$attribute);

        
$attribute = array(
            
'type' => 'hidden',
            
'name' => $this->getName() . '[northEastLng]',
            
'value' => !empty($this->value['northEastLng']) ? $this->escapeValue($this->value['northEastLng']) : '');

        
$html .= UTIL_HtmlTag::generateTag('input'$attribute);

        
$attribute = array(
            
'type' => 'hidden',
            
'name' => $this->getName() . '[southWestLat]',
            
'value' => !empty($this->value['southWestLat']) ? $this->escapeValue($this->value['southWestLat']) : '');

        
$html .= UTIL_HtmlTag::generateTag('input'$attribute);

        
$attribute = array(
            
'type' => 'hidden',
            
'name' => $this->getName() . '[southWestLng]',
            
'value' => !empty($this->value['southWestLng']) ? $this->escapeValue($this->value['southWestLng']) : '');

        
$html .= UTIL_HtmlTag::generateTag('input'$attribute);

        
$attribute = array(
            
'type' => 'hidden',
            
'name' => $this->getName() . '[json]',
            
'value' => !empty($this->value['json']) ? $this->escapeValue($this->value['json']) : '');

        
$html .= UTIL_HtmlTag::generateTag('input'$attribute);
        
        
$attribute = array(
            
'type' => 'hidden',
            
'name' => $this->getName() . '[remove]',
            
'value' => !empty($this->value['remove']) ? $this->escapeValue($this->value['remove']) : false);

        
$html .= UTIL_HtmlTag::generateTag('input'$attribute);

        
$attribute $this->attributes;
        unset(
$attribute['name']);
        
$attribute['value'] = !empty($this->value['address'])  ? $this->value['address'] : '';
        
$attribute['class'] .= ' peep_left peep_googlelocation_location_input';

        if ( empty(
$attribute['value']) && $this->hasInvitation )
        {
            
$attribute['value'] = $this->invitation;
            
$attribute['class'] .= ' invitation';
        }

        
$html .= '<div class="googlelocation_form_element_div clearfix">'.
                    
UTIL_HtmlTag::generateTag('input'$attribute).
                    
'<div class="googlelocation_address_icon_div">
                        <span id='
.json_encode($this->getId().'_icon').' style="'.(!empty($this->value['json']) ? 'display:none''display:inline').'" class="ic_googlemap_pin googlelocation_address_icon"></span>
                        <div id='
.json_encode($this->getId().'_delete_icon').'  style="'.(empty($this->value['json']) ? 'display:none''display:inline').'" class="peep_miniic_delete googlelocation_delete_icon"></div>
                    </div>
                 </div>'
;

        
$html .= '<div id="' $this->getName() . '_map" style="margin-top:10px;width:90%;height:200px;display:none;"></div>';

        return 
$html;
    }

    protected function 
escapeValue$string )
    {
        return 
htmlspecialchars($string);
    }

   public function 
getElementJs()
   {
        
$invitation = !$this->hasInvitation ''$this->invitation;
        
        
$js "var formElement = new PeepFormElement('" $this->getId() . "', '" $this->getName() . "');";

        
/** @var $value Validator  */
        
foreach ( $this->validators as $value )
        {
            
$js .= "formElement.addValidator(" $value->getJsValidator() . ");";
        }

        
$js .= "
            formElement.invitationString = "
.  json_encode($this->invitation).";
            
            $("
input#".$this->getId()."" ).bind('focus.invitation', {formElement:formElement},
                    
function(e){
                        
el = $(this);
                        
el.removeClass('invitation');
                        if( 
el.val() == '' || el.val() == e.data.formElement.invitationString){
                            
el.val('');
                            
//hotfix for media panel
                            
if( 'htmlarea' in el.get(0) ){
                                
el.unbind('focus.invitation').unbind('blur.invitation');
                                
el.get(0).htmlarea();
                                
el.get(0).htmlareaFocus();
                            }
                        }
                        else{
                            
el.unbind('focus.invitation').unbind('blur.invitation');
                        }
                    }
                );

            
formElement.getValue = function() {

                var 
$inputs = $("input[name^='".$this->getName()."']");
                
                var 
values = {};

                $.
each$inputs,
                    function(
indexdata){
                        if( $(
this).val() != '' )
                        {
                            
values[$(this).attr('name').replace(/".$this->getName()."[(w+)]/, '$1')] = $(this).val();
                        }
                    }
                );

                if( 
values.address == formElement.invitationString )
                {
                    
values.address '';
                }

                return 
values;
            };

            
formElement.resetValue = function() {

                var 
$inputs = $("input[name^='".$this->getName()."']");

                $.
each$inputs,
                    function(
indexdata){
                        $(
this).val('');
                    }
                );
            };

            
formElement.setValue = function(value){    };
        
";

       return 
$js;
    }
}

class LocationRequireValidator extends RequiredValidator
{
    public function isValid( 
$value )
    {
        
$isValid = false;

        if ( !empty(
$value['json']) )
        {
            
$isValid = true;
        }

        return 
$isValid;
    }

    public function getJsValidator()
    {
        return "
{
            
validate : function( value ){
                if( !
window.googlemap_location.isValidValue ){ throw " . json_encode($this->getError()) . "; return;}
        },
            
getErrorMessage : function(){ return " . json_encode($this->getError()) . " }
        }
";
    }
}
Онлайн: 1
Реклама