/** * 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; } }