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;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 |