Photo_View
Class Photo_View
Source
File: src/Tribe/Views/V2/Views/Photo_View.php
class Photo_View extends View { /** * Slug for this view * * @since 4.7.5 * * @var string */ protected $slug = 'photo'; /** * Visibility for this view. * * @since 4.7.5 * * @var bool */ protected $publicly_visible = true; /** * {@inheritDoc} */ public function prev_url( $canonical = false, array $passthru_vars = [] ) { $current_page = (int) $this->context->get( 'page', 1 ); $display = $this->context->get( 'event_display_mode', 'photo' ); if ( 'past' === $display ) { $url = parent::next_url( $canonical, [ 'eventDisplay' => 'past' ] ); } elseif ( $current_page > 1 ) { $url = parent::prev_url( $canonical ); } else { $url = $this->get_past_url( $canonical ); } $url = $this->filter_prev_url( $canonical, $url ); return $url; } /** * {@inheritDoc} */ public function next_url( $canonical = false, array $passthru_vars = [] ) { $current_page = (int) $this->context->get( 'page', 1 ); $display = $this->context->get( 'event_display_mode', 'photo' ); if ( $this->slug === $display || 'default' === $display ) { $url = parent::next_url( $canonical ); } elseif ( $current_page > 1 ) { $url = parent::prev_url( $canonical, [ 'eventDisplay' => 'past' ] ); } else { $url = $this->get_upcoming_url( $canonical ); } $url = $this->filter_next_url( $canonical, $url ); return $url; } /** * Return the URL to a page of past events. * * @since 4.7.5 * * @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 past URL page, if available, or an empty string. */ protected function get_past_url( $canonical = false, $page = 1 ) { $default_date = 'now'; $date = $this->context->get( 'event_date', $default_date ); $event_date_var = $default_date === $date ? '' : $date; $past = tribe_events()->by_args( $this->setup_repository_args( $this->context->alter( [ 'eventDisplay' => 'past', 'paged' => $page, ] ) ) ); if ( $past->count() > 0 ) { $past_url_object = clone $this->url->add_query_args( array_filter( [ 'post_type' => TEC::POSTTYPE, 'eventDisplay' => 'past', 'eventDate' => $event_date_var, $this->page_key => $page, 'tribe-bar-search' => $this->context->get( 'keyword' ), ] ) ); $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 = Rewrite::instance()->get_clean_url( add_query_arg( [ 'eventDisplay' => $this->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( [ 'eventDisplay' => '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.7.5 * * @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; $upcoming = tribe_events()->by_args( $this->setup_repository_args( $this->context->alter( [ 'eventDisplay' => 'photo', 'paged' => $page, ] ) ) ); if ( $upcoming->count() > 0 ) { $upcoming_url_object = clone $this->url->add_query_args( array_filter( [ 'post_type' => TEC::POSTTYPE, 'eventDisplay' => 'photo', $this->page_key => $page, 'eventDate' => $event_date_var, 'tribe-bar-search' => $this->context->get( 'keyword' ), ] ) ); $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' ], $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; } return ''; } /** * {@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; } else { $args['order'] = 'DESC'; $args['ends_before'] = $date; } return $args; } }
Methods
- get_view_label
- next_url — {@inheritDoc}
- prev_url — {@inheritDoc}