'',
'search_keywords' => '',
'search_datetimes' => array(),
'search_categories' => array(),
'search_event_types' => array(),
'search_ticket_prices' => array(),
'offset' => 0,
'posts_per_page' => 15,
'orderby' => 'date',
'order' => 'DESC',
'featured' => null,
'cancelled' => null,
'event_online' => null,
'fields' => 'all',
'lang' => '',
'post_status' => array(),
));
/**
* Perform actions that need to be done prior to the start of the event listings query.
* @param array $args Arguments used to retrieve event listings.
* @since 1.5
*/
do_action('wpem_', $args);
if(get_option('event_manager_hide_expired')) {
$post_status = 'publish';
} else {
$post_status = array('publish', 'expired');
}
$query_args = array(
'post_type' => 'event_listing',
'post_status' => $post_status,
'ignore_sticky_posts' => 1,
'offset' => absint($args['offset']),
'posts_per_page' => intval($args['posts_per_page']),
'orderby' => $args['orderby'],
'order' => $args['order'],
// phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query -- Required for event taxonomy filtering
'tax_query' => array(),
// phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query -- Required for event meta filtering
'meta_query' => array(),
'update_post_term_cache' => false,
'update_post_meta_cache' => false,
'cache_results' => false,
'fields' => $args['fields']
);
if($args['posts_per_page'] < 0) {
$query_args['no_found_rows'] = true;
}
if(!empty($args['search_location'])) {
$location_meta_keys = array('geolocation_formatted_address', '_event_location', '_event_pincode', 'geolocation_state_long');
$location_search = array('relation' => 'OR');
foreach($location_meta_keys as $meta_key) {
$location_search[] = array(
'key' => $meta_key,
'value' => $args['search_location'],
'compare' => 'LIKE',
'type' => 'char',
);
// Cleaned value (only if it's non-empty)
$cleaned = trim(preg_replace("/[^a-zA-Z,\s]/", "", $args['search_location']), ',');
if (!empty($cleaned)) {
$location_search[] = array(
'key' => $meta_key,
'value' => $cleaned,
'compare' => 'LIKE',
'type' => 'char',
);
}
}
$query_args['meta_query'][] = $location_search;
}
if(!is_null($args['featured'])) {
$query_args['meta_query'][] = array(
'relation' => 'OR',
array(
'key' => '_event_featured',
'value' => '1',
'compare' => $args['featured'] ? '=' : '!='
),
array(
'key' => '_featured',
'value' => '1',
'compare' => $args['featured'] ? '=' : '!='
)
);
$query_args['meta_query']['relation'] = 'AND';
}
if(!is_null($args['cancelled']) || 1 === absint(get_option('event_manager_hide_cancelled_events'))) {
$query_args['meta_query'][] = array(
'relation' => 'OR',
array(
'key' => '_event_cancelled',
'value' => '1',
'compare' => $args['cancelled'] ? '=' : '!='
),
array(
'key' => '_cancelled',
'value' => '1',
'compare' => $args['cancelled'] ? '=' : '!='
)
);
}
if(isset($args['event_online']) && !empty($args['event_online'])) {
if($args['event_online'] == 'true')
$event_online = 'yes';
elseif($args['event_online'] == 'false')
$event_online = 'no';
$query_args['meta_query'][] = array(
'key' => '_event_online',
'value' => $event_online,
'compare' => $args['event_online'] ? '=' : '!='
);
}
if(!empty($args['search_datetimes'][0])) {
$date_search = array();
$dates = json_decode($args['search_datetimes'][0], true);
// Get date and time setting defined in admin panel Event listing -> Settings -> Date & Time formatting
$datepicker_date_format = WP_Event_Manager_Date_Time::get_datepicker_format();
// Covert datepicker format into php date() function date format
$php_date_format = WP_Event_Manager_Date_Time::get_view_date_format_from_datepicker_date_format($datepicker_date_format);
if (!empty($dates)) {
$dates['start'] = WP_Event_Manager_Date_Time::date_parse_from_format($php_date_format, $dates['start']);
$dates['end'] = WP_Event_Manager_Date_Time::date_parse_from_format($php_date_format, $dates['end']);
$date_search['relation'] = 'AND';
$date_search[] = array(
'key' => '_event_start_date',
'value' => $dates['end'],
'compare' => '<=',
'type' => 'date'
);
$date_search[] = array(
'key' => '_event_start_date',
'value' => $dates['start'],
'compare' => '>=',
'type' => 'date'
);
apply_filters('event_manager_get_listings_date_filter_args', $date_search, $dates);
if(!empty( $date_search))
$query_args['meta_query'][] = $date_search;
}
}
if(!empty($args['search_categories'][0])) {
$field = is_numeric($args['search_categories'][0]) ? 'term_id' : 'slug';
$operator = 'all' === get_option('event_manager_category_filter_type', 'all') && sizeof($args['search_categories']) > 1 ? 'AND' : 'IN';
$query_args['tax_query'][] = array(
'taxonomy' => 'event_listing_category',
'field' => $field,
'terms' => array_values($args['search_categories']),
'include_children' => 'AND' !== $operator,
'operator' => $operator
);
}
if(!empty($args['search_event_types'][0])) {
$field = is_numeric($args['search_event_types'][0]) ? 'term_id' : 'slug';
$operator = 'all' === get_option('event_manager_event_type_filter_type', 'all') && sizeof($args['search_event_types']) > 1 ? 'AND' : 'IN';
$query_args['tax_query'][] = array(
'taxonomy' => 'event_listing_type',
'field' => $field,
'terms' => array_values($args['search_event_types']),
'include_children' => $operator !== 'AND' ,
'operator' => $operator
);
}
if(!empty($args['search_tags'][0])) {
$field = is_numeric($args['search_tags'][0]) ? 'term_id' : 'slug';
$operator = 'all' === get_option('event_manager_event_type_filter_type', 'all') && sizeof($args['search_tags']) > 1 ? 'AND' : 'IN';
$query_args['tax_query'][] = array(
'taxonomy' => 'event_listing_tag',
'field' => $field,
'terms' => array_values($args['search_tags']),
'include_children' => $operator !== 'AND' ,
'operator' => $operator
);
}
// Must match with event_ticket_options options value at wp-event-manager-form-submit-event.php
if(!empty($args['search_ticket_prices'][0])) {
$ticket_price_value='';
if($args['search_ticket_prices'][0]==='paid' || $args['search_ticket_prices'][0]==='ticket_price_paid') {
$ticket_price_value='paid';
} elseif($args['search_ticket_prices'][0]==='free' || $args['search_ticket_prices'][0]==='ticket_price_free') {
$ticket_price_value='free';
}
$ticket_search[] = array(
'key' => '_event_ticket_options',
'value' => $ticket_price_value,
'compare' => 'LIKE',
);
$query_args['meta_query'][] = $ticket_search;
}
if('featured' === $args['orderby']) {
// phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query -- Required for event meta filtering
$query_args['meta_query'] = array(
'relation' => 'AND',
'featured_clause' => array(
'key' => '_featured',
'compare' => 'EXISTS',
),
'event_start_date_clause' => array(
'key' => '_event_start_date',
'compare' => 'EXISTS',
),
'event_start_time_clause' => array(
'key' => '_event_start_time',
'compare' => 'EXISTS',
),
);
$query_args['orderby'] = array(
'featured_clause' => 'desc',
'event_start_date_clause' => $args['order'],
'event_start_time_clause' => $args['order'],
);
}
if('rand_featured' === $args['orderby']) {
$query_args['orderby'] = array(
'menu_order' => 'ASC',
'rand' => 'ASC',
);
}
// If orderby meta key _event_start_date
if('event_start_date' === $args['orderby']) {
$query_args['orderby'] ='meta_value';
// phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key -- Required for event ordering by start date
$query_args['meta_key'] ='_event_start_date';
$query_args['meta_type'] ='DATETIME';
}
// If orderby event_start_date and time both
if('event_start_date_time' === $args['orderby']) {
// phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query -- Required for event meta filtering
$query_args['meta_query'] = array(
'relation' => 'AND',
'event_start_date_clause' => array(
'key' => '_event_start_date',
'compare' => 'EXISTS',
),
'event_start_time_clause' => array(
'key' => '_event_start_time',
'compare' => 'EXISTS',
),
);
$query_args['orderby'] = array(
'event_start_date_clause' => $args['order'],
'event_start_time_clause' => $args['order'],
);
}
$event_manager_keyword = esc_attr($args['search_keywords']);
if(!empty($event_manager_keyword) && strlen($event_manager_keyword) >= apply_filters('event_manager_get_listings_keyword_length_threshold', 2)) {
$query_args['s'] = $event_manager_keyword;
add_filter('posts_search', 'wpem_get_event_listings_keyword_search');
}
$query_args = apply_filters('event_manager_get_listings', $query_args, $args);
if(empty($query_args['meta_query'])) {
unset($query_args['meta_query']);
}
if(empty($query_args['tax_query'])) {
unset($query_args['tax_query']);
} else {
// phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query -- Required for event taxonomy filtering
$query_args['meta_query']['tax_query'] = array($query_args['tax_query']);
$query_args['meta_query']['relation'] = 'AND';
// $query_args['tax_query']['relation'] = 'AND';
}
// Polylang LANG arg
if(function_exists('pll_current_language') && !empty($args['lang'])) {
$query_args['lang'] = $args['lang'];
}
// Filter argsget_event_listings_result_args', $query_args, $args);
do_action('wpem_before_get_event_listings', $query_args, $args);
// Cache results.
if(apply_filters('wpem_get_event_listings_cache_results', true)) {
$to_hash = wp_json_encode($query_args) . apply_filters('wpem_wpml_current_language', '');
$query_args_hash = 'em_' . md5($to_hash . EVENT_MANAGER_VERSION) . WP_Event_Manager_Cache_Helper::get_transient_version('wpem_get_event_listings');
$result = false;
$cached_query_results = true;
$cached_query_posts = get_transient($query_args_hash);
if(is_string($cached_query_posts)) {
$cached_query_posts = json_decode($cached_query_posts, false);
if($cached_query_posts
&& is_object($cached_query_posts)
&& isset($cached_query_posts->max_num_pages)
&& isset($cached_query_posts->found_posts)
&& isset($cached_query_posts->posts)
&& is_array($cached_query_posts->posts)
) {
$posts = array_map('get_post', $cached_query_posts->posts);
$result = new WP_Query();
$result->parse_query($query_args);
$result->posts = $posts;
$result->found_posts = intval($cached_query_posts->found_posts);
$result->max_num_pages = intval($cached_query_posts->max_num_pages);
$result->post_count = count($posts);
}
}
if(false === $result) {
$result = new WP_Query($query_args);
$cached_query_results = false;
$cacheable_result = array();
$cacheable_result['posts'] = array_values($result->posts);
$cacheable_result['found_posts'] = $result->found_posts;
$cacheable_result['max_num_pages'] = $result->max_num_pages;
set_transient($query_args_hash, wp_json_encode($cacheable_result), DAY_IN_SECONDS);
}
if($cached_query_results) {
// Random order is cached so shuffle them.
if('rand_featured' === $args['orderby']) {
usort($result->posts, 'wpem_shuffle_featured_post_results_helper');
} elseif('rand' === $args['orderby']) {
shuffle($result->posts);
}
}
} else {
// phpcs:ignore WordPressVIPMinimum.Performance.TaxQuery
$result = new WP_Query($query_args);
}
$result = apply_filters('wpem_get_event_listings_result_args',$result,$query_args);
do_action('wpem_after_get_event_listings', $query_args, $args);
remove_filter('posts_search', 'wpem_get_event_listings_keyword_search');
return $result;
}
endif;
if(!function_exists('wpem_shuffle_featured_post_results_helper')) :
/**
* Helper function to maintain featured status when shuffling results.
*
* @param WP_Post $a
* @param WP_Post $b
*
* @return bool
*/
function wpem_shuffle_featured_post_results_helper($a, $b) {
if(-1 === $a->menu_order || -1 === $b->menu_order) {
// Left is featured.
if(0 === $b->menu_order) {
return -1;
}
// Right is featured.
if(0 === $a->menu_order) {
return 1;
}
}
return wp_rand(-1, 1);
}
endif;
if(!function_exists('wpem_get_event_listings_keyword_search')) :
/**
* Join and where query for keywords
*
* @param array $search
* @return array
*/
function wpem_get_event_listings_keyword_search($search) {
global $wpdb, $event_manager_keyword;
// Searchable Meta Keys: set to empty to search all meta keys
$searchable_meta_keys = array(
'_event_location',
'_organizer_name',
'_event_tags',
'_event_address',
'_event_pincode',
'_event_location',
'_registration',
'_event_start_date',
'_event_start_time',
'_organizer_contact_person_name',
'_organizer_email',
'_organizer_website',
'_organizer_video',
'_organizer_youtube',
'_organizer_google_plus',
'_organizer_facebook',
'_organizer_linkedin',
'_organizer_twitter',
'_organizer_xing',
'_organizer_pinterest',
'_organizer_instagram',
);
$searchable_meta_keys = apply_filters('event_listing_searchable_meta_keys', $searchable_meta_keys);
$conditions = array();
// Search Post Meta
if(apply_filters('event_listing_search_post_meta', true)) {
// Only selected meta keys
if($searchable_meta_keys) {
$conditions[] = "{$wpdb->posts}.ID IN (SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key IN ('" . implode("','", array_map('esc_sql', $searchable_meta_keys)) . "') AND meta_value LIKE '%" . esc_sql($event_manager_keyword) . "%')";
} else {
// No meta keys defined, search all post meta value
$conditions[] = "{$wpdb->posts}.ID IN (SELECT post_id FROM {$wpdb->postmeta} WHERE meta_value LIKE '%" . esc_sql($event_manager_keyword) . "%')";
}
}
// Search taxonomy
$conditions[] = "{$wpdb->posts}.ID IN (SELECT object_id FROM {$wpdb->term_relationships} AS tr LEFT JOIN {$wpdb->term_taxonomy} AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id LEFT JOIN {$wpdb->terms} AS t ON tt.term_id = t.term_id WHERE t.name LIKE '%" . esc_sql($event_manager_keyword) . "%')";
/**
* Filters the conditions to use when querying event listings. Resulting array is joined with OR statements.
*
* @since 1.5
*
* @param array $conditions Conditions to join by OR when querying event listings.
* @param string $event_manager_keyword Search query.
*/
$conditions = apply_filters('event_listing_search_conditions', $conditions, $event_manager_keyword);
if(empty($conditions)) {
return $search;
}
$conditions_str = implode(' OR ', $conditions);
if(!empty($search)) {
$search = preg_replace('/^ AND /', '', $search);
$search = " AND ({$search} OR ({$conditions_str}))";
} else {
$search = " AND ({$conditions_str})";
}
return $search;
}
endif;
if(!function_exists('wpem_get_event_listing_post_statuses')) :
/**
* Get post statuses used for events.
*
* @access public
* @return array
*/
function wpem_get_event_listing_post_statuses() {
return apply_filters('event_listing_post_statuses', array(
'draft' => _x('Draft', 'post status', 'wp-event-manager'),
'expired' => _x('Expired', 'post status', 'wp-event-manager'),
'preview' => _x('Preview', 'post status', 'wp-event-manager'),
'pending' => _x('Pending approval', 'post status', 'wp-event-manager'),
'pending_payment' => _x('Pending payment', 'post status', 'wp-event-manager'),
'publish' => _x('Active', 'post status', 'wp-event-manager'),
));
}
endif;
if(!function_exists('wpem_get_featured_event_ids')) :
/**
* Gets the ids of featured events.
*
* @access public
* @return array
*/
function wpem_get_featured_event_ids() {
// phpcs:ignore WordPressVIPMinimum.Performance.TaxQuery
// phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query -- Simple equality comparison, optimized query
return get_posts(array(
'posts_per_page' => -1,
'suppress_filters' => false,
'post_type' => 'event_listing',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => '_featured',
'value' => '1',
'compare' => '=',
),
),
'fields' => 'ids'
));
}
endif;
if(!function_exists('wpem_get_event_listing_types')) :
/**
* Get event listing types.
*
* @access public
* @return array
*/
function wpem_get_event_listing_types($fields = 'all') {
if(!get_option('event_manager_enable_event_types')){
return array();
}else{
$args = array(
'fields' => $fields,
'hide_empty' => false,
'order' => 'ASC',
'orderby' => 'name'
);
$args = apply_filters('wpem_get_event_listing_types_args', $args);
// Prevent users from filtering the taxonomy
$args['taxonomy'] = 'event_listing_type';
return get_terms($args);
}
}
endif;
if(!function_exists('wpem_get_event_listing_categories')) :
/**
* Get event categories.
*
* @access public
* @return array
*/
function wpem_get_event_listing_categories() {
if(!get_option('event_manager_enable_categories')) {
return array();
}
$args = array(
'orderby' => 'name',
'order' => 'ASC',
'hide_empty' => false,
);
/**
* Change the category query arguments.
*
* @since 2.5
*
* @param array $args
*/
$args = apply_filters('wpem_get_event_listing_category_args', $args);
// Prevent users from filtering the taxonomy.
$args['taxonomy'] = 'event_listing_category';
return get_terms($args);
}
endif;
if(!function_exists('event_manager_get_filtered_links')) :
/**
* Shows links after filtering events.
*/
function event_manager_get_filtered_links($args = array()) {
$search_datetimes= array();
$search_categories = array();
$search_event_types= array();
$search_ticket_prices= array();
// Convert to slugs
if($args['search_categories']) {
foreach($args['search_categories'] as $category) {
if(is_numeric($category)) {
$category_object = get_term_by('id', $category, 'event_listing_category');
if(!is_wp_error($category_object)) {
$search_categories [] = $category_object->slug;
}
} else {
$search_categories [] = $category;
}
}
}
// Convert to slugs
if($args['search_event_types']) {
foreach($args['search_event_types'] as $type) {
if(is_numeric($type)) {
$type_object = get_term_by('id', $type, 'event_listing_type');
if(!is_wp_error($type_object)) {
$search_event_types[] = $type_object->slug;
}
} else {
$search_event_types[] = $type;
}
}
}
// Datetimes
// Add just key like datetime_any, datetime_today..
if($args['search_datetimes']) {
foreach($args['search_datetimes'] as $datetime) {
$search_datetimes[]=$datetime;
}
}
// Ticket price
// Add just key like ticket_price_any, ticket_price_paid..
if($args['search_ticket_prices']) {
foreach($args['search_ticket_prices'] as $ticket_price) {
$search_ticket_prices[]=$ticket_price;
}
}
$links = apply_filters('event_manager_event_filters_showing_events_links', array(
'reset' => array(
'name' => __('Reset', 'wp-event-manager'),
'url' => '#'
),
'rss_link' => array(
'name' => __('RSS', 'wp-event-manager'),
'url' => wpem_get_event_listing_rss_link(apply_filters('event_manager_get_listings_custom_filter_rss_args', array(
'search_keywords' => $args['search_keywords'],
'search_location' => $args['search_location'],
'search_datetimes' => implode(',', $search_datetimes),
'search_categories' => implode(',', $search_categories),
'search_event_types' => implode(',', $search_event_types),
'search_ticket_prices' => implode(',', $search_ticket_prices)
)))
)
), $args);
if(!$args['search_keywords'] && !$args['search_location'] && !$args['search_datetimes'] && !$args['search_categories'] && !$args['search_event_types'] && !$args['search_ticket_prices'] && !apply_filters('event_manager_get_listings_custom_filter', false)) {
unset($links['reset']);
}
$return = '';
$i = 1;
foreach($links as $key => $link) {
if($i > 1)
$return .= ' | ';
$return .= '' . $link['name'] . '';
$i++;
}
return $return;
}
endif;
if(!function_exists('wpem_get_event_listing_rss_link')) :
/**
* Get the Event Listing RSS link.
*
* @return string
*/
function wpem_get_event_listing_rss_link($args = array()) {
$rss_link = add_query_arg(urlencode_deep(array_merge(array('feed' => 'event_feed'), $args)), home_url());
return $rss_link;
}
endif;
if(!function_exists('wp_event_manager_notify_new_user')) :
/**
* Handle account creation.
*
* @param int $user_id
* @param string $password
*/
function wp_event_manager_notify_new_user($user_id, $password) {
global $wp_version;
if(version_compare($wp_version, '4.3.1', '<')) {
wp_new_user_notification( $user_id );
} else {
$notify = 'admin';
if(empty($password)) {
$notify = 'both';
}
wp_new_user_notification($user_id, null, $notify);
}
}
endif;
if(!function_exists('wp_event_manager_create_account')) :
/**
* Handle account creation.
*
* @param array $args containing username, email, role
* @param string $deprecated role string
* @return WP_error | bool was an account created?
*/
function wp_event_manager_create_account($args, $deprecated = '') {
global $current_user;
global $wp_version;
// Soft Deprecated in 1.0
if(!is_array($args)) {
$args = array(
'username' => '',
'password' => false,
'email' => $args,
'role' => $deprecated,
);
} else {
$defaults = array(
'username' => '',
'email' => '',
'password' => false,
'role' => get_option('default_role')
);
$args = wp_parse_args($args, $defaults);
extract($args);
}
$username = sanitize_user($args['username'], true);
$email = apply_filters('wpem_user_registration_email', sanitize_email($args['email']));
if(empty($email)) {
return new WP_Error('validation-error', __('Invalid email address.', 'wp-event-manager'));
}
if(empty($username)) {
$username = sanitize_user(current(explode('@', $email)));
}
if(!is_email($email)) {
return new WP_Error('validation-error', __('Your email address isn’t correct.', 'wp-event-manager'));
}
if(email_exists($email)) {
return new WP_Error('validation-error', __('This email is already registered, please choose another one.', 'wp-event-manager'));
}
// Ensure username is unique
$append = 1;
$o_username = $username;
while (username_exists($username)) {
$username = $o_username . $append;
$append ++;
}
// Final error checking
$reg_errors = new WP_Error();
$reg_errors = apply_filters('event_manager_registration_errors', $reg_errors, $username, $email);
do_action('event_manager_register_post', $username, $email, $reg_errors);
if($reg_errors->get_error_code()) {
return $reg_errors;
}
// Create account
$new_user = array(
'user_login' => $username,
'user_pass' => $password,
'user_email' => $email,
'role' => $role
);
// User is forced to set up account with email sent to them. This password will remain a secret.
if(empty($new_user['user_pass'])) {
$new_user['user_pass'] = wp_generate_password();
}
$user_id = wp_insert_user(apply_filters('event_manager_create_account_data', $new_user));
if(is_wp_error($user_id)) {
return $user_id;
}
// Notify
/**
* Send notification to new users.
*
* @since 1.8
*
* @param int $user_id
* @param string|bool $password
* @param array $new_user {
* Information about the new user.
*
* @type string $user_login Username for the user.
* @type string $user_pass Password for the user (may be blank).
* @type string $user_email Email for the new user account.
* @type string $role New user's role.
* }
*/
do_action('event_manager_notify_new_user', $user_id, $password, $new_user);
// Login
if(!is_user_logged_in()){
wp_set_auth_cookie($user_id, true, is_ssl());
$current_user = get_user_by('id', $user_id);
}
return true;
}
endif;
/**
* True if an the user can post a event. If accounts are required, and reg is enabled, users can post (they signup at the same time).
*
* @return bool
*/
function event_manager_user_can_post_event() {
$can_post = true;
if(!is_user_logged_in()) {
if(event_manager_user_requires_account() && !event_manager_enable_registration()) {
$can_post = false;
}
}
return apply_filters('event_manager_user_can_post_event', $can_post);
}
/**
* True if an the user can edit a event.
*
* @return bool
*/
function event_manager_user_can_edit_event($event_id) {
$can_edit = true;
if(!is_user_logged_in() || !$event_id) {
$can_edit = false;
} else {
$event = get_post($event_id);
if(!$event || (absint($event->post_author) !== get_current_user_id() && !current_user_can('edit_post', $event_id))) {
$can_edit = false;
}
}
return apply_filters('event_manager_user_can_edit_event', $can_edit, $event_id);
}
/**
* True if the user can edit an organizer.
*
* @param int $organizer_id
* @return bool
*/
function event_manager_user_can_edit_organizer($organizer_id) {
$can_edit = true;
if (!is_user_logged_in() || !$organizer_id) {
$can_edit = false;
} else {
$organizer = get_post($organizer_id);
if (!$organizer || $organizer->post_type !== 'event_organizer') {
$can_edit = false;
} elseif (absint($organizer->post_author) !== get_current_user_id() && !current_user_can('edit_post', $organizer_id)) {
$can_edit = false;
}
}
return apply_filters('event_manager_user_can_edit_organizer', $can_edit, $organizer_id);
}
/**
* True if the user can edit a venue.
*
* @param int $venue_id
* @return bool
*/
function event_manager_user_can_edit_venue($venue_id) {
$can_edit = true;
if (!is_user_logged_in() || !$venue_id) {
$can_edit = false;
} else {
$venue = get_post($venue_id);
if (!$venue || $venue->post_type !== 'event_venue') {
$can_edit = false;
} elseif (absint($venue->post_author) !== get_current_user_id() && !current_user_can('edit_post', $venue_id)) {
$can_edit = false;
}
}
return apply_filters('event_manager_user_can_edit_venue', $can_edit, $venue_id);
}
/**
* Checks if the visitor is currently on a WPEM page, event listing, or taxonomy.
*
* @return bool
* @since 2.5
*/
function wpem_is_wpem_word() {
/**
* Filter the result of wpem_is_wpem_word().
*/
return apply_filters('wpem_is_wpem_word', (wpem_is_page() || wpem_has_shortcode() || wpem_is_event_listing() || wpem_is_taxonomy()));
}
/**
* Checks if the visitor is currently on a WPEM page.
*
* @return bool
* @since 2.5
*/
function wpem_is_page() {
$wpem_is_page = is_post_type_archive('event_listing');
if(!$wpem_is_page) {
$wpem_page_ids = array_filter(
array(
get_option('event_manager_submit_event_form_page_id', false),
get_option('event_manager_event_dashboard_page_id', false),
get_option('event_manager_events_page_id', false),
)
);
/**
* Filters a list of all page IDs related to WPEM.
*/
$wpem_page_ids = array_unique(apply_filters('event_manager_page_ids', $wpem_page_ids));
$wpem_is_page = is_page($wpem_page_ids);
}
/**
* Filter the result of wpem_is_page().
*/
return apply_filters('wpem_is_page', $wpem_is_page);
}
/**
* Checks if the provided content or the current single page or post has a WPEM shortcode.
*
* @param string|null $content Content to check. If not provided, it uses the current post content.
* @param string|array|null $tag Check specifically for one or more shortcodes. If not provided, checks for any WPJM shortcode.
*
* @return bool
*/
function wpem_has_shortcode($content = null, $tag = null) {
global $post;
$wpem_has_shortcode = false;
if(null === $content && is_singular() && is_a($post, 'WP_Post')) {
$content = $post->post_content;
}
if(!empty($content)) {
$wpem_shortcodes = array('submit_event_form', 'event_dashboard', 'events', 'event', 'event_summary', 'event_apply');
/**
* Filters a list of all shortcodes associated with WPEM.
*
* @since 2.5
*
* @param string[] $wpem_shortcodes
*/
$wpem_shortcodes = array_unique(apply_filters('event_manager_shortcodes', $wpem_shortcodes));
if(null !== $tag) {
if(!is_array($tag)) {
$tag = array($tag);
}
$wpem_shortcodes = array_intersect($wpem_shortcodes, $tag);
}
foreach($wpem_shortcodes as $shortcode) {
if(has_shortcode($content, $shortcode)) {
$wpem_has_shortcode = true;
break;
}
}
}
/**
* Filter the result of wpem_has_shortcode().
*
* @since 2.5
*
* @param bool $wpem_has_shortcode
*/
return apply_filters('wpem_has_shortcode', $wpem_has_shortcode);
}
/**
* Checks if the current page is a event listing.
*
* @since 2.5
*
* @return bool
*/
function wpem_is_event_listing() {
return is_singular(array('event_listing'));
}
/**
* Checks if the visitor is on a page for a WPEM taxonomy.
*
* @since 2.5
*
* @return bool
*/
function wpem_is_taxonomy() {
return is_tax(get_object_taxonomies('event_listing'));
}
/**
* True if only one type allowed per event.
*
* @return bool
*/
function event_manager_multiselect_event_type() {
if(!class_exists('WPEM_Event_Manager_Form_Submit_Event')) {
include_once(EVENT_MANAGER_PLUGIN_DIR . '/forms/wp-event-manager-form-abstract.php');
include_once(EVENT_MANAGER_PLUGIN_DIR . '/forms/wp-event-manager-form-submit-event.php');
}
$form_submit_event_instance = call_user_func(array('WPEM_Event_Manager_Form_Submit_Event', 'instance'));
$event_fields = $form_submit_event_instance->wpem_merge_with_custom_fields();
if(isset($event_fields['event']['event_type']['type']) && $event_fields['event']['event_type']['type'] === 'term-multiselect') {
return apply_filters('event_manager_multiselect_event_type', true);
} else {
return apply_filters('event_manager_multiselect_event_type', false);
}
}
/**
* True if only one category allowed per event.
*
* @return bool
*/
function event_manager_multiselect_event_category() {
if(!class_exists('WPEM_Event_Manager_Form_Submit_Event')) {
include_once(EVENT_MANAGER_PLUGIN_DIR . '/forms/wp-event-manager-form-abstract.php');
include_once(EVENT_MANAGER_PLUGIN_DIR . '/forms/wp-event-manager-form-submit-event.php');
}
$form_submit_event_instance = call_user_func(array('WPEM_Event_Manager_Form_Submit_Event', 'instance'));
$event_fields = $form_submit_event_instance->wpem_merge_with_custom_fields();
if(isset($event_fields['event']['event_category']['type']) && $event_fields['event']['event_category']['type'] === 'term-multiselect') {
return apply_filters('event_manager_multiselect_event_category', true);
} else {
return apply_filters('event_manager_multiselect_event_category', false);
}
}
/**
* True if registration is enabled.
*
* @return bool
*/
function event_manager_enable_registration() {
return apply_filters('event_manager_enable_registration', get_option('event_manager_enable_registration') == 1 ? true : false);
}
/**
* True if usernames are generated from email addresses.
*
* @return bool
*/
function event_manager_generate_username_from_email() {
return apply_filters('event_manager_generate_username_from_email', get_option('event_manager_generate_username_from_email') == 1 ? true : false);
}
/**
* True if an account is required to post a event.
*
* @return bool
*/
function event_manager_user_requires_account() {
return apply_filters('event_manager_user_requires_account', get_option('event_manager_user_requires_account') == 1 ? true : false);
}
/**
* True if users are allowed to edit submissions that are pending approval.
*
* @return bool
*/
function event_manager_user_can_edit_pending_submissions() {
return apply_filters('event_manager_user_can_edit_pending_submissions', get_option('event_manager_user_can_edit_pending_submissions') == 1 ? true : false);
}
/**
* Based on wp_dropdown_categories, with the exception of supporting multiple selected categories, event types.
* @see wp_dropdown_categories
*/
function event_manager_dropdown_selection($args = '') {
$defaults = array(
'orderby' => 'id',
'order' => 'ASC',
'show_count' => 0,
'hide_empty' => 1,
'child_of' => 0,
'exclude' => '',
'echo' => 1,
'selected' => 0,
'hierarchical' => 0,
'name' => 'cat',
'id' => '',
'class' => 'event-manager-category-dropdown ' . (is_rtl() ? 'chosen-rtl' : ''),
'depth' => 0,
'taxonomy' => 'event_listing_category',
'value' => 'id',
'multiple' => true,
'show_option_all' => false,
'placeholder' => __('Choose a Category', 'wp-event-manager'),
'no_results_text' => __('No results match', 'wp-event-manager'),
'multiple_text' => __('Choose Categories', 'wp-event-manager'),
);
$defaults = apply_filters('event_manager_dropdown_selection_args', $defaults);
$args = wp_parse_args($args, $defaults);
foreach ($args as $arg_key => $arg_value) {
if (is_array($arg_value)) {
$args[$arg_key] = array_map('sanitize_text_field', $arg_value);
} else {
$args[$arg_key] = sanitize_text_field($arg_value);
}
}
$nonce = wp_create_nonce('event_manager_dropdown_selection');
if (!wp_verify_nonce(sanitize_text_field(wp_unslash($nonce)), 'event_manager_dropdown_selection')) {
return;
}
$query = wp_parse_args($args, $defaults);
if(!isset($query['pad_counts']) && $query['show_count'] && $query['hierarchical']) {
$query['pad_counts'] = true;
}
extract($query);
// Store in a transient to help sites with many cats
$categories_hash = 'em_cats_' . md5(json_encode($query) . WP_Event_Manager_Cache_Helper::get_transient_version('em_get_' . $query['taxonomy']));
$categories = get_transient($categories_hash);
if(empty($categories)) {
$categories = get_terms([
'taxonomy' => $taxonomy,
'orderby' => $query['orderby'],
'order' => $query['order'],
'hide_empty' => $query['hide_empty'],
'child_of' => $query['child_of'],
'exclude' => $query['exclude'],
'hierarchical' => $query['hierarchical']
]);
set_transient($categories_hash, $categories, DAY_IN_SECONDS * 30);
}
$categories = apply_filters('event_manager_dropdown_selection_' . $taxonomy, $categories);
$name = esc_attr($name);
$class = esc_attr($class);
$id = $query['id'] ? $query['id'] : $query['name'];
if($taxonomy === 'event_listing_type'):
$placeholder = isset($placeholder) ? $placeholder : __('Choose an event type', 'wp-event-manager');
$multiple_text = isset($multiple_text) ? $multiple_text :__('Choose event types', 'wp-event-manager');
endif;
$output = "\n";
if($echo) {
echo wp_kses($output, array(
'select' => array(
'name' => true,
'id' => true,
'class' => true,
'multiple' => true,
'data-placeholder' => true,
'data-no_results_text' => true,
'data-multiple_text' => true
),
'option' => array(
'value' => true,
'selected' => true,
'class' => true
),
'optgroup' => array(
'label' => true
)
));
}
return $output;
}
/**
* Get the page ID of a page if set, with PolyLang compat.
* @param string $page e.g. event_dashboard, submit_event_form, events
* @return int
*/
function event_manager_get_page_id($page){
$page_id = get_option('event_manager_' . $page . '_page_id', false);
if($page_id) {
return apply_filters('wpem_wpml_object_id', absint(function_exists('pll_get_post') ? pll_get_post($page_id) : $page_id), 'page', TRUE);
} else {
return 0;
}
}
/**
* Get the permalink of a page if set.
* @param string $page e.g. event_dashboard, submit_event_form, events
* @return string|bool
*/
function event_manager_get_permalink($page) {
if($page_id = event_manager_get_page_id($page)) {
return get_permalink($page_id);
} else {
return false;
}
}
/**
* Filters the upload dir when $event_manager_upload is true.
* @param array $pathdata
* @return array
*/
function event_manager_upload_dir($pathdata) {
global $event_manager_upload, $event_manager_uploading_file;
if(!empty($event_manager_upload)) {
$dir = untrailingslashit(apply_filters('event_manager_upload_dir', 'event-manager-uploads/' . sanitize_key($event_manager_uploading_file), sanitize_key($event_manager_uploading_file)));
if(empty($pathdata['subdir'])) {
$pathdata['path'] = $pathdata['path'] . '/' . $dir;
$pathdata['url'] = $pathdata['url'] . '/' . $dir;
$pathdata['subdir'] = '/' . $dir;
} else {
$new_subdir = '/' . $dir . $pathdata['subdir'];
$pathdata['path'] = str_replace($pathdata['subdir'], $new_subdir, $pathdata['path']);
$pathdata['url'] = str_replace($pathdata['subdir'], $new_subdir, $pathdata['url']);
$pathdata['subdir'] = str_replace($pathdata['subdir'], $new_subdir, $pathdata['subdir']);
}
}
return $pathdata;
}
add_filter('upload_dir', 'event_manager_upload_dir');
/**
* Prepare files for upload by standardizing them into an array. This adds support for multiple file upload fields.
* @param array $file_data
* @return array
*/
function event_manager_prepare_uploaded_files($file_data) {
$files_to_upload = array();
// Bail early if file data is empty or not an array
if ( empty( $file_data ) || ! is_array( $file_data ) || empty( $file_data['name'] ) ) {
return $files_to_upload;
}
if(is_array($file_data['name'])) {
foreach($file_data['name'] as $file_data_key => $file_data_value) {
if($file_data['name'][$file_data_key]) {
$type = wp_check_filetype($file_data['name'][$file_data_key]); // Map mime types to those that WordPress knows.
$files_to_upload[] = array(
'name' => $file_data['name'][$file_data_key],
'type' => $type['type'],
'tmp_name' => $file_data['tmp_name'][$file_data_key],
'error' => $file_data['error'][$file_data_key],
'size' => $file_data['size'][$file_data_key]
);
}
}
} else {
$type = wp_check_filetype($file_data['name']); // Map mime types to those that WordPress knows.
$file_data['type'] = $type['type'];
$files_to_upload[] = $file_data;
}
return apply_filters('event_manager_prepare_uploaded_files', $files_to_upload);
}
/**
* Upload a file using WordPress file API.
* @param array $file_data Array of $_FILE data to upload.
* @param array $args Optional arguments
* @return array|WP_Error Array of objects containing either file information or an error
*/
function event_manager_upload_file($file, $args = array()) {
global $event_manager_upload, $event_manager_uploading_file;
require_once(ABSPATH . 'wp-admin/includes/image.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/media.php');
$args = wp_parse_args($args, array(
'file_key' => '',
'file_label' => '',
'allowed_mime_types' => ''
));
$event_manager_upload = true;
$event_manager_uploading_file = $args['file_key'];
$uploaded_file = new stdClass();
if('' === $args['allowed_mime_types']) {
$allowed_mime_types = event_manager_get_allowed_mime_types($event_manager_uploading_file);
} else {
$allowed_mime_types = $args['allowed_mime_types'];
}
/**
* Filter file configuration before upload.
*
* This filter can be used to modify the file arguments before being uploaded, or return a WP_Error
* object to prevent the file from being uploaded, and return the error.
*
* @since 1.0
*
* @param array $file Array of $_FILE data to upload.
* @param array $args Optional file arguments
* @param array $allowed_mime_types Array of allowed mime types from field config or defaults
*/
$file = apply_filters('event_manager_upload_file_pre_upload', $file, $args, $allowed_mime_types);
if(is_wp_error($file)) {
return $file;
}
if(!in_array($file['type'], $allowed_mime_types)) {
if($args['file_label']) {
return new WP_Error('upload', sprintf('"%s" (filetype %s) needs to be one of the following file types: %s', 'wp-event-manager'), $args['file_label'], $file['type'], implode(', ', array_keys($args['allowed_mime_types']))) ;
} else {
if(is_array($args['allowed_mime_types'])){
return new WP_Error('upload', sprintf('Uploaded files need to be one of the following file types: %s', 'wp-event-manager'), implode(', ', array_keys($args['allowed_mime_types']))) ;
}
}
} else {
$upload = wp_handle_upload($file, apply_filters('submit_event_wp_handle_upload_overrides', array('test_form' => false)));
if(!empty($upload['error'])) {
return new WP_Error('upload', $upload['error']);
} else {
$uploaded_file->url = $upload['url'];
$uploaded_file->file = $upload['file'];
$uploaded_file->name = basename($upload['file']);
$uploaded_file->type = $upload['type'];
$uploaded_file->size = $file['size'];
$uploaded_file->extension = substr(strrchr($uploaded_file->name, '.'), 1);
}
}
$event_manager_upload = false;
$event_manager_uploading_file = '';
return $uploaded_file;
}
/**
* Get duplicate post link.
* @param string
* @return array
*/
function wpem_get_duplicate_post_link($post_id) {
if (!post_type_exists(get_post_type($post_id))) {
return '';
}
$nonce = wp_create_nonce('duplicate_event_' . $post_id);
return admin_url('admin.php?action=duplicate_event&post=' . $post_id . '&_wpnonce=' . $nonce);
}
/**
* Allowed Mime types specifically for WP Event Manager.
* @param string $field Field used.
* @return array Array of allowed mime types
*/
function event_manager_get_allowed_mime_types($field = ''){
if('organizer_logo' === $field) {
$allowed_mime_types = array(
'jpg|jpeg|jpe' => 'image/jpeg',
'gif' => 'image/gif',
'png' => 'image/png',
);
} else {
$allowed_mime_types = array(
'jpg|jpeg|jpe' => 'image/jpeg',
'gif' => 'image/gif',
'png' => 'image/png',
'pdf' => 'application/pdf',
'doc' => 'application/msword',
'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
);
}
/**
* Mime types to accept in uploaded files.
* Default is image, pdf, and doc(x) files.
*/
return apply_filters('event_manager_mime_types', $allowed_mime_types, $field);
}
/**
* Calculate and return the event expiry date.
* @param int $event_id
* @return string
*/
function wpem_get_event_expiry_date($event_id) {
//get set listing expiry time duration
$option = get_option('event_manager_submission_expire_options');
$event_start_date = get_post_meta($event_id, '_event_start_date', true);
$event_end_date = get_post_meta($event_id, '_event_end_date', true);
$expiry_base_date = $event_end_date ? $event_end_date : $event_start_date;
if($option==='event_end_date') {
if($expiry_base_date)
return gmdate('Y-m-d', strtotime($expiry_base_date));
} else {
// Get duration from the admin settings if set.
$duration = get_post_meta($event_id, '_event_duration', true);
if(!$duration) {
$duration = absint(get_option('event_manager_submission_duration'));
}
if($duration)
return gmdate('Y-m-d', strtotime("+{$duration} days", strtotime($expiry_base_date)));
}
return '';
}
/**
* Duplicate a listing.
* @param int $post_id
* @return int 0 on fail or the post ID.
*/
function event_manager_duplicate_listing($post_id) {
if(empty($post_id) || !($post = get_post($post_id))) {
return 0;
}
global $wpdb;
/**
* Duplicate the post.
*/
$new_post_id = wp_insert_post(array(
'comment_status' => $post->comment_status,
'ping_status' => $post->ping_status,
'post_author' => $post->post_author,
'post_content' => $post->post_content,
'post_excerpt' => $post->post_excerpt,
'post_name' => $post->post_name,
'post_parent' => $post->post_parent,
'post_password' => $post->post_password,
'post_status' => 'preview',
'post_title' => $post->post_title,
'post_type' => $post->post_type,
'to_ping' => $post->to_ping,
'menu_order' => $post->menu_order
));
/**
* Copy taxonomies.
*/
$wpem_taxonomies = get_object_taxonomies($post->post_type);
foreach($wpem_taxonomies as $taxonomy) {
$post_terms = wp_get_object_terms($post_id, $taxonomy, array('fields' => 'slugs'));
wp_set_object_terms($new_post_id, $post_terms, $taxonomy, false);
}
/*
* Duplicate post meta, aside from some reserved fields.
*/
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$post_meta = $wpdb->get_results($wpdb->prepare("SELECT meta_key, meta_value FROM {$wpdb->postmeta} WHERE post_id=%d", $post_id));
do_action('event_manager_duplicate_listing_meta_start', $post_meta, $post, $new_post_id);
if(!empty($post_meta)) {
$post_meta = wp_list_pluck($post_meta, 'meta_value', 'meta_key');
foreach($post_meta as $meta_key => $meta_value) {
if(in_array($meta_key, apply_filters('event_manager_duplicate_listing_ignore_keys', array('_cancelled', '_featured', '_event_expires', '_event_duration')))) {
continue;
}
if($meta_key === '_view_count'){
$meta_value=0;
}
update_post_meta($new_post_id, $meta_key, maybe_unserialize($meta_value));
}
}
update_post_meta($new_post_id, '_cancelled', 0);
update_post_meta($new_post_id, '_featured', 0);
do_action('event_manager_duplicate_listing_meta_end', $post_meta, $post, $new_post_id);
return $new_post_id;
}
/**
* Checks if the user can upload a file via the Ajax endpoint.
*
* @since 1.7
* @return bool
*/
function event_manager_user_can_upload_file_via_ajax() {
$can_upload = is_user_logged_in() && event_manager_user_can_post_event();
/**
* Override ability of a user to upload a file via Ajax.
*
* @since 1.7
* @param bool $can_upload True if they can upload files from Ajax endpoint.
*/
return apply_filters('event_manager_user_can_upload_file_via_ajax', $can_upload);
}
/**
* Here add post types of event.
*
* @param $types
* @return $types
*/
function event_manager_add_post_types($types) {
$types[] = 'event_listing';
return $types;
}
add_filter('post_types_to_delete_with_user', 'event_manager_add_post_types', 10);
/**
* Checks to see if the standard password setup email should be used.
*
* @return bool True if they are to use standard email, false to allow user to set password at first event creation.
* @since 1.8
*/
function event_manager_use_standard_password_setup_email() {
$use_standard_password_setup_email = false;
// If username is being automatically generated, force them to send password setup email.
if(event_manager_generate_username_from_email()) {
$use_standard_password_setup_email = get_option('event_manager_use_standard_password_setup_email', 1) == 1 ? true : false;
}
/**
* Allows an override of the setting for if a password should be auto-generated for new users.
*
* @param bool $use_standard_password_setup_email True if a standard account setup email should be sent.
* @since 1.8
*/
return apply_filters('event_manager_use_standard_password_setup_email', $use_standard_password_setup_email);
}
/**
* Checks if a password should be auto-generated for new users.
*
* @param string $password Password to validate.
* @return bool True if password meets rules.
* @since 1.8
*/
function event_manager_validate_new_password($password) {
// Password must be at least 8 characters long. Trimming here because `wp_hash_password()` will later on.
$is_valid_password = strlen(trim ($password)) >= 8;
/**
* Allows overriding default Event Manager password validation rules.
*
* @param bool $is_valid_password True if new password is validated.
* @param string $password Password to validate.
* @since 1.8
*/
return apply_filters('event_manager_validate_new_password', $is_valid_password, $password);
}
/**
* Returns the password rules hint.
*
* @return string
*/
function event_manager_get_password_rules_hint() {
/**
* Allows overriding the hint shown below the new password input field. Describes rules set in `event_manager_validate_new_password`.
*
* @param string $password_rules Password rules description.
* @since 1.8
*/
return apply_filters('event_manager_password_rules_hint', __('Passwords must be at least 8 characters long.', 'wp-event-manager'));
}
/**
* Returns all organizers.
*
* @since 3.1.14
* @param null
* @return string
*/
function wpem_get_all_event_organizer($user_id = '', $args = []) {
if(!get_option('enable_event_organizer'))
return false;
$query_args = array(
'post_type' => 'event_organizer',
'post_status' => 'publish',
'posts_per_page'=> -1,
'suppress_filters' => 0
);
if(isset($user_id) && !empty($user_id) && !is_admin()) {
$query_args['author'] = $user_id;
}
if(isset($args) && !empty($args)) {
$query_args = array_merge($query_args,$args);
}
$query_args = apply_filters('wpem_get_all_event_organizer_args', $query_args);
$all_organizer = get_posts($query_args);
if(!empty($all_organizer)) {
return $all_organizer;
} else {
return false;
}
}
/**
* Returns array of all organizers.
*
* @since 3.1.14
* @param null
* @return string
*/
function wpem_get_all_organizer_array($user_id = '', $args = []) {
$all_organizer = wpem_get_all_event_organizer($user_id, $args);
$organizer_array =array();
if(is_array($all_organizer) && !empty($all_organizer)) {
foreach($all_organizer as $organizer) {
$organizer_array[$organizer->ID] = $organizer->post_title;
}
}
return $organizer_array;
}
/**
* Returns total organizer.
*
* @param null
* @return string
* @since 3.1.14
*/
function wpem_get_event_organizer_count($organizer_id = '') {
return sizeof(wpem_get_event_by_organizer_id($organizer_id));
}
/**
* Returns organizer ids.
*
* @param null
* @return string
* @since 3.1.14
*/
function wpem_get_event_by_organizer_id($organizer_id = '') {
if(!get_option('enable_event_organizer'))
return false;
$args = [
'post_type' => 'event_listing',
'post_status' => array('publish'),
'posts_per_page' => -1,
'suppress_filters' => 0,
];
if(!empty($organizer_id)) {
$args['meta_query'][] = [
'key' => '_event_organizer_ids',
'value' => $organizer_id,
'compare' => 'LIKE',
];
}
return get_posts($args);
}
/**
* Returns all venue of event.
*
* @param null
* @return string
* @since 3.1.14
*/
function wpem_get_all_event_venue($user_id = '', $args = []) {
if(!get_option('enable_event_venue'))
return false;
$query_args = array(
'post_type' => 'event_venue',
'post_status' => 'publish',
'posts_per_page'=> -1,
'suppress_filters' => 0,
);
if(isset($user_id) && !empty($user_id) && !is_admin()) {
$query_args['author'] = $user_id;
}
if(isset($args) && !empty($args)) {
$query_args = array_merge($query_args,$args);
}
$query_args = apply_filters('wpem_get_all_event_venue_args', $query_args);
$all_venue = get_posts($query_args);
if(!empty($all_venue)) {
return $all_venue;
} else {
return false;
}
}
/**
* Returns array of venues.
*
* @param null
* @return string
* @since 3.1.14
*/
function wpem_get_all_venue_array($user_id = '', $args = [], $blank_option = false) {
$all_venue = wpem_get_all_event_venue($user_id, $args);
$venue_array =array();
if(is_array($all_venue) && !empty($all_venue)) {
$all_venue = wp_list_sort($all_venue, 'post_title', 'ASC');
if($blank_option) {
$venue_array[''] = __('Select Venue', 'wp-event-manager');
}
foreach($all_venue as $venue) {
$venue_array[$venue->ID] = $venue->post_title;
}
}
return $venue_array;
}
/**
* Returns total venues.
*
* @param null
* @return string
* @since 3.1.16
*/
function wpem_get_event_venue_count($venue_id = '') {
return sizeof(wpem_get_event_by_venue_id($venue_id));
}
/**
* Returns venue id of event.
*
* @param null
* @return string
* @since 3.1.14
*/
function wpem_get_event_by_venue_id($venue_id = '') {
if(!get_option('enable_event_venue'))
return false;
$args = [
'post_type' => 'event_listing',
'post_status' => array('publish'),
'posts_per_page' => -1,
'suppress_filters' => 0,
];
if(!empty($venue_id)) {
$args['meta_query'][] = [
'key' => '_event_venue_ids',
'value' => $venue_id,
'compare' => 'LIKE',
];
}
return get_posts($args);
}
/**
* Check organizer ids.
* @since 3.1.13
* @param
* @return
**/
function wpem_has_event_organizer_ids($post = null) {
$post = get_post($post);
if($post->post_type !== 'event_listing')
return;
if(!empty($post->_event_organizer_ids)) {
$organizer = get_post($post->_event_organizer_ids[0]);
if(empty($organizer))
return;
if($organizer->post_status != 'publish')
return;
}
return !empty($post->_event_organizer_ids) ? true : false;
}
/**
* Get organizer ids.
*
* @since 3.1.13
**/
function wpem_get_event_organizer_ids( $post = null ) {
$post = get_post( $post );
if ( $post->post_type !== 'event_listing' ) {
return;
}
if ( class_exists('SitePress') && !empty($post->_event_organizer_ids) ) {
foreach ($post->_event_organizer_ids as $key => $organizer_id ) {
$result = $post->_event_organizer_ids;
$result[$key] = apply_filters( 'wpem_wpml_object_id', $organizer_id, 'event_organizer', TRUE );
}
return $result;
}
return !empty($post->_event_organizer_ids) ? $post->_event_organizer_ids : '';
}
/**
* Check organizer exist in event organizer.
*
* @since 3.1.15
**/
function wpem_check_organizer_exist($organizer_email) {
$args = [
'post_type' => 'event_organizer',
'post_status' => ['publish'],
'suppress_filters' => 0,
'meta_query' => [
[
'key' => '_organizer_email',
'value' => $organizer_email,
'compare' => '=',
],
],
];
$args = apply_filters('wpem_check_organizer_exist_query_args', $args);
// phpcs:ignore WordPressVIPMinimum.Performance.TaxQuery
// phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query -- Simple equality comparison, optimized query
$organizer = get_posts($args);
if(!empty($organizer) && isset($organizer[0]->ID)) {
return $organizer[0]->ID;
} else {
return false;
}
}
/**
* Check venue ids.
*
* @since 3.1.16
**/
function wpem_has_event_venue_ids($post = null) {
$post = get_post($post);
if($post->post_type !== 'event_listing')
return;
if(!empty($post->_event_venue_ids)) {
$venue = get_post($post->_event_venue_ids);
if(empty($venue))
return;
if($venue->post_status != 'publish')
return;
}
return !empty($post->_event_venue_ids) ? true : false;
}
/**
* Get venue ids.
*
* @since 3.1.16
**/
function wpem_get_event_venue_ids( $post = null ) {
$post = get_post( $post );
if ( $post->post_type !== 'event_listing' )
return;
if ( class_exists('SitePress') && !empty($post->_event_venue_ids) ) {
$result = apply_filters( 'wpem_wpml_object_id', $post->_event_venue_ids , 'event_listing', TRUE );
return $result;
}
return !empty($post->_event_venue_ids) ? $post->_event_venue_ids : '';
}
/**
* Manage order of event.
* @since 3.1.18
* @param null
* @return array
*/
function wpem_get_event_order_by() {
$args = [
'title' => [
'label' => __('Event Title', 'wp-event-manager'),
'type' => [
'title|asc' => __('Ascending (ASC)', 'wp-event-manager'),
'title|desc' => __('Descending (DESC)', 'wp-event-manager'),
]
],
'event_start_date' => [
'label' => __('Event Start Date', 'wp-event-manager'),
'type' => [
'event_start_date|asc' => __('Ascending (ASC)', 'wp-event-manager'),
'event_start_date|desc' => __('Descending (DESC)', 'wp-event-manager'),
]
],
'event_end_date' => [
'label' => __('Event End Date', 'wp-event-manager'),
'type' => [
'event_end_date|asc' => __('Ascending (ASC)', 'wp-event-manager'),
'event_end_date|desc' => __('Descending (DESC)', 'wp-event-manager'),
]
],
'event_location' => [
'label' => __('Event Location', 'wp-event-manager'),
'type' => [
'event_location|asc' => __('Ascending (ASC)', 'wp-event-manager'),
'event_location|desc' => __('Descending (DESC)', 'wp-event-manager'),
]
],
];
return apply_filters('wpem_get_event_order_by_args', $args);
}
if(!function_exists('wpem_get_email_from_name')) {
/**
* Get the from name for outgoing emails.
*
* @param string $from_name Default wp_mail() name associated with the "from" email address.
* @return string
* @since 3.1.35
*/
function wpem_get_email_from_name($from_name = '') {
$from_name = get_option('wpem_email_from_name');
if(empty($from_name))
$from_name = get_bloginfo('name');
$from_name = apply_filters( 'wpem_email_from_name', $from_name );
return wp_specialchars_decode( esc_html( $from_name ), ENT_QUOTES );
}
}
if(!function_exists('wpem_get_email_from_address')){
/**
* Get the from address for outgoing emails.
*
* @param string $from_email Default wp_mail() email address to send from.
* @return string
* @since 3.1.35
*/
function wpem_get_email_from_address( $from_email = '' ) {
$from_email = get_option('wpem_email_from_address');
if(empty($from_email))
$from_email = 'noreply@' . (isset($_SERVER['HTTP_HOST']) ? str_replace('www.', '', esc_url_raw( wp_unslash($_SERVER['HTTP_HOST']))) : 'noreply.com');
// $from_email = "wordpress@".trim( str_replace( array( 'http://', 'https://' ), '', get_bloginfo('url')));
$from_email = apply_filters( 'wpem_email_from_address', $from_email );
return sanitize_email( $from_email );
}
}
if(!function_exists('wpem_get_email_headers')) {
/**
* Get email headers.
*
* @param string, string, string
* @return string
* @since 3.1.35
*/
function wpem_get_email_headers($post_id, $sender_name = '', $sender_address = '', $reply_name = '', $replay_address = '', $content_type = 'text/html; charset=UTF-8') {
$header[] = 'Content-Type: text/html; charset=UTF-8';
if (empty($sender_name))
$sender_name = wpem_get_email_from_name();
if(empty($sender_address))
$sender_address = wpem_get_email_from_address();
if (empty($reply_name))
$reply_name = $sender_name;
if(empty($replay_address))
$replay_address = $sender_address;
$header[] = 'From: '.$sender_name.'<'.$sender_address.'>';
$header[] = 'Reply-to: ' . $reply_name . '<' . $replay_address . '>';
return apply_filters( 'wpem_change_default_email_headers', $header, $content_type, $sender_name, $sender_address, $post_id);
}
}
/**
* Return monment format from php code function
*
*/
function wpem_convert_php_to_moment_format($format) {
$replacements = [
'd' => 'DD',
'D' => 'ddd',
'j' => 'D',
'l' => 'dddd',
'N' => 'E',
'S' => 'o',
'w' => 'e',
'z' => 'DDD',
'W' => 'W',
'F' => 'MMMM',
'm' => 'MM',
'M' => 'MMM',
'n' => 'M',
't' => '', // no equivalent
'L' => '', // no equivalent
'o' => 'YYYY',
'Y' => 'YYYY',
'y' => 'YY',
'a' => 'a',
'A' => 'A',
'B' => '', // no equivalent
'g' => 'h',
'G' => 'H',
'h' => 'hh',
'H' => 'HH',
'i' => 'mm',
's' => 'ss',
'u' => 'SSS',
'e' => 'zz', // deprecated since version 1.6.0 of moment.js
'I' => '', // no equivalent
'O' => '', // no equivalent
'P' => '', // no equivalent
'T' => '', // no equivalent
'Z' => '', // no equivalent
'c' => '', // no equivalent
'r' => '', // no equivalent
'U' => 'X',
];
$momentFormat = strtr($format, $replacements);
return $momentFormat;
}
if ( !function_exists( 'wpem_get_event_by_user_id' ) ) {
/**
* This function is used to get event by user id.
*
* @access public
* @param
* @return array
* @since 1.0.0
*/
function wpem_get_event_by_user_id( $user_id = '' ) {
return get_posts( apply_filters('wpem_events_by_user_id_args', array(
'posts_per_page' => - 1,
'post_type' => 'event_listing',
'post_status' => 'publish',
'suppress_filters' => 'false',
'author' => $user_id,
'fields' => 'ids',
) ) );
}
}
/**
* Get all countries with country code.
*
* We have used this method for organizer country selection.
* @since 3.1.39
* @return countries information
*/
function wpem_get_all_countries() {
return apply_filters('wpem_all_countries', array (
'' => __('Select Country', 'wp-event-manager'),
'AF' => 'Afghanistan',
'AX' => 'Aland Islands',
'AL' => 'Albania',
'DZ' => 'Algeria',
'AS' => 'American Samoa',
'AD' => 'Andorra',
'AO' => 'Angola',
'AI' => 'Anguilla',
'AQ' => 'Antarctica',
'AG' => 'Antigua And Barbuda',
'AR' => 'Argentina',
'AM' => 'Armenia',
'AW' => 'Aruba',
'AU' => 'Australia',
'AT' => 'Austria',
'AZ' => 'Azerbaijan',
'BS' => 'Bahamas',
'BH' => 'Bahrain',
'BD' => 'Bangladesh',
'BB' => 'Barbados',
'BY' => 'Belarus',
'BE' => 'Belgium',
'BZ' => 'Belize',
'BJ' => 'Benin',
'BM' => 'Bermuda',
'BT' => 'Bhutan',
'BO' => 'Bolivia',
'BA' => 'Bosnia And Herzegovina',
'BW' => 'Botswana',
'BV' => 'Bouvet Island',
'BR' => 'Brazil',
'IO' => 'British Indian Ocean Territory',
'BN' => 'Brunei Darussalam',
'BG' => 'Bulgaria',
'BF' => 'Burkina Faso',
'BI' => 'Burundi',
'KH' => 'Cambodia',
'CM' => 'Cameroon',
'CA' => 'Canada',
'CV' => 'Cape Verde',
'KY' => 'Cayman Islands',
'CF' => 'Central African Republic',
'TD' => 'Chad',
'CL' => 'Chile',
'CN' => 'China',
'CX' => 'Christmas Island',
'CC' => 'Cocos (Keeling) Islands',
'CO' => 'Colombia',
'KM' => 'Comoros',
'CG' => 'Congo',
'CD' => 'Congo, Democratic Republic',
'CK' => 'Cook Islands',
'CR' => 'Costa Rica',
'CI' => 'Cote D\'Ivoire',
'HR' => 'Croatia',
'CU' => 'Cuba',
'CY' => 'Cyprus',
'CZ' => 'Czech Republic',
'DK' => 'Denmark',
'DJ' => 'Djibouti',
'DM' => 'Dominica',
'DO' => 'Dominican Republic',
'EC' => 'Ecuador',
'EG' => 'Egypt',
'SV' => 'El Salvador',
'GQ' => 'Equatorial Guinea',
'ER' => 'Eritrea',
'EE' => 'Estonia',
'ET' => 'Ethiopia',
'FK' => 'Falkland Islands (Malvinas)',
'FO' => 'Faroe Islands',
'FJ' => 'Fiji',
'FI' => 'Finland',
'FR' => 'France',
'GF' => 'French Guiana',
'PF' => 'French Polynesia',
'TF' => 'French Southern Territories',
'GA' => 'Gabon',
'GM' => 'Gambia',
'GE' => 'Georgia',
'DE' => 'Germany',
'GH' => 'Ghana',
'GI' => 'Gibraltar',
'GR' => 'Greece',
'GL' => 'Greenland',
'GD' => 'Grenada',
'GP' => 'Guadeloupe',
'GU' => 'Guam',
'GT' => 'Guatemala',
'GG' => 'Guernsey',
'GN' => 'Guinea',
'GW' => 'Guinea-Bissau',
'GY' => 'Guyana',
'HT' => 'Haiti',
'HM' => 'Heard Island & Mcdonald Islands',
'VA' => 'Holy See (Vatican City State)',
'HN' => 'Honduras',
'HK' => 'Hong Kong',
'HU' => 'Hungary',
'IS' => 'Iceland',
'IN' => 'India',
'ID' => 'Indonesia',
'IR' => 'Iran, Islamic Republic Of',
'IQ' => 'Iraq',
'IE' => 'Ireland',
'IM' => 'Isle Of Man',
'IL' => 'Israel',
'IT' => 'Italy',
'JM' => 'Jamaica',
'JP' => 'Japan',
'JE' => 'Jersey',
'JO' => 'Jordan',
'KZ' => 'Kazakhstan',
'KE' => 'Kenya',
'KI' => 'Kiribati',
'KR' => 'Korea',
'KW' => 'Kuwait',
'KG' => 'Kyrgyzstan',
'LA' => 'Lao People\'s Democratic Republic',
'LV' => 'Latvia',
'LB' => 'Lebanon',
'LS' => 'Lesotho',
'LR' => 'Liberia',
'LY' => 'Libyan Arab Jamahiriya',
'LI' => 'Liechtenstein',
'LT' => 'Lithuania',
'LU' => 'Luxembourg',
'MO' => 'Macao',
'MK' => 'Macedonia',
'MG' => 'Madagascar',
'MW' => 'Malawi',
'MY' => 'Malaysia',
'MV' => 'Maldives',
'ML' => 'Mali',
'MT' => 'Malta',
'MH' => 'Marshall Islands',
'MQ' => 'Martinique',
'MR' => 'Mauritania',
'MU' => 'Mauritius',
'YT' => 'Mayotte',
'MX' => 'Mexico',
'FM' => 'Micronesia, Federated States Of',
'MD' => 'Moldova',
'MC' => 'Monaco',
'MN' => 'Mongolia',
'ME' => 'Montenegro',
'MS' => 'Montserrat',
'MA' => 'Morocco',
'MZ' => 'Mozambique',
'MM' => 'Myanmar',
'NA' => 'Namibia',
'NR' => 'Nauru',
'NP' => 'Nepal',
'NL' => 'Netherlands',
'AN' => 'Netherlands Antilles',
'NC' => 'New Caledonia',
'NZ' => 'New Zealand',
'NI' => 'Nicaragua',
'NE' => 'Niger',
'NG' => 'Nigeria',
'NU' => 'Niue',
'NF' => 'Norfolk Island',
'MP' => 'Northern Mariana Islands',
'NO' => 'Norway',
'OM' => 'Oman',
'PK' => 'Pakistan',
'PW' => 'Palau',
'PS' => 'Palestinian Territory, Occupied',
'PA' => 'Panama',
'PG' => 'Papua New Guinea',
'PY' => 'Paraguay',
'PE' => 'Peru',
'PH' => 'Philippines',
'PN' => 'Pitcairn',
'PL' => 'Poland',
'PT' => 'Portugal',
'PR' => 'Puerto Rico',
'QA' => 'Qatar',
'RE' => 'Reunion',
'RO' => 'Romania',
'RU' => 'Russian Federation',
'RW' => 'Rwanda',
'BL' => 'Saint Barthelemy',
'SH' => 'Saint Helena',
'KN' => 'Saint Kitts And Nevis',
'LC' => 'Saint Lucia',
'MF' => 'Saint Martin',
'PM' => 'Saint Pierre And Miquelon',
'VC' => 'Saint Vincent And Grenadines',
'WS' => 'Samoa',
'SM' => 'San Marino',
'ST' => 'Sao Tome And Principe',
'SA' => 'Saudi Arabia',
'SN' => 'Senegal',
'RS' => 'Serbia',
'SC' => 'Seychelles',
'SL' => 'Sierra Leone',
'SG' => 'Singapore',
'SK' => 'Slovakia',
'SI' => 'Slovenia',
'SB' => 'Solomon Islands',
'SO' => 'Somalia',
'ZA' => 'South Africa',
'GS' => 'South Georgia And Sandwich Isl.',
'ES' => 'Spain',
'LK' => 'Sri Lanka',
'SD' => 'Sudan',
'SR' => 'Suriname',
'SJ' => 'Svalbard And Jan Mayen',
'SZ' => 'Swaziland',
'SE' => 'Sweden',
'CH' => 'Switzerland',
'SY' => 'Syrian Arab Republic',
'TW' => 'Taiwan',
'TJ' => 'Tajikistan',
'TZ' => 'Tanzania',
'TH' => 'Thailand',
'TL' => 'Timor-Leste',
'TG' => 'Togo',
'TK' => 'Tokelau',
'TO' => 'Tonga',
'TT' => 'Trinidad And Tobago',
'TN' => 'Tunisia',
'TR' => 'Turkey',
'TM' => 'Turkmenistan',
'TC' => 'Turks And Caicos Islands',
'TV' => 'Tuvalu',
'UG' => 'Uganda',
'UA' => 'Ukraine',
'AE' => 'United Arab Emirates',
'GB' => 'United Kingdom',
'US' => 'United States',
'UM' => 'United States Outlying Islands',
'UY' => 'Uruguay',
'UZ' => 'Uzbekistan',
'VU' => 'Vanuatu',
'VE' => 'Venezuela',
'VN' => 'Viet Nam',
'VG' => 'Virgin Islands, British',
'VI' => 'Virgin Islands, U.S.',
'WF' => 'Wallis And Futuna',
'EH' => 'Western Sahara',
'YE' => 'Yemen',
'ZM' => 'Zambia',
'ZW' => 'Zimbabwe',
) );
}
/**
* Convert embed code to html.
*
* We have used this method for convert code to html.
* @param $content content which we need to convert as html
* @since 3.1.39
* @return html
*/
function wpem_embed_oembed_html($content) {
return wp_kses_post(apply_filters('wpem_embed_oembed_custome', $content));
}
/**
* This wpem_begnWith() Checks if given string ($str) is begin with the second parameter ($begin_string) of function.
*
* @param string $str
* @param string $begin_string
* @return bool
* @since 1.0.1
*/
function wpem_begnWith($str, $begin_string) {
$len = strlen($begin_string);
if (is_array($str)) {
$str = '';
}
return (substr($str, 0, $len) === $begin_string);
}
/**
* Check access for guest users based on the 'wpem_hide_data_from_guest' option.
*
* This function determines whether guest users have access to certain data.
* If the user is not logged in and the 'wpem_hide_data_from_guest' option is checked,
* the function returns false, indicating that access should be restricted.
* Otherwise, it returns true, allowing access.
*
* @return bool True if access is allowed; false if access is denied for guests.
*/
function wpem_checked_guest_user_access(){
$hide_data = get_option('wpem_hide_organizer_fields');
if ( !is_user_logged_in() && $hide_data ) {
return false;
}
return true;
}
/**
* Returns all fields of oganizer.
*
* @param null
* @return string
* @since 3.1.47
*/
function wpem_get_organizer_all_fields() {
$form_instance = new WP_Event_Manager_Forms(); // Create a new instance
$organizer_fields = $form_instance->get_fields('submit-organizer');
if (isset($organizer_fields['organizer'])) {
unset($organizer_fields['organizer']['organizer_email']);
unset($organizer_fields['organizer']['organizer_country']);
}
return $organizer_fields;
}
/**
* Returns all fields types for wp event manager form.
*
* @param null
* @return array
* @since 3.2.0
*/
function wpem_get_form_field_types() {
return apply_filters(
'event_manager_form_field_types',
array(
'text' => esc_html__('Text', 'wp-event-manager'),
'time' => esc_html__('Time', 'wp-event-manager'),
'checkbox' => esc_html__('Checkbox', 'wp-event-manager'),
'date' => esc_html__('Date', 'wp-event-manager'),
'timezone' => esc_html__('Timezone', 'wp-event-manager'),
'file' => esc_html__('File', 'wp-event-manager'),
'hidden' => esc_html__('Hidden', 'wp-event-manager'),
'multiselect' => esc_html__('Multiselect', 'wp-event-manager'),
'number' => esc_html__('Number', 'wp-event-manager'),
'radio' => esc_html__('Radio', 'wp-event-manager'),
'repeated' => esc_html__('Repeated', 'wp-event-manager'),
'select' => esc_html__('Select', 'wp-event-manager'),
'term-checklist' => esc_html__('Term Checklist', 'wp-event-manager'),
'term-multiselect' => esc_html__('Term Multiselect', 'wp-event-manager'),
'term-select' => esc_html__('Term Select', 'wp-event-manager'),
'textarea' => esc_html__('Textarea', 'wp-event-manager'),
'wp-editor' => esc_html__('WP Editor', 'wp-event-manager'),
'url' => esc_html__('URL', 'wp-event-manager'),
'email' => esc_html__('Email', 'wp-event-manager'),
'switch' => esc_html__('Switch', 'wp-event-manager'),
'media-library-image' => esc_html__('Media Library Image', 'wp-event-manager'),
)
);
}