*/
if (!class_exists('W3W_Autosuggest_Admin')) {
class W3W_Autosuggest_Admin
{
/**
* The ID of this plugin.
*
* @since 4.0.0
* @access private
* @var string $plugin_name The ID of this plugin.
*/
private $plugin_name;
/**
* The version of this plugin.
*
* @since 4.0.0
* @access private
* @var string $version The current version of this plugin.
*/
private $version;
private $settings_name;
private $i18n_domain;
private $settings_url;
/**
* Initialize the class and set its properties.
*
* @since 4.0.0
* @param string $plugin_name The name of this plugin.
* @param string $version The version of this plugin.
*/
public function __construct($plugin_name, $version, $settings_name, $i18n_domain, $settings_url)
{
$this->plugin_name = $plugin_name;
$this->version = $version;
$this->settings_name = $settings_name;
$this->i18n_domain = $i18n_domain;
$this->settings_url = $settings_url;
$this->handle_form_submission($_POST);
}
/**
* Register the stylesheets for the admin area.
*
* @since 4.0.0
*/
public function enqueue_styles()
{
/**
* This function is provided for demonstration purposes only.
*
* An instance of this class should be passed to the run() function
* defined in Plugin_Name_Loader as all of the hooks are defined
* in that particular class.
*
* The Plugin_Name_Loader will then create the relationship
* between the defined hooks and the functions defined in this
* class.
*/
wp_enqueue_style(
$this->plugin_name,
plugin_dir_url(__FILE__) . 'css/w3w-autosuggest-admin.css',
array(),
$this->version,
'all'
);
}
/**
* Register the JavaScript for the admin area.
*
* @since 4.0.0
*/
public function enqueue_scripts()
{
/**
* This function is provided for demonstration purposes only.
*
* An instance of this class should be passed to the run() function
* defined in Plugin_Name_Loader as all of the hooks are defined
* in that particular class.
*
* The Plugin_Name_Loader will then create the relationship
* between the defined hooks and the functions defined in this
* class.
*/
wp_enqueue_script(
$this->plugin_name,
plugin_dir_url(__FILE__) . 'js/w3w-autosuggest-admin.js',
array(),
$this->version,
false
);
}
public function options_page()
{
$parent_slug = 'what3words';
add_menu_page(
__('what3words', $this->i18n_domain),
__('what3words', $this->i18n_domain),
'manage_options',
$parent_slug,
array($this, 'run'),
'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjMuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IndoYXQzd29yZHMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAyMCAyMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjAgMjA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBhdGggZD0iTTE2LjksMkgzLjFDMi41LDIsMiwyLjUsMiwzLjF2MTMuN0MyLDE3LjUsMi41LDE4LDMuMSwxOGgxMy43YzAuNiwwLDEuMS0wLjUsMS4xLTEuMVYzLjFDMTgsMi41LDE3LjUsMiwxNi45LDJ6IE01LjgsMTMuNQoJYy0wLjMtMC4xLTAuNS0wLjQtMC40LTAuN2wyLTZjMC4xLTAuMywwLjQtMC41LDAuNy0wLjRjMC4zLDAuMSwwLjUsMC40LDAuNCwwLjdjMCwwLDAsMCwwLDBsLTIsNkM2LjQsMTMuNSw2LjEsMTMuNiw1LjgsMTMuNXoKCSBNOC44LDEzLjVjLTAuMy0wLjEtMC41LTAuNC0wLjQtMC43bDItNmMwLjEtMC4zLDAuNC0wLjUsMC43LTAuNGMwLjMsMC4xLDAuNSwwLjQsMC40LDAuN2MwLDAsMCwwLDAsMGwtMiw2CglDOS40LDEzLjUsOS4xLDEzLjYsOC44LDEzLjVMOC44LDEzLjV6IE0xNC42LDcuMmwtMiw2Yy0wLjEsMC4zLTAuNCwwLjUtMC43LDAuNGMtMC4zLTAuMS0wLjUtMC40LTAuNC0wLjdjMCwwLDAsMCwwLDBsMi02CgljMC4xLTAuMywwLjQtMC41LDAuNy0wLjRDMTQuNSw2LjYsMTQuNyw2LjksMTQuNiw3LjJDMTQuNiw3LjIsMTQuNiw3LjIsMTQuNiw3LjJ6Ii8+Cjwvc3ZnPgo=',
58
);
}
public function admin_notices()
{
$settings = get_option($this->settings_name);
if (!isset($settings['api_key']) || !$settings['api_key'])
require_once plugin_dir_path(__FILE__) . '/partials/add-admin-notice.php';
}
public function plugin_action_links($actions, $plugin_file, $plugin_data, $context)
{
$settings = sprintf(
'%s',
$this->settings_url,
__('Settings', $this->i18n_domain)
);
array_unshift($actions, $settings);
return $actions;
}
/**
* Show row meta on the plugin screen.
*
* @param mixed $links Plugin Row Meta.
* @param mixed $file Plugin Base file.
*
* @return array
*/
public function plugin_row_meta($links, $file)
{
if ($file === 'w3w-autosuggest/w3w-autosuggest.php') {
$row_meta = array(
'docs' => '' . esc_html__('Docs', $this->i18n_domain) . '',
'apidocs' => '' . esc_html__('API docs', $this->i18n_domain) . '',
'support' => '' . esc_html__('Help & Support', $this->i18n_domain) . '',
);
return array_merge($links, $row_meta);
}
return $links;
}
/**
* Add the shipping 3wa to the checkout complete page using the woocommerce_admin_order_data_after_shipping_address
* action
*
* @since 4.0.0
*/
public function add_shipping_address_to_order_page($order)
{
$order_id = $order->get_id();
$settings = get_option($this->settings_name);
$words = get_post_meta($order_id, '_shipping_w3w', true);
$nearest_place = get_post_meta($order_id, '_shipping_nearest_place', true);
$lat = get_post_meta($order_id, '_shipping_w3w_lat', true);
$lng = get_post_meta($order_id, '_shipping_w3w_lng', true);
$label = $settings['enable_label'] ? $settings['label'] : 'w3w Address';
if (empty($words)) {
$words = $order->get_meta('_shipping_w3w');
}
if (empty($nearest_place)) {
$nearest_place = $order->get_meta('_shipping_nearest_place');
}
if (empty($lat)) {
$lat = $order->get_meta('_shipping_w3w_lat');
}
if (empty($lng)) {
$lng = $order->get_meta('_shipping_w3w_lng');
}
require plugin_dir_path(__FILE__) . 'partials/add-address-to-order-page.php';
}
/**
* Add the 3wa to the customer details for the order email
*
* @since 4.0.6
*/
public function add_w3w_address_to_email($array, $sent_to_admin, $order)
{
$order_id = $order->get_id();
$settings = get_option($this->settings_name);
$label = $settings['enable_label'] ? $settings['label'] : 'w3w Address';
$words = get_post_meta($order_id, '_shipping_w3w', true);
$array = [
['label' => $label, 'value' => $words],
];
return $array;
}
public function set_order_data($data, $order)
{
$order_id = $order->get_id();
$settings = get_option($this->settings_name);
$words = get_post_meta($order_id, '_shipping_w3w', true);
if (!!$words) {
$data['formatted_shipping_address'] .= '
' . $words;
$data['shipping_address_map_url'] = 'https://what3words.com/' .
str_replace('///', '', $words) .
'?application=wordpress';
}
return $data;
}
public function run()
{
require_once plugin_dir_path(__FILE__) . 'partials/w3w-autosuggest-admin-display.php';
}
private function handle_form_submission($post)
{
$settings = get_option($this->settings_name);
foreach ($post as $key => $val) {
$post[$key] = $key === 'clip_to_polygon' ? esc_attr(sanitize_textarea_field($val)) : esc_attr(sanitize_text_field($val));
}
if (
isset($post) &&
(
isset($post['api_key_form']) ||
isset($post['settings_form']) ||
isset($post['advanced_form'])
)
) {
if (isset($post['api_key_form'])) {
$settings['api_key'] = $post['api_key'];
}
if (isset($post['settings_form'])) {
$settings['return_coordinates'] = false;
$settings['save_nearest_place'] = false;
$settings['enable_label'] = false;
$settings['enable_placeholder'] = false;
}
if (isset($post['advanced_form'])) {
$settings['enable_placeholder'] = false;
$settings['enable_clip_to_country'] = false;
$settings['enable_clip_to_circle'] = false;
$settings['enable_clip_to_bounding_box'] = false;
$settings['enable_clip_to_polygon'] = false;
}
foreach ($post as $key => $val) {
switch ($key) {
case 'woocommerce_enabled':
$settings[$key] = $val === 'on';
break;
case 'selector':
$settings[$key] = $val;
break;
case 'return_coordinates':
case 'save_nearest_place':
$settings[$key] = $val === 'on';
break;
case 'enable_label':
$settings[$key] = $val === 'on';
if ($settings[$key]) {
$settings['label'] = $post['label'];
}
break;
case 'enable_placeholder':
$settings[$key] = $val === 'on';
if ($settings[$key]) {
$settings['placeholder'] = $post['placeholder'];
}
break;
case 'enable_clip_to_country':
$settings[$key] = $val === 'on';
if ($settings[$key]) {
$settings['clip_to_country'] = $post['clip_to_country'];
}
break;
case 'enable_clip_to_circle':
$settings[$key] = $val === 'on';
if ($settings[$key]) {
$settings['clip_to_circle'] = $post['clip_to_circle'];
$settings['clip_to_circle_lat'] = $post['clip_to_circle_lat'];
$settings['clip_to_circle_lng'] = $post['clip_to_circle_lng'];
$settings['clip_to_circle_radius'] = $post['clip_to_circle_radius'];
}
break;
case 'enable_clip_to_bounding_box':
$settings[$key] = $val === 'on';
if ($settings[$key]) {
$settings['clip_to_bounding_box'] = $post['clip_to_bounding_box'];
$settings['clip_to_bounding_box_sw_lat'] = $post['clip_to_bounding_box_sw_lat'];
$settings['clip_to_bounding_box_sw_lng'] = $post['clip_to_bounding_box_sw_lng'];
$settings['clip_to_bounding_box_ne_lat'] = $post['clip_to_bounding_box_ne_lat'];
$settings['clip_to_bounding_box_ne_lng'] = $post['clip_to_bounding_box_ne_lng'];
}
break;
case 'enable_clip_to_polygon':
$settings[$key] = $val === 'on';
if ($settings[$key]) {
$settings['clip_to_polygon'] = $post['clip_to_polygon'];
}
break;
}
}
update_option($this->settings_name, $settings);
}
}
}
}