*/
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();