116 lines
3.9 KiB
PHP
116 lines
3.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Block Settings
|
|
*
|
|
* @package WPDesk\FS\Compatibility
|
|
*/
|
|
namespace FSVendor\WPDesk\FS\Compatibility;
|
|
|
|
use WC_Shipping_Zones;
|
|
use FSVendor\WPDesk_Flexible_Shipping;
|
|
/**
|
|
* Can prevent Flexible Shipping settings saving.
|
|
*/
|
|
class BlockSettings
|
|
{
|
|
/**
|
|
* @var PluginCompatibilityChecker .
|
|
*/
|
|
private $plugin_compatibility_checker;
|
|
/**
|
|
* Notice constructor.
|
|
*
|
|
* @param PluginCompatibilityChecker $plugin_compatibility_checker .
|
|
*/
|
|
public function __construct(PluginCompatibilityChecker $plugin_compatibility_checker)
|
|
{
|
|
$this->plugin_compatibility_checker = $plugin_compatibility_checker;
|
|
}
|
|
/**
|
|
* Add hooks.
|
|
*/
|
|
public function hooks()
|
|
{
|
|
add_action('admin_init', array($this, 'block_save_settings'));
|
|
add_action('flexible-shipping/method-rules-settings/table/before', array($this, 'add_flexible_shipping_method_message'));
|
|
add_action('flexible_shipping_method_script', array($this, 'add_flexible_shipping_method_message'));
|
|
}
|
|
/**
|
|
* Action when setting are saving.
|
|
*/
|
|
public function block_save_settings()
|
|
{
|
|
if (!isset($_POST['save'], $_POST['settings_saving_block'])) {
|
|
return;
|
|
}
|
|
$tab = filter_input(\INPUT_GET, 'tab');
|
|
$page = filter_input(\INPUT_GET, 'page');
|
|
if ('wc-settings' !== $page || 'shipping' !== $tab) {
|
|
return;
|
|
}
|
|
$_wpnonce = filter_input(\INPUT_POST, '_wpnonce');
|
|
if (!wp_verify_nonce(wp_unslash($_wpnonce), 'woocommerce-settings')) {
|
|
return;
|
|
}
|
|
$method_title = filter_input(\INPUT_POST, 'woocommerce_flexible_shipping_method_title');
|
|
$instance_id = absint(wp_unslash(filter_input(\INPUT_GET, 'instance_id')));
|
|
if (!$method_title || !$instance_id) {
|
|
return;
|
|
}
|
|
$shipping_method = WC_Shipping_Zones::get_shipping_method($instance_id);
|
|
if (!$shipping_method) {
|
|
return;
|
|
}
|
|
wp_die($this->get_general_message(), '', array('link_url' => $this->get_plugin_update_url(), 'link_text' => $this->get_plugin_update_label(), 'back_link' => \true));
|
|
// WPCS: XSS OK.
|
|
}
|
|
/**
|
|
* Add scripts for FS method.
|
|
*/
|
|
public function add_flexible_shipping_method_message()
|
|
{
|
|
$status = (bool) apply_filters('plugin_compatibility_checker/js_added', \false);
|
|
if ($status) {
|
|
return;
|
|
}
|
|
$action = filter_input(\INPUT_GET, 'action');
|
|
if (!$action) {
|
|
return;
|
|
}
|
|
add_filter('plugin_compatibility_checker/js_added', '__return_true');
|
|
$message = $this->get_message_for_settings();
|
|
include wp_normalize_path(__DIR__ . '/views/html-update-settings-alert.php');
|
|
}
|
|
/**
|
|
* Message for incompatible plugins.
|
|
*
|
|
* @return string
|
|
*/
|
|
private function get_message_for_settings()
|
|
{
|
|
return sprintf('%s %s', $this->get_general_message(), sprintf('%s%s%s', sprintf('<a target="_blank" href="%s">', $this->get_plugin_update_url()), $this->get_plugin_update_label(), '</a>'));
|
|
}
|
|
/**
|
|
* @return string
|
|
*/
|
|
private function get_general_message()
|
|
{
|
|
$plugins = implode(', ', $this->plugin_compatibility_checker->get_list_of_incompatible_plugins());
|
|
return sprintf(__('In order to prevent any further issues with the plugin configuration or its proper functioning, before saving the changes please update the following: %s.', 'flexible-shipping'), sprintf('<strong>%s</strong>', $plugins));
|
|
}
|
|
/**
|
|
* @return string
|
|
*/
|
|
private function get_plugin_update_label()
|
|
{
|
|
return __('Go to the plugins list →', 'flexible-shipping');
|
|
}
|
|
/**
|
|
* @return string
|
|
*/
|
|
private function get_plugin_update_url()
|
|
{
|
|
return add_query_arg('s', 'Flexible Shipping', admin_url('plugins.php'));
|
|
}
|
|
}
|