protected function _generateEventColumnData(array $filters) { // filters assume to be sanitized $appointment = new Appointment(); $appointment->providerId = $filters['providerId']; $appointment->roomId = $filters['roomId']; $appointment->start = $filters['dateFilter'] . ' ' . self::FILTER_TIME_START; $appointment->end = $filters['dateFilter'] . ' ' . self::FILTER_TIME_END; $startTime = strtotime($appointment->start); $endTime = strtotime($appointment->end); // we need to get the length of time to create number of rows in the grid $timeLen = ($endTime - $startTime) / 60 / self::FILTER_MINUTES_INTERVAL; // NOTE: height is 22px for xp, default 20px // prepopulate return data $columnData = array(); //$maps = array(); $start = $startTime; $end = $endTime; $ctr = 0; while ($start <= $end) { $map = array(); $map['start'] = $start; $start = strtotime('+' . self::FILTER_MINUTES_INTERVAL . ' minutes', $start); $map['end'] = $start; //$maps[$ctr] = $map; $row = array(); // assign row id as rowNumber and columnIndex $columnData[$ctr] = array('id' => $ctr + 1, 'data' => array(''), 'map' => $map); $ctr++; } $columnDataCtr = count($columnData); $data = array('apps' => array(), 'events' => array()); $mapIndex = 0; $apps = array(); foreach ($appointment->getIter() as $app) { $start = strtotime($app->start); for ($i = $mapIndex; $i < $columnDataCtr; $i++) { $map = $columnData[$mapIndex]['map']; $mapIndex = $i; if ($start >= $map['start'] && $start <= $map['end']) { if (!isset($data['apps'][$i])) { $data['apps'][$i] = array(); } $data['apps'][$i][] = $app; break; } } } $mapIndex = 0; $events = array(); trigger_error('looping schedule event started'); $scheduleEvent = new ScheduleEvent(); $db = Zend_Registry::get('dbAdapter'); $sqlSelect = $db->select()->from('scheduleEvents')->where('providerId = ?', $appointment->providerId)->where('roomId = ?', $appointment->roomId)->where('start >= ?', $appointment->start)->where('end <= ?', $appointment->end)->where('start <= end')->order('start ASC'); $stmt = $db->query($sqlSelect); $stmt->setFetchMode(Zend_Db::FETCH_ASSOC); while ($row = $stmt->fetch()) { $event = new ScheduleEvent(); $event->populateWithArray($row); $start = strtotime($event->start); for ($i = $mapIndex; $i < $columnDataCtr; $i++) { $map = $columnData[$i]['map']; $mapIndex = $i; if ($start >= $map['start'] && $start <= $map['end']) { if (!isset($data['events'][$i])) { $data['events'][$i] = array(); } $data['events'][$i] = $event; break; } } } trigger_error('looping schedule event ended'); $colMultiplier = 1; $zIndex = 0; foreach ($data['apps'] as $index => $apps) { $ctr = count($apps); $columnData[$index]['userdata']['ctr'] = $ctr; if ($ctr > $colMultiplier) { $colMultiplier = $ctr; } for ($i = 0; $i < $ctr; $i++) { $app = $apps[$i]; $this->_populateAppointmentRow($app, $columnData, $index, $i, $ctr); } } $header = "{$filters['dateFilter']}<br>"; $title = $filters['dateFilter']; // temporarily set the header as providerId $providerId = (int) $filters['providerId']; $roomId = (int) $filters['roomId']; if ($providerId > 0) { $provider = new Provider(); $provider->setPersonId($providerId); $provider->populate(); $name = $provider->optionName; // we simply replace the comma with its html equivalent (,) because this may cause not to render the header $header .= str_replace(',', ',', $name); $title .= ' -> ' . $name; } if ($roomId > 0) { $room = new Room(); $room->id = $roomId; $room->populate(); if ($providerId > 0) { $header .= '<br>'; } $header .= $room->name; $title .= ' -> ' . $room->name; } $buildings = array(); foreach ($data['events'] as $index => $event) { $this->_populateScheduleEventRow($event, $columnData, $index); $buildingId = (int) $event->buildingId; $building = new Building(); $building->buildingId = $buildingId; $building->populate(); $buildings[$buildingId] = $building->displayName; } $eventBuilding = implode(', ', $buildings); $header .= '<br>(' . $eventBuilding . ')'; $title .= ' -> (' . $eventBuilding . ')'; $header = '<label title="' . $title . '">' . $header . '</label>'; for ($i = 0; $i < $columnDataCtr; $i++) { unset($columnData[$i]['map']); } $columnData[0]['userdata']['colMultiplier'] = $colMultiplier; $columnData[0]['userdata']['providerId'] = $appointment->providerId; $columnData[0]['userdata']['roomId'] = $appointment->roomId; $columnData[0]['userdata']['date'] = $filters['dateFilter']; return array('header' => $header, 'events' => array('rows' => $columnData)); }
public function processRemoveScheduleAction() { $weekday = (int) $this->_getParam('weekday') - 1; $scheduleDate = date('Y-m-d', strtotime($this->_getParam('scheduleDate'))); $providerId = (int) $this->_getParam('providerId'); $roomId = (int) $this->_getParam('roomId'); $scheduleEventId = (int) $this->_getParam('id'); $weekDates = ScheduleEvent::computeWeekDates($scheduleDate); $date = $weekDates['start']; if ($weekday > 0) { $date = date('Y-m-d', strtotime("+{$weekday} days", strtotime($date))); } if ($scheduleEventId > 0) { $scheduleEvent = new ScheduleEvent(); $scheduleEvent->scheduleEventId = $scheduleEventId; $scheduleEvent->setPersistMode(WebVista_Model_ORM::DELETE); $scheduleEvent->persist(); } $start = $date . ' 00:00:00'; $end = $date . ' 23:59:59'; $filters = array(); $filters['providerId'] = $providerId; $filters['roomId'] = $roomId; $filters['start'] = $start; $filters['end'] = $end; $scheduleEventIterator = new ScheduleEventIterator(null, false); $scheduleEventIterator->setFilters($filters); $data = array(); foreach ($scheduleEventIterator as $row) { $data[] = $this->_getEvent($row->scheduleEventId); } $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json'); $json->suppressExit = true; $json->direct($data); }
public function processDeleteEventsAction() { $ids = $this->_getParam('id'); $arrIds = explode(',', $ids); $scheduleEvent = new ScheduleEvent(); foreach ($arrIds as $id) { $scheduleEvent->scheduleEventId = $id; $scheduleEvent->setPersistMode(WebVista_Model_ORM::DELETE); $scheduleEvent->persist(); } $data = true; $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json'); $json->suppressExit = true; $json->direct($data); }
public function processRemoveScheduleAction() { $weekday = (int) $this->_getParam('weekday') - 1; $scheduleDate = date('Y-m-d', strtotime($this->_getParam('scheduleDate'))); $providerId = (int) $this->_getParam('providerId'); $roomId = (int) $this->_getParam('roomId'); $scheduleEventId = (int) $this->_getParam('id'); $weekDates = ScheduleEvent::computeWeekDates($scheduleDate); $date = $weekDates['start']; if ($weekday > 0) { $date = date('Y-m-d', strtotime("+{$weekday} days", strtotime($date))); } if ($scheduleEventId > 0) { $scheduleEvent = new ScheduleEvent(); $scheduleEvent->scheduleEventId = $scheduleEventId; $scheduleEvent->setPersistMode(WebVista_Model_ORM::DELETE); $scheduleEvent->persist(); } $start = $date . ' 00:00:00'; $end = $date . ' 23:59:59'; $stmt = $this->_stmtScheduleEvents($providerId, $roomId, $start, $end); $data = array(); while ($row = $stmt->fetch()) { $data[] = $this->_getEvent($row['scheduleEventId']); } $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json'); $json->suppressExit = true; $json->direct($data); }