1<?php
2
3namespace GoDaddy\WordPress\MWC\Core;
4
5use Exception;
6use GoDaddy\WordPress\MWC\Common\Admin\Notices\Notices;
7use GoDaddy\WordPress\MWC\Common\Components\Contracts\ComponentContract;
8use GoDaddy\WordPress\MWC\Common\Components\Exceptions\ComponentLoadFailedException;
9use GoDaddy\WordPress\MWC\Common\Components\Traits\HasComponentsFromContainerTrait;
10use GoDaddy\WordPress\MWC\Common\Plugin\BasePlatformPlugin;
11use GoDaddy\WordPress\MWC\Common\Traits\IsSingletonTrait;
12use GoDaddy\WordPress\MWC\Core\API\API;
13use GoDaddy\WordPress\MWC\Core\Auth\API\API as AuthenticationAPI;
14use GoDaddy\WordPress\MWC\Core\Auth\Sso\WordPress\WordPressSso;
15use GoDaddy\WordPress\MWC\Core\Client\Client;
16use GoDaddy\WordPress\MWC\Core\Events\Producers;
17use GoDaddy\WordPress\MWC\Core\FeatureFlags\ConfigurationLoader;
18use GoDaddy\WordPress\MWC\Core\Features\Assistant\Assistant;
19use GoDaddy\WordPress\MWC\Core\Features\CartRecoveryEmails\CartRecoveryEmails;
20use GoDaddy\WordPress\MWC\Core\Features\Commerce\Backfill\CommerceBackfill;
21use GoDaddy\WordPress\MWC\Core\Features\Commerce\Catalog\CommerceRemoteProductListOptionsUpdate;
22use GoDaddy\WordPress\MWC\Core\Features\Commerce\Commerce;
23use GoDaddy\WordPress\MWC\Core\Features\Commerce\CommerceCustomerPush;
24use GoDaddy\WordPress\MWC\Core\Features\Commerce\Polling\CommercePolling;
25use GoDaddy\WordPress\MWC\Core\Features\Commerce\V2\Mapping\CommerceCatalogV2Mapping;
26use GoDaddy\WordPress\MWC\Core\Features\Commerce\Webhooks\CommerceWebhooks;
27use GoDaddy\WordPress\MWC\Core\Features\ConnectedCommerce\ConnectedCommerce;
28use GoDaddy\WordPress\MWC\Core\Features\CostOfGoods\CostOfGoods;
29use GoDaddy\WordPress\MWC\Core\Features\EmailNotifications\EmailNotifications;
30use GoDaddy\WordPress\MWC\Core\Features\ExternalDomainControls\ExternalDomainControls;
31use GoDaddy\WordPress\MWC\Core\Features\GiftCertificates\GiftCertificates;
32use GoDaddy\WordPress\MWC\Core\Features\GoDaddyPayments\GoDaddyPayments;
33use GoDaddy\WordPress\MWC\Core\Features\GoogleAnalytics\GoogleAnalytics;
34use GoDaddy\WordPress\MWC\Core\Features\Marketplaces\Marketplaces;
35use GoDaddy\WordPress\MWC\Core\Features\Onboarding\Dashboard as OnboardingDashboard;
36use GoDaddy\WordPress\MWC\Core\Features\Onboarding\Onboarding;
37use GoDaddy\WordPress\MWC\Core\Features\PluginControls\PluginControls;
38use GoDaddy\WordPress\MWC\Core\Features\SequentialOrderNumbers\SequentialOrderNumbers;
39use GoDaddy\WordPress\MWC\Core\Features\Shipping\Shipping;
40use GoDaddy\WordPress\MWC\Core\Features\UrlCoupons\UrlCoupons;
41use GoDaddy\WordPress\MWC\Core\Features\WebVitals\WebVitals;
42use GoDaddy\WordPress\MWC\Core\Features\Worldpay\Worldpay;
43use GoDaddy\WordPress\MWC\Core\Interceptors\Interceptors;
44use GoDaddy\WordPress\MWC\Core\Pages\Plugins\IncludedWooCommerceExtensionsTab;
45use GoDaddy\WordPress\MWC\Core\Payments\Poynt\OrderSynchronization;
46use GoDaddy\WordPress\MWC\Core\Payments\Poynt\ViewOrderPage;
47use GoDaddy\WordPress\MWC\Core\Webhooks\Webhooks;
48use GoDaddy\WordPress\MWC\Core\WooCommerce\ExtensionsTab;
49use GoDaddy\WordPress\MWC\Core\WooCommerce\Overrides\Overrides;
50use GoDaddy\WordPress\MWC\Core\WooCommerce\Payments\CorePaymentGateways;
51use GoDaddy\WordPress\MWC\Core\WooCommerce\Shipping\CoreShippingMethods;
52use GoDaddy\WordPress\MWC\Core\WooCommerce\Shipping\LocalPickup;
53use GoDaddy\WordPress\MWC\Core\WooCommerce\Shipping\RemoveShipmentTrackingFromManagedWordPressSites;
54use GoDaddy\WordPress\MWC\Core\WooCommerce\Shipping\ShipmentTracking;
55use GoDaddy\WordPress\MWC\Core\WooCommerce\Updates;
56
57/**
58 * MWC Core package class.
59 */
60class Package extends BasePlatformPlugin
61{
62 use HasComponentsFromContainerTrait;
63 use IsSingletonTrait;
64
65 /** @var string plugin name */
66 protected $name = 'mwc-core';
67
68 /** @var array classes to instantiate */
69 protected $classesToInstantiate = [
70 CorePaymentGateways::class => 'web',
71 ExtensionsTab::class => 'web',
72 Producers::class => 'web',
73 RemoveShipmentTrackingFromManagedWordPressSites::class => 'web',
74 ShipmentTracking::class => 'web',
75 LocalPickup::class => 'web',
76 CoreShippingMethods::class => 'web',
77 Updates::class => 'web',
78 Client::class => 'web',
79 IncludedWooCommerceExtensionsTab::class => 'web',
80 ViewOrderPage::class => 'web',
81
82 // TODO: is this overkill? is there a better place to be loading this? {JS - 2021-10-17}
83 OrderSynchronization::class => true,
84 ];
85
86 /** @var class-string<ComponentContract>[] */
87 protected $componentClasses = [
88 Assistant::class,
89 GiftCertificates::class,
90 Onboarding::class,
91 OnboardingDashboard::class,
92 Overrides::class,
93 SequentialOrderNumbers::class,
94 UrlCoupons::class,
95 AuthenticationAPI::class,
96 CartRecoveryEmails::class,
97 ConnectedCommerce::class,
98 Commerce::class,
99 CommerceBackfill::class,
100 CommerceCatalogV2Mapping::class,
101 CommerceRemoteProductListOptionsUpdate::class,
102 CommerceCustomerPush::class,
103 CommercePolling::class,
104 CommerceWebhooks::class,
105 CostOfGoods::class,
106 Interceptors::class,
107 GoogleAnalytics::class,
108 EmailNotifications::class,
109 Marketplaces::class,
110 Notices::class,
111 PluginControls::class,
112 Shipping::class,
113 API::class,
114 GoDaddyPayments::class,
115 Worldpay::class,
116 WordPressSso::class,
117 ExternalDomainControls::class,
118 Webhooks::class,
119 WebVitals::class,
120 ];
121
122 /**
123 * Gets configuration values.
124 *
125 * @return array
126 */
127 protected function getConfigurationValues() : array
128 {
129 return array_merge(parent::getConfigurationValues(), [
130 'version' => '5.1.2',
131 'plugin_dir' => dirname(__DIR__),
132 'plugin_url' => plugin_dir_url(__DIR__),
133 ]);
134 }
135
136 /**
137 * Instantiates the plugin specific classes.
138 *
139 * @throws ComponentLoadFailedException|Exception
140 */
141 protected function instantiatePluginClasses() : void
142 {
143 static::maybeLoadComponent(ConfigurationLoader::class);
144
145 parent::instantiatePluginClasses();
146 }
147}
148