PluginProbe
WindPress – Tailwind CSS integration for WordPress / 3.2.89
WindPress – Tailwind CSS integration for WordPress v3.2.89
3.2.89 3.2.88 3.2.87 3.2.86 3.2.85 3.2.84 3.2.83 3.2.82 3.2.81 trunk 3.0.0 3.0.1 3.0.10 3.0.11 3.0.12 3.0.13 3.0.14 3.0.15 3.0.16 3.0.17 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 All 143 releases
← All changes | src/Plugin.php +90 -23 3.0.13.2.89 View file →
@@ -10,17 +10,23 @@
10 10 */
11 11 declare (strict_types=1);
12 12 namespace WindPress\WindPress;
13 13
14 -use WindPressPackages\EDD_SL\PluginUpdater;
14 +use EasyDigitalDownloads\Updater\Registry;
15 15 use Exception;
16 16 use WIND_PRESS;
17 -use WP_Upgrader;
17 +use WindPress\WindPress\Abilities\Loader as AbilitiesLoader;
18 18 use WindPress\WindPress\Admin\AdminPage;
19 19 use WindPress\WindPress\Api\Router as ApiRouter;
20 20 use WindPress\WindPress\Core\Runtime;
21 +use WindPress\WindPress\Core\Scanner\SourceRevision;
21 22 use WindPress\WindPress\Integration\Loader as IntegrationLoader;
23 +use WindPress\WindPress\Licensing\Manager as LicenseManager;
24 +use WindPress\WindPress\Upgrade\UpgradeManager;
25 +use WindPress\WindPress\Utils\Cache as UtilsCache;
26 +use WindPress\WindPress\Utils\Common;
22 27 use WindPress\WindPress\Utils\Notice;
28 +use WP_Upgrader;
23 29 /**
24 30 * Manage the plugin lifecycle and provides a single point of entry to the plugin.
25 31 *
26 32 * @since 3.0.0
@@ -27,12 +33,12 @@
27 33 */
28 34 final class Plugin
29 35 {
30 36 /**
31 - * Easy Digital Downloads Software Licensing integration wrapper.
37 + * Easy Digital Downloads Software Licensing integration manager.
32 38 * Pro version only.
33 39 *
34 - * @var PluginUpdater|null
40 + * @var LicenseManager|null
35 41 */
36 42 public $plugin_updater = null;
37 43 /**
38 44 * Stores the instance, implementing a Singleton pattern.
@@ -80,8 +86,10 @@
80 86 */
81 87 public function boot(): void
82 88 {
83 89 do_action('a!windpress/plugin:boot.start');
90 + SourceRevision::register_hooks();
91 + $this->boot_license_sdk();
84 92 // (de)activation hooks.
85 93 register_activation_hook(WIND_PRESS::FILE, fn() => $this->activate_plugin());
86 94 register_deactivation_hook(WIND_PRESS::FILE, fn() => $this->deactivate_plugin());
87 95 // upgrade hooks.
@@ -93,14 +101,25 @@
93 101 }
94 102 }
95 103 }
96 104 }, 10, 2);
97 - $this->maybe_update_plugin();
98 105 add_action('plugins_loaded', fn() => $this->plugins_loaded(), 9);
99 106 add_action('init', fn() => $this->init_plugin());
100 107 do_action('a!windpress/plugin:boot.end');
101 108 }
102 109 /**
110 + * Get the initialized license manager.
111 + * Pro version only.
112 + */
113 + public function maybe_update_plugin(): ?LicenseManager
114 + {
115 + return $this->plugin_updater instanceof LicenseManager ? $this->plugin_updater : null;
116 + }
117 + public static function is_pro_edition(): bool
118 + {
119 + return is_file(self::get_license_sdk_path());
120 + }
121 + /**
103 122 * Handle the plugin's activation by (maybe) running database migrations
104 123 * and initializing the plugin configuration.
105 124 */
106 125 private function activate_plugin(): void
@@ -106,9 +125,12 @@
106 125 private function activate_plugin(): void
107 126 {
108 127 do_action('a!windpress/plugin:activate_plugin.start');
109 128 update_option(WIND_PRESS::WP_OPTION . '_version', WIND_PRESS::VERSION);
110 - $this->maybe_embedded_license();
129 + if ($this->plugin_updater instanceof LicenseManager) {
130 + $this->maybe_embedded_license();
131 + $this->plugin_updater->clear_cache();
132 + }
111 133 do_action('a!windpress/plugin:activate_plugin.end');
112 134 }
113 135 /**
114 136 * Handle plugin's deactivation by (maybe) cleaning up after ourselves.
@@ -123,8 +145,9 @@
123 145 */
124 146 private function upgrade_plugin(): void
125 147 {
126 148 do_action('a!windpress/plugin:upgrade_plugin.start');
149 + UpgradeManager::get_instance()->run();
127 150 do_action('a!windpress/plugin:upgrade_plugin.end');
128 151 }
129 152 /**
130 153 * Initialize the plugin on WordPress' `init` hook.
@@ -132,13 +155,18 @@
132 155 private function init_plugin(): void
133 156 {
134 157 do_action('a!windpress/plugin:init_plugin.start');
135 158 // Load translations.
136 - // load_plugin_textdomain(WIND_PRESS::TEXT_DOMAIN, false, dirname(plugin_basename(WIND_PRESS::FILE)) . '/languages/');
159 + if (defined('WindPressDeps\WIND_PRESS_LOAD_TEXT_DOMAIN') && constant('WIND_PRESS_LOAD_TEXT_DOMAIN')) {
160 + load_plugin_textdomain(WIND_PRESS::TEXT_DOMAIN, \false, dirname(plugin_basename(WIND_PRESS::FILE)) . '/languages/');
161 + }
137 162 new ApiRouter();
138 163 Runtime::get_instance()->init();
139 164 // Instantiate the AdminPage class.
140 165 new AdminPage();
166 + UtilsCache::exclude_optimization();
167 + // Initialize Abilities API integration
168 + AbilitiesLoader::get_instance()->init();
141 169 do_action('a!windpress/plugin:init_plugin.end');
142 170 }
143 171 /**
144 172 * Initialize the plugin on WordPress' `plugins_loaded` hook.
@@ -164,35 +192,62 @@
164 192 private function plugin_action_links(array $links): array
165 193 {
166 194 $base_url = AdminPage::get_page_url();
167 195 array_unshift($links, sprintf('<a href="%s">%s</a>', esc_url(sprintf('%s#/settings', $base_url)), esc_html__('Settings', 'windpress')));
196 + if (!Common::is_updater_library_available()) {
197 + array_unshift($links, sprintf('<a href="%s" style="color:#067b34;font-weight:600;" target="_blank">%s</a>', esc_url(Common::plugin_data('PluginURI') . '?utm_source=WordPress&utm_campaign=liteplugin&utm_medium=plugin-action-links&utm_content=Upgrade#pricing'), esc_html__('Upgrade to Pro', 'windpress')));
198 + }
168 199 return $links;
169 200 }
170 201 /**
171 - * Initialize the plugin updater.
172 - * Pro version only.
173 - *
174 - * @return PluginUpdater
202 + * Register the plugin with EDD's official Software Licensing SDK.
175 203 */
176 - public function maybe_update_plugin()
204 + private function boot_license_sdk(): void
177 205 {
178 - if (!class_exists(PluginUpdater::class)) {
179 - return null;
206 + $sdk_path = self::get_license_sdk_path();
207 + if (!is_file($sdk_path)) {
208 + return;
180 209 }
181 - if ($this->plugin_updater instanceof \WindPressPackages\EDD_SL\PluginUpdater) {
182 - return $this->plugin_updater;
210 + $this->plugin_updater = new LicenseManager();
211 + add_action('init', [$this->plugin_updater, 'boot_updater']);
212 + add_action('edd_sl_sdk_registry', function ($registry): void {
213 + $this->register_license_integration($registry);
214 + });
215 + require_once $sdk_path;
216 + // Plugin activation can happen after the SDK initialization hooks ran.
217 + if (did_action('after_setup_theme') && class_exists(Registry::class)) {
218 + $this->register_license_integration(Registry::instance());
183 219 }
184 - $license = get_option(WIND_PRESS::WP_OPTION . '_license', ['key' => '', 'opt_in_pre_release' => \false]);
185 - $this->plugin_updater = new PluginUpdater(WIND_PRESS::WP_OPTION, ['version' => WIND_PRESS::VERSION, 'license' => $license['key'] ? trim($license['key']) : \false, 'beta' => $license['opt_in_pre_release'], 'plugin_file' => WIND_PRESS::FILE, 'item_id' => WIND_PRESS::EDD_STORE['item_id'], 'store_url' => WIND_PRESS::EDD_STORE['store_url'], 'author' => WIND_PRESS::EDD_STORE['author']]);
186 - return $this->plugin_updater;
187 220 }
188 221 /**
222 + * @param mixed $registry
223 + */
224 + private function register_license_integration($registry): void
225 + {
226 + if (!$registry instanceof Registry) {
227 + return;
228 + }
229 + if (!$registry->offsetExists(LicenseManager::INTEGRATION_ID)) {
230 + $registry->register(LicenseManager::get_integration_args());
231 + }
232 + $handler = $registry->offsetGet(LicenseManager::INTEGRATION_ID);
233 + if (is_object($handler) && method_exists($handler, 'auto_updater')) {
234 + // The SDK registry does not pass wp_override or beta through in
235 + // version 1.0.3, so Manager boots the official updater directly.
236 + remove_action('init', [$handler, 'auto_updater']);
237 + }
238 + }
239 + private static function get_license_sdk_path(): string
240 + {
241 + return dirname(WIND_PRESS::FILE) . '/vendor/easy-digital-downloads/edd-sl-sdk/edd-sl-sdk.php';
242 + }
243 + /**
189 244 * Check if the plugin distributed with an embedded license and activate the license.
190 245 * Pro version only.
191 246 */
192 247 private function maybe_embedded_license(): void
193 248 {
194 - if (!class_exists(PluginUpdater::class)) {
249 + if (!$this->plugin_updater instanceof LicenseManager) {
195 250 return;
196 251 }
197 252 $license_file = dirname(WIND_PRESS::FILE) . '/license-data.php';
198 253 if (!file_exists($license_file)) {
@@ -198,10 +253,22 @@
198 253 if (!file_exists($license_file)) {
199 254 return;
200 255 }
201 256 require_once $license_file;
202 - $const_name = 'ROSUA_EMBEDDED_LICENSE_KEY_' . WIND_PRESS::EDD_STORE['item_id'];
203 - if (!defined($const_name)) {
257 + $const_names = [
258 + 'WIND_PRESS_EMBEDDED_LICENSE_KEY_' . WIND_PRESS::EDD_STORE['item_id'],
259 + 'JOOOSI_EMBEDDED_LICENSE_KEY_' . WIND_PRESS::EDD_STORE['item_id'],
260 + // Preserve the embedded-license constant used by previous releases.
261 + 'ROSUA_EMBEDDED_LICENSE_KEY_' . WIND_PRESS::EDD_STORE['item_id'],
262 + ];
263 + $const_name = null;
264 + foreach ($const_names as $candidate) {
265 + if (defined($candidate)) {
266 + $const_name = $candidate;
267 + break;
268 + }
269 + }
270 + if ($const_name === null) {
204 271 return;
205 272 }
206 273 $license_key = constant($const_name);
207 274 update_option(WIND_PRESS::WP_OPTION . '_license', ['key' => $license_key, 'opt_in_pre_release' => \false]);
@@ -206,7 +273,7 @@
206 273 $license_key = constant($const_name);
207 274 update_option(WIND_PRESS::WP_OPTION . '_license', ['key' => $license_key, 'opt_in_pre_release' => \false]);
208 275 wp_delete_file($license_file);
209 276 // activate the license.
210 - $this->maybe_update_plugin()->activate($license_key);
277 + $this->plugin_updater->activate((string) $license_key);
211 278 }
212 279 }