File "app.php"
Full Path: /home/aiclgcwq/photonindustriespvt.com/wp-content/plugins/agile-store-locator/includes/frontend/app.php
File size: 62.59 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace AgileStoreLocator\Frontend;
if (!defined('ABSPATH')) {
exit; // Exit if accessed directly.
}
/**
* The public-facing functionality of the plugin.
*
* Defines the plugin name, version, and two examples hooks for how to
* enqueue the admin-specific stylesheet and JavaScript.
*
* @package AgileStoreLocator
* @subpackage AgileStoreLocator/Frontend
* @author AgileLogix <support@agilelogix.com>
*/
class App
{
/**
* The ID of this plugin.
*
* @since 1.0.0
* @access private
* @var string $AgileStoreLocator The ID of this plugin.
*/
private $AgileStoreLocator;
/**
* The version of this plugin.
*
* @since 1.0.0
* @access private
* @var string $version The current version of this plugin.
*/
private $version;
/**
* [$script_name defines script to include]
* @var [type]
*/
private $script_name;
/**
* [$single_run It will ensure that the instance is executed only one time]
* @var [type]
*/
private $single_run;
/**
* [$scripts_data load the scripts]
* @var array
*/
private $scripts_data = [];
/**
* Initialize the class and set its properties.
*
* @since 1.0.0
* @param string $AgileStoreLocator The name of the plugin.
* @param string $version The version of this plugin.
*/
public function __construct($AgileStoreLocator, $version)
{
$this->AgileStoreLocator = $AgileStoreLocator;
$this->version = function_exists('wp_get_environment_type') && wp_get_environment_type() == 'development' ? time() : $version;
$this->script_name = '';
}
/**
* [register_styles Load the very basic style]
* @return [type] [description]
*/
public function register_styles()
{
wp_enqueue_style($this->AgileStoreLocator . '-init', ASL_URL_PATH . 'public/css/init.css', [], $this->version, 'all');
}
/**
* [get_public_config Get the configuration in key/list form]
* @return [type] [description]
*/
private function get_public_config()
{
global $wpdb;
// Fetch All Configs
$configs = $wpdb->get_results('SELECT * FROM ' . ASL_PREFIX . "configs WHERE (`key` NOT IN ('server_key', 'notify_email') OR `key` IS NULL) AND (`type` NOT IN ('label', 'priv') OR `type` IS NULL);");
$all_configs = [];
foreach ($configs as $_config) {
$all_configs[$_config->key] = $_config->value;
}
return $all_configs;
}
/**
* [register_scripts Register all the scripts]
* @return [type] [description]
*/
public function register_scripts()
{
// ASL libraries
wp_register_script($this->AgileStoreLocator . '-lib', ASL_URL_PATH . 'public/js/asl_libs.min.js', ['jquery'], $this->version, true);
// New cluster library
wp_register_script($this->AgileStoreLocator . '-cluster', ASL_URL_PATH . 'public/js/asl_cluster.min.js', ['jquery', $this->AgileStoreLocator . '-lib'], $this->version, true);
// Default Script
wp_register_script($this->AgileStoreLocator . '-script', ASL_URL_PATH . 'public/js/site_script.js', ['jquery'], $this->version, true);
// Store Detail page
wp_register_script($this->AgileStoreLocator . '-tmpl-detail', ASL_URL_PATH . 'public/js/sl_detail.js', ['jquery'], $this->version, true);
// Cards
wp_register_script($this->AgileStoreLocator . '-cards', ASL_URL_PATH . 'public/js/asl-cards.js', ['jquery'], $this->version, true);
// Sviper Slider
wp_register_script($this->AgileStoreLocator . '-sviper', ASL_URL_PATH . 'public/js/sviper.js', ['jquery'], $this->version, true);
// Match Height
wp_register_script($this->AgileStoreLocator . '-match-height', ASL_URL_PATH . 'public/js/jquery.match-height-min.js', ['jquery'], $this->version, true);
}
/**
* [register_google_maps Register the Google Maps]
* @return [type] [description]
*/
public function register_google_maps($atts = [])
{
global $wpdb;
// Query the database for the required configurations
$sql = 'SELECT `key`,`value` FROM ' . ASL_PREFIX . "configs WHERE `key` IN ('api_key', 'map_language', 'map_region', 'advanced_marker') ORDER BY id ASC;";
$results = $wpdb->get_results($sql);
// Convert the results into an associative array using the 'key' as the array key
$configs = [];
foreach ($results as $result) {
$configs[$result->key] = $result->value;
}
$map_url = '//maps.googleapis.com/maps/api/js?libraries=places,drawing';
// Advanced Markers
if ((isset($atts['advanced_marker']) && $atts['advanced_marker'] == '1') || !empty($configs['advanced_marker'])) {
$map_url .= ',marker';
}
// Set the API Key
if (!empty($configs['api_key'])) {
$api_key = $configs['api_key'];
// Allow programmatic modification of the API key
$api_key = apply_filters('asl_filter_api_key', $api_key);
$map_url .= '&key=' . $api_key;
}
// Since version 4.10.6, conflict with Borlabs 3
if (!(defined('BORLABS_COOKIE_VERSION') && version_compare(BORLABS_COOKIE_VERSION, '3', '>'))) {
}
// Since version 1.5
//$map_url .= '&loading=async';
// Add the callback function
$map_cb_func = isset($atts['lib_callback']) ? $atts['lib_callback'] : 'asl_init_map'; //asl_init_map,asl_init_locator,asl_init_callback
$map_url .= '&callback=' . $map_cb_func;
// Set the map language
$map_language = isset($atts['map_language']) ? $atts['map_language'] : (!empty($configs['map_language']) ? $configs['map_language'] : null);
if ($map_language) {
$map_url .= '&language=' . $map_language;
}
// Set the map region
$map_region = isset($atts['map_region']) ? $atts['map_region'] : (!empty($configs['map_region']) ? $configs['map_region'] : null);
if ($map_region) {
$map_url .= '®ion=' . $map_region;
}
// Register the Google Maps script
wp_register_script('asl_google_maps', $map_url, ['jquery'], null, true);
// Enqueue the Google Maps script
wp_enqueue_script('asl_google_maps');
$this->initBorlabsCookies();
}
/**
* Enqueue the Store Locator Scripts
*
* @since 1.0.0
*/
public function enqueue_scripts($type = '', $atts = [])
{
// Register Before Enqueue
$this->register_scripts();
// enqueue the libs
//if ($type != 'wc') {wp_enqueue_script($this->AgileStoreLocator.'-lib');}
// Run always
wp_enqueue_script($this->AgileStoreLocator . '-lib');
$this->register_google_maps($atts);
// We only want the Google Maps
if ($type == 'wc') {
return;
}
switch ($type) {
case 'detail':
wp_enqueue_script($this->AgileStoreLocator . '-tmpl-detail');
break;
case 'cards':
wp_enqueue_script($this->AgileStoreLocator . '-sviper');
wp_enqueue_script($this->AgileStoreLocator . '-match-height');
wp_enqueue_script($this->AgileStoreLocator . '-cards');
break;
default:
wp_enqueue_script($this->AgileStoreLocator . '-script');
// wp_enqueue_script( $this->AgileStoreLocator.'-sviper');
break;
}
}
/**
* Register the stylesheets for the public-facing side of the site.
*
* @since 1.0.0
*/
public function enqueue_styles($template = '')
{
$media = 'all'; //screen, all
switch ($template) {
case 'page':
// Icons
wp_enqueue_style($this->AgileStoreLocator . '-sl-icons', ASL_URL_PATH . 'public/css/icons/fontello.css', [], $this->version, $media);
// Bootstrap
wp_enqueue_style($this->AgileStoreLocator . '-sl-bootstrap', ASL_URL_PATH . 'public/css/sl-bootstrap.css', [], $this->version, $media);
// Add the CSS for the Template 3
wp_enqueue_style($this->AgileStoreLocator . '-page', ASL_URL_PATH . 'public/css/store-page.css', [], $this->version, $media);
break;
case 'cards':
// Icons
wp_enqueue_style($this->AgileStoreLocator . '-sl-icons', ASL_URL_PATH . 'public/css/icons/fontello.css', [], $this->version, $media);
// Bootstrap
wp_enqueue_style($this->AgileStoreLocator . '-sl-bootstrap', ASL_URL_PATH . 'public/css/sl-bootstrap.css', [], $this->version, $media);
// Bootstrap
wp_enqueue_style($this->AgileStoreLocator . '-sl-cards', ASL_URL_PATH . 'public/css/cards/cards.css', [], $this->version, $media);
break;
default:
// Icons
wp_enqueue_style($this->AgileStoreLocator . '-sl-icons', ASL_URL_PATH . 'public/css/icons/fontello.css', [], $this->version, $media);
// Bootstrap
wp_enqueue_style($this->AgileStoreLocator . '-sl-bootstrap', ASL_URL_PATH . 'public/css/sl-bootstrap.css', [], $this->version, $media);
// Add the CSS for the Template 0
wp_enqueue_style($this->AgileStoreLocator . '-tmpl-0', ASL_URL_PATH . 'public/css/tmpl-0/tmpl-0.css', [], $this->version, $media);
//wp_enqueue_style( $this->AgileStoreLocator.'-list', 'http://192.168.100.6:8080/main.scss/custom.css', array(), $this->version, $media );
break;
}
}
/**
* [initBorlabsCookies use Borlabs Cookies if plugin is installed]
* @return [type] [description]
*/
public function initBorlabsCookies()
{
if (function_exists('BorlabsCookieHelper')) {
$borlabs = new \AgileStoreLocator\Vendors\Borlabs();
$borlabs->initialize();
}
}
/**
* [head_content Store Page]
* @param [type] $atts [description]
* @return [type] [description]
*/
public function head_content($content)
{
echo $content;
}
/**
* [storePage Store Page]
* @param [type] $atts [description]
* @return [type] [description]
*/
public function storePage($atts)
{
global $wpdb;
$this->enqueue_styles('page');
if (!$atts) {
$atts = [];
}
/////////////////////////
/// Store Id Attribute //
/////////////////////////
// Try to get from the attributes
$where_clause = 's.`id` = %d';
$q_param = null;
// Get value by attribute
$q_param = isset($atts['sl-store']) ? intval($atts['sl-store']) : null;
// Get value by the $_GET
if (!$q_param) {
$q_param = (isset($_GET['sl-store']) && $_GET['sl-store']) ? $_GET['sl-store'] : null;
}
// Check for the slug when store id is missing
if (!$q_param) {
// For the Slug
$q_param = get_query_var('sl-store');
if ($q_param) {
// Clear the Slug for SQL injection
//$q_param = strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', $q_param), '-'));
$q_param = sanitize_title($q_param);
$q_param = preg_replace('/-+/', '-', $q_param);
$where_clause = 's.`slug` = %s';
}
}
if ($q_param) {
$ASL_PREFIX = ASL_PREFIX;
// ddl_fields in the query
$ddl_fields_str = \AgileStoreLocator\Model\Attribute::sql_query_fields();
// Run the main query
$query = "SELECT s.`id`, `title`, `description`, `street`, `city`, `state`, `postal_code`, `country`, `lat`,`lng`,`phone`, `fax`,`email`,`website`,`logo_id`,{$ASL_PREFIX}storelogos.`path`,`marker_id`,`description_2`,`open_hours`, `ordr`,$ddl_fields_str, `custom`,
group_concat(category_id) as categories, lang FROM {$ASL_PREFIX}stores as s
LEFT JOIN {$ASL_PREFIX}storelogos ON logo_id = {$ASL_PREFIX}storelogos.id
LEFT JOIN {$ASL_PREFIX}stores_categories ON s.`id` = {$ASL_PREFIX}stores_categories.store_id
WHERE {$where_clause}";
$results = $wpdb->get_results($wpdb->prepare($query, [$q_param]));
// Only for the correct record
if ($results && isset($results[0]) && $results[0]->id) {
// Template file
$template_file = 'asl-store-page.php';
// Clean the store
$store_data = \AgileStoreLocator\Helper::sanitize_store($results[0]);
// Get the Country
$country = $wpdb->get_results('SELECT country FROM ' . ASL_PREFIX . 'countries WHERE id = ' . $store_data->country);
$store_data->country = ($country && isset($country[0])) ? esc_attr__($country[0]->country, 'asl_locator') : '';
// Custom Field
if (isset($store_data->custom) && $store_data->custom) {
$custom_fields = json_decode($store_data->custom, true);
if ($custom_fields && is_array($custom_fields) && count($custom_fields) > 0) {
foreach ($custom_fields as $custom_key => $custom_value) {
$store_data->$custom_key = str_replace("\n", '<br>', esc_attr($custom_value));
}
}
}
$store_data->description = wpautop($store_data->description);
$store_data->description_2 = wpautop($store_data->description_2);
// Make the address
$locality = trim(implode(', ', array_filter([$store_data->city, $store_data->state, $store_data->postal_code, $store_data->country])), ', ');
$address = [$store_data->street, $locality];
$store_data->address = (trim(implode(', ', $address)));
// All the configuration
$all_configs = \AgileStoreLocator\Helper::get_configs(['store_schema', 'zoom', 'map_layout', 'week_hours', 'hide_hours', 'gdpr']);
// To display only one parameter
if (isset($atts['field'])) {
$display_column = $atts['field'];
// Return as field
if ($display_column == 'categories') {
// filter the numbers
$categories = \AgileStoreLocator\Model\Category::get_categories($store_data->lang, 'category_name', $store_data->categories);
$store_categories = [];
if ($categories) {
foreach ($categories as $b) {
$store_categories[] = esc_attr($b->category_name);
}
}
return implode(', ', $store_categories);
}
// render the open hours
if ($display_column == 'open_hours') {
// Show the closed or not?
$show_close_label = (isset($atts['closed_label']) && $atts['closed_label'] == '1') ? true : false;
// Open hours
$store_data->open_hours = \AgileStoreLocator\Helper::openHours($store_data, $all_configs['week_hours'], $show_close_label);
}
// Return the map only
if ($display_column == 'map') {
$all_configs = $this->_prepare_detail_configs($all_configs, $store_data, $atts);
$map_html = '
<section class="asl-cont asl-store-pg" data-config=\'' . wp_json_encode($all_configs) . '\'>
<div class="sl-container">
<div class="sl-row">
<div class="pol-lg-12">
<div class="asl-detail-map"></div>
</div>
</div>
</div>
</section>
';
//Load the Scripts
$this->enqueue_scripts('detail', $atts);
return $map_html;
}
if (isset($store_data->$display_column)) {
return $store_data->$display_column;
}
}
//Load the Scripts
$this->enqueue_scripts('detail', $atts);
////////////////////
///Get Categories //
////////////////////
$store_categories = null;
if (isset($store_data->categories) && $store_data->categories) {
// filter the numbers
$categories = \AgileStoreLocator\Model\Category::get_categories($store_data->lang, 'category_name', $store_data->categories);
if ($categories) {
foreach ($categories as $b) {
$store_categories[] = esc_attr($b->category_name);
}
// Fill the categories for Schema
$store_data->all_categories = $store_categories;
// Keep the full instance
$store_data->categories = $categories;
}
}
/////////////////////////////
///Get the Attribute Names //
/////////////////////////////
// Open hours
$store_data->hours = $store_data->open_hours;
// Map will appear or not?
$store_data->map = (isset($atts['map']) && $atts['map'] == '0') ? false : true;
// Show the closed or not?
$show_close_label = (isset($atts['closed_label']) && $atts['closed_label'] == '1') ? true : false;
// Open hours
$store_data->open_hours = ($all_configs['hide_hours'] != '1') ? \AgileStoreLocator\Helper::openHours($store_data, $all_configs['week_hours'], $show_close_label) : '';
// When we have a map!
if ($store_data->map) {
$all_configs = $this->_prepare_detail_configs($all_configs, $store_data, $atts);
} else {
unset($all_configs['zoom'], $all_configs['map_layout'], $all_configs['week_hours'], $all_configs['URL'], $all_configs['PLUGIN_URL']);
}
// apply filter to make the store detail accessible
$store_data = apply_filters('asl_filter_store_detail', $store_data);
// Generate the Google Schema
$google_schema = ($all_configs['store_schema'] == '1') ? \AgileStoreLocator\Helper::googleSchema($store_data) : '';
ob_start();
// Check for Local Version
if ($template_file) {
if ($theme_file = locate_template([$template_file])) {
$template_path = $theme_file;
} else {
$template_path = ASL_PLUGIN_PATH . 'public/partials/' . $template_file;
}
include $template_path;
}
$sl_output = ob_get_contents();
ob_end_clean();
return $sl_output;
}
}
return '';
}
/**
* [_prepare_detail_configs Prepare the config of the store detail]
* @param [type] $all_configs [description]
* @param [type] $store_data [description]
* @param [type] $atts [description]
* @return [type] [description]
*/
private function _prepare_detail_configs($all_configs, $store_data, $atts)
{
// Set default latitude and longitude based on store data
$all_configs['default_lat'] = $store_data->lat;
$all_configs['default_lng'] = $store_data->lng;
// Merge the provided attributes with the current configurations
$all_configs = shortcode_atts($all_configs, $atts);
// Add the missing attributes into settings
$all_configs = array_merge($all_configs, $atts);
// Filter and escape all the attribute values
foreach ($all_configs as $config_key => $config_value) {
$all_configs[$config_key] = esc_attr($config_value);
}
// Get the JSON for the Map layout and other configurations
$all_configs['map_layout'] = $this->_map_layout($all_configs['map_layout']);
$all_configs['icon'] = \AgileStoreLocator\Helper::getMarkerPath($store_data->marker_id);
$all_configs['URL'] = ASL_UPLOAD_URL;
$all_configs['PLUGIN_URL'] = ASL_URL_PATH;
$all_configs['store_title'] = $store_data->title;
return $all_configs;
}
/**
* [storeCards Render the Store Cards]
* @param [type] $attrs [description]
* @return [type] [description]
*/
public function storeCards($atts)
{
// Enqueue the CSS of it
$this->script_name = '-cards';
//Load the Scripts
$this->enqueue_scripts('cards');
//Load the Style
$this->enqueue_styles('cards');
if (!$atts) {
$atts = [];
}
// Add Sviper Script if slider attribute is enabled
$slider_enabled = false;
if (isset($atts['slider']) && $atts['slider']) {
$slider_enabled = true;
}
// Limit of the Grid
$limit = isset($atts['limit']) ? intval($atts['limit']) : 10;
$offset = isset($atts['offset']) ? intval($atts['offset']) : 0;
$hide_fields = isset($atts['hide_fields']) ? esc_attr($atts['hide_fields']) : '';
$hide_fields = explode(',', $hide_fields);
if (isset($atts['cities'])) {
$atts['city'] = $atts['cities'];
}
// Get the stores
$stores = \AgileStoreLocator\Model\Store::get_stores($atts, $limit, $offset, null, false);
// Grid Template file
$template_file = isset($atts['template']) ? "asl-cards-{$atts['template']}.php" : 'asl-cards-template-01.php';
// Get the config
$all_configs = \AgileStoreLocator\Helper::get_configs(['rewrite_slug', 'week_hours']);
if (isset($all_configs['rewrite_slug']) && $all_configs['rewrite_slug']) {
$all_configs['rewrite_slug'] = apply_filters('wpml_home_url', home_url('/')) . '/' . $all_configs['rewrite_slug'];
// replace the double slash
$all_configs['rewrite_slug'] = preg_replace('#(?<!:)/+#im', '/', $all_configs['rewrite_slug']);
}
$all_configs['URL'] = ASL_UPLOAD_URL;
$all_configs['PLUGIN_URL'] = ASL_URL_PATH;
// Check for Local Version
if ($template_file) {
if ($theme_file = locate_template([$template_file])) {
$template_path = $theme_file;
} else {
$template_path = ASL_PLUGIN_PATH . 'public/partials/' . $template_file;
}
$sl_output = '<section class="asl-cont asl-store-grid sl-opacity-1">
<div class="sl-container">
<div class="sl-row">';
// Add the loop to the stores
foreach ($stores as $store_data) {
// Make Address
$locality = trim(implode(', ', array_filter([$store_data->city, $store_data->state, $store_data->postal_code, $store_data->country])), ', ');
$address = [$store_data->street, $locality];
$custom = isset($store_data->custom) && $store_data->custom ? json_decode($store_data->custom) : [];
// Rating
if (isset($custom->rating) && json_last_error() === JSON_ERROR_NONE) {
$store_data->rating = $custom->rating;
}
// Complete Store Address
$store_data->address = (trim(implode(', ', $address)));
// URL of the page
$store_data->url = $all_configs['rewrite_slug'] . '/' . $store_data->slug;
$direction_path = urlencode($store_data->address);
// Direction via Coordinates
if (isset($atts['coords_direction'])) {
$direction_path = $store_data->lat . ',' . $store_data->lng;
$direction_path = urlencode(trim($direction_path));
}
// Direction URL
$store_data->direction = 'https://www.google.com/maps/dir/?api=1&destination=' . $direction_path;
// Hide the fields that are turned OFF
foreach ($hide_fields as $hide_field) {
// Hide the address
if ($hide_field == 'address') {
unset($store_data->address, $store_data->street, $store_data->city, $store_data->state, $store_data->postal_code);
} elseif ($hide_field == 'logo') {
unset($store_data->path);
} else {
unset($store_data->$hide_field);
}
}
$stores_filtered[] = $store_data;
}
ob_start();
include $template_path;
// get the stream
$sl_output .= ob_get_contents();
ob_end_clean();
// When there are no stores
if (count($stores) < 1) {
$sl_output .= '<p class="text-center w-100 alert-warning alert sl-grid-no-stores">' . esc_attr__('Sorry! there are no stores found!', 'asl_locator') . '</p>';
}
// Closing div
$sl_output .= '</div></div></section>';
}
return $sl_output;
}
/**
* [frontendStoreLocator Frontend of Plugin]
* @param [type] $atts [description]
* @return [type] [description]
*/
public function frontendStoreLocator($atts)
{
global $wpdb, $post;
// instance can run only one time
if ($this->single_run) {
//return '<p><b>Store Locator instance is already loaded and running on the page, only one instance of store locator can be added on a single page.</b></p>';
}
// first instance executed
$this->single_run = true;
$all_configs = $this->get_public_config();
// The Upload Directory
$all_configs['URL'] = ASL_UPLOAD_URL;
$all_configs['PLUGIN_URL'] = ASL_URL_PATH;
$all_configs['site_lang'] = get_locale();
// Language
$lang = (isset($all_configs['locale']) && $all_configs['locale'] == '1') ? get_locale() : '';
if (!$atts) {
$atts = [];
} else {
// apply filter to change the attributes
$atts = apply_filters('asl_filter_locator_attrs', $atts);
}
// Lang override by attribute
if (isset($atts['lang']) && strlen($atts['lang'] <= 13)) {
$lang = $atts['lang'];
}
// en_US is default
if ($lang == 'en' || $lang == 'en_US') {
$lang = '';
}
// Clean the language code
if ($lang) {
$lang = esc_sql($lang);
}
$lang_code = ($lang == '') ? 'en_US' : $lang;
// Merge the shortcodes
$all_configs = shortcode_atts($all_configs, $atts);
// Add the missing attributes into settings
$all_configs = array_merge($all_configs, $atts);
// Check the template to load
$all_configs['template'] = $template = '0';
// Language code in config, latest
if ($lang) {
$all_configs['lang'] = $lang_code;
}
// Check the template to load
$template = (isset($all_configs['template'])) ? $all_configs['template'] : '0';
// Load the secondary cluster library
if ($template != 'list' && $all_configs['cluster'] == '2') {
wp_enqueue_script($this->AgileStoreLocator . '-cluster');
}
//Load the Scripts
$this->enqueue_scripts($template, $atts);
// for the localization script
$this->script_name = ($template == '3' || $template == '4' || $template == 'list') ? '-tmpl-' . $template : '-script';
//Load the Style
$this->enqueue_styles($template);
// If the GDPR is enabled, dequeue the Google Maps
if (isset($all_configs['gdpr']) && $all_configs['gdpr'] != '0' && strpos($template, 'list') === false) {
// For the new Borlabs, Plugin GDPR will be disabled
if (defined('BORLABS_COOKIE_VERSION') && version_compare(BORLABS_COOKIE_VERSION, '3', '>') && $all_configs['gdpr'] == '2') {
$all_configs['gdpr'] = '0';
} else {
wp_deregister_script('asl_google_maps');
}
}
$category_clause = '';
// select category
if (isset($atts['select_category'])) {
$all_configs['select_category'] = $atts['select_category'];
}
////////////////////////////////////////
////////The Redirect Attribute Params //
////////////////////////////////////////
$filter_ddls = \AgileStoreLocator\Model\Attribute::get_fields();
// the category filter
$filter_ddls[] = 'category';
// the sub-category filter
$filter_ddls[] = 'sub_category';
foreach ($filter_ddls as $attr_key) {
$attr_name = 'sl-' . $attr_key;
if (isset($_GET[$attr_name]) && $_GET[$attr_name]) {
if (preg_match('/^[0-9,]+$/', $_GET[$attr_name])) {
$all_configs['select_' . $attr_key] = $_GET[$attr_name];
}
}
}
////////////////////////////
// Add the address filter //
////////////////////////////
$address_filters = ['state', 'city', 'postal_code'];
foreach ($address_filters as $addr_filter) {
if (isset($atts[$addr_filter]) && $atts[$addr_filter]) {
$all_configs[$addr_filter] = $atts[$addr_filter];
} elseif (isset($_GET['sl-' . $addr_filter]) && $_GET['sl-' . $addr_filter]) {
$all_configs[$addr_filter] = strip_tags($_GET['sl-' . $addr_filter]);
}
}
if (isset($_GET['sl-addr']) && $_GET['sl-addr']) {
//$all_configs['default-addr'] = \str_replace( strip_tags($_GET['sl-addr']), "\"", "");
$all_configs['default-addr'] = esc_attr($_GET['sl-addr']);
} elseif (isset($atts['sl-addr'])) {
$all_configs['default-addr'] = $atts['sl-addr'];
$all_configs['req_coords'] = true;
}
if (isset($_GET['lat']) && $_GET['lng']) {
$all_configs['default_lat'] = $_GET['lat'];
$all_configs['default_lng'] = $_GET['lng'];
}
// Get the Coordinates
elseif (isset($all_configs['default-addr']) && $all_configs['default-addr']) {
$all_configs['req_coords'] = true;
}
////////////////////////////////////////
////////The Redirect Attribute ENDING //
////////////////////////////////////////
// Only show Valid Categories
if (isset($atts['category'])) {
$all_configs['category'] = $atts['category'];
$load_categories = explode(',', $all_configs['category']);
$the_categories = [];
foreach ($load_categories as $_c) {
if (is_numeric($_c)) {
$the_categories[] = $_c;
}
}
$the_categories = implode(',', $the_categories);
$category_clause = ' AND id IN (' . $the_categories . ')';
$all_configs['category'] = $the_categories;
}
// Min and Max zoom
if (isset($atts['maxZoom']) || isset($atts['maxzoom'])) {
$all_configs['maxzoom'] = isset($atts['maxZoom']) ? $atts['maxZoom'] : $atts['maxzoom'];
}
if (isset($atts['minZoom']) || isset($atts['minzoom'])) {
$all_configs['minzoom'] = isset($atts['minZoom']) ? $atts['minZoom'] : $atts['minzoom'];
}
// For limited markers
if (isset($atts['stores'])) {
$all_configs['stores'] = $atts['stores'];
}
// Search 2, Template 0
if (!isset($atts['search_2'])) {
$all_configs['search_2'] = false;
}
// Mobile stores limit
if (isset($atts['mobile_stores_limit']) && is_numeric($atts['mobile_stores_limit'])) {
$all_configs['mobile_stores_limit'] = $atts['mobile_stores_limit'];
}
// For a fixed radius
if (isset($atts['fixed_radius']) && is_numeric($atts['fixed_radius'])) {
$all_configs['fixed_radius'] = $atts['fixed_radius'];
}
if (isset($all_configs['rewrite_slug']) && $all_configs['rewrite_slug']) {
$all_configs['rewrite_slug'] = apply_filters('wpml_home_url', home_url('/')) . '/' . $all_configs['rewrite_slug'];
// replace the double slash
$all_configs['rewrite_slug'] = preg_replace('#(?<!:)/+#im', '/', $all_configs['rewrite_slug']);
}
//ADD The missing parameters
$default_options = [
'debug' => '0',
'pickup' => '0',
'ship_from' => '0',
'cluster' => '1',
'prompt_location' => '2',
'map_type' => 'roadmap',
'distance_unit' => 'Miles',
'zoom' => '9',
'show_categories' => '1',
'additional_info' => '1',
'distance_slider' => '1',
'layout' => '0',
'default_lat' => '-33.947128',
'default_lng' => '25.591169',
'map_layout' => '0',
'infobox_layout' => '0',
'advance_filter' => '1',
'color_scheme' => '0',
'time_switch' => '0',
'category_marker' => '0',
'load_all' => '1',
'head_title' => 'Number Of Shops',
'font_color_scheme' => '1',
'template' => '0',
'color_scheme_1' => '0',
'api_key' => '',
'display_list' => '1',
'full_width' => '0',
'time_format' => '0',
'category_title' => 'Category',
'no_item_text' => 'No Item Found',
'zoom_li' => '13',
'single_cat_select' => '0',
'country_restrict' => '',
'google_search_type' => '',
'color_scheme_2' => '0',
'analytics' => '0',
'sort_by_bound' => '0',
'scroll_wheel' => '0',
'mobile_optimize' => null,
'mobile_load_bound' => null,
'search_type' => '0',
'search_destin' => '0',
'full_height' => '',
'map_language' => '',
'map_region' => '',
'sort_by' => '',
'distance_control' => '0',
'dropdown_range' => '20,40,60,80,*100',
'target_blank' => '1',
'fit_bound' => '1',
'info_y_offset' => '',
'cat_sort' => 'name_',
'direction_btn' => '1',
'print_btn' => '1',
'tabs_layout' => false,
'filter_ddl' => '',
'branches' => '0',
'store_schedule' => '0'
];
$all_configs = array_merge($default_options, $all_configs);
// 3 Labels Option
$all_configs['head_title'] = asl_esc_lbl('head_title');
$all_configs['category_title'] = asl_esc_lbl('category_title');
$all_configs['no_item_text'] = asl_esc_lbl('no_item_text');
if ($all_configs['sort_by'] == 'distance') {
$all_configs['sort_by'] = '';
}
if (isset($atts['user_center'])) {
$all_configs['user_center'] = $atts['user_center'];
}
// filter all the attribute values, escape values
foreach ($all_configs as $config_key => $config_value) {
$all_configs[$config_key] = esc_attr($config_value);
}
// KML Files
if (isset($atts['kml']) && $atts['kml'] == '1') {
// Get the KML files
$kml_files = \AgileStoreLocator\Helper::get_kml_files();
if ($kml_files && !empty($kml_files)) {
$all_configs['kml_files'] = $kml_files;
//$all_configs['kml_files'] = implode(',', $kml_files);
}
}
// Filter for the config
$all_configs = apply_filters('asl_filter_locator_config', $all_configs);
// Get the categories
list($all_categories, $has_child_categories) = \AgileStoreLocator\Model\Category::get_app_categories($lang, $category_clause);
// Has child categories or not?
$all_configs['has_child_categories'] = $has_child_categories;
////////////////////////
// Get the Attributes //
////////////////////////
$all_attributes = \AgileStoreLocator\Model\Attribute::get_all_attributes_list($lang, $atts);
// Must be an array
if (!$all_attributes || empty($all_attributes)) {
$all_attributes = [];
}
/////////////////////
// Get the Markers //
/////////////////////
$all_markers = [];
$results = $wpdb->get_results('SELECT id, marker_name as name,icon FROM ' . ASL_PREFIX . 'markers');
foreach ($results as $_result) {
$all_markers[$_result->id] = $_result;
}
// Get the active Marker
$active_marker = $wpdb->get_results('SELECT icon FROM ' . ASL_PREFIX . "markers WHERE marker_name = 'Active' ORDER BY id DESC LIMIT 1");
if ($active_marker && $active_marker[0]) {
$all_configs['active_marker'] = $active_marker[0]->icon;
}
// Override with shortcode
if (isset($atts['active_marker'])) {
$all_configs['active_marker'] = $atts['active_marker'];
}
// Get the JSON for the Map layout
$all_configs['map_layout'] = $this->_map_layout($all_configs['map_layout']);
//Load the map customization
$map_customize = $wpdb->get_results('SELECT content FROM ' . ASL_PREFIX . "settings WHERE type = 'map' AND id = 1");
$map_customize = ($map_customize && $map_customize[0]->content) ? $map_customize[0]->content : '[]';
//For Translation
$words = [
'label_country' => asl_esc_lbl('label_country'),
'label_state' => asl_esc_lbl('label_state'),
'label_city' => asl_esc_lbl('label_city'),
'ph_countries' => asl_esc_lbl('ph_countries'),
'ph_states' => asl_esc_lbl('ph_states'),
'ph_cities' => asl_esc_lbl('ph_cities'),
'pickup' => asl_esc_lbl('pickup'),
'ship_from' => asl_esc_lbl('ship_from'),
'direction' => asl_esc_lbl('direction'),
'zoom' => asl_esc_lbl('zoom_label'),
'detail' => asl_esc_lbl('website'),
'select_option' => asl_esc_lbl('select_option'),
'search' => asl_esc_lbl('search'),
'all_selected' => asl_esc_lbl('all_selected'),
'none' => asl_esc_lbl('none'),
'all_categories' => asl_esc_lbl('all_categories'),
'all_sub_categories' => asl_esc_lbl('all_sub_categories'),
'all_brand' => asl_esc_lbl('all_brand'),
'all_special' => asl_esc_lbl('all_special'),
'all_additional' => asl_esc_lbl('all_additional'),
'all_additional_2' => asl_esc_lbl('all_additional_2'),
'none_selected' => asl_esc_lbl('none_selected'),
'reset_map' => asl_esc_lbl('reset_map'),
'reload_map' => asl_esc_lbl('reload_map'),
'selected' => asl_esc_lbl('selected'),
'current_location' => asl_esc_lbl('current_location'),
'your_cur_loc' => asl_esc_lbl('your_cur_loc'),
/*Template words*/
'Miles' => asl_esc_lbl('miles'),
'Km' => asl_esc_lbl('km'),
'phone' => asl_esc_lbl('phone'),
'fax' => asl_esc_lbl('fax'),
'directions' => asl_esc_lbl('app_directions'),
'distance' => asl_esc_lbl('distance_title'),
'read_more' => asl_esc_lbl('read_more'),
'hide_more' => asl_esc_lbl('hide_more'),
'select_distance' => asl_esc_lbl('select_distance'),
'none_distance' => asl_esc_lbl('none'),
'cur_dir' => asl_esc_lbl('cur_dir'),
'radius_circle' => asl_esc_lbl('radius_circle'),
// Tmpl-3
'back_to_store' => asl_esc_lbl('back_to_store'),
'categories_title' => asl_esc_lbl('all_categories'),
'categories_tab' => asl_esc_lbl('categories_tab'),
'distance_title' => asl_esc_lbl('distance_title'),
'distance_tab' => asl_esc_lbl('distance_tab'),
'geo_location_error'=> asl_esc_lbl('geo_location_error'),
'no_found_head' => asl_esc_lbl('no_found_head'),
'select_category' => asl_esc_lbl('select_category'),
'brand' => asl_esc_lbl('brand'),
'special' => asl_esc_lbl('special'),
'region' => asl_esc_lbl('region'),
'category' => asl_esc_lbl('category'),
'within' => asl_esc_lbl('within'),
'clear' => asl_esc_lbl('clear_label'),
'country' => asl_esc_lbl('country'),
'state' => asl_esc_lbl('state'),
'in' => asl_esc_lbl('in'),
'desc_title' => asl_esc_lbl('desc_title'),
'add_desc_title' => asl_esc_lbl('add_desc_title'),
'am' => asl_esc_lbl('am'),
'pm' => asl_esc_lbl('pm'),
'closed' => asl_esc_lbl('closed'),
'opened' => asl_esc_lbl('opened'),
'perform_search' => asl_esc_lbl('perform_search')
];
$all_configs['words'] = $words;
// apply filter to change the locator words, ticket #6933
$all_configs['words'] = apply_filters('asl_filter_locator_words', $words);
$all_configs['version'] = $this->version;
$all_configs['days'] = ['sun'=> asl_esc_lbl('sun'), 'mon'=> asl_esc_lbl('mon'), 'tue'=> asl_esc_lbl('tue'), 'wed'=> asl_esc_lbl('wed'), 'thu'=> asl_esc_lbl('thu'), 'fri'=> asl_esc_lbl('fri'), 'sat'=> asl_esc_lbl('sat')];
// Additional Attributes
$filter_ddl_temp = (isset($all_configs['filter_ddl']) && $all_configs['filter_ddl']) ? $all_configs['filter_ddl'] : null;
$filter_ddl = [];
if ($filter_ddl_temp) {
// Get all the controls
$controls = \AgileStoreLocator\Model\Attribute::get_controls();
$filter_ddl_temp = explode(',', $filter_ddl_temp);
foreach ($controls as $control) {
if (!in_array($control['field'], $filter_ddl_temp)) {
continue;
}
$filter_ddl[$control['field']] = $control['label'];
}
}
// SHOW/Hide Custom CSS
$css_code = '';
// Code codes for the CSS
$css_code .= \AgileStoreLocator\Helper::generate_tmpl_css($all_configs['template']);
// Hide the direction button
if ($all_configs['direction_btn'] == '0') {
$css_code .= '.asl-cont .sl-direction,.asl-cont .s-direction, .asl-buttons .directions {display: none !important;}';
}
// Hide the direction button
if (isset($all_configs['zoom_btn']) && $all_configs['zoom_btn'] == '0') {
$css_code .= '.asl-buttons .zoomhere {display: none !important;}';
}
// Hide the Print button
if (isset($all_configs['print_btn']) && $all_configs['print_btn'] == '0') {
$css_code .= '.asl-p-cont .asl-print-btn,.asl-cont .asl-print-btn {display: none !important;}';
}
// Only show stores when marker is clicked
if ($all_configs['template'] != 'list' && $all_configs['first_load'] == '7') {
$all_configs['first_load'] = '1';
$css_code .= '.asl-p-cont .sl-item,.asl-cont .sl-item {display: none !important;}.asl-p-cont .sl-item.highlighted,.asl-cont .sl-item.highlighted {display: flex !important;}';
}
///////////////////////////////////
// Is Cache Enabled for Language //
///////////////////////////////////
$cache_settings = \AgileStoreLocator\Helper::getSettings('cache');
// make it empty array when not saved
if (!$cache_settings) {
$cache_settings = [];
}
// When enabled
if (isset($cache_settings[$lang_code]) && $cache_settings[$lang_code] == '1') {
$all_configs['cache'] = '1';
$all_configs['cache_ver'] = $cache_settings[$lang_code . '-ver'];
} else {
$all_configs['cache'] = null;
}
// disable the cache
if (isset($atts['cache']) && $atts['cache'] == '0') {
$all_configs['cache'] = null;
}
ob_start();
$template_file = null;
switch ($all_configs['template']) {
case '4':
if ($all_configs['color_scheme_3'] < 0 && $all_configs['color_scheme_3'] > 9) {
$all_configs['color_scheme_3'] = 0;
}
$template_file = 'template-frontend-4.php';
break;
case '3':
if ($all_configs['color_scheme_3'] < 0 && $all_configs['color_scheme_3'] > 9) {
$all_configs['color_scheme_3'] = 0;
}
$template_file = 'template-frontend-3.php';
break;
case '2':
if ($all_configs['color_scheme_2'] < 0 && $all_configs['color_scheme_2'] > 9) {
$all_configs['color_scheme_2'] = 0;
}
$template_file = 'template-frontend-2.php';
break;
case '1':
if ($all_configs['color_scheme_1'] < 0 && $all_configs['color_scheme_1'] > 9) {
$all_configs['color_scheme_1'] = 0;
}
$template_file = 'template-frontend-1.php';
break;
case 'list':
if ($all_configs['color_scheme'] < 0 && $all_configs['color_scheme'] > 9) {
$all_configs['color_scheme'] = 0;
}
$atts['no_script'] = 0;
$template_file = 'template-frontend-list.php';
break;
case 'deal':
if ($all_configs['color_scheme'] < 0 && $all_configs['color_scheme'] > 9) {
$all_configs['color_scheme'] = 0;
}
$template_file = 'template-frontend-deal.php';
break;
case 'realestate':
if ($all_configs['color_scheme_2'] < 0 && $all_configs['color_scheme_2'] > 9) {
$all_configs['color_scheme_2'] = 0;
}
$template_file = 'template-frontend-realestate.php';
break;
default:
if ($all_configs['color_scheme'] < 0 && $all_configs['color_scheme'] > 9) {
$all_configs['color_scheme'] = 0;
}
$template_file = 'template-frontend-0.php';
break;
}
// Customization of Template file
if ($template_file) {
if ($theme_file = locate_template([$template_file])) {
$template_path = $theme_file;
} else {
$template_path = ASL_PLUGIN_PATH . 'public/partials/' . $template_file;
}
include $template_path;
}
$sl_output = ob_get_contents();
ob_end_clean();
$title_nonce = wp_create_nonce('asl_remote_nonce');
// Get the template infobox & infobar
$asl_tmpls = \AgileStoreLocator\Helper::get_template_views($all_configs);
// Save the templates
$this->localize_scripts($this->AgileStoreLocator . $this->script_name, 'asl_tmpls', $asl_tmpls);
// Inject the template
//wp_add_inline_script($this->AgileStoreLocator.'-lib', $this->get_local_script_data(), 'before');
// Start Localizing again
$this->localize_scripts($this->AgileStoreLocator . $this->script_name, 'ASL_REMOTE', [
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => $title_nonce,
'default_lang' => get_locale(),
'lang' => $lang
]);
$this->localize_scripts($this->AgileStoreLocator . $this->script_name, 'asl_configuration', $all_configs);
$this->localize_scripts($this->AgileStoreLocator . $this->script_name, 'asl_categories', $all_categories);
$this->localize_scripts($this->AgileStoreLocator . $this->script_name, 'asl_attributes', $all_attributes);
$this->localize_scripts($this->AgileStoreLocator . $this->script_name, 'asl_markers', $all_markers);
$this->localize_scripts($this->AgileStoreLocator . $this->script_name, '_asl_map_customize', (($map_customize) ? [$map_customize] : []));
// Inject script with inline_script
//wp_add_inline_script( $this->AgileStoreLocator.$this->script_name, $this->get_local_script_data(), 'before');
// For some reason, if the configuration is not loading up
if (isset($all_configs['load_vars'])) {
$sl_output = $sl_output . $this->get_local_script_data(true);
}
return $sl_output;
}
/**
* [_map_layout Return the JSON for the Map layout]
* @param [type] $layout_code [description]
* @return [type] [description]
*/
private function _map_layout($layout_code)
{
global $wpdb;
/// Get the map configuration
switch ($layout_code) {
//
case '-1':
return '[]';
break;
//25-blue-water
case '0':
return '[{featureType:"administrative",elementType:"labels.text.fill",stylers:[{color:"#444444"}]},{featureType:"landscape",elementType:"all",stylers:[{color:"#f2f2f2"}]},{featureType:"poi",elementType:"all",stylers:[{visibility:"off"}]},{featureType:"road",elementType:"all",stylers:[{saturation:-100},{lightness:45}]},{featureType:"road.highway",elementType:"all",stylers:[{visibility:"simplified"}]},{featureType:"road.arterial",elementType:"labels.icon",stylers:[{visibility:"off"}]},{featureType:"transit",elementType:"all",stylers:[{visibility:"off"}]},{featureType:"water",elementType:"all",stylers:[{color:"#46bcec"},{visibility:"on"}]}]';
break;
//Flat Map
case '1':
return '[{"featureType": "poi.business","stylers": [{"visibility": "off"}]},{featureType:"landscape",elementType:"all",stylers:[{visibility:"on"},{color:"#f3f4f4"}]},{featureType:"landscape.man_made",elementType:"geometry",stylers:[{weight:.9},{visibility:"off"}]},{featureType:"poi.park",elementType:"geometry.fill",stylers:[{visibility:"on"},{color:"#83cead"}]},{featureType:"road",elementType:"all",stylers:[{visibility:"on"},{color:"#ffffff"}]},{featureType:"road",elementType:"labels",stylers:[{visibility:"off"}]},{featureType:"road.highway",elementType:"all",stylers:[{visibility:"on"},{color:"#fee379"}]},{featureType:"road.arterial",elementType:"all",stylers:[{visibility:"on"},{color:"#fee379"}]},{featureType:"water",elementType:"all",stylers:[{visibility:"on"},{color:"#7fc8ed"}]}]';
break;
//Icy Blue
case '2':
return '[{stylers:[{hue:"#2c3e50"},{saturation:250}]},{featureType:"road",elementType:"geometry",stylers:[{lightness:50},{visibility:"simplified"}]},{featureType:"road",elementType:"labels",stylers:[{visibility:"off"}]}]';
break;
//Pale Dawn
case '3':
return '[{featureType:"administrative",elementType:"all",stylers:[{visibility:"on"},{lightness:33}]},{featureType:"landscape",elementType:"all",stylers:[{color:"#f2e5d4"}]},{featureType:"poi.park",elementType:"geometry",stylers:[{color:"#c5dac6"}]},{featureType:"poi.park",elementType:"labels",stylers:[{visibility:"on"},{lightness:20}]},{featureType:"road",elementType:"all",stylers:[{lightness:20}]},{featureType:"road.highway",elementType:"geometry",stylers:[{color:"#c5c6c6"}]},{featureType:"road.arterial",elementType:"geometry",stylers:[{color:"#e4d7c6"}]},{featureType:"road.local",elementType:"geometry",stylers:[{color:"#fbfaf7"}]},{featureType:"water",elementType:"all",stylers:[{visibility:"on"},{color:"#acbcc9"}]}]';
break;
//cladme
case '4':
return '[{featureType:"administrative",elementType:"labels.text.fill",stylers:[{color:"#444444"}]},{featureType:"landscape",elementType:"all",stylers:[{color:"#f2f2f2"}]},{featureType:"poi",elementType:"all",stylers:[{visibility:"off"}]},{featureType:"road",elementType:"all",stylers:[{saturation:-100},{lightness:45}]},{featureType:"road.highway",elementType:"all",stylers:[{visibility:"simplified"}]},{featureType:"road.arterial",elementType:"labels.icon",stylers:[{visibility:"off"}]},{featureType:"transit",elementType:"all",stylers:[{visibility:"off"}]},{featureType:"water",elementType:"all",stylers:[{color:"#4f595d"},{visibility:"on"}]}]';
break;
//light monochrome
case '5':
return '[{featureType:"administrative.locality",elementType:"all",stylers:[{hue:"#2c2e33"},{saturation:7},{lightness:19},{visibility:"on"}]},{featureType:"landscape",elementType:"all",stylers:[{hue:"#ffffff"},{saturation:-100},{lightness:100},{visibility:"simplified"}]},{featureType:"poi",elementType:"all",stylers:[{hue:"#ffffff"},{saturation:-100},{lightness:100},{visibility:"off"}]},{featureType:"road",elementType:"geometry",stylers:[{hue:"#bbc0c4"},{saturation:-93},{lightness:31},{visibility:"simplified"}]},{featureType:"road",elementType:"labels",stylers:[{hue:"#bbc0c4"},{saturation:-93},{lightness:31},{visibility:"on"}]},{featureType:"road.arterial",elementType:"labels",stylers:[{hue:"#bbc0c4"},{saturation:-93},{lightness:-2},{visibility:"simplified"}]},{featureType:"road.local",elementType:"geometry",stylers:[{hue:"#e9ebed"},{saturation:-90},{lightness:-8},{visibility:"simplified"}]},{featureType:"transit",elementType:"all",stylers:[{hue:"#e9ebed"},{saturation:10},{lightness:69},{visibility:"on"}]},{featureType:"water",elementType:"all",stylers:[{hue:"#e9ebed"},{saturation:-78},{lightness:67},{visibility:"simplified"}]}]';
break;
//mostly grayscale
case '6':
return '[{featureType:"administrative",elementType:"all",stylers:[{visibility:"on"},{lightness:33}]},{featureType:"administrative",elementType:"labels",stylers:[{saturation:"-100"}]},{featureType:"administrative",elementType:"labels.text",stylers:[{gamma:"0.75"}]},{featureType:"administrative.neighborhood",elementType:"labels.text.fill",stylers:[{lightness:"-37"}]},{featureType:"landscape",elementType:"geometry",stylers:[{color:"#f9f9f9"}]},{featureType:"landscape.man_made",elementType:"geometry",stylers:[{saturation:"-100"},{lightness:"40"},{visibility:"off"}]},{featureType:"landscape.natural",elementType:"labels.text.fill",stylers:[{saturation:"-100"},{lightness:"-37"}]},{featureType:"landscape.natural",elementType:"labels.text.stroke",stylers:[{saturation:"-100"},{lightness:"100"},{weight:"2"}]},{featureType:"landscape.natural",elementType:"labels.icon",stylers:[{saturation:"-100"}]},{featureType:"poi",elementType:"geometry",stylers:[{saturation:"-100"},{lightness:"80"}]},{featureType:"poi",elementType:"labels",stylers:[{saturation:"-100"},{lightness:"0"}]},{featureType:"poi.attraction",elementType:"geometry",stylers:[{lightness:"-4"},{saturation:"-100"}]},{featureType:"poi.park",elementType:"geometry",stylers:[{color:"#c5dac6"},{visibility:"on"},{saturation:"-95"},{lightness:"62"}]},{featureType:"poi.park",elementType:"labels",stylers:[{visibility:"on"},{lightness:20}]},{featureType:"road",elementType:"all",stylers:[{lightness:20}]},{featureType:"road",elementType:"labels",stylers:[{saturation:"-100"},{gamma:"1.00"}]},{featureType:"road",elementType:"labels.text",stylers:[{gamma:"0.50"}]},{featureType:"road",elementType:"labels.icon",stylers:[{saturation:"-100"},{gamma:"0.50"}]},{featureType:"road.highway",elementType:"geometry",stylers:[{color:"#c5c6c6"},{saturation:"-100"}]},{featureType:"road.highway",elementType:"geometry.stroke",stylers:[{lightness:"-13"}]},{featureType:"road.highway",elementType:"labels.icon",stylers:[{lightness:"0"},{gamma:"1.09"}]},{featureType:"road.arterial",elementType:"geometry",stylers:[{color:"#e4d7c6"},{saturation:"-100"},{lightness:"47"}]},{featureType:"road.arterial",elementType:"geometry.stroke",stylers:[{lightness:"-12"}]},{featureType:"road.arterial",elementType:"labels.icon",stylers:[{saturation:"-100"}]},{featureType:"road.local",elementType:"geometry",stylers:[{color:"#fbfaf7"},{lightness:"77"}]},{featureType:"road.local",elementType:"geometry.fill",stylers:[{lightness:"-5"},{saturation:"-100"}]},{featureType:"road.local",elementType:"geometry.stroke",stylers:[{saturation:"-100"},{lightness:"-15"}]},{featureType:"transit.station.airport",elementType:"geometry",stylers:[{lightness:"47"},{saturation:"-100"}]},{featureType:"water",elementType:"all",stylers:[{visibility:"on"},{color:"#acbcc9"}]},{featureType:"water",elementType:"geometry",stylers:[{saturation:"53"}]},{featureType:"water",elementType:"labels.text.fill",stylers:[{lightness:"-42"},{saturation:"17"}]},{featureType:"water",elementType:"labels.text.stroke",stylers:[{lightness:"61"}]}]';
break;
//turquoise water
case '7':
return '[{stylers:[{hue:"#16a085"},{saturation:0}]},{featureType:"road",elementType:"geometry",stylers:[{lightness:100},{visibility:"simplified"}]},{featureType:"road",elementType:"labels",stylers:[{visibility:"off"}]}]';
break;
//unsaturated browns
case '8':
return '[{elementType:"geometry",stylers:[{hue:"#ff4400"},{saturation:-68},{lightness:-4},{gamma:.72}]},{featureType:"road",elementType:"labels.icon"},{featureType:"landscape.man_made",elementType:"geometry",stylers:[{hue:"#0077ff"},{gamma:3.1}]},{featureType:"water",stylers:[{hue:"#00ccff"},{gamma:.44},{saturation:-33}]},{featureType:"poi.park",stylers:[{hue:"#44ff00"},{saturation:-23}]},{featureType:"water",elementType:"labels.text.fill",stylers:[{hue:"#007fff"},{gamma:.77},{saturation:65},{lightness:99}]},{featureType:"water",elementType:"labels.text.stroke",stylers:[{gamma:.11},{weight:5.6},{saturation:99},{hue:"#0091ff"},{lightness:-86}]},{featureType:"transit.line",elementType:"geometry",stylers:[{lightness:-48},{hue:"#ff5e00"},{gamma:1.2},{saturation:-23}]},{featureType:"transit",elementType:"labels.text.stroke",stylers:[{saturation:-64},{hue:"#ff9100"},{lightness:16},{gamma:.47},{weight:2.7}]}]';
break;
case '9':
$custom_map_style = \AgileStoreLocator\Helper::get_setting('map_style', 'map_style');
if ($custom_map_style) {
return $custom_map_style;
}
break;
//turquoise water
default:
return '[{"featureType":"administrative","elementType":"all","stylers":[{"visibility":"on"},{"lightness":33}]},{"featureType":"landscape","elementType":"all","stylers":[{"color":"#f2e5d4"}]},{"featureType":"poi.park","elementType":"geometry","stylers":[{"color":"#c5dac6"}]},{"featureType":"poi.park","elementType":"labels","stylers":[{"visibility":"on"},{"lightness":20}]},{"featureType":"road","elementType":"all","stylers":[{"lightness":20}]},{"featureType":"road.highway","elementType":"geometry","stylers":[{"color":"#c5c6c6"}]},{"featureType":"road.arterial","elementType":"geometry","stylers":[{"color":"#e4d7c6"}]},{"featureType":"road.local","elementType":"geometry","stylers":[{"color":"#fbfaf7"}]},{"featureType":"water","elementType":"all","stylers":[{"visibility":"on"},{"color":"#acbcc9"}]}]';
break;
}
return '[]';
}
/**
* [have_matching_address Get all the matching from the description_2 zipcodes]
* @param [type] $zip_code [description]
* @return [type] [description]
*/
private function have_matching_address($zip_code)
{
global $wpdb;
$zip_code = sanitize_text_field($zip_code);
$selected_store = \AgileStoreLocator\Helper::get_store(null, "s.description_2 LIKE '%" . $wpdb->esc_like($zip_code) . "%'");
// When we have a store perform redirection
if ($selected_store && $selected_store->website) {
header('Location:' . $selected_store->website);
die;
}
}
/**
* [localize_scripts description]
* @param [type] $script_name [description]
* @param [type] $variable [description]
* @param [type] $data [description]
* @return [type] [description]
*/
private function localize_scripts($script_name, $variable, $data)
{
//$this->scripts_data[] = [$variable, $data];
// Since version 1.4.2
wp_localize_script($script_name, $variable, $data);
}
/**
* [get_local_script_data Render the scripts data]
* @return [type] [description]
*/
private function get_local_script_data($with_tags = false)
{
$scripts = '';
foreach ($this->scripts_data as $script_data) {
$scripts .= 'var ' . $script_data[0] . ' = ' . (($script_data[1] && !empty($script_data[1])) ? wp_json_encode($script_data[1]) : "''") . ';';
}
// With script tags
if ($with_tags) {
$scripts = "<script type='text/javascript' id='agile-store-locator-script-js'>" . $scripts . '</script>';
}
// Clear it
$this->scripts_data = [];
return $scripts;
}
}
// Create the Alias for the ASL-WC
class_alias('\AgileStoreLocator\Frontend\App', 'AgileStoreLocator_Public');