PluginProbe ʕ •ᴥ•ʔ
Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder with AI / 3.5.2
Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder with AI v3.5.2
3.5.2 3.5.1 3.5.0 3.4.8 3.4.7 3.4.6 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5.1 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.10 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.6.1 1.6.7 1.7.0 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.2 1.7.2.1 1.7.2.2 1.7.3 1.7.4 1.7.5 1.7.5.1 1.7.5.2 1.7.6 1.7.7 1.7.7.1 1.7.7.2 1.7.8 1.7.9 1.8.0 1.8.0.1 1.8.1 1.8.2 1.8.2.1 1.8.2.2 1.8.2.3 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.0.1 1.9.1 1.9.2 1.9.3 1.9.4 1.9.4.1 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.0.1 2.0.1 2.0.2 2.0.3 2.0.3.1 2.0.4 2.0.4.1 2.0.5 2.0.6 2.0.7 2.0.8 2.0.8.1 2.0.9 3.0.0 3.0.0.1 3.0.1 3.0.2 3.0.3 3.0.3.1 3.0.4 3.0.4.1 3.0.4.2 3.0.5 3.0.5.1 3.0.5.2 3.0.6 3.0.6.1 3.0.7.1 3.0.8 3.0.8.1 3.0.9 3.0.9.1 3.0.9.2 3.0.9.3 3.0.9.4 3.0.9.5 3.1.0 3.1.1 3.1.2 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.3.0 3.4.0 3.4.1 3.4.2 3.4.2.1 3.4.3 3.4.4 3.4.5 trunk 1.0 1.0.1 1.0.2 1.0.3
everest-forms / includes / admin / class-evf-admin-menus.php
everest-forms / includes / admin Last commit date
builder 3 weeks ago form-migrator 3 weeks ago plugin-updates 8 years ago settings 3 weeks ago views 3 weeks ago class-evf-admin-addons.php 4 months ago class-evf-admin-assets.php 4 days ago class-evf-admin-builder.php 2 months ago class-evf-admin-dashboard.php 3 weeks ago class-evf-admin-editor.php 4 years ago class-evf-admin-embed-wizard.php 2 years ago class-evf-admin-entries-table-list.php 2 months ago class-evf-admin-entries.php 2 months ago class-evf-admin-form-templates.php 3 weeks ago class-evf-admin-forms-table-list.php 4 months ago class-evf-admin-forms.php 4 months ago class-evf-admin-import-export.php 3 weeks ago class-evf-admin-menus.php 3 weeks ago class-evf-admin-notices.php 4 months ago class-evf-admin-preview-confirmation.php 11 months ago class-evf-admin-settings.php 3 weeks ago class-evf-admin-tools.php 2 months ago class-evf-admin-welcome.php 2 years ago class-evf-admin.php 2 months ago class-evf-base-list-table.php 4 months ago evf-admin-functions.php 3 weeks ago
class-evf-admin-menus.php
533 lines
1 <?php
2 /**
3 * Setup menus in WP admin.
4 *
5 * @package EverestForms\Admin
6 * @version 1.2.0
7 * @since 1.0.0
8 */
9
10 defined( 'ABSPATH' ) || exit;
11
12 if ( class_exists( 'EVF_Admin_Menus', false ) ) {
13 return new EVF_Admin_Menus();
14 }
15
16 /**
17 * EVF_Admin_Menus Class.
18 */
19 class EVF_Admin_Menus {
20
21 /**
22 * Hook in tabs.
23 */
24 public function __construct() {
25 // Add menus.
26 add_action( 'admin_menu', array( $this, 'admin_menu' ), 9 );
27 add_action( 'admin_menu', array( $this, 'dashboard_menu' ), 9 );
28 add_action( 'admin_menu', array( $this, 'builder_menu' ), 20 );
29 add_action( 'admin_menu', array( $this, 'entries_menu' ), 30 );
30 add_action( 'admin_menu', array( $this, 'payments_menu' ), 55 );
31 add_action( 'admin_menu', array( $this, 'analytics_menu' ), 10 );
32 add_action( 'admin_menu', array( $this, 'settings_menu' ), 50 );
33 add_action( 'admin_menu', array( $this, 'tools_menu' ), 60 );
34 add_action( 'admin_menu', array( $this, 'smtp_menu' ), 75 );
35 // Add admin topbar menu.
36 add_action( 'admin_bar_menu', array( $this, 'admin_top_menu_bar' ), 100 );
37
38 if ( apply_filters( 'everest_forms_show_addons_page', true ) ) {
39 add_action( 'admin_menu', array( $this, 'addons_menu' ), 70 );
40 }
41
42 if ( ! evf_get_license_plan() ) {
43 add_action( 'admin_menu', array( $this, 'upgrade_to_pro_menu' ), 80 );
44 }
45
46 add_action( 'admin_head', array( $this, 'menu_highlight' ) );
47 add_action( 'admin_head', array( $this, 'custom_menu_count' ) );
48 add_action( 'admin_head', array( $this, 'hide_submenu_items' ) );
49 add_filter( 'custom_menu_order', array( $this, 'custom_menu_order' ) );
50 add_filter( 'set-screen-option', array( $this, 'set_screen_option' ), 11, 3 );
51 }
52
53 /**
54 * Returns a base64 URL for the SVG for use in the menu.
55 *
56 * @param string $fill SVG Fill color code. Default: '#82878c'.
57 * @param bool $base64 Whether or not to return base64-encoded SVG.
58 * @return string
59 */
60 public static function get_icon_svg( $fill = '#82878c', $base64 = true ) {
61 $svg = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path fill="' . $fill . '" d="M18.1 4h-3.8l1.2 2h3.9zM20.6 8h-3.9l1.2 2h3.9zM20.6 18H5.8L12 7.9l2.5 4.1H12l-1.2 2h7.3L12 4.1 2.2 20h19.6z"/></g></svg>';
62
63 if ( $base64 ) {
64 return 'data:image/svg+xml;base64,' . base64_encode( $svg );
65 }
66
67 return $svg;
68 }
69
70 /**
71 * Admin top menu bar.
72 *
73 * @param \WP_Admin_Bar $wp_admin_bar Instance of admin bar.
74 */
75 public function admin_top_menu_bar( WP_Admin_Bar $wp_admin_bar ) {
76 if ( ! is_admin_bar_showing() || ! current_user_can( 'manage_everest_forms' ) ) {
77 return;
78 }
79
80 $wp_admin_bar->add_menu(
81 array(
82 'id' => 'everest-forms-menu',
83 'parent' => null,
84 'group' => null,
85 'title' => 'Everest Forms', // you can use img tag with image link. it will show the image icon Instead of the title.
86 'href' => admin_url( 'admin.php?page=evf-builder' ),
87 )
88 );
89
90 $wp_admin_bar->add_menu(
91 array(
92 'parent' => 'everest-forms-menu',
93 'id' => 'everest-forms-all-forms',
94 'title' => __( 'All Forms', 'everest-forms' ),
95 'href' => admin_url( 'admin.php?page=evf-builder' ),
96 )
97 );
98
99 $wp_admin_bar->add_menu(
100 array(
101 'parent' => 'everest-forms-menu',
102 'id' => 'everest-forms-add-new',
103 'title' => __( 'Add New', 'everest-forms' ),
104 'href' => admin_url( 'admin.php?page=evf-builder&create-form=1' ),
105 )
106 );
107
108 $wp_admin_bar->add_menu(
109 array(
110 'parent' => 'everest-forms-menu',
111 'id' => 'everest-forms-entries',
112 'title' => __( 'Entries', 'everest-forms' ),
113 'href' => admin_url( 'admin.php?page=evf-entries' ),
114 )
115 );
116
117 $wp_admin_bar->add_menu(
118 array(
119 'parent' => 'everest-forms-menu',
120 'id' => 'everest-forms-tools',
121 'title' => __( 'Tools', 'everest-forms' ),
122 'href' => admin_url( 'admin.php?page=evf-tools' ),
123 )
124 );
125
126 $href = add_query_arg(
127 array(
128 'utm_medium' => 'admin-bar',
129 'utm_source' => 'WordPress',
130 'utm_content' => 'Documentation',
131 ),
132 'https://docs.everestforms.net/'
133 );
134
135 $wp_admin_bar->add_menu(
136 array(
137 'parent' => 'everest-forms-menu',
138 'id' => 'everest-forms-docs',
139 'title' => __( 'Docs', 'everest-forms' ),
140 'href' => $href,
141 'meta' => array(
142 'target' => '_blank',
143 'rel' => 'noopener noreferrer',
144 ),
145 )
146 );
147
148 do_action( 'everest_forms_top_admin_bar_menu', $wp_admin_bar );
149 }
150
151 /**
152 * Add menu items.
153 */
154 public function admin_menu() {
155 add_menu_page( esc_html__( 'Everest Forms', 'everest-forms' ), esc_html__( 'Everest Forms', 'everest-forms' ), 'manage_everest_forms', 'everest-forms', null, self::get_icon_svg(), '55.5' );
156 }
157
158 /**
159 * Add dashboard sub menu.
160 */
161 public function dashboard_menu() {
162
163 $site_assistant_data = get_option( 'everest_forms_site_assistant', array() );
164 $all_steps_completed = isset( $site_assistant_data['all_steps_completed'] ) && $site_assistant_data['all_steps_completed'];
165 add_submenu_page(
166 'everest-forms',
167 __( 'Site Assistant', 'everest-forms' ),
168 __( 'Site Assistant', 'everest-forms' ),
169 'manage_everest_forms',
170 'evf-dashboard',
171 array( $this, 'dashboard_page' ),
172 -1
173 );
174
175 }
176
177 /**
178 * Add menu items.
179 */
180 public function builder_menu() {
181 $capability = current_user_can( 'everest_forms_create_forms' ) ? 'everest_forms_create_forms' : ( current_user_can( 'manage_everest_forms' ) ? 'manage_everest_forms' : 'everest_forms_view_forms' );
182 $builder_page = add_submenu_page( 'everest-forms', esc_html__( 'Everest Forms Builder', 'everest-forms' ), esc_html__( 'All Forms', 'everest-forms' ), $capability, 'evf-builder', array( $this, 'builder_page' ) );
183
184 add_action( 'load-' . $builder_page, array( $this, 'builder_page_init' ) );
185
186 /*
187 * Page redirects based on user's capability as 'All Forms' and 'Add New' both have same handle.
188 *
189 * - If only `everest_forms_create_forms` roles - dont show view all forms list table.
190 * - If only `everest_forms_view_forms` roles - dont show create new template selection.
191 */
192 // if ( ! current_user_can( 'manage_everest_forms' ) ) {
193 // if ( ! current_user_can( 'everest_forms_create_forms' ) ) {
194 // if ( isset( $_GET['page'], $_GET['create-form'] ) && 'evf-builder' === $_GET['page'] ) { // phpcs:ignore WordPress.Security.NonceVerification
195 // wp_safe_redirect( admin_url( 'admin.php?page=evf-builder' ) );
196 // exit;
197 // }
198 // } elseif ( ! current_user_can( 'everest_forms_view_forms' ) ) {
199 // if ( ! isset( $_GET['create-form'] ) && ( ! empty( $_GET['page'] ) && 'evf-builder' === $_GET['page'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
200 // wp_safe_redirect( admin_url( 'admin.php?page=evf-builder&create-form=1' ) );
201 // exit;
202 // }
203 // }
204 // }
205 }
206
207 /**
208 * Loads builder page.
209 */
210 public function builder_page_init() {
211 global $current_tab, $forms_table_list;
212
213 evf()->form_fields();
214
215 // Include builder pages.
216 EVF_Admin_Builder::get_builder_pages();
217
218 // Get current tab/section.
219 $current_tab = empty( $_GET['tab'] ) ? 'fields' : sanitize_title( wp_unslash( $_GET['tab'] ) ); // phpcs:ignore WordPress.Security.NonceVerification
220
221 if ( ! isset( $_GET['tab'], $_GET['form_id'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
222 $forms_table_list = new EVF_Admin_Forms_Table_List();
223
224 // Add screen option.
225 add_screen_option(
226 'per_page',
227 array(
228 'default' => 20,
229 'option' => 'evf_forms_per_page',
230 )
231 );
232 }
233
234 do_action( 'everest_forms_builder_page_init' );
235 }
236
237 /**
238 * Add menu item.
239 */
240 public function entries_menu() {
241 $entries_page = add_submenu_page( 'everest-forms', esc_html__( 'Everest Forms Entries', 'everest-forms' ), esc_html__( 'Entries', 'everest-forms' ), current_user_can( 'everest_forms_view_entries' ) ? 'everest_forms_view_entries' : 'everest_forms_view_others_entries', 'evf-entries', array( $this, 'entries_page' ) );
242 add_action( 'load-' . $entries_page, array( $this, 'entries_page_init' ) );
243 }
244
245 /**
246 * Loads entries into memory.
247 */
248 public function entries_page_init() {
249 global $entries_table_list;
250
251 if ( ! isset( $_GET['view-entry'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
252 $entries_table_list = new EVF_Admin_Entries_Table_List();
253
254 // Add screen option.
255 add_screen_option(
256 'per_page',
257 array(
258 'default' => 20,
259 'option' => 'evf_entries_per_page',
260 )
261 );
262 }
263
264 do_action( 'everest_forms_entries_page_init' );
265 }
266
267 /**
268 * Add Payments sub menu (free version only; Pro plugin registers its own evf-payments page).
269 */
270 public function payments_menu() {
271 if ( defined( 'EFP_PLUGIN_FILE' ) ) {
272 return;
273 }
274 add_submenu_page(
275 'everest-forms',
276 esc_html__( 'Payment', 'everest-forms' ),
277 esc_html__( 'Payment', 'everest-forms' ),
278 'manage_everest_forms',
279 'evf-payment-log',
280 array( $this, 'payments_page' )
281 );
282 }
283
284 /**
285 * Payments upsell page callback (free version).
286 */
287 public function payments_page() {
288 include dirname( __FILE__ ) . '/views/html-admin-page-payments.php';
289 }
290
291 /**
292 * Add Analytics sub menu (free version only; Pro plugin registers its own evf-analytics page).
293 */
294 public function analytics_menu() {
295 if ( defined( 'EFP_PLUGIN_FILE' ) ) {
296 return;
297 }
298 add_submenu_page(
299 'everest-forms',
300 esc_html__( 'Analytics', 'everest-forms' ),
301 esc_html__( 'Analytics', 'everest-forms' ),
302 'manage_everest_forms',
303 'evf-analytics',
304 array( $this, 'analytics_page' )
305 );
306 }
307
308 /**
309 * Analytics page callback (free version).
310 */
311 public function analytics_page() {
312 echo '<div id="evf-react-header-root"></div><div class="wrap"><div id="evf-analytics-root"></div></div>';
313 }
314
315 /**
316 * Add menu item.
317 */
318 public function settings_menu() {
319 $settings_page = add_submenu_page( 'everest-forms', esc_html__( 'Everest Forms settings', 'everest-forms' ), esc_html__( 'Settings', 'everest-forms' ), 'manage_everest_forms', 'evf-settings', array( $this, 'settings_page' ) );
320
321 add_action( 'load-' . $settings_page, array( $this, 'settings_page_init' ) );
322 }
323
324 /**
325 * Loads settings page.
326 */
327 public function settings_page_init() {
328 global $current_tab, $current_section;
329
330 // Include settings pages.
331 EVF_Admin_Settings::get_settings_pages();
332
333 // Get current tab/section.
334 $current_tab = empty( $_GET['tab'] ) ? 'general' : sanitize_title( wp_unslash( $_GET['tab'] ) ); // phpcs:ignore WordPress.Security.NonceVerification
335 $current_section = empty( $_REQUEST['section'] ) ? '' : sanitize_title( wp_unslash( $_REQUEST['section'] ) ); // phpcs:ignore WordPress.Security.NonceVerification
336
337 // Save settings if data has been posted.
338 if ( apply_filters( '' !== $current_section ? "everest_forms_save_settings_{$current_tab}_{$current_section}" : "everest_forms_save_settings_{$current_tab}", ! empty( $_POST ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification
339 EVF_Admin_Settings::save();
340 }
341
342 // Add any posted messages.
343 if ( ! empty( $_GET['evf_error'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
344 EVF_Admin_Settings::add_error( wp_kses_post( wp_unslash( $_GET['evf_error'] ) ) ); // phpcs:ignore WordPress.Security.NonceVerification
345 }
346
347 if ( ! empty( $_GET['evf_message'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
348 EVF_Admin_Settings::add_message( wp_kses_post( wp_unslash( $_GET['evf_message'] ) ) ); // phpcs:ignore WordPress.Security.NonceVerification
349 }
350
351 do_action( 'everest_forms_settings_page_init' );
352 }
353
354 /**
355 * Adds SMTP into Everest Forms Menu.
356 *
357 * @since 3.0.9
358 */
359 public function smtp_menu() {
360 add_submenu_page( 'everest-forms', esc_html__( 'SMTP', 'everest-forms' ), esc_html__( 'SMTP', 'everest-forms' ), 'manage_everest_forms', 'evf-smart-smtp', array( $this, 'smtp_page' ) );
361 }
362
363 /**
364 * Add menu item.
365 */
366 public function tools_menu() {
367 add_submenu_page( 'everest-forms', esc_html__( 'Everest Forms tools', 'everest-forms' ), esc_html__( 'Tools', 'everest-forms' ), 'manage_everest_forms', 'evf-tools', array( $this, 'tools_page' ) );
368 }
369
370 /**
371 * Add menu item.
372 */
373 public function upgrade_to_pro_menu() {
374 add_submenu_page(
375 'everest-forms',
376 esc_html__( 'Everest Forms Upgrade to Pro', 'everest-forms' ),
377 sprintf(
378 '<span style="color:#FF8C39; display:flex; font-weight: 600;"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" style="vertical-align: bottom;" ><rect x="0.5" y="0.5" width="19" height="19" rx="2.5" fill="#FF8C39" stroke="#FF8C39"/><path d="M10 5L13 13H7L10 5Z" fill="#EFEFEF"/><path fill="white" fill-rule="evenodd" d="M5 7L5.71429 13H14.2857L15 7L10 11.125L5 7ZM14.2857 13.5714H5.71427V15H14.2857V13.5714Z" clip-rule="evenodd"/></svg><span style="margin-left:5px;">%s</span></span>',
379 esc_html__( 'Upgrade to Pro', 'everest-forms' )
380 ),
381 'manage_everest_forms',
382 esc_url_raw( 'https://everestforms.net/upgrade/?utm_medium=evf-dashboard&utm_source=evf-free&utm_campaign=dash-wp-sub-menu&utm_content=Upgrade%20to%20Pro' )
383 );
384 }
385
386 /**
387 * Addons menu item.
388 */
389 public function addons_menu() {
390 add_submenu_page( 'everest-forms', esc_html__( 'Everest Forms Add-ons', 'everest-forms' ), esc_html__( 'Addons', 'everest-forms' ), 'manage_everest_forms', esc_url_raw( admin_url( 'admin.php?page=evf-dashboard#/features' ) ) );
391 }
392
393 /**
394 * Highlights the correct top level admin menu item.
395 */
396 public function menu_highlight() {
397 global $parent_file, $submenu_file;
398
399 $screen = get_current_screen();
400 $screen_id = $screen ? $screen->id : '';
401
402 // Check to make sure we're on a EverestForms builder setup page.
403 if ( isset( $_GET['create-form'] ) && in_array( $screen_id, array( 'everest-forms_page_evf-builder' ), true ) ) { // phpcs:ignore WordPress.Security.NonceVerification
404 $parent_file = 'everest-forms'; // phpcs:ignore WordPress.WP.GlobalVariablesOverride
405 $submenu_file = 'evf-builder&create-form=1'; // phpcs:ignore WordPress.WP.GlobalVariablesOverride
406 }
407 }
408
409 /**
410 * Adds the custom count to the menu.
411 */
412 public function custom_menu_count() {
413 global $submenu;
414
415 // Add count if user has access.
416 if ( isset( $submenu['everest-forms'] ) ) {
417 if ( apply_filters( 'everest_forms_include_count_in_menu', true ) && current_user_can( 'manage_everest_forms' ) ) {
418 do_action( 'everest_forms_custom_menu_count' );
419 }
420 }
421 }
422
423 /**
424 * Hide submenu menu item if a user can't access.
425 *
426 * @since 1.7.5
427 */
428 public function hide_submenu_items() {
429 global $submenu;
430
431 if ( ! isset( $submenu['everest-forms'] ) ) {
432 return;
433 }
434
435 // Remove 'Everest Forms' sub menu item.
436 foreach ( $submenu['everest-forms'] as $key => $item ) {
437 if ( isset( $item[2] ) && 'everest-forms' === $item[2] ) {
438 unset( $submenu['everest-forms'][ $key ] );
439 break;
440 }
441 }
442
443 // Remove 'All Forms' sub menu item if a user can't read forms.
444 if ( ! current_user_can( 'everest_forms_view_forms' ) && ! current_user_can( 'everest_forms_create_forms' ) && ! current_user_can( 'manage_everest_forms' ) ) {
445 foreach ( $submenu['everest-forms'] as $key => $item ) {
446 if ( isset( $item[2] ) && 'evf-builder' === $item[2] ) {
447 unset( $submenu['everest-forms'][ $key ] );
448 break;
449 }
450 }
451 }
452
453 // Remove 'Add New' sub menu item if a user can't create forms.
454 if ( ! current_user_can( 'everest_forms_create_forms' ) ) {
455 foreach ( $submenu['everest-forms'] as $key => $item ) {
456 if ( isset( $item[2] ) && 'evf-builder&create-form=1' === $item[2] ) {
457 unset( $submenu['everest-forms'][ $key ] );
458 break;
459 }
460 }
461 }
462 }
463
464 /**
465 * Custom menu order.
466 *
467 * @param bool $enabled Whether custom menu ordering is already enabled.
468 * @return bool
469 */
470 public function custom_menu_order( $enabled ) {
471 return $enabled || current_user_can( 'manage_everest_forms' );
472 }
473
474 /**
475 * Validate screen options on update.
476 *
477 * @param bool|int $status Screen option value. Default false to skip.
478 * @param string $option The option name.
479 * @param int $value The number of rows to use.
480 */
481 public function set_screen_option( $status, $option, $value ) {
482 if ( in_array( $option, array( 'evf_forms_per_page', 'evf_entries_per_page' ), true ) ) {
483 return $value;
484 }
485
486 return $status;
487 }
488
489 /**
490 * Init the settings page.
491 */
492 public function dashboard_page() {
493 EVF_Admin_Dashboard::page_output();
494 }
495
496 /**
497 * Init the settings page.
498 */
499 public function builder_page() {
500 EVF_Admin_Forms::page_output();
501 }
502
503 /**
504 * Init the entries page.
505 */
506 public function entries_page() {
507 EVF_Admin_Entries::page_output();
508 }
509
510 /**
511 * Init the settings page.
512 */
513 public function settings_page() {
514 EVF_Admin_Settings::output();
515 }
516
517 /**
518 * Init the status page.
519 */
520 public function tools_page() {
521 EVF_Admin_Tools::output();
522 }
523
524 /**
525 * Smart SMTP page
526 */
527 public function smtp_page() {
528 EVF_Admin_Tools::evf_smart_smtp_setup();
529 }
530 }
531
532 return new EVF_Admin_Menus();
533