diff --git a/README.md b/README.md index 38445a31..824b757a 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ **Tags:** Event, Events, Calendar, Booking, Schedule, Organizer, Venue \ **Requires at least:** 4.0.0 \ **Tested up to:** 5.6 \ -**Stable tag:** 5.15.0 \ +**Stable tag:** 5.15.5 \ **Requires PHP:** 5.6 \ **License:** GPLv2 or later \ **License URI:** https://www.gnu.org/licenses/gpl-2.0.html @@ -235,6 +235,7 @@ You can see [plugin documentation](https://webnus.net/dox/modern-events-calendar ## Key Features +- Calendar method to show available occurrences to book (*pro*) - Shortcode to display users events - Resend booking verification and confirmation email (*pro*) - Countdown method per event @@ -586,6 +587,31 @@ You can see [plugin documentation](https://webnus.net/dox/modern-events-calendar ## Changelog +### v 5.15.5 – 30 December 2020 + +- Added: An advanced calendar method to show available occurrences to book (pro) +- Added: the feature to create segmetns in MailChimp integration (pro) +- Added: Ability to edit booking fields in “Booking Edit” page in WordPress backend (pro) +- Added: “Fallback Image“ feature to set an image for categories and display it as the event featured image if no image was set for the events +- Added: Link attribute “rel + +### noopener” for events display method to be able to set them to open in a new window + +- Improved: MailChimp integration by adding some relevant tags to the subscribers (pro) +- Improved: The booking CSV import (pro) +- Improved: The booking reminder email (pro) +- Improved: Backend speed and optimization +- Improved: MEC capabilities (pro) +- Fixed: An issue in the “Next/Previous Events” Module +- Fixed: A date display issue on carousel skins +- Fixed: Importing modified series of Google events in addition to their main event +- Fixed: Carousel and slider issue in Divi page builder environment +- Fixed: MEC Shortcodes assets in Elementor page builder environment +- Fixed: Some issues on WP Multisite +- Fixed: Label of booking button (pro) +- Fixed: Arabic character in the event link +- Fixed: Some PHP notices + ### v 5.15.0 – 16 December 2020 - Added: A shortcode to display current users' events in a preferred skin e.g. monthly, list, grid, etc. diff --git a/app/addons/beaver.php b/app/addons/beaver.php index eaa920c0..bd164f09 100644 --- a/app/addons/beaver.php +++ b/app/addons/beaver.php @@ -38,7 +38,7 @@ public function __construct() public function init() { // Beaver Builder is not installed - if( !class_exists( 'FLBuilder' ) ) return false; + if(!class_exists( 'FLBuilder' ) ) return false; define( 'MEC_BEAVER_DIR', plugin_dir_path( __FILE__ ) ); define( 'MEC_BEAVER_URL', plugins_url( '/', __FILE__ ) ); add_action( 'init', array($this,'mec_beaver_builder_shortcode') ); diff --git a/app/addons/divi/includes/MECShortcodesForDivi.php b/app/addons/divi/includes/MECShortcodesForDivi.php index 1e2dc470..c01aaa38 100644 --- a/app/addons/divi/includes/MECShortcodesForDivi.php +++ b/app/addons/divi/includes/MECShortcodesForDivi.php @@ -1,5 +1,5 @@ location = parent::getValue($props, "location"); $event->meta_data_tags = parent::getValue($props, "meta_data_tags"); $event->name = parent::getValue($props, "name"); - if( parent::getValue( $props, "notification_options" ) ) { + if(parent::getValue( $props, "notification_options" ) ) { $event->notification_options = NotificationOption::create( parent::getValue( $props, "notification_options" ) ); } $event->online_meeting = parent::getValue($props, "online_meeting"); $event->payable_to = parent::getValue($props, "payable_to"); $event->payable_to = parent::getValue($props, "payable_to"); - if( parent::getValue( $props, "payment_address" ) ) { + if(parent::getValue( $props, "payment_address" ) ) { $event->payment_address = Address::create( parent::getValue( $props, "payment_address" ) ); } $event->payment_options = parent::getValue($props, "payment_options"); @@ -349,7 +349,7 @@ public static function create(array $props) $event->time_zone_id = parent::getValue($props, "time_zone_id"); $event->title = parent::getValue($props, "title"); $event->total_registered_count = parent::getValue($props, "total_registered_count"); - if( parent::getValue( $props, "track_information" ) ) { + if(parent::getValue( $props, "track_information" ) ) { $event->track_information = TrackInformation::create( parent::getValue( $props, "track_information" ) ); } $event->twitter_hash_tag = parent::getValue($props, "twitter_hash_tag"); diff --git a/app/api/Ctct/Components/EventSpot/PaymentSummary.php b/app/api/Ctct/Components/EventSpot/PaymentSummary.php index e8889b6a..074c4851 100644 --- a/app/api/Ctct/Components/EventSpot/PaymentSummary.php +++ b/app/api/Ctct/Components/EventSpot/PaymentSummary.php @@ -55,7 +55,7 @@ public static function create(array $props) $payment_summary->payment_status = parent::getValue($props, "payment_status"); $payment_summary->payment_type = parent::getValue($props, "payment_type"); - if( isset($props["order"])) { + if(isset($props["order"])) { $payment_summary->order = RegistrantOrder::create( parent::getValue( $props, "order" ) ); } diff --git a/app/api/Ctct/Components/EventSpot/Registrant/Registrant.php b/app/api/Ctct/Components/EventSpot/Registrant/Registrant.php index 5e8fad7b..182a13db 100644 --- a/app/api/Ctct/Components/EventSpot/Registrant/Registrant.php +++ b/app/api/Ctct/Components/EventSpot/Registrant/Registrant.php @@ -172,7 +172,7 @@ public function getFieldValue( $fieldName ) { /** @var RegistrantSectionField $field */ foreach ( $section->fields as $field ) { - if( $fieldName === $field->name ) { + if($fieldName === $field->name ) { return is_null( $field->values ) ? $field->value : $field->values; } } diff --git a/app/api/Ctct/Components/EventSpot/Registrant/RegistrantOrder.php b/app/api/Ctct/Components/EventSpot/Registrant/RegistrantOrder.php index 9c42e88e..abe4c1b4 100644 --- a/app/api/Ctct/Components/EventSpot/Registrant/RegistrantOrder.php +++ b/app/api/Ctct/Components/EventSpot/Registrant/RegistrantOrder.php @@ -56,7 +56,7 @@ public static function create(array $props) $registrant_order->currency_type = parent::getValue($props, "currency_type"); $registrant_order->total = parent::getValue($props, "total"); - if( isset($props['fees']) ) { + if(isset($props['fees']) ) { foreach ( $props['fees'] as $fee ) { $registrant_order->fees[] = RegistrantFee::create($fee); } diff --git a/app/api/Ctct/Services/EventSpotService.php b/app/api/Ctct/Services/EventSpotService.php index 3f023598..9deb4dfd 100644 --- a/app/api/Ctct/Services/EventSpotService.php +++ b/app/api/Ctct/Services/EventSpotService.php @@ -46,7 +46,7 @@ public function getEvents($accessToken, Array $params = array()) $body = json_decode($response->getBody(), true); $events = array(); - if( ! empty( $body['results'] ) ) { + if(! empty( $body['results'] ) ) { foreach ( $body['results'] as $event ) { $events[] = EventSpot::create( $event ); } diff --git a/app/features/booking/calendar_novel.php b/app/features/booking/calendar_novel.php new file mode 100644 index 00000000..f7fc59be --- /dev/null +++ b/app/features/booking/calendar_novel.php @@ -0,0 +1,180 @@ +dates) ? $event->dates : array($event->date); + +// Multiple Day Event +$multiple_date = (isset($dates) && $dates[0]['start']['date'] != $dates[0]['end']['date']) ? 'mec-multiple-event' : ''; + +$first_date = (isset($start) ? $start : (isset($dates[0]) ? $dates[0]['start']['date'] : NULL)); +if(!$first_date) return; + +// Settings +$settings = $this->main->get_settings(); + +// Options +$event_color = isset($event->data->meta['mec_color']) ? '#'.$event->data->meta['mec_color'] : ''; +$date_format = (isset($settings['booking_date_format1']) and trim($settings['booking_date_format1'])) ? $settings['booking_date_format1'] : 'Y-m-d'; +$date_format = trim(str_replace(['H', 'h', 'i', 's', 'A', 'a', 'G', 'g', 'B', 'u', 'v', ':'], '', $date_format), ': '); +$time_format = get_option('time_format'); + +// before/after Month +$_1month_before = strtotime('first day of -1 month', strtotime($first_date)); +$_1month_after = strtotime('first day of +1 month', strtotime($first_date)); +$current_month_time = strtotime($first_date); + +$year = date('Y', strtotime($first_date)); +$month = date('m', strtotime($first_date)); +$active_day = date('d', strtotime($first_date)); + +// Start day of week +$week_start = $this->main->get_first_day_of_week(); + +// days and weeks vars +$running_day = date('w', mktime(0, 0, 0, $month, 1, $year)); +$days_in_month = date('t', mktime(0, 0, 0, $month, 1, $year)); +$days_in_previous_month = date('t', strtotime('-1 month', strtotime($active_day))); + +$days_in_this_week = 1; +$day_counter = 0; + +if($week_start == 0) $running_day = $running_day; // Sunday +elseif($week_start == 1) // Monday +{ + if($running_day != 0) $running_day = $running_day - 1; + else $running_day = 6; +} +elseif($week_start == 6) // Saturday +{ + if($running_day != 6) $running_day = $running_day + 1; + else $running_day = 0; +} +elseif($week_start == 5) // Friday +{ + if($running_day < 4) $running_day = $running_day + 2; + elseif($running_day == 5) $running_day = 0; + elseif($running_day == 6) $running_day = 1; +} + +$navigator_html = ''; + +// Show previous navigation +if(strtotime(date('Y-m-t', $_1month_before)) >= time()) +{ + $navigator_html .= '
'.$this->main->date_i18n('F', $_1month_before).'
'; +} + +$navigator_html .= '

