public function getWeek($week, $year, $locationId = null) { $zd = new Zend_Date(); $event = new Event(); $workshop = new Workshop(); if ($week == 1) { $calData['prevWeekNum'] = 52; $calData['prevYear'] = $year - 1; $calData['nextWeekNum'] = 2; $calData['nextYear'] = $year; } else { if ($week == 52) { $calData['prevWeekNum'] = 51; $calData['prevYear'] = $year; $calData['nextWeekNum'] = 1; $calData['nextYear'] = $year + 1; } else { $calData['prevWeekNum'] = $week - 1; $calData['prevYear'] = $year; $calData['nextWeekNum'] = $week + 1; $calData['nextYear'] = $year; } } // go back to the current week $zd->setYear($year); $zd->setWeek($week); // set the weekday to sunday for the display purposes $zd->setWeekday("sunday"); $month = $zd->get(Zend_Date::MONTH_SHORT); for ($x = 0; $x < 7; $x++) { $tmp = array(); $tmp['startDay'] = $zd->get(Zend_Date::WEEKDAY_DIGIT); $tmp['month'] = $zd->get(Zend_Date::MONTH_SHORT); $tmp['day'] = $zd->get(Zend_Date::DAY_SHORT); $tmp['monthName'] = $zd->get(Zend_Date::MONTH_NAME); $tmp['monthDays'] = $zd->get(Zend_Date::MONTH_DAYS); $tmp['year'] = $zd->get(Zend_Date::YEAR); $tmp['weekNum'] = $zd->get(Zend_Date::WEEK); $tmp['date'] = $zd->getTimestamp(); $calData[$x] = $tmp; $where = $event->getAdapter()->quoteInto('date = ?', $tmp['year'] . "-" . $tmp['month'] . "-" . $tmp['day']); $where .= " AND "; $where .= $event->getAdapter()->quoteInto('status = ?', 'open'); if (!is_null($locationId)) { $where .= " AND "; $where .= $event->getAdapter()->quoteInto('locationId = ?', $locationId); } $calData[$x]['events'] = $event->fetchAll($where, 'startTime')->toArray(); for ($y = 0; $y < count($calData[$x]['events']); $y++) { if (isset($calData[$x]['events'][$y]['workshopId'])) { $tmpStart = strtotime($calData[$x]['events'][$y]['startTime']); $tmpEnd = strtotime($calData[$x]['events'][$y]['endTime']); $calData[$x]['events'][$y]['numMinutes'] = ($tmpEnd - $tmpStart) / 60; $workshopId = $calData[$x]['events'][$y]['workshopId']; $calData[$x]['events'][$y]['workshop'] = $workshop->find($workshopId)->toArray(); } } $zd->addDay(1); } $calData['weekNum'] = $zd->get(Zend_Date::WEEK); $calData['year'] = $year; return $calData; }
/** * Allows a user to create an event. * */ public function addEventAction() { $messages = array(); $get = Zend_Registry::get('getFilter'); $event = new Event(); $values = array(); if (isset($get->date)) { $values['date'] = $get->date; } $form = $event->form($values); if ($this->_request->isPost()) { if ($form->isValid($_POST)) { $workshopId = $form->getValue('workshop'); $locationId = $form->getValue('location'); $startTime = $form->getValue('startTime'); $endTime = $form->getValue('endTime'); $date = $form->getValue('date'); $minSize = $form->getValue('minSize'); $maxSize = $form->getValue('maxSize'); $waitlistSize = $form->getValue('waitlistSize'); $instructors = $form->getValue('instructors'); $password = $form->getValue('password'); $evaluationType = $form->getValue('evaluationType'); $formKey = $form->getValue('formKey'); $answerKey = $form->getValue('answerKey'); if (isset($formKey) && $formKey != '') { $regex = '(?<=key\\=)\\w*'; $matches = array(); preg_match_all("/" . $regex . "/is", $form->getValue('formKey'), $matches); $formKey = $matches[0][0]; } if (isset($answerKey) && $answerKey != '') { $regex = '(?<=key\\=)\\w*'; $matches = array(); preg_match_all("/" . $regex . "/is", $form->getValue('answerKey'), $matches); $answerKey = $matches[0][0]; } $date = strtotime($date); $date = strftime('%Y', $date) . "-" . strftime('%m', $date) . "-" . strftime('%d', $date); if (strtolower($startTime['meridian']) == "pm" && $startTime['hour'] < 12) { $startTime['hour'] += 12; } if (strtolower($startTime['meridian']) == "am" && $startTime['hour'] == 12) { $startTime['hour'] = 0; } if (strtolower($endTime['meridian']) == "pm" && $endTime['hour'] < 12) { $endTime['hour'] += 12; } if (strtolower($endTime['meridian']) == "am" && $endTime['hour'] == 12) { $endTime['hour'] = 0; } $timesOk = true; $st = new Zend_Date($date); $st->setHour($startTime['hour'])->setMinute($startTime['minute']); $et = new Zend_Date($date); $et->setHour($endTime['hour'])->setMinute($endTime['minute']); if ($st->isLater($et)) { $timesOk = false; $messages[] = "msg-error-eventStartsAfter"; } else { if ($st->equals($et)) { $timesOk = false; $messages[] = "msg-error-eventTimesEqual"; } } $startTime = $startTime['hour'] . ":" . $startTime['minute'] . ":00"; $endTime = $endTime['hour'] . ":" . $endTime['minute'] . ":00"; $where = $event->getAdapter()->quoteInto('date = ?', $date) . " AND " . $event->getAdapter()->quoteInto('locationId = ?', $locationId) . " AND " . $event->getAdapter()->quoteInto('status = ?', 'open'); $possibleConflicts = $event->fetchAll($where); $conflictFound = false; if ($possibleConflicts->count() > 0) { $startTs = strtotime($startTime); $endTs = strtoTime($endTime); foreach ($possibleConflicts as $pc) { $pcStart = strtotime($pc->startTime); $pcEnd = strtotime($pc->endTime); if ($startTs == $pcStart) { $conflictFound = true; } else { if ($startTs < $pcStart && $endTs > $pcStart) { $conflictFound = true; } else { if ($startTs >= $pcStart && $endTs <= $pcEnd) { $conflictFound = true; } else { if ($startTs < $pcEnd && $endTs >= $pcEnd) { $conflictFound = true; } else { if ($startTs < $pcStart && $endTime > $pcEnd) { $conflictFound = true; } } } } } if ($conflictFound) { $messages[] = "msg-error-eventAlreadyScheduled"; break; } } } $evaluationCheck = true; if ($evaluationType == 'google') { $evaluationCheck = isset($formKey) && isset($answerKey); } else { $evaluationCheck = $evaluationType == 'default'; } if (!$evaluationCheck) { $messages[] = 'msg-error-eventFormKeyMissing'; } if (!$conflictFound && $timesOk && $evaluationCheck) { $data = array('locationId' => $locationId, 'workshopId' => $workshopId, 'startTime' => $startTime, 'endTime' => $endTime, 'date' => $date, 'minSize' => $minSize, 'maxSize' => $maxSize, 'waitlistSize' => $waitlistSize, 'password' => $password, 'evaluationType' => $evaluationType, 'formKey' => $formKey, 'answerKey' => $answerKey); $eventId = $event->insert($data); $instructor = new Event_Instructor(); foreach ($instructors as $i) { $instructor->insert(array('accountId' => $i, 'eventId' => $eventId)); } $this->_helper->flashMessenger->addMessage('msg-info-eventAdded'); $date = explode('-', $date); $this->_helper->redirector->gotoUrl('/workshop/schedule?startYear=' . $date[0] . '&startMonth=' . (int) $date[1]); } } else { $messages[] = "msg-error-formSubmitProblem"; } } $this->view->messages = $messages; $this->view->headScript()->appendFile($this->view->baseUrl() . '/scripts/jquery.autocomplete.js'); $this->view->headScript()->appendFile($this->view->baseUrl() . '/scripts/workshop/schedule/help.js'); $this->view->headLink()->appendStylesheet($this->view->baseUrl() . '/css/jquery.autocomplete.css'); $this->view->headLink()->appendStylesheet($this->view->baseUrl() . '/css/workshop/schedule/help.css'); $this->view->form = $form; $this->_helper->pageTitle('workshop-schedule-addEvent:title'); }