àH=ÎUÿÿÿÿÿÿÿÿ€< ¡=ÎUP€ÿÿÿÿ =ÎUpppÁ=ÎUpPt E=ÎUÿÿÿÿÿÿÿÿÿÿÿÿ< =ÎUp@ pÁ=ÎU@P tÐŽ=ÎU€` B E=ÎUÿÿÿÿÿÿÿÿÿÿÿÿ < =ÎUpð~(!pÁ=ÎUð~P!t=ÎUÿÿÿÿÿÿÿÿ!d°Ð=ÎUPÀ~À!]Í=ÎUÀ`!¹=ÎUÿÿÿÿÿÿÿÿ!d°Ð=ÎU`p~Ð!]Í=ÎUÐp!¹ E=ÎUÿÿÿÿÿÿÿÿÿÿÿÿ!< =ÎUp ~8"pÁ=ÎU ~P"t=ÎUÿÿÿÿÿÿÿÿ"d°Ð=ÎUPð}ð"]Í=ÎUð`"¹=ÎUÿÿÿÿÿÿÿÿ"d°Ð=ÎU` }"]Í=ÎUp"¹ E=ÎUÿÿÿÿÿÿÿÿÿÿÿÿ"< =ÎUpP}H#pÁ=ÎUP}P#t=ÎUÿÿÿÿÿÿÿÿ#d°Ð=ÎUP } #]Í=ÎU `#¹=ÎUÿÿÿÿÿÿÿÿ#d°Ð=ÎU`Ð|0#]Í=ÎU0p#¹Á=ÎU |€#t E=ÎUÿÿÿÿÿÿÿÿÿÿÿÿ#< =ÎUpp|X%pÁ=ÎUp|P%t E=ÎUÿÿÿÿÿÿÿÿÿÿÿÿ%< =ÎUp@|h&pÁ=ÎU@|P&tðÎ=ÎUP0|`&Qд=ÎU`ÿÿÿÿp&3w=ÎUp`&t=ÎUÿÿÿÿÿÿÿÿ&d°Ð=ÎU`À{€&]Í=ÎU€p&¹ E=ÎUÿÿÿÿÿÿÿÿÿÿÿÿ&< =ÎUpp{x(pÁ=ÎUp{P(t E=ÎUÿÿÿÿÿÿÿÿÿÿÿÿ(< =ÎUp@{ˆ)pÁ=ÎU@{P)tðÎ=ÎUP0{°)Qд=ÎU°ÿÿÿÿÀ)3w=ÎUÀ`)t=ÎUÿÿÿÿÿÿÿÿ)d°Ð=ÎU`ÀzÐ)]Í=ÎUÐp)¹Á=ÎUz€)t E=ÎUÿÿÿÿÿÿÿÿÿÿÿÿ)<p+=ÎUà`z˜+=¨=ÎUPzP+A¨=ÎU@z`+AàH=ÎUÿÿÿÿÿÿÿÿð+<p=ÎUð€ÿÿÿÿ++ =ÎUpðy ,pÁ=ÎUðyP,t E=ÎUÿÿÿÿÿÿÿÿÿÿÿÿ,< =ÎUpÀy°-pÁ=ÎUÀyP-tðÎ=ÎUP°y-Qд=ÎUÿÿÿÿ -3w=ÎU `-tÁ=ÎU`yp-tÁ=ÎUPy€-t E=ÎUÿÿÿÿÿÿÿÿÿÿÿÿ-< =ÎUp yÀ0pÁ=ÎU yP0t E=ÎUÿÿÿÿÿÿÿÿÿÿÿÿ0< =ÎUpðxÐ1pÁ=ÎUðxP1tðÎ=ÎU`àxP1QðÎ=ÎUPÐx`1Q°Ã=ÎUP`p1p=ÎUp`ÿÿÿÿ1+€=ÎUÿÿÿÿ€10;=ÎU@ÿÿÿÿÿÿÿÿ1*€c=ÎU@xÿÿÿÿ€1w=ÎU€`1t E=ÎUÿÿÿÿÿÿÿÿÿÿÿÿ1< =ÎUpðwà2pÁ=ÎUðwP2t=ÎUÿÿÿÿÿÿÿÿ2d°Ð=ÎUPÀw 2]Í=ÎU `2¹=ÎUÿÿÿÿÿÿÿÿ2d°Ð=ÎU`pw°2]Í=ÎU°p2¹ E=ÎUÿÿÿÿÿÿÿÿÿÿÿÿ2< =ÎUp wð3pÁ=ÎU wP3t=ÎUÿÿÿÿÿÿÿÿ3d°Ð=ÎUPðvÐ3]Í=ÎUÐ`3¹=ÎUÿÿÿÿÿÿÿÿ3d°Ð=ÎU` và3]Í=ÎUàp3¹ E=ÎUÿÿÿÿÿÿÿÿÿÿÿÿ3< =ÎUpPv4pÁ=ÎUPvP4tp+=ÎUp@v4=ðÎ=ÎUP0v4Qo=ÎUP4AàH=ÎUÿÿÿÿÿÿÿÿ4<È=ÎU`42p+=ÎUpÀu4=ðÎ=ÎU`°u 4Qo=ÎU P4AàH=ÎUÿÿÿÿÿÿÿÿ04<È=ÎU0p42Á=ÎU@u€4t E=ÎUÿÿÿÿÿÿÿÿÿÿÿÿ4< =ÎUpu 6pÁ=ÎUuP6t E=ÎUÿÿÿÿÿÿÿÿÿÿÿÿ6< =ÎUpàt07puery_args = [ 'post_type' => TEC::POSTTYPE, $event_display_key => 'past', 'eventDate' => $event_date_var, $this->page_key => $page, 'tribe-bar-search' => $this->context->get( 'keyword' ), ]; $query_args = $this->filter_query_args( $query_args, $canonical ); $past_url_object = clone $this->url->add_query_args( array_filter( $query_args ) ); $past_url = (string) $past_url_object; if ( ! $canonical ) { return $past_url; } // We've got rewrite rules handling `eventDate` and `eventDisplay`, but not List. Let's remove it. $canonical_url = TEC_Rewrite::instance()->get_clean_url( add_query_arg( [ 'eventDisplay' => static::$view_slug ], remove_query_arg( [ 'eventDate' ], $past_url ) ) ); // We use the `eventDisplay` query var as a display mode indicator: we have to make sure it's there. $url = add_query_arg( [ $event_display_key => 'past' ], $canonical_url ); // Let's re-add the `eventDate` if we had one and we're not already passing it with one of its aliases. if ( ! ( empty( $event_date_var ) || $past_url_object->get_query_arg_alias_of( 'event_date', $this->context ) ) ) { $url = add_query_arg( [ 'eventDate' => $event_date_var ], $url ); } return $url; } return ''; } /** * Return the URL to a page of upcoming events. * * @since 4.9.3 * * @param bool $canonical Whether to return the canonical version of the URL or the normal one. * @param int $page The page to return the URL for. * * @return string The URL to the upcoming URL page, if available, or an empty string. */ protected function get_upcoming_url( $canonical = false, $page = 1 ) { $default_date = 'now'; $date = $this->context->get( 'event_date', $default_date ); $event_date_var = $default_date === $date ? '' : $date; $url = ''; $upcoming = tribe_events()->by_args( $this->setup_repository_args( $this->context->alter( [ 'eventDisplay' => static::$view_slug, 'paged' => $page, ] ) ) ); $upcoming->order_by( '__none' ); if ( $upcoming->count() > 0 ) { $query_args = [ 'post_type' => TEC::POSTTYPE, 'eventDisplay' => static::$view_slug, $this->page_key => $page, 'eventDate' => $event_date_var, 'tribe-bar-search' => $this->context->get( 'keyword' ), ]; $query_args = $this->filter_query_args( $query_args, $canonical ); $upcoming_url_object = clone $this->url->add_query_args( array_filter( $query_args ) ); $upcoming_url = (string) $upcoming_url_object; if ( ! $canonical ) { return $upcoming_url; } // We've got rewrite rules handling `eventDate`, but not List. Let's remove it to build the URL. $url = tribe( 'events.rewrite' )->get_clean_url( remove_query_arg( [ 'eventDate', 'tribe_event_display' ], $upcoming_url ) ); // Let's re-add the `eventDate` if we had one and we're not already passing it with one of its aliases. if ( ! ( empty( $event_date_var ) || $upcoming_url_object->get_query_arg_alias_of( 'event_date', $this->context ) ) ) { $url = add_query_arg( [ 'eventDate' => $event_date_var ], $url ); } } return $url ?: $this->get_today_url( $canonical ); } /** * {@inheritDoc} */ protected function setup_repository_args( Tribe__Context $context = null ) { $context = null !== $context ? $context : $this->context; $args = parent::setup_repository_args( $context ); $context_arr = $context->to_array(); $date = Arr::get( $context_arr, 'event_date', 'now' ); $event_display = Arr::get( $context_arr, 'event_display_mode', Arr::get( $context_arr, 'event_display' ), 'current' ); if ( 'past' !== $event_display ) { $args['ends_after'] = $date; $args['order'] = 'ASC'; } else { $orderby = Arr::get_first_set( $args, [ 'orderby', 'order_by' ], [] ); $orderby = tribe_normalize_orderby( $orderby ); $date_key = isset( $orderby['event_date_utc'] ) ? 'event_date_utc' : 'event_date'; $args['orderby'] = array_merge( $orderby, [ $date_key, 'event_duration' ] ); $args['order'] = 'DESC'; $args['ends_before'] = $date; } return $args; } /** * Overrides the base View method to fix the order of the events in the `past` display mode. * * @since 4.9.11 * * @return array The List View template vars, modified if required. */ protected function setup_template_vars() { $template_vars = parent::setup_template_vars(); // While we fetch events in DESC order, we want to show the results in ASC order in `past` display mode. if ( ! empty( $template_vars['events'] ) && is_array( $template_vars['events'] ) && 'past' === $this->context->get( 'event_display_mode' ) ) { $template_vars['events'] = array_reverse( $template_vars['events'] ); } $template_vars = $this->setup_datepicker_template_vars( $template_vars ); return $template_vars; } /** * Overrides the base implementation to remove notions of a "past" events request on page reset. * * @since 4.9.11 */ protected function on_page_reset() { parent::on_page_reset(); $this->remove_past_query_args(); } }