PluginProbe
Booktics – Appointment Booking Calendar for Service Businesses / 1.0.3
Booktics – Appointment Booking Calendar for Service Businesses v1.0.3
1.0.29 1.0.28 1.0.27 1.0.26 1.0.25 1.0.24 1.0.23 1.0.22 1.0.21 1.0.20 1.0.19 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.2 1.0.3 All 31 releases
booktics / base / providers / global-service-provider.php

global-service-provider.php in Booktics – Appointment Booking Calendar for Service Businesses 1.0.3, at base/providers/global-service-provider.php

170 lines 4.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Global service provider that will responsible for all service provider
4 *
5 * @package Booktics/Providers
6 */
7
8 namespace Booktics\Providers;
9
10 use Booktics\Admin\Admin_Service_Provider;
11 use Booktics\Appointment\Appointment_Service_Provider;
12 use Booktics\Assets\Assets_Service_Provider;
13 use Booktics\Cart\Cart_Service_Provider;
14 use Booktics\Category\Category_Service_Provider;
15 use Booktics\Container\Container;
16 use Booktics\Contracts\Provider_Contract;
17 use Booktics\Customer\Customer_Service_Provider;
18 use Booktics\Dashboard\Dashboard_Service_Provider;
19 use Booktics\Extensions\Extension_Service_Provider;
20 use Booktics\Module\Stripe_Addon\Stripe_Service_Provider;
21 use Booktics\Onboard\Onboard_Service_Provider;
22 use Booktics\Order\Order_Service_Provider;
23 use Booktics\Payment\Payment_Service_Provider;
24 use Booktics\Service\Service_Service_Provider;
25 use Booktics\Settings\Settings_Service_Provider;
26 use Booktics\Shortcode\Shortcode_Service_Provider;
27 use Booktics\Taxonomy\Taxonomy_Service_Provider;
28 use Booktics\Team_Member\Team_Member_Service_Provider;
29 use Booktics\Extensions\Module_Service_Provider;
30 use Booktics\Module\FluentCrm\FluentCRM_Service_Provider;
31
32 /**
33 * Global_Service Provider class
34 */
35 class Global_Service_Provider implements Provider_Contract {
36 /**
37 * Store container
38 *
39 * @var Container
40 */
41 protected Container $container;
42
43 /**
44 * Store service providers
45 *
46 * @var array<string, string>
47 */
48 protected array $providers = array(
49 'assets' => Assets_Service_Provider::class,
50 'admin' => Admin_Service_Provider::class,
51 'appointment' => Appointment_Service_Provider::class,
52 'settings' => Settings_Service_Provider::class,
53 'team-member' => Team_Member_Service_Provider::class,
54 'onboard' => Onboard_Service_Provider::class,
55 'customer' => Customer_Service_Provider::class,
56 'dashboard' => Dashboard_Service_Provider::class,
57 'payment' => Payment_Service_Provider::class,
58 'service' => Service_Service_Provider::class,
59 'shortcode' => Shortcode_Service_Provider::class,
60 'category' => Category_Service_Provider::class,
61 'taxonomy' => Taxonomy_Service_Provider::class,
62 'cart' => Cart_Service_Provider::class,
63 'order' => Order_Service_Provider::class,
64 'extension' => Extension_Service_Provider::class,
65 'module' => Module_Service_Provider::class,
66 'fluentcrm' => FluentCRM_Service_Provider::class,
67 'stripe' => Stripe_Service_Provider::class,
68 );
69
70 /**
71 * GlobalServiceProvider
72 */
73 public function __construct() {
74 $this->container = booktics_container();
75 $this->register();
76 $this->boot();
77 }
78
79 /**
80 * Register all module providers
81 *
82 * @return void
83 */
84 public function register() {
85 $providers = apply_filters( 'booktics_service_providers', $this->providers );
86
87 if ( $providers ) {
88 foreach ( $providers as $key => $provider ) {
89 $this->container->addServiceProvider( $key, $provider );
90 }
91 }
92 }
93
94 /**
95 * Boot all services from providers
96 *
97 * @return void
98 */
99 public function boot(): void {
100 $this->boot_core_services();
101 $this->boot_module_services();
102 }
103
104 private function boot_core_services() {
105 $services = array(
106 'assets',
107 'admin',
108 'appointment',
109 'team-member',
110 'settings',
111 'onboard',
112 'customer',
113 'dashboard',
114 'payment',
115 'service',
116 'shortcode',
117 'category',
118 'taxonomy',
119 'order',
120 'cart',
121 'extension',
122 'module',
123 );
124
125 $services = apply_filters( 'booktics_services', $services );
126
127 foreach ( $services as $service ) {
128 if ( $this->module_is_off( $service ) ) {
129 continue;
130 }
131
132 $this->container->get( $service );
133 }
134 }
135
136 private function boot_module_services() {
137 $module_services = array(
138 'fluentcrm',
139 'stripe',
140 );
141
142 foreach ( $module_services as $module ) {
143 if ( $this->module_is_off( $module ) ) {
144 continue;
145 }
146
147 $this->container->get( $module );
148 }
149 }
150
151 /**
152 * Check if module is off
153 *
154 * Every modules service provider will check if the module is off by module key
155 * Module key and module slug is always same
156 *
157 * @param string $module
158 * @return bool
159 */
160 public function module_is_off( string $module ): bool {
161 $modules = booktics_modules_list();
162
163 if ( ! isset( $modules[ $module ] ) ) {
164 return false;
165 }
166
167 return ! booktics_extension()->is_enabled( $module );
168 }
169 }
170