PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / 1.2.11
Booking for Appointments and Events Calendar – Amelia v1.2.11
2.4.4 2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / src / Infrastructure / WP / GutenbergBlock / GutenbergBlock.php
ameliabooking / src / Infrastructure / WP / GutenbergBlock Last commit date
AmeliaBookingGutenbergBlock.php 2 years ago AmeliaCatalogBookingGutenbergBlock.php 3 years ago AmeliaCatalogGutenbergBlock.php 2 years ago AmeliaEventsCalendarBookingGutenbergBlock.php 1 year ago AmeliaEventsGutenbergBlock.php 2 years ago AmeliaEventsListBookingGutenbergBlock.php 2 years ago AmeliaStepBookingGutenbergBlock.php 2 years ago GutenbergBlock.php 1 year ago
GutenbergBlock.php
342 lines
1 <?php
2 /**
3 * @copyright © TMS-Plugins. All rights reserved.
4 * @licence See LICENCE.md for license details.
5 */
6
7 namespace AmeliaBooking\Infrastructure\WP\GutenbergBlock;
8
9 use AmeliaBooking\Application\Services\Bookable\BookableApplicationService;
10 use AmeliaBooking\Application\Services\Bookable\AbstractPackageApplicationService;
11 use AmeliaBooking\Application\Services\Booking\EventApplicationService;
12 use AmeliaBooking\Application\Services\Location\AbstractLocationApplicationService;
13 use AmeliaBooking\Application\Services\User\ProviderApplicationService;
14 use AmeliaBooking\Domain\Collection\Collection;
15 use AmeliaBooking\Domain\Entity\User\Provider;
16 use AmeliaBooking\Domain\Factory\Bookable\Service\ServiceFactory;
17 use AmeliaBooking\Domain\Services\Booking\EventDomainService;
18 use AmeliaBooking\Domain\Services\DateTime\DateTimeService;
19 use AmeliaBooking\Infrastructure\Common\Container;
20 use AmeliaBooking\Infrastructure\Repository\Bookable\Service\CategoryRepository;
21 use AmeliaBooking\Infrastructure\Repository\Bookable\Service\ServiceRepository;
22 use AmeliaBooking\Infrastructure\Repository\Booking\Event\EventTagsRepository;
23 use AmeliaBooking\Infrastructure\Repository\User\ProviderRepository;
24 use Exception;
25 use Interop\Container\Exception\ContainerException;
26
27 /**
28 * Class GutenbergBlock
29 *
30 * @package AmeliaBooking\Infrastructure\WP\GutenbergBlock
31 */
32 class GutenbergBlock
33 {
34 /** @var Container $container */
35 private static $container;
36
37 /**
38 * Register WP Ajax actions.
39 */
40 public static function init()
41 {
42 if (is_admin() && function_exists('register_block_type')) {
43 if (substr($_SERVER['PHP_SELF'], '-8') == 'post.php' ||
44 substr($_SERVER['PHP_SELF'], '-12') == 'post-new.php'
45 ) {
46 if (self::isGutenbergActive()) {
47 $class = get_called_class();
48 add_action('enqueue_block_editor_assets', function () use ($class) {
49 $class::registerBlockType();
50 });
51 }
52
53 }
54 }
55 }
56
57 /**
58 * Register block for gutenberg
59 */
60 public static function registerBlockType()
61 {
62
63 }
64
65 /**
66 * Check if Block Editor is active.
67 *
68 * @return bool
69 */
70 public static function isGutenbergActive()
71 {
72 // Gutenberg plugin is installed and activated.
73 $gutenberg = !(false === has_filter('replace_editor', 'gutenberg_init'));
74
75 // Block editor since 5.0.
76 $block_editor = version_compare($GLOBALS['wp_version'], '5.0-beta', '>');
77
78 if (!$gutenberg && !$block_editor) {
79 return false;
80 }
81
82 if (self::isClassicEditorPluginActive()) {
83 $editor_option = get_option('classic-editor-replace');
84 $block_editor_active = array('no-replace', 'block');
85
86 return in_array($editor_option, $block_editor_active, true);
87 }
88
89 // Fix for conflict with Avada - Fusion builder and gutenberg blocks
90 if (class_exists('FusionBuilder') && !(isset($_GET['gutenberg-editor']))) {
91 return false;
92 }
93
94 // Fix for conflict with Disable Gutenberg plugin
95 if (class_exists('DisableGutenberg')) {
96 return false;
97 }
98
99 // Fix for conflict with WP Bakery Page Builder
100 if (class_exists('Vc_Manager') && (isset($_GET['classic-editor']))) {
101 return false;
102 }
103
104 // Fix for conflict with WooCommerce product page
105 if (isset($_GET['post_type']) && $_GET['post_type'] === 'product' && class_exists('WooCommerce')) {
106 return false;
107 }
108
109 return true;
110 }
111
112 /**
113 * Check if Classic Editor plugin is active
114 *
115 * @return bool
116 */
117 public static function isClassicEditorPluginActive()
118 {
119
120 if (!function_exists('is_plugin_active')) {
121
122 include_once ABSPATH . 'wp-admin/includes/plugin.php';
123 }
124
125 if (is_plugin_active('classic-editor/classic-editor.php')) {
126
127 return true;
128 }
129
130 return false;
131 }
132
133 /**
134 * Set Amelia Container
135 *
136 * @param $container
137 */
138 public static function setContainer($container)
139 {
140 self::$container = $container;
141 }
142
143 /**
144 * Get entities data for front-end
145 */
146 public static function getEntitiesData()
147 {
148 return (new self)->getAllEntitiesForGutenbergBlocks();
149 }
150
151 /**
152 * Get Entities for Gutenberg blocks
153 */
154 public function getAllEntitiesForGutenbergBlocks()
155 {
156 try {
157 self::setContainer(require AMELIA_PATH . '/src/Infrastructure/ContainerConfig/container.php');
158
159 /** @var AbstractLocationApplicationService $locationAS */
160 $locationAS = self::$container->get('application.location.service');
161
162 $locations = $locationAS->getAllOrderedByName();
163
164 $resultData['locations'] = $locations->toArray();
165
166 /** @var ServiceRepository $serviceRepository */
167 $serviceRepository = self::$container->get('domain.bookable.service.repository');
168 /** @var CategoryRepository $categoryRepository */
169 $categoryRepository = self::$container->get('domain.bookable.category.repository');
170 /** @var BookableApplicationService $bookableAS */
171 $bookableAS = self::$container->get('application.bookable.service');
172
173 $services = $serviceRepository->getAllArrayIndexedById();
174
175 $categories = $categoryRepository->getAllIndexedById();
176
177 $bookableAS->addServicesToCategories($categories, $services);
178
179 $resultData['categories'] = $categories->toArray();
180
181 /** @var ProviderRepository $providerRepository */
182 $providerRepository = self::$container->get('domain.users.providers.repository');
183
184 /** @var ProviderApplicationService $providerAS */
185 $providerAS = self::$container->get('application.user.provider.service');
186
187 /** @var Collection $providers */
188 $providers = $providerRepository->getWithSchedule([]);
189
190 $providerServicesData = $providerRepository->getProvidersServices();
191
192 foreach ((array)$providerServicesData as $providerKey => $providerServices) {
193 $provider = $providers->getItem($providerKey);
194
195 $providerServiceList = new Collection();
196
197 foreach ((array)$providerServices as $serviceKey => $providerService) {
198 $service = $services->getItem($serviceKey);
199
200 if ($service && $provider) {
201 $providerServiceList->addItem(
202 ServiceFactory::create(array_merge($service->toArray(), $providerService)),
203 $service->getId()->getValue()
204 );
205 }
206 }
207
208 $provider->setServiceList($providerServiceList);
209 }
210
211 /** @var Provider $currentUser */
212 $currentUser = self::$container->get('logged.in.user');
213
214 $resultData['employees'] = $providerAS->removeAllExceptUser(
215 $providers->toArray(),
216 $currentUser
217 );
218
219 $finalData = self::getOnlyCatSerLocEmp($resultData);
220
221 /** @var EventApplicationService $eventAS */
222 $eventAS = self::$container->get('application.booking.event.service');
223
224 /** @var Collection $events */
225 $events = $eventAS->getEventsByCriteria(
226 [
227 'dates' => [DateTimeService::getNowDateTime()],
228 ],
229 [
230 'fetchEventsPeriods' => true,
231 ],
232 100
233 );
234
235 $finalData['events'] = $events->toArray();
236
237 /** @var EventDomainService $eventDS */
238 $eventDS = self::$container->get('domain.booking.event.service');
239
240 $finalData['events'] = $eventDS->getShortcodeForEventList(self::$container, $finalData['events']);
241
242 /** @var EventTagsRepository $eventTagsRepository */
243 $eventTagsRepository = self::$container->get('domain.booking.event.tag.repository');
244
245 /** @var Collection $tags * */
246 $tags = $eventTagsRepository->getAllDistinctByCriteria(
247 [
248 'eventIds' => array_column($finalData['events'], 'id')
249 ]
250 );
251
252 /** @var AbstractPackageApplicationService $packageApplicationService */
253 $packageApplicationService = self::$container->get('application.bookable.package');
254
255 $finalData['packages'] = $packageApplicationService->getPackagesArray();
256
257 $finalData['tags'] = $tags->toArray();
258
259 return ['data' => $finalData];
260
261 } catch (Exception $exception) {
262 return ['data' => [
263 'categories' => [],
264 'servicesList' => [],
265 'locations' => [],
266 'employees' => [],
267 'events' => [],
268 'tags' => [],
269 'packages' => [],
270 ]];
271 } catch (ContainerException $e) {
272 return ['data' => [
273 'categories' => [],
274 'servicesList' => [],
275 'locations' => [],
276 'employees' => [],
277 'events' => [],
278 'tags' => [],
279 'packages' => [],
280 ]];
281 }
282 }
283
284 /**
285 * Get only Categories, Services, Employees and Locations for Gutenberg blocks
286 */
287 public static function getOnlyCatSerLocEmp($resultData)
288 {
289 $data = [];
290 $data['categories'] = [];
291 $data['servicesList'] = [];
292 if ($resultData['categories'] !== []) {
293 for ($i = 0; $i < count($resultData['categories']); $i++) {
294 $data['categories'][] = [
295 'id' => $resultData['categories'][$i]['id'],
296 'name' => $resultData['categories'][$i]['name']
297 ];
298 if ($resultData['categories'][$i]['serviceList'] !== []) {
299 for ($j = 0; $j < count($resultData['categories'][$i]['serviceList']); $j++) {
300 if (!$resultData['categories'][$i]['serviceList'][$j]['show']) {
301 continue;
302 }
303
304 $data['servicesList'][] = [
305 'id' => $resultData['categories'][$i]['serviceList'][$j]['id'],
306 'name' => $resultData['categories'][$i]['serviceList'][$j]['name']
307 ];
308 }
309 }
310 }
311 } else {
312 $data['categories'] = [];
313 $data['servicesList'] = [];
314 }
315
316 if ($resultData['locations'] !== []) {
317 for ($i = 0; $i < count($resultData['locations']); $i++) {
318 $data['locations'][] = [
319 'id' => $resultData['locations'][$i]['id'],
320 'name' => $resultData['locations'][$i]['name']
321 ];
322 }
323 } else {
324 $data['locations'] = [];
325 }
326
327 if ($resultData['employees'] !== []) {
328 for ($i = 0; $i < count($resultData['employees']); $i++) {
329 $data['employees'][] = [
330 'id' => $resultData['employees'][$i]['id'],
331 'firstName' => $resultData['employees'][$i]['firstName'],
332 'lastName' => $resultData['employees'][$i]['lastName'],
333 ];
334 }
335 } else {
336 $data['employees'] = [];
337 }
338
339 return $data;
340 }
341 }
342