-
Notifications
You must be signed in to change notification settings - Fork 206
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
🚀 enhance: StoreGrowth listed to the admin setup wizard recommendation plugins #2512
Open
devAsadNur
wants to merge
8
commits into
develop
Choose a base branch
from
enhance/storegrowth-to-the-admin-setup-wizard
base: develop
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
64e6bf0
enhance: StoreGrowth added to the admin setup wizard recommendation p…
devAsadNur 2478c22
Merge branch 'develop' into enhance/storegrowth-to-the-admin-setup-wi…
devAsadNur 7064e07
refactor: Recommendation plugins listing display on admin setup wizar…
devAsadNur 705eb76
fix: Removed error log on RecommendedPlugins class
devAsadNur 3ae552a
fix: Black recommended plugins page in case all of the recommended pa…
devAsadNur 8605cc3
refactor: Recommended plugins installation based on user input
devAsadNur c69efea
Merge branch 'develop' into enhance/storegrowth-to-the-admin-setup-wi…
shashwatahalder01 8f03465
Update: setup wizard tests
shashwatahalder01 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
<?php | ||
|
||
namespace WeDevs\Dokan\Admin; | ||
|
||
/** | ||
* Recommended Plugins Class. | ||
* | ||
* @since DOKAN_SINCE | ||
*/ | ||
class RecommendedPlugins { | ||
|
||
/** | ||
* Array of Recommended Plugins. | ||
* | ||
* @var array | ||
*/ | ||
protected array $plugins; | ||
|
||
/** | ||
* Class Constructor. | ||
* | ||
* @since DOKAN_SINCE | ||
*/ | ||
public function __construct() { | ||
$this->plugins = [ | ||
[ | ||
'type' => 'store_growth', | ||
'title' => __( 'StoreGrowth', 'dokan-lite' ), | ||
'description' => __( 'Best WooCommerce Marketing Solution!', 'dokan-lite' ), | ||
'img_url' => DOKAN_PLUGIN_ASSEST . '/images/store-growth-logo.png', | ||
'img_alt' => __( 'StoreGrowth logo', 'dokan-lite' ), | ||
'plugins' => [ | ||
[ | ||
'name' => __( 'StoreGrowth', 'dokan-lite' ), | ||
'slug' => 'storegrowth-sales-booster', | ||
'basename' => 'storegrowth-sales-booster/storegrowth-sales-booster.php', | ||
], | ||
], | ||
], | ||
[ | ||
'type' => 'wemail', | ||
'title' => __( 'weMail', 'dokan-lite' ), | ||
'description' => __( 'Simplified Email Marketing Solution for WordPress!', 'dokan-lite' ), | ||
'img_url' => DOKAN_PLUGIN_ASSEST . '/images/wemail-logo.png', | ||
'img_alt' => __( 'weMail logo', 'dokan-lite' ), | ||
'plugins' => [ | ||
[ | ||
'name' => __( 'weMail', 'dokan-lite' ), | ||
'slug' => 'wemail', | ||
'basename' => 'wemail/wemail.php', | ||
], | ||
], | ||
], | ||
[ | ||
'type' => 'wc_conversion_tracking', | ||
'title' => __( 'WooCommerce Conversion Tracking', 'dokan-lite' ), | ||
'description' => __( 'Track conversions on your WooCommerce store like a pro!', 'dokan-lite' ), | ||
'img_url' => DOKAN_PLUGIN_ASSEST . '/images/wc-conversion-tracking-logo.png', | ||
'img_alt' => __( 'WooCommerce Conversion Tracking logo', 'dokan-lite' ), | ||
'plugins' => [ | ||
[ | ||
'name' => __( 'WooCommerce Conversion Tracking', 'dokan-lite' ), | ||
'slug' => 'woocommerce-conversion-tracking', | ||
'basename' => 'woocommerce-conversion-tracking/conversion-tracking.php', | ||
], | ||
], | ||
], | ||
[ | ||
'type' => 'texty', | ||
'title' => __( 'Texty', 'dokan-lite' ), | ||
'description' => __( 'SMS Notification for WordPress, WooCommerce, Dokan and more!', 'dokan-lite' ), | ||
'img_url' => DOKAN_PLUGIN_ASSEST . '/images/texty-logo.png', | ||
'img_alt' => __( 'Texty logo', 'dokan-lite' ), | ||
'plugins' => [ | ||
[ | ||
'name' => __( 'Texty', 'dokan-lite' ), | ||
'slug' => 'texty', | ||
'basename' => 'texty/texty.php', | ||
], | ||
], | ||
], | ||
]; | ||
} | ||
|
||
/** | ||
* Get All Enlisted Plugins. | ||
* | ||
* @since DOKAN_SINCE | ||
* | ||
* @return array | ||
*/ | ||
protected function get_enlisted_plugins(): array { | ||
return apply_filters( 'dokan_recommended_plugins_list', $this->plugins ); | ||
} | ||
|
||
/** | ||
* Is Plugin Active. | ||
* | ||
* @since DOKAN_SINCE | ||
* | ||
* @param string $basename | ||
* | ||
* @return bool | ||
*/ | ||
protected function is_active( string $basename ): bool { | ||
return apply_filters( 'dokan_recommended_plugin_is_active', is_plugin_active( $basename ), $basename ); | ||
} | ||
|
||
/** | ||
* Get List of Recommended Inactive Plugins. | ||
* | ||
* @since DOKAN_SINCE | ||
* | ||
* @return array | ||
*/ | ||
public function get(): array { | ||
$enlisted_plugins = $this->get_enlisted_plugins(); | ||
|
||
$recommended_plugins = array_filter( | ||
$enlisted_plugins, | ||
function ( $plugin ) { | ||
return isset( $plugin['plugins'][0]['basename'] ) && ! $this->is_active( $plugin['plugins'][0]['basename'] ); | ||
} | ||
); | ||
|
||
return apply_filters( 'dokan_recommended_inactive_plugins', $recommended_plugins ); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -26,6 +26,15 @@ class SetupWizard { | |
*/ | ||
private $deferred_actions = []; | ||
|
||
/** | ||
* Instance of RecommendedPlugins class for managing plugin recommendations. | ||
* | ||
* @since DOKAN_SINCE | ||
* | ||
* @var RecommendedPlugins Handles the retrieval and management of recommended plugins | ||
*/ | ||
private RecommendedPlugins $recommended_plugins; | ||
|
||
/** | ||
* Hook in tabs. | ||
*/ | ||
|
@@ -35,6 +44,8 @@ public function __construct() { | |
} | ||
|
||
if ( current_user_can( 'manage_woocommerce' ) ) { | ||
$this->recommended_plugins = new RecommendedPlugins(); | ||
|
||
add_action( 'admin_menu', [ $this, 'admin_menus' ] ); | ||
add_action( 'admin_init', [ $this, 'setup_wizard' ], 99 ); | ||
|
||
|
@@ -699,58 +710,8 @@ public function dokan_setup_recommended() { | |
<ul class="recommended-step"> | ||
<?php | ||
if ( $this->user_can_install_plugin() ) { | ||
if ( ! $this->is_wc_conversion_tracking_active() ) { | ||
$this->display_recommended_item( | ||
[ | ||
'type' => 'wc_conversion_tracking', | ||
'title' => __( 'WooCommerce Conversion Tracking', 'dokan-lite' ), | ||
'description' => __( 'Track conversions on your WooCommerce store like a pro!', 'dokan-lite' ), | ||
'img_url' => DOKAN_PLUGIN_ASSEST . '/images/wc-conversion-tracking-logo.png', | ||
'img_alt' => __( 'WooCommerce Conversion Tracking logo', 'dokan-lite' ), | ||
'plugins' => [ | ||
[ | ||
'name' => __( 'WooCommerce Conversion Tracking', 'dokan-lite' ), | ||
'slug' => 'woocommerce-conversion-tracking', | ||
], | ||
], | ||
] | ||
); | ||
} | ||
|
||
if ( ! $this->is_wemail_active() ) { | ||
$this->display_recommended_item( | ||
[ | ||
'type' => 'wemail', | ||
'title' => __( 'weMail', 'dokan-lite' ), | ||
'description' => __( 'Simplified Email Marketing Solution for WordPress!', 'dokan-lite' ), | ||
'img_url' => DOKAN_PLUGIN_ASSEST . '/images/wemail-logo.png', | ||
'img_alt' => __( 'weMail logo', 'dokan-lite' ), | ||
'plugins' => [ | ||
[ | ||
'name' => __( 'weMail', 'dokan-lite' ), | ||
'slug' => 'wemail', | ||
], | ||
], | ||
] | ||
); | ||
} | ||
|
||
if ( ! $this->is_texty_active() ) { | ||
$this->display_recommended_item( | ||
[ | ||
'type' => 'texty', | ||
'title' => __( 'Texty', 'dokan-lite' ), | ||
'description' => __( 'SMS Notification for WordPress, WooCommerce, Dokan and more', 'dokan-lite' ), | ||
'img_url' => DOKAN_PLUGIN_ASSEST . '/images/texty-logo.png', | ||
'img_alt' => __( 'Texty logo', 'dokan-lite' ), | ||
'plugins' => [ | ||
[ | ||
'name' => __( 'Texty', 'dokan-lite' ), | ||
'slug' => 'texty', | ||
], | ||
], | ||
] | ||
); | ||
foreach ( $this->recommended_plugins->get() as $plugin ) { | ||
$this->display_recommended_item( $plugin ); | ||
} | ||
} | ||
?> | ||
|
@@ -772,41 +733,25 @@ public function dokan_setup_recommended() { | |
* @return void | ||
*/ | ||
public function dokan_setup_recommended_save() { | ||
check_admin_referer( 'dokan-setup' ); | ||
foreach ( $this->recommended_plugins->get() as $plugin ) { | ||
if ( ! $this->should_install_plugin( $plugin ) ) { | ||
continue; | ||
} | ||
|
||
$setup_wc_conversion_tracking = isset( $_POST['setup_wc_conversion_tracking'] ) && 'yes' === sanitize_text_field( wp_unslash( $_POST['setup_wc_conversion_tracking'] ) ); | ||
$setup_wemail = isset( $_POST['setup_wemail'] ) && 'yes' === sanitize_text_field( wp_unslash( $_POST['setup_wemail'] ) ); | ||
$setup_texty = isset( $_POST['setup_texty'] ) && 'yes' === sanitize_text_field( wp_unslash( $_POST['setup_texty'] ) ); | ||
$plugin_details = $plugin['plugins'][0] ?? null; | ||
|
||
if ( $setup_wc_conversion_tracking && ! $this->is_wc_conversion_tracking_active() ) { | ||
$this->install_plugin( | ||
'woocommerce-conversion-tracking', | ||
[ | ||
'name' => __( 'WooCommerce Conversion Tracking', 'dokan-lite' ), | ||
'repo-slug' => 'woocommerce-conversion-tracking', | ||
'file' => 'conversion-tracking.php', | ||
] | ||
); | ||
} | ||
if ( ! $plugin_details ) { | ||
continue; | ||
} | ||
|
||
if ( $setup_wemail && ! $this->is_wemail_active() ) { | ||
$this->install_plugin( | ||
'wemail', | ||
[ | ||
'name' => __( 'weMail', 'dokan-lite' ), | ||
'repo-slug' => 'wemail', | ||
'file' => 'wemail.php', | ||
] | ||
); | ||
} | ||
$plugin_details_arr = explode( '/', $plugin_details['basename'] ?? '' ); | ||
|
||
if ( $setup_texty && ! $this->is_texty_active() ) { | ||
$this->install_plugin( | ||
'texty', | ||
$plugin_details['slug'], | ||
[ | ||
'name' => __( 'Texty', 'dokan-lite' ), | ||
'repo-slug' => 'texty', | ||
'file' => 'texty.php', | ||
'name' => $plugin_details['name'] ?? '', | ||
'repo-slug' => $plugin_details_arr[0] ?? '', | ||
'file' => $plugin_details_arr[1] ?? '', | ||
] | ||
); | ||
} | ||
|
@@ -827,6 +772,27 @@ public function dokan_setup_recommended_save() { | |
exit; | ||
} | ||
|
||
/** | ||
* Determines if a plugin should be installed based on POST data. | ||
* | ||
* @since DOKAN_SINCE | ||
* | ||
* @param array $plugin Plugin configuration array | ||
* | ||
* @return bool | ||
*/ | ||
private function should_install_plugin( array $plugin ): bool { | ||
check_admin_referer( 'dokan-setup' ); | ||
|
||
$setup_key = 'setup_' . $plugin['type']; | ||
|
||
if ( ! isset( $_POST[ $setup_key ] ) ) { | ||
return false; | ||
} | ||
|
||
return 'yes' === sanitize_text_field( wp_unslash( $_POST[ $setup_key ] ) ); | ||
} | ||
Comment on lines
+775
to
+794
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Improve security and validation in should_install_plugin method. Consider these improvements:
Apply this diff to improve the code: private function should_install_plugin( array $plugin ): bool {
- check_admin_referer( 'dokan-setup' );
+ if ( ! isset( $plugin['type'] ) || empty( $plugin['type'] ) ) {
+ return false;
+ }
$setup_key = 'setup_' . $plugin['type'];
if ( ! isset( $_POST[ $setup_key ] ) ) {
return false;
}
return 'yes' === sanitize_text_field( wp_unslash( $_POST[ $setup_key ] ) );
} And in dokan_setup_recommended_save method: public function dokan_setup_recommended_save() {
+ check_admin_referer( 'dokan-setup' );
+
foreach ( $this->recommended_plugins->get() as $plugin ) {
|
||
|
||
/** | ||
* Save withdraw options. | ||
*/ | ||
|
@@ -891,54 +857,13 @@ protected function should_show_recommended_step() { | |
return false; | ||
} | ||
|
||
if ( $this->is_wc_conversion_tracking_active() ) { | ||
return false; | ||
} | ||
|
||
if ( $this->is_wemail_active() ) { | ||
return false; | ||
} | ||
|
||
if ( $this->is_texty_active() ) { | ||
if ( ! count( $this->recommended_plugins->get() ) ) { | ||
return false; | ||
} | ||
|
||
return true; | ||
} | ||
|
||
/** | ||
* Check if WC Conversion Tracking is active or not | ||
* | ||
* @since 2.8.7 | ||
* | ||
* @return bool | ||
*/ | ||
protected function is_wc_conversion_tracking_active() { | ||
return is_plugin_active( 'woocommerce-conversion-tracking/conversion-tracking.php' ); | ||
} | ||
|
||
/** | ||
* Check if weMail is active or not | ||
* | ||
* @since 3.0.0 | ||
* | ||
* @return bool | ||
*/ | ||
protected function is_wemail_active() { | ||
return is_plugin_active( 'wemail/wemail.php' ); | ||
} | ||
|
||
/** | ||
* Check if texty is active or not | ||
* | ||
* @since 3.2.11 | ||
* | ||
* @return bool | ||
*/ | ||
protected function is_texty_active() { | ||
return is_plugin_active( 'texty/texty.php' ); | ||
} | ||
|
||
/** | ||
* Should we show the WooCommerce Conversion Tracking install option? | ||
* | ||
|
@@ -1012,6 +937,10 @@ public function plugin_install_info() { | |
* @param array $plugin_info Plugin info array containing name and repo-slug, and optionally file if different from [repo-slug].php. | ||
*/ | ||
protected function install_plugin( $plugin_id, $plugin_info ) { | ||
if ( ! current_user_can( 'manage_woocommerce' ) ) { | ||
return; | ||
} | ||
|
||
// Make sure we don't trigger multiple simultaneous installs. | ||
if ( get_option( 'woocommerce_setup_background_installing_' . $plugin_id ) ) { | ||
return; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Enhance array access safety and consistency.
Consider these improvements for safer array handling:
Apply this diff to improve the code:
📝 Committable suggestion