WordPress.org

Plugin Directory

Changeset 613200


Ignore:
Timestamp:
10/16/12 13:32:20 (19 months ago)
Author:
eskapism
Message:

version 1.1.5

Location:
simple-fields-map-extension
Files:
2 edited
8 copied

Legend:

Unmodified
Added
Removed
  • simple-fields-map-extension/tags/1.1.5/readme.txt

    r600037 r613200  
    55Requires at least: 3.4 
    66Tested up to: 3.4.2 
    7 Stable tag: 1.1.4 
     7Stable tag: 1.1.5 
    88License: GPLv2 
    99 
     
    5353== Changelog == 
    5454 
     55= 1.1.5 = 
     56- It's tricky to create to class because Simple Fields must be added/loaded already when creating the class. The modified solution works, but perhaps only on specific versions of PHP. Have to check this in more details... 
     57 
    5558= 1.1.4 = 
    5659- A marker/location can now be removed/unset.  
  • simple-fields-map-extension/tags/1.1.5/simple-fields-map-extension.php

    r600037 r613200  
    44Plugin URI: http://earthpeople.se/ 
    55Description: Adds a Google Maps-field to Simple Fields 
    6 Version: 1.1.4 
     6Version: 1.1.5 
    77Author: Earth People 
    88Author URI: http://earthpeople.se/ 
     
    1313 
    1414function simple_fields_field_googlemaps_register() { 
     15    class simple_fields_field_googlemaps extends simple_fields_field { 
     16     
     17        public  
     18            $key = "googlemaps",  
     19            $name = "Google Maps location"; 
     20         
     21        function __construct() { 
     22            parent::__construct(); 
     23             
     24            // This is the funky way I do it so it works with my symlinks 
     25            $plugin_url = plugins_url(basename(dirname(__FILE__))) . "/"; 
     26     
     27            // Add admin scripts that the the plugin uses 
     28            add_action("admin_enqueue_scripts", function() use ($plugin_url) { 
     29                wp_enqueue_script( "simple-fields-googlemaps", $plugin_url . "scripts.js" ); 
     30                wp_enqueue_style( "simple-fields-googlemaps", $plugin_url . "style.css" ); 
     31            }); 
     32         
     33        } 
     34         
     35        /** 
     36         * Generate output for the fields options screen 
     37         */ 
     38        function options_output($existing_vals) { 
     39     
     40            $output = ""; 
     41     
     42            // Map type 
     43            $selectedDefaultMap = isset($existing_vals["defaultMapTypeId"]) ? $existing_vals["defaultMapTypeId"] : "HYBRID"; 
     44            $output .= sprintf(' 
     45                <div class="simple-fields-field-group-one-field-row"> 
     46                    <div class="simple-fields-field-group-one-field-row-col-first"> 
     47                        <p> 
     48                            <label>Map type</label> 
     49                        </p> 
     50                    </div> 
     51                    <div class="simple-fields-field-group-one-field-row-col-second"> 
     52                        <p> 
     53                            <select name="%1$s"> 
     54                                <option %2$s value="ROADMAP">ROADMAP - default 2D tiles of Google Maps 
     55                                <option %3$s value="SATELLITE">SATELLITE - photographic tiles. 
     56                                <option %4$s value="HYBRID">HYBRID - a mix of photographic tiles and a tile layer for prominent features (roads, city names). 
     57                                <option %5$s value="TERRAIN">TERRAIN - physical relief tiles for displaying elevation and water features (mountains, rivers, etc.). 
     58                            </select> 
     59                        </p> 
     60                    </div> 
     61                </div> 
     62                ', 
     63                $this->get_options_name("defaultMapTypeId"),  
     64                "ROADMAP"   == $selectedDefaultMap ? " selected " : "", 
     65                "SATELLITE" == $selectedDefaultMap ? " selected " : "", 
     66                "HYBRID"    == $selectedDefaultMap ? " selected " : "", 
     67                "TERRAIN"   == $selectedDefaultMap ? " selected " : "" 
     68            ); 
     69     
     70            // Map type 
     71            $output .= sprintf(' 
     72                <div class="simple-fields-field-group-one-field-row"> 
     73                    <div class="simple-fields-field-group-one-field-row-col-first"> 
     74                        <p> 
     75                            <label>Default zoom level</label> 
     76                        </p> 
     77                    </div> 
     78                    <div class="simple-fields-field-group-one-field-row-col-second"> 
     79                        <p> 
     80                            <input class="regular-text" type=text name="%1$s" value="%2$s" type=number pattern="\d+" required> 
     81                        </p> 
     82                    </div> 
     83                </div> 
     84                ', 
     85                $this->get_options_name("defaultZoomLevel"),  
     86                isset($existing_vals["defaultZoomLevel"]) ? $existing_vals["defaultZoomLevel"] : 10 
     87            ); 
     88     
     89            // Default location 
     90            $output .= sprintf(' 
     91                <div class="simple-fields-field-group-one-field-row"> 
     92                    <div class="simple-fields-field-group-one-field-row-col-first"> 
     93                        <p> 
     94                            <label>Default location</label> 
     95                        </p> 
     96                    </div> 
     97                    <div class="simple-fields-field-group-one-field-row-col-second"> 
     98                        <p> 
     99                            Lat: <input type=text name="%1$s" value="%2$s" type=number pattern="-?\d+.\d+" required> 
     100                            Lng: <input type=text name="%3$s" value="%4$s" type=number pattern="-?\d+.\d+" required> 
     101                        </p> 
     102                    </div> 
     103                </div> 
     104                ', 
     105                $this->get_options_name("defaultLocationLat"),  
     106                isset($existing_vals["defaultLocationLat"]) ? $existing_vals["defaultLocationLat"] : "59.3300", 
     107                $this->get_options_name("defaultLocationLng"),  
     108                isset($existing_vals["defaultLocationLng"]) ? $existing_vals["defaultLocationLng"] : "18.0700" 
     109            ); 
     110     
     111            return $output; 
     112     
     113        } 
     114         
     115        /** 
     116         * Generate output for post edit screen 
     117         */ 
     118        function edit_output($saved_values, $options) { 
     119     
     120            $output = ""; 
     121             
     122            $lat_init_pos       = isset($saved_values["lat"]) ? $saved_values["lat"] : $options["defaultLocationLat"]; 
     123            $lng_init_pos       = isset($saved_values["lng"]) ? $saved_values["lng"] : $options["defaultLocationLng"]; 
     124            $lat_saved          = isset($saved_values["lat"]) ? $saved_values["lat"] : NULL; 
     125            $lng_saved          = isset($saved_values["lng"]) ? $saved_values["lng"] : NULL; 
     126            $formatted_address  = isset($saved_values["formatted_address"]) ? $saved_values["formatted_address"] : ""; 
     127            $address_components = isset($saved_values["address_components"]) ? $saved_values["address_components"] : ""; 
     128            $name               = isset($saved_values["name"]) ? $saved_values["name"] : ""; 
     129             
     130            $output .= sprintf( 
     131                ' 
     132                    <div  
     133                        class="simple-fields-fieldtype-googlemap-map-container" 
     134                        data-defaultmaptypeid="%7$s" 
     135                        data-defaultzoomlevel="%8$s" 
     136                        > 
     137                        Loading map ... 
     138                    </div> 
     139                    <input type=hidden value="%18$s" class="simple-fields-field-googlemap-lat-init-position" /> 
     140                    <input type=hidden value="%19$s" class="simple-fields-field-googlemap-lng-init-position" /> 
     141                    <input type=hidden name=%1$s value="%2$s" class="simple-fields-field-googlemap-lat" /> 
     142                    <input type=hidden name=%3$s value="%4$s" class="simple-fields-field-googlemap-lng" /> 
     143                    <input type=hidden name=%14$s value="%15$s" class="simple-fields-field-googlemap-name" /> 
     144                    <input type=hidden name=%10$s value="%11$s" class="simple-fields-field-googlemap-formatted_address" /> 
     145                    <input type=hidden name=%12$s value="%13$s" class="simple-fields-field-googlemap-address_components" /> 
     146                    <p class="simple-fields-fieldtype-googlemap-selected-positions"> 
     147                        Position:  
     148                        <a class="simple-fields-fieldtype-googlemap-marker-remove" href="#">%16$s</a> 
     149                        <span class="simple-fields-fieldtype-googlemap-selected-positions-inner"> 
     150                            latitude <span class="simple-fields-field-googlemap-selected-lat">%5$s</span>, 
     151                            longitude <span class="simple-fields-field-googlemap-selected-lng">%6$s</span> 
     152                            <span class="simple-fields-field-googlemap-selected-name">%15$s</span> 
     153                            <span class="simple-fields-field-googlemap-selected-formatted_address">%11$s</span> 
     154                        </span> 
     155                    </p> 
     156                    <p><a class="simple-fields-fieldtype-googlemap-marker-add" href="#">%17$s</a></p> 
     157                    <p class="simple-fields-fieldtype-googlemap-address-search"> 
     158                        <input type="text" name="" value="" placeholder="%9$s"> 
     159                    </p> 
     160                ', 
     161                $this->get_options_name("lat"), 
     162                esc_attr($lat_saved), 
     163                $this->get_options_name("lng"), 
     164                esc_attr($lng_saved), 
     165                round($lat_saved, 5), 
     166                round($lng_saved, 5), 
     167                $options["defaultMapTypeId"], 
     168                $options["defaultZoomLevel"], 
     169                "Search for company or address", // 9 
     170                $this->get_options_name("formatted_address"), // 10 
     171                esc_attr($formatted_address), 
     172                $this->get_options_name("address_components"), // 12 
     173                esc_attr($address_components), 
     174                $this->get_options_name("name"), // 14 
     175                esc_attr($name), 
     176                "(remove)", // 16 
     177                "Add marker/location", // 17 
     178                $lat_init_pos, // 18 
     179                $lng_init_pos  // 19 
     180            ); 
     181             
     182            return $output; 
     183        } 
     184         
     185        /** 
     186         * When returning values, add some useful info like static maps 
     187         */ 
     188        function return_values($values, $options = NULL) { 
     189             
     190            // All these defaults can be overwritten by simple_fields_value 
     191            $defaults = array( 
     192                "static_maps_zoom"          => 16, 
     193                "static_maps_scale"         => 1, 
     194                "static_maps_maptype"       => "roadmap", // roadmap | satellite | terrain | hybrid 
     195                "static_maps_marker_show"   => TRUE, // https://developers.google.com/maps/documentation/staticmaps/#Markers 
     196                "static_maps_marker_size"   => "mid", 
     197                "static_maps_marker_color"  => "red" 
     198            ); 
     199            $options = wp_parse_args( $options, $defaults ); 
     200             
     201            // Add default sizes 
     202            $arr_sizes = array( 
     203                "thumbnail" => array( 
     204                    "width"  => get_option("thumbnail_size_w"), 
     205                    "height" => get_option("thumbnail_size_h") 
     206                ), 
     207                "medium" => array( 
     208                    "width"  => get_option("medium_size_w"), 
     209                    "height" => get_option("medium_size_h") 
     210                ), 
     211                "large" => array( 
     212                    "width"  => get_option("large_size_w"), 
     213                    "height" => get_option("large_size_h") 
     214                )                
     215            ); 
     216             
     217            // Add custom sizes 
     218            global $_wp_additional_image_sizes; 
     219            foreach ($_wp_additional_image_sizes as $size_key => $size_vals) {  
     220                $arr_sizes[$size_key] = array( 
     221                    "width"     => $size_vals["width"], 
     222                    "height"    => $size_vals["height"] 
     223                ); 
     224            } 
     225             
     226            // Generate the src for a static map for each map, for each image size 
     227            // https://developers.google.com/maps/documentation/staticmaps/ 
     228            $static_map_base = "http://maps.googleapis.com/maps/api/staticmap?sensor=false"; 
     229            foreach ($values as $key => $val) { 
     230                $arr_static_maps = array(); 
     231                foreach($arr_sizes as $size_key => $size_vals) { 
     232     
     233                    $markers = ""; 
     234                    if ($options["static_maps_marker_show"]) { 
     235                        $markers = ""; 
     236                        $markers .= "size:" . $options["static_maps_marker_size"]; 
     237                        $markers .= "|"; 
     238                        $markers .= "color:" . $options["static_maps_marker_color"]; 
     239                        $markers .= "|"; 
     240                        $markers .= $val["lat"] . "," . $val["lng"]; 
     241                    } 
     242     
     243                    $static_map = add_query_arg(array( 
     244                        "center"    => $val["lat"] . "," . $val["lng"], 
     245                        "zoom"      => $options["static_maps_zoom"], 
     246                        "size"      => $size_vals["width"] . "x" . $size_vals["height"], 
     247                        "scale"     => $options["static_maps_scale"], 
     248                        "maptype"   => $options["static_maps_maptype"], 
     249                        "markers"   => $markers 
     250                    ), $static_map_base); 
     251                     
     252                    $arr_static_maps[$size_key] = $static_map; 
     253                    // echo "<p>$size_key:<br><img src='$static_map'></p>"; 
     254     
     255                } 
     256     
     257                $values[$key]["static_maps"] = $arr_static_maps; 
     258     
     259                // If address_components exists, decode the json to array 
     260                if (isset($values[$key]["address_components"]) && $values[$key]["address_components"]) { 
     261                    $values[$key]["address_components"] = json_decode($values[$key]["address_components"]); 
     262                } 
     263     
     264     
     265            } 
     266                         
     267            return $values; 
     268             
     269        } 
     270     
     271    } // class 
     272 
    15273    simple_fields::register_field_type("simple_fields_field_googlemaps"); 
    16274} 
    17275 
    18 class simple_fields_field_googlemaps extends simple_fields_field { 
    19  
    20     public  
    21         $key = "googlemaps",  
    22         $name = "Google Maps location"; 
    23      
    24     function __construct() { 
    25         parent::__construct(); 
    26          
    27         // This is the funky way I do it so it works with my symlinks 
    28         $plugin_url = plugins_url(basename(dirname(__FILE__))) . "/"; 
    29  
    30         // Add admin scripts that the the plugin uses 
    31         add_action("admin_enqueue_scripts", function() use ($plugin_url) { 
    32             wp_enqueue_script( "simple-fields-googlemaps", $plugin_url . "scripts.js" ); 
    33             wp_enqueue_style( "simple-fields-googlemaps", $plugin_url . "style.css" ); 
    34         }); 
    35      
    36     } 
    37      
    38     /** 
    39      * Generate output for the fields options screen 
    40      */ 
    41     function options_output($existing_vals) { 
    42  
    43         $output = ""; 
    44  
    45         // Map type 
    46         $selectedDefaultMap = isset($existing_vals["defaultMapTypeId"]) ? $existing_vals["defaultMapTypeId"] : "HYBRID"; 
    47         $output .= sprintf(' 
    48             <p> 
    49                 <label>Map type</label> 
    50                 <select name="%1$s"> 
    51                     <option %2$s value="ROADMAP">ROADMAP - default 2D tiles of Google Maps 
    52                     <option %3$s value="SATELLITE">SATELLITE - photographic tiles. 
    53                     <option %4$s value="HYBRID">HYBRID - a mix of photographic tiles and a tile layer for prominent features (roads, city names). 
    54                     <option %5$s value="TERRAIN">TERRAIN - physical relief tiles for displaying elevation and water features (mountains, rivers, etc.). 
    55                 </select> 
    56             </p>', 
    57             $this->get_options_name("defaultMapTypeId"),  
    58             "ROADMAP"   == $selectedDefaultMap ? " selected " : "", 
    59             "SATELLITE" == $selectedDefaultMap ? " selected " : "", 
    60             "HYBRID"    == $selectedDefaultMap ? " selected " : "", 
    61             "TERRAIN"   == $selectedDefaultMap ? " selected " : "" 
    62         ); 
    63  
    64         // Map type 
    65         $output .= sprintf(' 
    66             <p> 
    67                 <label>Default zoom level</label> 
    68                 <input type=text name="%1$s" value="%2$s" type=number pattern="\d+" required> 
    69             </p> 
    70             ', 
    71             $this->get_options_name("defaultZoomLevel"),  
    72             isset($existing_vals["defaultZoomLevel"]) ? $existing_vals["defaultZoomLevel"] : 10 
    73         ); 
    74  
    75         // Default location 
    76         $output .= sprintf(' 
    77             <p> 
    78                 <label>Default location</label> 
    79                 Lat: <input type=text name="%1$s" value="%2$s" type=number pattern="-?\d+.\d+" required> 
    80                 Lng: <input type=text name="%3$s" value="%4$s" type=number pattern="-?\d+.\d+" required> 
    81             </p> 
    82             ', 
    83             $this->get_options_name("defaultLocationLat"),  
    84             isset($existing_vals["defaultLocationLat"]) ? $existing_vals["defaultLocationLat"] : "59.3300", 
    85             $this->get_options_name("defaultLocationLng"),  
    86             isset($existing_vals["defaultLocationLng"]) ? $existing_vals["defaultLocationLng"] : "18.0700" 
    87         ); 
    88  
    89         return $output; 
    90  
    91     } 
    92      
    93     /** 
    94      * Generate output for post edit screen 
    95      */ 
    96     function edit_output($saved_values, $options) { 
    97  
    98         $output = ""; 
    99          
    100         $lat_init_pos       = isset($saved_values["lat"]) ? $saved_values["lat"] : $options["defaultLocationLat"]; 
    101         $lng_init_pos       = isset($saved_values["lng"]) ? $saved_values["lng"] : $options["defaultLocationLng"]; 
    102         $lat_saved          = isset($saved_values["lat"]) ? $saved_values["lat"] : NULL; 
    103         $lng_saved          = isset($saved_values["lng"]) ? $saved_values["lng"] : NULL; 
    104         $formatted_address  = isset($saved_values["formatted_address"]) ? $saved_values["formatted_address"] : ""; 
    105         $address_components = isset($saved_values["address_components"]) ? $saved_values["address_components"] : ""; 
    106         $name               = isset($saved_values["name"]) ? $saved_values["name"] : ""; 
    107          
    108         $output .= sprintf( 
    109             ' 
    110                 <div  
    111                     class="simple-fields-fieldtype-googlemap-map-container" 
    112                     data-defaultmaptypeid="%7$s" 
    113                     data-defaultzoomlevel="%8$s" 
    114                     > 
    115                     Loading map ... 
    116                 </div> 
    117                 <input type=hidden value="%18$s" class="simple-fields-field-googlemap-lat-init-position" /> 
    118                 <input type=hidden value="%19$s" class="simple-fields-field-googlemap-lng-init-position" /> 
    119                 <input type=hidden name=%1$s value="%2$s" class="simple-fields-field-googlemap-lat" /> 
    120                 <input type=hidden name=%3$s value="%4$s" class="simple-fields-field-googlemap-lng" /> 
    121                 <input type=hidden name=%14$s value="%15$s" class="simple-fields-field-googlemap-name" /> 
    122                 <input type=hidden name=%10$s value="%11$s" class="simple-fields-field-googlemap-formatted_address" /> 
    123                 <input type=hidden name=%12$s value="%13$s" class="simple-fields-field-googlemap-address_components" /> 
    124                 <p class="simple-fields-fieldtype-googlemap-selected-positions"> 
    125                     Position:  
    126                     <a class="simple-fields-fieldtype-googlemap-marker-remove" href="#">%16$s</a> 
    127                     <span class="simple-fields-fieldtype-googlemap-selected-positions-inner"> 
    128                         latitude <span class="simple-fields-field-googlemap-selected-lat">%5$s</span>, 
    129                         longitude <span class="simple-fields-field-googlemap-selected-lng">%6$s</span> 
    130                         <span class="simple-fields-field-googlemap-selected-name">%15$s</span> 
    131                         <span class="simple-fields-field-googlemap-selected-formatted_address">%11$s</span> 
    132                     </span> 
    133                 </p> 
    134                 <p><a class="simple-fields-fieldtype-googlemap-marker-add" href="#">%17$s</a></p> 
    135                 <p class="simple-fields-fieldtype-googlemap-address-search"> 
    136                     <input type="text" name="" value="" placeholder="%9$s"> 
    137                 </p> 
    138             ', 
    139             $this->get_options_name("lat"), 
    140             esc_attr($lat_saved), 
    141             $this->get_options_name("lng"), 
    142             esc_attr($lng_saved), 
    143             round($lat_saved, 5), 
    144             round($lng_saved, 5), 
    145             $options["defaultMapTypeId"], 
    146             $options["defaultZoomLevel"], 
    147             "Search for company or address", // 9 
    148             $this->get_options_name("formatted_address"), // 10 
    149             esc_attr($formatted_address), 
    150             $this->get_options_name("address_components"), // 12 
    151             esc_attr($address_components), 
    152             $this->get_options_name("name"), // 14 
    153             esc_attr($name), 
    154             "(remove)", // 16 
    155             "Add marker/location", // 17 
    156             $lat_init_pos, // 18 
    157             $lng_init_pos  // 19 
    158         ); 
    159          
    160         return $output; 
    161     } 
    162      
    163     /** 
    164      * When returning values, add some useful info like static maps 
    165      */ 
    166     function return_values($values, $options = NULL) { 
    167          
    168         // All these defaults can be overwritten by simple_fields_value 
    169         $defaults = array( 
    170             "static_maps_zoom"          => 16, 
    171             "static_maps_scale"         => 1, 
    172             "static_maps_maptype"       => "roadmap", // roadmap | satellite | terrain | hybrid 
    173             "static_maps_marker_show"   => TRUE, // https://developers.google.com/maps/documentation/staticmaps/#Markers 
    174             "static_maps_marker_size"   => "mid", 
    175             "static_maps_marker_color"  => "red" 
    176         ); 
    177         $options = wp_parse_args( $options, $defaults ); 
    178          
    179         // Add default sizes 
    180         $arr_sizes = array( 
    181             "thumbnail" => array( 
    182                 "width"  => get_option("thumbnail_size_w"), 
    183                 "height" => get_option("thumbnail_size_h") 
    184             ), 
    185             "medium" => array( 
    186                 "width"  => get_option("medium_size_w"), 
    187                 "height" => get_option("medium_size_h") 
    188             ), 
    189             "large" => array( 
    190                 "width"  => get_option("large_size_w"), 
    191                 "height" => get_option("large_size_h") 
    192             )                
    193         ); 
    194          
    195         // Add custom sizes 
    196         global $_wp_additional_image_sizes; 
    197         foreach ($_wp_additional_image_sizes as $size_key => $size_vals) {  
    198             $arr_sizes[$size_key] = array( 
    199                 "width"     => $size_vals["width"], 
    200                 "height"    => $size_vals["height"] 
    201             ); 
    202         } 
    203          
    204         // Generate the src for a static map for each map, for each image size 
    205         // https://developers.google.com/maps/documentation/staticmaps/ 
    206         $static_map_base = "http://maps.googleapis.com/maps/api/staticmap?sensor=false"; 
    207         foreach ($values as $key => $val) { 
    208             $arr_static_maps = array(); 
    209             foreach($arr_sizes as $size_key => $size_vals) { 
    210  
    211                 $markers = ""; 
    212                 if ($options["static_maps_marker_show"]) { 
    213                     $markers = ""; 
    214                     $markers .= "size:" . $options["static_maps_marker_size"]; 
    215                     $markers .= "|"; 
    216                     $markers .= "color:" . $options["static_maps_marker_color"]; 
    217                     $markers .= "|"; 
    218                     $markers .= $val["lat"] . "," . $val["lng"]; 
    219                 } 
    220  
    221                 $static_map = add_query_arg(array( 
    222                     "center"    => $val["lat"] . "," . $val["lng"], 
    223                     "zoom"      => $options["static_maps_zoom"], 
    224                     "size"      => $size_vals["width"] . "x" . $size_vals["height"], 
    225                     "scale"     => $options["static_maps_scale"], 
    226                     "maptype"   => $options["static_maps_maptype"], 
    227                     "markers"   => $markers 
    228                 ), $static_map_base); 
    229                  
    230                 $arr_static_maps[$size_key] = $static_map; 
    231                 // echo "<p>$size_key:<br><img src='$static_map'></p>"; 
    232  
    233             } 
    234  
    235             $values[$key]["static_maps"] = $arr_static_maps; 
    236  
    237             // If address_components exists, decode the json to array 
    238             if (isset($values[$key]["address_components"]) && $values[$key]["address_components"]) { 
    239                 $values[$key]["address_components"] = json_decode($values[$key]["address_components"]); 
    240             } 
    241  
    242  
    243         } 
    244                      
    245         return $values; 
    246          
    247     } 
    248  
    249 } // class 
  • simple-fields-map-extension/trunk/readme.txt

    r600037 r613200  
    55Requires at least: 3.4 
    66Tested up to: 3.4.2 
    7 Stable tag: 1.1.4 
     7Stable tag: 1.1.5 
    88License: GPLv2 
    99 
     
    5353== Changelog == 
    5454 
     55= 1.1.5 = 
     56- It's tricky to create to class because Simple Fields must be added/loaded already when creating the class. The modified solution works, but perhaps only on specific versions of PHP. Have to check this in more details... 
     57 
    5558= 1.1.4 = 
    5659- A marker/location can now be removed/unset.  
  • simple-fields-map-extension/trunk/simple-fields-map-extension.php

    r600037 r613200  
    44Plugin URI: http://earthpeople.se/ 
    55Description: Adds a Google Maps-field to Simple Fields 
    6 Version: 1.1.4 
     6Version: 1.1.5 
    77Author: Earth People 
    88Author URI: http://earthpeople.se/ 
     
    1313 
    1414function simple_fields_field_googlemaps_register() { 
     15    class simple_fields_field_googlemaps extends simple_fields_field { 
     16     
     17        public  
     18            $key = "googlemaps",  
     19            $name = "Google Maps location"; 
     20         
     21        function __construct() { 
     22            parent::__construct(); 
     23             
     24            // This is the funky way I do it so it works with my symlinks 
     25            $plugin_url = plugins_url(basename(dirname(__FILE__))) . "/"; 
     26     
     27            // Add admin scripts that the the plugin uses 
     28            add_action("admin_enqueue_scripts", function() use ($plugin_url) { 
     29                wp_enqueue_script( "simple-fields-googlemaps", $plugin_url . "scripts.js" ); 
     30                wp_enqueue_style( "simple-fields-googlemaps", $plugin_url . "style.css" ); 
     31            }); 
     32         
     33        } 
     34         
     35        /** 
     36         * Generate output for the fields options screen 
     37         */ 
     38        function options_output($existing_vals) { 
     39     
     40            $output = ""; 
     41     
     42            // Map type 
     43            $selectedDefaultMap = isset($existing_vals["defaultMapTypeId"]) ? $existing_vals["defaultMapTypeId"] : "HYBRID"; 
     44            $output .= sprintf(' 
     45                <div class="simple-fields-field-group-one-field-row"> 
     46                    <div class="simple-fields-field-group-one-field-row-col-first"> 
     47                        <p> 
     48                            <label>Map type</label> 
     49                        </p> 
     50                    </div> 
     51                    <div class="simple-fields-field-group-one-field-row-col-second"> 
     52                        <p> 
     53                            <select name="%1$s"> 
     54                                <option %2$s value="ROADMAP">ROADMAP - default 2D tiles of Google Maps 
     55                                <option %3$s value="SATELLITE">SATELLITE - photographic tiles. 
     56                                <option %4$s value="HYBRID">HYBRID - a mix of photographic tiles and a tile layer for prominent features (roads, city names). 
     57                                <option %5$s value="TERRAIN">TERRAIN - physical relief tiles for displaying elevation and water features (mountains, rivers, etc.). 
     58                            </select> 
     59                        </p> 
     60                    </div> 
     61                </div> 
     62                ', 
     63                $this->get_options_name("defaultMapTypeId"),  
     64                "ROADMAP"   == $selectedDefaultMap ? " selected " : "", 
     65                "SATELLITE" == $selectedDefaultMap ? " selected " : "", 
     66                "HYBRID"    == $selectedDefaultMap ? " selected " : "", 
     67                "TERRAIN"   == $selectedDefaultMap ? " selected " : "" 
     68            ); 
     69     
     70            // Map type 
     71            $output .= sprintf(' 
     72                <div class="simple-fields-field-group-one-field-row"> 
     73                    <div class="simple-fields-field-group-one-field-row-col-first"> 
     74                        <p> 
     75                            <label>Default zoom level</label> 
     76                        </p> 
     77                    </div> 
     78                    <div class="simple-fields-field-group-one-field-row-col-second"> 
     79                        <p> 
     80                            <input class="regular-text" type=text name="%1$s" value="%2$s" type=number pattern="\d+" required> 
     81                        </p> 
     82                    </div> 
     83                </div> 
     84                ', 
     85                $this->get_options_name("defaultZoomLevel"),  
     86                isset($existing_vals["defaultZoomLevel"]) ? $existing_vals["defaultZoomLevel"] : 10 
     87            ); 
     88     
     89            // Default location 
     90            $output .= sprintf(' 
     91                <div class="simple-fields-field-group-one-field-row"> 
     92                    <div class="simple-fields-field-group-one-field-row-col-first"> 
     93                        <p> 
     94                            <label>Default location</label> 
     95                        </p> 
     96                    </div> 
     97                    <div class="simple-fields-field-group-one-field-row-col-second"> 
     98                        <p> 
     99                            Lat: <input type=text name="%1$s" value="%2$s" type=number pattern="-?\d+.\d+" required> 
     100                            Lng: <input type=text name="%3$s" value="%4$s" type=number pattern="-?\d+.\d+" required> 
     101                        </p> 
     102                    </div> 
     103                </div> 
     104                ', 
     105                $this->get_options_name("defaultLocationLat"),  
     106                isset($existing_vals["defaultLocationLat"]) ? $existing_vals["defaultLocationLat"] : "59.3300", 
     107                $this->get_options_name("defaultLocationLng"),  
     108                isset($existing_vals["defaultLocationLng"]) ? $existing_vals["defaultLocationLng"] : "18.0700" 
     109            ); 
     110     
     111            return $output; 
     112     
     113        } 
     114         
     115        /** 
     116         * Generate output for post edit screen 
     117         */ 
     118        function edit_output($saved_values, $options) { 
     119     
     120            $output = ""; 
     121             
     122            $lat_init_pos       = isset($saved_values["lat"]) ? $saved_values["lat"] : $options["defaultLocationLat"]; 
     123            $lng_init_pos       = isset($saved_values["lng"]) ? $saved_values["lng"] : $options["defaultLocationLng"]; 
     124            $lat_saved          = isset($saved_values["lat"]) ? $saved_values["lat"] : NULL; 
     125            $lng_saved          = isset($saved_values["lng"]) ? $saved_values["lng"] : NULL; 
     126            $formatted_address  = isset($saved_values["formatted_address"]) ? $saved_values["formatted_address"] : ""; 
     127            $address_components = isset($saved_values["address_components"]) ? $saved_values["address_components"] : ""; 
     128            $name               = isset($saved_values["name"]) ? $saved_values["name"] : ""; 
     129             
     130            $output .= sprintf( 
     131                ' 
     132                    <div  
     133                        class="simple-fields-fieldtype-googlemap-map-container" 
     134                        data-defaultmaptypeid="%7$s" 
     135                        data-defaultzoomlevel="%8$s" 
     136                        > 
     137                        Loading map ... 
     138                    </div> 
     139                    <input type=hidden value="%18$s" class="simple-fields-field-googlemap-lat-init-position" /> 
     140                    <input type=hidden value="%19$s" class="simple-fields-field-googlemap-lng-init-position" /> 
     141                    <input type=hidden name=%1$s value="%2$s" class="simple-fields-field-googlemap-lat" /> 
     142                    <input type=hidden name=%3$s value="%4$s" class="simple-fields-field-googlemap-lng" /> 
     143                    <input type=hidden name=%14$s value="%15$s" class="simple-fields-field-googlemap-name" /> 
     144                    <input type=hidden name=%10$s value="%11$s" class="simple-fields-field-googlemap-formatted_address" /> 
     145                    <input type=hidden name=%12$s value="%13$s" class="simple-fields-field-googlemap-address_components" /> 
     146                    <p class="simple-fields-fieldtype-googlemap-selected-positions"> 
     147                        Position:  
     148                        <a class="simple-fields-fieldtype-googlemap-marker-remove" href="#">%16$s</a> 
     149                        <span class="simple-fields-fieldtype-googlemap-selected-positions-inner"> 
     150                            latitude <span class="simple-fields-field-googlemap-selected-lat">%5$s</span>, 
     151                            longitude <span class="simple-fields-field-googlemap-selected-lng">%6$s</span> 
     152                            <span class="simple-fields-field-googlemap-selected-name">%15$s</span> 
     153                            <span class="simple-fields-field-googlemap-selected-formatted_address">%11$s</span> 
     154                        </span> 
     155                    </p> 
     156                    <p><a class="simple-fields-fieldtype-googlemap-marker-add" href="#">%17$s</a></p> 
     157                    <p class="simple-fields-fieldtype-googlemap-address-search"> 
     158                        <input type="text" name="" value="" placeholder="%9$s"> 
     159                    </p> 
     160                ', 
     161                $this->get_options_name("lat"), 
     162                esc_attr($lat_saved), 
     163                $this->get_options_name("lng"), 
     164                esc_attr($lng_saved), 
     165                round($lat_saved, 5), 
     166                round($lng_saved, 5), 
     167                $options["defaultMapTypeId"], 
     168                $options["defaultZoomLevel"], 
     169                "Search for company or address", // 9 
     170                $this->get_options_name("formatted_address"), // 10 
     171                esc_attr($formatted_address), 
     172                $this->get_options_name("address_components"), // 12 
     173                esc_attr($address_components), 
     174                $this->get_options_name("name"), // 14 
     175                esc_attr($name), 
     176                "(remove)", // 16 
     177                "Add marker/location", // 17 
     178                $lat_init_pos, // 18 
     179                $lng_init_pos  // 19 
     180            ); 
     181             
     182            return $output; 
     183        } 
     184         
     185        /** 
     186         * When returning values, add some useful info like static maps 
     187         */ 
     188        function return_values($values, $options = NULL) { 
     189             
     190            // All these defaults can be overwritten by simple_fields_value 
     191            $defaults = array( 
     192                "static_maps_zoom"          => 16, 
     193                "static_maps_scale"         => 1, 
     194                "static_maps_maptype"       => "roadmap", // roadmap | satellite | terrain | hybrid 
     195                "static_maps_marker_show"   => TRUE, // https://developers.google.com/maps/documentation/staticmaps/#Markers 
     196                "static_maps_marker_size"   => "mid", 
     197                "static_maps_marker_color"  => "red" 
     198            ); 
     199            $options = wp_parse_args( $options, $defaults ); 
     200             
     201            // Add default sizes 
     202            $arr_sizes = array( 
     203                "thumbnail" => array( 
     204                    "width"  => get_option("thumbnail_size_w"), 
     205                    "height" => get_option("thumbnail_size_h") 
     206                ), 
     207                "medium" => array( 
     208                    "width"  => get_option("medium_size_w"), 
     209                    "height" => get_option("medium_size_h") 
     210                ), 
     211                "large" => array( 
     212                    "width"  => get_option("large_size_w"), 
     213                    "height" => get_option("large_size_h") 
     214                )                
     215            ); 
     216             
     217            // Add custom sizes 
     218            global $_wp_additional_image_sizes; 
     219            foreach ($_wp_additional_image_sizes as $size_key => $size_vals) {  
     220                $arr_sizes[$size_key] = array( 
     221                    "width"     => $size_vals["width"], 
     222                    "height"    => $size_vals["height"] 
     223                ); 
     224            } 
     225             
     226            // Generate the src for a static map for each map, for each image size 
     227            // https://developers.google.com/maps/documentation/staticmaps/ 
     228            $static_map_base = "http://maps.googleapis.com/maps/api/staticmap?sensor=false"; 
     229            foreach ($values as $key => $val) { 
     230                $arr_static_maps = array(); 
     231                foreach($arr_sizes as $size_key => $size_vals) { 
     232     
     233                    $markers = ""; 
     234                    if ($options["static_maps_marker_show"]) { 
     235                        $markers = ""; 
     236                        $markers .= "size:" . $options["static_maps_marker_size"]; 
     237                        $markers .= "|"; 
     238                        $markers .= "color:" . $options["static_maps_marker_color"]; 
     239                        $markers .= "|"; 
     240                        $markers .= $val["lat"] . "," . $val["lng"]; 
     241                    } 
     242     
     243                    $static_map = add_query_arg(array( 
     244                        "center"    => $val["lat"] . "," . $val["lng"], 
     245                        "zoom"      => $options["static_maps_zoom"], 
     246                        "size"      => $size_vals["width"] . "x" . $size_vals["height"], 
     247                        "scale"     => $options["static_maps_scale"], 
     248                        "maptype"   => $options["static_maps_maptype"], 
     249                        "markers"   => $markers 
     250                    ), $static_map_base); 
     251                     
     252                    $arr_static_maps[$size_key] = $static_map; 
     253                    // echo "<p>$size_key:<br><img src='$static_map'></p>"; 
     254     
     255                } 
     256     
     257                $values[$key]["static_maps"] = $arr_static_maps; 
     258     
     259                // If address_components exists, decode the json to array 
     260                if (isset($values[$key]["address_components"]) && $values[$key]["address_components"]) { 
     261                    $values[$key]["address_components"] = json_decode($values[$key]["address_components"]); 
     262                } 
     263     
     264     
     265            } 
     266                         
     267            return $values; 
     268             
     269        } 
     270     
     271    } // class 
     272 
    15273    simple_fields::register_field_type("simple_fields_field_googlemaps"); 
    16274} 
    17275 
    18 class simple_fields_field_googlemaps extends simple_fields_field { 
    19  
    20     public  
    21         $key = "googlemaps",  
    22         $name = "Google Maps location"; 
    23      
    24     function __construct() { 
    25         parent::__construct(); 
    26          
    27         // This is the funky way I do it so it works with my symlinks 
    28         $plugin_url = plugins_url(basename(dirname(__FILE__))) . "/"; 
    29  
    30         // Add admin scripts that the the plugin uses 
    31         add_action("admin_enqueue_scripts", function() use ($plugin_url) { 
    32             wp_enqueue_script( "simple-fields-googlemaps", $plugin_url . "scripts.js" ); 
    33             wp_enqueue_style( "simple-fields-googlemaps", $plugin_url . "style.css" ); 
    34         }); 
    35      
    36     } 
    37      
    38     /** 
    39      * Generate output for the fields options screen 
    40      */ 
    41     function options_output($existing_vals) { 
    42  
    43         $output = ""; 
    44  
    45         // Map type 
    46         $selectedDefaultMap = isset($existing_vals["defaultMapTypeId"]) ? $existing_vals["defaultMapTypeId"] : "HYBRID"; 
    47         $output .= sprintf(' 
    48             <p> 
    49                 <label>Map type</label> 
    50                 <select name="%1$s"> 
    51                     <option %2$s value="ROADMAP">ROADMAP - default 2D tiles of Google Maps 
    52                     <option %3$s value="SATELLITE">SATELLITE - photographic tiles. 
    53                     <option %4$s value="HYBRID">HYBRID - a mix of photographic tiles and a tile layer for prominent features (roads, city names). 
    54                     <option %5$s value="TERRAIN">TERRAIN - physical relief tiles for displaying elevation and water features (mountains, rivers, etc.). 
    55                 </select> 
    56             </p>', 
    57             $this->get_options_name("defaultMapTypeId"),  
    58             "ROADMAP"   == $selectedDefaultMap ? " selected " : "", 
    59             "SATELLITE" == $selectedDefaultMap ? " selected " : "", 
    60             "HYBRID"    == $selectedDefaultMap ? " selected " : "", 
    61             "TERRAIN"   == $selectedDefaultMap ? " selected " : "" 
    62         ); 
    63  
    64         // Map type 
    65         $output .= sprintf(' 
    66             <p> 
    67                 <label>Default zoom level</label> 
    68                 <input type=text name="%1$s" value="%2$s" type=number pattern="\d+" required> 
    69             </p> 
    70             ', 
    71             $this->get_options_name("defaultZoomLevel"),  
    72             isset($existing_vals["defaultZoomLevel"]) ? $existing_vals["defaultZoomLevel"] : 10 
    73         ); 
    74  
    75         // Default location 
    76         $output .= sprintf(' 
    77             <p> 
    78                 <label>Default location</label> 
    79                 Lat: <input type=text name="%1$s" value="%2$s" type=number pattern="-?\d+.\d+" required> 
    80                 Lng: <input type=text name="%3$s" value="%4$s" type=number pattern="-?\d+.\d+" required> 
    81             </p> 
    82             ', 
    83             $this->get_options_name("defaultLocationLat"),  
    84             isset($existing_vals["defaultLocationLat"]) ? $existing_vals["defaultLocationLat"] : "59.3300", 
    85             $this->get_options_name("defaultLocationLng"),  
    86             isset($existing_vals["defaultLocationLng"]) ? $existing_vals["defaultLocationLng"] : "18.0700" 
    87         ); 
    88  
    89         return $output; 
    90  
    91     } 
    92      
    93     /** 
    94      * Generate output for post edit screen 
    95      */ 
    96     function edit_output($saved_values, $options) { 
    97  
    98         $output = ""; 
    99          
    100         $lat_init_pos       = isset($saved_values["lat"]) ? $saved_values["lat"] : $options["defaultLocationLat"]; 
    101         $lng_init_pos       = isset($saved_values["lng"]) ? $saved_values["lng"] : $options["defaultLocationLng"]; 
    102         $lat_saved          = isset($saved_values["lat"]) ? $saved_values["lat"] : NULL; 
    103         $lng_saved          = isset($saved_values["lng"]) ? $saved_values["lng"] : NULL; 
    104         $formatted_address  = isset($saved_values["formatted_address"]) ? $saved_values["formatted_address"] : ""; 
    105         $address_components = isset($saved_values["address_components"]) ? $saved_values["address_components"] : ""; 
    106         $name               = isset($saved_values["name"]) ? $saved_values["name"] : ""; 
    107          
    108         $output .= sprintf( 
    109             ' 
    110                 <div  
    111                     class="simple-fields-fieldtype-googlemap-map-container" 
    112                     data-defaultmaptypeid="%7$s" 
    113                     data-defaultzoomlevel="%8$s" 
    114                     > 
    115                     Loading map ... 
    116                 </div> 
    117                 <input type=hidden value="%18$s" class="simple-fields-field-googlemap-lat-init-position" /> 
    118                 <input type=hidden value="%19$s" class="simple-fields-field-googlemap-lng-init-position" /> 
    119                 <input type=hidden name=%1$s value="%2$s" class="simple-fields-field-googlemap-lat" /> 
    120                 <input type=hidden name=%3$s value="%4$s" class="simple-fields-field-googlemap-lng" /> 
    121                 <input type=hidden name=%14$s value="%15$s" class="simple-fields-field-googlemap-name" /> 
    122                 <input type=hidden name=%10$s value="%11$s" class="simple-fields-field-googlemap-formatted_address" /> 
    123                 <input type=hidden name=%12$s value="%13$s" class="simple-fields-field-googlemap-address_components" /> 
    124                 <p class="simple-fields-fieldtype-googlemap-selected-positions"> 
    125                     Position:  
    126                     <a class="simple-fields-fieldtype-googlemap-marker-remove" href="#">%16$s</a> 
    127                     <span class="simple-fields-fieldtype-googlemap-selected-positions-inner"> 
    128                         latitude <span class="simple-fields-field-googlemap-selected-lat">%5$s</span>, 
    129                         longitude <span class="simple-fields-field-googlemap-selected-lng">%6$s</span> 
    130                         <span class="simple-fields-field-googlemap-selected-name">%15$s</span> 
    131                         <span class="simple-fields-field-googlemap-selected-formatted_address">%11$s</span> 
    132                     </span> 
    133                 </p> 
    134                 <p><a class="simple-fields-fieldtype-googlemap-marker-add" href="#">%17$s</a></p> 
    135                 <p class="simple-fields-fieldtype-googlemap-address-search"> 
    136                     <input type="text" name="" value="" placeholder="%9$s"> 
    137                 </p> 
    138             ', 
    139             $this->get_options_name("lat"), 
    140             esc_attr($lat_saved), 
    141             $this->get_options_name("lng"), 
    142             esc_attr($lng_saved), 
    143             round($lat_saved, 5), 
    144             round($lng_saved, 5), 
    145             $options["defaultMapTypeId"], 
    146             $options["defaultZoomLevel"], 
    147             "Search for company or address", // 9 
    148             $this->get_options_name("formatted_address"), // 10 
    149             esc_attr($formatted_address), 
    150             $this->get_options_name("address_components"), // 12 
    151             esc_attr($address_components), 
    152             $this->get_options_name("name"), // 14 
    153             esc_attr($name), 
    154             "(remove)", // 16 
    155             "Add marker/location", // 17 
    156             $lat_init_pos, // 18 
    157             $lng_init_pos  // 19 
    158         ); 
    159          
    160         return $output; 
    161     } 
    162      
    163     /** 
    164      * When returning values, add some useful info like static maps 
    165      */ 
    166     function return_values($values, $options = NULL) { 
    167          
    168         // All these defaults can be overwritten by simple_fields_value 
    169         $defaults = array( 
    170             "static_maps_zoom"          => 16, 
    171             "static_maps_scale"         => 1, 
    172             "static_maps_maptype"       => "roadmap", // roadmap | satellite | terrain | hybrid 
    173             "static_maps_marker_show"   => TRUE, // https://developers.google.com/maps/documentation/staticmaps/#Markers 
    174             "static_maps_marker_size"   => "mid", 
    175             "static_maps_marker_color"  => "red" 
    176         ); 
    177         $options = wp_parse_args( $options, $defaults ); 
    178          
    179         // Add default sizes 
    180         $arr_sizes = array( 
    181             "thumbnail" => array( 
    182                 "width"  => get_option("thumbnail_size_w"), 
    183                 "height" => get_option("thumbnail_size_h") 
    184             ), 
    185             "medium" => array( 
    186                 "width"  => get_option("medium_size_w"), 
    187                 "height" => get_option("medium_size_h") 
    188             ), 
    189             "large" => array( 
    190                 "width"  => get_option("large_size_w"), 
    191                 "height" => get_option("large_size_h") 
    192             )                
    193         ); 
    194          
    195         // Add custom sizes 
    196         global $_wp_additional_image_sizes; 
    197         foreach ($_wp_additional_image_sizes as $size_key => $size_vals) {  
    198             $arr_sizes[$size_key] = array( 
    199                 "width"     => $size_vals["width"], 
    200                 "height"    => $size_vals["height"] 
    201             ); 
    202         } 
    203          
    204         // Generate the src for a static map for each map, for each image size 
    205         // https://developers.google.com/maps/documentation/staticmaps/ 
    206         $static_map_base = "http://maps.googleapis.com/maps/api/staticmap?sensor=false"; 
    207         foreach ($values as $key => $val) { 
    208             $arr_static_maps = array(); 
    209             foreach($arr_sizes as $size_key => $size_vals) { 
    210  
    211                 $markers = ""; 
    212                 if ($options["static_maps_marker_show"]) { 
    213                     $markers = ""; 
    214                     $markers .= "size:" . $options["static_maps_marker_size"]; 
    215                     $markers .= "|"; 
    216                     $markers .= "color:" . $options["static_maps_marker_color"]; 
    217                     $markers .= "|"; 
    218                     $markers .= $val["lat"] . "," . $val["lng"]; 
    219                 } 
    220  
    221                 $static_map = add_query_arg(array( 
    222                     "center"    => $val["lat"] . "," . $val["lng"], 
    223                     "zoom"      => $options["static_maps_zoom"], 
    224                     "size"      => $size_vals["width"] . "x" . $size_vals["height"], 
    225                     "scale"     => $options["static_maps_scale"], 
    226                     "maptype"   => $options["static_maps_maptype"], 
    227                     "markers"   => $markers 
    228                 ), $static_map_base); 
    229                  
    230                 $arr_static_maps[$size_key] = $static_map; 
    231                 // echo "<p>$size_key:<br><img src='$static_map'></p>"; 
    232  
    233             } 
    234  
    235             $values[$key]["static_maps"] = $arr_static_maps; 
    236  
    237             // If address_components exists, decode the json to array 
    238             if (isset($values[$key]["address_components"]) && $values[$key]["address_components"]) { 
    239                 $values[$key]["address_components"] = json_decode($values[$key]["address_components"]); 
    240             } 
    241  
    242  
    243         } 
    244                      
    245         return $values; 
    246          
    247     } 
    248  
    249 } // class 
Note: See TracChangeset for help on using the changeset viewer.