Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
immortalist
/
wp-content
/
plugins
/
agile-store-locator
/
includes
/
admin
:
setting.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace AgileStoreLocator\Admin; if (!defined('ABSPATH')) { exit; // Exit if accessed directly. } use AgileStoreLocator\Admin\Base; /** * The settings manager including UI, templates, cache etc functionality of the plugin. * * @link https://agilestorelocator.com * @since 1.4.3 * * @package AgileStoreLocator * @subpackage AgileStoreLocator/Admin/Setting */ class Setting extends Base { /** * [__construct description] */ public function __construct() { parent::__construct(); } /** * [backup_template Backup the Template into theme Root Directory] * @return [type] [description] */ public function backup_template() { $template = isset($_REQUEST['template']) ? sanitize_text_field($_REQUEST['template']) : null; $response = \AgileStoreLocator\Helper::backup_template($template); return $this->send_response($response); } /** * [remove_template Remove the template file from the Theme Directory] * @return [type] [description] */ public function remove_template() { $template = isset($_REQUEST['template']) ? sanitize_text_field($_REQUEST['template']) : null; $response = \AgileStoreLocator\Helper::remove_template($template); return $this->send_response($response); } /** * [expertise_level description] * @return [type] [description] */ public function expertise_level() { $level_status = (isset($_REQUEST['status']) && $_REQUEST['status'] == '1') ? '1' : '0'; // Update the expertise level update_option('asl-expertise', $level_status); $this->send_response(['success' => true, 'msg' => esc_attr__('Level has been changed.', 'asl_locator')]); } /** * [change_options Save the Settings in the Settings table] */ public function change_options($json_return = false) { global $wpdb; $prefix = ASL_PREFIX; // Data $content = isset($_POST['content']) ? stripslashes_deep($_POST['content']) : null; $type = isset($_POST['stype']) ? stripslashes_deep($_POST['stype']) : null; // Response $response = new \stdclass(); $response->success = false; // When type is hidden if (in_array($type, ['hidden', 'cache'])) { $c = $wpdb->get_results("SELECT count(*) AS 'count' FROM {$prefix}settings WHERE `type` = '{$type}'"); $data_params = ['content' => wp_json_encode($content), 'type'=> $type]; if ($c[0]->count >= 1) { $wpdb->update($prefix . 'settings', $data_params, ['type'=> $type]); } else { $wpdb->insert($prefix . 'settings', $data_params); } $response->msg = esc_attr__('Settings has been updated.', 'asl_locator'); $response->success = true; } // return as JSON if ($json_return) { return $response; } return $this->send_response($response); } /** * [save_setting save ASL Setting] * @return [type] [description] */ public function save_setting() { global $wpdb; $response = new \stdclass(); // Settings data $data_ = stripslashes_deep($_POST['data']); // Remove Script tag will be saved in wp_options $remove_script_tag = $data_['remove_maps_script']; unset($data_['remove_maps_script']); // Config keys $keys = array_keys($data_); // Hava a value? if (isset($data_['country_restrict']) && $data_['country_restrict']) { // Restrict the country validation $validation_result = $this->validate_country_restrictions($data_['country_restrict']); if (!$validation_result['valid']) { $response->msg = esc_attr__('Invalid value for country restriction. Only ISO 3166-1 alpha-2 country codes are supported.', 'asl_locator'); $response->success = false; return $this->send_response($response); } $data_['country_restrict'] = $validation_result['country_restrict']; } // Loop over the setting items foreach ($keys as $key) { $wpdb->update( ASL_PREFIX . 'configs', ['value' => $data_[$key]], ['key' => $key] ); } // register/de-register the lead cron job for the follow-ups if (isset($data_['lead_follow_up'])) { \AgileStoreLocator\Cron\LeadCron::schedule_cron($data_['lead_follow_up'], $data_); } /////////////////////////// // Save Custom Settings // /////////////////////////// $custom_map_style = $_POST['map_style']; // Custom Map Style \AgileStoreLocator\Helper::set_setting(stripslashes($custom_map_style), 'map_style', 'map_style'); $custom_slug_fields = $_POST['slug_attr_ddl']; // Slug Attributes \AgileStoreLocator\Helper::set_setting(stripslashes($custom_slug_fields), 'slug_attr_ddl'); update_option('asl-remove_maps_script', $remove_script_tag); $response->msg = esc_attr__('Setting has been updated successfully.', 'asl_locator'); $response->success = true; // Valid the Default Coordinates $is_valid = \AgileStoreLocator\Helper::validate_coordinate($data_['default_lat'], $data_['default_lng']); // is invalid? if (!$is_valid) { $response->msg .= '<br>' . esc_attr__('Error! Default Lat & Lng are invalid values, please try to swap them.', 'asl_locator'); $response->success = false; } return $this->send_response($response); } /** * [manage_cache Refresh the JSON] * @return [type] [description] */ public function manage_cache() { global $wpdb; $response = new \stdclass(); $response->success = false; $cache_status = (isset($_REQUEST['status']) && $_REQUEST['status'] == '1') ? '1' : '0'; $cache_lang = (isset($_REQUEST['asl-lang'])) ? sanitize_text_field($_REQUEST['asl-lang']) : null; // Todo, Make sure the folder exist? if (!file_exists(ASL_UPLOAD_DIR)) { mkdir(ASL_UPLOAD_DIR, 0775, true); } if (!$cache_lang) { $response->error = esc_attr__('Error! Lang is not defined.', 'asl_locator'); } // en_US is default if ($cache_lang == 'en_US') { $cache_lang = ''; } // JSON file $json_file = 'locator-data' . (($cache_lang) ? '-' . $cache_lang : '') . '.json'; // Generate the JSON file when enabled if ($cache_status == '1') { // Generate the Output $public_request = new \AgileStoreLocator\Frontend\Request(); $output_result = $public_request->load_stores(true, $cache_lang); // Save the output $response->output = file_put_contents(ASL_UPLOAD_DIR . $json_file, json_encode($output_result)); // When fails if (!$response->output) { $response->path = ASL_UPLOAD_DIR . $json_file; } $response->msg = esc_attr__('Cache JSON has been generated successfully for language ' . $cache_lang, 'asl_locator'); } else { $response->msg = esc_attr__('Cache JSON is disabled for language ' . $cache_lang, 'asl_locator'); } // Save the cache settings $this->change_options(true); // Show as success $response->success = true; return $this->send_response($response); } /** * [load_custom_template Load ASL Custom Template] * @return [type] [description] */ public function load_custom_template() { global $wpdb; $response = new \stdclass(); $response->success = false; $data_ = stripslashes_deep($_POST); // List template doesn't have any infobox if (in_array($data_['template'], ['template-list', 'template-list-2', 'store-grid']) && $data_['section'] == 'infobox') { $response->error = esc_attr__('Template has no infobox.', 'asl_locator'); return $this->send_response($response); } $html = ''; if ($data_['template'] != 'cards-templates') { $count = $wpdb->get_results($wpdb->prepare("SELECT COUNT('name') as 'count' FROM " . ASL_PREFIX . 'settings WHERE `name` = %s AND `type` = %s', $data_['template'], $data_['section'])); if ($count[0]->count >= 1) { // Template Query $results = $wpdb->get_results($wpdb->prepare('SELECT `content` FROM ' . ASL_PREFIX . 'settings WHERE `name` = %s AND `type` = %s', $data_['template'], $data_['section']), ARRAY_A); if ($results) { $html = $results[0]['content']; } } else { // include simple products HTML //$view_file_path = ASL_PLUGIN_PATH . 'public/views/' . (($data_['template'] == 'advanced_marker') ? 'markers/' : '') . $data_['template'] . '-' . $data_['section'] . '.html'; $view_file_path = \AgileStoreLocator\Helper::get_customizer_file_path($data_['template'], $data_['section']); $html = file_get_contents($view_file_path); } } elseif ($data_['template'] == 'cards-templates') { if (file_exists(STYLESHEETPATH . '/' . $data_['section'] . '.php')) { $view_file_path = STYLESHEETPATH . '/' . $data_['section'] . '.php'; } else { $view_file_path = ASL_PLUGIN_PATH . 'public/partials/' . $data_['section'] . '.php'; } $html = file_get_contents($view_file_path); } if (!empty($html)) { $response->html = $html; $response->msg = esc_attr__('HTML added in TextEditor', 'asl_locator'); $response->success = true; } return $this->send_response($response); } /** * [save_custom_template Load ASL Custom Template] * @return [type] [description] */ public function save_custom_template() { global $wpdb; $response = new \stdclass(); $response->success = false; $data_ = stripslashes_deep($_POST); // $ext = substr($data_['template'], strrpos($data_['template'], '.') + 1); if (!empty($data_['html'])) { if ($data_['template'] != 'cards-templates') { // get previous quantity $count = $wpdb->get_results($wpdb->prepare("SELECT COUNT('name') as 'count' FROM " . ASL_PREFIX . 'settings WHERE `name` = %s AND `type` = %s', $data_['template'], $data_['section'])); $data_params = ['name' => $data_['template'], 'type' => $data_['section'], 'content' => $data_['html']]; if ($count[0]->count >= 1) { // Execute the Update Query $wpdb->update(ASL_PREFIX . 'settings', $data_params, ['name' => $data_['template'], 'type' => $data_['section']]); } else { // Execute the Insert Query $wpdb->insert(ASL_PREFIX . 'settings', $data_params); } $response->msg = esc_attr__('Template Updated', 'asl_locator'); $response->success = true; } } return $this->send_response($response); } /** * [reset_custom_template Load ASL Custom Template] * @return [type] [description] */ public function reset_custom_template() { global $wpdb; $response = new \stdclass(); $response->success = false; $data_ = stripslashes_deep($_POST); if ($data_['template'] != 'cards-templates') { //$view_file_path = ASL_PLUGIN_PATH . 'public/views/' . (($data_['template'] == 'advanced_marker') ? 'markers/' : '') . $data_['template'] . '-' . $data_['section'] . '.html'; $view_file_path = \AgileStoreLocator\Helper::get_customizer_file_path($data_['template'], $data_['section']); } elseif ($data_['template'] == 'cards-templates') { $view_file_path = ASL_PLUGIN_PATH . 'public/partials/' . $data_['section'] . '.php'; } // include simple products HTML $html = file_get_contents($view_file_path); $response->html = $html; $response->msg = esc_attr__('Default template is loaded', 'asl_locator'); $response->success = true; return $this->send_response($response); } /** * [load_ui_settings Load ASL Custom Template] * @return [type] [description] */ public function load_ui_settings() { global $wpdb; $response = new \stdclass(); $response->success = false; $template = $_POST['template']; $colors = [ 'template-0' => [ 'primary' => 'clr-primary', 'header' => '', 'header-color' => '', 'infobox-color' => '', 'infobox-bg' => '', 'infobox-a' => 'clr-copy', 'action-btn-color' => '', 'action-btn-bg' => 'clr-copy', 'color' => '', 'list-bg' => '', 'list-title' => '', 'list-sub-title' => '', 'highlighted' => '' ], 'template-wc' => [ 'primary' => 'clr-primary' ], ]; $white = '#FFFFFF'; $black = '#000000'; $tmpl_0_primary = '#cb2800'; $tmpl_0_title_color = '#32373c'; $tmpl_0_sub_title_color = '#6a6a6a'; $tmpl_0_list_color = '#555d66'; $tmpl_0_header_bg = '#F7F7F7'; $tmpl_0_header_color = '#32373c'; $tmpl_0_highlighted = '#F7F7F7'; $tmpl_1_primary = '#000000'; $tmpl_1_secondary = '#EF5A28'; $tmpl_1_title_color = '#32373c'; $tmpl_1_sub_title_color = '#6a6a6a'; $tmpl_1_list_color = '#555d66'; $tmpl_1_header_bg = $tmpl_1_primary; $tmpl_1_highlighted = '#F7F7F7'; $tmpl_2_primary = '#cb2800'; $tmpl_2_secondary = '#cb2800'; $tmpl_2_title_color = '#32373c'; $tmpl_2_sub_title_color = '#6a6a6a'; $tmpl_2_list_color = '#555d66'; $tmpl_2_header_bg = '#F7F7F7'; $tmpl_2_highlighted = '#F7F7F7'; $tmpl_3_primary = '#cb2800'; $tmpl_3_title_color = '#32373c'; $tmpl_3_sub_title_color = '#6a6a6a'; $tmpl_3_list_color = '#555d66'; $tmpl_3_header_bg = '#F7F7F7'; $tmpl_3_highlighted = '#F7F7F7'; // the default colors that will load with the customizer $default_colors = [ 'template-0' => [ 'primary' => $tmpl_0_primary, 'header' => $tmpl_0_header_bg, 'header-color' => $tmpl_0_header_color, 'infobox-color' => $tmpl_0_list_color, 'infobox-bg' => $white, 'infobox-a' => $tmpl_0_primary, 'action-btn-color' => $white, 'action-btn-bg' => $tmpl_0_primary, 'color' => $tmpl_0_list_color, 'list-bg' => $white, 'list-title' => $tmpl_0_title_color, 'list-sub-title' => $tmpl_0_sub_title_color, 'highlighted' => $tmpl_0_highlighted, 'highlighted-list-color' => $tmpl_0_primary ], 'template-wc' => [ 'primary' => $tmpl_0_primary ] ]; $default_fonts = [ 'template-0' => [ 'font-size' => 13, 'title-size' => 15, 'btn-size' => 13 ], 'template-wc' => [ 'font-size' => 13, 'title-size' => 16, 'btn-size' => 13 ] ]; $html = ''; $fields = ''; // Only get the array of active default color $default_colors = $default_colors[$template]; $default_fonts = $default_fonts[$template]; $fields_settings = \AgileStoreLocator\Helper::get_setting('ui-template', $template); if ($fields_settings) { $fields = json_decode($fields_settings); } // Start Stream ob_start(); // include ui customizer fields products HTML include ASL_PLUGIN_PATH . 'admin/partials/ui-customizer-fields.php'; $html = ob_get_contents(); // Clean it ob_end_clean(); $response->html = $html; $response->msg = esc_attr__('Template UI settings updated', 'asl_locator'); $response->success = true; return $this->send_response($response); } /** * [sl_theme_ui_save Save ASL UI Settings] * @return [type] [description] */ public function sl_theme_ui_save() { global $wpdb; $response = new \stdclass(); $response->success = false; $data_ = stripslashes_deep($_POST['sl_formData']); $template = sanitize_text_field($_POST['sl_template']); $data = json_encode($data_); \AgileStoreLocator\Helper::set_setting($data, 'ui-template', $template); $response->msg = esc_attr__('Template updated', 'asl_locator'); $response->success = true; return $this->send_response($response); } /** * [validate_country_restrictions Validate the country restriction] * @param [type] $country_restrict [description] * @return [type] [description] */ private function validate_country_restrictions($country_restrict) { // List of valid ISO 3166-1 alpha-2 country codes $valid_countries = [ 'AF', 'AX', 'AL', 'DZ', 'AS', 'AD', 'AO', 'AI', 'AQ', 'AG', 'AR', 'AM', 'AW', 'AU', 'AT', 'AZ', 'BS', 'BH', 'BD', 'BB', 'BY', 'BE', 'BZ', 'BJ', 'BM', 'BT', 'BO', 'BQ', 'BA', 'BW', 'BV', 'BR', 'IO', 'BN', 'BG', 'BF', 'BI', 'CV', 'KH', 'CM', 'CA', 'KY', 'CF', 'TD', 'CL', 'CN', 'CX', 'CC', 'CO', 'KM', 'CG', 'CD', 'CK', 'CR', 'HR', 'CU', 'CW', 'CY', 'CZ', 'DK', 'DJ', 'DM', 'DO', 'EC', 'EG', 'SV', 'GQ', 'ER', 'EE', 'SZ', 'ET', 'FK', 'FO', 'FJ', 'FI', 'FR', 'GF', 'PF', 'TF', 'GA', 'GM', 'GE', 'DE', 'GH', 'GI', 'GR', 'GL', 'GD', 'GP', 'GU', 'GT', 'GG', 'GN', 'GW', 'GY', 'HT', 'HM', 'VA', 'HN', 'HK', 'HU', 'IS', 'IN', 'ID', 'IR', 'IQ', 'IE', 'IM', 'IL', 'IT', 'JM', 'JP', 'JE', 'JO', 'KZ', 'KE', 'KI', 'KP', 'KR', 'KW', 'KG', 'LA', 'LV', 'LB', 'LS', 'LR', 'LY', 'LI', 'LT', 'LU', 'MO', 'MG', 'MW', 'MY', 'MV', 'ML', 'MT', 'MH', 'MQ', 'MR', 'MU', 'YT', 'MX', 'FM', 'MD', 'MC', 'MN', 'ME', 'MS', 'MA', 'MZ', 'MM', 'NA', 'NR', 'NP', 'NL', 'NC', 'NZ', 'NI', 'NE', 'NG', 'NU', 'NF', 'MK', 'MP', 'NO', 'OM', 'PK', 'PW', 'PS', 'PA', 'PG', 'PY', 'PE', 'PH', 'PN', 'PL', 'PT', 'PR', 'QA', 'RE', 'RO', 'RU', 'RW', 'BL', 'SH', 'KN', 'LC', 'MF', 'PM', 'VC', 'WS', 'SM', 'ST', 'SA', 'SN', 'RS', 'SC', 'SL', 'SG', 'SX', 'SK', 'SI', 'SB', 'SO', 'ZA', 'GS', 'SS', 'ES', 'LK', 'SD', 'SR', 'SJ', 'SE', 'CH', 'SY', 'TW', 'TJ', 'TZ', 'TH', 'TL', 'TG', 'TK', 'TO', 'TT', 'TN', 'TR', 'TM', 'TC', 'TV', 'UG', 'UA', 'AE', 'GB', 'US', 'UM', 'UY', 'UZ', 'VU', 'VE', 'VN', 'VG', 'VI', 'WF', 'EH', 'YE', 'ZM', 'ZW' ]; $countries = explode(',', $country_restrict); $valid = true; $countries_to_restrict = []; foreach ($countries as $country) { $country = strtoupper(trim($country)); $countries_to_restrict[] = $country; if (!in_array($country, $valid_countries)) { $valid = false; break; } } return [ 'valid' => $valid, 'country_restrict' => implode(',', $countries_to_restrict) ]; } /** * [save_custom_fields Save Custom Fields AJAX] * @return [type] [description] */ public function save_custom_fields() { global $wpdb; $prefix = ASL_PREFIX; $response = new \stdclass(); $response->success = false; $fields = isset($_POST['fields']) ? ($_POST['fields']) : []; // Filter the JSON for XSS $filter_fields = []; foreach ($fields as $field_key => $field) { $field_key = strip_tags($field_key); $field['type'] = strip_tags(sanitize_text_field($field['type'])); $field['name'] = strip_tags(sanitize_text_field($field['name'])); $field['label'] = strip_tags(sanitize_text_field($field['label'])); $filter_fields[$field_key] = $field; } $c = $wpdb->get_results("SELECT count(*) AS 'count' FROM {$prefix}settings WHERE `type` = 'fields'"); $data_params = ['content' => wp_json_encode($filter_fields), 'type'=> 'fields']; if ($c[0]->count >= 1) { $wpdb->update($prefix . 'settings', $data_params, ['type'=> 'fields']); } else { $wpdb->insert($prefix . 'settings', $data_params); } /*$wpdb->show_errors = true; $response->error = $wpdb->print_error(); $response->error1 = $wpdb->last_error;*/ $response->msg = esc_attr__('Fields has been updated successfully.', 'asl_locator'); $response->success = true; return $this->send_response($response); } /** * [import_configs Import the Configs] * @return [type] [description] */ public function import_configs() { $response = new \stdclass(); $response->title = esc_attr__('Configuration Import', 'asl_locator'); // Must be an administrator if (current_user_can('administrator')) { $jsonText = isset($_POST['configs']) ? stripslashes_deep($_POST['configs']) : null; $import_results = ($jsonText) ? (\AgileStoreLocator\Model\Config::import_configuration($jsonText)) : false; // Has imported or not? if ($import_results > 0) { $response->message = esc_attr__('Config has been imported successfully', 'asl_locator'); $response->success = true; } else { $response->message = esc_attr__('Failed to import configuration, contact support for help.', 'asl_locator'); } } else { $response->message = esc_attr__('Administrator permissions are required.', 'asl_locator'); } return $this->send_response($response); } /** * [export_configs Export the Configs] * @return [type] [description] */ public function export_configs() { $response = new \stdclass(); $response->configs = \AgileStoreLocator\Model\Config::export_config(); $response->message = esc_attr__('Config exported successfully', 'asl_locator'); $response->copy_message = esc_attr__('Copied successfully', 'asl_locator'); $response->export_text_content = esc_attr__('Warning! Export includes all configuration including API keys, labels, customizations and maps related settings.', 'asl_locator'); $response->success = true; return $this->send_response($response); } }