/**
  * Generate the form. The dates are not fixed, so we can't write an XML file for this.
  * Each date has a checkbox, defining whether the leader is available (ticked) or not
  * TODO: Display weekends and bank holidays (bank holidays currently not in database)
  */
 public function getForm($data = array(), $loadData = true)
 {
     if (!isset($this->form)) {
         // Looks like I have to generate the XML for the form?! WTF? Hurr durr OOP is hard for our programmer users durr.
         $XMLDoc = new DomDocument("1.0", "UTF-8");
         $formXML = $XMLDoc->createElement("form");
         $formXML->setAttribute("name", "manageavailability");
         $XMLDoc->appendChild($formXML);
         $fieldsetXML = $XMLDoc->createElement("fieldset");
         $fieldsetXML->setAttribute("name", "availability");
         $formXML->appendChild($fieldsetXML);
         $progNumXML = $XMLDoc->createElement("field");
         $progNumXML->setAttribute("type", "hidden");
         $progNumXML->setAttribute("name", "programmeid");
         $progNumXML->setAttribute("default", $this->programme->id);
         $fieldsetXML->appendChild($progNumXML);
         foreach ($this->programme->getLeaderAvailability($this->leader->id) as $date => $available) {
             $field = $XMLDoc->createElement("field");
             $field->setAttribute("type", "checkbox");
             $field->setAttribute("name", "availability_" . $date);
             $field->setAttribute("label", strftime("%A %e %B %Y", $date));
             $field->setAttribute("value", 1);
             $field->setAttribute("default", $available ? 1 : 0);
             $fieldsetXML->appendChild($field);
         }
         $this->form = $this->loadForm("com_swg_leaderutils.manageavailability", $XMLDoc->saveXML(), array('control' => 'jform', 'load_data' => false));
     }
     return $this->form;
 }
 /**
  * Loads and caches events of a specified type
  * Can only load 100 events at a time to avoid slowdowns - more will be loaded as a 'bottomless page' type thing
  * @param int $eventType Event type - see SWG constants
  */
 private function loadEvents($eventType)
 {
     // Get the parameters set
     $factory = SWG::eventFactory($eventType);
     $startDate = $this->paramDateToValue(JRequest::getInt("startDateType"), JRequest::getString("startDateSpecify"));
     $endDate = $this->paramDateToValue(JRequest::getInt("endDateType"), JRequest::getString("endDateSpecify"));
     $factory->reset();
     // Set specific factory parameters
     if ($eventType == Event::TypeSocial) {
         $factory->getNormal = true;
         $factory->getNewMember = true;
     }
     if ($eventType == Event::TypeWalk) {
         if (JRequest::getInt("walkProgramme") != 0) {
             switch (JRequest::getInt("walkProgramme")) {
                 case 1:
                     // Current published
                     $factory->walkProgramme = WalkProgramme::getCurrentProgrammeID();
                     break;
                 case 2:
                     $factory->walkProgramme = WalkProgramme::getNextProgrammeID();
                     break;
                 case 3:
                     // Specify
                     $factory->walkProgramme = JRequest::getInt("walkProgrammeSpecify");
                     break;
             }
         }
     }
     // Set standard/shared factory parameters
     $factory->startDate = $startDate;
     $factory->endDate = $endDate;
     $factory->limit = 100;
     $factory->offset = JRequest::getInt("offset", 0);
     $factory->reverse = JRequest::getBool("order");
     $factory->showUnpublished = JRequest::getBool("unpublished", false);
     $factory->includeAttendees = true;
     $factory->includeAttendedBy = Jfactory::getUser()->id;
     if (JRequest::getBool("diaryMode", false)) {
         // Default is the current logged in user.
         // TODO: Allow view access to other people's diaries
         $factory->addAttendee(JFactory::getUser()->id);
     }
     // Get events from factories
     switch ($eventType) {
         case Event::TypeWalk:
             $this->numWalks = $factory->numEvents();
             $this->walks = $factory->get();
             break;
         case Event::TypeSocial:
             $this->numSocials = $factory->numEvents();
             $this->socials = $factory->get();
             break;
         case Event::TypeWeekend:
             $this->numWeekends = $factory->numEvents();
             $this->weekends = $factory->get();
             break;
     }
 }
 public static function get($programmeID)
 {
     $db = JFactory::getDbo();
     $query = $db->getQuery(true);
     $query->select("*");
     $query->from("walksprogramme");
     $query->where("SequenceID = " . (int) $programmeID);
     $db->setQuery($query);
     $db->query();
     if ($db->getNumRows()) {
         $programme = new WalkProgramme();
         $programme->fromDatabase($db->loadAssoc());
         return $programme;
     }
 }