/** * Make sure the map style shortcode attributes are valid. * * The values are send to wp_localize_script in add_frontend_scripts. * * @since 2.0.0 * @param array $atts The map style shortcode attributes * @return array $map_atts Validated map style shortcode attributes */ public function check_map_shortcode_atts($atts) { $map_atts = array(); if (isset($atts['width']) && is_numeric($atts['width'])) { $width = 'width:' . $atts['width'] . 'px;'; } else { $width = ''; } if (isset($atts['height']) && is_numeric($atts['height'])) { $height = 'height:' . $atts['height'] . 'px;'; } else { $height = ''; } if ($width || $height) { $map_atts['css'] = '#wpsl-base-gmap_' . self::$map_count . ' {' . $width . $height . '}'; } if (isset($atts['zoom']) && !empty($atts['zoom'])) { $map_atts['zoomLevel'] = wpsl_valid_zoom_level($atts['zoom']); } if (isset($atts['map_type']) && !empty($atts['map_type'])) { $map_atts['mapType'] = wpsl_valid_map_type($atts['map_type']); } if (isset($atts['map_type_control'])) { $map_atts['mapTypeControl'] = $this->shortcode_atts_boolean($atts['map_type_control']); } if (isset($atts['map_style']) && $atts['map_style'] == 'default') { $map_atts['mapStyle'] = ''; } if (isset($atts['street_view'])) { $map_atts['streetView'] = $this->shortcode_atts_boolean($atts['street_view']); } if (isset($atts['scrollwheel'])) { $map_atts['scrollWheel'] = $this->shortcode_atts_boolean($atts['scrollwheel']); } if (isset($atts['control_position']) && !empty($atts['control_position']) && ($atts['control_position'] == 'left' || $atts['control_position'] == 'right')) { $map_atts['controlPosition'] = $atts['control_position']; } return $map_atts; }
/** * Sanitize the submitted plugin settings. * * @since 1.0.0 * @return array $output The setting values */ public function sanitize_settings() { global $wpsl_settings, $wpsl_admin; $ux_absints = array('height', 'infowindow_width', 'search_width', 'label_width'); $marker_effects = array('bounce', 'info_window', 'ignore'); $ux_checkboxes = array('new_window', 'reset_map', 'listing_below_no_scroll', 'direction_redirect', 'more_info', 'store_url', 'phone_url', 'marker_streetview', 'marker_zoom_to', 'mouse_focus', 'reset_map', 'hide_distance'); $output['api_key'] = sanitize_text_field($_POST['wpsl_api']['key']); $output['api_language'] = wp_filter_nohtml_kses($_POST['wpsl_api']['language']); $output['api_region'] = wp_filter_nohtml_kses($_POST['wpsl_api']['region']); // Do we need to show the dropdown filters? $output['results_dropdown'] = isset($_POST['wpsl_search']['results_dropdown']) ? 1 : 0; $output['radius_dropdown'] = isset($_POST['wpsl_search']['radius_dropdown']) ? 1 : 0; $output['category_dropdown'] = isset($_POST['wpsl_search']['category_dropdown']) ? 1 : 0; $output['distance_unit'] = $_POST['wpsl_search']['distance_unit'] == 'km' ? 'km' : 'mi'; // Check for a valid max results value, otherwise we use the default. if (!empty($_POST['wpsl_search']['max_results'])) { $output['max_results'] = sanitize_text_field($_POST['wpsl_search']['max_results']); } else { $this->settings_error('max_results'); $output['max_results'] = wpsl_get_default_setting('max_results'); } // See if a search radius value exist, otherwise we use the default. if (!empty($_POST['wpsl_search']['radius'])) { $output['search_radius'] = sanitize_text_field($_POST['wpsl_search']['radius']); } else { $this->settings_error('search_radius'); $output['search_radius'] = wpsl_get_default_setting('search_radius'); } // Check if we have a valid zoom level, it has to be between 1 or 12. If not set it to the default of 3. $output['zoom_level'] = wpsl_valid_zoom_level($_POST['wpsl_map']['zoom_level']); $output['zoom_name'] = sanitize_text_field($_POST['wpsl_map']['zoom_name']); // Check for a valid max auto zoom level. $max_zoom_levels = wpsl_get_max_zoom_levels(); if (in_array(absint($_POST['wpsl_map']['max_auto_zoom']), $max_zoom_levels)) { $output['auto_zoom_level'] = $_POST['wpsl_map']['max_auto_zoom']; } else { $output['auto_zoom_level'] = wpsl_get_default_setting('auto_zoom_level'); } // If no location name is set to zoom to we also empty the latlng values from the hidden input field. if (empty($output['zoom_name'])) { $this->settings_error('start_point'); $output['zoom_latlng'] = ''; } else { $output['zoom_latlng'] = sanitize_text_field($_POST['wpsl_map']['zoom_latlng']); } // Check if we have a valid map type. $output['map_type'] = wpsl_valid_map_type($_POST['wpsl_map']['type']); $output['auto_locate'] = isset($_POST['wpsl_map']['auto_locate']) ? 1 : 0; $output['autoload'] = isset($_POST['wpsl_map']['autoload']) ? 1 : 0; // Make sure the auto load limit is either empty or an int. if (empty($_POST['wpsl_map']['autoload_limit'])) { $output['autoload_limit'] = ''; } else { $output['autoload_limit'] = absint($_POST['wpsl_map']['autoload_limit']); } $output['streetview'] = isset($_POST['wpsl_map']['streetview']) ? 1 : 0; $output['type_control'] = isset($_POST['wpsl_map']['type_control']) ? 1 : 0; $output['scrollwheel'] = isset($_POST['wpsl_map']['scrollwheel']) ? 1 : 0; $output['control_position'] = $_POST['wpsl_map']['control_position'] == 'left' ? 'left' : 'right'; $output['map_style'] = json_encode(strip_tags(trim($_POST['wpsl_map']['map_style']))); // Make sure we have a valid template ID. if (isset($_POST['wpsl_ux']['template_id']) && $_POST['wpsl_ux']['template_id']) { $output['template_id'] = sanitize_text_field($_POST['wpsl_ux']['template_id']); } else { $output['template_id'] = wpsl_get_default_setting('template_id'); } $output['marker_clusters'] = isset($_POST['wpsl_map']['marker_clusters']) ? 1 : 0; // Check for a valid cluster zoom value. if (in_array($_POST['wpsl_map']['cluster_zoom'], $this->get_default_cluster_option('cluster_zoom'))) { $output['cluster_zoom'] = $_POST['wpsl_map']['cluster_zoom']; } else { $output['cluster_zoom'] = wpsl_get_default_setting('cluster_zoom'); } // Check for a valid cluster size value. if (in_array($_POST['wpsl_map']['cluster_size'], $this->get_default_cluster_option('cluster_size'))) { $output['cluster_size'] = $_POST['wpsl_map']['cluster_size']; } else { $output['cluster_size'] = wpsl_get_default_setting('cluster_size'); } /* * Make sure all the ux related fields that should contain an int, actually are an int. * Otherwise we use the default value. */ foreach ($ux_absints as $ux_key) { if (absint($_POST['wpsl_ux'][$ux_key])) { $output[$ux_key] = $_POST['wpsl_ux'][$ux_key]; } else { $output[$ux_key] = wpsl_get_default_setting($ux_key); } } // Check if the ux checkboxes are checked. foreach ($ux_checkboxes as $ux_key) { $output[$ux_key] = isset($_POST['wpsl_ux'][$ux_key]) ? 1 : 0; } // Check if we have a valid marker effect. if (in_array($_POST['wpsl_ux']['marker_effect'], $marker_effects)) { $output['marker_effect'] = $_POST['wpsl_ux']['marker_effect']; } else { $output['marker_effect'] = wpsl_get_default_setting('marker_effect'); } // Check if we have a valid address format. if (array_key_exists($_POST['wpsl_ux']['address_format'], wpsl_get_address_formats())) { $output['address_format'] = $_POST['wpsl_ux']['address_format']; } else { $output['address_format'] = wpsl_get_default_setting('address_format'); } $output['more_info_location'] = $_POST['wpsl_ux']['more_info_location'] == 'store listings' ? 'store listings' : 'info window'; $output['infowindow_style'] = isset($_POST['wpsl_ux']['infowindow_style']) ? 'default' : 'infobox'; $output['start_marker'] = wp_filter_nohtml_kses($_POST['wpsl_map']['start_marker']); $output['store_marker'] = wp_filter_nohtml_kses($_POST['wpsl_map']['store_marker']); $output['editor_country'] = sanitize_text_field($_POST['wpsl_editor']['default_country']); $output['editor_map_type'] = wpsl_valid_map_type($_POST['wpsl_editor']['map_type']); $output['hide_hours'] = isset($_POST['wpsl_editor']['hide_hours']) ? 1 : 0; if (isset($_POST['wpsl_editor']['hour_input'])) { $output['editor_hour_input'] = $_POST['wpsl_editor']['hour_input'] == 'textarea' ? 'textarea' : 'dropdown'; } else { $output['editor_hour_input'] = 'dropdown'; } $output['editor_hour_format'] = $_POST['wpsl_editor']['hour_format'] == 12 ? 12 : 24; // The default opening hours. if (isset($_POST['wpsl_editor']['textarea'])) { $output['editor_hours']['textarea'] = wp_kses_post(trim(stripslashes($_POST['wpsl_editor']['textarea']))); } $output['editor_hours']['dropdown'] = $wpsl_admin->metaboxes->format_opening_hours(); array_walk_recursive($output['editor_hours']['dropdown'], 'wpsl_sanitize_multi_array'); // Permalink and taxonomy slug. $output['permalinks'] = isset($_POST['wpsl_permalinks']['active']) ? 1 : 0; if (!empty($_POST['wpsl_permalinks']['slug'])) { $output['permalink_slug'] = sanitize_text_field($_POST['wpsl_permalinks']['slug']); } else { $output['permalink_slug'] = wpsl_get_default_setting('permalink_slug'); } if (!empty($_POST['wpsl_permalinks']['category_slug'])) { $output['category_slug'] = sanitize_text_field($_POST['wpsl_permalinks']['category_slug']); } else { $output['category_slug'] = wpsl_get_default_setting('category_slug'); } $required_labels = wpsl_labels(); // Sanitize the labels. foreach ($required_labels as $label) { $output[$label . '_label'] = sanitize_text_field($_POST['wpsl_label'][$label]); } $output['show_credits'] = isset($_POST['wpsl_credits']) ? 1 : 0; $output['debug'] = isset($_POST['wpsl_tools']['debug']) ? 1 : 0; // Check if we need to flush the permalinks. $this->set_flush_rewrite_option($output); // Check if there is a reason to delete the autoload transient. if ($wpsl_settings['autoload']) { $this->set_delete_transient_option($output); } return $output; }