save_settings(); // Determine the current active settings tab. $this->view = isset( $_GET['view'] ) ? esc_html( $_GET['view'] ) : 'general'; add_action( 'admin_enqueue_scripts', array( $this, 'enqueues' ) ); add_action( 'wpforms_admin_page', array( $this, 'output' ) ); // Hook for addons. do_action( 'wpforms_settings_init' ); } } /** * Sanitize and save settings. * * @since 1.3.9 */ public function save_settings() { // Check nonce and other various security checks. if ( ! isset( $_POST['wpforms-settings-submit'] ) ) { return; } if ( ! wp_verify_nonce( $_POST['nonce'], 'wpforms-settings-nonce' ) ) { return; } if ( ! wpforms_current_user_can() ) { return; } if ( empty( $_POST['view'] ) ) { return; } // Get registered fields and current settings. $fields = $this->get_registered_settings( $_POST['view'] ); $settings = get_option( 'wpforms_settings', array() ); if ( empty( $fields ) || ! is_array( $fields ) ) { return; } // Sanitize and prep each field. foreach ( $fields as $id => $field ) { // Certain field types are not valid for saving and are skipped. $exclude = apply_filters( 'wpforms_settings_exclude_type', array( 'content', 'license', 'providers' ) ); if ( empty( $field['type'] ) || in_array( $field['type'], $exclude, true ) ) { continue; } $value = isset( $_POST[ $id ] ) ? trim( $_POST[ $id ] ) : false; $value_prev = isset( $settings[ $id ] ) ? $settings[ $id ] : false; // Custom filter can be provided for sanitizing, otherwise use // defaults. if ( ! empty( $field['filter'] ) && function_exists( $field['filter'] ) ) { $value = call_user_func( $field['filter'], $value, $id, $field, $value_prev ); } else { switch ( $field['type'] ) { case 'checkbox': $value = (bool) $value; break; case 'image': $value = esc_url_raw( $value ); break; case 'color': $value = wpforms_sanitize_hex_color( $value ); break; case 'text': case 'radio': case 'select': default: $value = sanitize_text_field( $value ); break; } } // Add to settings. $settings[ $id ] = $value; } // Save settings. update_option( 'wpforms_settings', $settings ); WPForms_Admin_Notice::success( esc_html__( 'Settings were successfully saved.', 'wpforms-lite' ) ); } /** * Enqueue assets for the settings page. * * @since 1.0.0 */ public function enqueues() { do_action( 'wpforms_settings_enqueue' ); } /** * Return registered settings tabs. * * @since 1.3.9 * @return array */ public function get_tabs() { $tabs = array( 'general' => array( 'name' => esc_html__( 'General', 'wpforms-lite' ), 'form' => true, 'submit' => esc_html__( 'Save Settings', 'wpforms-lite' ), ), 'email' => array( 'name' => esc_html__( 'Email', 'wpforms-lite' ), 'form' => true, 'submit' => esc_html__( 'Save Settings', 'wpforms-lite' ), ), 'recaptcha' => array( 'name' => esc_html__( 'reCAPTCHA', 'wpforms-lite' ), 'form' => true, 'submit' => esc_html__( 'Save Settings', 'wpforms-lite' ), ), 'validation' => array( 'name' => esc_html__( 'Validation', 'wpforms-lite' ), 'form' => true, 'submit' => esc_html__( 'Save Settings', 'wpforms-lite' ), ), 'integrations' => array( 'name' => esc_html__( 'Integrations', 'wpforms-lite' ), 'form' => false, 'submit' => false, ), 'misc' => array( 'name' => esc_html__( 'Misc', 'wpforms-lite' ), 'form' => true, 'submit' => esc_html__( 'Save Settings', 'wpforms-lite' ), ), ); return apply_filters( 'wpforms_settings_tabs', $tabs ); } /** * Output tab navigation area. * * @since 1.3.9 */ public function tabs() { $tabs = $this->get_tabs(); echo '
' . esc_html__( 'reCAPTCHA is a free anti-spam service from Google which helps to protect your website from spam and abuse while letting real people pass through with ease.', 'wpforms-lite' ) . '
'; $recaptcha_desc .= '' . esc_html__( 'Google\'s original checkbox reCAPTCHA prompts users to check a box to prove they\'re human, whereas the newer Invisible reCAPTCHA uses advanced technology to detect real users without requiring any input. WPForms supports both versions of Google\'s v2 reCAPTCHA.', 'wpforms-lite' ) . '
'; $recaptcha_desc .= '' . esc_html__( 'Sites already using the original checkbox reCAPTCHA will need to create new site keys before switching to the Invisible reCAPTCHA.', 'wpforms-lite' ) . '
'; $recaptcha_desc .= '' . sprintf( wp_kses( /* translators: %s - WPForms.com Setup Captcha URL. */ __( 'Read our walk through to learn more and for step-by-step directions.', 'wpforms-lite' ), array( 'a' => array( 'href' => array(), 'target' => array(), 'rel' => array(), ), ) ), 'https://wpforms.com/docs/setup-captcha-wpforms/' ) . '
'; $defaults = array( // General Settings tab. 'general' => array( 'license-heading' => array( 'id' => 'license-heading', 'content' => '' . esc_html__( 'Your license key provides access to updates and addons.', 'wpforms-lite' ) . '
', 'type' => 'content', 'no_label' => true, 'class' => array( 'section-heading' ), ), 'license-key' => array( 'id' => 'license-key', 'name' => esc_html__( 'License Key', 'wpforms-lite' ), 'type' => 'license', ), 'general-heading' => array( 'id' => 'general-heading', 'content' => '' . esc_html__( 'These messages are displayed to the users as they fill out a form in real-time.', 'wpforms-lite' ) . '
', 'type' => 'content', 'no_label' => true, 'class' => array( 'section-heading' ), ), 'validation-required' => array( 'id' => 'validation-required', 'name' => esc_html__( 'Required', 'wpforms-lite' ), 'type' => 'text', 'default' => esc_html__( 'This field is required.', 'wpforms-lite' ), ), 'validation-url' => array( 'id' => 'validation-url', 'name' => esc_html__( 'Website URL', 'wpforms-lite' ), 'type' => 'text', 'default' => esc_html__( 'Please enter a valid URL.', 'wpforms-lite' ), ), 'validation-email' => array( 'id' => 'validation-email', 'name' => esc_html__( 'Email', 'wpforms-lite' ), 'type' => 'text', 'default' => esc_html__( 'Please enter a valid email address.', 'wpforms-lite' ), ), 'validation-email-suggestion' => array( 'id' => 'validation-email-suggestion', 'name' => esc_html__( 'Email Suggestion', 'wpforms-lite' ), 'type' => 'text', 'default' => esc_html__( 'Did you mean {suggestion}?', 'wpforms-lite' ), ), 'validation-number' => array( 'id' => 'validation-number', 'name' => esc_html__( 'Number', 'wpforms-lite' ), 'type' => 'text', 'default' => esc_html__( 'Please enter a valid number.', 'wpforms-lite' ), ), 'validation-confirm' => array( 'id' => 'validation-confirm', 'name' => esc_html__( 'Confirm Value', 'wpforms-lite' ), 'type' => 'text', 'default' => esc_html__( 'Field values do not match.', 'wpforms-lite' ), ), 'validation-check-limit' => array( 'id' => 'validation-check-limit', 'name' => esc_html__( 'Checkbox Selection Limit', 'wpforms-lite' ), 'type' => 'text', 'default' => esc_html__( 'You have exceeded the number of allowed selections: {#}.', 'wpforms-lite' ), ), ), // Provider integrations settings tab. 'integrations' => array( 'integrations-heading' => array( 'id' => 'integrations-heading', 'content' => '' . esc_html__( 'Manage integrations with popular providers such as Constant Contact, MailChimp, Zapier, and more.', 'wpforms-lite' ) . '
', 'type' => 'content', 'no_label' => true, 'class' => array( 'section-heading' ), ), 'integrations-providers' => array( 'id' => 'integrations-providers', 'content' => '' . esc_html__( 'Manage integrations with popular providers such as Constant Contact, MailChimp, Zapier, and more.', 'wpforms-lite' ) . '
', 'type' => 'providers', 'wrap' => 'none', ), ), // Misc. settings tab. 'misc' => array( 'misc-heading' => array( 'id' => 'misc-heading', 'content' => '