skyverge/wc-plugin-framework

View on GitHub
woocommerce/Settings_API/Control.php

Summary

Maintainability
A
55 mins
Test Coverage
<?php
/**
 * WooCommerce Plugin Framework
 *
 * This source file is subject to the GNU General Public License v3.0
 * that is bundled with this package in the file license.txt.
 * It is also available through the world-wide-web at this URL:
 * http://www.gnu.org/licenses/gpl-3.0.html
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@skyverge.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade the plugin to newer
 * versions in the future. If you wish to customize the plugin for your
 * needs please refer to http://www.skyverge.com
 *
 * @package   SkyVerge/WooCommerce/Plugin/Classes
 * @author    SkyVerge
 * @copyright Copyright (c) 2013-2024, SkyVerge, Inc.
 * @license   http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0
 */

namespace SkyVerge\WooCommerce\PluginFramework\v5_12_3\Settings_API;

use SkyVerge\WooCommerce\PluginFramework\v5_12_3 as Framework;

defined( 'ABSPATH' ) or exit;

if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v5_12_3\\Settings_API\\Control' ) ) :


/**
 * The base control object.
 *
 * @since 5.7.0
 */
#[\AllowDynamicProperties]
class Control {


    /** @var string the text control type */
    const TYPE_TEXT = 'text';

    /** @var string the textarea control type */
    const TYPE_TEXTAREA = 'textarea';

    /** @var string the number control type */
    const TYPE_NUMBER = 'number';

    /** @var string the email control type */
    const TYPE_EMAIL = 'email';

    /** @var string the password control type */
    const TYPE_PASSWORD = 'password';

    /** @var string the date control type */
    const TYPE_DATE = 'date';

    /** @var string the checkbox control type */
    const TYPE_CHECKBOX = 'checkbox';

    /** @var string the radio control type */
    const TYPE_RADIO = 'radio';

    /** @var string the select control type */
    const TYPE_SELECT = 'select';

    /** @var string the file control type */
    const TYPE_FILE = 'file';

    /** @var string the color control type */
    const TYPE_COLOR = 'color';

    /** @var string the range control type */
    const TYPE_RANGE = 'range';


    /** @var string|null the setting ID to which this control belongs */
    protected $setting_id;

    /** @var string|null the control type */
    protected $type;

    /** @var string the control name */
    protected $name = '';

    /** @var string the control description */
    protected $description = '';

    /** @var array the control options, as $option => $label  */
    protected $options = [];


    /** Getter methods ************************************************************************************************/


    /**
     * The setting ID to which this control belongs.
     *
     * @since 5.7.0
     *
     * @return null|string
     */
    public function get_setting_id() {

        return $this->setting_id;
    }


    /**
     * Gets the control type.
     *
     * @since 5.7.0
     *
     * @return null|string
     */
    public function get_type() {

        return $this->type;
    }


    /**
     * Gets the control name.
     *
     * @since 5.7.0
     *
     * @return string
     */
    public function get_name() {

        return $this->name;
    }


    /**
     * Gets the control description.
     *
     * @since 5.7.0
     *
     * @return string
     */
    public function get_description() {

        return $this->description;
    }


    /**
     * Gets the control options.
     *
     * As $option => $label for display.
     *
     * @since 5.7.0
     *
     * @return array
     */
    public function get_options() {

        return $this->options;
    }


    /** Setter methods ************************************************************************************************/


    /**
     * Sets the setting ID.
     *
     * @since 5.7.0
     *
     * @param string $value setting ID to set
     * @throws Framework\SV_WC_Plugin_Exception
     */
    public function set_setting_id( $value ) {

        if ( ! is_string( $value ) ) {
            throw new Framework\SV_WC_Plugin_Exception( 'Setting ID value must be a string' );
        }

        $this->setting_id = $value;
    }


    /**
     * Sets the type.
     *
     * @since 5.7.0
     *
     * @param string $value setting ID to set
     * @param string[] $valid_types allowed control types
     * @throws Framework\SV_WC_Plugin_Exception
     */
    public function set_type( $value, array $valid_types = [] ) {

        if ( ! empty( $valid_types ) && ! in_array( $value, $valid_types, true ) ) {

            throw new Framework\SV_WC_Plugin_Exception( sprintf(
                'Control type must be one of %s',
                Framework\SV_WC_Helper::list_array_items( $valid_types, 'or' )
            ) );
        }

        $this->type = $value;
    }


    /**
     * Sets the name.
     *
     * @since 5.7.0
     *
     * @param string $value control name to set
     * @throws Framework\SV_WC_Plugin_Exception
     */
    public function set_name( $value ) {

        if ( ! is_string( $value ) ) {
            throw new Framework\SV_WC_Plugin_Exception( 'Control name value must be a string' );
        }

        $this->name = $value;
    }


    /**
     * Sets the description.
     *
     * @since 5.7.0
     *
     * @param string $value control description to set
     * @throws Framework\SV_WC_Plugin_Exception
     */
    public function set_description( $value ) {

        if ( ! is_string( $value ) ) {
            throw new Framework\SV_WC_Plugin_Exception( 'Control description value must be a string' );
        }

        $this->description = $value;
    }


    /**
     * Sets the options.
     *
     * @since 5.7.0
     *
     * @param array $options options to set
     * @param array $valid_options valid option keys to check against
     */
    public function set_options( array $options, array $valid_options = [] ) {

        if ( ! empty( $valid_options ) ) {

            foreach ( array_keys( $options ) as $key ) {

                if ( ! in_array( $key, $valid_options, true ) ) {
                    unset( $options[ $key ] );
                }
            }
        }

        $this->options = $options;
    }


}

endif;