Skip to content

Commit 6ab0b47

Browse files
authored
Tweak: Show PLG only on selected pages [TMZ-919] (#547)
1 parent 5126482 commit 6ab0b47

File tree

6 files changed

+186
-49
lines changed

6 files changed

+186
-49
lines changed

.buildignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,4 @@ tsconfig.json
3232
.wp-env.json
3333
.phpunit.result.cache
3434
temp-changelog-from-readme.txt
35+
.vscode/

.vscode/settings.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"phpcs.standard": "./phpcs.xml",
3+
"phpcs.executablePath": "vendor/bin/phpcs",
4+
"phpcbf.executablePath": "vendor/bin/phpcbf",
5+
"phpcs.enable": true,
6+
"phpcbf.enable": true,
7+
"phpcs.showSources": true
8+
}

composer.json

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,23 @@
33
"require-dev": {
44
"squizlabs/php_codesniffer": "^3.6",
55
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.1",
6-
"wp-coding-standards/wpcs": "^2.3",
7-
"phpunit/phpunit": "9.5.14",
8-
"elementor/elementor-editor-testing": "0.0.3",
9-
"yoast/phpunit-polyfills": "^1.0.1"
10-
},
11-
"require": {
12-
"elementor/wp-notifications-package": "1.2.*"
13-
},
14-
"config": {
15-
"allow-plugins": {
16-
"dealerdirect/phpcodesniffer-composer-installer": true
17-
}
18-
},
6+
"wp-coding-standards/wpcs": "^2.3",
7+
"phpunit/phpunit": "9.5.14",
8+
"elementor/elementor-editor-testing": "0.0.3",
9+
"yoast/phpunit-polyfills": "^1.0.1"
10+
},
11+
"require": {
12+
"elementor/wp-notifications-package": "1.2.*"
13+
},
14+
"config": {
15+
"allow-plugins": {
16+
"dealerdirect/phpcodesniffer-composer-installer": true
17+
}
18+
},
1919
"scripts": {
20-
"lint": "phpcs --extensions=php -p",
21-
"lint:fix": "vendor/bin/phpcbf --ignore=node_modules,vendor,build .",
22-
"test": "phpunit --testsuite hello-elementor",
23-
"test:install": "bash ./bin/install-wp-tests-local.sh"
20+
"lint": "phpcs --extensions=php --standard=./phpcs.xml --ignore=node_modules,vendor,assets,tmp -p .",
21+
"lint:fix": "vendor/bin/phpcbf --extensions=php --standard=./phpcs.xml --ignore=node_modules,vendor,assets,tmp .",
22+
"test": "phpunit --testsuite hello-elementor",
23+
"test:install": "bash ./bin/install-wp-tests-local.sh"
2424
}
25-
}
25+
}

