Tribe__Tickets__Status__Manager
Source #
File: src/Tribe/Status/Manager.php
class Tribe__Tickets__Status__Manager { /** * Initial Active Modules using Plugin Names * * @var array */ public $initial_active_modules; /** * Active Modules Slugs * * @var array */ protected $module_slugs = [ 'Tribe__Tickets_Plus__Commerce__EDD__Main' => 'edd', 'Tribe__Tickets__RSVP' => 'rsvp', 'Tribe__Tickets__Commerce__PayPal__Main' => 'tpp', 'Tribe__Tickets_Plus__Commerce__WooCommerce__Main' => 'woo', ]; /** * Active Modules * * @var array */ protected $active_modules; /** * An array of status objects for WooCommerce Tickets * * @var array */ protected $status_managers = [ 'edd' => 'Tribe__Tickets_Plus__Commerce__EDD__Status_Manager', 'rsvp' => 'Tribe__Tickets__RSVP__Status_Manager', 'tpp' => 'Tribe__Tickets__Commerce__PayPal__Status_Manager', 'woo' => 'Tribe__Tickets_Plus__Commerce__WooCommerce__Status_Manager', ]; /** * An array of status objects for all active commerces * * @var array */ protected $statuses = []; /** * Get (and instantiate, if necessary) the instance of the class * * @since 4.10 * * @static * @return Tribe__Tickets__Status__Manager */ public static function get_instance() { return tribe( 'tickets.status' ); } /** * Hook * * @since 4.10 * */ public function hook() { add_action( 'init', [ $this, 'setup' ] ); } /** * Setup the Manager Class * * @since 4.10 * */ public function setup() { $this->initial_active_modules = Tribe__Tickets__Tickets::modules(); $this->convert_initial_active_modules(); $this->get_statuses_by_provider(); } /** * Convert Name of Active Modules to slugs * * @since 4.10 * */ protected function convert_initial_active_modules() { foreach ( $this->initial_active_modules as $module_class => $module_name ) { if ( isset( $this->module_slugs[ $module_class ] ) ) { $this->active_modules[ $module_class ] = $this->module_slugs[ $module_class ]; } } } /** * Check if the Name of the Class was Provided and Convert to Abbreviation * * @since 4.10.5 * */ protected function check_for_full_provider_name( $provider ) { // if abbreviated then return it back if ( strlen( $provider ) <= 4 ) { return $provider; } // if the provider is not found return if ( ! isset( $this->module_slugs[ $provider ] ) ) { return false; } return $this->module_slugs[ $provider ]; } /** * Get the statuses for each provider that is active and has a manager * * @since 4.10 * */ protected function get_statuses_by_provider() { $status_managers = $this->get_status_managers(); if ( ! is_array( $this->active_modules ) ) { return; } foreach ( $this->active_modules as $module_class => $module_name ) { if ( ! isset( $status_managers[ $module_name ] ) || ! class_exists( $status_managers[ $module_name ] ) ) { continue; } $status_class = $status_managers[ $module_name ]; $this->statuses[ $module_name ] = new $status_class(); } } /** * Get the Active Modules * * @since 4.10 * * @return array */ public function get_active_modules() { $this->convert_initial_active_modules(); return $this->active_modules; } /** * Get the Status Manager Array * * @since 4.10 * * @return array */ public function get_status_managers() { return $this->status_managers; } /** * Get the Trigger Status for Ticket Generation or Sending for a given eCommerce * * @since 4.10 * * @param $commerce string a string of the Commerce System to get statuses from * * @return array an array of the commerce's statuses and name matching the provide action */ public function get_trigger_statuses( $commerce ) { $trigger_statuses = []; $commerce = $this->check_for_full_provider_name( $commerce ); if ( ! isset( $this->statuses[ $commerce ]->statuses ) ) { return $trigger_statuses; } $filtered_statuses = wp_list_filter( $this->statuses[ $commerce ]->statuses, [ 'trigger_option' => true, ] ); foreach ( $filtered_statuses as $status ) { $trigger_statuses[ $status->provider_name ] = $status->name; } return $trigger_statuses; } /** * Return an array of Statuses for an action with the provider Commerce * * @since 4.10 * @since 4.10.5 - add nicename parameter * * @param $action string a string of the action to filter * @param $commerce string a string of the Commerce System to get statuses from * @param $operator string a string of the default 'AND', 'OR', 'NOT' to change the criteria * @param $nicename bool a boolean of whether to return the name of the status * * @return array an array of the commerce's statuses matching the provide action */ public function get_statuses_by_action( $action, $commerce, $operator = 'AND', $nicename = false ) { $trigger_statuses = []; $commerce = $this->check_for_full_provider_name( $commerce ); if ( ! isset( $this->statuses[ $commerce ]->statuses ) ) { return $trigger_statuses; } if ( 'all' === $action ) { $filtered_statuses = $this->statuses[ $commerce ]->statuses; } elseif ( is_array( $action ) ) { $criteria = []; foreach ( $action as $name ) { $criteria[ $name ] = true; } $filtered_statuses = wp_list_filter( $this->statuses[ $commerce ]->statuses, $criteria, $operator ); } else { $filtered_statuses = wp_list_filter( $this->statuses[ $commerce ]->statuses, [ $action => true, ] ); } foreach ( $filtered_statuses as $status ) { // if nicename is true then only return that name for a given status if ( $nicename ) { $trigger_statuses[] = $status->name; continue; } $trigger_statuses[] = $status->provider_name; if ( ! empty( $status->additional_names ) ) { $trigger_statuses = $this->add_additional_names_to_array( $trigger_statuses, $status->additional_names ); } } return $trigger_statuses; } /** * Return an array of Statuses for a provider Commerce * * @since 4.10 * * @param $commerce string a string of the Commerce System to get statuses from * * @return array an array of the commerce's statuses */ public function get_all_provider_statuses( $commerce ) { $trigger_statuses = []; $commerce = $this->check_for_full_provider_name( $commerce ); if ( ! isset( $this->statuses[ $commerce ]->statuses ) ) { return $trigger_statuses; } return $this->statuses[ $commerce ]->statuses; } /** * Return an array of Statuses for a Commerce with label and stock attributes * * @since 4.10 * * @param $commerce string a string of the Commerce System to get statuses from * * @return array an array of statues with label and stock attributes */ public function get_status_options( $commerce ) { static $status_options; $commerce = $this->check_for_full_provider_name( $commerce ); if ( ! isset( $this->statuses[ $commerce ]->statuses ) ) { return []; } if ( ! empty( $status_options[ $commerce ] ) ) { return $status_options[ $commerce ]; } $filtered_statuses = $this->statuses[ $commerce ]->statuses; foreach ( $filtered_statuses as $status ) { $status_options[ $commerce ][ $status->provider_name ] = [ 'label' => __( $status->name, 'event-tickets' ), 'decrease_stock_by' => empty( $status->count_completed ) ? 0 : 1, ]; } return $status_options[ $commerce ]; } /** * Get all the Status Classes for a given Commerce * * @since 4.10 * * @param $commerce string a string of the Commerce System to get statuses from * * @return */ public function get_providers_status_classes( $commerce ) { $commerce = $this->check_for_full_provider_name( $commerce ); if ( ! isset( $this->statuses[ $commerce ] ) ) { return []; } return $this->statuses[ $commerce ]; } /** * Get the Completed Status by Commerce Provider Class Name * * @since 4.10.5 * * @param string|object $provider_name an object or string of a commerce main class name * * @return array */ public function get_completed_status_by_provider_name( $provider_name ) { if ( is_object( $provider_name ) ) { $provider_name = get_class( $provider_name ); } $abbreviated_name = $this->check_for_full_provider_name( $provider_name ); $filtered_statuses = wp_list_filter( $this->statuses[ $abbreviated_name ]->statuses, [ 'count_completed' => true, ] ); foreach ( $filtered_statuses as $status ) { $trigger_statuses[] = $status->provider_name; if ( ! empty( $status->additional_names ) ) { $trigger_statuses = $this->add_additional_names_to_array( $trigger_statuses, $status->additional_names ); } } return $trigger_statuses; } /** * Add addition names a status might be known as * * @since 4.10.5 * * @param array $trigger_statuses an array of statues * @param array $additional_names an array of additional names a status might be known as * * @return array an array of trigger statuses */ protected function add_additional_names_to_array( $trigger_statuses, $additional_names ) { foreach ( $additional_names as $name ) { $trigger_statuses[] = $name; } return $trigger_statuses; } }
Changelog #
Version | Description |
---|---|
4.10 | Introduced. |
Methods #
- get_active_modules — Get the Active Modules
- get_all_provider_statuses — Return an array of Statuses for a provider Commerce
- get_completed_status_by_provider_name — Get the Completed Status by Commerce Provider Class Name
- get_instance — Get (and instantiate, if necessary) the instance of the class
- get_provider_class_from_slug — Get the Provider class name from its slug.
- get_provider_slug — Get the Provider Slug from the Module Class.
- get_providers_status_classes — Get all the Status Classes for a given Commerce
- get_status_managers — Get the Status Manager Array
- get_status_options — Return an array of Statuses for a Commerce with label and stock attributes
- get_statuses_by_action — Return an array of Statuses for an action with the provider Commerce
- get_trigger_statuses — Get the Trigger Status for Ticket Generation or Sending for a given eCommerce
- hook — Hook
- setup — Setup the Manager Class