/**
  * Apply currently set filters to the database query
  * @param JDatabaseQuery $query
  */
 protected function applyFilters(JDatabaseQuery &$query)
 {
     if ($this->useEventsTable) {
         $query->from("events");
         $query->leftJoin($this->table . " USING (" . $this->idField . ")");
     } else {
         $query->from($this->table);
     }
     $query->where(array($this->startDateField . " >= '" . Event::timeToDate($this->startDate) . "'", $this->startDateField . " <= '" . Event::timeToDate($this->endDate) . "'"));
     if (!$this->showUnpublished) {
         $query->where($this->readyToPublishField);
     }
     // Filter by attendees
     if (!empty($this->filterAttendedBy)) {
         $query->join("INNER", "eventattendance ON eventattendance.eventtype=" . $this->eventTypeConst . " AND eventattendance.eventid=" . $this->table . "." . $this->idField);
         $query->where("eventattendance.user IN (" . implode(",", $this->filterAttendedBy) . ")");
     }
     // This allows subclasses to modify the query. Normally they'll add extra WHERE clauses.
     $this->modifyQuery($query);
 }
 public static function getProgrammeDates($includeSpecial = false, $start = null, $end = null)
 {
     $db = JFactory::getDbo();
     $query = $db->getQuery(true);
     $query->select("WalkDate");
     $query->from("walksprogramme");
     $query->innerJoin("walkprogrammedates ON ProgrammeID = SequenceID");
     if (!$includeSpecial) {
         $query->where("special = 0");
     }
     if (!empty($start)) {
         $query->where("WalkDate >= '" . Event::timeToDate($start) . "'");
     }
     if (!empty($end)) {
         $query->where("WalkDate <= '" . Event::timeToDate($end) . "'");
     }
     $db->setQuery($query);
     $db->query();
     return $db->loadColumn(0);
 }