*/ if ( ! defined( 'ABSPATH' ) ) { exit; } class Group107_AccessibleDocs_Popup_Settings { /** * Constructor. * * Initializes the class and registers the settings action hook. * * @since 1.0.0 */ public function __construct() { add_action('admin_init', [$this, 'accessible_docs_register_popup_settings']); } /** * Register popup settings and fields. * * This method registers the settings group and adds the individual settings fields * for the popup configuration. * * @since 1.0.0 */ public function accessible_docs_register_popup_settings() { // Get the options name. $accessible_docs_options = Group107_AccessibleDocs_i18n::accessible_docs_get_popup_options_name(); // Register settings with a sanitize callback. register_setting('accessible_docs_popup_group', $accessible_docs_options, array( 'sanitize_callback' => array($this, 'sanitize_popup_options'), )); // Add a settings section. add_settings_section( 'accessible_docs_popup_section', __('Popup text', 'accessible-docs'), null, 'accessible-docs-popup-settings' ); $fields = $this->accessible_docs_get_popup_fields(); // Add each field to the settings section. foreach ($fields as $field_id => $label) { add_settings_field( $field_id, $label, [$this, 'accessible_docs_render_popup_settings_field'], 'accessible-docs-popup-settings', 'accessible_docs_popup_section', array('id' => $field_id, 'option_name' => $accessible_docs_options) ); } } /** * Render individual popup settings fields. * * Renders either a checkbox or a textarea, depending on the field type. * * @since 1.0.0 * * @param array $args Arguments for rendering the field, including the field ID. */ public function accessible_docs_render_popup_settings_field($args) { $options = get_option($args['option_name']); $id = esc_attr($args['id']); $option_name = esc_attr($args['option_name']); $value = isset($options[$id]) ? $options[$id] : ''; // Get current locale. $locale = Group107_AccessibleDocs_Options::accessible_docs_get_locale(); // Get default value if the field is empty. if (empty($value)) { $value = Group107_AccessibleDocs_Options::accessible_docs_get_default_value($id, $locale); } if ($id === 'accessible_docs_enable_popup') { printf( '', esc_attr($id), esc_attr($option_name), checked(1, $value, false) ); } else { printf( '', esc_attr($id), esc_attr($option_name), esc_textarea($value) ); } } /** * Get popup fields. * * @since 1.0.0 * @return array */ private function accessible_docs_get_popup_fields() { return array( 'accessible_docs_enable_popup' => __('Enable popup', 'accessible-docs'), 'accessible_docs_popup_title' => __('Popup title', 'accessible-docs'), 'accessible_docs_popup_text' => __('Popup text', 'accessible-docs'), 'accessible_docs_email_placeholder' => __('Email placeholder', 'accessible-docs'), 'accessible_docs_submit_button_text' => __('Submit button text', 'accessible-docs'), 'accessible_docs_processing_title' => __('Processing document title', 'accessible-docs'), 'accessible_docs_processing_text' => __('Processing document text', 'accessible-docs'), 'accessible_docs_completed_title' => __('Completed document title', 'accessible-docs'), 'accessible_docs_completed_text' => __('Completed document text', 'accessible-docs'), 'accessible_docs_download_non_accessible_link_text' => __('Download non-accessible file link text', 'accessible-docs'), ); } /** * Sanitize popup options. * * Sanitizes the input data from the popup settings. * * @param array $input Input settings. * @return array Sanitized settings. */ public function sanitize_popup_options($input) { if (isset($input['accessible_docs_enable_popup'])) { $input['accessible_docs_enable_popup'] = absint($input['accessible_docs_enable_popup']); } if (isset($input['accessible_docs_popup_title'])) { $input['accessible_docs_popup_title'] = sanitize_text_field($input['accessible_docs_popup_title']); } if (isset($input['accessible_docs_popup_text'])) { $input['accessible_docs_popup_text'] = wp_kses_post($input['accessible_docs_popup_text']); } if (isset($input['accessible_docs_email_placeholder'])) { $input['accessible_docs_email_placeholder'] = sanitize_text_field($input['accessible_docs_email_placeholder']); } if (isset($input['accessible_docs_submit_button_text'])) { $input['accessible_docs_submit_button_text'] = sanitize_text_field($input['accessible_docs_submit_button_text']); } if (isset($input['accessible_docs_processing_title'])) { $input['accessible_docs_processing_title'] = sanitize_text_field($input['accessible_docs_processing_title']); } if (isset($input['accessible_docs_processing_text'])) { $input['accessible_docs_processing_text'] = wp_kses_post($input['accessible_docs_processing_text']); } if (isset($input['accessible_docs_completed_title'])) { $input['accessible_docs_completed_title'] = sanitize_text_field($input['accessible_docs_completed_title']); } if (isset($input['accessible_docs_completed_text'])) { $input['accessible_docs_completed_text'] = wp_kses_post($input['accessible_docs_completed_text']); } if (isset($input['accessible_docs_download_non_accessible_link_text'])) { $input['accessible_docs_download_non_accessible_link_text'] = sanitize_text_field($input['accessible_docs_download_non_accessible_link_text']); } return $input; } } new Group107_AccessibleDocs_Popup_Settings();