<?php
/**
* The main service provider for the Tickets updated and new code.
*
* @since 5.1.6
* @package TEC\Tickets
*/
namespace TEC\Tickets;
use TEC\Common\Contracts\Service_Provider;
use TEC\Tickets\Commerce\Custom_Tables\V1\Provider as ET_CT1_Provider;
use Tribe__Tickets__Main as Tickets_Plugin;
use TEC\Tickets\REST\Controller as REST_Controller;
/**
* Class Provider for all the Tickets loading.
*
* @since 5.1.6
* @package TEC\Tickets
*/
class Provider extends Service_Provider {
/**
* The action that will fire once this provider has registered.
*
* @since 5.8.0
*
* @var string
*/
public static string $registration_action = 'tec_tickets_provider_registered';
/**
* @var bool Flag whether this provider has registered itself and dependencies yet or not.
*/
private $has_registered = false;
/**
* Binds and sets up implementations.
*
* @since 5.6.4 Use `register_on_action` method to register custom table providers.
* @since 5.5.0
* @since 5.1.6
*/
public function register() {
if ( $this->has_registered ) {
return false;
}
require_once Tickets_Plugin::instance()->plugin_path . 'src/functions/commerce/provider.php';
require_once Tickets_Plugin::instance()->plugin_path . 'src/functions/emails/provider.php';
require_once Tickets_Plugin::instance()->plugin_path . 'src/functions/attendees/provider.php';
$this->register_hooks();
$this->register_assets();
// Register the SP on the container.
$this->container->singleton( static::class, $this );
$this->container->singleton( 'tickets.provider', $this );
// Loads the QR code controller.
$this->container->register_on_action( 'tec_qr_code_loaded', QR\Controller::class );
// Loads all of tickets commerce.
$this->container->register( Commerce\Provider::class );
// Load compatibility with ECP Recurrence engine.
$this->container->register( Recurrence\Provider::class );
// Loads all of tickets emails.
$this->container->register( Emails\Provider::class );
// Loads admin area provider.
$this->container->register( Admin\Provider::class );
// Loads the Site Health provider.
$this->container->register( Site_Health\Provider::class );
// Loads the Telemetry provider.
$this->container->register( Telemetry\Provider::class );
// Loads the Installer provider.
$this->container->register( Installer\Provider::class );
// Loads Integrations.
$this->container->register( Integrations\Provider::class );
// REST API V1 Controller.
$this->container->register( REST_Controller::class );
// CT1 only Providers here.
$this->container->register_on_action( 'tec_events_custom_tables_v1_fully_activated', ET_CT1_Provider::class );
// Flexible Tickets Providers.
// Always register the CT1 migration component of Flexible Tickets.
$this->container->register_on_action( 'tec_pro_ct1_provider_registered', Flexible_Tickets\Series_Passes\CT1_Migration::class );
// Upon CT1 full activation register the rest of the components.
$this->container->register_on_action(
'tec_events_pro_custom_tables_v1_fully_activated',
Flexible_Tickets\Provider::class
);
// Blocks.
$this->container->register( Blocks\Controller::class );
// Seating.
$this->container->register( Seating\Controller::class );
// Ticket Action hooks.
$this->container->register( Ticket_Actions::class );
$this->has_registered = true;
return true;
}
/**
* Registers the provider handling all the 1st level filters and actions for Tickets.
*
* @since 5.1.6
*/
protected function register_assets() {
$assets = new Assets( $this->container );
$assets->register();
$this->container->singleton( Assets::class, $assets );
}
/**
* Registers the provider handling all the 1st level filters and actions for Tickets.
*
* @since 5.1.6
*/
protected function register_hooks() {
$hooks = new Hooks( $this->container );
$hooks->register();
// Allow Hooks to be removed, by having the them registered to the container
$this->container->singleton( Hooks::class, $hooks );
$this->container->singleton( 'tickets.hooks', $hooks );
}
}
|