예제 #1
0
 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;
 }
예제 #2
0
 /**
  * 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;
 }