From f11c650053fd7ad9fda2fa4cd2cd5c02d2080cde Mon Sep 17 00:00:00 2001 From: Webnus Date: Wed, 17 Feb 2021 11:18:44 +0330 Subject: [PATCH] v5.17.1 v5.17.1 --- README.md | 28 +- app/features/events.php | 30 +- app/features/fes.php | 20 +- app/features/ix.php | 8 +- app/features/labels.php | 4 +- app/features/mec/booking.php | 14 + app/features/mec/dyncss.php | 8 +- app/features/mec/notifications.php | 47 +- app/features/mec/settings.php | 8 +- app/features/occurrences.php | 7 + app/features/update.php | 78 +- app/libraries/book.php | 6 + app/libraries/envato.php | 4 +- app/libraries/factory.php | 30 +- app/libraries/main.php | 50 +- app/libraries/notifications.php | 48 +- app/libraries/skins.php | 49 +- app/skins/agenda/render.php | 5 +- app/skins/available_spot/tpl.php | 8 +- app/skins/carousel/render.php | 20 +- app/skins/countdown/tpl.php | 10 +- app/skins/cover/tpl.php | 10 +- app/skins/custom/render.php | 38 +- app/skins/daily_view/render.php | 7 +- app/skins/full_calendar.php | 12 +- app/skins/grid/render.php | 15 +- app/skins/list/render.php | 16 +- app/skins/masonry/render.php | 8 +- app/skins/monthly_view/calendar.php | 21 +- app/skins/monthly_view/calendar_clean.php | 21 +- app/skins/monthly_view/calendar_novel.php | 6 +- app/skins/single.php | 18 +- app/skins/single/default.php | 4 +- app/skins/single/m1.php | 2 +- app/skins/single/m2.php | 2 +- app/skins/single/modern.php | 6 +- app/skins/slider/render.php | 7 +- app/skins/tile/render.php | 8 +- app/skins/timeline/render.php | 6 +- app/skins/timetable/render.php | 17 +- app/skins/weekly_view/render.php | 7 +- app/skins/yearly_view/render.php | 11 +- assets/css/backend.css | 88 +- assets/css/backend.min.css | 4 +- assets/css/frontend.css | 102 +- assets/css/frontend.min.css | 2 +- changelog.txt | 25 +- .../modern-events-calendar-lite-cs_CZ.mo | Bin 90499 -> 90440 bytes .../modern-events-calendar-lite-cs_CZ.po | 1968 ++++++++-------- .../modern-events-calendar-lite-de_DE.mo | Bin 64717 -> 64659 bytes .../modern-events-calendar-lite-de_DE.po | 1969 ++++++++-------- .../modern-events-calendar-lite-en_US.mo | Bin 562 -> 562 bytes .../modern-events-calendar-lite-en_US.po | 1949 ++++++++-------- .../modern-events-calendar-lite-es_ES.mo | Bin 58226 -> 58178 bytes .../modern-events-calendar-lite-es_ES.po | 1973 +++++++++-------- .../modern-events-calendar-lite-fi_FI.mo | Bin 870 -> 870 bytes .../modern-events-calendar-lite-fi_FI.po | 1951 ++++++++-------- .../modern-events-calendar-lite-fr_FR.mo | Bin 63225 -> 63172 bytes .../modern-events-calendar-lite-fr_FR.po | 1968 ++++++++-------- .../modern-events-calendar-lite-hu_HU.mo | Bin 2256 -> 2256 bytes .../modern-events-calendar-lite-hu_HU.po | 1957 ++++++++-------- .../modern-events-calendar-lite-it_IT.mo | Bin 40871 -> 40821 bytes .../modern-events-calendar-lite-it_IT.po | 1968 ++++++++-------- .../modern-events-calendar-lite-nb_NO.mo | Bin 69905 -> 69852 bytes .../modern-events-calendar-lite-nb_NO.po | 1968 ++++++++-------- .../modern-events-calendar-lite-nl_NL.mo | Bin 23434 -> 23382 bytes .../modern-events-calendar-lite-nl_NL.po | 1967 ++++++++-------- .../modern-events-calendar-lite-pl_PL.mo | Bin 46054 -> 45999 bytes .../modern-events-calendar-lite-pl_PL.po | 1968 ++++++++-------- .../modern-events-calendar-lite-pt_BR.mo | Bin 38945 -> 38895 bytes .../modern-events-calendar-lite-pt_BR.po | 1968 ++++++++-------- .../modern-events-calendar-lite-ru_RU.mo | Bin 37247 -> 37182 bytes .../modern-events-calendar-lite-ru_RU.po | 1968 ++++++++-------- .../modern-events-calendar-lite-sv_SE.mo | Bin 43992 -> 43944 bytes .../modern-events-calendar-lite-sv_SE.po | 1968 ++++++++-------- .../modern-events-calendar-lite-tr_TR.mo | Bin 26783 -> 26706 bytes .../modern-events-calendar-lite-tr_TR.po | 1967 ++++++++-------- languages/modern-events-calendar-lite.pot | 1947 ++++++++-------- mec-init.php | 5 + modern-events-calendar-lite.php | 4 +- readme.txt | 27 +- 81 files changed, 16878 insertions(+), 15527 deletions(-) diff --git a/README.md b/README.md index 3518b787..b6e183bd 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,8 @@ **Donate link:** https://webnus.net \ **Tags:** Event, Events, Calendar, Booking, Schedule, Organizer, Venue \ **Requires at least:** 4.0.0 \ -**Tested up to:** 5.6 \ -**Stable tag:** 5.17.0 \ +**Tested up to:** 5.6.1 \ +**Stable tag:** 5.17.1 \ **Requires PHP:** 5.6 \ **License:** GPLv2 or later \ **License URI:** https://www.gnu.org/licenses/gpl-2.0.html @@ -595,6 +595,30 @@ You can see [plugin documentation](https://webnus.net/dox/modern-events-calendar ## Changelog +### 5.17.1 – 17 February 2021 + +- Added: A new option to manage a percentage of “Last Tickets” globally (pro) +- Added: An ability to manage a percentage of “Last Tickets” per event (pro) +- Improved: The accessibility of MEC invoices (pro) +- Improved: The storage of numeric fields of tickets and fees (pro) +- Improved: Display of featured canceled and custom labels +- Improved: Dark mode in backend and frontend +- Fixed: Settings menu +- Fixed: Duplicate events +- Fixed: User booking limit (pro) +- Fixed: A Fatal error on older versions of PHP +- Fixed: Showing un-rendered notification placeholders (pro) +- Fixed: Bulk booking import (pro) +- Fixed: An issue regarding expired events on full calendar skin +- Fixed: “Booking Cancellation” notification (pro) +- Fixed: iCal export regarding custom day events (pro) +- Fixed: List of the locations and organizers in the wizard popup (add event) +- Fixed: An issue regarding the location without an address in list view modern style +- Fixed: Datepicker style +- Fixed: Category icon setup +- Fixed: Responsive on mobile in the popup modal for booking (pro) +- Fixed: Some minor issues + ### v 5.17.0 – 11 February 2021 - Added: New Back-end Interface diff --git a/app/features/events.php b/app/features/events.php index cda6f9e9..dfc21da3 100644 --- a/app/features/events.php +++ b/app/features/events.php @@ -253,7 +253,7 @@ public function add_category_fields()
-
@@ -292,7 +292,7 @@ public function edit_category_fields($term) -
@@ -1560,6 +1560,8 @@ public function meta_box_booking_options($post) $bookings_user_limit = isset($booking_options['bookings_user_limit']) ? $booking_options['bookings_user_limit'] : ''; $bookings_user_limit_unlimited = isset($booking_options['bookings_user_limit_unlimited']) ? $booking_options['bookings_user_limit_unlimited'] : true; $bookings_all_occurrences = isset($booking_options['bookings_all_occurrences']) ? $booking_options['bookings_all_occurrences'] : 0; + $bookings_last_few_tickets_percentage_inherite = isset($booking_options['last_few_tickets_percentage_inherit']) ? $booking_options['last_few_tickets_percentage_inherit'] : 1; + $bookings_last_few_tickets_percentage = ((isset($booking_options['last_few_tickets_percentage']) and trim($booking_options['last_few_tickets_percentage']) != '') ? $booking_options['last_few_tickets_percentage'] : (isset($this->settings['booking_last_few_tickets_percentage']) ? $this->settings['booking_last_few_tickets_percentage'] : 15)); $loggedin_discount = isset($booking_options['loggedin_discount']) ? $booking_options['loggedin_discount'] : ''; @@ -1692,6 +1694,26 @@ public function meta_box_booking_options($post) + settings['fes_section_booking_lftp']) or (isset($this->settings['fes_section_booking_lftp']) and $this->settings['fes_section_booking_lftp'])))): ?> +
+

