PluginProbe ʕ •ᴥ•ʔ
WP 2FA – Two-factor authentication for WordPress / 2.4.2
WP 2FA – Two-factor authentication for WordPress v2.4.2
1.7.1 2.0.0 2.0.1 2.1.0 2.2.0 2.2.1 2.3.0 2.4.0 2.4.1 2.4.2 2.5.0 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.8.0 2.9.0 2.9.1 2.9.2 2.9.3 3.0.0 3.0.1 3.1.0 3.1.1 3.1.1.2 trunk 1.2.0 1.3.0 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.6.0 1.6.1 1.6.2 1.7.0
wp-2fa / includes / classes / Admin / class-premium-features.php
wp-2fa / includes / classes / Admin Last commit date
Controllers 3 years ago Helpers 3 years ago SettingsPages 3 years ago Views 3 years ago class-help-contact-us.php 3 years ago class-premium-features.php 3 years ago class-settings-page.php 3 years ago class-settingspage.php 3 years ago class-setup-wizard.php 3 years ago class-user-listing.php 3 years ago class-user-notices.php 3 years ago class-user-profile.php 3 years ago class-user-registered.php 3 years ago class-user.php 3 years ago index.php 5 years ago
class-premium-features.php
439 lines
1 <?php
2 /**
3 * Premium features rendering class.
4 *
5 * @package wp2fa
6 * @subpackage admin
7 * @copyright 2023 WP White Security
8 * @license https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
9 * @link https://wordpress.org/plugins/wp-2fa/
10 * @since 2.0.0
11 */
12
13 namespace WP2FA\Admin;
14
15 use \WP2FA\Admin\Settings_Page;
16 /**
17 * Handles contact the features page and content.
18 */
19 class Premium_Features {
20
21 const TOP_MENU_SLUG = 'wp-2fa-premium-features';
22
23 /**
24 * Create admin menu entry and settings page
25 */
26 public static function add_extra_menu_item() {
27 add_submenu_page(
28 Settings_Page::TOP_MENU_SLUG,
29 esc_html__( 'Premium Features', 'wp-2fa' ),
30 esc_html__( 'Premium Features ➤', 'wp-2fa' ),
31 'manage_options',
32 self::TOP_MENU_SLUG,
33 array( __CLASS__, 'render' ),
34 100
35 );
36 }
37
38 /**
39 * Adds an upgrade banner to settings pages.
40 *
41 * @return void
42 */
43 public static function add_settings_banner() {
44 $banner = '<div id="wp-2fa-side-banner">';
45 $banner .= '<img src="' . esc_url( WP_2FA_URL . 'dist/images/wizard-logo.png' ) . '">';
46 $banner .= '<p>' . esc_html__( 'Upgrade to Premium & benefit:', 'wp-2fa' ) . '</p>';
47 $banner .= '<ul><li><span class="dashicons dashicons-yes-alt"></span>' . esc_html__( 'Login with 2FA via SMS, push notification or with a simple mouse click', 'wp-2fa' ) . '</li>';
48 $banner .= '<li><span class="dashicons dashicons-yes-alt"></span>' . esc_html__( 'Add & manage trusted devices ("Remember this device" option)', 'wp-2fa' ) . '</li>';
49 $banner .= '<li><span class="dashicons dashicons-yes-alt"></span> ' . esc_html__( 'Add alternative 2FA methods ensuring no user is ever locked out', 'wp-2fa' ) . '</li>';
50 $banner .= '<li><span class="dashicons dashicons-yes-alt"></span> ' . esc_html__( 'One-click 2FA integration with WooCommerce', 'wp-2fa' ) . '</li>';
51 $banner .= '<li><span class="dashicons dashicons-yes-alt"></span> ' . esc_html__( 'Completely whitelabel the 2FA user experience including the 2FA code page, email & wizards text', 'wp-2fa' ) . '</li>';
52 $banner .= '<li><span class="dashicons dashicons-yes-alt"></span> ' . esc_html__( 'Configure different 2FA policies for different user roles', 'wp-2fa' ) . '</li>';
53 $banner .= '<li><span class="dashicons dashicons-yes-alt"></span> ' . esc_html__( 'Many other features', 'wp-2fa' ) . '</li>';
54 $banner .= '<li><span class="dashicons dashicons-yes-alt"></span> ' . esc_html__( 'No Ads!', 'wp-2fa' ) . '</li></ul>';
55 $banner .= '<a href="https://wp2fa.io/get-wp-2fa-premium-trial/?utm_source=plugin&utm_medium=sidebar+advert&utm_campaign=WP2FA&utm_content=get+trial" class="button button-primary" target="_blank">' . esc_html__( 'Get a Free 14-day trial', 'wp-2fa' ) . '</a> <a href="https://wp2fa.io/pricing/?utm_source=plugin&utm_medium=sidebar+advert&utm_campaign=WP2FA&utm_content=upgrade+now" class="link" target="_blank">' . esc_html__( 'Upgrade now', 'wp-2fa' ) . '</a>';
56 $banner .= '</div>';
57
58 echo $banner; // phpcs:ignore
59 }
60
61 /**
62 * Handles rendering the content.
63 *
64 * @return void
65 */
66 public static function render() {
67 ?>
68 <style>
69 .features-wrap {
70 background: #fff;
71 padding: 25px 30px;
72 margin-top: 25px;
73 }
74
75 .features-wrap h2 {
76 font-size: 28px;
77 margin-bottom: 30px;
78 }
79
80 .features-wrap p {
81 font-size: 16px;
82 line-height: 28px;
83 }
84
85 .feature-list {
86 margin-bottom: 20px;
87 }
88
89 .feature-list li {
90 margin-bottom: 10px;
91 font-size: 15px;
92 }
93
94 .feature-list li .dashicons {
95 color: #3E6BFF;
96 }
97
98 .premium-cta {
99 margin: 25px 0 15px;
100 text-align: center;
101 }
102
103 .premium-cta a:not(.inverse), .table-link {
104 background-color: #3E6BFF;
105 color: #fff;
106 padding: 15px 26px;
107 border-radius: 30px;
108 font-size: 16px;
109 white-space: nowrap;
110 text-decoration: none;
111 font-weight: 700;
112 display: inline-block;
113 margin-right: 15px;
114 border: 2px solid #3E6BFF;
115 }
116
117 .premium-cta a:hover, .table-link:hover, .premium-cta a.inverse, .table-link.inverse {
118 color: #3E6BFF;
119 background-color: #fff;
120 }
121
122 .premium-cta a.inverse {
123 font-weight: 700;
124 text-decoration: none;
125 font-size: 16px;
126 }
127
128 .content-block {
129 margin-bottom: 26px;
130 border-bottom: 1px solid #eee;
131 padding-bottom: 15px;
132 }
133
134 .feature-table tr td {
135 text-align: center;
136 min-width: 200px
137 }
138 .feature-table tr td:first-of-type {
139 text-align: left;
140 font-weight: 500;
141 }
142 .feature-table td p {
143 margin-top: 0;
144 }
145 .row-head span {
146 font-size: 17px;
147 font-weight: 700;
148 }
149 .feature-table .dashicons {
150 color: #3E6BFF;
151 }
152 .feature-table .dashicons-no {
153 color: red;
154 }
155 .table-link {
156 font-size: 14px;
157 padding: 9px;
158 width: 193px;
159 margin-top: 10px;
160 }
161 .pull-up {
162 position: relative;
163 top: -23px;
164 }
165
166 .wp2fa-logo {
167 max-width: 130px;
168 }
169
170 .logo-wrap {
171 float: left;
172 margin-right: 30px;
173 }
174 </style>
175
176 <div class="wrap help-wrap features-wrap wp-2fa-settings-wrapper">
177 <div class="page-head">
178 <h2><?php esc_html_e( 'Upgrade to Premium and benefit more!', 'wp-2fa' ); ?></h2>
179 </div>
180 <div class="content-block">
181 <div class="logo-wrap">
182 <img class="wp2fa-logo" src="<?php echo WP_2FA_URL; // phpcs:ignore ?>dist/images/wp-2fa-color_opt.png" alt="">
183 </div>
184 <div>
185 <p><?php esc_html_e( 'WP 2FA is your trusted gatekeeper, keeping your website, users, customers, team members, and anyone who accesses your website, including you, secure and better protected than ever before.', 'wp-2fa' ); ?></p>
186 <p><?php esc_html_e( 'Upgrade to WP 2FA Premium to add more secure authentication options and automate more, encouraging all your website users to utilize 2FA to its fullest extent and give your users more flexibility by allowing them to work from anywhere without compromising on security.', 'wp-2fa' ); ?></p>
187 </div>
188 </div>
189 <div class="content-block">
190 <p><strong><?php esc_html_e( 'Upgrade to Premium and start benefiting from value-added features such as:', 'wp-2fa' ); ?></strong></p>
191 <ul class="feature-list">
192 <li><span class="dashicons dashicons-saved"></span> <?php esc_html_e( 'More 2FA methods, including SMS, push notifications & one-click login', 'wp-2fa' ); ?></li>
193 <li><span class="dashicons dashicons-saved"></span> <?php esc_html_e( 'Trusted devices: Allow users to add trusted devices so they do not have to manually enter the 2FA code each time they log in', 'wp-2fa' ); ?></li>
194 <li><span class="dashicons dashicons-saved"></span> <?php esc_html_e( 'White labeling features: Gain increased trust by extending your business’ branding and tone of voice to all 2FA pages, wizards & emails', 'wp-2fa' ); ?></li>
195 <li><span class="dashicons dashicons-saved"></span> <?php esc_html_e( 'Refer to the features matrix below for a detailed list of all the premium features', 'wp-2fa' ); ?></li>
196 </ul>
197 <div class="premium-cta">
198 <a href="<?php echo esc_url( 'https://wp2fa.io/get-wp-2fa-premium-trial/?utm_source=plugin&utm_medium=referral&utm_campaign=WP2FA&utm_content=get+trial+upgrade+page' ); ?>" target="_blank" rel="noopener"><?php esc_html_e( 'Get the Free 14-day trial', 'wp-2fa' ); ?></a>
199 <a class="inverse" href="<?php echo esc_url( 'https://wp2fa.io/pricing/?utm_source=plugin&utm_medium=referral&utm_campaign=WP2FA&utm_content=upgrade+page+upgrade' ); ?>" target="_blank" rel="noopener"><?php esc_html_e( 'UPGRADE NOW', 'wp-2fa' ); ?></a>
200 <span style="text-align: center; display: block; margin-top: 11px;"><?php esc_html_e( '* No credit card or payment details required for the trial.', 'wp-2fa' ); ?></span>
201 </div>
202 </div>
203 <div class="content-block">
204 <p><strong><?php esc_html_e( 'WP 2FA plugin features', 'wp-2fa' ); ?></strong></p>
205 <p><?php esc_html_e( 'Take advantage of these benefits and many others, with prices starting from as little as $29 for 5 users per year. ', 'wp-2fa' ); ?></p>
206 <table class="c21 feature-table">
207 <tbody>
208 <tr class="c2">
209 <td class="c6" colspan="1" rowspan="1">
210 <p class="c10 c4"><span class="c5"></span></p>
211 </td>
212 <td class="c8 row-head" colspan="1" rowspan="1">
213 <p class="c7"><span class="c5"><?php esc_html_e( 'Premium', 'wp-2fa' ); ?></span></p>
214 </td>
215 <td class="c12 row-head" colspan="1" rowspan="1">
216 <p class="c7"><span class="c5"><?php esc_html_e( 'Free', 'wp-2fa' ); ?></span></p>
217 </td>
218 </tr>
219 <tr class="c2">
220 <td class="c6" colspan="1" rowspan="1">
221 <p class="c10"><span class="c5"><?php esc_html_e( 'Support', 'wp-2fa' ); ?></span></p>
222 </td>
223 <td class="c8" colspan="1" rowspan="1">
224 <p class="c7"><span class="c5"><?php esc_html_e( '1-to-1 emails, forums', 'wp-2fa' ); ?></span></p>
225 </td>
226 <td class="c12" colspan="1" rowspan="1">
227 <p class="c7"><span class="c5"><?php esc_html_e( 'forums', 'wp-2fa' ); ?></span></p>
228 </td>
229 </tr>
230 <tr class="c2">
231 <td class="c6" colspan="1" rowspan="1">
232 <p class="c10"><span class="c5"><?php esc_html_e( 'Out of the box support for e-commerce, membership & third party plugins (no code required)', 'wp-2fa' ); ?></span></p>
233 </td>
234 <td class="c8" colspan="1" rowspan="1">
235 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
236 </td>
237 <td class="c12" colspan="1" rowspan="1">
238 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
239 </td>
240 </tr>
241 <tr class="c2">
242 <td class="c6" colspan="1" rowspan="1">
243 <p class="c10"><span class="c5"><?php esc_html_e( '2FA code via mobile app', 'wp-2fa' ); ?></span></p>
244 </td>
245 <td class="c8" colspan="1" rowspan="1">
246 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
247 </td>
248 <td class="c12" colspan="1" rowspan="1">
249 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
250 </td>
251 </tr>
252 <tr class="c2">
253 <td class="c6" colspan="1" rowspan="1">
254 <p class="c10"><span class="c5"><?php esc_html_e( '2FA code over email', 'wp-2fa' ); ?></span></p>
255 </td>
256 <td class="c8" colspan="1" rowspan="1">
257 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
258 </td>
259 <td class="c12" colspan="1" rowspan="1">
260 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
261 </td>
262 </tr>
263 <tr class="c2">
264 <td class="c6" colspan="1" rowspan="1">
265 <p class="c10"><span class="c5"><?php esc_html_e( '2FA login with push notification (Authy)', 'wp-2fa' ); ?></span></p>
266 </td>
267 <td class="c8" colspan="1" rowspan="1">
268 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
269 </td>
270 <td class="c12" colspan="1" rowspan="1">
271 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
272 </td>
273 </tr>
274 <tr class="c2">
275 <td class="c6" colspan="1" rowspan="1">
276 <p class="c10"><span class="c5"><?php esc_html_e( '2FA Login with SMS (with Twilio)', 'wp-2fa' ); ?></span></p>
277 </td>
278 <td class="c8" colspan="1" rowspan="1">
279 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
280 </td>
281 <td class="c12" colspan="1" rowspan="1">
282 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
283 </td>
284 </tr>
285
286 <tr class="c2">
287 <td class="c6" colspan="1" rowspan="1">
288 <p class="c10"><span class="c5"><?php esc_html_e( 'One-click 2FA login', 'wp-2fa' ); ?></span></p>
289 </td>
290 <td class="c8" colspan="1" rowspan="1">
291 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
292 </td>
293 <td class="c12" colspan="1" rowspan="1">
294 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
295 </td>
296 </tr>
297 <tr class="c2">
298 <td class="c6" colspan="1" rowspan="1">
299 <p class="c10"><span class="c5"><?php esc_html_e( 'Different 2FA policies per user role', 'wp-2fa' ); ?></span></p>
300 </td>
301 <td class="c8" colspan="1" rowspan="1">
302 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
303 </td>
304 <td class="c12" colspan="1" rowspan="1">
305 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
306 </td>
307 </tr>
308 <tr class="c2">
309 <td class="c6" colspan="1" rowspan="1">
310 <p class="c10"><span class="c5"><?php esc_html_e( 'Trusted devices (remember devices)', 'wp-2fa' ); ?></span></p>
311 </td>
312 <td class="c8" colspan="1" rowspan="1">
313 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
314 </td>
315 <td class="c12" colspan="1" rowspan="1">
316 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
317 </td>
318 </tr>
319 <tr class="c2">
320 <td class="c6" colspan="1" rowspan="1">
321 <p class="c10"><span class="c5"><?php esc_html_e( 'Alternative 2FA methods', 'wp-2fa' ); ?></span></p>
322 </td>
323 <td class="c8" colspan="1" rowspan="1">
324 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
325 </td>
326 <td class="c12" colspan="1" rowspan="1">
327 <p class="c7"><span class="c5"><?php esc_html_e( 'Backup codes only', 'wp-2fa' ); ?></span></p>
328 </td>
329 </tr>
330 <tr class="c2">
331 <td class="c6" colspan="1" rowspan="1">
332 <p class="c10"><span class="c5"><?php esc_html_e( 'White labeling (logo, wizards, email, colours, fonts & custom CSS)', 'wp-2fa' ); ?></span></p>
333 </td>
334 <td class="c8" colspan="1" rowspan="1">
335 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
336 </td>
337 <td class="c12" colspan="1" rowspan="1">
338 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
339 </td>
340 </tr>
341 <tr class="c2">
342 <td class="c6" colspan="1" rowspan="1">
343 <p class="c10"><span class="c5"><?php esc_html_e( 'One-click 2FA integration in WooCommerce user page', 'wp-2fa' ); ?></span></p>
344 </td>
345 <td class="c8" colspan="1" rowspan="1">
346 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
347 </td>
348 <td class="c12" colspan="1" rowspan="1">
349 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
350 </td>
351 </tr>
352 <tr class="c2">
353 <td class="c6" colspan="1" rowspan="1">
354 <p class="c10"><span class="c5"><?php esc_html_e( 'Reports & Statistics', 'wp-2fa' ); ?></span></p>
355 </td>
356 <td class="c8" colspan="1" rowspan="1">
357 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
358 </td>
359 <td class="c12" colspan="1" rowspan="1">
360 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
361 </td>
362 </tr>
363 <tr class="c2">
364 <td class="c6" colspan="1" rowspan="1">
365 <p class="c10"><span class="c5"><?php esc_html_e( 'Configurable 2FA code expiration time', 'wp-2fa' ); ?></span></p>
366 </td>
367 <td class="c8" colspan="1" rowspan="1">
368 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
369 </td>
370 <td class="c12" colspan="1" rowspan="1">
371 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
372 </td>
373 </tr>
374 <tr class="c2">
375 <td class="c6" colspan="1" rowspan="1">
376 <p class="c10"><span class="c5"><?php esc_html_e( 'Sortable users\' 2FA status', 'wp-2fa' ); ?></span></p>
377 </td>
378 <td class="c8" colspan="1" rowspan="1">
379 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
380 </td>
381 <td class="c12" colspan="1" rowspan="1">
382 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
383 </td>
384 </tr>
385 <tr class="c2">
386 <td class="c6" colspan="1" rowspan="1">
387 <p class="c10"><span class="c5"><?php esc_html_e( 'No Ads!', 'wp-2fa' ); ?></span></p>
388 </td>
389 <td class="c8" colspan="1" rowspan="1">
390 <p class="c7"><span class="c5"><span class="dashicons dashicons-saved"></span></span></p>
391 </td>
392 <td class="c12" colspan="1" rowspan="1">
393 <p class="c7"><span class="c5"><span class="dashicons dashicons-no"></span></span></p>
394 </td>
395 </tr>
396 </tbody>
397 </table>
398
399 <div class="premium-cta">
400 <a href="<?php echo esc_url( 'https://wp2fa.io/get-wp-2fa-premium-trial/?utm_source=plugin&utm_medium=referral&utm_campaign=WP2FA&utm_content=get+trial+upgrade+page' ); ?>" target="_blank" rel="noopener"><?php esc_html_e( 'Get the Free 14-day trial', 'wp-2fa' ); ?></a>
401 <a class="inverse" href="<?php echo esc_url( 'https://wp2fa.io/pricing/?utm_source=plugin&utm_medium=referral&utm_campaign=WP2FA&utm_content=upgrade+page+upgrade' ); ?>" target="_blank" rel="noopener"><?php esc_html_e( 'UPGRADE NOW', 'wp-2fa' ); ?></a>
402 <span style="text-align: center; display: block; margin-top: 11px;"><?php esc_html_e( '* No credit card or payment details required for the trial.', 'wp-2fa' ); ?></span>
403 </div>
404 </div>
405
406 <div>
407 <p>
408 <?php
409 $text = sprintf(
410 /* translators: 1: Link to our site 2: Link to our contact page */
411 esc_html__( 'Visit the WP 2FA %1$s for more information or %2$s with any questions you might have. We look forward to hearing from you.', 'wp-2fa' ),
412 '<a target="_blank" href="' . esc_url( 'https://wp2fa.io' ) . '">' . esc_html__( 'plugin website', 'wp-2fa' ) . '</a>',
413 '<a target="_blank" href="' . esc_url( 'https://wp2fa.io/contact/' ) . '">' . esc_html__( 'contact us', 'wp-2fa' ) . '</a>'
414 );
415
416 echo $text; // phpcs:ignore Visit the WP 2FA plugin website for more information or contact us with any questions you might have. We look forward to hearing from you.
417 ?>
418 </p>
419 </div>
420 </div>
421 <?php
422 }
423
424 /**
425 * Add "_blank" attr to pricing link to ensure it opens in new tab.
426 *
427 * @return void
428 */
429 public static function pricing_new_tab_js() {
430 ?>
431 <script type="text/javascript">
432 jQuery( document ).ready( function() {
433 jQuery( '.wp-2fa.pricing' ).parent().attr( 'target', '_blank' );
434 });
435 </script>
436 <?php
437 }
438 }
439