File "PluginBootstrap.php"
Full Path: /home/siazco/grocery.siazco.se/wp-content/plugins/flexible-shipping/vendor_prefixed/wpdesk/wp-plugin-flow-common/src/PluginBootstrap.php
File size: 6.51 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace FSVendor\WPDesk\Plugin\Flow;
use FSVendor\WPDesk\Plugin\Flow\Initialization\InitializationFactory;
/**
* Bootstrap plugin loading
* - check requirements
* - prepare plugin info
* - delegate plugin building to the initializator
*/
final class PluginBootstrap
{
const LIBRARY_TEXT_DOMAIN = 'flexible-shipping';
const PRIORITY_BEFORE_FLOW_2_5 = -50;
/** @var string */
private $plugin_version;
/** @var string */
private $plugin_name;
/** @var string */
private $plugin_class_name;
/** @var string */
private $plugin_text_domain;
/** @var string */
private $plugin_dir;
/** @var string */
private $plugin_file;
/** @var array */
private $requirements;
/** @var string */
private $product_id;
/** @var array */
private $plugin_shops;
/**
* Factory to build strategy how initialize that plugin
*
* @var InitializationFactory
*/
private $initialization_factory;
/**
* WPDesk_Plugin_Bootstrap constructor.
*
* @param string $plugin_version
* @param string $plugin_release_timestamp
* @param string $plugin_name
* @param string $plugin_class_name
* @param string $plugin_text_domain
* @param string $plugin_dir
* @param string $plugin_file
* @param array $requirements
* @param string $product_id
* @param InitializationFactory $build_factory
* @param array $plugin_shops
*/
public function __construct($plugin_version, $plugin_release_timestamp, $plugin_name, $plugin_class_name, $plugin_text_domain, $plugin_dir, $plugin_file, array $requirements, $product_id, InitializationFactory $build_factory, $plugin_shops)
{
$this->plugin_version = $plugin_version;
$this->plugin_name = $plugin_name;
$this->plugin_class_name = $plugin_class_name;
$this->plugin_text_domain = $plugin_text_domain;
$this->plugin_dir = $plugin_dir;
$this->plugin_file = $plugin_file;
$this->requirements = $requirements;
$this->product_id = $product_id;
$this->initialization_factory = $build_factory;
$this->plugin_shops = $plugin_shops;
}
/**
* Run the plugin bootstrap
*/
public function run()
{
$plugin_info = $this->get_plugin_info();
$this->init_translations($plugin_info);
$strategy = $this->initialization_factory->create_initialization_strategy($plugin_info);
$requirements_checker = $this->create_requirements_checker();
if ($requirements_checker->are_requirements_met()) {
$strategy->run_before_init($plugin_info);
}
$this->add_activation_hook_for_save_activation_date();
add_action('plugins_loaded', static function () use ($strategy, $requirements_checker, $plugin_info) {
if ($requirements_checker->are_requirements_met()) {
$strategy->run_init($plugin_info);
} else {
$requirements_checker->render_notices();
}
}, self::PRIORITY_BEFORE_FLOW_2_5);
add_action('before_woocommerce_init', static function () use ($plugin_info) {
$features_util_class = '\\' . 'Automattic' . '\\' . 'WooCommerce' . '\\' . 'Utilities' . '\\' . 'FeaturesUtil';
if (class_exists($features_util_class)) {
$features_util_class::declare_compatibility('custom_order_tables', $plugin_info->get_plugin_file_name(), \true);
}
});
}
/**
* Initialize activated_plugin action.
* Action stores plugin activation date.
* Example option name: plugin_activation_flexible-shipping/flexible-shipping.php
*/
private function add_activation_hook_for_save_activation_date()
{
add_action('activated_plugin', static function ($plugin_file, $network_wide = \false) {
if (!$network_wide) {
$option_name = 'plugin_activation_' . $plugin_file;
$activation_date = get_option($option_name, '');
if ('' === $activation_date) {
$activation_date = current_time('mysql');
update_option($option_name, $activation_date);
}
}
});
}
/**
* Adds text domain used in a library
*/
private function init_translations(\FSVendor\WPDesk_Plugin_Info $plugin_info)
{
$lang_dir = 'lang';
if (method_exists($plugin_info, 'get_language_dir')) {
$lang_dir = $plugin_info->get_language_dir();
}
$text_domain = $plugin_info->get_text_domain();
add_filter('doing_it_wrong_trigger_error', function ($doing_it_wrong, $function, $message, $version) use ($text_domain) {
if (wp_get_environment_type() === 'production' && $function === '_load_textdomain_just_in_time' && strpos($message, '<code>' . $text_domain . '</code>') !== \false) {
return \false;
}
return $doing_it_wrong;
}, 10, 4);
\load_plugin_textdomain($plugin_info->get_text_domain(), \false, basename($plugin_info->get_plugin_dir()) . "/{$lang_dir}/");
}
/**
* Factory method creates requirement checker to run the checks
*
* @return \WPDesk_Requirement_Checker
*/
private function create_requirements_checker()
{
/** @var \WPDesk_Requirement_Checker_Factory $requirements_checker_factory */
$requirements_checker_factory = new \FSVendor\WPDesk_Basic_Requirement_Checker_Factory();
return $requirements_checker_factory->create_from_requirement_array(__FILE__, $this->plugin_name, $this->requirements, $this->plugin_text_domain);
}
/**
* Factory method creates \WPDesk_Plugin_Info to bootstrap info about plugin in one place
*
* TODO: move to WPDesk_Plugin_Info factory
*
* @return \WPDesk_Plugin_Info
*/
private function get_plugin_info()
{
$plugin_info = new \FSVendor\WPDesk_Plugin_Info();
$plugin_info->set_plugin_file_name(plugin_basename($this->plugin_file));
$plugin_info->set_plugin_name($this->plugin_name);
$plugin_info->set_plugin_dir($this->plugin_dir);
$plugin_info->set_class_name($this->plugin_class_name);
$plugin_info->set_version($this->plugin_version);
$plugin_info->set_product_id($this->product_id);
$plugin_info->set_text_domain($this->plugin_text_domain);
$plugin_info->set_plugin_url(plugins_url(dirname(plugin_basename($this->plugin_file))));
$plugin_info->set_plugin_shops($this->plugin_shops);
return $plugin_info;
}
}