modern-events-calendar.php
226 lines
| 1 | <?php |
| 2 | /** |
| 3 | * ModernEventsCalendar core integrations file |
| 4 | * |
| 5 | * @since 1.0.0 |
| 6 | * @package SureTrigger |
| 7 | */ |
| 8 | |
| 9 | namespace SureTriggers\Integrations\ModernEventsCalendar; |
| 10 | |
| 11 | use SureTriggers\Controllers\IntegrationsController; |
| 12 | use SureTriggers\Integrations\Integrations; |
| 13 | use SureTriggers\Traits\SingletonLoader; |
| 14 | |
| 15 | /** |
| 16 | * Class SureTrigger |
| 17 | * |
| 18 | * @package SureTriggers\Integrations\ModernEventsCalendar |
| 19 | */ |
| 20 | class ModernEventsCalendar extends Integrations { |
| 21 | |
| 22 | use SingletonLoader; |
| 23 | |
| 24 | /** |
| 25 | * ID |
| 26 | * |
| 27 | * @var string |
| 28 | */ |
| 29 | protected $id = 'ModernEventsCalendar'; |
| 30 | |
| 31 | /** |
| 32 | * SureTrigger constructor. |
| 33 | */ |
| 34 | public function __construct() { |
| 35 | $this->name = __( 'Modern Events Calendar', 'suretriggers' ); |
| 36 | $this->description = __( 'Best WordPress Event Calendar Plugin.', 'suretriggers' ); |
| 37 | $this->icon_url = SURE_TRIGGERS_URL . 'assets/icons/moderneventscalendar.svg'; |
| 38 | |
| 39 | parent::__construct(); |
| 40 | } |
| 41 | |
| 42 | /** |
| 43 | * Get Event context data. |
| 44 | * |
| 45 | * @param int $booking_id Event Booking ID. |
| 46 | * |
| 47 | * @return array |
| 48 | */ |
| 49 | public static function get_event_context( $booking_id ) { |
| 50 | $event_id = get_post_meta( $booking_id, 'mec_event_id', true ); |
| 51 | $event_id = is_numeric( $event_id ) ? (int) $event_id : ''; |
| 52 | if ( ! $event_id ) { |
| 53 | return []; |
| 54 | } |
| 55 | |
| 56 | $event = get_post( $event_id ); |
| 57 | |
| 58 | // Event booking info. |
| 59 | $event_booking = []; |
| 60 | $event_booking['title'] = get_the_title( $booking_id ); |
| 61 | $event_booking['transaction_id'] = get_post_meta( $booking_id, 'mec_transaction_id', true ); |
| 62 | $event_booking['amount_payable'] = get_post_meta( $booking_id, 'mec_payable', true ); |
| 63 | $event_booking['price'] = get_post_meta( $booking_id, 'mec_price', true ); |
| 64 | $event_booking['time'] = get_post_meta( $booking_id, 'mec_booking_time', true ); |
| 65 | $event_booking['payment_gateway'] = get_post_meta( $booking_id, 'mec_gateway_label', true ); |
| 66 | |
| 67 | $is_confirmed = get_post_meta( $booking_id, 'mec_confirmed', true ); |
| 68 | $event_booking['confirmation_status'] = 'Pending'; |
| 69 | if ( 1 == $is_confirmed ) { |
| 70 | $event_booking['confirmation_status'] = 'Confirmed'; |
| 71 | } elseif ( -1 == $is_confirmed ) { |
| 72 | $event_booking['confirmation_status'] = 'Rejected'; |
| 73 | } |
| 74 | |
| 75 | $is_verified = get_post_meta( $booking_id, 'mec_verified', true ); |
| 76 | $event_booking['verification_status'] = 'Waiting'; |
| 77 | if ( 1 == $is_verified ) { |
| 78 | $event_booking['verification_status'] = 'Verified'; |
| 79 | } elseif ( -1 == $is_verified ) { |
| 80 | $event_booking['verification_status'] = 'Canceled'; |
| 81 | } |
| 82 | |
| 83 | // Event attendees. |
| 84 | $event_attendees = []; |
| 85 | $attendees = get_post_meta( $booking_id, 'mec_attendees', true ); |
| 86 | if ( is_array( $attendees ) && ! empty( $attendees ) ) { |
| 87 | $event_booking['attendees_count'] = count( $attendees ); |
| 88 | foreach ( $attendees as $attendee ) { |
| 89 | $event_attendees[] = [ |
| 90 | 'id' => $attendee['id'], |
| 91 | 'email' => $attendee['email'], |
| 92 | 'name' => $attendee['name'], |
| 93 | ]; |
| 94 | } |
| 95 | } |
| 96 | |
| 97 | // Event tickets. |
| 98 | $event_tickets = []; |
| 99 | $tickets = get_post_meta( $event_id, 'mec_tickets', true ); |
| 100 | if ( is_array( $tickets ) && ! empty( $tickets ) ) { |
| 101 | foreach ( $tickets as $ticket ) { |
| 102 | $event_tickets[] = [ |
| 103 | 'id' => $ticket['id'], |
| 104 | 'name' => $ticket['name'], |
| 105 | 'description' => $ticket['description'], |
| 106 | 'price' => $ticket['price'], |
| 107 | 'price_label' => $ticket['price_label'], |
| 108 | 'limit' => $ticket['limit'], |
| 109 | ]; |
| 110 | } |
| 111 | } |
| 112 | |
| 113 | // Start date time. |
| 114 | $event_start_date_time = get_post_meta( $event_id, 'mec_start_datetime', true ); |
| 115 | |
| 116 | $start_date = $event_start_date_time; |
| 117 | $start_time = $event_start_date_time; |
| 118 | |
| 119 | if ( is_string( $event_start_date_time ) ) { |
| 120 | $start_date = gmdate( 'F j, Y', (int) strtotime( $event_start_date_time ) ); |
| 121 | $start_time = gmdate( 'g:i A', (int) strtotime( $event_start_date_time ) ); |
| 122 | } |
| 123 | |
| 124 | // End date time. |
| 125 | $event_end_date_time = get_post_meta( $event_id, 'mec_end_datetime', true ); |
| 126 | |
| 127 | $end_date = $event_end_date_time; |
| 128 | $end_time = $event_end_date_time; |
| 129 | |
| 130 | if ( is_string( $event_end_date_time ) ) { |
| 131 | $end_date = gmdate( 'F j, Y', (int) strtotime( $event_end_date_time ) ); |
| 132 | $end_time = gmdate( 'g:i A', (int) strtotime( $event_end_date_time ) ); |
| 133 | } |
| 134 | |
| 135 | // Event categories. |
| 136 | $event_categories = null; |
| 137 | $categories = get_the_terms( $event_id, 'mec_category' ); |
| 138 | |
| 139 | if ( ! empty( $categories ) && ! is_wp_error( $categories ) ) { |
| 140 | $category_names = []; |
| 141 | |
| 142 | // Loop through the terms and collect category names. |
| 143 | foreach ( $categories as $category ) { |
| 144 | $category_names[] = $category->name; |
| 145 | } |
| 146 | |
| 147 | // Create a comma-separated string of category names. |
| 148 | $event_categories = implode( ', ', $category_names ); |
| 149 | } |
| 150 | |
| 151 | return [ |
| 152 | 'event_id' => $event_id, |
| 153 | 'title' => get_the_title( $event_id ), |
| 154 | 'description' => isset( $event->post_content ) ? $event->post_content : null, |
| 155 | 'categories' => $event_categories, |
| 156 | 'start_date' => $start_date, |
| 157 | 'start_time' => $start_time, |
| 158 | 'end_date' => $end_date, |
| 159 | 'end_time' => $end_time, |
| 160 | 'location' => self::get_event_location( $event_id ), |
| 161 | 'organizer' => self::get_event_organizer( $event_id ), |
| 162 | 'cost' => get_post_meta( $event_id, 'mec_cost', true ), |
| 163 | 'featured_image_id' => get_post_thumbnail_id( $event_id ), |
| 164 | 'featured_image_url' => get_the_post_thumbnail_url( $event_id ), |
| 165 | 'tickets' => $event_tickets, |
| 166 | 'attendees' => $event_attendees, |
| 167 | 'booking' => $event_booking, |
| 168 | ]; |
| 169 | } |
| 170 | |
| 171 | /** |
| 172 | * Returns the Event Organizer. |
| 173 | * |
| 174 | * @param int $event_id Event ID. |
| 175 | * @return string|null |
| 176 | */ |
| 177 | public static function get_event_organizer( $event_id ) { |
| 178 | $organizer_id = get_post_meta( $event_id, 'mec_organizer_id', true ); |
| 179 | |
| 180 | if ( empty( $organizer_id ) || ! is_numeric( $organizer_id ) ) { |
| 181 | return null; |
| 182 | } |
| 183 | |
| 184 | $organizer_term = get_term( (int) $organizer_id, 'mec_organizer' ); |
| 185 | |
| 186 | if ( is_wp_error( $organizer_term ) || ! $organizer_term || '' === $organizer_term->name ) { |
| 187 | return null; |
| 188 | } |
| 189 | |
| 190 | return $organizer_term->name; |
| 191 | } |
| 192 | |
| 193 | /** |
| 194 | * Returns the location of the event. |
| 195 | * |
| 196 | * @param int $event_id Event ID. |
| 197 | * @return string|null |
| 198 | */ |
| 199 | public static function get_event_location( $event_id ) { |
| 200 | $location_id = get_post_meta( $event_id, 'mec_location_id', true ); |
| 201 | |
| 202 | if ( empty( $location_id ) || ! is_numeric( $location_id ) ) { |
| 203 | return null; |
| 204 | } |
| 205 | |
| 206 | $location_term = get_term( (int) $location_id, 'mec_location' ); |
| 207 | |
| 208 | if ( is_wp_error( $location_term ) || ! $location_term || '' === $location_term->name ) { |
| 209 | return null; |
| 210 | } |
| 211 | |
| 212 | return $location_term->name; |
| 213 | } |
| 214 | |
| 215 | /** |
| 216 | * Is Plugin depended on plugin is installed or not. |
| 217 | * |
| 218 | * @return bool |
| 219 | */ |
| 220 | public function is_plugin_installed() { |
| 221 | return defined( 'MEC_ABSPATH' ); |
| 222 | } |
| 223 | } |
| 224 | |
| 225 | IntegrationsController::register( ModernEventsCalendar::class ); |
| 226 |