data = $this->get_defaults(); } /** * Get default plugin settings * * @return array */ public function get_defaults() { return array( 'fixes' => array( 'langDir' => array( 'status' => false, ), 'removeTabIndex' => array( 'status' => false, ), 'removeTitleIfAccessibleName' => array( 'status' => false, ), 'forceUnderlineOnLinks' => array( 'status' => false, ), 'metaViewportScale' => array( 'status' => false, ), 'removeTargetBlank' => array( 'status' => false, ), 'addTargetBlankLabel' => array( 'status' => false, ), 'enableSkipLink' => array( 'status' => false, 'targets' => '', ), 'addMissingCommentFormLabels' => array( 'status' => false, ), 'addMissingSearchFormLabels' => array( 'status' => false, ), 'addFocusOutline' => array( 'status' => false, ), 'addAccessibleNamesToInteractiveElements' => array( 'status' => false, ), 'addMissingAltTextToImages' => array( 'status' => false, ), 'addMissingTitlesToFrames' => array( 'status' => false, ), ), // ADD THIS COMPLETE TOOLBAR SECTION: 'toolbar' => array( 'enabled' => false, 'features' => array( 'fontSize' => true, 'contrast' => true, 'grayscale' => true, 'hideOnSmallScreens' => false, ), 'settings' => array( 'fontSize' => 14, ), 'placement' => array( 'position' => 'right', 'verticalOffset' => 50, ), ), ); } /** * Get settings * * @param string $group Name of the group. * @param string $key Name of the key. * @return array */ public function get( $group = '', $key = '' ) { $settings = get_option( 'wya11y_settings', $this->data ); $settings = self::sanitize( $settings, $this->data ); if ( empty( $key ) && empty( $group ) ) { return $settings; } elseif ( ! empty( $key ) && ! empty( $group ) ) { $settings = isset( $settings[ $group ] ) ? $settings[ $group ] : array(); return isset( $settings[ $key ] ) ? $settings[ $key ] : array(); } else { return isset( $settings[ $group ] ) ? $settings[ $group ] : array(); } } /** * Excludes a key from sanitizing multiple times. * * @return array */ public static function get_excludes() { return array( 'selected', ); } /** * Update settings to database. * * @param array $data Array of settings data. * @return void */ public function update( $data, $clear = true ) { $settings = get_option( 'wya11y_settings', $this->data ); if ( empty( $settings ) ) { $settings = $this->data; } // Sanitize new data using default structure $settings = self::sanitize( $data, $this->data ); update_option( 'wya11y_settings', $settings ); do_action( 'wya11y_after_update_settings', $clear ); } /** * Sanitize options * * @param array $settings Input settings array. * @param array $defaults Default settings array. * @return array */ public static function sanitize( $settings, $defaults ) { $result = array(); $excludes = self::get_excludes(); foreach ( $defaults as $key => $data ) { if ( in_array( $key, $excludes, true ) ) { continue; } if ( ! isset( $settings[ $key ] ) ) { $result[ $key ] = $data; continue; } if ( is_array( $data ) ) { $result[ $key ] = self::sanitize_widget_data( $settings[ $key ], $data ); } else { $result[ $key ] = self::sanitize_value( $settings[ $key ], $data ); } } return $result; } private static function sanitize_widget_data( $input, $data ) { $result = array(); foreach ( $data as $key => $value ) { if ( ! isset( $input[ $key ] ) ) { $result[ $key ] = $value; continue; } if ( is_array( $value ) ) { $result[ $key ] = self::sanitize_widget_data( $input[ $key ], $value ); } else { $result[ $key ] = self::sanitize_value( $input[ $key ], $value ); } } return $result; } private static function sanitize_value( $input, $data ) { $type = gettype( $data ); switch ( $type ) { case 'string': return \sanitize_text_field( $input ); case 'integer': return \absint( $input ); case 'boolean': return (bool) $input; case 'double': // For float/decimal numbers return (float) $input; default: return $input; } } }