protected function setGlobalFields() { // Get date string from session $sessionDate = $this->session->getDate('m/d/Y'); $startTime = get_sub_field('start_time'); $endTime = get_sub_field('end_time'); if ($sessionDate != 'TBA' && !empty($startTime)) { try { $this->start = new \DateTime($sessionDate . ' ' . $startTime); $this->end = new \DateTime($sessionDate . ' ' . $endTime); } catch (\Exception $e) { } } return $this; }
/** * Apply any set filters and build out the session listing. * * @return $this */ public function build() { // Build query arguments $queryArgs = ['posts_per_page' => -1, 'post_type' => SessionPostType::SLUG, 'post_status' => 'publish', 'meta_query' => ['relation' => 'AND', ['key' => 'date', 'compare' => 'NOT IN', 'value' => ['', 'tba']], ['key' => 'start_time', 'compare' => 'NOT IN', 'value' => [null, '']], ['key' => 'end_time', 'compare' => 'NOT IN', 'value' => [null, '']]]]; // Apply keyword query filters $queryArgs['s'] = implode(' ', $this->keywords); // Apply session type filters (ORed) if (count($this->getSessionTypes()) > 0) { $queryArgs['tax_query'][] = ['taxonomy' => SessionType::SLUG, 'field' => 'slug', 'terms' => $this->getSessionTypes()]; } // Apply session tag filters (ORed) if (count($this->getSessionTags()) > 0) { $queryArgs['tax_query'][] = ['taxonomy' => SessionTag::SLUG, 'field' => 'slug', 'terms' => $this->getSessionTags()]; } // Apply society filters (ANDed) if (count($this->getSocieties()) > 0) { $taxQuery = ['relation' => 'AND']; foreach ($this->getSocieties() as $society) { $taxQuery[] = ['taxonomy' => Society::SLUG, 'field' => 'slug', 'terms' => $society]; } $queryArgs['tax_query'][] = $taxQuery; } if (isset($queryArgs['tax_query'])) { $queryArgs['tax_query']['relation'] = 'AND'; } // Run post query $posts = get_posts($queryArgs); // Sort and group results if (count($posts) > 0) { $days = []; foreach ($posts as $post) { $session = new SessionModel($post); $days[$session->getDate('Y/m/d')][] = $session; } ksort($days); foreach ($days as $date => &$sessions) { usort($sessions, [$this, 'sortSessions']); $this->days[] = new ScheduleDay($date, $sessions); } } return $this; }