/**
  * Require site script
  */
 public static function requireSiteScript()
 {
     self::$printScripts = true;
     // As of WordPress 3.3 wp_enqueue_script() can be called mid-page (in the HTML body).
     // This will load the script in the footer.
     wp_enqueue_script('pronamic_google_maps_site');
 }
 /**
  * Render the widget
  *
  * @param array $arguments
  * @param array $instance
  */
 public function widget($arguments, $instance)
 {
     extract($arguments);
     $title = apply_filters('widget_title', $instance['title'], $instance, $this->id_base);
     echo $before_widget;
     if ($title) {
         echo $before_title . $title . $after_title;
     }
     $info = new Pronamic_Google_Maps_Info();
     $info->title = $instance['title'];
     $info->description = $instance['description'];
     $info->width = $instance['width'];
     $info->height = $instance['height'];
     $info->latitude = (double) $instance['latitude'];
     $info->longitude = (double) $instance['longitude'];
     $info->static = $instance['static'];
     $info->mapOptions->mapTypeId = $instance['map-type'];
     $info->mapOptions->zoom = (int) $instance['zoom'];
     if ($info->isDynamic()) {
         Pronamic_Google_Maps_Site::requireSiteScript();
     }
     echo Pronamic_Google_Maps_Maps::getMapHtml($info);
     echo $after_widget;
 }
 /**
  * Render an Google Maps for the current global post
  *
  * @param mixed $arguments
  */
 public static function render($arguments = array())
 {
     $defaults = array('width' => self::$defaultWidth, 'height' => self::$defaultHeight, 'static' => false, 'label' => null, 'color' => null, 'echo' => true, 'marker_options' => array(), 'map_options' => array());
     $arguments = wp_parse_args($arguments, $defaults);
     $options = Pronamic_Google_Maps_Maps::getOptions();
     $pgm = Pronamic_Google_Maps_Maps::getMetaData();
     $activeTypes = $options['active'];
     global $post;
     $active = isset($activeTypes[$post->post_type]) && $activeTypes[$post->post_type];
     if ($active && $pgm->active) {
         $info = new Pronamic_Google_Maps_Info();
         $info->title = $pgm->title;
         $info->description = $pgm->description;
         $info->latitude = $pgm->latitude;
         $info->longitude = $pgm->longitude;
         $info->width = $arguments['width'];
         $info->height = $arguments['height'];
         $info->static = filter_var($arguments['static'], FILTER_VALIDATE_BOOLEAN);
         $info->label = $arguments['label'];
         $info->color = $arguments['color'];
         // Marker options
         $marker_options = $arguments['marker_options'];
         $marker_options = apply_filters('pronamic_google_maps_marker_options', $marker_options);
         foreach ($marker_options as $key => $value) {
             $value = apply_filters('pronamic_google_maps_marker_options_' . $key, $value);
             $info->markerOptions->{$key} = $value;
         }
         // Map options
         $info->mapOptions->mapTypeId = $pgm->mapType;
         $info->mapOptions->zoom = $pgm->zoom;
         foreach ($arguments['map_options'] as $key => $value) {
             $value = apply_filters('pronamic_google_maps_map_options_' . $key, $value);
             $info->mapOptions->{$key} = $value;
         }
         $html = self::getMapHtml($info);
         if ($info->isDynamic()) {
             Pronamic_Google_Maps_Site::requireSiteScript();
         }
         if ($arguments['echo']) {
             echo $html;
         } else {
             return $html;
         }
     }
 }
 public static function render($q = array(), $arguments = array())
 {
     Pronamic_Google_Maps_Site::requireSiteScript();
     $defaults = array('width' => Pronamic_Google_Maps_Maps::$defaultWidth, 'height' => Pronamic_Google_Maps_Maps::$defaultHeight, 'latitude' => 0, 'longitude' => 0, 'zoom' => Pronamic_Google_Maps_Maps::MAP_ZOOM_DEFAULT, 'map_type_id' => Pronamic_Google_Maps_Maps::MAP_TYPE_DEFAULT, 'hide_list' => true, 'fit_bounds' => true, 'center_client_location' => false, 'marker_options' => array(), 'map_options' => array(), 'marker_cluster_options' => array(), 'echo' => true);
     $arguments = wp_parse_args($arguments, $defaults);
     if ($q instanceof WP_Query) {
         $query = $q;
     } else {
         $query = new WP_Query($q);
     }
     $options = new stdClass();
     $options->width = $arguments['width'];
     if (is_numeric($options->width)) {
         $options->width = '' . $options->width . 'px';
     }
     $options->height = $arguments['height'];
     if (is_numeric($options->height)) {
         $options->height = '' . $options->height . 'px';
     }
     $options->center = new stdClass();
     $options->center->latitude = $arguments['latitude'];
     $options->center->longitude = $arguments['longitude'];
     $options->hideList = $arguments['hide_list'];
     $options->fitBounds = filter_var($arguments['fit_bounds'], FILTER_VALIDATE_BOOLEAN);
     $options->centerClientLocation = $arguments['center_client_location'];
     // Map options
     $options->mapOptions = new stdClass();
     $options->mapOptions->mapTypeId = $arguments['map_type_id'];
     $options->mapOptions->zoom = $arguments['zoom'];
     foreach ($arguments['map_options'] as $key => $value) {
         $value = apply_filters('pronamic_google_maps_map_options_' . $key, $value);
         $options->mapOptions->{$key} = $value;
     }
     // Marker cluster options
     if (!empty($arguments['marker_clusterer_options'])) {
         wp_enqueue_script('google-maps-markerclustererplus');
         $options->markerClustererOptions = new stdClass();
         foreach ($arguments['marker_clusterer_options'] as $key => $value) {
             $value = apply_filters('pronamic_google_maps_marker_clusterer_options_' . $key, $value);
             $options->markerClustererOptions->{$key} = $value;
         }
     }
     $options->markers = array();
     // HTML
     $items = '';
     while ($query->have_posts()) {
         $query->the_post();
         $pgm = Pronamic_Google_Maps_Maps::getMetaData();
         if ($pgm->active) {
             $description = sprintf('<a href="%s" title="%s" rel="bookmark">%s</a>', get_permalink(), sprintf(esc_attr__('Permalink to %s', 'pronamic_google_maps'), the_title_attribute('echo=0')), get_the_title());
             $description = apply_filters(Pronamic_Google_Maps_Filters::FILTER_MASHUP_ITEM, $description);
             $info = new Pronamic_Google_Maps_Info();
             $info->title = $pgm->title;
             $info->description = $pgm->description;
             $info->latitude = $pgm->latitude;
             $info->longitude = $pgm->longitude;
             $info->markerOptions = new stdClass();
             // Marker options
             $marker_options = $arguments['marker_options'];
             $marker_options = apply_filters('pronamic_google_maps_marker_options', $marker_options);
             foreach ($marker_options as $key => $value) {
                 $value = apply_filters('pronamic_google_maps_marker_options_' . $key, $value);
                 $info->markerOptions->{$key} = $value;
             }
             $marker = new stdClass();
             $marker->options = $info->markerOptions;
             $marker->lat = $pgm->latitude;
             $marker->lng = $pgm->longitude;
             $marker->title = $pgm->title;
             $marker->description = $description;
             $marker->post_id = get_the_ID();
             $options->markers[] = $marker;
             $items .= '<li>';
             $items .= sprintf('<input type="hidden" name="pgm-info" value="%s" />', esc_attr(json_encode($info)));
             $item = sprintf('<a href="%s" title="%s" rel="bookmark">%s</a>', get_permalink(), sprintf(esc_attr__('Permalink to %s', 'pronamic_google_maps'), the_title_attribute('echo=0')), get_the_title());
             $items .= apply_filters(Pronamic_Google_Maps_Filters::FILTER_MASHUP_ITEM, $item);
             $items .= '</li>';
         }
     }
     wp_reset_postdata();
     $content = '<div class="pgmm">';
     $content .= sprintf('<input type="hidden" name="pgmm-info" value="%s" />', esc_attr(json_encode($options)));
     $content .= sprintf('<div class="canvas" style="width: %s; height: %s;">', $options->width, $options->height);
     $content .= sprintf('</div>');
     if (!empty($items)) {
         $content .= '<noscript>';
         $content .= '<ul>';
         $content .= $items;
         $content .= '</ul>';
         $content .= '</noscript>';
     }
     $content .= '</div>';
     if ($arguments['echo']) {
         echo $content;
     } else {
         return $content;
     }
 }