diff --git a/.buildignore b/.buildignore
index e3e90448..c199bf70 100644
--- a/.buildignore
+++ b/.buildignore
@@ -32,3 +32,4 @@ tsconfig.json
.wp-env.json
.phpunit.result.cache
temp-changelog-from-readme.txt
+.vscode/
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 00000000..74b0ac78
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,8 @@
+{
+ "phpcs.standard": "./phpcs.xml",
+ "phpcs.executablePath": "vendor/bin/phpcs",
+ "phpcbf.executablePath": "vendor/bin/phpcbf",
+ "phpcs.enable": true,
+ "phpcbf.enable": true,
+ "phpcs.showSources": true
+}
\ No newline at end of file
diff --git a/composer.json b/composer.json
index dc89ea2f..da76fc57 100644
--- a/composer.json
+++ b/composer.json
@@ -3,23 +3,23 @@
"require-dev": {
"squizlabs/php_codesniffer": "^3.6",
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.1",
- "wp-coding-standards/wpcs": "^2.3",
- "phpunit/phpunit": "9.5.14",
- "elementor/elementor-editor-testing": "0.0.3",
- "yoast/phpunit-polyfills": "^1.0.1"
- },
- "require": {
- "elementor/wp-notifications-package": "1.2.*"
- },
- "config": {
- "allow-plugins": {
- "dealerdirect/phpcodesniffer-composer-installer": true
- }
- },
+ "wp-coding-standards/wpcs": "^2.3",
+ "phpunit/phpunit": "9.5.14",
+ "elementor/elementor-editor-testing": "0.0.3",
+ "yoast/phpunit-polyfills": "^1.0.1"
+ },
+ "require": {
+ "elementor/wp-notifications-package": "1.2.*"
+ },
+ "config": {
+ "allow-plugins": {
+ "dealerdirect/phpcodesniffer-composer-installer": true
+ }
+ },
"scripts": {
- "lint": "phpcs --extensions=php -p",
- "lint:fix": "vendor/bin/phpcbf --ignore=node_modules,vendor,build .",
- "test": "phpunit --testsuite hello-elementor",
- "test:install": "bash ./bin/install-wp-tests-local.sh"
+ "lint": "phpcs --extensions=php --standard=./phpcs.xml --ignore=node_modules,vendor,assets,tmp -p .",
+ "lint:fix": "vendor/bin/phpcbf --extensions=php --standard=./phpcs.xml --ignore=node_modules,vendor,assets,tmp .",
+ "test": "phpunit --testsuite hello-elementor",
+ "test:install": "bash ./bin/install-wp-tests-local.sh"
}
-}
+}
\ No newline at end of file
diff --git a/modules/admin-home/assets/js/hello-elementor-conversion-banner.js b/modules/admin-home/assets/js/hello-elementor-conversion-banner.js
index ccd203de..5f13d414 100644
--- a/modules/admin-home/assets/js/hello-elementor-conversion-banner.js
+++ b/modules/admin-home/assets/js/hello-elementor-conversion-banner.js
@@ -20,21 +20,21 @@ document.addEventListener( 'DOMContentLoaded', () => {
const container = document.getElementById( 'ehe-admin-cb' );
if ( container ) {
- let headerEnd = document.querySelector( '.wp-header-end' );
-
- if ( ! headerEnd ) {
- headerEnd = document.querySelector( '.wrap h1, .wrap h2' );
- }
+ const { beforeWrap = false } = window.ehe_cb;
+ const { selector, before = false } = window.ehe_cb.data;
+ const headerEnd = document.querySelector( selector );
if ( headerEnd ) {
- if ( window.ehe_cb.beforeWrap ) {
+ if ( beforeWrap ) {
const wrapElement = document.querySelector( '.wrap' );
if ( wrapElement ) {
wrapElement.insertAdjacentElement( 'beforebegin', container );
}
- } else {
- headerEnd.insertAdjacentElement( 'afterend', container );
- }
+ } else if ( before ) {
+ headerEnd.insertAdjacentElement( 'beforebegin', container );
+ } else {
+ headerEnd.insertAdjacentElement( 'afterend', container );
+ }
}
const root = createRoot( container );
diff --git a/modules/admin-home/components/conversion-banner.php b/modules/admin-home/components/conversion-banner.php
index d2a444ca..72e09a86 100644
--- a/modules/admin-home/components/conversion-banner.php
+++ b/modules/admin-home/components/conversion-banner.php
@@ -11,6 +11,13 @@
class Conversion_Banner {
+ const DEFAULT_SELECTOR = '.wrap h1, .wrap h2';
+ const SCRIPT_HANDLE = 'hello-conversion-banner';
+ const NONCE_ACTION = 'ehe_cb_nonce';
+ const OBJECT_NAME = 'ehe_cb';
+ const USER_META_KEY = '_hello_elementor_install_notice';
+ const AJAX_ACTION = 'ehe_dismiss_theme_notice';
+
private function render_conversion_banner() {
?>
@@ -18,23 +25,144 @@ private function render_conversion_banner() {
[ 'selector' => '#wpbody #wpbody-content .wrap h1' ],
+ 'update-core' => [ 'selector' => self::DEFAULT_SELECTOR ],
+ 'edit-post' => [ 'selector' => self::DEFAULT_SELECTOR ],
+ 'edit-category' => [ 'selector' => self::DEFAULT_SELECTOR ],
+ 'edit-post_tag' => [ 'selector' => self::DEFAULT_SELECTOR ],
+ 'upload' => [ 'selector' => self::DEFAULT_SELECTOR ],
+ 'media' => [ 'selector' => self::DEFAULT_SELECTOR ],
+ 'edit-page' => [ 'selector' => self::DEFAULT_SELECTOR ],
+ 'elementor_page_elementor-settings' => [ 'selector' => self::DEFAULT_SELECTOR ],
+ 'edit-elementor_library' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ 'before' => true,
+ ],
+ 'elementor_page_elementor-tools' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'elementor_page_elementor-role-manager' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'elementor_page_elementor-element-manager' => [
+ 'selector' => '.wrap h1, .wrap h3.wp-heading-inline',
+ ],
+ 'elementor_page_elementor-system-info' => [
+ 'selector' => '#wpbody #wpbody-content #elementor-system-info .elementor-system-info-header',
+ 'before' => true,
+ ],
+ 'elementor_library_page_e-floating-buttons' => [
+ 'selector' => '#wpbody-content .e-landing-pages-empty, .wrap h2',
+ 'before' => true,
+ ],
+ 'edit-e-floating-buttons' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'edit-elementor_library_category' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'themes' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'nav-menus' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'theme-editor' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'plugins' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'plugin-install' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'plugin-editor' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'users' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'user' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'profile' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'tools' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'import' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'export' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'site-health' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'export-personal-data' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'erase-personal-data' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'options-general' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'options-writing' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'options-reading' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'options-discussion' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'options-media' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'options-permalink' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'options-privacy' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ 'privacy-policy-guide' => [
+ 'selector' => self::DEFAULT_SELECTOR,
+ ],
+ ];
+ }
+
+ private function is_allowed_admin_page(): array {
+ $current_screen = get_current_screen();
+
+ if ( ! $current_screen ) {
+ return [];
}
- if ( Utils::has_pro() && Utils::is_elementor_active() ) {
- return false;
+ $allowed_pages = $this->get_allowed_admin_pages();
+ $current_page = $current_screen->id;
+
+ return $allowed_pages[ $current_page ] ?? [];
+ }
+
+ private function is_conversion_banner_active(): array {
+ if ( get_user_meta( get_current_user_id(), self::USER_META_KEY, true ) ) {
+ return [];
}
- $current_screen = get_current_screen();
+ if ( Utils::has_pro() && Utils::is_elementor_active() ) {
+ return [];
+ }
- return false === strpos( $current_screen->id ?? '', EHP_THEME_SLUG );
+ return $this->is_allowed_admin_page();
}
- private function enqueue_scripts() {
+ private function enqueue_scripts( array $conversion_banner_active ) {
$script = new Script(
- 'hello-conversion-banner',
+ self::SCRIPT_HANDLE,
[ 'wp-util' ]
);
@@ -43,29 +171,31 @@ private function enqueue_scripts() {
$is_installing_plugin_with_uploader = 'upload-plugin' === filter_input( INPUT_GET, 'action', FILTER_UNSAFE_RAW );
wp_localize_script(
- 'hello-conversion-banner',
- 'ehe_cb',
+ self::SCRIPT_HANDLE,
+ self::OBJECT_NAME,
[
- 'nonce' => wp_create_nonce( 'ehe_cb_nonce' ),
+ 'nonce' => wp_create_nonce( self::NONCE_ACTION ),
'beforeWrap' => $is_installing_plugin_with_uploader,
+ 'data' => $conversion_banner_active,
]
);
}
public function dismiss_theme_notice() {
- check_ajax_referer( 'ehe_cb_nonce', 'nonce' );
+ check_ajax_referer( self::NONCE_ACTION, 'nonce' );
- update_user_meta( get_current_user_id(), '_hello_elementor_install_notice', true );
+ update_user_meta( get_current_user_id(), self::USER_META_KEY, true );
wp_send_json_success( [ 'message' => __( 'Notice dismissed.', 'hello-elementor' ) ] );
}
public function __construct() {
- add_action( 'wp_ajax_ehe_dismiss_theme_notice', [ $this, 'dismiss_theme_notice' ] );
+ add_action( 'wp_ajax_' . self::AJAX_ACTION, [ $this, 'dismiss_theme_notice' ] );
add_action( 'current_screen', function () {
- if ( ! $this->is_conversion_banner_active() ) {
+ $conversion_banner_active = $this->is_conversion_banner_active();
+ if ( ! $conversion_banner_active ) {
return;
}
@@ -73,8 +203,8 @@ public function __construct() {
$this->render_conversion_banner();
}, 11 );
- add_action( 'admin_enqueue_scripts', function () {
- $this->enqueue_scripts();
+ add_action( 'admin_enqueue_scripts', function () use ( $conversion_banner_active ) {
+ $this->enqueue_scripts( $conversion_banner_active );
} );
} );
}
diff --git a/tests/bootstrap.php b/tests/bootstrap.php
index f81de1b7..bbf96dbf 100644
--- a/tests/bootstrap.php
+++ b/tests/bootstrap.php
@@ -65,8 +65,8 @@
do_action('plugins_loaded');
-function initialize_elementor_plugin($plugin_class)
-{
+function initialize_elementor_plugin($plugin_class){
+
if (!class_exists($plugin_class)) {
return null;
}
@@ -76,7 +76,5 @@ function initialize_elementor_plugin($plugin_class)
$plugin_instance = initialize_elementor_plugin('Elementor\Plugin');
-$plugin_instance->initialize_container();
-
do_action('init');
do_action('wp_loaded');