@@ -19,12 +19,12 @@ class Stackable_Useful_Plugins {
1919 'cimo-image-optimizer ' => array (
2020 'slug ' => 'cimo-image-optimizer ' ,
2121 'full_slug ' => 'cimo-image-optimizer/cimo.php ' ,
22+ 'premium_slug ' => 'cimo-image-optimizer-premium ' ,
23+ 'premium_full_slug ' => 'cimo-image-optimizer-premium/cimo.php ' ,
2224 ),
2325 );
2426
2527 function __construct () {
26- add_action ( 'admin_init ' , array ( $ this , 'register_settings ' ) );
27-
2828 // Register action on 'admin_menu' to ensure filters for the editor and admin settings
2929 // are added early, before those scripts are enqueued and filters are applied.
3030 add_action ( 'admin_menu ' , array ( $ this , 'get_useful_plugins_info ' ) );
@@ -42,20 +42,6 @@ function __construct() {
4242 }
4343 }
4444
45- public function register_settings () {
46- register_setting (
47- 'stackable_editor_settings ' ,
48- 'stackable_hide_cimo_notice ' ,
49- array (
50- 'type ' => 'boolean ' ,
51- 'description ' => __ ( 'Hides the Cimo download notice. ' , STACKABLE_I18N ),
52- 'sanitize_callback ' => 'rest_sanitize_boolean ' ,
53- 'show_in_rest ' => true ,
54- 'default ' => false ,
55- )
56- );
57- }
58-
5945 public static function is_plugin_installed ( $ plugin_slug ) {
6046 if ( ! function_exists ( 'get_plugins ' ) ) {
6147 include_once ( ABSPATH . 'wp-admin/includes/plugin.php ' );
@@ -103,13 +89,35 @@ public function get_useful_plugins_info() {
10389
10490 foreach ( self ::$ PLUGINS as $ key => $ plugin ) {
10591 $ status = 'not_installed ' ;
106-
107- if ( isset ( $ all_plugins [ $ plugin ['full_slug ' ] ] ) ) {
108- $ status = 'installed ' ;
92+ $ full_slug_to_use = $ plugin ['full_slug ' ];
93+ $ has_premium = false ;
94+
95+ // Check for premium version first if it exists (premium takes precedence)
96+ $ premium_installed = false ;
97+ $ premium_activated = false ;
98+ if ( isset ( $ plugin ['premium_full_slug ' ] ) ) {
99+ $ premium_installed = isset ( $ all_plugins [ $ plugin ['premium_full_slug ' ] ] );
100+ $ premium_activated = is_plugin_active ( $ plugin ['premium_full_slug ' ] );
101+
102+ if ( $ premium_installed ) {
103+ $ has_premium = true ;
104+ $ full_slug_to_use = $ plugin ['premium_full_slug ' ];
105+ }
106+
107+ $ status = $ premium_activated ? 'activated ' : ( $ premium_installed ? 'installed ' : 'not_installed ' );
109108 }
110109
111- if ( is_plugin_active ( $ plugin ['full_slug ' ] ) ) {
112- $ status = 'activated ' ;
110+ // If premium is not installed/activated, check free version
111+ if ( $ status === 'not_installed ' ) {
112+ if ( isset ( $ all_plugins [ $ plugin ['full_slug ' ] ] ) ) {
113+ $ status = 'installed ' ;
114+ $ full_slug_to_use = $ plugin ['full_slug ' ];
115+ }
116+
117+ if ( is_plugin_active ( $ plugin ['full_slug ' ] ) ) {
118+ $ status = 'activated ' ;
119+ $ full_slug_to_use = $ plugin ['full_slug ' ];
120+ }
113121 }
114122
115123 $ plugin_info = plugins_api ( 'plugin_information ' , [
@@ -127,25 +135,26 @@ public function get_useful_plugins_info() {
127135 $ data_to_localize [ $ key ] = array (
128136 'status ' => $ status ,
129137 'icon ' => $ icon_url ,
130- 'fullSlug ' => $ plugin [ ' full_slug ' ] ,
138+ 'fullSlug ' => $ full_slug_to_use ,
131139 );
132140 }
133141
134142 // Make Cimo available in the block editor
135- $ this ->add_cimo_args_to_localize_editor ( $ data_to_localize , $ current_user_cap );
143+ $ this ->add_cimo_args_to_localize_editor ( $ data_to_localize , $ current_user_cap, $ has_premium );
136144 // Make all plugin data and the ajax url available in the admin settings
137145 $ this ->add_args_to_localize_admin ( $ data_to_localize );
138146 }
139147
140- public function add_cimo_args_to_localize_editor ( $ data_to_localize , $ current_user_cap ) {
148+ public function add_cimo_args_to_localize_editor ( $ data_to_localize , $ current_user_cap, $ has_premium ) {
141149 $ slug = 'cimo-image-optimizer ' ;
142- $ full_slug = self ::$ PLUGINS [ $ slug ][ 'full_slug ' ];
150+ $ full_slug = $ data_to_localize [ $ slug ][ 'fullSlug ' ];
151+
143152
144153 $ cimo_data = $ data_to_localize [ $ slug ];
145154 $ cimo_data ['nonce ' ] = wp_create_nonce ( 'stackable_cimo_status ' );
146155 $ action_link = '' ;
147156
148- if ( $ current_user_cap === 2 && $ cimo_data [ 'status ' ] === 'not_installed ' ) {
157+ if ( $ current_user_cap === 2 && $ cimo_data [ 'status ' ] === 'not_installed ' && ! $ has_premium ) {
149158 $ action_link = wp_nonce_url (
150159 add_query_arg (
151160 [
@@ -281,25 +290,42 @@ function check_cimo_status() {
281290 return ;
282291 }
283292
284- $ full_slug = self ::$ PLUGINS [ $ slug ][ 'full_slug ' ];
293+ $ plugin_config = self ::$ PLUGINS [ $ slug ];
294+ $ premium_full_slug = isset ( $ plugin_config ['premium_full_slug ' ] ) ? $ plugin_config ['premium_full_slug ' ] : null ;
295+ $ full_slug = $ plugin_config ['full_slug ' ];
285296
286297 // Clear plugin cache to ensure we get the most current status
287298 wp_clean_plugins_cache ();
288299
289- if ( $ action === 'install ' && ! self ::is_plugin_installed ( $ full_slug ) ) {
290- $ response [ 'status ' ] = 'not_installed ' ;
291- } else if ( ! self ::is_plugin_activated ( $ full_slug ) ) {
292- $ response [ 'status ' ] = 'installed ' ;
293- // If the plugin is installed and not activated, provide the action link to activate it
294- $ response [ 'action ' ] = $ action === 'install ' ? html_entity_decode ( wp_nonce_url (
300+ // Check premium version first
301+ $ is_premium_installed = $ premium_full_slug && self ::is_plugin_installed ( $ premium_full_slug );
302+ $ is_premium_activated = $ premium_full_slug && self ::is_plugin_activated ( $ premium_full_slug );
303+ $ is_regular_installed = self ::is_plugin_installed ( $ full_slug );
304+ $ is_regular_activated = self ::is_plugin_activated ( $ full_slug );
305+
306+ // Determine which version to use (premium takes precedence)
307+ $ full_slug_to_use = null ;
308+ if ( $ is_premium_activated || $ is_premium_installed ) {
309+ $ full_slug_to_use = $ premium_full_slug ;
310+ $ response ['status ' ] = $ is_premium_activated ? 'activated ' : 'installed ' ;
311+ } else if ( $ is_regular_activated || $ is_regular_installed ) {
312+ $ full_slug_to_use = $ full_slug ;
313+ $ response ['status ' ] = $ is_regular_activated ? 'activated ' : 'installed ' ;
314+ } else {
315+ $ response ['status ' ] = 'not_installed ' ;
316+ }
317+
318+ // If plugin is installed but not activated, provide activation link
319+ if ( $ response ['status ' ] === 'installed ' && $ full_slug_to_use ) {
320+ $ response ['action ' ] = $ action === 'install ' ? html_entity_decode ( wp_nonce_url (
295321 add_query_arg (
296322 [
297323 'action ' => 'activate ' ,
298- 'plugin ' => $ full_slug ,
324+ 'plugin ' => $ full_slug_to_use ,
299325 ],
300326 admin_url ( 'plugins.php ' )
301327 ),
302- 'activate-plugin_ ' . $ full_slug
328+ 'activate-plugin_ ' . $ full_slug_to_use
303329 ) ) : '' ;
304330 }
305331
0 commit comments