aristath/kirki

View on GitHub
packages/kirki-framework/util/src/Setting/User_Meta.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php
/**
 * WordPress Customize Setting classes
 *
 * @package Kirki
 * @subpackage Modules
 * @since 3.0.0
 */

namespace Kirki\Util\Setting;

/**
 * Handles saving and sanitizing of user-meta.
 *
 * @since 3.0.0
 * @see WP_Customize_Setting
 */
class User_Meta extends \WP_Customize_Setting {

    /**
     * Type of customize settings.
     *
     * @access public
     * @since 3.0.0
     * @var string
     */
    public $type = 'user_meta';

    /**
     * Get the root value for a setting, especially for multidimensional ones.
     *
     * @access protected
     * @since 3.0.0
     * @param mixed $default Value to return if root does not exist.
     * @return mixed
     */
    protected function get_root_value( $default = null ) {
        $id_base = $this->id_data['base'];

        // Get all user-meta.
        // We'll use this to check if the value is set or not,
        // in order to figure out if we need to return the default value.
        $user_meta = get_user_meta( get_current_user_id() );

        // Get the single meta.
        $single_meta = get_user_meta( get_current_user_id(), $id_base, true );

        if ( isset( $user_meta[ $id_base ] ) ) {
            return $single_meta;
        }
        return $default;
    }

    /**
     * Set the root value for a setting, especially for multidimensional ones.
     *
     * @access protected
     * @since 3.0.0
     * @param mixed $value Value to set as root of multidimensional setting.
     * @return bool Whether the multidimensional root was updated successfully.
     */
    protected function set_root_value( $value ) {
        $id_base = $this->id_data['base'];

        // First delete the current user-meta.
        // We're doing this to avoid duplicate entries.
        delete_user_meta( get_current_user_id(), $id_base );

        // Update the user-meta.
        return update_user_meta( get_current_user_id(), $id_base, $value );
    }

    /**
     * Save the value of the setting, using the related API.
     *
     * @access protected
     * @since 3.0.0
     * @param mixed $value The value to update.
     * @return bool The result of saving the value.
     */
    protected function update( $value ) {
        return $this->set_root_value( $value );
    }

    /**
     * Fetch the value of the setting.
     *
     * @access protected
     * @since 3.0.0
     * @return mixed The value.
     */
    public function value() {
        return $this->get_root_value( $this->default );
    }
}