PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / 2.4.6
Booking for Appointments and Events Calendar – Amelia v2.4.6
2.4.7 2.4.6 2.4.5 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 / extensions / divi_5_amelia / server / AmeliaEventsListModule.php
ameliabooking / extensions / divi_5_amelia / server Last commit date
AmeliaBookingButtonRendererTrait.php 2 months ago AmeliaBookingModule.php 7 months ago AmeliaCatalogBookingModule.php 2 months ago AmeliaCatalogModule.php 7 months ago AmeliaCustomerPanelModule.php 7 months ago AmeliaEmployeePanelModule.php 7 months ago AmeliaEventsCalendarModule.php 2 months ago AmeliaEventsListBookingButtonModule.php 2 months ago AmeliaEventsListModule.php 2 months ago AmeliaEventsModule.php 7 months ago AmeliaSearchModule.php 7 months ago AmeliaStepBookingButtonModule.php 2 months ago AmeliaStepBookingModule.php 2 months ago ModuleMetadata.php 2 months ago SharedShortcodeModule.php 2 months ago index.php 2 months ago
AmeliaEventsListModule.php
94 lines
1 <?php
2
3 namespace Divi5Amelia;
4
5 use ET\Builder\Packages\ModuleLibrary\ModuleRegistration;
6
7 /**
8 * Class that handle "Amelia Events List" module output in frontend.
9 */
10 class AmeliaEventsListModule extends SharedShortcodeModule
11 {
12 /**
13 * Register module.
14 * DependencyInterface interface ensures class method name `load()` is executed for initialization.
15 */
16 public function load()
17 {
18 // Register module.
19 add_action('init', [AmeliaEventsListModule::class, 'registerModule']);
20 }
21
22 public static function registerModule()
23 {
24 // Path to module metadata that is shared between Frontend and Visual Builder.
25 $module_json_folder_path = dirname(__DIR__, 1) . '/visual-builder/src/modules/EventsList';
26
27 ModuleRegistration::register_module(
28 $module_json_folder_path,
29 [
30 'render_callback' => [AmeliaEventsListModule::class, 'renderCallback'],
31 ]
32 );
33 }
34
35 /**
36 * Render module HTML output.
37 */
38 public static function renderCallback($attrs, $content, $block, $elements)
39 {
40 $shortcode = '[ameliaeventslistbooking';
41
42 $shortcode .= self::getSharedShortcodeString($attrs);
43
44 // Preselect/filter parameters
45 $booking_params = $attrs['booking_params']['innerContent']['desktop']['value'] ?? false;
46 if ($booking_params === 'on') {
47 $event = $attrs['events']['innerContent']['desktop']['value'] ?? [];
48 if ($event && count($event) > 0) {
49 $shortcode .= ' event=' . implode(',', $event);
50 }
51
52 $event_to_show = $attrs['event_to_show']['innerContent']['desktop']['value'] ?? 'all';
53 if (count($event) === 0 && $event_to_show !== 'all') {
54 if ($event_to_show === 'custom') {
55 $start_date = $attrs['start_date']['innerContent']['desktop']['value'] ?? '';
56 $end_date = $attrs['end_date']['innerContent']['desktop']['value'] ?? '';
57
58 $has_valid_start = $start_date && preg_match('/^\d{4}-\d{2}-\d{2}$/', $start_date);
59 $has_valid_end = $end_date && preg_match('/^\d{4}-\d{2}-\d{2}$/', $end_date);
60
61 if (!$has_valid_start || !$has_valid_end) {
62 return '';
63 }
64
65 $shortcode .= ' range="' . esc_attr($start_date) . ' - ' . esc_attr($end_date) . '"';
66 } else {
67 $shortcode .= ' range="' . esc_attr($event_to_show) . '"';
68 }
69 }
70
71 $tag = $attrs['tags']['innerContent']['desktop']['value'] ?? [];
72 if ($tag && count($tag) > 0) {
73 $shortcode .= ' tag="' . implode(',', array_map(function ($t) {
74 return '{' . $t . '}';
75 }, $tag)) . '"';
76 }
77
78 $recurring = $attrs['recurring']['innerContent']['desktop']['value'] ?? false;
79 if ($recurring === 'on') {
80 $shortcode .= ' recurring=1';
81 }
82
83 $locations = $attrs['locations']['innerContent']['desktop']['value'] ?? [];
84 if ($locations && count($locations) > 0) {
85 $shortcode .= ' location=' . implode(',', $locations);
86 }
87 }
88
89 $shortcode .= ']';
90
91 return do_shortcode($shortcode);
92 }
93 }
94