public function processEditAction() { $scheduleEventId = (int) $this->_getParam('scheduleEventId'); $weekday = (int) $this->_getParam('weekday'); $scheduleDate = date('Y-m-d', strtotime($this->_getParam('scheduleDate'))); $params = $this->_getParam('schedules'); $weekDates = ScheduleEvent::computeWeekDates($scheduleDate); $date = $weekDates['start']; $weekday--; if ($weekday > 0) { $date = date('Y-m-d', strtotime("+{$weekday} days", strtotime($date))); } $params['start'] = $date . ' ' . date('H:i', strtotime($params['start'])); $params['end'] = $date . ' ' . date('H:i', strtotime($params['end'])); $scheduleEvent = new ScheduleEvent(); $scheduleEvent->scheduleEventId = $scheduleEventId; $ret = $scheduleEvent->populate(); $scheduleEvent->populateWithArray($params); if (!$ret) { $schedule = new Schedule(); $schedule->providerId = $scheduleEvent->providerId; $schedule->roomId = $scheduleEvent->roomId; $schedule->populateByProviderRoomId(); $scheduleEvent->scheduleId = $schedule->scheduleId; $scheduleEvent->scheduleEventId = 0; //$scheduleEvent->title = preg_replace('/^schedule /i','Event ',$schedule->title); //$scheduleEvent->scheduleCode = ''; } $scheduleEvent->persist(); $data = (int) $scheduleEvent->scheduleEventId; $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json'); $json->suppressExit = true; $json->direct($data); }
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 processCopyToUserAddAction() { $dateStart = date('Y-m-d', strtotime($this->_getParam('dateStart'))); $dateEnd = date('Y-m-d', strtotime($this->_getParam('dateEnd'))); $providerIdTo = (int) $this->_getParam('providerIdTo'); $roomIdTo = (int) $this->_getParam('roomIdTo'); $providerIdFrom = (int) $this->_getParam('providerIdFrom'); $roomIdFrom = (int) $this->_getParam('roomIdFrom'); $start = $dateStart . ' 00:00:00'; $end = $dateEnd . ' 23:59:59'; $scheduleEvent = new ScheduleEvent(); $scheduleEvent->providerId = $providerIdTo; $scheduleEvent->roomId = $roomIdTo; $scheduleEvent->start = $start; $scheduleEvent->end = $end; $scheduleEvent->deleteByDateRange(); // remove any existing data $data = 0; $providerId = $providerIdFrom; $roomId = $roomIdFrom; $start = $dateStart . ' 00:00:00'; $end = $dateEnd . ' 23:59:59'; $stmt = $this->_stmtScheduleEvents($providerId, $roomId, $start, $end); while ($event = $stmt->fetch()) { $row = new ScheduleEvent(); $row->populateWithArray($event); $row->scheduleEventId = 0; $row->providerId = $providerIdTo; $row->roomId = $roomIdTo; $row->persist(); $data++; } $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json'); $json->suppressExit = true; $json->direct($data); }