* hash in the name, we need a way to invalidate them all at once.
	 *
	 * When using default WP transients we're able to do this with a DB query to
	 * delete transients manually.
	 *
	 * With external cache however, this isn't possible. Instead, this function is used
	 * to append a unique string (based on time()) to each transient. When transients
	 * are invalidated, the transient version will increment and data will be regenerated.
	 *
	 * @param  string  $group   Name for the group of transients we need to invalidate
	 * @param  boolean $refresh true to force a new version
	 * @return string transient version based on time(), 10 digits
	 */
    public static function get_transient_version($group, $refresh = false)
    {
        $transient_name = $group . '-transient-version';
        $transient_value = get_transient($transient_name);
        if (false === $transient_value || true === $refresh) {
            self::delete_version_transients($transient_value);
            set_transient($transient_name, $transient_value = time());
        }
        return $transient_value;
    }
    /**
	 * When the transient version increases, this is used to remove all past transients to avoid filling the DB.
	 *
	 * Note; this only works on transients appended with the transient version, and when object caching is not being used.
	 */
    private static function delete_version_transients($version)
    {
        if (!wp_using_ext_object_cache() && !empty($version)) {
        return true;
    }
}
/**
 * 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 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);