Completed
Push — fix/flickr-shortcode ( 3e5712...02d728 )
by
unknown
24:33 queued 14:33
created

Jetpack_Wizard_Banner::can_be_displayed()   B

Complexity

Conditions 6
Paths 6

Size

Total Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
nc 6
nop 0
dl 0
loc 25
rs 8.8977
c 0
b 0
f 0
1
<?php
2
/**
3
 * Displays the first page of the Wizard in a banner form
4
 *
5
 * @package Jetpack
6
 */
7
8
use Automattic\Jetpack\Assets;
9
use Automattic\Jetpack\Assets\Logo as Jetpack_Logo;
10
use Automattic\Jetpack\Tracking;
11
12
/**
13
 * Jetpack_Wizard_Banner
14
 **/
15
class Jetpack_Wizard_Banner {
16
	/**
17
	 * Jetpack_Wizard_Banner
18
	 *
19
	 * @var Jetpack_Wizard_Banner
20
	 **/
21
	private static $instance = null;
22
23
	/**
24
	 * Factory method
25
	 */
26
	public static function init() {
27
		if ( is_null( self::$instance ) ) {
28
			self::$instance = new Jetpack_Wizard_Banner();
29
		}
30
31
		return self::$instance;
32
	}
33
34
	/**
35
	 * Jetpack_Wizard_Banner constructor.
36
	 */
37
	private function __construct() {
38
		add_action( 'current_screen', array( $this, 'maybe_initialize_hooks' ) );
39
	}
40
41
	/**
42
	 * Initialize hooks to display the banner
43
	 */
44
	public function maybe_initialize_hooks() {
45
		if ( ! $this->can_be_displayed() ) {
46
			return;
47
		}
48
49
		add_action( 'admin_print_styles', array( $this, 'admin_banner_styles' ) );
50
		add_action( 'admin_notices', array( $this, 'render_banner' ) );
51
		add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_banner_scripts' ) );
52
	}
53
54
	/**
55
	 * Can we display the banner?
56
	 */
57
	private function can_be_displayed() {
58
		if ( ! Jetpack_Wizard::can_be_displayed() ) {
59
			return false;
60
		}
61
62
		// Only the dashboard and plugins pages should see the banner.
63
		if ( ! in_array( get_current_screen()->id, array( 'dashboard', 'plugins' ), true ) ) {
64
			return false;
65
		}
66
67
		if ( ! current_user_can( 'jetpack_manage_modules' ) ) {
68
			return false;
69
		}
70
71
		// Kill if banner has been dismissed.
72
		if ( Jetpack_Options::get_option( 'dismissed_wizard_banner' ) ) {
73
			return false;
74
		}
75
76
		if ( 'not-started' !== Jetpack_Options::get_option( 'setup_wizard_status', 'not-started' ) ) {
77
			return false;
78
		}
79
80
		return true;
81
	}
82
83
	/**
84
	 * Enqueue JavaScript files.
85
	 */
86 View Code Duplication
	public function enqueue_banner_scripts() {
87
		wp_enqueue_script(
88
			'jetpack-wizard-banner-js',
89
			Assets::get_file_url_for_environment(
90
				'_inc/build/jetpack-wizard-banner.min.js',
91
				'_inc/jetpack-wizard-banner.js'
92
			),
93
			array( 'jquery' ),
94
			JETPACK__VERSION,
95
			true
96
		);
97
98
		wp_localize_script(
99
			'jetpack-wizard-banner-js',
100
			'jp_banner',
101
			array(
102
				'ajax_url'          => admin_url( 'admin-ajax.php' ),
103
				'wizardBannerNonce' => wp_create_nonce( 'jp-wizard-banner-nonce' ),
104
			)
105
		);
106
	}
107
108
	/**
109
	 * Include the needed styles
110
	 */
111
	public function admin_banner_styles() {
112
		wp_enqueue_style(
113
			'jetpack-wizard-banner',
114
			Assets::get_file_url_for_environment(
115
				'css/jetpack-wizard-banner.min.css',
116
				'css/jetpack-wizard-banner.css'
117
			),
118
			array(),
119
			JETPACK__VERSION
120
		);
121
	}
122
123
	/**
124
	 * AJAX callback
125
	 */
126
	public static function ajax_callback() {
127
		check_ajax_referer( 'jp-wizard-banner-nonce', 'nonce' );
128
129
		$tracking = new Tracking();
130
131
		if ( isset( $_REQUEST['personal'] ) ) {
132
			$tracking->record_user_event( 'setup_wizard_banner_click', array( 'button' => 'personal' ) );
133
		}
134
135
		if ( isset( $_REQUEST['business'] ) ) {
136
			$tracking->record_user_event( 'setup_wizard_banner_click', array( 'button' => 'business' ) );
137
		}
138
139
		if ( isset( $_REQUEST['skip'] ) ) {
140
			$tracking->record_user_event( 'setup_wizard_banner_click', array( 'button' => 'skip' ) );
141
		}
142
143
		if (
144
			current_user_can( 'jetpack_manage_modules' )
145
			&& isset( $_REQUEST['dismissBanner'] )
146
		) {
147
			Jetpack_Options::update_option( 'dismissed_wizard_banner', 1 );
148
			$tracking->record_user_event( 'setup_wizard_banner_dismiss' );
149
			wp_send_json_success();
150
		}
151
152
		wp_die();
153
	}
154
155
	/**
156
	 * Renders the Wizard Banner
157
	 *
158
	 * Since this HTML replicates the contents of _inc/client/setup-wizard/intro-page/index.jsx,
159
	 * every time one is changed, the other should also be.
160
	 */
161
	public function render_banner() {
162
		$jetpack_logo     = new Jetpack_Logo();
163
		$powering_up_logo = plugins_url( 'images/jetpack-powering-up.svg', JETPACK__PLUGIN_FILE );
164
165
		?>
166
		<div id="jp-wizard-banner" class="jp-wizard-banner">
167
			<div class="jp-wizard-banner-grid">
168
				<div class="jp-wizard-banner-grid-a">
169
					<div class="jp-emblem">
170
						<?php
171
							echo $jetpack_logo->get_jp_emblem_larger(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
172
						?>
173
					</div>
174
					<h2 class="jp-wizard-banner-wizard-header">
175
						<?php esc_html_e( 'Set up Jetpack for better site security, performance, and more.', 'jetpack' ); ?>
176
					</h2>
177
					<p class="jp-wizard-banner-wizard-paragraph">
178
						<?php esc_html_e( 'Jetpack is a cloud-powered tool built by Automattic.', 'jetpack' ); ?>
179
					</p>
180
					<p class="jp-wizard-banner-wizard-paragraph">
181
						<?php esc_html_e( 'Answer a few questions and we’ll help you secure, speed up, customize, and grow your WordPress website.', 'jetpack' ); ?>
182
					</p>
183
					<div class="jp-wizard-banner-wizard-intro-question">
184
						<h2>
185
							<?php
186
							printf(
187
								/* translators: %s is the site name */
188
								esc_html__( 'What will %s be used for?', 'jetpack' ),
189
								esc_html( get_bloginfo( 'name' ) )
190
							);
191
							?>
192
						</h2>
193
						<div class="jp-wizard-banner-wizard-answer-buttons">
194
							<a
195
								id="jp-wizard-banner-personal-button"
196
								class="button button-primary jp-wizard-banner-wizard-button"
197
								href="<?php echo esc_url( Jetpack::admin_url( 'page=jetpack#/setup/income?use=personal' ) ); ?>"
198
							>
199
							<?php esc_html_e( 'Personal Use', 'jetpack' ); ?>
200
							</a>
201
							<a
202
								id="jp-wizard-banner-business-button"
203
								class="button button-primary jp-wizard-banner-wizard-button"
204
								href="<?php echo esc_url( Jetpack::admin_url( 'page=jetpack#/setup/income?use=business' ) ); ?>"
205
							>
206
								<?php esc_html_e( 'Business Use', 'jetpack' ); ?>
207
							</a>
208
						</div>
209
						<a
210
							class="jp-wizard-banner-wizard-skip-link"
211
							href="<?php echo esc_url( Jetpack::admin_url( 'page=jetpack#/setup/features' ) ); ?>"
212
						>
213
							<?php esc_html_e( 'Skip to recommended features', 'jetpack' ); ?>
214
						</a>
215
					</div>
216
				</div>
217
218
219
				<div class="jp-wizard-banner-grid-b">
220
					<img
221
						class="powering-up-img"
222
						width="200px"
223
						height="200px"
224
						src="<?php echo esc_url( $powering_up_logo ); ?>"
225
						alt="<?php esc_attr_e( 'A jetpack site powering up', 'jetpack' ); ?>"
226
					/>
227
				</div>
228
229
				<span
230
					class="notice-dismiss wizard-banner-dismiss"
231
					title="<?php esc_attr_e( 'Dismiss this notice', 'jetpack' ); ?>">
232
				</span>
233
234
			</div>
235
236
		</div>
237
		<?php
238
	}
239
}
240