QueryInterface::ORDER_ASCENDING, ]; /** * All upcoming (or currently running) events, soonest first. * "Upcoming" = event end (or start, when no end is set) is today or later. */ public function findUpcoming(): QueryResultInterface { $todayMidnight = strtotime('today'); $query = $this->createQuery(); $query->getQuerySettings()->setRespectStoragePage(false); $query->matching( $query->logicalAnd( $query->equals('hideonwebsite', 0), $query->logicalOr( $query->greaterThanOrEqual('eventend', $todayMidnight), $query->logicalAnd( $query->equals('eventend', 0), $query->greaterThanOrEqual('eventstart', $todayMidnight) ) ) ) ); return $query->execute(); } /** * Past events, most recent first. */ public function findPast(): QueryResultInterface { $todayMidnight = strtotime('today'); $query = $this->createQuery(); $query->getQuerySettings()->setRespectStoragePage(false); $query->matching( $query->logicalAnd( $query->equals('hideonwebsite', 0), $query->logicalOr( $query->logicalAnd( $query->greaterThan('eventend', 0), $query->lessThan('eventend', $todayMidnight) ), $query->logicalAnd( $query->equals('eventend', 0), $query->greaterThan('eventstart', 0), $query->lessThan('eventstart', $todayMidnight) ) ) ) ); $query->setOrderings(['eventstart' => QueryInterface::ORDER_DESCENDING]); return $query->execute(); } }