aristath/kirki

View on GitHub
packages/kirki-framework/compatibility/src/Values.php

Summary

Maintainability
A
4 hrs
Test Coverage
<?php
/**
 * Helpers to get the values of a field.
 *
 * ! WARNING: PLEASE DO NOT USE THESE.
 * we only have these for backwards-compatibility purposes.
 * please use get_option() & get_theme_mod() instead.
 *
 * @package     Kirki
 * @category    Core
 * @author      Ari Stathopoulos (@aristath)
 * @copyright   Copyright (c) 2020, David Vongries
 * @license    https://opensource.org/licenses/MIT
 * @since       1.0
 */

namespace Kirki\Compatibility;

/**
 * Wrapper class for static methods.
 */
class Values {

    /**
     * Get the value of a field.
     *
     * @static
     * @access public
     * @param string $config_id The configuration ID. @see Kirki\Compatibility\Config.
     * @param string $field_id  The field ID.
     * @return string|array
     */
    public static function get_value( $config_id = '', $field_id = '' ) {

        // Make sure value is defined.
        $value = '';

        // This allows us to skip the $config_id argument.
        // If we skip adding a $config_id, use the 'global' configuration.
        if ( ( '' === $field_id ) && '' !== $config_id ) {
            $field_id  = $config_id;
            $config_id = 'global';
        }

        // If $config_id is empty, set it to 'global'.
        $config_id = ( '' === $config_id ) ? 'global' : $config_id;

        // Fallback to 'global' if $config_id is not found.
        if ( ! isset( Kirki::$config[ $config_id ] ) ) {
            $config_id = 'global';
        }

        if ( 'theme_mod' === Kirki::$config[ $config_id ]['option_type'] ) {

            // We're using theme_mods so just get the value using get_theme_mod.
            $default_value = null;
            if ( isset( Kirki::$fields[ $field_id ] ) && isset( Kirki::$fields[ $field_id ]['default'] ) ) {
                $default_value = Kirki::$fields[ $field_id ]['default'];
            }
            $value = get_theme_mod( $field_id, $default_value );
            return apply_filters( 'kirki_values_get_value', $value, $field_id );
        }

        if ( 'option' === Kirki::$config[ $config_id ]['option_type'] ) {

            // We're using options.
            if ( '' !== Kirki::$config[ $config_id ]['option_name'] ) {

                // Options are serialized as a single option in the db.
                // We'll have to get the option and then get the item from the array.
                $options = get_option( Kirki::$config[ $config_id ]['option_name'] );

                if ( ! isset( Kirki::$fields[ $field_id ] ) && isset( Kirki::$fields[ Kirki::$config[ $config_id ]['option_name'] . '[' . $field_id . ']' ] ) ) {
                    $field_id = Kirki::$config[ $config_id ]['option_name'] . '[' . $field_id . ']';
                }
                $setting_modified = str_replace( ']', '', str_replace( Kirki::$config[ $config_id ]['option_name'] . '[', '', $field_id ) );

                $default_value = ( isset( Kirki::$fields[ $field_id ] ) && isset( Kirki::$fields[ $field_id ]['default'] ) ) ? Kirki::$fields[ $field_id ]['default'] : '';
                $value         = ( isset( $options[ $setting_modified ] ) ) ? $options[ $setting_modified ] : $default_value;
                $value         = maybe_unserialize( $value );
                return apply_filters( 'kirki_values_get_value', $value, $field_id );
            }

            // Each option separately saved in the db.
            $value = get_option( $field_id, Kirki::$fields[ $field_id ]['default'] );
            return apply_filters( 'kirki_values_get_value', $value, $field_id );

        }
        return apply_filters( 'kirki_values_get_value', $value, $field_id );
    }

    /**
     * Gets the value or fallsback to default.
     *
     * @static
     * @access public
     * @param array $field The field aruments.
     * @return string|array
     */
    public static function get_sanitized_field_value( $field ) {
        $value = $field['default'];
        if ( ! isset( $field['option_type'] ) || 'theme_mod' === $field['option_type'] ) {
            $value = get_theme_mod( $field['settings'], $field['default'] );
        } elseif ( isset( $field['option_type'] ) && 'option' === $field['option_type'] ) {
            if ( isset( $field['option_name'] ) && '' !== $field['option_name'] ) {
                $all_values     = get_option( $field['option_name'], [] );
                $sub_setting_id = str_replace( [ ']', $field['option_name'] . '[' ], '', $field['settings'] );
                if ( isset( $all_values[ $sub_setting_id ] ) ) {
                    $value = $all_values[ $sub_setting_id ];
                }
            } else {
                $value = get_option( $field['settings'], $field['default'] );
            }
        }
        return $value;
    }
}