149 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * Component Class.
 | 
						|
 *
 | 
						|
 * @package     EDD
 | 
						|
 * @subpackage  Core
 | 
						|
 * @copyright   Copyright (c) 2018, Easy Digital Downloads, LLC
 | 
						|
 * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
 | 
						|
 * @since       3.0
 | 
						|
 */
 | 
						|
namespace EDD;
 | 
						|
 | 
						|
use EDD\Database;
 | 
						|
 | 
						|
/**
 | 
						|
 * Component Class.
 | 
						|
 *
 | 
						|
 * @since 3.0
 | 
						|
 */
 | 
						|
class Component extends Base_Object {
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Name of this component
 | 
						|
	 *
 | 
						|
	 * @since 3.0
 | 
						|
	 *
 | 
						|
	 * @var string
 | 
						|
	 */
 | 
						|
	public $name = '';
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Database schema definition
 | 
						|
	 *
 | 
						|
	 * @since 3.0
 | 
						|
	 *
 | 
						|
	 * @var Database\Schema
 | 
						|
	 */
 | 
						|
	public $schema = false;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Database table interface
 | 
						|
	 *
 | 
						|
	 * @since 3.0
 | 
						|
	 *
 | 
						|
	 * @var Database\Table
 | 
						|
	 */
 | 
						|
	public $table = false;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Database single object interface
 | 
						|
	 *
 | 
						|
	 * @since 3.0
 | 
						|
	 *
 | 
						|
	 * @var Database\Table
 | 
						|
	 */
 | 
						|
	public $meta = false;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Database query interface
 | 
						|
	 *
 | 
						|
	 * @since 3.0
 | 
						|
	 *
 | 
						|
	 * @var Database\Query
 | 
						|
	 */
 | 
						|
	public $query = false;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Database single object interface
 | 
						|
	 *
 | 
						|
	 * @since 3.0
 | 
						|
	 *
 | 
						|
	 * @var Database\Row|object
 | 
						|
	 */
 | 
						|
	public $object = false;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Array of interface objects instantiated during init
 | 
						|
	 *
 | 
						|
	 * @since 3.0
 | 
						|
	 *
 | 
						|
	 * @var array
 | 
						|
	 */
 | 
						|
	private $interfaces = array();
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Array of interface keys
 | 
						|
	 *
 | 
						|
	 * @since 3.0
 | 
						|
	 *
 | 
						|
	 * @var array
 | 
						|
	 */
 | 
						|
	private $interface_keys = array(
 | 
						|
		'schema' => false,
 | 
						|
		'table'  => false,
 | 
						|
		'query'  => false,
 | 
						|
		'object' => false,
 | 
						|
		'meta'   => false
 | 
						|
	);
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Construct an EDD component
 | 
						|
	 *
 | 
						|
	 * @since 3.0
 | 
						|
	 * @param array $args
 | 
						|
	 */
 | 
						|
	public function __construct( $args = array() ) {
 | 
						|
		parent::__construct( $args );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Return an interface object
 | 
						|
	 *
 | 
						|
	 * @since 3.0
 | 
						|
	 *
 | 
						|
	 * @param string $name
 | 
						|
	 * @return object
 | 
						|
	 */
 | 
						|
	public function get_interface( $name = '' ) {
 | 
						|
		return isset( $this->interfaces[ $name ] )
 | 
						|
			? $this->interfaces[ $name ]
 | 
						|
			: false;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Setup an EDD component based on parsing in constructor
 | 
						|
	 *
 | 
						|
	 * @since 3.0
 | 
						|
	 * @param array $args
 | 
						|
	 */
 | 
						|
	protected function set_vars( $args = array() ) {
 | 
						|
 | 
						|
		// Get the interface keys
 | 
						|
		$keys = array_keys( $this->interface_keys );
 | 
						|
 | 
						|
		// Loop through args...
 | 
						|
		foreach ( $args as $key => $value ) {
 | 
						|
 | 
						|
			// Set arg as a Component Interface
 | 
						|
			if ( in_array( $key, $keys, true ) && class_exists( $value ) ) {
 | 
						|
				$this->interfaces[ $key ] = new $value;
 | 
						|
 | 
						|
			// Set arg as a Component property
 | 
						|
			} else {
 | 
						|
				$this->{$key} = $value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |