function __construct() { add_filter('eventon_extra_tax', array($this, 'extra_tax'), 10, 1); add_action('init', array($this, 'register_frontend_scripts'), 15); //when a new post is published add_action('transition_post_status', array($this, 'send_approval_email'), 10, 3); $this->options = get_option('evcal_options_evcal_1'); $this->tax_count = evo_get_ett_count($this->options); $this->tax_names = evo_get_ettNames($this->options); $this->evoau_opt = get_option('evcal_options_evoau_1'); $this->evoau_opt_2 = get_option('evcal_options_evoau_2'); }
function event_type_options() { $event_type_names = evo_get_ettNames($this->evcal_opt[1]); // event types category names $ett_verify = evo_get_ett_count($this->evcal_opt[1]); $event_type_options['event_location'] = 'Event Location'; $event_type_options['event_organizer'] = 'Event Organizer'; for ($x = 1; $x < $ett_verify + 1; $x++) { $ab = $x == 1 ? '' : '_' . $x; $event_type_options['event_type' . $ab] = $event_type_names[$x]; } return $event_type_options; }
function evoAU_language_additions($_existen) { $evcal_opt = get_option('evcal_options_evcal_1'); $new_ar = array(array('type' => 'togheader', 'name' => 'ADDON: Action User'), array('label' => 'Event Name', 'name' => 'evoAUL_evn', 'legend' => ''), array('label' => 'Event Sub Title', 'name' => 'evoAUL_est', 'legend' => ''), array('label' => 'Event Start Date/Time', 'name' => 'evoAUL_esdt', 'legend' => ''), array('label' => 'Event End Date/Time', 'name' => 'evoAUL_eedt', 'legend' => ''), array('label' => 'Event Details', 'name' => 'evcal_evcard_details_au', 'legend' => ''), array('label' => 'Event Color', 'name' => 'evoAUL_ec', 'legend' => ''), array('label' => 'Event Location Name', 'name' => 'evoAUL_lca'), array('label' => 'Event Location Address', 'name' => 'evoAUL_ln'), array('label' => 'Event Location Coordinates (lat,lon Seperated by comma)', 'name' => 'evoAUL_lcor'), array('label' => 'Event Organizer', 'name' => 'evoAUL_eo', 'legend' => ''), array('label' => 'Event Organizer Contact Information', 'name' => 'evoAUL_eoc', 'legend' => ''), array('label' => 'Learn More Link', 'name' => 'evoAUL_lml', 'legend' => '')); // event taxnomies upto 5 all active ones only $ett_verify = evo_get_ett_count($evcal_opt); $_tax_names_array = evo_get_ettNames($evcal_opt); $new_ar_1 = ''; for ($x = 1; $x < $ett_verify + 1; $x++) { $ab = $x == 1 ? '' : '_' . $x; $__tax_name = $_tax_names_array[$x]; $new_ar_1[] = array('label' => 'Select the ' . $__tax_name . '', 'name' => 'evoAUL_stet' . $x, 'legend' => ''); } $new_ar_2 = array(array('label' => 'Edit Submitted Event', 'name' => 'evoAUL_ese', 'legend' => ''), array('label' => 'Event Image', 'name' => 'evoAUL_ei', 'legend' => ''), array('label' => 'All Day Event', 'name' => 'evoAUL_001', 'legend' => ''), array('label' => 'No End time', 'name' => 'evoAUL_002', 'legend' => ''), array('label' => 'Your Full Name', 'name' => 'evoAUL_fn', 'legend' => ''), array('label' => 'Your Email Address', 'name' => 'evoAUL_ea', 'legend' => ''), array('label' => 'Form Human Submission Validation', 'name' => 'evoAUL_cap', 'legend' => ''), array('label' => 'Select an Image', 'name' => 'evoAUL_img002', 'legend' => ''), array('label' => 'Image Chosen', 'name' => 'evoAUL_img001', 'legend' => ''), array('label' => 'Additional Field', 'name' => 'evoAU_add', 'legend' => ''), array('label' => '(Text)', 'var' => '1'), array('label' => '(Link)', 'var' => '1'), array('label' => 'Submit Event', 'name' => 'evoAUL_se', 'legend' => ''), array('label' => 'Submit another event', 'var' => '1'), array('label' => 'Form field placeholders', 'type' => 'subheader'), array('label' => 'Start Date', 'name' => 'evoAUL_phsd', 'legend' => ''), array('label' => 'Start Time', 'name' => 'evoAUL_phst', 'legend' => ''), array('label' => 'End Date', 'name' => 'evoAUL_phed', 'legend' => ''), array('label' => 'End Time', 'name' => 'evoAUL_phet', 'legend' => ''), array('type' => 'togend'), array('label' => 'User Interaction values', 'type' => 'subheader'), array('label' => 'Slide Down EventCard', 'name' => 'evoAUL_ux1', 'legend' => ''), array('label' => 'External Link', 'name' => 'evoAUL_ux2', 'legend' => ''), array('label' => 'Lightbox popup window', 'name' => 'evoAUL_ux3', 'legend' => ''), array('type' => 'togend'), array('label' => 'Form Notification Messages', 'type' => 'subheader'), array('label' => 'You must login to submit events.', 'name' => 'evoAUL_ymlse', 'legend' => ''), array('label' => 'Required Fields Missing', 'name' => 'evoAUL_nof1', 'legend' => ''), array('label' => 'Invalid validation code please try again', 'name' => 'evoAUL_nof2', 'legend' => ''), array('label' => 'Thank you for submitting your event!', 'name' => 'evoAUL_nof3', 'legend' => ''), array('label' => 'Could not create event post, try again later!', 'name' => 'evoAUL_nof4', 'legend' => ''), array('label' => 'Bad nonce form verification, try again!', 'name' => 'evoAUL_nof5', 'legend' => ''), array('label' => 'You can only submit one event!', 'name' => 'evoAUL_nof6', 'legend' => ''), array('type' => 'togend'), array('type' => 'togend')); $new_ar = array_merge($new_ar, $new_ar_1, $new_ar_2); return is_array($_existen) ? array_merge($_existen, $new_ar) : $_existen; }
public static function register_taxonomies() { // Taxonomies do_action('eventon_register_taxonomy'); $evOpt = self::$evOpt; $__capabilities = array('manage_terms' => 'manage_eventon_terms', 'edit_terms' => 'edit_eventon_terms', 'delete_terms' => 'delete_eventon_terms', 'assign_terms' => 'assign_eventon_terms'); register_taxonomy('event_location', apply_filters('eventon_taxonomy_objects_event_location', array('ajde_events')), apply_filters('eventon_taxonomy_args_event_location', array('hierarchical' => false, 'label' => __('Event Location', 'eventon'), 'show_ui' => true, 'query_var' => true, 'show_in_quick_edit' => false, 'meta_box_cb' => false, 'capabilities' => $__capabilities, 'rewrite' => apply_filters('evotax_slug_loc', array('slug' => 'event-location'))))); register_taxonomy('event_organizer', apply_filters('eventon_taxonomy_objects_event_organizer', array('ajde_events')), apply_filters('eventon_taxonomy_args_event_organizer', array('hierarchical' => false, 'label' => __('Event Organizer', 'eventon'), 'show_ui' => true, 'query_var' => true, 'show_in_quick_edit' => false, 'meta_box_cb' => false, 'capabilities' => $__capabilities, 'rewrite' => apply_filters('evotax_slug_org', array('slug' => 'event-organizer'))))); // Event type custom taxonomy NAMES $event_type_names = evo_get_ettNames($evOpt); // for each activated event type category for ($x = 1; $x < evo_get_ett_count($evOpt) + 1; $x++) { $ab = $x == 1 ? '' : '_' . $x; $ab2 = $x == 1 ? '' : '-' . $x; $evt_name = $event_type_names[$x]; register_taxonomy('event_type' . $ab, apply_filters('eventon_taxonomy_objects_event_type' . $ab, array('ajde_events')), apply_filters('eventon_taxonomy_args_event_type' . $ab, array('hierarchical' => true, 'labels' => array('name' => __("{$evt_name} Categories", 'eventon'), 'singular_name' => __("{$evt_name} Category", 'eventon'), 'menu_name' => _x($evt_name, 'Admin menu name', 'eventon'), 'search_items' => __("Search {$evt_name} Categories", 'eventon'), 'all_items' => __("All {$evt_name} Categories", 'eventon'), 'parent_item' => __("Parent {$evt_name} Category", 'eventon'), 'parent_item_colon' => __("Parent {$evt_name} Category:", 'eventon'), 'edit_item' => __("Edit {$evt_name} Category", 'eventon'), 'update_item' => __("Update {$evt_name} Category", 'eventon'), 'add_new_item' => __("Add New {$evt_name} Category", 'eventon'), 'new_item_name' => __("New {$evt_name} Category Name", 'eventon')), 'show_ui' => true, 'query_var' => true, 'capabilities' => $__capabilities, 'rewrite' => array('slug' => 'event-type' . $ab2)))); } }
function evo_get_localized_ettNames($lang = '', $options = '', $options2 = '') { $output = ''; global $eventon; $options = !empty($options) ? $options : get_option('evcal_options_evcal_1'); $options2 = !empty($options2) ? $options2 : get_option('evcal_options_evcal_2'); if (!empty($lang)) { $_lang_variation = $lang; } else { $shortcode_arg = $eventon->evo_generator->shortcode_args; $_lang_variation = !empty($shortcode_arg['lang']) ? $shortcode_arg['lang'] : 'L1'; } // foreach event type upto activated event type categories for ($x = 1; $x < evo_get_ett_count($options) + 1; $x++) { $ab = $x == 1 ? '' : $x; $_tax_lang_field = 'evcal_lang_et' . $x; // check on eventon language values for saved name $lang_name = !empty($options2[$_lang_variation][$_tax_lang_field]) ? stripslashes($options2[$_lang_variation][$_tax_lang_field]) : null; // conditions if (!empty($lang_name)) { $output[$x] = $lang_name; } else { $output[$x] = !empty($options['evcal_eventt' . $ab]) ? $options['evcal_eventt' . $ab] : 'Event Type ' . $ab; } } return $output; }
/** GENERATE individual event data */ public function generate_event_data($event_list_array, $focus_month_beg_range = '', $FOCUS_month_int = '', $FOCUS_year_int = '') { $months_event_array = ''; // Initial variables $wp_time_format = get_option('time_format'); $default_event_color = !empty($this->evopt1['evcal_hexcode']) ? '#' . $this->evopt1['evcal_hexcode'] : '#206177'; $__shortC_arg = $this->shortcode_args; // user interavtion for the calendar $calendar_ux_val = !empty($__shortC_arg['ux_val']) ? $__shortC_arg['ux_val'] : '0'; $__count = 0; // EVENT CARD open by default variables $_is_eventCardOpen = !empty($__shortC_arg['evc_open']) && $__shortC_arg['evc_open'] == 'yes' ? true : ($this->is_eventcard_open ? true : false); $eventcard_script_class = $_is_eventCardOpen ? "gmaponload" : null; $this->is_eventcard_open = false; // check featured events are prioritized $__feature_events = !empty($__shortC_arg['ft_event_priority']) && $__shortC_arg['ft_event_priority'] != 'no' ? true : false; // GET EventTop fields - v2.1.17 $eventop_fields = !empty($this->evopt1['evcal_top_fields']) ? $this->evopt1['evcal_top_fields'] : null; // Number of activated taxnomonies v 2.2.15 $_active_tax = evo_get_ett_count($this->evopt1); // eventCARD HTML require_once AJDE_EVCAL_PATH . '/includes/eventon_eventCard.php'; require_once AJDE_EVCAL_PATH . '/includes/eventon-eventTop.php'; // check if single event exist $_sin_ev_ex = in_array('eventon-single-event/eventon-single-event.php', get_option('active_plugins')) ? true : false; // EACH EVENT if (is_array($event_list_array)) { foreach ($event_list_array as $event_) { // Intials $html_event_detail_card = ''; $_eventClasses = $_eventInClasses = array(); $_eventAttr = $_eventInAttr = array(); $__count++; $event_id = $event_['event_id']; $event_start_unix = $event_['event_start_unix']; $event_end_unix = $event_['event_end_unix']; $event_type = $event_['event_type']; $ev_vals = $event_['event_pmv']; $event = get_post($event_id); $_eventInClasses[] = $eventcard_script_class; // set how a single event would interact $event_ux_val = !empty($ev_vals['_evcal_exlink_option']) ? $ev_vals['_evcal_exlink_option'][0] : 1; $event_permalink = get_permalink($event_id); $event_ux_val = $calendar_ux_val != '1' ? $calendar_ux_val : $event_ux_val; // whether eventcard elements need to be included or not $_event_card_on = $calendar_ux_val == '4' || $calendar_ux_val == 'X' || $event_ux_val == '4' || $event_ux_val == '2' ? false : true; $_event_card_on = $_is_eventCardOpen ? true : $_event_card_on; // if event card is forced to open then $html_tag = $event_ux_val == '1' ? 'div' : 'a'; $html_tag = $_event_card_on ? 'a' : $html_tag; //echo ($_is_eventCardOpen?3:4). ' '.($_event_card_on?3:4). ' '.$calendar_ux_val.' '.$event_ux_val; // year long or not $__year_long_event = !empty($ev_vals['evo_year_long']) && $ev_vals['evo_year_long'][0] == 'yes' ? true : 0; // define variables $ev_other_data = $ev_other_data_top = $html_event_type_info = $_event_date_HTML = $_eventcard = $html_event_type_2_info = ''; $_is_end_date = true; // UNIX date values $DATE_start_val = eventon_get_formatted_time($event_start_unix); if (empty($event_end_unix)) { $_is_end_date = false; $DATE_end_val = $DATE_start_val; } else { $DATE_end_val = eventon_get_formatted_time($event_end_unix); } // if this event featured $_eventInClasses['__featured'] = $this->helper->evo_meta('_featured', $ev_vals, 'tf'); $_eventInClasses['_cancel'] = $this->helper->evo_meta('_cancel', $ev_vals, 'tf'); // GET: repeat interval for this event $__repeatInterval = !empty($event_['event_repeat_interval']) ? $event_['event_repeat_interval'] : (!empty($_GET['ri']) ? $_GET['ri'] : 0); // Unique ID generation $unique_varied_id = 'evc' . $event_start_unix . uniqid() . $event_id; $unique_id = 'evc_' . $event_start_unix . $event_id; // All day event variables $_is_allday = $this->helper->evo_meta('evcal_allday', $ev_vals, 'tf'); $_hide_endtime = $this->helper->evo_meta('evo_hide_endtime', $ev_vals, 'tf'); $evcal_lang_allday = $this->lang('evcal_lang_allday', 'All Day'); /* evo_hide_endtime NOTE: if its set to hide end time, meaning end time and date would be empty on wp-admin, which will fall into same start end month category. */ $_event_date_HTML = $this->generate_time_($DATE_start_val, $DATE_end_val, $ev_vals, $evcal_lang_allday, $focus_month_beg_range, $FOCUS_month_int, $event_start_unix, $event_end_unix); // (---) hook for addons $_event_date_HTML = apply_filters('eventon_eventcard_date_html', $_event_date_HTML, $event_id); // EACH DATA FIELD // EVENT FEATURES IMAGE $img_id = get_post_thumbnail_id($event_id); $img_med_src = $img_thumb_src = ''; if ($img_id != '') { $img_src = wp_get_attachment_image_src($img_id, 'full'); $img_med_src = wp_get_attachment_image_src($img_id, 'medium'); $img_thumb_src = wp_get_attachment_image_src($img_id, 'thumbnail'); // append to eventcard array $_eventcard['ftimage'] = array('img' => $img_src, 'hovereffect' => !empty($this->evopt1['evo_ftimghover']) ? $this->evopt1['evo_ftimghover'] : null, 'clickeffect' => !empty($this->evopt1['evo_ftimgclick']) ? $this->evopt1['evo_ftimgclick'] : null, 'min_height' => !empty($this->evopt1['evo_ftimgheight']) ? $this->evopt1['evo_ftimgheight'] : 400, 'ftimg_sty' => !empty($this->evopt1['evo_ftimg_height_sty']) ? $this->evopt1['evo_ftimg_height_sty'] : 'minimized'); } // EVENT DESCRIPTION $evcal_event_content = $event->post_content; if (!empty($evcal_event_content)) { $event_full_description = $evcal_event_content; } else { // event description compatibility from older versions. $event_full_description = !empty($ev_vals['evcal_description']) ? $ev_vals['evcal_description'][0] : null; } if (!empty($event_full_description)) { $except = $event->post_excerpt; $event_excerpt = eventon_get_event_excerpt($event_full_description, 30, $except); $_eventcard['eventdetails'] = array('fulltext' => $event_full_description, 'excerpt' => $event_excerpt); } // EVENT LOCATION $lonlat = !empty($ev_vals['evcal_lat']) && !empty($ev_vals['evcal_lon']) ? 'data-latlng="' . $ev_vals['evcal_lat'][0] . ',' . $ev_vals['evcal_lon'][0] . '" ' : null; $__location = $this->helper->evo_meta('evcal_location', $ev_vals, 'null'); // location name $__location_name = stripslashes(evo_meta($ev_vals, 'evcal_location_name')); $_eventcard['timelocation'] = array('timetext' => $_event_date_HTML['html_prettytime'], 'location' => $__location, 'location_name' => $__location_name, 'timezone' => !empty($ev_vals['evo_event_timezone']) ? $ev_vals['evo_event_timezone'][0] : null); // Location Image $loc_img_id = $this->helper->evo_meta('evo_loc_img', $ev_vals, 'null'); if (!empty($loc_img_id)) { $_eventcard['locImg'] = array('id' => $loc_img_id, 'fullheight' => !empty($this->evopt1['evo_locimgheight']) ? $this->evopt1['evo_locimgheight'] : 400); // location name and address if (evo_check_yn($ev_vals, 'evcal_name_over_img') && !empty($__location_name)) { $_eventcard['locImg']['locName'] = $__location_name; if (!empty($__location)) { $_eventcard['locImg']['locAdd'] = $__location; } } } // GOOGLE maps if ($this->google_maps_load && ($__location || !empty($lonlat)) && (!empty($ev_vals['evcal_gmap_gen']) && $ev_vals['evcal_gmap_gen'][0] == 'yes')) { $_eventcard['gmap'] = array('id' => $unique_varied_id); // GET directions if ($this->evopt1['evo_getdir'] == 'yes' && !empty($ev_vals['evcal_location'])) { $_eventcard['getdirection'] = array('fromaddress' => $ev_vals['evcal_location'][0]); } } else { $_eventInAttr['data-gmap_status'] = 'null'; } // EVENT BRITE // check if eventbrite actually used in this event if ($_event_card_on && !empty($ev_vals['evcal_eventb_data_set']) && $ev_vals['evcal_eventb_data_set'][0] == 'yes') { // Event brite capacity if (!empty($ev_vals['evcal_eventb_tprice']) && !empty($ev_vals['evcal_eventb_url'])) { $_eventcard['eventbrite'] = array('capacity' => !empty($ev_vals['evcal_eventb_capacity']) ? $ev_vals['evcal_eventb_capacity'][0] : null, 'tix_price' => $ev_vals['evcal_eventb_tprice'][0], 'url' => $ev_vals['evcal_eventb_url'][0]); } } // PAYPAL Code if (!empty($ev_vals['evcal_paypal_item_price'][0]) && $this->evopt1['evcal_paypal_pay'] == 'yes') { $_eventcard['paypal'] = array('title' => $event->post_title, 'price' => $ev_vals['evcal_paypal_item_price'][0], 'text' => !empty($ev_vals['evcal_paypal_text']) ? $ev_vals['evcal_paypal_text'][0] : null); } // Event Organizer if (!empty($ev_vals['evcal_organizer']) && (!empty($ev_vals['evo_evcrd_field_org']) && $ev_vals['evo_evcrd_field_org'][0] != 'yes')) { $_eventcard['organizer'] = array('value' => $ev_vals['evcal_organizer'][0], 'contact' => !empty($ev_vals['evcal_org_contact']) ? $ev_vals['evcal_org_contact'][0] : null, 'imgid' => !empty($ev_vals['evo_org_img']) ? $ev_vals['evo_org_img'][0] : null); } // Custom fields $_cmf_count = evo_retrieve_cmd_count($this->evopt1); for ($x = 1; $x < $_cmf_count + 1; $x++) { if (!empty($this->evopt1['evcal_ec_f' . $x . 'a1']) && !empty($this->evopt1['evcal__fai_00c' . $x]) && !empty($ev_vals["_evcal_ec_f" . $x . "a1_cus"])) { // check if hide this from eventCard set to yes if (empty($this->evopt1['evcal_ec_f' . $x . 'a3']) || $this->evopt1['evcal_ec_f' . $x . 'a3'] == 'no') { $faicon = $this->evopt1['evcal__fai_00c' . $x]; $_eventcard['customfield' . $x] = array('imgurl' => $faicon, 'x' => $x, 'value' => $ev_vals["_evcal_ec_f" . $x . "a1_cus"][0], 'valueL' => !empty($ev_vals["_evcal_ec_f" . $x . "a1_cusL"]) ? $ev_vals["_evcal_ec_f" . $x . "a1_cusL"][0] : null, '_target' => !empty($ev_vals["_evcal_ec_f" . $x . "_onw"]) ? $ev_vals["_evcal_ec_f" . $x . "_onw"][0] : null, 'type' => $this->evopt1['evcal_ec_f' . $x . 'a2']); } } } // LEARN MORE and ICS if (!empty($ev_vals['evcal_lmlink']) || !empty($this->evopt1['evo_ics']) && $this->evopt1['evo_ics'] == 'yes') { $_eventcard['learnmoreICS'] = array('event_id' => $event_id, 'learnmorelink' => !empty($ev_vals['evcal_lmlink']) ? $ev_vals['evcal_lmlink'][0] : null, 'learnmore_target' => !empty($ev_vals['evcal_lmlink_target']) && $ev_vals['evcal_lmlink_target'][0] == 'yes' ? 'target="_blank"' : null, 'estart' => $event_start_unix, 'eend' => $event_end_unix, 'etitle' => $event->post_title, 'evals' => $ev_vals); } // ======================= /** CONSTRUCT the EVENT CARD **/ if ($_event_card_on && !empty($_eventcard) && count($_eventcard) > 0) { // filter hook for eventcard content array - updated 2.2.20 $_eventcard = apply_filters('eventon_eventcard_array', $_eventcard, $ev_vals, $event_id, $__repeatInterval); // if an order is set reorder things if (!empty($this->evopt1['evoCard_order'])) { $_eventcard = $this->helper->eventcard_sort($_eventcard, $this->evopt1); } ob_start(); echo "<div class='event_description evcal_eventcard " . ($_is_eventCardOpen ? 'open' : null) . "' " . ($_is_eventCardOpen ? 'style="display:block"' : 'style="display:none"') . ">"; echo eventon_eventcard_print($_eventcard, $this->evopt1, $this->evopt2); // (---) hook for addons do_action('eventon_eventcard_additions', $event_id, $this->__calendar_type, $event->post_title, $event_full_description, $img_thumb_src, $__repeatInterval); echo "</div>"; $html_event_detail_card = ob_get_clean(); } /** Trigger attributes **/ $event_description_trigger = "desc_trig"; $_eventInAttr['data-gmtrig'] = !empty($ev_vals['evcal_gmap_gen']) && $ev_vals['evcal_gmap_gen'][0] == 'yes' ? '1' : '0'; // Generate tax terms for event top $html_event_type_tax_ar = array(); $_tax_names_array = evo_get_localized_ettNames('', $this->evopt1, $this->evopt2); //$_tax_names_array = evo_get_ettNames($this->evopt1); //print_r($_tax_names_array); $evcal_terms_ = ''; if (!empty($eventop_fields)) { // foreach active tax for ($b = 1; $b <= $_active_tax; $b++) { $__tx_content = ''; $__tax_slug = 'event_type' . ($b == 1 ? '' : '_' . $b); $__tax_fields = 'eventtype' . ($b == 1 ? '' : $b); // for override evc colors if ($b == 1) { $evcal_terms_ = wp_get_post_terms($event_id, $__tax_slug); } if (in_array($__tax_fields, $eventop_fields)) { $evcal_terms = !empty($evcal_terms_) && $b == 1 ? $evcal_terms_ : wp_get_post_terms($event_id, $__tax_slug); if ($evcal_terms) { $__tax_name = $_tax_names_array[$b]; $__tx_content .= "<span class='evcal_event_types ett{$b}'><em><i>" . $__tax_name . ":</i></em>"; $i = 1; foreach ($evcal_terms as $termA) { // get translated tax term name $term_name = $this->lang('evolang_' . $__tax_slug . '_' . $termA->term_id, $termA->name); // tax term slug as class name $_eventInClasses[] = 'evo_' . $termA->slug; $__tx_content .= "<em data-filter='{$__tax_slug}'>" . $term_name . (count($evcal_terms) != $i ? ',' : '') . "</em>"; $i++; } $__tx_content .= "<i class='clear'></i></span>"; $html_event_type_tax_ar[$b] = $__tx_content; } } } } $_html_tax_content = count($html_event_type_tax_ar) > 0 ? implode('', $html_event_type_tax_ar) : null; // event color $event_color = eventon_get_hex_color($ev_vals, $default_event_color); // override event colors if (!empty($__shortC_arg['etc_override']) && $__shortC_arg['etc_override'] == 'yes' && !empty($evcal_terms_)) { $ev_id = $evcal_terms_[0]->term_id; $ev_color = get_option("evo_et_taxonomy_{$ev_id}"); $event_color = !empty($ev_color['et_color']) ? $ev_color['et_color'] : $event_color; // remove additional '#' in the hex code $event_color = '#' . str_replace('#', '', $event_color); } // if UX to be open in new window then use link to single event or that link $link_append = array(); $_link_text = ''; if (!empty($__shortC_arg['lang']) && $__shortC_arg['lang'] != 'L1') { $link_append['l'] = $__shortC_arg['lang']; } // append repeat interval value to event link $link_append['ri'] = $__repeatInterval; if (!empty($link_append)) { foreach ($link_append as $lp => $lpk) { if ($lp == 'ri' && $lpk == '0') { continue; } $_link_text .= $lp . '=' . $lpk . '&'; } } // passing URL variables values $_link_text_append = strpos($event_permalink, '?') === false ? '?' : '&'; $_link_text = !empty($_link_text) ? $_link_text_append . $_link_text : null; $_eventInAttr['rest'][] = !empty($ev_vals['evcal_exlink']) && $event_ux_val != '1' ? 'data-exlk="1" href="' . $ev_vals['evcal_exlink'][0] . $_link_text . '"' : 'data-exlk="0"'; // target $_eventInAttr['rest'][] = !empty($ev_vals['_evcal_exlink_target']) && $ev_vals['_evcal_exlink_target'][0] == 'yes' ? 'target="_blank"' : null; // EVENT LOCATION if (evo_location_exists($ev_vals)) { $location_address = !empty($ev_vals['evcal_location']) ? $ev_vals['evcal_location'][0] : null; // location as LON LAT $event_location_variables = (!empty($lonlat) ? $lonlat : null) . ' data-location_address="' . $location_address . '" '; // conditional schema data for event if (!empty($this->evopt1['evo_schema']) && $this->evopt1['evo_schema'] == 'yes') { $__scheme_data_location = ''; } else { $__scheme_data_location = ' <item style="display:none" itemprop="location" itemscope itemtype="http://schema.org/Place"> ' . (!empty($__location_name) ? '<span itemprop="name">' . $__location_name . '</span>' : '') . ' <span itemprop="address" itemscope itemtype="http://schema.org/PostalAddress"> <item itemprop="streetAddress">' . $location_address . '</item> </span> </item>'; } $ev_location = !empty($location_address) ? '<em class="evcal_location" ' . (!empty($lonlat) ? $lonlat : null) . ' data-add_str="' . $location_address . '">' . $location_address . '</em>' : null; // location type $event_location_variables .= !empty($lonlat) ? 'data-location_type="lonlat"' : 'data-location_type="address"'; // location name $event_location_variables .= !empty($ev_vals['evcal_location_name']) ? ' data-location_name="' . $ev_vals['evcal_location_name'][0] . '"' : null; // location status $event_location_variables .= ' data-location_status="true"'; } else { // location status $ev_location = $event_location_variables = $__scheme_data_location = null; $event_location_variables .= ' data-location_status="false"'; } // EVENT tags $_event_tags = wp_get_post_tags($event_id); // EVENT TOP $eventtop_html = $eventop_fields_ = $__eventtop = ''; // CHECK for event top fields array $eventop_fields_ = is_array($eventop_fields) ? true : false; // featured image if (!empty($img_thumb_src) && !empty($__shortC_arg['show_et_ft_img']) && $__shortC_arg['show_et_ft_img'] == 'yes') { $__eventtop['ft_img'] = array('url' => $img_thumb_src[0], 'url_med' => !empty($img_med_src[0]) ? $img_med_src[0] : ''); } // date block if (!$__year_long_event) { // date number $___day_name = $eventop_fields_ && in_array('dayname', $eventop_fields) ? "<em class='evo_day' >" . $DATE_start_val['D'] . "</em>" : null; $__eventtop['day_block'] = array('start' => $DATE_start_val, 'color' => $event_color, 'day_name' => $___day_name, 'html' => $_event_date_HTML); } // event titles $__eventtop['titles'] = array('yearlong' => $__year_long_event, 'loc_vars' => $event_location_variables, 'title' => isset($event->post_title) ? $event->post_title : '', 'cancel' => $_eventInClasses['_cancel'], 'cancel_reason' => $this->helper->evo_meta('_cancel_reason', $ev_vals, 'null'), 'subtitle' => !empty($ev_vals['evcal_subtitle']) ? $ev_vals['evcal_subtitle'][0] : null); // below title $__eventtop['belowtitle'] = array('fields_' => $eventop_fields_, 'fields' => $eventop_fields, 'evvals' => $ev_vals, 'html' => $_event_date_HTML, 'location' => $ev_location, 'locationname' => !empty($ev_vals['evcal_location_name']) ? $ev_vals['evcal_location_name'][0] : null, 'tax' => $_html_tax_content, 'tags' => $_event_tags, 'cmdcount' => $_cmf_count, 'timezone' => !empty($ev_vals['evo_event_timezone']) ? $ev_vals['evo_event_timezone'][0] : null); // close eventtop $_passVal = array('eventid' => $event_id, 'ri' => $__repeatInterval, 'fields_' => $eventop_fields_, 'fields' => $eventop_fields); $__eventtop = apply_filters('eventon_eventtop_one', $__eventtop, $ev_vals, $_passVal); $__eventtop['close1'] = array(); $__eventtop = apply_filters('eventon_eventtop_two', $__eventtop, $ev_vals, $_passVal); $__eventtop['close2'] = array(); // CONSTRUCT event top html if (!empty($__eventtop) && count($__eventtop) > 0) { ob_start(); echo eventon_get_eventtop_print($__eventtop, $this->evopt1, $this->evopt2); $eventtop_html = ob_get_clean(); $eventtop_html = apply_filters('eventon_eventtop_html', $eventtop_html); } else { $eventtop_html = null; } // (---) hook for addons $html_info_line = apply_filters('eventon_event_cal_short_info_line', $eventtop_html); // SCHEME SEO // conditional schema data if (!empty($this->evopt1['evo_schema']) && $this->evopt1['evo_schema'] == 'yes') { $__scheme_data = '<div class="evo_event_schema" style="display:none" > <a href="' . $event_permalink . '"></a></div>'; $__scheme_attributes = ''; } else { $event_permalink = $_sin_ev_ex ? $event_permalink . $_link_text : "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $__scheme_data = '<div class="evo_event_schema" style="display:none" > <a href="' . $event_permalink . '" itemprop="url"></a> <time itemprop="startDate" datetime="' . $DATE_start_val['Y'] . '-' . $DATE_start_val['n'] . '-' . $DATE_start_val['j'] . '"></time> <time itemprop="endDate" datetime="' . $DATE_end_val['Y'] . '-' . $DATE_end_val['n'] . '-' . $DATE_end_val['j'] . '"></time>' . $__scheme_data_location . '</div>'; $__scheme_attributes = "itemscope itemtype='http://schema.org/Event'"; } // CLASES - attribute $_eventClasses[] = 'eventon_list_event'; $_eventClasses[] = 'event'; $_eventInClasses[] = $_event_date_HTML['class_daylength']; $_eventInClasses[] = 'evcal_list_a'; $_eventInClasses_ = $this->helper->get_eventinclasses(array('existing_classes' => $_eventInClasses, 'show_et_ft_img' => !empty($__shortC_arg['show_et_ft_img']) ? $__shortC_arg['show_et_ft_img'] : 'no', 'img_thumb_src' => $img_thumb_src, 'event_type' => $event_type, 'event_description_trigger' => $event_description_trigger)); // show limit styles if (!empty($__shortC_arg['show_limit']) && $__shortC_arg['show_limit'] == 'yes' && !empty($__shortC_arg['event_count']) && $__shortC_arg['event_count'] > 0 && $__count > $__shortC_arg['event_count']) { $_eventAttr['style'][] = "display:none"; $_eventClasses[] = 'evSL'; } $eventbefore = ''; // TILES STYLE if (!empty($__shortC_arg['tiles']) && $__shortC_arg['tiles'] == 'yes') { // boxy event colors // if featured image exists for an event if (!empty($img_med_src) && $__shortC_arg['tile_bg'] == 1) { $_this_style = 'background-image: url(' . $img_med_src[0] . '); background-color:' . $event_color . ';'; $_eventClasses[] = 'hasbgimg'; } else { $_this_style = 'background-color: ' . $event_color . ';'; } // support different tile style if (!empty($__shortC_arg['tile_style']) && $__shortC_arg['tile_style'] != '0') { $eventbefore = '<div class="evo_topbar" style="' . $_this_style . '"></div>'; } else { $_eventAttr['style'][] = $_this_style; } // tile height if ($__shortC_arg['tile_height'] != 0) { $_eventAttr['style'][] = 'height: ' . $__shortC_arg['tile_height'] . 'px;'; } // tile count if ($__shortC_arg['tile_count'] != 2) { //$perct = (int)(100/$__shortC_arg['tile_count']); //$_eventAttr['style'][] = 'width: '.$perct.'%;'; } } else { $_eventInAttr['style'][] = 'border-color: ' . $event_color . ';'; } $_eventAttr['id'] = 'event_' . $event_id; $_eventAttr['class'] = $this->helper->implode($_eventClasses); $_eventAttr['data-event_id'] = $event_id; $_eventAttr['data-ri'] = $__repeatInterval; $_eventAttr['data-colr'] = $event_color; $_eventAttr['rest'][] = $__scheme_attributes; $atts = $this->helper->get_attrs($_eventAttr); $_eventInAttr['id'] = $unique_id; $_eventInAttr['class'] = $_eventInClasses_; $_eventInAttr['data-ux_val'] = $event_ux_val; $attsIn = $this->helper->get_attrs($_eventInAttr); // build the event HTML $event_html_code = "<div {$atts}>{$eventbefore}{$__scheme_data}\r\n\t\t\t\t<{$html_tag} {$attsIn}>{$html_info_line}</{$html_tag}>" . $html_event_detail_card . "<div class='clear end'></div></div>"; // prepare output $months_event_array[] = array('event_id' => $event_id, 'srow' => $event_start_unix, 'erow' => $event_end_unix, 'content' => $event_html_code); } } else { $months_event_array; } return $months_event_array; }
function export_events() { header("Content-type: text/csv"); header("Content-Disposition: attachment; filename=Eventon_events_" . date("d-m-y") . ".csv"); header("Pragma: no-cache"); header("Expires: 0"); $evo_opt = get_option('evcal_options_evcal_1'); $event_type_count = evo_get_ett_count($evo_opt); $cmd_count = evo_calculate_cmd_count($evo_opt); $fields = array('publish_status', 'evcal_event_color' => 'color', 'event_name', 'event_description', 'event_start_date', 'event_start_time', 'event_end_date', 'event_end_time', 'evcal_allday' => 'all_day', 'evo_hide_endtime' => 'hide_end_time', 'evcal_gmap_gen' => 'event_gmap', '_featured' => 'featured', 'evcal_location_name' => 'location_name', 'evcal_location' => 'event_location', 'evcal_organizer' => 'event_organizer', 'evcal_subtitle' => 'evcal_subtitle', 'image_url'); foreach ($fields as $var => $val) { echo $val . ','; } // event types for ($y = 1; $y <= $event_type_count; $y++) { $_ett_name = $y == 1 ? 'event_type' : 'event_type_' . $y; echo $_ett_name . ','; } // for event custom meta data for ($z = 1; $z <= $cmd_count; $z++) { $_cmd_name = 'cmd_' . $z; echo $_cmd_name . ","; } echo "\n"; $events = new WP_Query(array('posts_per_page' => -1, 'post_type' => 'ajde_events', 'post_status' => 'any')); if ($events->have_posts()) { date_default_timezone_set('UTC'); while ($events->have_posts()) { $events->the_post(); $__id = get_the_ID(); $pmv = get_post_meta($__id); echo get_post_status($__id) . ","; //echo (!empty($pmv['_featured'])?$pmv['_featured'][0]:'no').","; echo (!empty($pmv['evcal_event_color']) ? $pmv['evcal_event_color'][0] : '') . ","; echo '"' . get_the_title() . '",'; $event_content = get_the_content(); echo '"' . str_replace('"', "'", $event_content) . '",'; // start time $start = !empty($pmv['evcal_srow']) ? $pmv['evcal_srow'][0] : ''; if (!empty($start)) { echo date('n/j/Y,g:i:A', $start) . ','; } else { echo "'','',"; } // end time $end = !empty($pmv['evcal_erow']) ? $pmv['evcal_erow'][0] : ''; if (!empty($end)) { echo date('n/j/Y,g:i:A', $end) . ','; } else { echo "'','',"; } foreach ($fields as $var => $val) { // yes no values if (in_array($val, array('featured', 'all_day', 'hide_end_time', 'event_gmap'))) { echo (!empty($pmv[$var]) && $pmv[$var][0] == 'yes' ? 'yesf' : 'no') . ','; } // skip fields if (in_array($val, array('featured', 'all_day', 'hide_end_time', 'event_gmap', 'color', 'publish_status', 'event_name', 'event_description', 'event_start_date', 'event_start_time', 'event_end_date', 'event_end_time'))) { continue; } // image if ($val == 'image_url') { $img_id = get_post_thumbnail_id($__id); if ($img_id != '') { $img_src = wp_get_attachment_image_src($img_id, 'full'); echo $img_src[0] . ","; } else { echo ","; } } else { echo (!empty($pmv[$var]) ? '"' . $pmv[$var][0] . '"' : '') . ","; } } // event types for ($y = 1; $y <= $event_type_count; $y++) { $_ett_name = $y == 1 ? 'event_type' : 'event_type_' . $y; $terms = get_the_terms($__id, $_ett_name); if ($terms && !is_wp_error($terms)) { echo '"'; foreach ($terms as $term) { echo $term->term_id . ','; } echo '",'; } else { echo ","; } } // for event custom meta data for ($z = 1; $z <= $cmd_count; $z++) { $cmd_name = '_evcal_ec_f' . $z . 'a1_cus'; echo !empty($pmv[$cmd_name]) ? '"' . str_replace('"', "'", $pmv[$cmd_name][0]) . '"' : ''; echo ","; } echo "\n"; } } wp_reset_postdata(); }
function _array_part_taxonomies() { $output = ''; $event_type_names = evo_get_ettNames($this->evopt); $ett_verify = evo_get_ett_count($this->evopt); $output[] = array('type' => 'togheader', 'name' => 'Event Type Categories'); for ($x = 1; $x < $ett_verify + 1; $x++) { $default = $event_type_names[$x]; $output[] = array('label' => $default, 'name' => 'evcal_lang_et' . $x); // each term of taxonomy $ab = $x == 1 ? '' : '_' . $x; $terms = get_terms('event_type' . $ab, array('hide_empty' => false)); $termitem = ''; if (!empty($terms)) { foreach ($terms as $term) { $var = 'evolang_' . 'event_type' . $ab . '_' . $term->term_id; $termitem[$var] = !empty($this->lang_options[$var]) ? $this->lang_options[$var] : $term->name; } } if (!empty($termitem)) { $output[] = array('type' => 'multibox_open', 'items' => $termitem); } } $output[] = array('label' => 'Event Location', 'name' => 'evcal_lang_evloc'); $output[] = array('label' => 'Events at this location', 'var' => '1'); $output[] = array('label' => 'Event Organizer', 'name' => 'evcal_lang_evorg'); $output[] = array('label' => 'Events by this organizer', 'var' => '1'); $output[] = array('type' => 'togend'); return $output; }
<?php /** * Language Settings * * @version 2.2.10 * @package EventON/settings * @category Settings * @author AJDE */ // Event type custom taxonomy NAMES $evopt = get_option('evcal_options_evcal_1'); $event_type_names = evo_get_ettNames($evopt); $_ett_lang_ar = array(); $ett_verify = evo_get_ett_count($evopt); for ($x = 1; $x < $ett_verify + 1; $x++) { $_ett_lang_ar[$x] = array('label' => $event_type_names[$x], 'name' => 'evcal_lang_et' . $x); } // Custom meta fields $_cmd_lang_ar = array(); $cmd_verify = evo_retrieve_cmd_count($evopt); for ($x = 1; $x < $cmd_verify + 1; $x++) { $label = $evopt['evcal_ec_f' . $x . 'a1']; $_cmd_lang_ar[$x] = array('label' => $label, 'name' => 'evcal_cmd_' . $x); } // MAIN ARRAY $eventon_custom_language_array = array(array('type' => 'togheader', 'name' => 'General Calendar'), array('label' => 'No Events', 'name' => 'evcal_lang_noeve', 'legend' => ''), array('label' => 'All Day', 'name' => 'evcal_lang_allday', 'legend' => ''), array('label' => 'Year Around Event', 'name' => 'evcal_lang_yrrnd', 'legend' => ''), array('label' => 'Events', 'name' => 'evcal_lang_events'), array('label' => 'Show More Events', 'name' => 'evcal_lang_sme'), array('type' => 'togend'), array('type' => 'togheader', 'name' => 'Calendar Header'), array('label' => 'Jump Months', 'name' => 'evcal_lang_jumpmonths', 'legend' => ''), array('label' => 'Jump Months: Month', 'name' => 'evcal_lang_jumpmonthsM', 'legend' => ''), array('label' => 'Jump Months: Year', 'name' => 'evcal_lang_jumpmonthsY', 'legend' => ''), array('label' => 'Sort Options', 'name' => 'evcal_lang_sopt', 'legend' => ''), array('label' => 'Sort By', 'name' => 'evcal_lang_sort', 'legend' => ''), array('label' => 'Date', 'name' => 'evcal_lang_sdate', 'legend' => ''), array('label' => 'Title', 'name' => 'evcal_lang_stitle', 'legend' => ''), array('label' => 'All', 'name' => 'evcal_lang_all', 'legend' => 'Sort options all text'), $_ett_lang_ar[1], $_ett_lang_ar[2], !empty($_ett_lang_ar[3]) ? $_ett_lang_ar[3] : null, !empty($_ett_lang_ar[4]) ? $_ett_lang_ar[4] : null, array('type' => 'togend'), array('type' => 'togheader', 'name' => 'Event Card'), array('label' => 'Location Name', 'name' => 'evcal_lang_location_name', 'legend' => ''), array('label' => 'Location', 'name' => 'evcal_lang_location', 'legend' => ''), array('label' => 'Event Location', 'name' => 'evcal_lang_evloc'), array('label' => 'Type your address', 'name' => 'evcalL_getdir_placeholder', 'legend' => 'Get directions section'), array('label' => 'Click here to get directions', 'name' => 'evcalL_getdir_title', 'legend' => 'Get directions section'), array('label' => 'Time', 'name' => 'evcal_lang_time', 'legend' => ''), array('label' => 'Color', 'name' => 'evcal_lang_scolor', 'legend' => ''), array('label' => 'At (event location)', 'name' => 'evcal_lang_at', 'legend' => ''), array('label' => 'Event Details', 'name' => 'evcal_evcard_details', 'legend' => ''), array('label' => 'Event Organized by', 'name' => 'evcal_evcard_org', 'legend' => ''), array('label' => 'Event Organizer', 'name' => 'evcal_lang_evorg'), array('label' => 'Close event button text', 'name' => 'evcal_lang_close'), array('label' => 'More', 'name' => 'evcal_lang_more', 'legend' => 'More/less text for long event description'), array('label' => 'Less', 'name' => 'evcal_lang_less', 'legend' => 'More/less text for long event description'), array('label' => 'Buy ticket via Paypal', 'name' => 'evcal_evcard_tix1', 'legend' => 'for Paypal'), array('label' => 'Buy Now button text', 'name' => 'evcal_evcard_btn1', 'legend' => 'for Paypal'), array('label' => 'Ticket for the event', 'name' => 'evcal_evcard_tix2', 'legend' => 'for eventbrite'), array('label' => 'Buy now button', 'name' => 'evcal_evcard_btn2', 'legend' => 'for eventbrite'), array('label' => 'Event Capacity', 'name' => 'evcal_evcard_cap', 'legend' => ''), array('label' => 'Learn More about this event', 'name' => 'evcal_evcard_learnmore', 'legend' => 'for meetup'), array('label' => 'Learn More link text', 'name' => 'evcal_evcard_learnmore2', 'legend' => 'for meetup'), array('type' => 'subheader', 'label' => 'Add to calendar Section'), array('label' => 'Calendar', 'name' => 'evcal_evcard_calncal'), array('label' => 'GoogleCal', 'name' => 'evcal_evcard_calgcal'), array('label' => 'Add to your calendar', 'name' => 'evcal_evcard_addics', 'legend' => 'Alt text for add to calendar button'), array('label' => 'Add to google calendar', 'name' => 'evcal_evcard_addgcal', 'legend' => 'Alt text for add to google calendar button'), array('type' => 'togend'), !empty($_cmd_lang_ar[1]) ? $_cmd_lang_ar[1] : null, !empty($_cmd_lang_ar[2]) ? $_cmd_lang_ar[2] : null, !empty($_cmd_lang_ar[3]) ? $_cmd_lang_ar[3] : null, array('type' => 'togend'));
function export_events() { header("Content-type: text/csv"); header("Content-Disposition: attachment; filename=Eventon_events_" . date("d-m-y") . ".csv"); header("Pragma: no-cache"); header("Expires: 0"); $evo_opt = get_option('evcal_options_evcal_1'); $event_type_count = evo_get_ett_count($evo_opt); $cmd_count = evo_calculate_cmd_count($evo_opt); echo "publish_status,featured,color,event_name,event_description,event_start_date,event_start_time,event_end_date,event_end_time,all_day,hide_end_time,location_name,event_location,event_gmap,event_organizer,"; // event types for ($y = 1; $y <= $event_type_count; $y++) { $_ett_name = $y == 1 ? 'event_type' : 'event_type_' . $y; echo $_ett_name . ','; } // for event custom meta data for ($z = 1; $z <= $cmd_count; $z++) { $_cmd_name = 'cmd_' . $z; echo $_cmd_name . ","; } echo "\n"; $events = new WP_Query(array('posts_per_page' => -1, 'post_type' => 'ajde_events', 'post_status' => 'any')); if ($events->have_posts()) { date_default_timezone_set('UTC'); while ($events->have_posts()) { $events->the_post(); $__id = get_the_ID(); $pmv = get_post_meta($__id); echo get_post_status($__id) . ","; echo (!empty($pmv['_featured']) ? $pmv['_featured'][0] : 'no') . ","; echo (!empty($pmv['evcal_event_color']) ? $pmv['evcal_event_color'][0] : '') . ","; echo '"' . get_the_title() . '",'; $event_content = get_the_content(); echo '"' . str_replace('"', "'", $event_content) . '",'; // start time $start = !empty($pmv['evcal_srow']) ? $pmv['evcal_srow'][0] : ''; if (!empty($start)) { echo date('n/j/Y,g:i:A', $start) . ','; } else { echo "'','',"; } // end time $end = !empty($pmv['evcal_erow']) ? $pmv['evcal_erow'][0] : ''; if (!empty($end)) { echo date('n/j/Y,g:i:A', $end) . ','; } else { echo "'','',"; } echo (!empty($pmv['evcal_allday']) ? $pmv['evcal_allday'][0] : 'no') . ","; echo (!empty($pmv['evo_hide_endtime']) ? $pmv['evo_hide_endtime'][0] : 'no') . ","; echo (!empty($pmv['evcal_location_name']) ? '"' . $pmv['evcal_location_name'][0] . '"' : '') . ","; echo (!empty($pmv['evcal_location']) ? '"' . $pmv['evcal_location'][0] . '"' : '') . ","; echo (!empty($pmv['evcal_gmap_gen']) ? $pmv['evcal_gmap_gen'][0] : 'no') . ","; echo (!empty($pmv['evcal_organizer']) ? '"' . $pmv['evcal_organizer'][0] . '"' : '') . ","; // event types for ($y = 1; $y <= $event_type_count; $y++) { $_ett_name = $y == 1 ? 'event_type' : 'event_type_' . $y; $terms = get_the_terms($__id, $_ett_name); if ($terms && !is_wp_error($terms)) { echo '"'; foreach ($terms as $term) { echo $term->term_id . ','; } echo '",'; } else { echo ","; } } // for event custom meta data for ($z = 1; $z <= $cmd_count; $z++) { $cmd_name = '_evcal_ec_f' . $z . 'a1_cus'; echo !empty($pmv[$cmd_name]) ? '"' . str_replace('"', "'", $pmv[$cmd_name][0]) . '"' : ''; echo ","; } echo "\n"; } } wp_reset_postdata(); }
/** GENERATE individual event data */ public function generate_event_data($event_list_array, $focus_month_beg_range = '', $FOCUS_month_int = '', $FOCUS_year_int = '') { $months_event_array = ''; // Initial variables $wp_time_format = get_option('time_format'); $default_event_color = !empty($this->evopt1['evcal_hexcode']) ? '#' . $this->evopt1['evcal_hexcode'] : '#206177'; $__shortC_arg = $this->shortcode_args; $__count = 0; // EVENT CARD open by default variables $_is_eventCardOpen = !empty($__shortC_arg['evc_open']) && $__shortC_arg['evc_open'] == 'yes' ? true : ($this->is_eventcard_open ? true : false); $eventcard_script_class = $_is_eventCardOpen ? "gmaponload" : null; $this->is_eventcard_open = false; // check featured events are prioritized $__feature_events = !empty($__shortC_arg['ft_event_priority']) && $__shortC_arg['ft_event_priority'] != 'no' ? true : false; // GET EventTop fields - v2.1.17 $eventop_fields = !empty($this->evopt1['evcal_top_fields']) ? $this->evopt1['evcal_top_fields'] : null; // Number of activated taxnomonies v 2.2.15 $_active_tax = evo_get_ett_count($this->evopt1); // eventCARD HTML require_once AJDE_EVCAL_PATH . '/includes/eventon_eventCard.php'; // check if single event exist $_sin_ev_ex = in_array('eventon-single-event/eventon-single-event.php', get_option('active_plugins')) ? true : false; // EACH EVENT if (is_array($event_list_array)) { foreach ($event_list_array as $event_) { $__count++; //print_r($event); $event_id = $event_['event_id']; $event_start_unix = $event_['event_start_unix']; $event_end_unix = $event_['event_end_unix']; $event_type = $event_['event_type']; $ev_vals = $event_['event_pmv']; $event = get_post($event_id); // year long or not $__year_long_event = !empty($ev_vals['evo_year_long']) && $ev_vals['evo_year_long'][0] == 'yes' ? true : 0; // define variables $ev_other_data = $ev_other_data_top = $html_event_type_info = $_event_date_HTML = $_eventcard = $html_event_type_2_info = ''; $_is_end_date = true; $DATE_start_val = eventon_get_formatted_time($event_start_unix); if (empty($event_end_unix)) { $_is_end_date = false; $DATE_end_val = $DATE_start_val; } else { $DATE_end_val = eventon_get_formatted_time($event_end_unix); } // if this event featured $__featured = !empty($ev_vals['_featured']) && $ev_vals['_featured'][0] == 'yes' ? true : false; // GET: repeat interval for this event $__repeatInterval = !empty($event_['event_repeat_interval']) ? $event_['event_repeat_interval'] : (!empty($_GET['ri']) ? $_GET['ri'] : 0); // Unique ID generation $unique_varied_id = 'evc' . $event_start_unix . uniqid() . $event_id; $unique_id = 'evc_' . $event_start_unix . $event_id; // All day event variables $_is_allday = !empty($ev_vals['evcal_allday']) && $ev_vals['evcal_allday'][0] == 'yes' ? true : false; $_hide_endtime = !empty($ev_vals['evo_hide_endtime']) && $ev_vals['evo_hide_endtime'][0] == 'yes' ? true : false; $evcal_lang_allday = eventon_get_custom_language($this->evopt2, 'evcal_lang_allday', 'All Day'); /* evo_hide_endtime NOTE: if its set to hide end time, meaning end time and date would be empty on wp-admin, which will fall into same start end month category. */ $_event_date_HTML = $this->generate_time_($DATE_start_val, $DATE_end_val, $ev_vals, $evcal_lang_allday, $focus_month_beg_range, $FOCUS_month_int, $event_start_unix, $event_end_unix); // (---) hook for addons if (has_filter('eventon_eventcard_date_html')) { $_event_date_HTML = apply_filters('eventon_eventcard_date_html', $_event_date_HTML, $event_id); } // EACH DATA FIELD // EVENT FEATURES IMAGE $img_id = get_post_thumbnail_id($event_id); $img_med_src = ''; if ($img_id != '') { $img_src = wp_get_attachment_image_src($img_id, 'full'); $img_med_src = wp_get_attachment_image_src($img_id, 'medium'); $img_thumb_src = wp_get_attachment_image_src($img_id, 'thumbnail'); // append to eventcard array $_eventcard['ftimage'] = array('img' => $img_src, 'hovereffect' => !empty($this->evopt1['evo_ftimghover']) ? $this->evopt1['evo_ftimghover'] : null, 'clickeffect' => !empty($this->evopt1['evo_ftimgclick']) ? $this->evopt1['evo_ftimgclick'] : null, 'min_height' => !empty($this->evopt1['evo_ftimgheight']) ? $this->evopt1['evo_ftimgheight'] : 400, 'ftimg_sty' => !empty($this->evopt1['evo_ftimg_height_sty']) ? $this->evopt1['evo_ftimg_height_sty'] : 'minimized'); } else { $img_thumb_src = ''; } // EVENT DESCRIPTION $evcal_event_content = $event->post_content; if (!empty($evcal_event_content)) { $event_full_description = $evcal_event_content; } else { // event description compatibility from older versions. $event_full_description = !empty($ev_vals['evcal_description']) ? $ev_vals['evcal_description'][0] : null; } if (!empty($event_full_description)) { $except = $event->post_excerpt; $event_excerpt = eventon_get_event_excerpt($event_full_description, 30, $except); $_eventcard['eventdetails'] = array('fulltext' => $event_full_description, 'excerpt' => $event_excerpt); } // EVENT LOCATION $lonlat = !empty($ev_vals['evcal_lat']) && !empty($ev_vals['evcal_lon']) ? 'data-latlng="' . $ev_vals['evcal_lat'][0] . ',' . $ev_vals['evcal_lon'][0] . '" ' : null; $__location = evo_meta($ev_vals, 'evcal_location'); // location name $__location_name = evo_meta($ev_vals, 'evcal_location_name'); $_eventcard['timelocation'] = array('timetext' => $_event_date_HTML['html_prettytime'], 'location' => $__location, 'location_name' => $__location_name); // Location Image $loc_img_id = !empty($ev_vals['evo_loc_img']) ? $ev_vals['evo_loc_img'][0] : null; if (!empty($loc_img_id)) { $_eventcard['locImg'] = array('id' => $loc_img_id, 'fullheight' => !empty($this->evopt1['evo_locimgheight']) ? $this->evopt1['evo_locimgheight'] : 400); // location name and address if (evo_check_yn($ev_vals, 'evcal_name_over_img') && !empty($__location_name)) { $_eventcard['locImg']['locName'] = $__location_name; if (!empty($__location)) { $_eventcard['locImg']['locAdd'] = $__location; } } } // GOOGLE maps if ($this->google_maps_load && !empty($ev_vals['evcal_location']) && (!empty($ev_vals['evcal_gmap_gen']) && $ev_vals['evcal_gmap_gen'][0] == 'yes')) { $gmap_api_status = ''; $_eventcard['gmap'] = array('id' => $unique_varied_id); // GET directions if ($this->evopt1['evo_getdir'] == 'yes') { $_eventcard['getdirection'] = array('fromaddress' => $ev_vals['evcal_location'][0]); } } else { $gmap_api_status = 'data-gmap_status="null"'; } // EVENT BRITE // check if eventbrite actually used in this event if (!empty($ev_vals['evcal_eventb_data_set']) && $ev_vals['evcal_eventb_data_set'][0] == 'yes') { // Event brite capacity if (!empty($ev_vals['evcal_eventb_tprice']) && !empty($ev_vals['evcal_eventb_url'])) { $_eventcard['eventbrite'] = array('capacity' => !empty($ev_vals['evcal_eventb_capacity']) ? $ev_vals['evcal_eventb_capacity'][0] : null, 'tix_price' => $ev_vals['evcal_eventb_tprice'][0], 'url' => $ev_vals['evcal_eventb_url'][0]); } } // PAYPAL Code if (!empty($ev_vals['evcal_paypal_item_price'][0]) && $this->evopt1['evcal_paypal_pay'] == 'yes') { $_eventcard['paypal'] = array('title' => $event->post_title, 'price' => $ev_vals['evcal_paypal_item_price'][0], 'text' => !empty($ev_vals['evcal_paypal_text']) ? $ev_vals['evcal_paypal_text'][0] : null); } // Event Organizer if (!empty($ev_vals['evcal_organizer']) && (!empty($ev_vals['evo_evcrd_field_org']) && $ev_vals['evo_evcrd_field_org'][0] != 'yes')) { $_eventcard['organizer'] = array('value' => $ev_vals['evcal_organizer'][0], 'contact' => !empty($ev_vals['evcal_org_contact']) ? $ev_vals['evcal_org_contact'][0] : null, 'img' => !empty($ev_vals['evcal_org_img']) ? $ev_vals['evcal_org_img'][0] : null); } // Custom fields $_cmf_count = evo_retrieve_cmd_count($this->evopt1); for ($x = 1; $x < $_cmf_count + 1; $x++) { if (!empty($this->evopt1['evcal_ec_f' . $x . 'a1']) && !empty($this->evopt1['evcal__fai_00c' . $x]) && !empty($ev_vals["_evcal_ec_f" . $x . "a1_cus"])) { // check if hide this from eventCard set to yes if (empty($this->evopt1['evcal_ec_f' . $x . 'a3']) || $this->evopt1['evcal_ec_f' . $x . 'a3'] == 'no') { $faicon = $this->evopt1['evcal__fai_00c' . $x]; $_eventcard['customfield' . $x] = array('imgurl' => $faicon, 'x' => $x, 'value' => $ev_vals["_evcal_ec_f" . $x . "a1_cus"][0], 'valueL' => !empty($ev_vals["_evcal_ec_f" . $x . "a1_cusL"]) ? $ev_vals["_evcal_ec_f" . $x . "a1_cusL"][0] : null, '_target' => !empty($ev_vals["_evcal_ec_f" . $x . "_onw"]) ? $ev_vals["_evcal_ec_f" . $x . "_onw"][0] : null, 'type' => $this->evopt1['evcal_ec_f' . $x . 'a2']); } } } // LEARN MORE and ICS if (!empty($ev_vals['evcal_lmlink']) || !empty($this->evopt1['evo_ics']) && $this->evopt1['evo_ics'] == 'yes') { $_eventcard['learnmoreICS'] = array('event_id' => $event_id, 'learnmorelink' => !empty($ev_vals['evcal_lmlink']) ? $ev_vals['evcal_lmlink'][0] : null, 'learnmore_target' => !empty($ev_vals['evcal_lmlink_target']) && $ev_vals['evcal_lmlink_target'][0] == 'yes' ? 'target="_blank"' : null, 'estart' => $event_start_unix, 'eend' => $event_end_unix, 'etitle' => $event->post_title, 'evals' => $ev_vals); } // ======================= /** CONSTRUCT the EVENT CARD **/ if (!empty($_eventcard) && count($_eventcard) > 0) { // filter hook for eventcard content array - updated 2.2.20 $_eventcard = apply_filters('eventon_eventcard_array', $_eventcard, $ev_vals, $event_id, $__repeatInterval); // if an order is set reorder things $_eventcard = eventon_EVC_sort($_eventcard, $this->evopt1['evoCard_order']); ob_start(); echo "<div class='event_description evcal_eventcard " . ($_is_eventCardOpen ? 'open' : null) . "' " . ($_is_eventCardOpen ? 'style="display:block"' : 'style="display:none"') . ">"; echo eventon_eventcard_print($_eventcard, $this->evopt1, $this->evopt2); // (---) hook for addons if (has_action('eventon_eventcard_additions')) { do_action('eventon_eventcard_additions', $event_id, $this->__calendar_type, $event->post_title, $event_full_description, $img_thumb_src); } echo "</div>"; $html_event_detail_card = ob_get_clean(); } else { $html_event_detail_card = null; } /** Trigger attributes **/ $event_description_trigger = !empty($html_event_detail_card) ? "desc_trig" : null; $gmap_trigger = !empty($ev_vals['evcal_gmap_gen']) && $ev_vals['evcal_gmap_gen'][0] == 'yes' ? 'data-gmtrig="1"' : 'data-gmtrig="0"'; // Generate tax terms for event top $html_event_type_tax_ar = array(); $_tax_names_array = evo_get_ettNames($this->evopt1); $term_class = $evcal_terms_ = ''; if (!empty($eventop_fields)) { // foreach active tax for ($b = 1; $b <= $_active_tax; $b++) { $__tx_content = ''; $__tax_slug = 'event_type' . ($b == 1 ? '' : '_' . $b); $__tax_fields = 'eventtype' . ($b == 1 ? '' : $b); // for override evc colors if ($b == 1) { $evcal_terms_ = wp_get_post_terms($event_id, $__tax_slug); } if (in_array($__tax_fields, $eventop_fields)) { $evcal_terms = !empty($evcal_terms_) && $b == 1 ? $evcal_terms_ : wp_get_post_terms($event_id, $__tax_slug); if ($evcal_terms) { $__tax_name = $_tax_names_array[$b]; $__tx_content .= "<span class='evcal_event_types ett{$b}'><em><i>" . $__tax_name . ":</i></em>"; foreach ($evcal_terms as $termA) { // add tax term slug to event element class names $term_class .= ' evo_' . $termA->slug; $__tx_content .= "<em data-filter='{$__tax_slug}'>" . $termA->name . "</em>"; } $__tx_content .= "<i class='clear'></i></span>"; $html_event_type_tax_ar[$b] = $__tx_content; } } } } $_html_tax_content = count($html_event_type_tax_ar) > 0 ? implode('', $html_event_type_tax_ar) : null; //event color $event_color = eventon_get_hex_color($ev_vals, $default_event_color); // override event colors if (!empty($__shortC_arg['etc_override']) && $__shortC_arg['etc_override'] == 'yes' && !empty($evcal_terms_)) { $ev_id = $evcal_terms_[0]->term_id; $ev_color = get_option("evo_et_taxonomy_{$ev_id}"); $event_color = !empty($ev_color['et_color']) ? '#' . $ev_color['et_color'] : $event_color; } // event ex link $exlink_option = !empty($ev_vals['_evcal_exlink_option']) ? $ev_vals['_evcal_exlink_option'][0] : 1; $event_permalink = get_permalink($event_id); // if UX to be open in new window then use link to single event or that link $link_append = array(); $_link_text = ''; if (!empty($__shortC_arg['lang']) && $__shortC_arg['lang'] != 'L1') { $link_append['l'] = $__shortC_arg['lang']; } $link_append['ri'] = $__repeatInterval; if (!empty($link_append)) { foreach ($link_append as $lp => $lpk) { if ($lp == 'ri' && $lpk == '0') { continue; } $_link_text .= $lp . '=' . $lpk . '&'; } } $_link_text = !empty($_link_text) ? '?' . $_link_text : null; $href = !empty($ev_vals['evcal_exlink']) && $exlink_option != '1' ? 'data-exlk="1" href="' . $ev_vals['evcal_exlink'][0] . $_link_text . '"' : 'data-exlk="0"'; // target $target_ex = !empty($ev_vals['_evcal_exlink_target']) && $ev_vals['_evcal_exlink_target'][0] == 'yes' ? 'target="_blank"' : null; // EVENT LOCATION if (evo_location_exists($ev_vals)) { $location_address = !empty($ev_vals['evcal_location']) ? $ev_vals['evcal_location'][0] : null; // location as LON LAT $event_location_variables = (!empty($lonlat) ? $lonlat : null) . ' data-location_address="' . $location_address . '" '; // conditional schema data for event if (!empty($this->evopt1['evo_schema']) && $this->evopt1['evo_schema'] == 'yes') { $__scheme_data_location = ''; } else { $__scheme_data_location = ' <item style="display:none" itemprop="location" itemscope itemtype="http://schema.org/Place"> <span itemprop="address" itemscope itemtype="http://schema.org/PostalAddress"> <item itemprop="streetAddress">' . $location_address . '</item> </span> </item>'; } $ev_location = '<em class="evcal_location" ' . (!empty($lonlat) ? $lonlat : null) . ' data-add_str="' . $location_address . '">' . $location_address . '</em>'; // location type $event_location_variables .= !empty($lonlat) ? 'data-location_type="lonlat"' : 'data-location_type="address"'; // location name $event_location_variables .= !empty($ev_vals['evcal_location_name']) ? ' data-location_name="' . $ev_vals['evcal_location_name'][0] . '"' : null; // location status $event_location_variables .= ' data-location_status="true"'; } else { // location status $ev_location = $event_location_variables = $__scheme_data_location = null; $event_location_variables .= ' data-location_status="false"'; } /* ------------------- // HTML // EventTop - building of the eventTop section -------------*/ $eventtop_html = $eventop_fields_ = ''; // featured image $eventtop_html[] = !empty($img_thumb_src) && !empty($__shortC_arg['show_et_ft_img']) && $__shortC_arg['show_et_ft_img'] == 'yes' ? "<span class='ev_ftImg' style='background-image:url(" . $img_thumb_src[0] . ")'></span>" : null; // CHECK for event top fields array $eventop_fields_ = is_array($eventop_fields) ? true : false; // date number $___day_name = $eventop_fields_ && in_array('dayname', $eventop_fields) ? "<em class='evo_day' >" . $DATE_start_val['D'] . "</em>" : null; if (!$__year_long_event) { $eventtop_html[] = "<span class='evcal_cblock' data-bgcolor='" . $event_color . "' data-smon='" . $DATE_start_val['F'] . "' data-syr='" . $DATE_start_val['Y'] . "'><em class='evo_date' >" . $___day_name . $_event_date_HTML['html_date'] . '</em>'; } // time for events $eventtop_html[] = "<em class='evo_time'>" . $_event_date_HTML['html_time'] . "</em>"; $eventtop_html[] = "<em class='clear'></em></span>"; // event title $eventtop_html[] = "<span class='evcal_desc evo_info " . ($__year_long_event ? 'yrl' : null) . "' {$event_location_variables} ><span class='evcal_desc2 evcal_event_title' itemprop='name'>" . $event->post_title . "</span>"; // subtitle if (!empty($ev_vals['evcal_subtitle'])) { $eventtop_html[] = "<span class='evcal_event_subtitle' >" . $ev_vals['evcal_subtitle'][0] . "</span>"; } $eventtop_html[] = "<span class='evcal_desc_info' >"; // time if ($eventop_fields_ && in_array('time', $eventop_fields)) { $eventtop_html[] = "<em class='evcal_time'>" . $_event_date_HTML['html_fromto'] . "</em> "; } // location if ($eventop_fields_ && in_array('location', $eventop_fields)) { $eventtop_html[] = $ev_location; } // location Name if ($eventop_fields_ && in_array('locationame', $eventop_fields)) { $__location_name = !empty($ev_vals['evcal_location_name']) ? $ev_vals['evcal_location_name'][0] : null; $eventtop_html[] = !empty($__location_name) ? '<em class="evcal_location event_location_name">' . $__location_name . '</em>' : null; } $eventtop_html[] = "</span><span class='evcal_desc3'>"; // organizer if ($eventop_fields_ && in_array('organizer', $eventop_fields) && !empty($ev_vals['evcal_organizer'])) { $eventtop_html[] = "<em class='evcal_oganizer'><i>" . eventon_get_custom_language($this->evopt2, 'evcal_evcard_org', 'Event Organized By') . ':</i> ' . $ev_vals['evcal_organizer'][0] . "</em>"; } // event type if (!empty($_html_tax_content)) { $eventtop_html[] = $_html_tax_content; } // custom meta fields for ($x = 1; $x < $_cmf_count + 1; $x++) { if ($eventop_fields_ && in_array('cmd' . $x, $eventop_fields) && !empty($ev_vals['_evcal_ec_f' . $x . 'a1_cus'])) { $def = $this->evopt1['evcal_ec_f' . $x . 'a1']; // default custom meta field name $i18n_nam = eventon_get_custom_language($this->evopt2, 'evcal_cmd_' . $x, $def); $eventtop_html[] = ($x == 1 ? "<b class='clear'></b>" : null) . "<em class='evcal_cmd'><i>" . $i18n_nam . ':</i> ' . $ev_vals['_evcal_ec_f' . $x . 'a1_cus'][0] . "</em> "; } } $eventtop_html[] = "</span>"; $eventtop_html[] = "</span><em class='clear'></em>"; $eventtop_html = apply_filters('eventon_eventtop_html', $eventtop_html); // -- // Combine the event top individual sections $html_info_line = implode('', $eventtop_html); // (---) hook for addons if (has_filter('eventon_event_cal_short_info_line')) { $html_info_line = apply_filters('eventon_event_cal_short_info_line', $html_info_line); } // SCHEME SEO // conditional schema data if (!empty($this->evopt1['evo_schema']) && $this->evopt1['evo_schema'] == 'yes') { $__scheme_data = '<div class="evo_event_schema" style="display:none" > <a href="' . $event_permalink . '"></a></div>'; $__scheme_attributes = ''; } else { $event_permalink = $_sin_ev_ex ? $event_permalink : "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $__scheme_data = '<div class="evo_event_schema" style="display:none" > <a href="' . $event_permalink . '" itemprop="url"></a> <time itemprop="startDate" datetime="' . $DATE_start_val['Y'] . '-' . $DATE_start_val['n'] . '-' . $DATE_start_val['j'] . '"></time> <time itemprop="endDate" datetime="' . $DATE_end_val['Y'] . '-' . $DATE_end_val['n'] . '-' . $DATE_end_val['j'] . '"></time>' . $__scheme_data_location . '</div>'; $__scheme_attributes = "itemscope itemtype='http://schema.org/Event'"; } // ## Eventon Calendar events list -- single event // CLASES - attribute $_eventClasses = array(); $_eventAttr = array(); $_eventClasses[] = 'eventon_list_event'; $_eventClasses[] = 'event'; $_ft_imgClass = !empty($img_thumb_src) && !empty($__shortC_arg['show_et_ft_img']) && $__shortC_arg['show_et_ft_img'] == 'yes' ? 'hasFtIMG' : null; $__attr_class = "evcal_list_a " . $event_description_trigger . " " . $_event_date_HTML['class_daylength'] . " " . ($event_type != 'nr' ? 'event_repeat ' : null) . $eventcard_script_class . $_ft_imgClass; $_ft_event = $__feature_events && !empty($ev_vals['_featured']) && $ev_vals['_featured'][0] == 'yes' ? ' ft_event ' : null; // class attribute for event $__a_class = $__attr_class . $_ft_event . $term_class . ($__featured ? ' featured_event' : null); // show limit styles if (!empty($__shortC_arg['show_limit']) && $__shortC_arg['show_limit'] == 'yes' && !empty($__shortC_arg['event_count']) && $__shortC_arg['event_count'] > 0 && $__count > $__shortC_arg['event_count']) { $show_limit_styles = 'style="display:none"'; $_eventClasses[] = 'evSL'; } else { $show_limit_styles = ''; } // event color for the row/box $___styles_a = $___styles = ''; // TILES STYLE if (!empty($__shortC_arg['tiles']) && $__shortC_arg['tiles'] == 'yes') { // boxy event colors // if featured image exists for an event if (!empty($img_med_src) && $__shortC_arg['tile_bg'] == 1) { $___styles_a[] = 'background-image: url(' . $img_med_src[0] . '); background-color:' . $event_color . ';'; $_eventClasses[] = 'hasbgimg'; } else { $___styles_a[] = 'background-color: ' . $event_color . ';'; } // tile height if ($__shortC_arg['tile_height'] != 0) { $___styles_a[] = 'height: ' . $__shortC_arg['tile_height'] . 'px;'; } // tile count if ($__shortC_arg['tile_count'] != 2) { $perct = (int) (100 / $__shortC_arg['tile_count']); $___styles_a[] = 'width: ' . $perct . '%;'; } $___styles = ''; } else { $___styles[] = 'border-color: ' . $event_color . ';'; $___styles_a[] = ''; } // div or an e tag $html_tag = $exlink_option == '1' ? 'div' : 'a'; // process passed on array if (!empty($___styles_a)) { $___styles_a = 'style="' . implode(' ', $___styles_a) . '"'; } if (!empty($___styles)) { $___styles = 'style="' . implode(' ', $___styles) . '"'; } $event_html_code = "<div id='event_{$event_id}' class='" . implode(' ', $_eventClasses) . "' data-event_id='{$event_id}' data-ri='{$__repeatInterval}' {$__scheme_attributes} {$show_limit_styles} {$___styles_a} data-colr='{$event_color}'>{$__scheme_data}\n\t\t\t\t<{$html_tag} id='" . $unique_id . "' class='" . $__a_class . "' " . $href . " " . $target_ex . " " . $___styles . " " . $gmap_trigger . " " . (!empty($gmap_api_status) ? $gmap_api_status : null) . " data-ux_val='{$exlink_option}'>{$html_info_line}</{$html_tag}>" . $html_event_detail_card . "<div class='clear end'></div></div>"; //evc_open // prepare output $months_event_array[] = array('event_id' => $event_id, 'srow' => $event_start_unix, 'erow' => $event_end_unix, 'content' => $event_html_code); } } else { $months_event_array; } return $months_event_array; }
/** * Content for each step of the CSV import stages * Via switch statement */ function step_content($steps) { global $eventon_csv; $evo_opt = get_option('evcal_options_evcal_1'); $event_type_count = evo_get_ett_count($evo_opt); $cmd_count = evo_calculate_cmd_count($evo_opt); switch ($steps) { // Step nuber 1 case 'uno': ?> <h2><?php _e('Step 1: Upload CSV file', 'eventon'); ?> </h2> <?php $this->form(); $this->print_guidelines(); break; // Step number 2 // Step number 2 case 'dos': if ($this->csv_verify_nonce_post('eventon_csvi_noncename')) { ?> <h2><?php _e('Step 2: Verify uploaded events', 'eventon'); ?> </h2> <p><?php _e('In this step you can see below the events we found from your uploaded CSV file. Please making sure the data is present correctly. You can also click on each event to deselect them from being imported to EventON - in the next step.', 'eventon'); ?> </p> <?php // verified nonce if (empty($_FILES['csv_import']['tmp_name'])) { $this->log['error'][] = 'No file uploaded, Please try again!.'; $this->print_messages(); $this->step_content('uno'); return; } // get csv helper file require_once $eventon_csv->plugin_path . '/assets/DataSource.php'; $time_start = microtime(true); $csv = new File_CSV_DataSource(); $file = $_FILES['csv_import']['tmp_name']; $this->stripBOM($file); if (!$csv->load($file)) { $this->log['error'][] = 'Failed to load file, Please try again!.'; $this->print_messages(); $this->step_content('uno'); return; } // pad shorter rows with empty values $csv->symmetrize(); // correct wordpress time zone for event posts $tz = get_option('timezone_string'); if ($tz && function_exists('date_default_timezone_set')) { date_default_timezone_set($tz); } ?> <form class="" action='<?php echo admin_url(); ?> admin.php?page=eventon&tab=evcal_csv&steps=thres' method="post" enctype="multipart/form-data"> <?php settings_fields('eventon_csvi_field_grp'); wp_nonce_field($eventon_csv->plugin_path, 'eventon_csvi_dos_noncename'); echo "<table id='eventon_csv_data_list' class='wp-list-table widefat'>\r\n\t\t\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t\t<th></th>\r\n\t\t\t\t\t\t\t<th title='Publish status for event'>Status</th>\r\n\t\t\t\t\t\t\t<th>Event Name</th>\r\n\t\t\t\t\t\t\t<th>Description</th>\r\n\t\t\t\t\t\t\t<th>Start Date & Time</th>\r\n\t\t\t\t\t\t\t<th>End Date & Time</th>\r\n\t\t\t\t\t\t\t<th>Location</th>\r\n\t\t\t\t\t\t\t<th>Organizer</th>\r\n\t\t\t\t\t\t\t</thead>"; // for each record $x = 0; foreach ($csv->connect() as $csv_data) { $ev_desc_class = !empty($csv_data['event_description']) ? 'inner_check' : 'inner_check_no'; $ev_location_class = !empty($csv_data['event_location']) ? 'inner_check' : 'inner_check_no'; $ev_orga_class = !empty($csv_data['event_organizer']) ? 'inner_check' : 'inner_check_no'; // event date validation if (!empty($csv_data['event_start_date'])) { if (preg_match('/^(\\d{1,2})\\/(\\d{1,2})\\/((?:\\d{2}){1,2})$/', $csv_data['event_start_date'])) { $event_start_date = $event_start_date_val = $csv_data['event_start_date']; } else { $event_start_date = "<p class='inner_check_no eventon_csv_icons'></p>"; $event_start_date_val = null; } } else { $event_start_date = "<p class='inner_check_no eventon_csv_icons'></p>"; $event_start_date_val = null; } // event start time validation if (!empty($csv_data['event_start_time'])) { if (preg_match('/(1[0-2]|0?[0-9]):[0-5]?[0-9]?:(AM|PM)/', $csv_data['event_start_time'])) { $event_start_time = $event_start_time_val = $csv_data['event_start_time']; } else { $event_start_time = "<p class='inner_check_no eventon_csv_icons'></p>"; $event_start_time_val = null; } } else { $event_start_time = "<p class='inner_check_no eventon_csv_icons'></p>"; $event_start_time_val = null; } // end time if (!empty($csv_data['event_end_time'])) { if (preg_match('/(1[0-2]|0?[0-9]):[0-5]?[0-9]?:(AM|PM)/', $csv_data['event_end_time'])) { $event_end_time = $event_end_time_val = $csv_data['event_end_time']; } else { $event_end_time = "<p class='inner_check_no eventon_csv_icons'></p>"; $event_end_time_val = $event_start_time_val; } } else { $event_end_time = "<p class='inner_check_no eventon_csv_icons'></p>"; $event_end_time_val = $event_start_time_val; } // event end date if (!empty($csv_data['event_end_date'])) { if (preg_match('/^(\\d{1,2})\\/(\\d{1,2})\\/((?:\\d{2}){1,2})$/', $csv_data['event_end_date'])) { $event_end_date = $event_end_date_val = $csv_data['event_end_date']; } else { $event_end_date = "<p class='inner_check_no eventon_csv_icons'></p>"; $event_end_date_val = $event_start_date_val; } } else { // no end date present $event_end_date = "<p class='inner_check_no eventon_csv_icons'></p>"; $event_end_date_val = $event_start_date_val; } // description $event_description = !empty($csv_data['event_description']) ? convert_chars(addslashes($csv_data['event_description'])) : null; // /print_r($csv_data); $updated_csv_data = $csv_data; $updated_csv_data['event_start_date'] = $event_start_date_val; $updated_csv_data['event_start_time'] = $event_start_time_val; $updated_csv_data['event_end_date'] = $event_end_date_val; $updated_csv_data['event_end_time'] = $event_end_time_val; $updated_csv_data['event_description'] = $event_description; ?> <tr class='csv_list_row'> <?php echo $this->_html_get_hidden_input_fields($updated_csv_data, $x, $event_type_count, $cmd_count); ?> <td class='col1'><p class='outter_check eventon_csv_icons'></p></td> <td><i><?php echo $csv_data['publish_status']; ?> </i></td> <td><?php echo $csv_data['event_name']; ?> </td> <td><p class='<?php echo $ev_desc_class; ?> eventon_csv_icons'></p></td> <td><?php echo $event_start_date . '<br/>' . $event_start_time; ?> </td> <td><?php echo $event_end_date . '<br/>' . $event_end_time; ?> </td> <td title='<?php echo $csv_data['event_location']; ?> '><p class='<?php echo $ev_location_class; ?> eventon_csv_icons'></p></td> <td title='<?php echo $csv_data['event_organizer']; ?> '><p class='<?php echo $ev_orga_class; ?> eventon_csv_icons'></p></td> </tr> <?php $x++; } echo "</table><p class='submit'><input type='submit' class='evo_admin_btn btn_tritiary' name='submit' value='Next: Import selected events' /></p></form>"; if (file_exists($file)) { @unlink($file); } $exec_time = microtime(true) - $time_start; $this->log['notice'][] = sprintf("<b>Found {$x} events in %.2f seconds from the csv file.</b>", $exec_time); $this->print_messages(); } break; // Step three // Step three case 'thres': if ($this->csv_verify_nonce_post('eventon_csvi_dos_noncename')) { if (isset($_POST['csvi'])) { $skipped = 0; $imported = 0; $event_names_imp = array(); $event_names_skip = array(); $time_start = microtime(true); //$date_format = eventon_get_timeNdate_format(); // Run through each event row and add them foreach ($_POST['csvi'] as $event) { // check is the event is selected to be imported if ($event['status'] == 'yes') { if ($post_id = $this->create_post($event)) { $imported++; $event_names_imp[] = $event['event_name']; /* Event Start and end time and dates */ if (isset($event['event_start_date']) && isset($event['event_end_date']) && isset($event['event_start_time']) && isset($event['event_end_time'])) { $start_time = explode(":", $event['event_start_time']); $end_time = explode(":", $event['event_end_time']); $date_array = array('evcal_start_date' => $event['event_start_date'], 'evcal_start_time_hour' => $start_time[0], 'evcal_start_time_min' => $start_time[1], 'evcal_st_ampm' => $start_time[2], 'evcal_end_date' => $event['event_end_date'], 'evcal_end_time_hour' => $end_time[0], 'evcal_end_time_min' => $end_time[1], 'evcal_et_ampm' => $end_time[2], 'evcal_allday' => !empty($event['all_day']) ? $event['all_day'] : 'no'); $proper_time = eventon_get_unix_time($date_array, 'm/d/Y'); // save required start time variables $this->create_custom_fields($post_id, 'evcal_srow', $proper_time['unix_start']); $this->create_custom_fields($post_id, 'evcal_erow', $proper_time['unix_end']); //$this->create_custom_fields($post_id, 'data', $date_format[1]); } // rest of the custom meta fields $this->save_custom_meta_fields($event, $post_id, $event_type_count, $cmd_count); } else { $skipped++; $event_names_skip[] = $event['event_name']; } } } // create notices if ($skipped > 0) { $this->log['notice'][] = "<b>Skipped {$skipped} events (most likely due to empty title or description).</b>"; } $exec_time = microtime(true) - $time_start; $this->log['notice'][] = sprintf("<b>Imported {$imported} events in %.2f seconds.</b>", $exec_time); $this->print_messages(); // ===== // Show the report on import process _e('<h2>Done!</h2>', 'eventon'); echo "<p>Please go to <a href='" . admin_url() . "edit.php?post_type=ajde_events'>All Events</a> to further customize the events you just imported.</p>"; // Success report if (count($event_names_imp) > 0) { echo "<table id='eventon_csv_data_list' class='wp-list-table widefat'>\r\n\t\t\t\t\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t\t\t\t<th>Event Name</th>\r\n\t\t\t\t\t\t\t\t\t<th>Status</th>\r\n\t\t\t\t\t\t\t\t\t</thead>"; foreach ($event_names_imp as $event_name) { echo "<tr><td>{$event_name}</td><td>Imported</td></tr>"; } // didnt import if (count($event_names_skip) > 0) { foreach ($event_names_skip as $event_name) { echo "<tr><td>{$event_name}</td><td>Not Imported</td></tr>"; } } echo "</table>"; } } } break; // default step // default step default: ?> <h3><?php _e('Import Events from a CSV file', 'eventon'); ?> </h3> <p>CSV Importer addon for EventON will allow you to export events from another event plugin or another event calendar, into CSV file format, and import those events into EventON Calendar.</p> <hr/> <a href='<?php echo admin_url(); ?> admin.php?page=eventon&tab=evcal_csv&steps=uno' class='csv_import_get_start_btn evo_admin_btn btn_prime'><?php _e('Get Started Now', 'eventon'); ?> </a> <?php $this->print_guidelines(); break; } // end switch statement }
function export_events() { // check if admin and loggedin if (!is_admin() && !is_user_logged_in()) { die('User not loggedin!'); } // verify nonce if (!wp_verify_nonce($_REQUEST['nonce'], 'eventon_download_events')) { die('Security Check Failed!'); } header('Content-Encoding: UTF-8'); header('Content-type: text/csv; charset=UTF-8'); header("Content-Disposition: attachment; filename=Eventon_events_" . date("d-m-y") . ".csv"); header("Pragma: no-cache"); header("Expires: 0"); echo ""; // UTF-8 BOM $evo_opt = get_option('evcal_options_evcal_1'); $event_type_count = evo_get_ett_count($evo_opt); $cmd_count = evo_calculate_cmd_count($evo_opt); $fields = apply_filters('evo_csv_export_fields', array('publish_status', 'evcal_event_color' => 'color', 'event_name', 'event_description', 'event_start_date', 'event_start_time', 'event_end_date', 'event_end_time', 'evcal_allday' => 'all_day', 'evo_hide_endtime' => 'hide_end_time', 'evcal_gmap_gen' => 'event_gmap', 'evo_year_long' => 'yearlong', '_featured' => 'featured', 'evo_location_id' => 'evo_location_id', 'evcal_location_name' => 'location_name', 'evcal_location' => 'event_location', 'evo_organizer_id' => 'evo_organizer_id', 'evcal_organizer' => 'event_organizer', 'evcal_subtitle' => 'evcal_subtitle', 'evcal_lmlink' => 'learnmore link', 'image_url', 'evcal_repeat' => 'repeatevent', 'evcal_rep_freq' => 'frequency', 'evcal_rep_num' => 'repeats', 'evp_repeat_rb' => 'repeatby')); $csvHeader = ''; foreach ($fields as $var => $val) { $csvHeader .= $val . ','; } // event types for ($y = 1; $y <= $event_type_count; $y++) { $_ett_name = $y == 1 ? 'event_type' : 'event_type_' . $y; $csvHeader .= $_ett_name . ','; } // for event custom meta data for ($z = 1; $z <= $cmd_count; $z++) { $_cmd_name = 'cmd_' . $z; $csvHeader .= $_cmd_name . ","; } $csvHeader = apply_filters('evo_export_events_csv_header', $csvHeader); $csvHeader .= "\n"; echo iconv("UTF-8", "ISO-8859-2", $csvHeader); $events = new WP_Query(array('posts_per_page' => -1, 'post_type' => 'ajde_events', 'post_status' => 'any')); if ($events->have_posts()) { date_default_timezone_set('UTC'); // for each event while ($events->have_posts()) { $events->the_post(); $__id = get_the_ID(); $pmv = get_post_meta($__id); $csvRow = ''; $csvRow .= get_post_status($__id) . ","; //echo (!empty($pmv['_featured'])?$pmv['_featured'][0]:'no').","; $csvRow .= (!empty($pmv['evcal_event_color']) ? $pmv['evcal_event_color'][0] : '') . ","; // event name $eventName = get_the_title(); $eventName = htmlentities($eventName); //$output = iconv("utf-8", "ascii//TRANSLIT//IGNORE", $eventName); //$output = preg_replace("/^'|[^A-Za-z0-9\s-]|'$/", '', $output); $csvRow .= '"' . $eventName . '",'; $event_content = get_the_content(); $event_content = str_replace('"', "'", $event_content); $event_content = str_replace(',', "\\,", $event_content); $event_content = htmlentities($event_content); $csvRow .= '"' . $event_content . '",'; // start time $start = !empty($pmv['evcal_srow']) ? $pmv['evcal_srow'][0] : ''; if (!empty($start)) { $csvRow .= date('n/j/Y,g:i:A', $start) . ','; } else { $csvRow .= "'','',"; } // end time $end = !empty($pmv['evcal_erow']) ? $pmv['evcal_erow'][0] : ''; if (!empty($end)) { $csvRow .= date('n/j/Y,g:i:A', $end) . ','; } else { $csvRow .= "'','',"; } // taxonomy meta $taxopt = get_option("evo_tax_meta"); // FOR EACH field $loctaxid = $orgtaxid = ''; $loctaxname = $orgtaxname = ''; foreach ($fields as $var => $val) { // yes no values if (in_array($val, array('featured', 'all_day', 'hide_end_time', 'event_gmap', 'evo_year_long', '_evo_month_long', 'repeatevent'))) { $csvRow .= (!empty($pmv[$var]) && $pmv[$var][0] == 'yes' ? 'yes' : 'no') . ','; } // organizer field if ($val == 'evo_organizer_id') { $Orgterms = wp_get_object_terms($__id, 'event_organizer'); if ($Orgterms && !is_wp_error($Orgterms)) { $orgtaxid = $Orgterms[0]->term_id; $orgtaxname = $Orgterms[0]->name; $csvRow .= '"' . $orgtaxid . '",'; } else { $csvRow .= ","; } } if ($val == 'evcal_organizer') { if ($orgtaxname) { $csvRow .= '"' . $orgtaxname . '",'; } elseif (!empty($pmv[$var])) { $value = htmlentities($pmv[$var][0]); $csvRow .= '"' . $value . '"'; } else { $csvRow .= ","; } continue; } // location tax field if ($val == 'evo_location_id') { $Locterms = wp_get_object_terms($__id, 'event_location'); if ($Locterms && !is_wp_error($Locterms)) { $loctaxid = $Locterms[0]->term_id; $loctaxname = $Locterms[0]->name; $csvRow .= '"' . $loctaxid . '",'; } else { $csvRow .= ","; } } if ($val == 'location_name') { if ($loctaxname) { $csvRow .= '"' . $loctaxname . '",'; } elseif (!empty($pmv[$var])) { $value = htmlentities($pmv[$var][0]); $csvRow .= '"' . $value . '"'; } else { $csvRow .= ","; } update_post_meta(3089, 'aa', $loctaxname . 'yy'); continue; } if ($val == 'event_location') { if ($loctaxid) { $termMeta = evo_get_term_meta('event_location', $loctaxid, $taxopt, true); $csvRow .= !empty($termMeta['location_address']) ? '"' . $termMeta['location_address'] . '",' : ","; } elseif (!empty($pmv[$var])) { $value = htmlentities($pmv[$var][0]); $csvRow .= '"' . $value . '"'; } else { $csvRow .= ","; } continue; } // skip fields if (in_array($val, array('featured', 'all_day', 'hide_end_time', 'event_gmap', 'evo_year_long', '_evo_month_long', 'repeatevent', 'color', 'publish_status', 'event_name', 'event_description', 'event_start_date', 'event_start_time', 'event_end_date', 'event_end_time', 'evo_organizer_id', 'evo_location_id'))) { continue; } // image if ($val == 'image_url') { $img_id = get_post_thumbnail_id($__id); if ($img_id != '') { $img_src = wp_get_attachment_image_src($img_id, 'full'); $csvRow .= $img_src[0] . ","; } else { $csvRow .= ","; } } else { if (!empty($pmv[$var])) { $value = htmlentities($pmv[$var][0]); $csvRow .= '"' . $value . '"'; } else { $csvRow .= ''; } $csvRow .= ','; } } // event types for ($y = 1; $y <= $event_type_count; $y++) { $_ett_name = $y == 1 ? 'event_type' : 'event_type_' . $y; $terms = get_the_terms($__id, $_ett_name); if ($terms && !is_wp_error($terms)) { $csvRow .= '"'; foreach ($terms as $term) { $csvRow .= $term->term_id . ','; //$csvRow.= $term->name.','; } $csvRow .= '",'; } else { $csvRow .= ","; } } // for event custom meta data for ($z = 1; $z <= $cmd_count; $z++) { $cmd_name = '_evcal_ec_f' . $z . 'a1_cus'; $csvRow .= !empty($pmv[$cmd_name]) ? '"' . str_replace('"', "'", $pmv[$cmd_name][0]) . '"' : ''; $csvRow .= ","; } $csvRow = apply_filters('evo_export_events_csv_row', $csvRow, $__id, $pmv); $csvRow .= "\n"; echo iconv("UTF-8", "ISO-8859-2", $csvRow); } } wp_reset_postdata(); }
public function get_all_event_data() { global $eventon; $evo_opt = $eventon->frontend->evo_options; $events = new WP_Query(array('posts_per_page' => -1, 'post_type' => 'ajde_events', 'post_status' => 'any')); $designated_meta_fields = array('publish_status' => 'publish_status', 'evcal_event_color' => 'color', 'evcal_subtitle' => 'event_subtitle', 'evcal_lmlink' => 'learnmore_link', '_featured' => 'featured', 'all_day' => 'all_day_event', 'evo_year_long' => 'year_long_event', '_evo_month_long' => 'month_long_event'); $output = array(); if ($events->have_posts()) { while ($events->have_posts()) { $events->the_post(); $event_id = $events->post->ID; $ev_vals = get_post_meta($event_id); // event name $output[$event_id]['name'] = get_the_title(); // date times $row_start = !empty($ev_vals['evcal_srow']) ? $ev_vals['evcal_srow'][0] : null; $row_end = !empty($ev_vals['evcal_erow']) ? $ev_vals['evcal_erow'][0] : $row_start; $output[$event_id]['start'] = $row_start; $output[$event_id]['end'] = $row_end; // details $output[$event_id]['details'] = $eventon->frontend->filter_evo_content(get_the_content()); // repeating event if (!empty($ev_vals['evcal_repeat']) && $ev_vals['evcal_repeat'][0] == 'yes' && !empty($ev_vals['repeat_intervals'])) { $output[$event_id]['repeats'] = unserialize($ev_vals['repeat_intervals'][0]); } // Event timezone if (!empty($ev_vals['evo_event_timezone'])) { $output[$event_id]['event_timezone'] = $ev_vals['evo_event_timezone'][0]; } // designated meta fields foreach ($designated_meta_fields as $field => $name) { if (!empty($ev_vals[$field])) { $output[$event_id][$name] = $ev_vals[$field][0]; } } // image if (has_post_thumbnail()) { $img_id = get_post_thumbnail_id($event_id); $img_src = wp_get_attachment_image_src($img_id, 'full'); if ($img_src) { $output[$event_id]['image_url'] = $img_src[0]; } } // location $location_terms = wp_get_post_terms($event_id, 'event_location'); if ($location_terms && !is_wp_error($location_terms)) { $location_tax_id = $location_terms[0]->term_id; $LocTermMeta = get_option("taxonomy_{$location_tax_id}"); // location taxonomy id $output[$event_id]['location_tax'] = $location_tax_id; $output[$event_id]['location_name'] = $location_terms[0]->name; // location address if (!empty($LocTermMeta['location_address'])) { $output[$event_id]['location_address'] = $LocTermMeta['location_address']; } // Lat Long if (!empty($LocTermMeta['location_lat']) && !empty($LocTermMeta['location_lon'])) { $output[$event_id]['location_lat'] = $LocTermMeta['location_lat']; $output[$event_id]['location_lon'] = $LocTermMeta['location_lon']; } } // Organizer $organizer_terms = wp_get_post_terms($event_id, 'event_organizer'); if ($organizer_terms && !is_wp_error($organizer_terms)) { $organizer_term_id = $organizer_terms[0]->term_id; $orgTermMeta = get_option("taxonomy_{$organizer_term_id}"); // organizer initial $output[$event_id]['organizer_tax'] = $organizer_term_id; $output[$event_id]['organier_name'] = $organizer_terms[0]->name; // organizer address if (!empty($orgTermMeta['evcal_org_address'])) { $output[$event_id]['organizer_address'] = $orgTermMeta['evcal_org_address']; } // organizer contact if (!empty($orgTermMeta['evcal_org_contact'])) { $output[$event_id]['organizer_contact'] = $orgTermMeta['evcal_org_contact']; } } // Custom fields $_cmf_count = evo_retrieve_cmd_count($evo_opt); for ($x = 1; $x < $_cmf_count + 1; $x++) { if (!empty($evo_opt['evcal_ec_f' . $x . 'a1']) && !empty($evo_opt['evcal__fai_00c' . $x]) && !empty($ev_vals["_evcal_ec_f" . $x . "a1_cus"])) { // check if hide this from eventCard set to yes if (empty($evo_opt['evcal_ec_f' . $x . 'a3']) || $evo_opt['evcal_ec_f' . $x . 'a3'] == 'no') { $output[$event_id]['customfield_' . $x] = array('x' => $x, 'value' => $ev_vals["_evcal_ec_f" . $x . "a1_cus"][0], 'valueL' => !empty($ev_vals["_evcal_ec_f" . $x . "a1_cusL"]) ? $ev_vals["_evcal_ec_f" . $x . "a1_cusL"][0] : null, '_target' => !empty($ev_vals["_evcal_ec_f" . $x . "_onw"]) ? $ev_vals["_evcal_ec_f" . $x . "_onw"][0] : null, 'type' => $evo_opt['evcal_ec_f' . $x . 'a2'], 'visibility_type' => !empty($evo_opt['evcal_ec_f' . $x . 'a4']) ? $evo_opt['evcal_ec_f' . $x . 'a4'] : 'all'); } } } // event types for ($y = 1; $y <= evo_get_ett_count($evo_opt); $y++) { $_ett_name = $y == 1 ? 'event_type' : 'event_type_' . $y; $terms = get_the_terms($event_id, $_ett_name); if ($terms && !is_wp_error($terms)) { foreach ($terms as $term) { $output[$event_id][$_ett_name][$term->term_id] = $term->name; } } } // all meta values $output[$event_id]['pmv'] = $ev_vals; } wp_reset_postdata(); } return $output; }