Skip to content

Commit 4bfab68

Browse files
authored
Fix: cimo premium upsell (#3653)
* move setting registration * activate cimo premium if installed
1 parent 7d01e08 commit 4bfab68

File tree

2 files changed

+73
-35
lines changed

2 files changed

+73
-35
lines changed

src/editor-settings.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,18 @@ function __construct() {
3030
* @return void
3131
*/
3232
public function register_settings() {
33+
register_setting(
34+
'stackable_editor_settings',
35+
'stackable_hide_cimo_notice',
36+
array(
37+
'type' => 'boolean',
38+
'description' => __( 'Hides the Cimo download notice.', STACKABLE_I18N ),
39+
'sanitize_callback' => 'rest_sanitize_boolean',
40+
'show_in_rest' => true,
41+
'default' => false,
42+
)
43+
);
44+
3345
register_setting(
3446
'stackable_editor_settings',
3547
'stackable_block_states',

src/welcome/useful-plugins.php

Lines changed: 61 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)