PluginProbe
Booktics – Appointment Booking Calendar for Service Businesses / 1.0.14
Booktics – Appointment Booking Calendar for Service Businesses v1.0.14
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.14, at base/providers/global-service-provider.php

176 lines 5.2 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 use Booktics\Module\Google_Calendar\Google_Service_Provider;
32 use Booktics\Add_To_Calendar\Add_To_Calendar_Service_Provider;
33
34 /**
35 * Global_Service Provider class
36 */
37 class Global_Service_Provider implements Provider_Contract {
38 /**
39 * Store container
40 *
41 * @var Container
42 */
43 protected Container $container;
44
45 /**
46 * Store service providers
47 *
48 * @var array<string, string>
49 */
50 protected array $providers = array(
51 'assets' => Assets_Service_Provider::class,
52 'admin' => Admin_Service_Provider::class,
53 'appointment' => Appointment_Service_Provider::class,
54 'settings' => Settings_Service_Provider::class,
55 'team-member' => Team_Member_Service_Provider::class,
56 'onboard' => Onboard_Service_Provider::class,
57 'customer' => Customer_Service_Provider::class,
58 'dashboard' => Dashboard_Service_Provider::class,
59 'payment' => Payment_Service_Provider::class,
60 'service' => Service_Service_Provider::class,
61 'shortcode' => Shortcode_Service_Provider::class,
62 'category' => Category_Service_Provider::class,
63 'taxonomy' => Taxonomy_Service_Provider::class,
64 'cart' => Cart_Service_Provider::class,
65 'order' => Order_Service_Provider::class,
66 'addcalendar' => Add_To_Calendar_Service_Provider::class,
67 'extension' => Extension_Service_Provider::class,
68 'module' => Module_Service_Provider::class,
69 'fluentcrm' => FluentCRM_Service_Provider::class,
70 'stripe' => Stripe_Service_Provider::class,
71 'google-calendar' => Google_Service_Provider::class,
72 );
73
74 /**
75 * GlobalServiceProvider
76 */
77 public function __construct() {
78 $this->container = booktics_container();
79 $this->register();
80 $this->boot();
81 }
82
83 /**
84 * Register all module providers
85 *
86 * @return void
87 */
88 public function register() {
89 $providers = apply_filters( 'booktics_service_providers', $this->providers );
90
91 if ( $providers ) {
92 foreach ( $providers as $key => $provider ) {
93 $this->container->addServiceProvider( $key, $provider );
94 }
95 }
96 }
97
98 /**
99 * Boot all services from providers
100 *
101 * @return void
102 */
103 public function boot(): void {
104 $this->boot_core_services();
105 $this->boot_module_services();
106 }
107
108 private function boot_core_services() {
109 $services = array(
110 'assets',
111 'admin',
112 'appointment',
113 'team-member',
114 'settings',
115 'onboard',
116 'customer',
117 'dashboard',
118 'payment',
119 'service',
120 'shortcode',
121 'category',
122 'taxonomy',
123 'order',
124 'cart',
125 'extension',
126 'module',
127 'addcalendar',
128 );
129
130 $services = apply_filters( 'booktics_services', $services );
131
132 foreach ( $services as $service ) {
133 if ( $this->module_is_off( $service ) ) {
134 continue;
135 }
136
137 $this->container->get( $service );
138 }
139 }
140
141 private function boot_module_services() {
142 $module_services = array(
143 'google-calendar',
144 'fluentcrm',
145 'stripe',
146 );
147
148 foreach ( $module_services as $module ) {
149 if ( $this->module_is_off( $module ) ) {
150 continue;
151 }
152
153 $this->container->get( $module );
154 }
155 }
156
157 /**
158 * Check if module is off
159 *
160 * Every modules service provider will check if the module is off by module key
161 * Module key and module slug is always same
162 *
163 * @param string $module
164 * @return bool
165 */
166 public function module_is_off( string $module ): bool {
167 $modules = booktics_modules_list();
168
169 if ( ! isset( $modules[ $module ] ) ) {
170 return false;
171 }
172
173 return ! booktics_extension()->is_enabled( $module );
174 }
175 }
176