'.$this->main->date_i18n('F Y', $current_month_time).'

'; + +// Show next navigation +if(strtotime(date('Y-m-01', $_1month_after)) >= time()) +{ + $navigator_html .= '
'.$this->main->date_i18n('F', $_1month_after).'
'; +} + +// Generating javascript code tpl +$javascript = ''; + +// Include javascript code into the page +echo $javascript; +?> +
+
+
+ main->get_weekday_abbr_labels(); + echo '
'.implode('
', $headings).'
'; + ?> +
+ '.($days_in_previous_month - ($running_day-1-$x)).''; + $days_in_this_week++; + } + + // keep going with days .... + for($list_day = 1; $list_day <= $days_in_month; $list_day++) + { + $time = strtotime($year.'-'.$month.'-'.$list_day); + $today = date('Y-m-d', $time); + $day_id = date('Ymd', $time); + + $render = ''; + $first_day = ''; + $middle_day = ''; + $last_day = ''; + $repeat = 0; + + foreach($dates as $date) + { + if(!isset($date['fake']) and strtotime($date['start']['date']) <= $time and $time <= strtotime($date['end']['date']) and (isset($date['start']['timestamp']) and $date['start']['timestamp'] >= current_time('timestamp', 0))) + { + $repeat++; + $date_timestamp = $this->book->timestamp($date['start'], $date['end']); + $start_datetime = $date['start']['date'].' '.sprintf("%02d", $date['start']['hour']).':'.sprintf("%02d", $date['start']['minutes']).' '.$date['start']['ampm']; + + $render .='
' .(($date['start']['date'] !== $date['end']['date']) ? '
'.strip_tags($this->main->date_label($date['start'], $date['end'], $date_format, ' - ', false, (isset($date['allday']) ? $date['allday'] : 0))).'
' : '').strip_tags($this->main->date_label($date['start'], $date['end'], $time_format, ' - ', false, (isset($date['allday']) ? $date['allday'] : 0))).'
'; + + $first_day = strtotime($date['start']['date']) == $time ? ' first-day' : null; + $middle_day = (strtotime($date['end']['date']) != $time && strtotime($date['start']['date']) != $time) ? ' middle-day' : null; + $last_day = strtotime($date['end']['date']) == $time ? ' last-day' : null; + } + } + + $repeat_class = $repeat > 1 ? ' mec-has-time-repeat' : ''; + $date_for_wrap = $repeat == 1 ? 'data-timestamp="'.$date_timestamp.'"' : ''; + $custom_class1 = $repeat == 1 ? ' mec-has-one-repeat-in-day' : ''; + $custom_class2 = $repeat >= 1 ? ' mec-has-event-for-booking' : ''; + + echo '
'.$list_day.'
'; + echo '
'.$render.'
'; + echo '
'; + + if($running_day == 6) + { + echo '
'; + + if((($day_counter+1) != $days_in_month) or (($day_counter+1) == $days_in_month and $days_in_this_week == 7)) + { + echo '
'; + } + + $running_day = -1; + $days_in_this_week = 0; + } + + $days_in_this_week++; $running_day++; $day_counter++; + } + + // finish the rest of the days in the week + if($days_in_this_week < 8) + { + for($x = 1; $x <= (8 - $days_in_this_week); $x++) + { + echo '
'.$x.'
'; + } + } + ?> +
+
+
+
\ No newline at end of file diff --git a/app/features/bookingcalendar.php b/app/features/bookingcalendar.php new file mode 100644 index 00000000..30611c23 --- /dev/null +++ b/app/features/bookingcalendar.php @@ -0,0 +1,144 @@ + + */ +class MEC_feature_bookingcalendar extends MEC_base +{ + /** + * @var MEC_factory + */ + public $factory; + + /** + * @var MEC_main + */ + public $main; + + /** + * @var MEC_book + */ + public $book; + + /** + * Constructor method + * @author Webnus + */ + public function __construct() + { + // MEC Factory + $this->factory = $this->getFactory(); + + // MEC Main + $this->main = $this->getMain(); + + // MEC Book + $this->book = $this->getBook(); + } + + /** + * Initialize User Events Feature + * @author Webnus + */ + public function init() + { + $this->factory->action('wp_ajax_mec_booking_calendar_load_month', array($this, 'load_month')); + $this->factory->action('wp_ajax_nopriv_mec_booking_calendar_load_month', array($this, 'load_month')); + } + + public function display_calendar($event, $uniqueid, $start = NULL) + { + $path = MEC::import('app.features.booking.calendar_novel', true, true); + + // Generate Month + ob_start(); + include $path; + return ob_get_clean(); + } + + /** + * Load month for AJAX requert + * @author Webnus + * @return void + */ + public function load_month() + { + // Request + $request = $this->getRequest(); + + // Render + $render = $this->getRender(); + + // Settings + $settings = $this->main->get_settings(); + + $event_id = $request->getVar('event_id'); + $uniqueid = $request->getVar('uniqueid'); + $year = $request->getVar('year'); + $month = $request->getVar('month'); + + // Start Date + $start = $year.'-'.$month.'-01'; + if(strtotime($start) < current_time('timestamp')) $start = current_time('Y-m-d'); + + // End Date + $end = date('Y-m-t', strtotime($start)); + + $rendered = $render->data($event_id, ''); + + $data = new stdClass(); + $data->ID = $event_id; + $data->data = $rendered; + + // Get Event Dates + $records = $this->getDB()->select("SELECT * FROM `#__mec_dates` WHERE `post_id`='".$event_id."' AND ((`dstart` <= '".$start."' AND `dend` >= '".$end."') OR (`dstart` <= '".$start."' AND `dend` >= '".$start."' AND `dend` <= '".$end."') OR (`dstart` >= '".$start."' AND `dend` <= '".$end."') OR (`dstart` >= '".$start."' AND `dstart` <= '".$end."' AND `dend` >= '".$end."'))", 'loadAssocList'); + + $dates = array(); + foreach($records as $record) + { + $dates[] = array( + 'start' => array( + 'date' => $record['dstart'], + 'hour' => date('g', $record['tstart']), + 'minutes' => date('i', $record['tstart']), + 'ampm' => date('A', $record['tstart']), + 'timestamp' => $record['tstart'], + ), + 'end' => array( + 'date' => $record['dend'], + 'hour' => date('g', $record['tend']), + 'minutes' => date('i', $record['tend']), + 'ampm' => date('A', $record['tend']), + 'timestamp' => $record['tend'], + ), + 'allday' => ((isset($data->data->meta) and isset($data->data->meta->mec_allday)) ? $data->data->meta->mec_allday : 0), + 'hide_time' => ((isset($data->data->meta) and isset($data->data->meta->mec_hide_time)) ? $data->data->meta->mec_hide_time : 0), + 'past' => $this->main->is_past($record['dstart'], $start), + ); + } + + if(!count($dates)) + { + $dates = array( + array( + 'fake' => true, + 'start' => array( + 'date' => $start + ), + 'end' => array( + 'date' => $start + ), + ) + ); + } + + $data->dates = $dates; + $data->date = isset($data->dates[0]) ? $data->dates[0] : array(); + + echo json_encode(array('html' => $this->display_calendar($data, $uniqueid, $start))); + exit; + } +} \ No newline at end of file diff --git a/app/features/events.php b/app/features/events.php index 52fccedd..916431bd 100644 --- a/app/features/events.php +++ b/app/features/events.php @@ -46,8 +46,8 @@ public function __construct() public function init() { $this->factory->action('init', array($this, 'register_post_type')); - $this->factory->action('mec_category_add_form_fields', array($this, 'add_category_custom_icon'), 10, 2); - $this->factory->action('mec_category_edit_form_fields', array($this, 'edit_category_custom_icon'), 10, 2); + $this->factory->action('mec_category_add_form_fields', array($this, 'add_category_fields'), 10, 2); + $this->factory->action('mec_category_edit_form_fields', array($this, 'edit_category_fields'), 10, 2); $this->factory->action('edited_mec_category', array($this, 'save_metadata')); $this->factory->action('created_mec_category', array($this, 'save_metadata')); @@ -91,45 +91,48 @@ public function init() $this->factory->action('mec_fes_metabox_details', array($this, 'meta_box_exceptional_days'), 25); } - // Show Booking meta box only if booking module is enabled - $booking_status = (isset($this->settings['booking_status']) and $this->settings['booking_status']) ? true : false; - if($booking_status) + if(!isset($this->settings['fes_section_booking']) or (isset($this->settings['fes_section_booking']) and $this->settings['fes_section_booking'])) { - $this->factory->action('mec_metabox_booking', array($this, 'meta_box_booking_options'), 5); - $this->factory->action('mec_metabox_booking', array($this, 'meta_box_tickets'), 10); - $this->factory->action('mec_metabox_booking', array($this, 'meta_box_regform'), 20); - - // Booking Options for FES - if(!isset($this->settings['fes_section_booking']) or (isset($this->settings['fes_section_booking']) and $this->settings['fes_section_booking'])) $this->factory->action('mec_fes_metabox_details', array($this, 'meta_box_booking_options'), 35); + // Show Booking meta box only if booking module is enabled + $booking_status = (isset($this->settings['booking_status']) and $this->settings['booking_status']) ? true : false; + if($booking_status) + { + $this->factory->action('mec_metabox_booking', array($this, 'meta_box_booking_options'), 5); + $this->factory->action('mec_metabox_booking', array($this, 'meta_box_tickets'), 10); + $this->factory->action('mec_metabox_booking', array($this, 'meta_box_regform'), 20); - // Ticket Options for FES - if(!isset($this->settings['fes_section_tickets']) or (isset($this->settings['fes_section_tickets']) and $this->settings['fes_section_tickets'])) $this->factory->action('mec_fes_metabox_details', array($this, 'meta_box_tickets'), 40); + // Booking Options for FES + if(!isset($this->settings['fes_section_booking']) or (isset($this->settings['fes_section_booking']) and $this->settings['fes_section_booking'])) $this->factory->action('mec_fes_metabox_details', array($this, 'meta_box_booking_options'), 35); - // Registration Form for FES - if(!isset($this->settings['fes_section_reg_form']) or (isset($this->settings['fes_section_reg_form']) and $this->settings['fes_section_reg_form'])) $this->factory->action('mec_fes_metabox_details', array($this, 'meta_box_regform'), 45); - } + // Ticket Options for FES + if(!isset($this->settings['fes_section_tickets']) or (isset($this->settings['fes_section_tickets']) and $this->settings['fes_section_tickets'])) $this->factory->action('mec_fes_metabox_details', array($this, 'meta_box_tickets'), 40); - // Show fees meta box only if fees module is enabled - if(isset($this->settings['taxes_fees_status']) and $this->settings['taxes_fees_status']) - { - $this->factory->action('mec_metabox_booking', array($this, 'meta_box_fees'), 15); + // Registration Form for FES + if(!isset($this->settings['fes_section_reg_form']) or (isset($this->settings['fes_section_reg_form']) and $this->settings['fes_section_reg_form'])) $this->factory->action('mec_fes_metabox_details', array($this, 'meta_box_regform'), 45); + } - // Fees for FES - if($booking_status and (!isset($this->settings['fes_section_fees']) or (isset($this->settings['fes_section_fees']) and $this->settings['fes_section_fees']))) + // Show fees meta box only if fees module is enabled + if(isset($this->settings['taxes_fees_status']) and $this->settings['taxes_fees_status']) { - $this->factory->action('mec_fes_metabox_details', array($this, 'meta_box_fees'), 45); - } - } + $this->factory->action('mec_metabox_booking', array($this, 'meta_box_fees'), 15); - // Show ticket variations meta box only if the module is enabled - if($booking_status and isset($this->settings['ticket_variations_status']) and $this->settings['ticket_variations_status']) - { - $this->factory->action('mec_metabox_booking', array($this, 'meta_box_ticket_variations'), 16); + // Fees for FES + if($booking_status and (!isset($this->settings['fes_section_fees']) or (isset($this->settings['fes_section_fees']) and $this->settings['fes_section_fees']))) + { + $this->factory->action('mec_fes_metabox_details', array($this, 'meta_box_fees'), 45); + } + } - // Ticket Variations for FES - if($booking_status and (!isset($this->settings['fes_section_ticket_variations']) or (isset($this->settings['fes_section_ticket_variations']) and $this->settings['fes_section_ticket_variations']))) + // Show ticket variations meta box only if the module is enabled + if($booking_status and isset($this->settings['ticket_variations_status']) and $this->settings['ticket_variations_status']) { - $this->factory->action('mec_fes_metabox_details', array($this, 'meta_box_ticket_variations'), 46); + $this->factory->action('mec_metabox_booking', array($this, 'meta_box_ticket_variations'), 16); + + // Ticket Variations for FES + if($booking_status and (!isset($this->settings['fes_section_ticket_variations']) or (isset($this->settings['fes_section_ticket_variations']) and $this->settings['fes_section_ticket_variations']))) + { + $this->factory->action('mec_fes_metabox_details', array($this, 'meta_box_ticket_variations'), 46); + } } } @@ -149,6 +152,13 @@ public function init() // WPML Duplicate $this->factory->action('icl_make_duplicate', array($this, 'icl_duplicate'), 10, 4); + + // Image Fallback + if(isset($this->settings['fallback_featured_image_status']) and $this->settings['fallback_featured_image_status']) + { + $this->factory->filter('get_post_metadata', array($this, 'set_fallback_image_id'), 10, 4); + $this->factory->filter('post_thumbnail_html', array($this, 'show_fallback_image'), 20, 5); + } } /** @@ -228,9 +238,12 @@ public function register_post_type() * * @author Webnus */ - public function add_category_custom_icon() + public function add_category_fields() { add_thickbox(); + + // Fallback Status + $fallback = (isset($this->settings['fallback_featured_image_status']) and $this->settings['fallback_featured_image_status']); ?>
@@ -238,7 +251,15 @@ public function add_category_custom_icon()
- + +
+ +
+ + + +
+ */ - public function edit_category_custom_icon($term) + public function edit_category_fields($term) { add_thickbox(); + + // Fallback Status + $fallback = (isset($this->settings['fallback_featured_image_status']) and $this->settings['fallback_featured_image_status']); + + // Fallback Image + $fallback_image = get_metadata('term', $term->term_id, 'mec_cat_fallback_image', true); + + // Icon $icon = get_metadata('term', $term->term_id, 'mec_cat_icon', true); ?> @@ -265,6 +294,19 @@ class="thickbox mec_category_icon button"> + + + + + + +
'; ?>
+ + + + + + '.$link_name.''; + if(count($event_fields) and isset($this->settings['display_event_fields_backend']) and $this->settings['display_event_fields_backend'] == 1) echo ''.$link_name.''; } elseif($link_address == 'mec-notifications') { @@ -393,7 +437,10 @@ public function meta_box_details($post) jQuery(this).addClass("mec-tab-active"); jQuery("#" + href ).addClass("mec-tab-active"); }); + + settings['display_event_fields_backend']) and $this->settings['display_event_fields_backend'] == 1): ?> + settings['display_event_fields_backend']) or (isset($this->settings['display_event_fields_backend']) and $this->settings['display_event_fields_backend'] != 1)) return; + $event_fields = $this->main->get_event_fields(); $data = get_post_meta($post->ID, 'mec_fields', true); ?> @@ -4146,4 +4196,84 @@ public function icl_duplicate($master_post_id, $lang, $post, $id) $schedule = $this->getSchedule(); $schedule->reschedule($id); } + + public function set_fallback_image_id($value, $post_id, $meta_key, $single) + { + // Only on frontend + if((is_admin() && (!defined('DOING_AJAX') || !DOING_AJAX))) return $value; + + // Only for empty _thumbnail_id keys + if(!empty($meta_key) && '_thumbnail_id' !== $meta_key) return $value; + + // Only For Events + if(get_post_type($post_id) != $this->PT) return $value; + + // Get current Cache + $meta_cache = wp_cache_get($post_id, 'post_meta'); + if(!$meta_cache) + { + $meta_cache = update_meta_cache('post', array($post_id)); + + if(isset($meta_cache[$post_id])) $meta_cache = $meta_cache[$post_id]; + else $meta_cache = array(); + } + + // Is the _thumbnail_id present in cache? + if(!empty($meta_cache['_thumbnail_id'][0])) return $value; + + $fallback_image_id = $this->get_fallback_image_id($post_id); + if(!$fallback_image_id) return $value; + + // Set the Fallback Image in cache + $meta_cache['_thumbnail_id'][0] = $fallback_image_id; + wp_cache_set($post_id, $meta_cache, 'post_meta'); + + return $value; + } + + public function show_fallback_image($html, $post_id, $post_thumbnail_id, $size, $attr) + { + // Only on frontend + if((is_admin() && (!defined('DOING_AJAX') || !DOING_AJAX))) return $html; + + // Only For Events + if(get_post_type($post_id) != $this->PT) return $html; + + $fallback_image_id = $this->get_fallback_image_id($post_id); + + // if an image is set return that image. + if((int) $fallback_image_id !== (int) $post_thumbnail_id) return $html; + + if(isset($attr['class'])) $attr['class'] .= ' mec-fallback-img'; + else + { + $size_class = $size; + if(is_array($size_class)) $size_class = 'size-'.implode('x', $size_class); + + $attr = array('class' => 'attachment-'.$size_class.' default-featured-img'); + } + + return wp_get_attachment_image($fallback_image_id, $size, false, $attr); + } + + public function get_fallback_image_id($event_id) + { + // Categories + $categories = get_the_terms($event_id, 'mec_category'); + if(!is_array($categories) or (is_array($categories) and !count($categories))) return NULL; + + // Fallback Image ID + $fallback_image_id = NULL; + foreach($categories as $category) + { + $fallback_image = get_term_meta($category->term_id, 'mec_cat_fallback_image', true); + if(trim($fallback_image)) + { + $fallback_image_id = attachment_url_to_postid($fallback_image); + if($fallback_image_id) break; + } + } + + return $fallback_image_id; + } } \ No newline at end of file diff --git a/app/features/ix.php b/app/features/ix.php index fe333ca1..49870afe 100644 --- a/app/features/ix.php +++ b/app/features/ix.php @@ -258,20 +258,20 @@ public function import_start_bookings() $start_datetime = $data[2]; $end_datetime = $data[3]; - $name = $data[8]; - $email = $data[9]; + $name = $data[9]; + $email = $data[10]; - $confirmed_label = $data[11]; + $confirmed_label = $data[12]; if($confirmed_label == __('Confirmed', 'modern-events-calendar-lite')) $confirmed = 1; elseif($confirmed_label == __('Rejected', 'modern-events-calendar-lite')) $confirmed = -1; else $confirmed = 0; - $verified_label = $data[12]; + $verified_label = $data[13]; if($verified_label == __('Verified', 'modern-events-calendar-lite')) $verified = 1; elseif($verified_label == __('Canceled', 'modern-events-calendar-lite')) $verified = -1; else $verified = 0; - $ticket_variations = explode(',', $data[10]); + $ticket_variations = explode(',', $data[11]); $variations = $this->main->ticket_variations($event_id); $v = array(); @@ -3209,6 +3209,9 @@ public function g_calendar_import_start() { $title = $event->getSummary(); if(trim($title) == '') continue; + + // Import Only Main Events + if($event->getRecurringEventId()) continue; $data['events'][] = array('id'=>$event->id, 'title'=>$title, 'start'=>$event->getStart(), 'end'=>$event->getEnd()); } diff --git a/app/features/mec.php b/app/features/mec.php index 6ad6abf3..79a5c83f 100644 --- a/app/features/mec.php +++ b/app/features/mec.php @@ -163,10 +163,13 @@ public function init() $this->factory->action('mec_syncScheduler', array($syncSchedule, 'sync')); // Dashborad Metaboxes - add_action('wp_dashboard_setup', array($this, 'dashboard_widgets')); + $this->factory->action('wp_dashboard_setup', array($this, 'dashboard_widgets')); // Dashborad Metabox Total Bookingajax - add_action('wp_ajax_total-booking-get-reports',array($this, 'dashboard_widget_total_booking_ajax_handler')); + $this->factory->action('wp_ajax_total-booking-get-reports',array($this, 'dashboard_widget_total_booking_ajax_handler')); + + // Custom Capability Map + $this->factory->filter('map_meta_cap', array($this, 'map_meta_cap'), 10, 4); } /* Activate License */ @@ -467,7 +470,7 @@ public function menus() add_submenu_page('mec-intro', $this->main->m('taxonomy_speakers', __('Speakers', 'modern-events-calendar-lite')), $this->main->m('taxonomy_speakers', __('Speakers', 'modern-events-calendar-lite')), 'edit_others_posts', 'edit-tags.php?taxonomy=mec_speaker&post_type='.$this->PT); } - add_submenu_page('mec-intro', __('Shortcodes', 'modern-events-calendar-lite'), __('Shortcodes', 'modern-events-calendar-lite'), 'mec_shortcodes', 'edit.php?post_type=mec_calendars'); + add_submenu_page('mec-intro', __('Shortcodes', 'modern-events-calendar-lite'), __('Shortcodes', 'modern-events-calendar-lite'), 'manage_options', 'edit.php?post_type=mec_calendars'); add_submenu_page('mec-intro', __('MEC - Settings', 'modern-events-calendar-lite'), __('Settings', 'modern-events-calendar-lite'), 'mec_settings', 'MEC-settings', array($this, 'page')); add_submenu_page('mec-intro', __('MEC - Addons', 'modern-events-calendar-lite'), __('Addons', 'modern-events-calendar-lite'), 'manage_options', 'MEC-addons', array($this, 'addons')); @@ -511,23 +514,6 @@ public function register_post_type() 'publicly_queryable'=>$elementor, 'show_in_menu'=>'mec-intro', 'supports'=>array('title'), - 'capabilities'=>array - ( - 'read_post'=>'mec_shortcodes', - 'edit_post'=>'mec_shortcodes', - 'delete_post'=>'mec_shortcodes', - 'edit_others_posts'=>'mec_shortcodes', - 'publish_posts'=>'mec_shortcodes', - 'read_private_posts'=>'mec_shortcodes', - 'read'=>'mec_shortcodes', - 'delete_posts'=>'mec_shortcodes', - 'delete_private_posts'=>'mec_shortcodes', - 'delete_published_posts'=>'mec_shortcodes', - 'delete_others_posts'=>'mec_shortcodes', - 'edit_private_posts'=>'mec_shortcodes', - 'edit_published_posts'=>'mec_shortcodes', - 'create_posts'=>'mec_shortcodes' - ), ) ); @@ -1461,4 +1447,10 @@ public function widget_print() " placeholder="" min="1" /> +
+ +
+ +
+
diff --git a/app/features/mec/dashboard.php b/app/features/mec/dashboard.php index a99af0a1..4c7cf7de 100644 --- a/app/features/mec/dashboard.php +++ b/app/features/mec/dashboard.php @@ -143,7 +143,7 @@
- getPRO() && has_action('addons_activation') ) : ?> + getPRO() && has_action('addons_activation') ) : ?>
diff --git a/app/features/mec/dyncss.php b/app/features/mec/dyncss.php index 08b54856..dbfac5c5 100644 --- a/app/features/mec/dyncss.php +++ b/app/features/mec/dyncss.php @@ -90,7 +90,7 @@ function mec_dyn_hex2rgb( $cc ) { if(isset($styling['container_normal_width']) && $styling['container_normal_width']) { $mec_container_normal_width = trim( $styling['container_normal_width'] ); - if( $mec_container_normal_width ) { + if($mec_container_normal_width ) { if (is_numeric($mec_container_normal_width)) { $mec_container_normal_width .= 'px'; } @@ -100,7 +100,7 @@ function mec_dyn_hex2rgb( $cc ) { if(isset($styling['container_large_width']) && $styling['container_large_width']) { $mec_container_large_width = trim( $styling['container_large_width'] ); - if( $mec_container_large_width ) { + if($mec_container_large_width ) { if (is_numeric($mec_container_large_width)) { $mec_container_large_width .= 'px'; } @@ -143,19 +143,19 @@ 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-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 {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-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 {background-color: ;} /* == BorderColors ------------------ */ - .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-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 {border-bottom-color:;} @@ -169,7 +169,7 @@ function mec_dyn_hex2rgb( $cc ) { /* == Timeline View ------------------ */ - .mec-events-timeline-wrap .mec-shortcode-organizers, .mec-timeline-event .mec-modal-booking-button, .mec-events-timeline-wrap:before, .mec-wrap.colorskin-custom .mec-timeline-event-local-time, .mec-wrap.colorskin-custom .mec-timeline-event-time ,.mec-wrap.colorskin-custom .mec-timeline-event-location { background: rgba(,,,.11);} + .mec-events-timeline-wrap .mec-shortcode-organizers, .mec-timeline-event .mec-modal-booking-button, .mec-events-timeline-wrap:before, .mec-wrap.colorskin-custom .mec-timeline-event-local-time, .mec-wrap.colorskin-custom .mec-timeline-event-time ,.mec-wrap.colorskin-custom .mec-timeline-event-location,.mec-choosen-time-message { background: rgba(,,,.11);} .mec-wrap.colorskin-custom .mec-timeline-events-container .mec-timeline-event-date:after { background: rgba(,,,.3);}
- $name): ?>