+
+ + type="number" min="1" max="100" step="1" name="mec[booking][last_few_tickets_percentage]" value="" placeholder=""/> +
+
+ + settings['fes_section_booking_tubl']) or (isset($this->settings['fes_section_booking_tubl']) and $this->settings['fes_section_booking_tubl'])))): ?> @@ -3246,6 +3268,10 @@ public function save_event($post_id) $ticket['ticket_start_time_ampm'] = strtoupper(substr($ticket_render_start_time, 5, 6)); $ticket['ticket_end_time_hour'] = substr($ticket_render_end_time, 0, 2); $ticket['ticket_end_time_ampm'] = strtoupper(substr($ticket_render_end_time, 5, 6)); + $ticket['price'] = trim($ticket['price']); + $ticket['limit'] = trim($ticket['limit']); + $ticket['minimum_ticket'] = trim($ticket['minimum_ticket']); + $ticket['stop_selling_value'] = trim($ticket['stop_selling_value']); // Bellow conditional block code is used to change ticket dates format to compatible ticket past dates structure for store in db. if(isset($ticket['dates'])) diff --git a/app/features/fes.php b/app/features/fes.php index 5e45f268..ce83a656 100644 --- a/app/features/fes.php +++ b/app/features/fes.php @@ -1146,16 +1146,24 @@ public function fes_form() $ticket['ticket_start_time_ampm'] = strtoupper(substr($ticket_render_start_time, 5, 6)); $ticket['ticket_end_time_hour'] = substr($ticket_render_end_time, 0, 2); $ticket['ticket_end_time_ampm'] = strtoupper(substr($ticket_render_end_time, 5, 6)); + $ticket['price'] = trim($ticket['price']); + $ticket['limit'] = trim($ticket['limit']); + $ticket['minimum_ticket'] = trim($ticket['minimum_ticket']); + $ticket['stop_selling_value'] = trim($ticket['stop_selling_value']); // Bellow conditional block code is used to change ticket dates format to compatible ticket past dates structure for store in db. - if ( isset( $ticket[ 'dates' ] ) ) { - foreach ( $ticket[ 'dates' ] as $dates_ticket_key => $dates_ticket_values ) { - if ( isset( $dates_ticket_values[ 'start' ] ) and trim( $dates_ticket_values[ 'start' ] ) ) { - $ticket[ 'dates' ][ $dates_ticket_key ][ 'start' ] = $this->main->standardize_format( $dates_ticket_values[ 'start' ] ); + if(isset($ticket['dates'])) + { + foreach($ticket['dates'] as $dates_ticket_key => $dates_ticket_values) + { + if(isset($dates_ticket_values['start']) and trim($dates_ticket_values['start'])) + { + $ticket['dates'][$dates_ticket_key]['start'] = $this->main->standardize_format($dates_ticket_values['start']); } - if ( isset( $dates_ticket_values[ 'end' ] ) and trim( $dates_ticket_values[ 'end' ] ) ) { - $ticket[ 'dates' ][ $dates_ticket_key ][ 'end' ] = $this->main->standardize_format( $dates_ticket_values[ 'end' ] ); + if(isset($dates_ticket_values['end']) and trim($dates_ticket_values['end'])) + { + $ticket['dates'][$dates_ticket_key]['end'] = $this->main->standardize_format($dates_ticket_values['end']); } } } diff --git a/app/features/ix.php b/app/features/ix.php index 439416ea..5d3fe3b3 100644 --- a/app/features/ix.php +++ b/app/features/ix.php @@ -229,13 +229,13 @@ public function import_start_bookings() return array('success' => 0, 'message' => __("Please upload a CSV file.", 'modern-events-calendar-lite')); } + $bookings = array(); if(($h = fopen($target_path, 'r')) !== false) { // MEC Libraries $gateway = new MEC_gateway(); $book = $this->getBook(); - $bookings = array(); while(($data = fgetcsv($h, 1000, ",")) !== false) { $booking_id = $data[0]; @@ -250,7 +250,7 @@ public function import_start_bookings() $tickets = get_post_meta($event_id, 'mec_tickets', true); if(!is_array($tickets)) $tickets = array(); - $ticket_id = 0; + $ticket_id = NULL; $ticket_name = $data[5]; foreach($tickets as $tid => $ticket) @@ -263,7 +263,7 @@ public function import_start_bookings() } // Ticket ID not found! - if(!$ticket_id) continue; + if(is_null($ticket_id)) continue; $transaction_id = $data[6]; @@ -418,7 +418,7 @@ public function import_start_bookings() // Delete File unlink($target_path); - return array('success' => 1, 'message' => __('The bookings are imported successfully!', 'modern-events-calendar-lite')); + return array('success' => (count($bookings) ? 1 : 0), 'message' => (count($bookings) ? __('The bookings are imported successfully!', 'modern-events-calendar-lite') : __('No bookings found to import!', 'modern-events-calendar-lite'))); } public function import_start() diff --git a/app/features/labels.php b/app/features/labels.php index 40c9b700..4d1043cc 100644 --- a/app/features/labels.php +++ b/app/features/labels.php @@ -116,7 +116,7 @@ public function edit_form($term) - +

@@ -142,7 +142,7 @@ public function add_form() - +

diff --git a/app/features/mec/booking.php b/app/features/mec/booking.php index 752afa17..67374a71 100644 --- a/app/features/mec/booking.php +++ b/app/features/mec/booking.php @@ -269,6 +269,20 @@ +
+
+ +
+ + +
+
+

