PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 5.2.01
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v5.2.01
6.35 6.34 6.33.1 6.33 6.32.1 6.32 6.31 6.25 6.25.1 6.26 6.26.1 6.27 6.28 6.29 6.3 6.3.1 6.3.2 6.30 6.4 6.4.1 6.4.2 6.5 6.5.1 6.5.2 6.5.3 All 141 releases
formidable / classes / controllers / FrmSMTPController.php

FrmSMTPController.php in Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More 5.2.01, at classes/controllers/FrmSMTPController.php

544 lines 16.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) {
3 die( 'You are not allowed to call this page directly.' );
4 }
5
6 /**
7 * SMTP Sub-page.
8 *
9 * @since 4.04.04
10 */
11 class FrmSMTPController {
12
13 /**
14 * Admin menu page slug.
15 *
16 * @since 4.04.04
17 *
18 * @var string
19 */
20 private $slug = 'formidable-smtp';
21
22 /**
23 * @since 4.04.04
24 *
25 * @var array
26 */
27 private $config = array(
28 'lite_plugin' => 'wp-mail-smtp/wp_mail_smtp.php',
29 'lite_download_url' => 'https://downloads.wordpress.org/plugin/wp-mail-smtp.zip',
30 'pro_plugin' => 'wp-mail-smtp-pro/wp_mail_smtp.php',
31 'smtp_settings' => 'admin.php?page=wp-mail-smtp',
32 );
33
34 /**
35 * Runtime data used for generating page HTML.
36 *
37 * @since 4.04.04
38 *
39 * @var array
40 */
41 private $output_data = array();
42
43 /**
44 * Hooks.
45 *
46 * @since 4.04.04
47 */
48 public static function load_hooks() {
49
50 add_filter( 'wp_mail_smtp_is_white_labeled', '__return_true' );
51
52 $self = new self();
53 if ( wp_doing_ajax() ) {
54 add_action( 'wp_ajax_frm_smtp_page_check_plugin_status', array( $self, 'ajax_check_plugin_status' ) );
55 }
56
57 add_filter( 'wp_mail_smtp_core_get_upgrade_link', array( $self, 'link' ) );
58 add_action( 'admin_menu', array( $self, 'menu' ), 999 );
59 add_action( 'wp_mail_smtp_core_recommendations_plugins', 'FrmSMTPController::remove_wpforms_nag' );
60
61 // Only load if we are actually on the SMTP page.
62 if ( ! FrmAppHelper::is_admin_page( $self->slug ) ) {
63 return;
64 }
65
66 add_action( 'admin_init', array( $self, 'redirect_to_smtp_settings' ) );
67
68 // Hook for addons.
69 do_action( 'frm_admin_pages_smtp_hooks' );
70 }
71
72 /**
73 * Customize the upgrade link.
74 */
75 public function link( $link ) {
76 $new_link = 'formidableforms.com/go-wp-mail-smtp/?urllink=wpmailsmtp%2Ecom%2Flite%2Dupgrade&';
77 $link = str_replace( 'wpmailsmtp.com/lite-upgrade/?', $new_link, $link );
78 return $link;
79 }
80
81 /**
82 * Don't nag people to install WPForms
83 *
84 * @since 4.04.04
85 */
86 public static function remove_wpforms_nag( $upsell ) {
87 if ( is_array( $upsell ) ) {
88 foreach ( $upsell as $k => $plugin ) {
89 if ( strpos( $plugin['slug'], 'wpforms' ) !== false ) {
90 unset( $upsell[ $k ] );
91 }
92 }
93 }
94
95 return $upsell;
96 }
97
98 /**
99 * SMTP submenu page.
100 */
101 public function menu() {
102 add_submenu_page( 'formidable', __( 'SMTP', 'formidable' ) . ' | Formidable', __( 'SMTP', 'formidable' ), 'activate_plugins', $this->slug, array( $this, 'output' ) );
103 }
104
105 /**
106 * Generate and output page HTML.
107 *
108 * @since 4.04.04
109 */
110 public function output() {
111 FrmAppHelper::include_svg();
112 $this->css();
113
114 echo '<div id="frm-admin-smtp" class="wrap frm-wrap frm-admin-plugin-landing">';
115
116 $this->output_section_heading();
117 $this->output_section_screenshot();
118 $this->output_section_step_install();
119 $this->output_section_step_setup();
120
121 echo '</div>';
122 }
123
124 /**
125 * Generate and output heading section HTML.
126 *
127 * @since 4.04.04
128 */
129 protected function output_section_heading() {
130 $size = array(
131 'height' => 90,
132 'width' => 90,
133 );
134
135 // Heading section.
136 ?>
137 <section class="top">
138 <div class="frm-smtp-logos">
139 <?php
140 FrmAppHelper::show_logo( $size );
141 FrmAppHelper::icon_by_class(
142 'frmfont frm_heart_solid_icon',
143 array(
144 'aria-label' => 'Loves',
145 'style' => 'width:30px;height:30px;margin:0 35px;',
146 'color' => '#d11c25',
147 )
148 );
149 $this->stmp_logo();
150 ?>
151 </div>
152 <h1><?php esc_html_e( 'Making Email Deliverability Easy for WordPress', 'formidable' ); ?></h1>
153 <p><?php esc_html_e( 'WP Mail SMTP allows you to easily set up WordPress to use a trusted provider to reliably send emails, including form notifications.', 'formidable' ); ?></p>
154 </section>
155 <?php
156 }
157
158 /**
159 * Generate and output screenshot section HTML.
160 *
161 * @since 4.04.04
162 */
163 protected function output_section_screenshot() {
164
165 printf(
166 '<section class="screenshot">
167 <div class="cont">
168 <img src="%1$s" alt="%2$s"/>
169 </div>
170 <ul>
171 <li>%3$s %4$s</li>
172 <li>%3$s %5$s</li>
173 <li>%3$s %6$s</li>
174 <li>%3$s %7$s</li>
175 </ul>
176 </section>',
177 esc_url( FrmAppHelper::plugin_url() . '/images/smtp-screenshot-tnail.png' ),
178 esc_attr__( 'WP Mail SMTP screenshot', 'formidable' ),
179 '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 492 492" width="14" height="14"><path d="M484 227L306 49a27 27 0 00-38 0l-16 16a27 27 0 000 38l104 105H27c-15 0-27 11-27 26v23c0 15 12 27 27 27h330L252 389a27 27 0 000 38l16 16a27 27 0 0038 0l178-178a27 27 0 000-38z" fill="#5bbfa5"/></svg> &nbsp;',
180 esc_html__( 'Over 1,000,000 websites use WP Mail SMTP.', 'formidable' ),
181 esc_html__( 'Send emails authenticated via trusted parties.', 'formidable' ),
182 esc_html__( 'Transactional Mailers: Pepipost, SendinBlue, Mailgun, SendGrid, Amazon SES.', 'formidable' ),
183 esc_html__( 'Web Mailers: Gmail, G Suite, Office 365, Outlook.com.', 'formidable' )
184 );
185 }
186
187 /**
188 * Generate and output step 'Install' section HTML.
189 *
190 * @since 4.04.04
191 */
192 protected function output_section_step_install() {
193
194 $step = $this->get_data_step_install();
195
196 if ( empty( $step ) ) {
197 return;
198 }
199
200 $icon = FrmAppHelper::icon_by_class(
201 'frmfont ' . $step['icon'],
202 array(
203 'aria-label' => __( 'Step 1', 'formidable' ),
204 'echo' => false,
205 'style' => 'width:50px;height:50px;',
206 )
207 );
208
209 /* translators: %s: Name of the plugin */
210 $label = sprintf( __( 'Install and Activate %s', 'formidable' ), 'WP Mail SMTP' );
211
212 printf(
213 '<section class="step step-install">
214 <aside class="num">
215 %1$s
216 <i class="loader hidden"></i>
217 </aside>
218 <div>
219 <h2>%2$s</h2>
220 <p>%3$s</p>
221 <span><a rel="%4$s" class="button button-primary frm-button-primary %5$s" aria-label="%6$s">%7$s</a></span>
222 </div>
223 </section>',
224 FrmAppHelper::kses( $icon, array( 'a', 'i', 'span', 'use', 'svg' ) ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
225 esc_html( $label ),
226 esc_html__( 'Install WP Mail SMTP from the WordPress.org plugin repository.', 'formidable' ),
227 esc_attr( $step['plugin'] ),
228 esc_attr( $step['button_class'] ),
229 esc_attr( $step['button_action'] ),
230 esc_html( $step['button_text'] )
231 );
232 }
233
234 /**
235 * Generate and output step 'Setup' section HTML.
236 *
237 * @since 4.04.04
238 */
239 protected function output_section_step_setup() {
240
241 $step = $this->get_data_step_setup();
242
243 if ( empty( $step ) ) {
244 return;
245 }
246
247 $icon = FrmAppHelper::icon_by_class(
248 'frmfont ' . $step['icon'],
249 array(
250 'aria-label' => __( 'Step 2', 'formidable' ),
251 'echo' => false,
252 'style' => 'width:50px;height:50px;',
253 )
254 );
255
256 printf(
257 '<section class="step step-setup %1$s">
258 <aside class="num">
259 %2$s
260 <i class="loader hidden"></i>
261 </aside>
262 <div>
263 <h2>%3$s</h2>
264 <p>%4$s</p>
265 <span><a href="%5$s" class="button button-primary frm-button-primary %6$s">%7$s</a></span>
266 </div>
267 </section>',
268 esc_attr( $step['section_class'] ),
269 FrmAppHelper::kses( $icon, array( 'a', 'i', 'span', 'use', 'svg' ) ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
270 esc_html__( 'Set Up WP Mail SMTP', 'formidable' ),
271 esc_html__( 'Select and configure your mailer.', 'formidable' ),
272 esc_url( admin_url( $this->config['smtp_settings'] ) ),
273 esc_attr( $step['button_class'] ),
274 esc_html( $step['button_text'] )
275 );
276 }
277
278 /**
279 * Step 'Install' data.
280 *
281 * @since 4.04.04
282 *
283 * @return array Step data.
284 */
285 protected function get_data_step_install() {
286
287 $lite_plugin = new FrmInstallPlugin( array( 'plugin_file' => $this->config['lite_plugin'] ) );
288 $pro_plugin = new FrmInstallPlugin( array( 'plugin_file' => $this->config['pro_plugin'] ) );
289
290 $this->output_data['plugin_installed'] = $lite_plugin->is_installed();
291 $this->output_data['pro_plugin_installed'] = $pro_plugin->is_installed();
292 $this->output_data['plugin_activated'] = false;
293 $this->output_data['plugin_setup'] = false;
294
295 $step = array(
296 'icon' => 'frm_step1_icon',
297 'button_action' => '',
298 );
299
300 $is_installed = $this->output_data['plugin_installed'] || $this->output_data['pro_plugin_installed'];
301 if ( ! $is_installed ) {
302 // Return the download url.
303 $step['button_text'] = __( 'Install WP Mail SMTP', 'formidable' );
304 $step['button_class'] = 'frm-install-addon';
305 $step['button_action'] = __( 'Install', 'formidable' );
306 $step['plugin'] = $this->config['lite_download_url'];
307 return $step;
308 }
309
310 $this->output_data['plugin_activated'] = $this->is_smtp_activated();
311 $this->output_data['plugin_setup'] = $this->is_smtp_configured();
312
313 $step['plugin'] = $this->output_data['pro_plugin_installed'] ? $this->config['pro_plugin'] : $this->config['lite_plugin'];
314
315 if ( $this->output_data['plugin_activated'] ) {
316 $step['icon'] = 'frm_step_complete_icon';
317 $step['button_text'] = __( 'WP Mail SMTP Installed & Activated', 'formidable' );
318 $step['button_class'] = 'grey disabled';
319 } else {
320 $step['button_text'] = __( 'Activate WP Mail SMTP', 'formidable' );
321 $step['button_class'] = 'frm-activate-addon';
322 $step['button_action'] = __( 'Activate', 'formidable' );
323 }
324
325 return $step;
326 }
327
328 /**
329 * Step 'Setup' data.
330 *
331 * @since 4.04.04
332 *
333 * @return array Step data.
334 */
335 protected function get_data_step_setup() {
336
337 $step = array();
338
339 $step['icon'] = 'frm_step2_icon';
340 $step['section_class'] = $this->output_data['plugin_activated'] ? '' : 'grey';
341 $step['button_text'] = esc_html__( 'Start Setup', 'formidable' );
342 $step['button_class'] = 'grey disabled';
343
344 if ( $this->output_data['plugin_setup'] ) {
345 $step['icon'] = 'frm_step_complete_icon';
346 $step['section_class'] = '';
347 $step['button_text'] = esc_html__( 'Go to SMTP settings', 'formidable' );
348 } elseif ( $this->output_data['plugin_activated'] ) {
349 $step['button_class'] = '';
350 }
351
352 return $step;
353 }
354
355 /**
356 * Whether WP Mail SMTP plugin configured or not.
357 *
358 * @since 4.04.04
359 *
360 * @return bool True if some mailer is selected and configured properly.
361 */
362 protected function is_smtp_configured() {
363
364 if ( ! $this->is_smtp_activated() ) {
365 return false;
366 }
367
368 $phpmailer = $this->get_phpmailer();
369
370 $mailer = WPMailSMTP\Options::init()->get( 'mail', 'mailer' );
371 $is_mailer_complete = wp_mail_smtp()->get_providers()->get_mailer( $mailer, $phpmailer )->is_mailer_complete();
372
373 return 'mail' !== $mailer && $is_mailer_complete;
374 }
375
376 /**
377 * Whether WP Mail SMTP plugin active or not.
378 *
379 * @since 4.04.04
380 *
381 * @return bool True if SMTP plugin is active.
382 */
383 protected function is_smtp_activated() {
384 return function_exists( 'wp_mail_smtp' ) && ( is_plugin_active( $this->config['lite_plugin'] ) || is_plugin_active( $this->config['pro_plugin'] ) );
385 }
386
387
388 /**
389 * Get $phpmailer instance.
390 *
391 * @since 4.04.04
392 *
393 * @return PHPMailer Instance of PHPMailer.
394 */
395 protected function get_phpmailer() {
396 global $phpmailer;
397
398 if ( ! is_object( $phpmailer ) || ! is_a( $phpmailer, 'PHPMailer' ) ) {
399 if ( is_callable( array( wp_mail_smtp(), 'generate_mail_catcher' ) ) ) {
400 $phpmailer = wp_mail_smtp()->generate_mail_catcher( true ); // phpcs:ignore
401 } else {
402 require_once ABSPATH . WPINC . '/class-phpmailer.php';
403 $phpmailer = new PHPMailer( true ); // phpcs:ignore
404 }
405 }
406
407 return $phpmailer;
408 }
409
410 /**
411 * Redirect to SMTP settings page if it is activated..
412 *
413 * @since 4.04.04
414 */
415 public function redirect_to_smtp_settings() {
416 if ( $this->is_smtp_configured() ) {
417 wp_safe_redirect( admin_url( $this->config['smtp_settings'] ) );
418 exit;
419 }
420 }
421
422 private function stmp_logo() {
423 ?>
424 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60" height="90" width="90"><defs><style>.cls-11,.cls-12{fill-rule:evenodd}.cls-4{fill:none}.cls-11{fill:#86a196}.cls-12{fill:#fff}</style></defs><path class="cls-4" d="M-6.3 0h60v60h-60z"/><path d="M16.7 8.1a15.4 15.4 0 00-8 10.2 23.5 23.5 0 1030 0 15.4 15.4 0 00-9.3-10.8 3.4 3.4 0 00-2.1-2.7A4.6 4.6 0 0018.4 3a24.4 24.4 0 00-1.7 5z" fill="#395360" fill-rule="evenodd"/><path fill="#fbaa6f" d="M18 26h12v14H18z"/><path d="M25.9 33.2l-.1-.1a1.4 1.4 0 111.6-2.3 1.9 1.9 0 00-1.2.8 1.9 1.9 0 00-.3 1.6zm-4.5 0a1.8 1.8 0 00-.4-1.6 2 2 0 00-1.2-.8 1.4 1.4 0 011.6 2.3zm7.2-3.2h.5l-1 4.8-2.2 6.5h-4.3l-3.2-5.4 1.1-3.2 2.1 2.7c.6.5 2.7.5 3.8-.6a26.2 26.2 0 003.2-4.8z" fill="#dc7f3c" fill-rule="evenodd"/><path d="M9.7 29H15v-9h-4a13 13 0 017.4-10q1.2-5 2.8-6.8l.1-.1.1-.1a2.3 2.3 0 011.1-.5 2.3 2.3 0 012.2 3.8 1.6 1.6 0 01-.4.3A15 15 0 0023 8a5 5 0 013-1.5 1.4 1.4 0 01.7.2 1.3 1.3 0 01.5 1.8 1.3 1.3 0 01-.6.6 13 13 0 0110.1 11l.1.8H33v8h4.8l1.8 13.4q-6.3 4-15.8 4T8 42.4zM25 38.4q3.8-6.4 3.8-7.6c0-2.2-3.2-4-4.8-4s-4.9 1.7-4.9 4q0 1.2 3.8 7.6a1.2 1.2 0 001 .6 1 1 0 001-.6z" fill="#bdcfc8" fill-rule="evenodd"/><path class="cls-4" d="M19 31h9.6L27 47.2h-6.4l-1.6-16z"/><path d="M39.8 48.8a20 20 0 01-32 0l.8-6a2.7 2.7 0 001 .1 2.8 2.8 0 002.8-2.4v1.2a2.8 2.8 0 005.6 0v1.6a2.9 2.9 0 005.7 0 2.8 2.8 0 005.7 0v-1.6a2.8 2.8 0 105.7 0v-1.2A2.8 2.8 0 0038 43a2.9 2.9 0 001-.2l.8 6z" fill="#809eb0" fill-rule="evenodd"/><path d="M8.3 44.6l.3-1.8a2.7 2.7 0 001 .2 2.8 2.8 0 002.8-2.5v1.2a2.8 2.8 0 005.7 0v1.7a2.9 2.9 0 005.6 0 2.8 2.8 0 005.7 0v-1.7a2.8 2.8 0 105.7 0v-1.2A2.8 2.8 0 0038 43a2.9 2.9 0 001-.2l.3 2a2.9 2.9 0 01-4.1-2.2v1.2a2.8 2.8 0 11-5.7 0v1.6a2.8 2.8 0 01-5.7 0 2.9 2.9 0 01-5.7 0v-1.7a2.8 2.8 0 01-5.7 0v-1.2A2.8 2.8 0 019.6 45a2.9 2.9 0 01-1.3-.3z" fill="#738e9e" fill-rule="evenodd"/><path class="cls-11" d="M37.8 22.4c-1-2.9-3-4.7-4.7-4.5-2.2.2-2.8 3.7-2.3 8s1.7 7.5 3.9 7.3 4-3.9 3.6-8c0 1.2-.5 2.3-1.3 2.4-1.2 0-1.5-1.2-1.6-2.9s-.2-3 1-3a1.5 1.5 0 011.4.7z"/><path class="cls-12" d="M37 21.8c-.6-1.3-1.5-2-2.4-1.9-1.5.1-1.9 2.6-1.6 5.5s1.2 5.1 2.7 5c1.1-.2 2-1.5 2.2-3.4a1.2 1.2 0 01-1 .6c-1 0-1.4-1.2-1.5-2.9s-.1-3 1-3a1.6 1.6 0 01.6 0z"/><path class="cls-11" d="M9.6 22.4c1-2.9 3-4.7 4.7-4.5 2.2.2 2.8 3.7 2.3 8s-1.7 7.5-3.9 7.3-4-3.9-3.7-8c.1 1.2.5 2.3 1.4 2.4 1.1 0 1.5-1.2 1.6-2.9s.1-3-1-3a1.5 1.5 0 00-1.4.7z"/><path class="cls-12" d="M10.4 21.8c.6-1.3 1.5-2 2.4-1.9 1.5.1 1.8 2.6 1.5 5.5s-1.1 5.1-2.6 5c-1.1-.2-2-1.5-2.2-3.4a1.2 1.2 0 00.9.6c1.1 0 1.4-1.2 1.6-2.9s.1-3-1-3a1.7 1.7 0 00-.7 0z"/><path d="M19 28.6a5.3 5.3 0 010-.7c0-2.4 1.2-5.2 4.9-5.2s4.8 2.8 4.8 5.2a4.4 4.4 0 010 1c-.9-1.3-2.4-2.1-4.9-2.1-2.4 0-3.9.7-4.8 1.8z" fill="#f4f8ff" fill-rule="evenodd"/><path class="cls-11" d="M26.5 9.2L23.3 9l4-1.2a1.4 1.4 0 01-.8 1.4zm-3.5-1l-1.3 1a16.8 16.8 0 002-3.8 6.6 6.6 0 00.3-2.7A2.4 2.4 0 0125.2 5a2.4 2.4 0 01-.7 1.5A15 15 0 0023 8.1z"/></svg>
425 <?php
426 }
427
428 private function css() {
429 ?>
430 <style>
431 #frm-admin-smtp *, #frm-admin-smtp *::before, #frm-admin-smtpp *::after {
432 -webkit-box-sizing: border-box;
433 -moz-box-sizing: border-box;
434 box-sizing: border-box;
435 }
436 #frm-admin-smtp{
437 width: 700px;
438 margin: 0 auto;
439 }
440 #frm-admin-smtp p {
441 font-size: 15px;
442 }
443 #frm-admin-smtp section{
444 margin: 50px 0;
445 text-align: left;
446 clear: both;
447 }
448 #frm-admin-smtp .top{
449 text-align: center;
450 }
451 .frm-smtp-logos {
452 margin-bottom: 38px;
453 }
454 .frm-smtp-logos svg {
455 vertical-align: middle;
456 }
457 #frm-admin-smtp .top h1 {
458 font-size: 26px;
459 font-weight: 600;
460 margin-bottom: 0;
461 padding: 0;
462 }
463 #frm-admin-smtp .top p {
464 font-size: 17px;
465 color: #777;
466 margin-top: .5em;
467 }
468 #frm-admin-smtp .screenshot ul {
469 display: inline-block;
470 margin: 0 0 0 30px;
471 list-style-type: none;
472 max-width: calc(100% - 350px);
473 }
474 #frm-admin-smtp .screenshot li {
475 margin: 16px 0;
476 padding: 0;
477 font-size: 15px;
478 color: #777;
479 }
480 #frm-admin-smtp .screenshot .cont img {
481 max-width: 100%;
482 display: block;
483 }
484 #frm-admin-smtp .screenshot .cont {
485 display: inline-block;
486 position: relative;
487 width: 315px;
488 padding: 5px;
489 background-color: #fff;
490 border-radius: 3px;
491 }
492 #frm-admin-smtp .step,
493 #frm-admin-smtp .screenshot .cont {
494 -webkit-box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.05);
495 -moz-box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.05);
496 box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.05);
497 }
498 #frm-admin-smtp .step {
499 background-color: #F9F9F9;
500 border: 1px solid #E5E5E5;
501 margin: 0 0 25px;
502 }
503 #frm-admin-smtp .screenshot > *,
504 #frm-admin-smtp .step > * {
505 vertical-align: middle;
506 }
507 #frm-admin-smtp .step p {
508 font-size: 16px;
509 color: #777777;
510 }
511 #frm-admin-smtp .step .num {
512 display: inline-block;
513 position: relative;
514 width: 100px;
515 height: 50px;
516 text-align: center;
517 }
518 #frm-admin-smtp .step div {
519 display: inline-block;
520 width: calc(100% - 104px);
521 background-color: #fff;
522 padding: 30px;
523 border-left: 1px solid #eee;
524 }
525 #frm-admin-smtp .grey {
526 opacity: 0.5;
527 background: #F6F6F6 !important;
528 border-color: #ddd !important;
529 color: #9FA5AA !important;
530 }
531 #frm-admin-smtp .step h2 {
532 font-size: 24px;
533 line-height: 22px;
534 margin-top: 0;
535 margin-bottom: 15px;
536 }
537 #frm-admin-smtp .button.disabled {
538 cursor: default;
539 }
540 </style>
541 <?php
542 }
543 }
544