Development

Changeset 16301

You must first sign up to be able to contribute.

Changeset 16301

Show
Ignore:
Timestamp:
03/13/09 15:44:57 (6 years ago)
Author:
fabriceb
Message:

[sfEasyGMapPlugin] v1.0 with unit tests, sf1.2 compatible, and new functions concerning bounds (smallest bound, homothety, zoomOut) and coordinates (pixel to lat/lng, lat/lng to pix)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • plugins/sfEasyGMapPlugin/trunk/README

    r16292 r16301  
    4848 
    4949  All samples are available in the sfEasyGMapPlugin module of the plugin 
     50   
     51  IMPORTANT ! The javascript in the samples will not work unless you put the js files in your web directory. 
     52   
     53        $ ln -s ../plugins/sfEasyGMapPlugin/web web/sfEasyGMapPlugin 
    5054 
    5155  * Sample 1 
  • plugins/sfEasyGMapPlugin/trunk/config/app.yml

    r11741 r16301  
    66      localhost:               'ABQIAAAAR8dhgMmvaR96TE0zbrZpPhT2yXp_ZAY8_ufC3CFXhHIE1NvwkxTigwPNwH8mpUzCtNyXEc8wof8pQQ' 
    77      127.0.0.1:               'ABQIAAAAR8dhgMmvaR96TE0zbrZpPhRi_j0U6kJrkFvY4-OX2XYmEAa76BSBf4cexehBD0A_7x8IHGqyru1L-w' 
    8       myfriendsmap.allomatch.amlocal: 'ABQIAAAAR8dhgMmvaR96TE0zbrZpPhTen_Kr4BPibvG7BpUai5kZ9loSrRQWMSxzmHsjgRny_cdmLnAughm8zQ
     8      theodo.allomatch.amlocal: 'ABQIAAAAR8dhgMmvaR96TE0zbrZpPhQYmdh2C4WZ52ITKaz16nRTTNfCjxTaZAKZH5i3EYw_WobyL5iIG6Hurg
  • plugins/sfEasyGMapPlugin/trunk/lib/GMap.class.php

    r12374 r16301  
    88class GMap 
    99{ 
     10   
     11  protected $default_options = array( 
     12      'double_click_zoom' => true, 
     13      'control' => 'new google.maps.LargeMapControl()', 
     14      'zoom' => 10, 
     15      'center_lat' => 48.845398, 
     16      'center_lng' => 2.34258, 
     17      'js_name' => 'map' 
     18  ); 
    1019  // The API key provided by Google 
    1120  protected $api_key; 
    12   // the name of the javascript Google Map object 
    13   protected $js_name = 'map'; 
    14   // Starting zoom and center parameters. 
    15   protected $zoom = 1; 
    16   protected $center_lat=26.43; 
    17   protected $center_lng=0; 
     21 
    1822  // id of the Google Map div container 
    19   protected $container_id='map'; 
     23  protected $container_attributes = array( 
     24      'id' =>'map' 
     25  ); 
    2026  // style of the container 
    2127  protected $container_style=array('width'=>'512px','height'=>'512px'); 
     
    3642   * Constructs a Google Map PHP object 
    3743   * 
    38    * @param Integer $zoom 
    39    * @param Decimal $lat 
    40    * @param Decimal $lng 
    4144   * @param array $options 
    42    */ 
    43   public function __construct($zoom=null,$lat=null,$lng=null,$options=array()) 
    44   { 
     45   * @param array $attributes  
     46   */ 
     47  public function __construct($options=array(),$container_attributes=array()) 
     48  { 
     49    $this->options = array_merge($this->default_options,$options); 
     50    $this->container_attributes = array_merge($this->container_attributes,$container_attributes); 
    4551    // sets the starting zoom and center parameters 
    46     if (!is_null($zoom)) 
    47     { 
    48       $this->zoom=$zoom; 
    49     } 
    50     if (!is_null($lat) && !is_null($lng)) 
    51     { 
    52       $this->setCenter($lat, $lng); 
    53     } 
     52    $this->zoom = $this->options['zoom']; 
     53    $this->setCenter($this->options['center_lat'], $this->options['center_lng']); 
    5454 
    5555    // delcare the Google Map Javascript object as global 
     
    5757 
    5858    // set the Google Map API key for the current domain 
    59     $this->guessAPIKey(); 
    60  
    61     $default_options = array( 
    62       'double_click_zoom'=>true, 
    63       'control'=>'new google.maps.LargeMapControl()' 
    64     ); 
    65     $this->options = array_merge($default_options,$options); 
    66  
    67   } 
    68  
    69   /** 
    70    * Guesses the GoogleMap key for the current domain 
    71    * 
    72    */ 
    73   protected function guessAPIKey() 
    74   { 
    75     if (isset($_SERVER['SERVER_NAME'])) 
    76     { 
    77       $this->setAPIKeyByDomain($_SERVER['SERVER_NAME']); 
    78     } 
    79     else if (isset($_SERVER['HTTP_HOST'])) 
    80     { 
    81       $this->setAPIKeyByDomain($_SERVER['HTTP_HOST']); 
    82     } 
    83     else 
    84     { 
    85       $this->setAPIKeyByDomain('default'); 
    86     } 
    87   } 
    88  
     59    $this->guessAndSetAPIKey(); 
     60 
     61  } 
     62 
     63  /** 
     64   * Guesses and sets the API Key 
     65   * @author Fabrice 
     66   * 
     67   */ 
     68  protected function guessAndSetAPIKey() 
     69  { 
     70    $this->setAPIKey(self::guessAPIKey()); 
     71  } 
     72   
    8973  /** 
    9074   * Sets the Google Map API Key using the array_google_keys defined in the app.yml of your application 
    9175   * @param String $domain The domaine name 
     76   * @author Fabrice 
     77   *  
    9278   */ 
    9379  public function setAPIKeyByDomain($domain) 
     80  { 
     81    $this->setAPIKey(self::getAPIKeyByDomain($domain)); 
     82  } 
     83     
     84  /** 
     85   * Guesses the GoogleMap key for the current domain 
     86   * @return String $api_key 
     87   * @author Fabrice 
     88   * 
     89   */ 
     90  public static function guessAPIKey() 
     91  { 
     92    if (isset($_SERVER['SERVER_NAME'])) 
     93    { 
     94      return self::getAPIKeyByDomain($_SERVER['SERVER_NAME']); 
     95    } 
     96    else if (isset($_SERVER['HTTP_HOST'])) 
     97    { 
     98      return self::getAPIKeyByDomain($_SERVER['HTTP_HOST']); 
     99    } 
     100 
     101    return self::getAPIKeyByDomain('default'); 
     102  } 
     103 
     104  /** 
     105   * Static method to retrieve API key 
     106   * 
     107   * @param unknown_type $domain 
     108   * @return unknown 
     109   */ 
     110  public static function getAPIKeyByDomain($domain) 
    94111  { 
    95112    $api_keys = sfConfig::get('app_google_maps_api_keys'); 
    96113    if (is_array($api_keys) && array_key_exists($domain,$api_keys)) 
    97114    { 
    98       $this->api_key=$api_keys[$domain]; 
     115      $api_key=$api_keys[$domain]; 
    99116    } 
    100117    else 
     
    102119      if (array_key_exists('default',$api_keys)) 
    103120      { 
    104         $this->api_key=$api_keys['default']; 
     121        $api_key=$api_keys['default']; 
    105122      } 
    106123      else 
     
    109126      } 
    110127    } 
    111   } 
     128     
     129    return $api_key; 
     130  } 
     131 
    112132 
    113133  /** 
     
    139159 
    140160  /** 
    141    * @return String $js_name Javascript name of the googlemap 
     161   * @return String $this->options['js_name'] Javascript name of the googlemap 
    142162   */ 
    143163  public function getJsName() 
    144164  { 
    145165 
    146     return $this->js_name
     166    return $this->options['js_name']
    147167  } 
    148168 
     
    199219 
    200220    return $this->container_style[$style_tag]; 
     221  } 
     222   
     223  public function getContainerId() 
     224  { 
     225     
     226    return $this->container_attributes['id']; 
    201227  } 
    202228 
     
    207233   * @author Fabrice Bernhard 
    208234   */ 
    209   public function getContainer($options=array()) 
    210   { 
    211     if (count($options)>0) 
    212     { 
    213       $this->setContainerStyles($options); 
    214     } 
     235  public function getContainer($styles=array(),$attributes=array()) 
     236  { 
     237    $this->container_style = array_merge($this->container_style,$styles); 
     238    $this->container_attributes = array_merge($this->container_attributes,$attributes); 
     239 
    215240    $style=""; 
    216241    foreach ($this->container_style as $tag=>$val) 
     
    218243      $style.=$tag.":".$val.";"; 
    219244    } 
    220     return 
    221       ' 
    222       <div id="'.$this->container_id.'" style="'.$style.'"> 
    223       </div> 
    224         '; 
    225   } 
     245     
     246    $attributes = $this->container_attributes; 
     247    $attributes['style'] = $style; 
     248     
     249    return RenderTag::renderContent('div',null,$attributes); 
     250  } 
     251 
    226252 
    227253  /** 
     
    239265    $return =''; 
    240266    $init_events = array(); 
    241     $init_events[] = $this->getJsName().' = new google.maps.Map2(document.getElementById("'.$this->container_id.'"));'; 
     267    $init_events[] = $this->getJsName().' = new google.maps.Map2(document.getElementById("'.$this->getContainerId().'"));'; 
    242268    $init_events[] = $this->getJsName().'.setCenter(new google.maps.LatLng('.$this->getCenterLat().', '.$this->getCenterLng().'), '.$this->getZoom().');'; 
    243269    if ($options['double_click_zoom']) 
     
    305331    $this->icons[$icon->getName()]=$icon; 
    306332  } 
     333   
     334  /** 
     335   * Retourne l'objet GMapIcon à partir du nom de l'icone 
     336   * 
     337   * @param String $name 
     338   * @return GMapIcon 
     339   *  
     340   * @author Vincent 
     341   * @since 2008-12-02 
     342   */ 
     343  public function getIconByName($name) 
     344  { 
     345     
     346    return $this->icons[$name]; 
     347  } 
     348   
    307349  /** 
    308350   * @param GMapMarker $marker a marker to be put on the map 
     
    400442  } 
    401443 
    402   public function getContainerId() 
    403   { 
    404     return $this->container_id; 
    405   } 
    406444  public function addGlobalVariable($name, $value='null') 
    407445  { 
  • plugins/sfEasyGMapPlugin/trunk/lib/GMapMarker.class.php

    r16292 r16301  
    8282  } 
    8383   
     84  public function getIconName() 
     85  { 
     86    if ($this->getIcon() instanceof GMapIcon) 
     87    { 
     88       
     89      return $this->getIcon()->getName(); 
     90    } 
     91     
     92    return $this->getIcon(); 
     93  } 
    8494  /** 
    8595  * @return String Javascript code to create the marker 
     
    8898  public function getMarkerJs() 
    8999  { 
    90     if ($this->getIcon() instanceof GMapIcon
     100    if ($this->getIconName() != ''
    91101    { 
    92       $markerOptionsJs = ', { icon:'.$this->getIcon()->getName().' }'; 
     102      $markerOptionsJs = ', { icon:'.$this->getIconName().' }'; 
    93103    } 
    94104    else 
     
    124134   * 
    125135   * @param String $html_text 
    126    * @since Mar 13, 2009 fabriceb replaced the escape_javascript of the TagHelper by plain code to ensure 1.2 compatibility 
     136   * @author fabriceb 
     137   * @since Feb 20, 2009 fabriceb removed the escape_javascript function which made the plugin incompatible with symfony 1.2  
    127138   */ 
    128139  public function addHtmlInfoWindow($html_text) 
     
    130141    $javascript = preg_replace('/\r\n|\n|\r/', "\\n", $html_text); 
    131142    $javascript = preg_replace('/(["\'])/', '\\\\\1', $javascript); 
    132  
     143     
    133144    $this->addEvent(new GMapEvent('click',"this.openInfoWindowHtml('".$javascript."')")); 
    134145  } 
     
    137148   * Returns the code for the static version of Google Maps 
    138149   * @TODO Add support for color and alpha-char 
     150   * @author laurentb 
    139151   */ 
    140152  public function getMarkerStatic() 
  • plugins/sfEasyGMapPlugin/trunk/lib/helper/GMapHelper.php

    r11741 r16301  
    66 * @param GMap $gMap 
    77 * @param array style options of the container 
     8 * @author fabriceb 
    89 */ 
    910function include_map($gMap,$options=array()) 
     
    1718 * @param GMap $gMap 
    1819 * @param array style options of the container 
     20 * @author fabriceb 
    1921 */ 
    2022function include_map_javascript($gMap) 
     
    2527function include_search_location_form() 
    2628{ 
    27   sfContext::getInstance()->getResponse()->addJavascript('/sfGMaps2Plugin/js/sfGMaps2Plugin.js'); 
     29  sfContext::getInstance()->getResponse()->addJavascript('/sfEasyGMapPlugin/js/sfEasyGMapPlugin.js'); 
    2830  ?> 
    2931  <form onsubmit="geocode_and_show(document.getElementById('search_location_input').value);return false;"> 
  • plugins/sfEasyGMapPlugin/trunk/modules/sfEasyGMapPlugin/actions/actions.class.php

    r11741 r16301  
    33class sfEasyGMapPluginActions extends sfActions 
    44{ 
     5   
     6  public function executeIndex() 
     7  { 
     8     
     9  } 
    510   
    611  /** 
     
    6974  public function executeSample3() 
    7075  { 
    71     $this->gMap = new GMap(4,45,8,array('control'=>'new google.maps.SmallMapControl()')); 
     76    $this->gMap = new GMap( 
     77                                          array( 
     78                                              'zoom'=>4, 
     79                                              'center_lat'=>45, 
     80                                              'center_lng'=>8, 
     81                                              'control'=>'new google.maps.SmallMapControl()' 
     82                                          ) 
     83                              ); 
    7284 
    7385    // some places in the world 
  • plugins/sfEasyGMapPlugin/trunk/package.xml

    r11741 r16301  
    11<?xml version="1.0" encoding="UTF-8"?> 
    22<package packagerversion="1.4.6" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd"> 
    3  <name>sfEasyGMapPlugin</name><channel>plugins.symfony-project.org</channel> 
    4   
     3 <name>sfEasyGMapPlugin</name> 
     4 <channel>plugins.symfony-project.org</channel> 
    55 <summary>An easy, object-oriented, PHP abstraction of the Google Maps API</summary> 
    66 <description>The sfEasyGMap plugin provides helpers and an objet-oriented PHP abstraction to the Google Maps API to ease the process of adding a Google Map and customising it in your symfony projects.</description> 
     
    1111  <active>yes</active> 
    1212 </lead> 
    13  
    14   
    15  <date>2008-09-21</date> 
    16  <time>01:15:35</time> 
     13 <contributor> 
     14  <name>Laurent BACHELIER</name> 
     15  <user>laurentb</user> 
     16  <email>laurent@bachelier.name</email> 
     17  <active>yes</active>   
     18 </contributor>  
     19 <date>2009-03-13</date> 
     20 <time>10:34:00</time> 
    1721 <version> 
    18   <release>0.9.0</release> 
    19   <api>0.9.0</api> 
     22  <release>0.9.4</release> 
     23  <api>0.9.4</api> 
    2024 </version> 
    2125 <stability> 
     
    7579    <min>1.0.0</min> 
    7680    <max>1.2.0</max> 
    77     <exclude>1.2.0</exclude> 
    7881   </package> 
    7982  </required> 
    8083 </dependencies> 
    8184 <phprelease /> 
    82  <changelog /> 
     85 <changelog> 
     86  <release> 
     87    <version> 
     88      <release>0.9.4</release> 
     89      <api>0.9.4</api> 
     90    </version> 
     91    <stability> 
     92      <release>beta</release> 
     93      <api>beta</api> 
     94    </stability> 
     95    <license uri="http://www.symfony-project.org/license">MIT license</license> 
     96    <notes> 
     97 * removed the call to the Helper Tag to use the escape_javascript function to ensure symfony 1.2 compatibility 
     98    </notes>     
     99  </release> 
     100 </changelog> 
    83101</package>