modules/admin-home/assets/js/hello-elementor-conversion-banner.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,21 @@ document.addEventListener( 'DOMContentLoaded', () => {
2020
const container = document.getElementById( 'ehe-admin-cb' );
2121

2222
if ( container ) {
23-
let headerEnd = document.querySelector( '.wp-header-end' );
24-
25-
if ( ! headerEnd ) {
26-
headerEnd = document.querySelector( '.wrap h1, .wrap h2' );
27-
}
23+
const { beforeWrap = false } = window.ehe_cb;
24+
const { selector, before = false } = window.ehe_cb.data;
25+
const headerEnd = document.querySelector( selector );
2826

2927
if ( headerEnd ) {
30-
if ( window.ehe_cb.beforeWrap ) {
28+
if ( beforeWrap ) {
3129
const wrapElement = document.querySelector( '.wrap' );
3230
if ( wrapElement ) {
3331
wrapElement.insertAdjacentElement( 'beforebegin', container );
3432
}
35-
} else {
36-
headerEnd.insertAdjacentElement( 'afterend', container );
37-
}
33+
} else if ( before ) {
34+
headerEnd.insertAdjacentElement( 'beforebegin', container );
35+
} else {
36+
headerEnd.insertAdjacentElement( 'afterend', container );
37+
}
3838
}
3939

4040
const root = createRoot( container );

modules/admin-home/components/conversion-banner.php

Lines changed: 148 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,30 +11,158 @@
1111

1212
class Conversion_Banner {
1313

14+
const DEFAULT_SELECTOR = '.wrap h1, .wrap h2';
15+
const SCRIPT_HANDLE = 'hello-conversion-banner';
16+
const NONCE_ACTION = 'ehe_cb_nonce';
17+
const OBJECT_NAME = 'ehe_cb';
18+
const USER_META_KEY = '_hello_elementor_install_notice';
19+
const AJAX_ACTION = 'ehe_dismiss_theme_notice';
20+
1421
private function render_conversion_banner() {
1522
?>
1623
<div id="ehe-admin-cb" style="width: calc(100% - 48px)">
1724
</div>
1825
<?php
1926
}
2027

21-
private function is_conversion_banner_active(): bool {
22-
if ( get_user_meta( get_current_user_id(), '_hello_elementor_install_notice', true ) ) {
23-
return false;
28+
private function get_allowed_admin_pages(): array {
29+
return [
30+
'dashboard' => [ 'selector' => '#wpbody #wpbody-content .wrap h1' ],
31+
'update-core' => [ 'selector' => self::DEFAULT_SELECTOR ],
32+
'edit-post' => [ 'selector' => self::DEFAULT_SELECTOR ],
33+
'edit-category' => [ 'selector' => self::DEFAULT_SELECTOR ],
34+
'edit-post_tag' => [ 'selector' => self::DEFAULT_SELECTOR ],
35+
'upload' => [ 'selector' => self::DEFAULT_SELECTOR ],
36+
'media' => [ 'selector' => self::DEFAULT_SELECTOR ],
37+
'edit-page' => [ 'selector' => self::DEFAULT_SELECTOR ],
38+
'elementor_page_elementor-settings' => [ 'selector' => self::DEFAULT_SELECTOR ],
39+
'edit-elementor_library' => [
40+
'selector' => self::DEFAULT_SELECTOR,
41+
'before' => true,
42+
],
43+
'elementor_page_elementor-tools' => [
44+
'selector' => self::DEFAULT_SELECTOR,
45+
],
46+
'elementor_page_elementor-role-manager' => [
47+
'selector' => self::DEFAULT_SELECTOR,
48+
],
49+
'elementor_page_elementor-element-manager' => [
50+
'selector' => '.wrap h1, .wrap h3.wp-heading-inline',
51+
],
52+
'elementor_page_elementor-system-info' => [
53+
'selector' => '#wpbody #wpbody-content #elementor-system-info .elementor-system-info-header',
54+
'before' => true,
55+
],
56+
'elementor_library_page_e-floating-buttons' => [
57+
'selector' => '#wpbody-content .e-landing-pages-empty, .wrap h2',
58+
'before' => true,
59+
],
60+
'edit-e-floating-buttons' => [
61+
'selector' => self::DEFAULT_SELECTOR,
62+
],
63+
'edit-elementor_library_category' => [
64+
'selector' => self::DEFAULT_SELECTOR,
65+
],
66+
'themes' => [
67+
'selector' => self::DEFAULT_SELECTOR,
68+
],
69+
'nav-menus' => [
70+
'selector' => self::DEFAULT_SELECTOR,
71+
],
72+
'theme-editor' => [
73+
'selector' => self::DEFAULT_SELECTOR,
74+
],
75+
'plugins' => [
76+
'selector' => self::DEFAULT_SELECTOR,
77+
],
78+
'plugin-install' => [
79+
'selector' => self::DEFAULT_SELECTOR,
80+
],
81+
'plugin-editor' => [
82+
'selector' => self::DEFAULT_SELECTOR,
83+
],
84+
'users' => [
85+
'selector' => self::DEFAULT_SELECTOR,
86+
],
87+
'user' => [
88+
'selector' => self::DEFAULT_SELECTOR,
89+
],
90+
'profile' => [
91+
'selector' => self::DEFAULT_SELECTOR,
92+
],
93+
'tools' => [
94+
'selector' => self::DEFAULT_SELECTOR,
95+
],
96+
'import' => [
97+
'selector' => self::DEFAULT_SELECTOR,
98+
],
99+
'export' => [
100+
'selector' => self::DEFAULT_SELECTOR,
101+
],
102+
'site-health' => [
103+
'selector' => self::DEFAULT_SELECTOR,
104+
],
105+
'export-personal-data' => [
106+
'selector' => self::DEFAULT_SELECTOR,
107+
],
108+
'erase-personal-data' => [
109+
'selector' => self::DEFAULT_SELECTOR,
110+
],
111+
'options-general' => [
112+
'selector' => self::DEFAULT_SELECTOR,
113+
],
114+
'options-writing' => [
115+
'selector' => self::DEFAULT_SELECTOR,
116+
],
117+
'options-reading' => [
118+
'selector' => self::DEFAULT_SELECTOR,
119+
],
120+
'options-discussion' => [
121+
'selector' => self::DEFAULT_SELECTOR,
122+
],
123+
'options-media' => [
124+
'selector' => self::DEFAULT_SELECTOR,
125+
],
126+
'options-permalink' => [
127+
'selector' => self::DEFAULT_SELECTOR,
128+
],
129+
'options-privacy' => [
130+
'selector' => self::DEFAULT_SELECTOR,
131+
],
132+
'privacy-policy-guide' => [
133+
'selector' => self::DEFAULT_SELECTOR,
134+
],
135+
];
136+
}
137+
138+
private function is_allowed_admin_page(): array {
139+
$current_screen = get_current_screen();
140+
141+
if ( ! $current_screen ) {
142+
return [];
24143
}
25144

26-
if ( Utils::has_pro() && Utils::is_elementor_active() ) {
27-
return false;
145+
$allowed_pages = $this->get_allowed_admin_pages();
146+
$current_page = $current_screen->id;
147+
148+
return $allowed_pages[ $current_page ] ?? [];
149+
}
150+
151+
private function is_conversion_banner_active(): array {
152+
if ( get_user_meta( get_current_user_id(), self::USER_META_KEY, true ) ) {
153+
return [];
28154
}
29155

30-
$current_screen = get_current_screen();
156+
if ( Utils::has_pro() && Utils::is_elementor_active() ) {
157+
return [];
158+
}
31159

32-
return false === strpos( $current_screen->id ?? '', EHP_THEME_SLUG );
160+
return $this->is_allowed_admin_page();
33161
}
34162

35-
private function enqueue_scripts() {
163+
private function enqueue_scripts( array $conversion_banner_active ) {
36164
$script = new Script(
37-
'hello-conversion-banner',
165+
self::SCRIPT_HANDLE,
38166
[ 'wp-util' ]
39167
);
40168

@@ -43,38 +171,40 @@ private function enqueue_scripts() {
43171
$is_installing_plugin_with_uploader = 'upload-plugin' === filter_input( INPUT_GET, 'action', FILTER_UNSAFE_RAW );
44172

45173
wp_localize_script(
46-
'hello-conversion-banner',
47-
'ehe_cb',
174+
self::SCRIPT_HANDLE,
175+
self::OBJECT_NAME,
48176
[
49-
'nonce' => wp_create_nonce( 'ehe_cb_nonce' ),
177+
'nonce' => wp_create_nonce( self::NONCE_ACTION ),
50178
'beforeWrap' => $is_installing_plugin_with_uploader,
179+
'data' => $conversion_banner_active,
51180
]
52181
);
53182
}
54183

55184
public function dismiss_theme_notice() {
56-
check_ajax_referer( 'ehe_cb_nonce', 'nonce' );
185+
check_ajax_referer( self::NONCE_ACTION, 'nonce' );
57186

58-
update_user_meta( get_current_user_id(), '_hello_elementor_install_notice', true );
187+
update_user_meta( get_current_user_id(), self::USER_META_KEY, true );
59188

60189
wp_send_json_success( [ 'message' => __( 'Notice dismissed.', 'hello-elementor' ) ] );
61190
}
62191

63192
public function __construct() {
64193

65-
add_action( 'wp_ajax_ehe_dismiss_theme_notice', [ $this, 'dismiss_theme_notice' ] );
194+
add_action( 'wp_ajax_' . self::AJAX_ACTION, [ $this, 'dismiss_theme_notice' ] );
66195

67196
add_action( 'current_screen', function () {
68-
if ( ! $this->is_conversion_banner_active() ) {
197+
$conversion_banner_active = $this->is_conversion_banner_active();
198+
if ( ! $conversion_banner_active ) {
69199
return;
70200
}
71201

72202
add_action( 'in_admin_header', function () {
73203
$this->render_conversion_banner();
74204
}, 11 );
75205

76-
add_action( 'admin_enqueue_scripts', function () {
77-
$this->enqueue_scripts();
206+
add_action( 'admin_enqueue_scripts', function () use ( $conversion_banner_active ) {
207+
$this->enqueue_scripts( $conversion_banner_active );
78208
} );
79209
} );
80210
}

tests/bootstrap.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@
6565

6666
do_action('plugins_loaded');
6767

68-
function initialize_elementor_plugin($plugin_class)
69-
{
68+
function initialize_elementor_plugin($plugin_class){
69+
7070
if (!class_exists($plugin_class)) {
7171
return null;
7272
}
@@ -76,7 +76,5 @@ function initialize_elementor_plugin($plugin_class)
7676

7777
$plugin_instance = initialize_elementor_plugin('Elementor\Plugin');
7878

79-
$plugin_instance->initialize_container();
80-
8179
do_action('init');
8280
do_action('wp_loaded');

0 commit comments

Comments
 (0)