laipower/wp-content/plugins/easy-digital-downloads/includes/component-functions.php

318 lines
8.6 KiB
PHP

<?php
/**
* Component Functions
*
* This file includes functions for interacting with EDD components. An EDD
* component is comprised of:
*
* - Database table/schema/query
* - Object interface
* - Optional meta-data
*
* Some examples of EDD components are:
*
* - Customer
* - Adjustment
* - Order
* - Order Item
* - Note
* - Log
*
* Add-ons and third party plugins are welcome to register their own component
* in exactly the same way that EDD does internally.
*
* @package EDD
* @subpackage Functions/Components
* @since 3.0
*/
// Exit if accessed directly
defined( 'ABSPATH' ) || exit;
/**
* Register a new EDD component (customer, adjustment, order, etc...)
*
* @since 3.0
*
* @param string $name
* @param array $args
*/
function edd_register_component( $name = '', $args = array() ) {
// Sanitize the component name
$name = sanitize_key( $name );
// Bail if name or args are empty
if ( empty( $name ) || empty( $args ) ) {
return;
}
// Parse arguments
$r = wp_parse_args( $args, array(
'name' => $name,
'schema' => '\\EDD\\Database\\Schema',
'table' => '\\EDD\\Database\\Table',
'query' => '\\EDD\\Database\\Query',
'object' => '\\EDD\\Database\\Row',
'meta' => false
) );
// Setup the component
EDD()->components[ $name ] = new EDD\Component( $r );
// Component registered
do_action( 'edd_registered_component', $name, $r, $args );
}
/**
* Get an EDD Component object
*
* @since 3.0
* @param string $name
*
* @return EDD\Component|false False if not exists, EDD\Component if exists
*/
function edd_get_component( $name = '' ) {
$name = sanitize_key( $name );
// Return component if exists, or false
return isset( EDD()->components[ $name ] )
? EDD()->components[ $name ]
: false;
}
/**
* Get an EDD Component interface
*
* @since 3.0
* @param string $component
* @param string $interface
*
* @return mixed False if not exists, EDD Component interface if exists
*/
function edd_get_component_interface( $component = '', $interface = '' ) {
// Get component
$c = edd_get_component( $component );
// Bail if no component
if ( empty( $c ) ) {
return $c;
}
// Return interface, or false if not exists
return $c->get_interface( $interface );
}
/**
* Setup all EDD components
*
* @since 3.0
*/
function edd_setup_components() {
static $setup = false;
// Never register components more than 1 time per request
if ( false !== $setup ) {
return;
}
// Register customer.
edd_register_component( 'customer', array(
'schema' => '\\EDD\\Database\\Schemas\\Customers',
'table' => '\\EDD\\Database\\Tables\\Customers',
'meta' => '\\EDD\\Database\\Tables\\Customer_Meta',
'query' => '\\EDD\\Database\\Queries\\Customer',
'object' => 'EDD_Customer'
) );
// Register customer address.
edd_register_component( 'customer_address', array(
'schema' => '\\EDD\\Database\\Schemas\\Customer_Addresses',
'table' => '\\EDD\\Database\\Tables\\Customer_Addresses',
'query' => '\\EDD\\Database\\Queries\\Customer_Address',
'object' => '\\EDD\\Customers\\Customer_Address',
'meta' => false
) );
// Register customer email address.
edd_register_component( 'customer_email_address', array(
'schema' => '\\EDD\\Database\\Schemas\\Customer_Email_Addresses',
'table' => '\\EDD\\Database\\Tables\\Customer_Email_Addresses',
'query' => '\\EDD\\Database\\Queries\\Customer_Email_Address',
'object' => '\\EDD\\Customers\\Customer_Email_Address',
'meta' => false
) );
// Register adjustment.
edd_register_component( 'adjustment', array(
'schema' => '\\EDD\\Database\\Schemas\\Adjustments',
'table' => '\\EDD\\Database\\Tables\\Adjustments',
'meta' => '\\EDD\\Database\\Tables\\Adjustment_Meta',
'query' => '\\EDD\\Database\\Queries\\Adjustment',
'object' => '\\EDD\\Adjustments\\Adjustment'
) );
// Register note.
edd_register_component( 'note', array(
'schema' => '\\EDD\\Database\\Schemas\\Notes',
'table' => '\\EDD\\Database\\Tables\\Notes',
'meta' => '\\EDD\\Database\\Tables\\Note_Meta',
'query' => '\\EDD\\Database\\Queries\\Note',
'object' => '\\EDD\\Notes\\Note'
) );
// Register order.
edd_register_component( 'order', array(
'schema' => '\\EDD\\Database\\Schemas\\Orders',
'table' => '\\EDD\\Database\\Tables\\Orders',
'meta' => '\\EDD\\Database\\Tables\\Order_Meta',
'query' => '\\EDD\\Database\\Queries\\Order',
'object' => '\\EDD\\Orders\\Order'
) );
// Register order item.
edd_register_component( 'order_item', array(
'schema' => '\\EDD\\Database\\Schemas\\Order_Items',
'table' => '\\EDD\\Database\\Tables\\Order_Items',
'meta' => '\\EDD\\Database\\Tables\\Order_Item_Meta',
'query' => '\\EDD\\Database\\Queries\\Order_Item',
'object' => '\\EDD\\Orders\\Order_Item'
) );
// Register order adjustment.
edd_register_component( 'order_adjustment', array(
'schema' => '\\EDD\\Database\\Schemas\\Order_Adjustments',
'table' => '\\EDD\\Database\\Tables\\Order_Adjustments',
'meta' => '\\EDD\\Database\\Tables\\Order_Adjustment_Meta',
'query' => '\\EDD\\Database\\Queries\\Order_Adjustment',
'object' => '\\EDD\\Orders\\Order_Adjustment',
) );
// Register order address.
edd_register_component( 'order_address', array(
'schema' => '\\EDD\\Database\\Schemas\\Order_Addresses',
'table' => '\\EDD\\Database\\Tables\\Order_Addresses',
'query' => '\\EDD\\Database\\Queries\\Order_Address',
'object' => '\\EDD\\Orders\\Order_Address',
'meta' => false
) );
// Register order transaction.
edd_register_component( 'order_transaction', array(
'schema' => '\\EDD\\Database\\Schemas\\Order_Transactions',
'table' => '\\EDD\\Database\\Tables\\Order_Transactions',
'query' => '\\EDD\\Database\\Queries\\Order_Transaction',
'object' => '\\EDD\\Orders\\Order_Transaction',
'meta' => false
) );
// Register log.
edd_register_component( 'log', array(
'schema' => '\\EDD\\Database\\Schemas\\Logs',
'table' => '\\EDD\\Database\\Tables\\Logs',
'meta' => '\\EDD\\Database\\Tables\\Log_Meta',
'query' => '\\EDD\\Database\\Queries\\Log',
'object' => '\\EDD\\Logs\\Log'
) );
// Register log API request.
edd_register_component( 'log_api_request', array(
'schema' => '\\EDD\\Database\\Schemas\\Logs_Api_Requests',
'table' => '\\EDD\\Database\\Tables\\Logs_Api_Requests',
'meta' => '\\EDD\\Database\\Tables\\Logs_Api_Request_Meta',
'query' => '\\EDD\\Database\\Queries\\Log_Api_Request',
'object' => '\\EDD\\Logs\\Api_Request_Log',
) );
// Register log file download.
edd_register_component( 'log_file_download', array(
'schema' => '\\EDD\\Database\\Schemas\\Logs_File_Downloads',
'table' => '\\EDD\\Database\\Tables\\Logs_File_Downloads',
'meta' => '\\EDD\\Database\\Tables\\Logs_File_Download_Meta',
'query' => '\\EDD\\Database\\Queries\\Log_File_Download',
'object' => '\\EDD\\Logs\\File_Download_Log',
) );
// Set the locally static setup var.
$setup = true;
// Action to allow third party components to be setup.
do_action( 'edd_setup_components' );
}
/**
* Install all component database tables
*
* This function installs all database tables used by all components (including
* third-party and add-ons that use the Component API)
*
* This is used by unit tests and tools.
*
* @since 3.0
*/
function edd_install_component_database_tables() {
// Get the components
$components = EDD()->components;
// Bail if no components setup yet
if ( empty( $components ) ) {
return;
}
// Drop all component tables
foreach ( $components as $component ) {
// Objects
$object = $component->get_interface( 'table' );
if ( $object instanceof \EDD\Database\Table && ! $object->exists() ) {
$object->install();
}
// Meta
$meta = $component->get_interface( 'meta' );
if ( $meta instanceof \EDD\Database\Table && ! $meta->exists() ) {
$meta->install();
}
}
}
/**
* Uninstall all component database tables
*
* This function is destructive and disastrous, so do not call it directly
* unless you fully intend to destroy all data (including third-party add-ons
* that use the Component API)
*
* This is used by unit tests and tools.
*
* @since 3.0
*/
function edd_uninstall_component_database_tables() {
// Get the components
$components = EDD()->components;
// Bail if no components setup yet
if ( empty( $components ) ) {
return;
}
// Drop all component tables
foreach ( $components as $component ) {
// Objects
$object = $component->get_interface( 'table' );
if ( $object instanceof \EDD\Database\Table && $object->exists() ) {
$object->uninstall();
}
// Meta
$meta = $component->get_interface( 'meta' );
if ( $meta instanceof \EDD\Database\Table && $meta->exists() ) {
$meta->uninstall();
}
}
}