+
+ +
+
+
diff --git a/app/features/mec/dyncss.php b/app/features/mec/dyncss.php index 72d34d22..9d21a58c 100644 --- a/app/features/mec/dyncss.php +++ b/app/features/mec/dyncss.php @@ -143,12 +143,12 @@ function mec_dyn_hex2rgb( $cc ) { if($color && $color != '#40d9f1'): ?> /* == TextColors ---------------- */ - .mec-event-grid-minimal .mec-modal-booking-button:hover, .mec-events-timeline-wrap .mec-organizer-item a, .mec-events-timeline-wrap .mec-organizer-item:after, .mec-events-timeline-wrap .mec-shortcode-organizers i, .mec-timeline-event .mec-modal-booking-button, .mec-wrap .mec-map-lightbox-wp.mec-event-list-classic .mec-event-date, .mec-timetable-t2-col .mec-modal-booking-button:hover, .mec-event-container-classic .mec-modal-booking-button:hover, .mec-calendar-events-side .mec-modal-booking-button:hover, .mec-event-grid-yearly .mec-modal-booking-button, .mec-events-agenda .mec-modal-booking-button, .mec-event-grid-simple .mec-modal-booking-button, .mec-event-list-minimal .mec-modal-booking-button:hover, .mec-timeline-month-divider, .mec-wrap.colorskin-custom .mec-totalcal-box .mec-totalcal-view span:hover,.mec-wrap.colorskin-custom .mec-calendar.mec-event-calendar-classic .mec-selected-day,.mec-wrap.colorskin-custom .mec-color, .mec-wrap.colorskin-custom .mec-event-sharing-wrap .mec-event-sharing > li:hover a, .mec-wrap.colorskin-custom .mec-color-hover:hover, .mec-wrap.colorskin-custom .mec-color-before *:before ,.mec-wrap.colorskin-custom .mec-widget .mec-event-grid-classic.owl-carousel .owl-nav i,.mec-wrap.colorskin-custom .mec-event-list-classic a.magicmore:hover,.mec-wrap.colorskin-custom .mec-event-grid-simple:hover .mec-event-title,.mec-wrap.colorskin-custom .mec-single-event .mec-event-meta dd.mec-events-event-categories:before,.mec-wrap.colorskin-custom .mec-single-event-date:before,.mec-wrap.colorskin-custom .mec-single-event-time:before,.mec-wrap.colorskin-custom .mec-events-meta-group.mec-events-meta-group-venue:before,.mec-wrap.colorskin-custom .mec-calendar .mec-calendar-side .mec-previous-month i,.mec-wrap.colorskin-custom .mec-calendar .mec-calendar-side .mec-next-month,.mec-wrap.colorskin-custom .mec-calendar .mec-calendar-side .mec-previous-month:hover,.mec-wrap.colorskin-custom .mec-calendar .mec-calendar-side .mec-next-month:hover,.mec-wrap.colorskin-custom .mec-calendar.mec-event-calendar-classic dt.mec-selected-day:hover,.mec-wrap.colorskin-custom .mec-infowindow-wp h5 a:hover, .colorskin-custom .mec-events-meta-group-countdown .mec-end-counts h3,.mec-calendar .mec-calendar-side .mec-next-month i,.mec-wrap .mec-totalcal-box i,.mec-calendar .mec-event-article .mec-event-title a:hover,.mec-attendees-list-details .mec-attendee-profile-link a:hover,.mec-wrap.colorskin-custom .mec-next-event-details li i, .mec-next-event-details i:before, .mec-marker-infowindow-wp .mec-marker-infowindow-count, .mec-next-event-details a,.mec-wrap.colorskin-custom .mec-events-masonry-cats a.mec-masonry-cat-selected,.lity .mec-color,.lity .mec-color-before :before,.lity .mec-color-hover:hover,.lity .mec-wrap .mec-color,.lity .mec-wrap .mec-color-before :before,.lity .mec-wrap .mec-color-hover:hover,.leaflet-popup-content .mec-color,.leaflet-popup-content .mec-color-before :before,.leaflet-popup-content .mec-color-hover:hover,.leaflet-popup-content .mec-wrap .mec-color,.leaflet-popup-content .mec-wrap .mec-color-before :before,.leaflet-popup-content .mec-wrap .mec-color-hover:hover, .mec-calendar.mec-calendar-daily .mec-calendar-d-table .mec-daily-view-day.mec-daily-view-day-active.mec-color, .mec-map-boxshow div .mec-map-view-event-detail.mec-event-detail i,.mec-map-boxshow div .mec-map-view-event-detail.mec-event-detail:hover,.mec-map-boxshow .mec-color,.mec-map-boxshow .mec-color-before :before,.mec-map-boxshow .mec-color-hover:hover,.mec-map-boxshow .mec-wrap .mec-color,.mec-map-boxshow .mec-wrap .mec-color-before :before,.mec-map-boxshow .mec-wrap .mec-color-hover:hover, .mec-choosen-time-message, .mec-booking-calendar-month-navigation .mec-next-month:hover, .mec-booking-calendar-month-navigation .mec-previous-month:hover + .mec-event-grid-minimal .mec-modal-booking-button:hover, .mec-events-timeline-wrap .mec-organizer-item a, .mec-events-timeline-wrap .mec-organizer-item:after, .mec-events-timeline-wrap .mec-shortcode-organizers i, .mec-timeline-event .mec-modal-booking-button, .mec-wrap .mec-map-lightbox-wp.mec-event-list-classic .mec-event-date, .mec-timetable-t2-col .mec-modal-booking-button:hover, .mec-event-container-classic .mec-modal-booking-button:hover, .mec-calendar-events-side .mec-modal-booking-button:hover, .mec-event-grid-yearly .mec-modal-booking-button, .mec-events-agenda .mec-modal-booking-button, .mec-event-grid-simple .mec-modal-booking-button, .mec-event-list-minimal .mec-modal-booking-button:hover, .mec-timeline-month-divider, .mec-wrap.colorskin-custom .mec-totalcal-box .mec-totalcal-view span:hover,.mec-wrap.colorskin-custom .mec-calendar.mec-event-calendar-classic .mec-selected-day,.mec-wrap.colorskin-custom .mec-color, .mec-wrap.colorskin-custom .mec-event-sharing-wrap .mec-event-sharing > li:hover a, .mec-wrap.colorskin-custom .mec-color-hover:hover, .mec-wrap.colorskin-custom .mec-color-before *:before ,.mec-wrap.colorskin-custom .mec-widget .mec-event-grid-classic.owl-carousel .owl-nav i,.mec-wrap.colorskin-custom .mec-event-list-classic a.magicmore:hover,.mec-wrap.colorskin-custom .mec-event-grid-simple:hover .mec-event-title,.mec-wrap.colorskin-custom .mec-single-event .mec-event-meta dd.mec-events-event-categories:before,.mec-wrap.colorskin-custom .mec-single-event-date:before,.mec-wrap.colorskin-custom .mec-single-event-time:before,.mec-wrap.colorskin-custom .mec-events-meta-group.mec-events-meta-group-venue:before,.mec-wrap.colorskin-custom .mec-calendar .mec-calendar-side .mec-previous-month i,.mec-wrap.colorskin-custom .mec-calendar .mec-calendar-side .mec-next-month:hover,.mec-wrap.colorskin-custom .mec-calendar .mec-calendar-side .mec-previous-month:hover,.mec-wrap.colorskin-custom .mec-calendar .mec-calendar-side .mec-next-month:hover,.mec-wrap.colorskin-custom .mec-calendar.mec-event-calendar-classic dt.mec-selected-day:hover,.mec-wrap.colorskin-custom .mec-infowindow-wp h5 a:hover, .colorskin-custom .mec-events-meta-group-countdown .mec-end-counts h3,.mec-calendar .mec-calendar-side .mec-next-month i,.mec-wrap .mec-totalcal-box i,.mec-calendar .mec-event-article .mec-event-title a:hover,.mec-attendees-list-details .mec-attendee-profile-link a:hover,.mec-wrap.colorskin-custom .mec-next-event-details li i, .mec-next-event-details i:before, .mec-marker-infowindow-wp .mec-marker-infowindow-count, .mec-next-event-details a,.mec-wrap.colorskin-custom .mec-events-masonry-cats a.mec-masonry-cat-selected,.lity .mec-color,.lity .mec-color-before :before,.lity .mec-color-hover:hover,.lity .mec-wrap .mec-color,.lity .mec-wrap .mec-color-before :before,.lity .mec-wrap .mec-color-hover:hover,.leaflet-popup-content .mec-color,.leaflet-popup-content .mec-color-before :before,.leaflet-popup-content .mec-color-hover:hover,.leaflet-popup-content .mec-wrap .mec-color,.leaflet-popup-content .mec-wrap .mec-color-before :before,.leaflet-popup-content .mec-wrap .mec-color-hover:hover, .mec-calendar.mec-calendar-daily .mec-calendar-d-table .mec-daily-view-day.mec-daily-view-day-active.mec-color, .mec-map-boxshow div .mec-map-view-event-detail.mec-event-detail i,.mec-map-boxshow div .mec-map-view-event-detail.mec-event-detail:hover,.mec-map-boxshow .mec-color,.mec-map-boxshow .mec-color-before :before,.mec-map-boxshow .mec-color-hover:hover,.mec-map-boxshow .mec-wrap .mec-color,.mec-map-boxshow .mec-wrap .mec-color-before :before,.mec-map-boxshow .mec-wrap .mec-color-hover:hover, .mec-choosen-time-message, .mec-booking-calendar-month-navigation .mec-next-month:hover, .mec-booking-calendar-month-navigation .mec-previous-month:hover, .mec-yearly-view-wrap .mec-agenda-event-title a:hover, .mec-yearly-view-wrap .mec-yearly-title-sec .mec-next-year i, .mec-yearly-view-wrap .mec-yearly-title-sec .mec-previous-year i, .mec-yearly-view-wrap .mec-yearly-title-sec .mec-next-year:hover, .mec-yearly-view-wrap .mec-yearly-title-sec .mec-previous-year:hover, .mec-av-spot .mec-av-spot-head .mec-av-spot-box span {color: } /* == Backgrounds ----------------- */ - .mec-skin-carousel-container .mec-event-footer-carousel-type3 .mec-modal-booking-button:hover, .mec-wrap.colorskin-custom .mec-event-sharing .mec-event-share:hover .event-sharing-icon,.mec-wrap.colorskin-custom .mec-event-grid-clean .mec-event-date,.mec-wrap.colorskin-custom .mec-event-list-modern .mec-event-sharing > li:hover a i,.mec-wrap.colorskin-custom .mec-event-list-modern .mec-event-sharing .mec-event-share:hover .mec-event-sharing-icon,.mec-wrap.colorskin-custom .mec-event-list-modern .mec-event-sharing li:hover a i,.mec-wrap.colorskin-custom .mec-calendar:not(.mec-event-calendar-classic) .mec-selected-day,.mec-wrap.colorskin-custom .mec-calendar .mec-selected-day:hover,.mec-wrap.colorskin-custom .mec-calendar .mec-calendar-row dt.mec-has-event:hover,.mec-wrap.colorskin-custom .mec-calendar .mec-has-event:after, .mec-wrap.colorskin-custom .mec-bg-color, .mec-wrap.colorskin-custom .mec-bg-color-hover:hover, .colorskin-custom .mec-event-sharing-wrap:hover > li, .mec-wrap.colorskin-custom .mec-totalcal-box .mec-totalcal-view span.mec-totalcalview-selected,.mec-wrap .flip-clock-wrapper ul li a div div.inn,.mec-wrap .mec-totalcal-box .mec-totalcal-view span.mec-totalcalview-selected,.event-carousel-type1-head .mec-event-date-carousel,.mec-event-countdown-style3 .mec-event-date,#wrap .mec-wrap article.mec-event-countdown-style1,.mec-event-countdown-style1 .mec-event-countdown-part3 a.mec-event-button,.mec-wrap .mec-event-countdown-style2,.mec-map-get-direction-btn-cnt input[type="submit"],.mec-booking button,span.mec-marker-wrap,.mec-wrap.colorskin-custom .mec-timeline-events-container .mec-timeline-event-date:before, .mec-has-event-for-booking.mec-active .mec-calendar-novel-selected-day, .mec-booking-tooltip.multiple-time .mec-booking-calendar-date.mec-active, .mec-booking-tooltip.multiple-time .mec-booking-calendar-date:hover, .mec-ongoing-normal-label + .mec-skin-carousel-container .mec-event-footer-carousel-type3 .mec-modal-booking-button:hover, .mec-wrap.colorskin-custom .mec-event-sharing .mec-event-share:hover .event-sharing-icon,.mec-wrap.colorskin-custom .mec-event-grid-clean .mec-event-date,.mec-wrap.colorskin-custom .mec-event-list-modern .mec-event-sharing > li:hover a i,.mec-wrap.colorskin-custom .mec-event-list-modern .mec-event-sharing .mec-event-share:hover .mec-event-sharing-icon,.mec-wrap.colorskin-custom .mec-event-list-modern .mec-event-sharing li:hover a i,.mec-wrap.colorskin-custom .mec-calendar:not(.mec-event-calendar-classic) .mec-selected-day,.mec-wrap.colorskin-custom .mec-calendar .mec-selected-day:hover,.mec-wrap.colorskin-custom .mec-calendar .mec-calendar-row dt.mec-has-event:hover,.mec-wrap.colorskin-custom .mec-calendar .mec-has-event:after, .mec-wrap.colorskin-custom .mec-bg-color, .mec-wrap.colorskin-custom .mec-bg-color-hover:hover, .colorskin-custom .mec-event-sharing-wrap:hover > li, .mec-wrap.colorskin-custom .mec-totalcal-box .mec-totalcal-view span.mec-totalcalview-selected,.mec-wrap .flip-clock-wrapper ul li a div div.inn,.mec-wrap .mec-totalcal-box .mec-totalcal-view span.mec-totalcalview-selected,.event-carousel-type1-head .mec-event-date-carousel,.mec-event-countdown-style3 .mec-event-date,#wrap .mec-wrap article.mec-event-countdown-style1,.mec-event-countdown-style1 .mec-event-countdown-part3 a.mec-event-button,.mec-wrap .mec-event-countdown-style2,.mec-map-get-direction-btn-cnt input[type="submit"],.mec-booking button,span.mec-marker-wrap,.mec-wrap.colorskin-custom .mec-timeline-events-container .mec-timeline-event-date:before, .mec-has-event-for-booking.mec-active .mec-calendar-novel-selected-day, .mec-booking-tooltip.multiple-time .mec-booking-calendar-date.mec-active, .mec-booking-tooltip.multiple-time .mec-booking-calendar-date:hover, .mec-ongoing-normal-label, .mec-calendar .mec-has-event:after {background-color: ;} @@ -157,8 +157,10 @@ function mec_dyn_hex2rgb( $cc ) { ------------------ */ .mec-skin-carousel-container .mec-event-footer-carousel-type3 .mec-modal-booking-button:hover, .mec-timeline-month-divider, .mec-wrap.colorskin-custom .mec-single-event .mec-speakers-details ul li .mec-speaker-avatar a:hover img,.mec-wrap.colorskin-custom .mec-event-list-modern .mec-event-sharing > li:hover a i,.mec-wrap.colorskin-custom .mec-event-list-modern .mec-event-sharing .mec-event-share:hover .mec-event-sharing-icon,.mec-wrap.colorskin-custom .mec-event-list-standard .mec-month-divider span:before,.mec-wrap.colorskin-custom .mec-single-event .mec-social-single:before,.mec-wrap.colorskin-custom .mec-single-event .mec-frontbox-title:before,.mec-wrap.colorskin-custom .mec-calendar .mec-calendar-events-side .mec-table-side-day, .mec-wrap.colorskin-custom .mec-border-color, .mec-wrap.colorskin-custom .mec-border-color-hover:hover, .colorskin-custom .mec-single-event .mec-frontbox-title:before, .colorskin-custom .mec-single-event .mec-events-meta-group-booking form > h4:before, .mec-wrap.colorskin-custom .mec-totalcal-box .mec-totalcal-view span.mec-totalcalview-selected,.mec-wrap .mec-totalcal-box .mec-totalcal-view span.mec-totalcalview-selected,.event-carousel-type1-head .mec-event-date-carousel:after,.mec-wrap.colorskin-custom .mec-events-masonry-cats a.mec-masonry-cat-selected, .mec-marker-infowindow-wp .mec-marker-infowindow-count, .mec-wrap.colorskin-custom .mec-events-masonry-cats a:hover, .mec-has-event-for-booking .mec-calendar-novel-selected-day, .mec-booking-tooltip.multiple-time .mec-booking-calendar-date.mec-active, .mec-booking-tooltip.multiple-time .mec-booking-calendar-date:hover {border-color: ;} - .mec-wrap.colorskin-custom .mec-event-countdown-style3 .mec-event-date:after,.mec-wrap.colorskin-custom .mec-month-divider span:before + + .mec-wrap.colorskin-custom .mec-event-countdown-style3 .mec-event-date:after,.mec-wrap.colorskin-custom .mec-month-divider span:before, .mec-calendar.mec-event-container-simple dl dt.mec-selected-day, .mec-calendar.mec-event-container-simple dl dt.mec-selected-day:hover {border-bottom-color:;} + .mec-wrap.colorskin-custom article.mec-event-countdown-style1 .mec-event-countdown-part2:after {border-color: transparent transparent transparent ;} diff --git a/app/features/mec/notifications.php b/app/features/mec/notifications.php index 2e604782..f82dfb29 100644 --- a/app/features/mec/notifications.php +++ b/app/features/mec/notifications.php @@ -742,7 +742,8 @@
- /> + + />
@@ -1558,33 +1559,27 @@ jQuery("#mec_notifications_form").on('submit', function(event) { event.preventDefault(); - - jQuery("#mec_notifications_booking_notification_content-html").click(); - jQuery("#mec_notifications_booking_notification_content-tmce").click(); - - jQuery("#mec_notifications_email_verification_content-html").click(); - jQuery("#mec_notifications_email_verification_content-tmce").click(); - - jQuery("#mec_notifications_booking_confirmation_content-html").click(); - jQuery("#mec_notifications_booking_confirmation_content-tmce").click(); - jQuery("#mec_notifications_booking_rejection_content-html").click(); - jQuery("#mec_notifications_booking_rejection_content-tmce").click(); + var notifications = [ + "booking_notification", + "email_verification", + "booking_confirmation", + "booking_rejection", + "admin_notification", + "booking_reminder", + "new_event", + "user_event_publishing", + "event_soldout", + ]; + + var content_types = ; - jQuery("#mec_notifications_admin_notification_content-html").click(); - jQuery("#mec_notifications_admin_notification_content-tmce").click(); - - jQuery("#mec_notifications_booking_reminder_content-html").click(); - jQuery("#mec_notifications_booking_reminder_content-tmce").click(); - - jQuery("#mec_notifications_new_event_content-html").click(); - jQuery("#mec_notifications_new_event_content-tmce").click(); - - jQuery("#mec_notifications_user_event_publishing_content-html").click(); - jQuery("#mec_notifications_user_event_publishing_content-tmce").click(); - - jQuery("#mec_notifications_event_soldout_content-html").click(); - jQuery("#mec_notifications_event_soldout_content-tmce").click(); + jQuery.each(notifications,function(i,notification_type){ + jQuery.each(content_types,function(j,type){ + jQuery("#mec_notifications_"+notification_type+type+"_content-html").click(); + jQuery("#mec_notifications_"+notification_type+type+"_content-tmce").click(); + }); + }); }); diff --git a/app/features/mec/settings.php b/app/features/mec/settings.php index 66c25834..4a63d198 100644 --- a/app/features/mec/settings.php +++ b/app/features/mec/settings.php @@ -112,7 +112,7 @@
+ value="" placeholder=""/>
@@ -875,6 +875,12 @@ /> +
+ +
+ + + version5161(); if(version_compare($version, '5.16.2', '<')) $this->version5162(); if(version_compare($version, '5.17.0', '<')) $this->version5170(); + if(version_compare($version, '5.17.1', '<')) $this->version5171(); // Update to latest version to prevent running the code twice update_option('mec_version', $this->main->get_version()); } + + public function update_capabilities($capabilities) + { + // Site Admin + $role = get_role('administrator'); + if($role) foreach($capabilities as $capability) $role->add_cap($capability, true); + + // Multisite + if(is_multisite()) + { + // All Super Admins + $supers = get_super_admins(); + foreach($supers as $admin) + { + $user = new WP_User(0, $admin); + foreach($capabilities as $capability) $user->add_cap($capability, true); + } + } + } + + public function reschedule() + { + // Scheduler + $schedule = $this->getSchedule(); + + // Add Schedule for All Events + $events = $this->main->get_events(); + foreach($events as $event) $schedule->reschedule($event->ID, 50); + } /** * Update database to version 1.0.3 @@ -234,12 +264,8 @@ public function version400() // Drop Columns $this->db->q("ALTER TABLE `#__mec_dates` DROP COLUMN `type`;"); - // Scheduler - $schedule = $this->getSchedule(); - - // Add Schedule for All Events - $events = $this->main->get_events(); - foreach($events as $event) $schedule->reschedule($event->ID, 50); + // Reschedule + $this->reschedule(); // Scheduler Cron job if(!wp_next_scheduled('mec_scheduler')) wp_schedule_event(time(), 'hourly', 'mec_scheduler'); @@ -511,21 +537,8 @@ public function version5140() // List of Capabilities $capabilities = array('mec_bookings', 'mec_add_booking', 'mec_coupons', 'mec_report', 'mec_import_export', 'mec_settings'); - // Site Admin - $role = get_role('administrator'); - if($role) foreach($capabilities as $capability) $role->add_cap($capability, true); - - // Multisite - if(is_multisite()) - { - // All Super Admins - $supers = get_super_admins(); - foreach($supers as $admin) - { - $user = new WP_User(0, $admin); - foreach($capabilities as $capability) $user->add_cap($capability, true); - } - } + // Update Capabilities + $this->update_capabilities($capabilities); } public function version5160() @@ -558,22 +571,15 @@ public function version5162() public function version5170() { // List of Capabilities - $capabilities = array('mec_shortcodes'); + $capabilities = array('mec_shortcodes', 'mec_settings'); - // Site Admin - $role = get_role('administrator'); - if($role) foreach($capabilities as $capability) $role->add_cap($capability, true); + // Update Capabilities + $this->update_capabilities($capabilities); + } - // Multisite - if(is_multisite()) - { - // All Super Admins - $supers = get_super_admins(); - foreach($supers as $admin) - { - $user = new WP_User(0, $admin); - foreach($capabilities as $capability) $user->add_cap($capability, true); - } - } + public function version5171() + { + $this->version5170(); + $this->reschedule(); } } \ No newline at end of file diff --git a/app/libraries/book.php b/app/libraries/book.php index 76f8a81d..d2c5abe6 100644 --- a/app/libraries/book.php +++ b/app/libraries/book.php @@ -223,6 +223,7 @@ public function add($values, $transaction_id, $ticket_ids) update_post_meta($book_id, 'mec_transaction_id', $transaction_id); $transaction['booking_id'] = $book_id; + $transaction['invoice_key'] = md5(time().mt_rand(10000, 99999)); $this->update_transaction($transaction_id, $transaction); // Publish it @@ -843,6 +844,11 @@ public function get_invoice_link($transaction_id) $url = $main->URL('site'); $url = $main->add_qs_var('method', 'mec-invoice', $url); + + // Invoice Key + $transaction = $this->get_transaction($transaction_id); + if(isset($transaction['invoice_key'])) $url = $main->add_qs_var('mec-key', $transaction['invoice_key'], $url); + return apply_filters('mec_booking_invoice_url', $main->add_qs_var('id', $transaction_id, $url), $transaction_id); } diff --git a/app/libraries/envato.php b/app/libraries/envato.php index 740b7fbc..45b54b3e 100644 --- a/app/libraries/envato.php +++ b/app/libraries/envato.php @@ -193,6 +193,7 @@ public function check_update($transient) $obj->new_version = $version; $obj->url = $this->itemurl; $obj->package = $this->get_update_path(); + $obj->upgrade_notice = esc_html__('This update includes only bug fixes.', 'modern-events-calendar-lite'); $obj->sections = array ( 'description' => 'Modern Events Calendar - Responsive Event Scheduler & Booking For WordPress', @@ -269,7 +270,8 @@ public function check_info($false, $action, $arg) $information->download_link = $this->get_update_path(); $information->banners['low'] = 'https://ps.w.org/modern-events-calendar-lite/assets/banner-772x250.png?rev=1912767'; $information->tested = '5.2.2'; - $information->active_installs = '10000'; + $information->active_installs = '100000'; + $information->upgrade_notice = esc_html__('This update includes only bug fixes.', 'modern-events-calendar-lite'); $information->sections = (array) $information->sections; unset($information->sections['installation']); diff --git a/app/libraries/factory.php b/app/libraries/factory.php index d6d7645f..138f553d 100644 --- a/app/libraries/factory.php +++ b/app/libraries/factory.php @@ -988,13 +988,16 @@ public function install($blog_id = 1) // MEC Capabilities $role = get_role('administrator'); - $role->add_cap('mec_bookings', true); - $role->add_cap('mec_add_booking', true); - $role->add_cap('mec_coupons', true); - $role->add_cap('mec_report', true); - $role->add_cap('mec_import_export', true); - $role->add_cap('mec_settings', true); - $role->add_cap('mec_shortcodes', true); + if($role) + { + $role->add_cap('mec_bookings', true); + $role->add_cap('mec_add_booking', true); + $role->add_cap('mec_coupons', true); + $role->add_cap('mec_report', true); + $role->add_cap('mec_import_export', true); + $role->add_cap('mec_settings', true); + $role->add_cap('mec_shortcodes', true); + } } /** @@ -1166,4 +1169,17 @@ public function should_include_assets($client = 'frontend') return apply_filters('mec_include_backend_assets', false); } } + + function mecShowUpgradeNotification($currentPluginMetadata, $newPluginMetadata){ + // check "upgrade_notice" + if (isset($newPluginMetadata->upgrade_notice) && strlen(trim($newPluginMetadata->upgrade_notice)) > 0){ + ?> + +
+ + +
+ data($event_id); $location_id = isset($event->meta['mec_location_id']) ? $event->meta['mec_location_id'] : 0; @@ -6343,14 +6351,15 @@ public function load_map_assets($define_settings = null) $settings = $this->get_settings(); $assets = array('js'=>array(), 'css'=>array()); - - $gm_include = apply_filters('mec_gm_include', true); $local = $this->get_current_language(); - $ex = explode('_',$local); - $language = $ex[0] ?? 'en'; - $region = $ex[1] ?? 'US'; - if($gm_include) $assets['js']['googlemap'] = '//maps.googleapis.com/maps/api/js?libraries=places'.((isset($settings['google_maps_api_key']) and trim($settings['google_maps_api_key']) != '') ? '&key='.$settings['google_maps_api_key'] : '').'&language='.$language.'®ion='.$region;//$this->get_current_language(); + $ex = explode('_',$local); + + $language = ((isset($ex[0]) and trim($ex[0])) ? $ex[0] : 'en'); + $region = ((isset($ex[1]) and trim($ex[1])) ? $ex[1] : 'US'); + + $gm_include = apply_filters('mec_gm_include', true); + if($gm_include) $assets['js']['googlemap'] = '//maps.googleapis.com/maps/api/js?libraries=places'.((isset($settings['google_maps_api_key']) and trim($settings['google_maps_api_key']) != '') ? '&key='.$settings['google_maps_api_key'] : '').'&language='.$language.'®ion='.$region; $assets['js']['mec-richmarker-script'] = $this->asset('packages/richmarker/richmarker.min.js'); // Google Maps Rich Marker $assets['js']['mec-clustering-script'] = $this->asset('packages/clusterer/markerclusterer.min.js'); // Google Maps Clustering @@ -6961,7 +6970,6 @@ public function get_ical_rrules($event, $only_rrule = false) $recurrence = array(); if(isset($event->mec->repeat) and $event->mec->repeat) { - $gmt_offset = $this->get_gmt_offset($event); $finish = ($event->mec->end != '0000-00-00' ? date('Ymd\THis\Z', strtotime($event->mec->end.' '.$event->time['end'])) : ''); $freq = ''; $interval = '1'; @@ -7030,7 +7038,18 @@ public function get_ical_rrules($event, $only_rrule = false) foreach($mec_periods as $mec_period) { $mec_days = explode(':', trim($mec_period, ': ')); - $days .= date('Ymd\THis', strtotime($mec_days[0].' '.$event->time['start'])).$gmt_offset.'/'.date('Ymd\THis', strtotime($mec_days[1].' '.$event->time['end'])).$gmt_offset.','; + + $time_start = $event->time['start']; + if(isset($mec_days[2])) $time_start = str_replace('-', ':', str_replace('-AM', ' AM', str_replace('-PM', ' PM', $mec_days[2]))); + + $time_end = $event->time['end']; + if(isset($mec_days[3])) $time_end = str_replace('-', ':', str_replace('-AM', ' AM', str_replace('-PM', ' PM', $mec_days[3]))); + + $start_time = strtotime($mec_days[0].' '.$time_start); + $end_time = strtotime($mec_days[1].' '.$time_end); + + $gmt_offset_seconds = $this->get_gmt_offset_seconds($start_time, $event); + $days .= gmdate('Ymd\\THi00\\Z', ($start_time - $gmt_offset_seconds)).'/'.gmdate('Ymd\\THi00\\Z', ($end_time - $gmt_offset_seconds)).','; } // Add RDATE @@ -7339,17 +7358,26 @@ public function get_flags($event, $date = NULL) // Check For Return SoldOut Label Exist. if($remained_tickets === 0) return str_replace('%%title%%', __('Sold Out', 'modern-events-calendar-lite'), $output_tag) . ''; - + + // Booking Options $booking_options = get_post_meta($event_id, 'mec_booking', true); + + $bookings_last_few_tickets_percentage_inherite = isset($booking_options['last_few_tickets_percentage_inherit']) ? $booking_options['last_few_tickets_percentage_inherit'] : 1; + $bookings_last_few_tickets_percentage = ((isset($booking_options['last_few_tickets_percentage']) and trim($booking_options['last_few_tickets_percentage']) != '') ? $booking_options['last_few_tickets_percentage'] : NULL); + $total_bookings_limit = (isset($booking_options['bookings_limit']) and trim($booking_options['bookings_limit'])) ? $booking_options['bookings_limit'] : 100; $bookings_limit_unlimited = isset($booking_options['bookings_limit_unlimited']) ? $booking_options['bookings_limit_unlimited'] : 0; if($bookings_limit_unlimited == '1') $total_bookings_limit = -1; // Get Per Occurrence $total_bookings_limit = MEC_feature_occurrences::param($event_id, $timestamp, 'bookings_limit', $total_bookings_limit); + + // Percentage + $percentage = ((isset($settings['booking_last_few_tickets_percentage']) and trim($settings['booking_last_few_tickets_percentage']) != '') ? $settings['booking_last_few_tickets_percentage'] : 15); + if(!$bookings_last_few_tickets_percentage_inherite and $bookings_last_few_tickets_percentage) $percentage = (int) $bookings_last_few_tickets_percentage; // Check For Return A Few Label Exist. - if(($total_bookings_limit > 0) and ($remained_tickets <= round(((15 * $total_bookings_limit) / 100)))) return str_replace('%%title%%', __('Last Few Tickets', 'modern-events-calendar-lite'), $output_tag); + if(($total_bookings_limit > 0) and ($remained_tickets <= round((($percentage * $total_bookings_limit) / 100)))) return str_replace('%%title%%', __('Last Few Tickets', 'modern-events-calendar-lite'), $output_tag); return false; } @@ -7404,6 +7432,8 @@ public function check_date_time_validation($format, $date) public function get_start_of_multiple_days($event_id, $date) { + if(trim($date) == '') return NULL; + $db = $this->getDB(); return $db->select("SELECT `dstart` FROM `#__mec_dates` WHERE `post_id`='".$event_id."' AND ((`dstart`='".$date."') OR (`dstart`<'".$date."' AND `dend`>='".$date."')) ORDER BY `dstart` DESC LIMIT 1", 'loadResult'); } diff --git a/app/libraries/notifications.php b/app/libraries/notifications.php index b45b0da9..5d10288b 100644 --- a/app/libraries/notifications.php +++ b/app/libraries/notifications.php @@ -126,6 +126,9 @@ public function email_verification($book_id, $mode = 'auto') $message = str_replace('%%verification_link%%', $link, $message); $message = str_replace('%%link%%', $link, $message); + // Remove remained placeholders + $message = preg_replace('/%%.*%%/', '', $message); + $message = $this->add_template($message); // Filter the email @@ -228,7 +231,10 @@ public function booking_notification($book_id) $message = isset($this->notif_settings['booking_notification']['content']) ? $this->notif_settings['booking_notification']['content'] : ''; $message = $this->content($this->get_content($message, 'booking_notification', $event_id), $book_id, $attendee); - + + // Remove remained placeholders + $message = preg_replace('/%%.*%%/', '', $message); + $message = $this->add_template($message); // Filter the email @@ -331,6 +337,9 @@ public function booking_confirmation($book_id, $mode = 'manually') $message = isset($this->notif_settings['booking_confirmation']['content']) ? $this->notif_settings['booking_confirmation']['content'] : ''; $message = $this->content($this->get_content($message, 'booking_confirmation', $event_id), $book_id, $attendee); + // Remove remained placeholders + $message = preg_replace('/%%.*%%/', '', $message); + $message = $this->add_template($message); // Filter the email @@ -469,6 +478,10 @@ public function booking_cancellation($book_id) // Book Data $message = str_replace('%%admin_link%%', $this->link(array('post_type'=>$this->main->get_book_post_type()), $this->main->URL('admin').'edit.php'), $message); + + // Remove remained placeholders + $message = preg_replace('/%%.*%%/', '', $message); + $message = $this->add_template($message); // Filter the email @@ -601,6 +614,10 @@ public function booking_rejection($book_id) // Book Data $message = str_replace('%%admin_link%%', $this->link(array('post_type'=>$this->main->get_book_post_type()), $this->main->URL('admin').'edit.php'), $message); + + // Remove remained placeholders + $message = preg_replace('/%%.*%%/', '', $message); + $message = $this->add_template($message); // Filter the email @@ -702,6 +719,9 @@ public function admin_notification($book_id) // Set Email Type to HTML add_filter('wp_mail_content_type', array($this->main, 'html_email_type')); + // Remove remained placeholders + $message = preg_replace('/%%.*%%/', '', $message); + $message = $this->add_template($message); // Filter the email @@ -800,6 +820,10 @@ public function booking_reminder($book_id) $message = str_replace('%%zoom_embed%%', get_post_meta($event_id, 'mec_zoom_embed', true), $message); $message = $this->content($this->get_content($message, 'booking_reminder', $event_id), $book_id, $attendee); + + // Remove remained placeholders + $message = preg_replace('/%%.*%%/', '', $message); + $message = $this->add_template($message); // Filter the email @@ -946,6 +970,9 @@ public function new_event($event_id, $update = false) $message = str_replace('%%zoom_password%%', get_post_meta($event_id, 'mec_zoom_password', true), $message); $message = str_replace('%%zoom_embed%%', get_post_meta($event_id, 'mec_zoom_embed', true), $message); + // Remove remained placeholders + $message = preg_replace('/%%.*%%/', '', $message); + // Notification Subject $subject = str_replace('%%event_title%%', get_the_title($event_id), $subject); @@ -1084,6 +1111,9 @@ public function user_event_publishing($new, $old, $post) $message = str_replace('%%zoom_password%%', get_post_meta($post->ID, 'mec_zoom_password', true), $message); $message = str_replace('%%zoom_embed%%', get_post_meta($post->ID, 'mec_zoom_embed', true), $message); + // Remove remained placeholders + $message = preg_replace('/%%.*%%/', '', $message); + // Notification Subject $subject = str_replace('%%event_title%%', get_the_title($post->ID), $subject); @@ -1175,6 +1205,10 @@ public function event_soldout($event_id, $book_id) // Book Data $message = str_replace('%%admin_link%%', $this->link(array('post_type'=>$this->main->get_book_post_type()), $this->main->URL('admin').'edit.php'), $message); + + // Remove remained placeholders + $message = preg_replace('/%%.*%%/', '', $message); + $message = $this->add_template($message); // Filter the email @@ -1757,6 +1791,12 @@ public function add_template($content) */ public function get_subject($value, $notification_key, $event_id) { + $custom_subject = apply_filters('mec_notification_get_subject','',$notification_key,$event_id); + if(!empty($custom_subject)){ + + return $custom_subject; + } + $values = get_post_meta($event_id, 'mec_notifications', true); if(!is_array($values) or (is_array($values) and !count($values))) return $value; @@ -1777,6 +1817,12 @@ public function get_subject($value, $notification_key, $event_id) */ public function get_content($value, $notification_key, $event_id) { + $custom_message = apply_filters('mec_notification_get_content','',$notification_key,$event_id); + if(!empty($custom_message)){ + + return $custom_message; + } + $values = get_post_meta($event_id, 'mec_notifications', true); if(!is_array($values) or (is_array($values) and !count($values))) return $value; diff --git a/app/libraries/skins.php b/app/libraries/skins.php index 5ba9db80..e47dd83e 100644 --- a/app/libraries/skins.php +++ b/app/libraries/skins.php @@ -1468,6 +1468,9 @@ public function display_organizers($event) return $output ? '
' : $output; } + /** + * TODO: Refactor + */ public function display_link($event, $title = NULL, $class = NULL, $attributes = NULL) { // Event Title @@ -1481,8 +1484,25 @@ public function display_link($event, $title = NULL, $class = NULL, $attributes = // Link is disabled if($method == 'no' and in_array($class, array('mec-booking-button', 'mec-detail-button', 'mec-booking-button mec-bg-color-hover mec-border-color-hover', 'mec-event-link'))) return ''; elseif($method == 'no') return $title; + else + { + $sed_method = (isset($this->skin_options['sed_method']) ? $this->skin_options['sed_method'] : ''); + switch($sed_method) + { + case '0': + + $sed_method = '_self'; + break; + case 'new': + + $sed_method = '_blank'; + break; + } + + $sed_method = ($sed_method ? $sed_method : '_blank'); + } - $target = ($method == 'new' ? 'target="_blank" rel="noopener"' : ''); + $target = (!empty($sed_method) ? 'target="'.$sed_method.'" rel="noopener"' : ''); $target = apply_filters('mec_event_link_change_target' , $target, $event->data->ID); return ''.$title.''; } @@ -1498,32 +1518,25 @@ public function get_end_date() return $maximum_date; } - public function get_label_caption($event) + public function get_label_captions($event, $extra_class = null) { - $label_style = ''; + $captions = ''; if(isset($event->data->labels) and is_array($event->data->labels) and count($event->data->labels)) { foreach($event->data->labels as $label) { if(!isset($label['style']) or (isset($label['style']) and !trim($label['style']))) continue; - if($label['style'] == 'mec-label-featured') $label_style = esc_html__('Featured' , 'modern-events-calendar-lite'); - elseif($label['style'] == 'mec-label-canceled') $label_style = esc_html__('Canceled' , 'modern-events-calendar-lite'); - elseif($label['style'] == 'mec-label-custom' and isset($label['name']) and trim($label['name'])) $label_style = esc_html__($label['name'] , 'modern-events-calendar-lite'); - } - } - - return $label_style; - } + $captions .= ''; + if($label['style'] == 'mec-label-featured') $captions .= esc_html__($label['name'], 'modern-events-calendar-lite'); + elseif($label['style'] == 'mec-label-canceled') $captions .= esc_html__($label['name'], 'modern-events-calendar-lite'); + elseif($label['style'] == 'mec-label-custom' and isset($label['name']) and trim($label['name'])) $captions .= esc_html__($label['name'], 'modern-events-calendar-lite'); + $captions .= ''; - public function get_label_caption_color($event) - { - $color = ''; - if(isset($event->data->labels) and is_array($event->data->labels) and count($event->data->labels)) - { - foreach($event->data->labels as $label) if(isset($label['color']) and trim($label['color'])) $color = $label['color']; + break; + } } - return $color; + return $captions; } } \ No newline at end of file diff --git a/app/skins/agenda/render.php b/app/skins/agenda/render.php index 47ed6843..ca5c76f7 100644 --- a/app/skins/agenda/render.php +++ b/app/skins/agenda/render.php @@ -32,9 +32,6 @@ $event_color = isset($event->data->meta['mec_color']) ? '' : ''; $event_start_date = !empty($event->date['start']['date']) ? $event->date['start']['date'] : ''; - // Label Caption - $label_style = $this->get_label_caption($event); - $label_color = $this->get_label_caption_color($event); // MEC Schema do_action('mec_schema', $event); @@ -54,7 +51,7 @@ display_link($event); ?> main->get_flags($event).$event_color; ?> - '.$label_style.''; echo $this->main->get_normal_labels($event, $display_label).$this->main->display_cancellation_reason($event, $reason_for_cancellation); ?> + get_label_captions($event, 'mec-fc-style'); ?> data->ID ); ?> booking_button($event); ?> localtime) echo $this->main->module('local-time.type2', array('event'=>$event)); ?> diff --git a/app/skins/available_spot/tpl.php b/app/skins/available_spot/tpl.php index 8b6e0c33..c2394722 100644 --- a/app/skins/available_spot/tpl.php +++ b/app/skins/available_spot/tpl.php @@ -46,10 +46,6 @@ $event_start_date = !empty($event->date['start']['date']) ? $event->date['start']['date'] : ''; -// Label Caption -$label_style = $this->get_label_caption($event); -$label_color = $this->get_label_caption_color($event); - $start_time = date('D M j Y G:i:s', strtotime($start_date.' '.date('H:i:s', strtotime($event_time)))); $end_time = date('D M j Y G:i:s', strtotime($end_date.' '.date('H:i:s', strtotime($event_etime)))); @@ -122,12 +118,14 @@ function() do_action('mec_schema', $event); ?>
-
+
+ get_label_captions($event); ?> +
diff --git a/app/skins/carousel/render.php b/app/skins/carousel/render.php index ba2e8f06..94506aad 100644 --- a/app/skins/carousel/render.php +++ b/app/skins/carousel/render.php @@ -31,21 +31,18 @@ $start_time = (isset($event->data->time) ? $event->data->time['start'] : ''); $end_time = (isset($event->data->time) ? $event->data->time['end'] : ''); $multiple_date = ($event_start_date != $event_end_date) ? 'mec-multiple-event' : ''; - - // Label Caption - $label_style = $this->get_label_caption($event); - $label_color = $this->get_label_caption_color($event); ?> -
+
style == 'type1'): ?>