flexible-shipping
/
vendor_prefixed
/
octolize
/
wp-shipping-extensions
/
src
/
ShippingExtensions
/
Page.php
flexible-shipping
/
vendor_prefixed
/
octolize
/
wp-shipping-extensions
/
src
/
ShippingExtensions
Last commit date
Plugin
1 week ago
Promo
1 week ago
Tracker
1 week ago
views
1 week ago
AdminPage.php
1 week ago
Assets.php
1 week ago
DateRange.php
1 week ago
Page.php
1 week ago
PageViewTracker.php
1 week ago
PluginLinks.php
1 week ago
ShippingExtensions.php
1 week ago
TimedUpdate.php
1 week ago
TimedUpdates.php
1 week ago
WooCommerceSuggestions.php
1 week ago
Page.php
149 lines
| 1 | <?php |
| 2 | |
| 3 | namespace FSVendor\Octolize\ShippingExtensions; |
| 4 | |
| 5 | use FSVendor\Octolize\ShippingExtensions\Plugin\Plugin; |
| 6 | use FSVendor\Octolize\ShippingExtensions\Plugin\PluginFactory; |
| 7 | use FSVendor\Octolize\ShippingExtensions\Plugin\PluginSorter; |
| 8 | use FSVendor\Octolize\ShippingExtensions\Tracker\ViewPageTracker; |
| 9 | use FSVendor\WPDesk\PluginBuilder\Plugin\Hookable; |
| 10 | /** |
| 11 | * . |
| 12 | */ |
| 13 | class Page implements Hookable |
| 14 | { |
| 15 | private const PARENT_SLUG = 'woocommerce'; |
| 16 | public const MENU_SLUG = 'octolize-shipping-extensions'; |
| 17 | public const SCREEN_ID = 'woocommerce_page_' . self::MENU_SLUG; |
| 18 | /** |
| 19 | * @var string |
| 20 | */ |
| 21 | private $assets_url; |
| 22 | /** |
| 23 | * @var ViewPageTracker |
| 24 | */ |
| 25 | private $view_page_tracker; |
| 26 | /** |
| 27 | * @param string $assets_url . |
| 28 | * @param ViewPageTracker $view_page_tracker . |
| 29 | */ |
| 30 | public function __construct(string $assets_url, ViewPageTracker $view_page_tracker) |
| 31 | { |
| 32 | $this->assets_url = $assets_url; |
| 33 | $this->view_page_tracker = $view_page_tracker; |
| 34 | } |
| 35 | /** |
| 36 | * @return void |
| 37 | */ |
| 38 | public function hooks(): void |
| 39 | { |
| 40 | add_action('admin_menu', [$this, 'add_page'], 100); |
| 41 | } |
| 42 | /** |
| 43 | * @return void |
| 44 | */ |
| 45 | public function add_page(): void |
| 46 | { |
| 47 | add_submenu_page(self::PARENT_SLUG, _x('Shipping Extensions', 'Page title', 'flexible-shipping'), $this->get_menu_title(), 'manage_options', self::MENU_SLUG, [$this, 'render_page']); |
| 48 | } |
| 49 | /** |
| 50 | * @return void |
| 51 | */ |
| 52 | public function render_page(): void |
| 53 | { |
| 54 | wp_enqueue_style(Assets::HANDLE); |
| 55 | $assets_url = $this->assets_url; |
| 56 | $plugins = $this->get_plugins(); |
| 57 | $categories = $this->get_categories(); |
| 58 | $header_promo = $this->get_header_promo(); |
| 59 | require_once __DIR__ . '/views/html-shipping-extensions-page.php'; |
| 60 | } |
| 61 | /** |
| 62 | * @return string |
| 63 | */ |
| 64 | private function get_menu_title(): string |
| 65 | { |
| 66 | $menu_title = nl2br(_x("Shipping\nExtensions", 'Menu Title', 'flexible-shipping')); |
| 67 | if ($this->should_add_badge()) { |
| 68 | $menu_title .= ' <span class="update-plugins"><span class="update-count">1</span></span>'; |
| 69 | } |
| 70 | return $menu_title; |
| 71 | } |
| 72 | /** |
| 73 | * @return bool |
| 74 | */ |
| 75 | private function should_add_badge(): bool |
| 76 | { |
| 77 | if (isset($_GET['page']) && sanitize_key(wp_unslash($_GET['page'])) === self::MENU_SLUG) { |
| 78 | return \false; |
| 79 | } |
| 80 | return apply_filters('octolize/shipping-extensions/should-add-badge', !$this->view_page_tracker->option_exists(), $this->view_page_tracker); |
| 81 | } |
| 82 | /** |
| 83 | * @return Plugin[] |
| 84 | */ |
| 85 | private function get_plugins(): array |
| 86 | { |
| 87 | $plugins = PluginFactory::get_plugins(); |
| 88 | list($plugins_priority, $categories_priority) = $this->get_plugins_and_categorites_priority(); |
| 89 | $sorter = new PluginSorter($plugins, $plugins_priority, $categories_priority); |
| 90 | return array_values($sorter->sort()); |
| 91 | } |
| 92 | /** |
| 93 | * @return array |
| 94 | */ |
| 95 | private function get_plugins_and_categorites_priority(): array |
| 96 | { |
| 97 | $active_plugins = get_option('active_plugins'); |
| 98 | $categories = PluginFactory::get_categories(); |
| 99 | $plugins_priority = []; |
| 100 | $categories_priority = []; |
| 101 | if (in_array('flexible-shipping/flexible-shipping.php', $active_plugins, \true)) { |
| 102 | $plugins_priority[] = 'flexible-shipping-pro/flexible-shipping-pro.php'; |
| 103 | $plugins_priority[] = 'fs-bundle'; |
| 104 | $categories_priority[] = $categories[PluginFactory::CATEGORY_CUSTOMIZABLE_RATES]; |
| 105 | $categories_priority[] = $categories[PluginFactory::CATEGORY_SHIPPING_LABELS]; |
| 106 | $categories_priority[] = $categories[PluginFactory::CATEGORY_LIVE_RATES]; |
| 107 | $categories_priority[] = $categories[PluginFactory::CATEGORY_BUNDLES]; |
| 108 | } |
| 109 | if (in_array('flexible-shipping-ups/flexible-shipping-ups.php', $active_plugins, \true)) { |
| 110 | $plugins_priority[] = 'flexible-shipping-ups-pro/flexible-shipping-ups-pro.php'; |
| 111 | $plugins_priority[] = 'flexible-shipping-ups-labels/flexible-shipping-ups-labels.php'; |
| 112 | $plugins_priority[] = 'ups-bundle'; |
| 113 | $plugins_priority[] = 'flexible-shipping-conditional-methods/flexible-shipping-conditional-methods.php'; |
| 114 | $categories_priority[] = $categories[PluginFactory::CATEGORY_LIVE_RATES]; |
| 115 | $categories_priority[] = $categories[PluginFactory::CATEGORY_CUSTOMIZABLE_RATES]; |
| 116 | $categories_priority[] = $categories[PluginFactory::CATEGORY_SHIPPING_LABELS]; |
| 117 | $categories_priority[] = $categories[PluginFactory::CATEGORY_BUNDLES]; |
| 118 | } |
| 119 | if (in_array('flexible-shipping-fedex/flexible-shipping-fedex.php', $active_plugins, \true)) { |
| 120 | $plugins_priority[] = 'flexible-shipping-fedex-pro/flexible-shipping-fedex-pro.php'; |
| 121 | $plugins_priority[] = 'flexible-shipping-conditional-methods/flexible-shipping-conditional-methods.php'; |
| 122 | $categories_priority[] = $categories[PluginFactory::CATEGORY_LIVE_RATES]; |
| 123 | $categories_priority[] = $categories[PluginFactory::CATEGORY_CUSTOMIZABLE_RATES]; |
| 124 | $categories_priority[] = $categories[PluginFactory::CATEGORY_SHIPPING_LABELS]; |
| 125 | $categories_priority[] = $categories[PluginFactory::CATEGORY_BUNDLES]; |
| 126 | } |
| 127 | if (in_array('flexible-shipping-dhl-express/flexible-shipping-dhl-express.php', $active_plugins, \true)) { |
| 128 | $plugins_priority[] = 'flexible-shipping-dhl-express-pro/flexible-shipping-dhl-express-pro.php'; |
| 129 | $plugins_priority[] = 'flexible-shipping-conditional-methods/flexible-shipping-conditional-methods.php'; |
| 130 | $categories_priority[] = $categories[PluginFactory::CATEGORY_LIVE_RATES]; |
| 131 | $categories_priority[] = $categories[PluginFactory::CATEGORY_CUSTOMIZABLE_RATES]; |
| 132 | $categories_priority[] = $categories[PluginFactory::CATEGORY_SHIPPING_LABELS]; |
| 133 | $categories_priority[] = $categories[PluginFactory::CATEGORY_BUNDLES]; |
| 134 | } |
| 135 | return [$plugins_priority, $categories_priority]; |
| 136 | } |
| 137 | /** |
| 138 | * @return array |
| 139 | */ |
| 140 | private function get_categories(): array |
| 141 | { |
| 142 | return array_values(PluginFactory::get_categories()); |
| 143 | } |
| 144 | private function get_header_promo(): array |
| 145 | { |
| 146 | return array_values(apply_filters('octolize/shipping-extensions/header-promo', [])); |
| 147 | } |
| 148 | } |
| 149 |