/** * Handles the evaluation for an event. Shows the user the evaluation and * saves the data from the evaluation. * */ public function indexAction() { $get = Zend_Registry::get('getFilter'); if (!isset($get->eventId)) { throw new Ot_Exception_Input('msg-error-eventIdNotSet'); } $event = new Event(); $eu = new Evaluation_User(); $evaluation = new Evaluation(); $thisEvent = $event->find($get->eventId); if (is_null($thisEvent)) { throw new Ot_Exception_Data('msg-error-noEvent'); } $this->view->event = $thisEvent->toArray(); $thisAccount = Zend_Auth::getInstance()->getIdentity(); $status = $event->getStatusOfUserForEvent($thisAccount->accountId, $thisEvent->eventId); if ($status == "instructor") { throw new Ot_Exception_Access('msg-error-cannotEval'); } if ($status != "attending") { throw new Ot_Exception_Access('msg-error-notAttended'); } $config = Zend_Registry::get('config'); $endDt = strtotime($thisEvent->date . " " . $thisEvent->endTime); if (time() > $endDt + $config->user->numHoursEvaluationAvailability->val * 3600) { throw new Ot_Exception_Access('msg-error-evalEnded'); } if ($eu->hasCompleted($thisAccount->accountId, $thisEvent->eventId)) { throw new Ot_Exception_Access('msg-error-alreadyEval'); } $workshop = new Workshop(); $thisWorkshop = $workshop->find($thisEvent->workshopId); if (is_null($thisWorkshop)) { throw new Ot_Exception_Data('msg-error-noWorkshop'); } $this->view->workshop = $thisWorkshop->toArray(); $instructor = new Event_Instructor(); $instructors = $instructor->getInstructorsForEvent($thisEvent->eventId); $inst = array(); foreach ($instructors as $i) { $inst[] = $i['firstName'] . ' ' . $i['lastName']; } $this->view->instructors = $inst; // lookup the location of the event $location = new Location(); $thisLocation = $location->find($thisEvent->locationId); if (is_null($thisLocation)) { throw new Ot_Exception_Data('msg-error-noLocation'); } $this->view->location = $thisLocation->toArray(); if ($thisEvent->evaluationType == 'custom') { $form = $evaluation->form(); $this->view->form = $form; } if ($this->_request->isPost()) { if ($thisEvent->evaluationType == 'custom') { if ($form->isValid($_POST)) { $custom = new Ot_Custom(); $attributes = $custom->getAttributesForObject('evaluations'); $data = array(); foreach ($attributes as $a) { $data[$a['attributeId']] = is_null($form->getValue('custom_' . $a['attributeId'])) ? '' : $form->getValue('custom_' . $a['attributeId']); } // custom attributes is the custom array that will be save by the CustomAttributes model $evaluation->saveEvaluation($thisEvent->eventId, $thisAccount->accountId, $data); $this->_helper->flashMessenger->addMessage('msg-info-evalThanks'); $this->_redirect('/'); } } elseif ($thisEvent->evaluationType == 'google' && isset($_POST['googleSubmit'])) { $eu = new Evaluation_User(); $dba = $eu->getAdapter(); $dba->beginTransaction(); $data = array('eventId' => $get->eventId, 'accountId' => $thisAccount->accountId); try { $eu->insert($data); } catch (Exception $e) { $dba->rollBack(); throw $e; } $dba->commit(); $this->_helper->flashMessenger->addMessage('msg-info-evalThanks'); $this->_redirect('/'); } } if ($thisEvent->evaluationType == 'google') { $evaluationKeys = new Evaluation_Key(); $keys = $evaluationKeys->find($get->eventId); if (is_null($keys)) { throw new Ot_Exception_Data('msg-error-noFormKey'); } $this->view->keys = $keys->toArray(); } $this->_helper->pageTitle('workshop-evaluate-index:title'); }
public function getEventsForUser($accountId) { $config = Zend_Registry::get('config'); $attendee = new Event_Attendee(); $instructor = new Event_Instructor(); $location = new Location(); $document = new Workshop_Document(); $account = new Ot_Account(); $eu = new Evaluation_User(); $stayOpen = new Zend_Date(); $stayOpen->subHour($config->user->numHoursEvaluationAvailability->val); $locationCache = array(); $reservations = $attendee->getEventsForAttendee($accountId); $time = time(); foreach ($reservations as &$r) { $r['active'] = false; // we determine if the class is open $startDt = new Zend_Date(strtotime($r['date'] . ' ' . $r['startTime'])); $endDt = new Zend_Date(strtotime($r['date'] . ' ' . $r['endTime'])); $endDt->addHour($config->user->numHoursEvaluationAvailability->val); $r['evaluatable'] = $this->isEvaluatable($r['eventId']); // checks to see if its possible that the class is open for evaluation if ($r['evaluatable'] && !$eu->hasCompleted($accountId, $r['eventId'])) { $r['active'] = true; } elseif ($startDt->getTimestamp() > $time) { $r['active'] = true; } $r = array_merge(array('startDt' => $startDt->getTimestamp()), $r); $r['hasHandouts'] = false; $documents = $document->getDocumentsForWorkshop($r['workshopId']); if (count($documents) > 0) { $r['hasHandouts'] = true; } $r['cancelable'] = false; if ($r['active']) { $startDt->subHour($config->user->numHoursEventCancel->val); $r['cancelable'] = $startDt->getTimestamp() > $time; if ($r['status'] == 'waitlist') { $waiting = $attendee->getAttendeesForEvent($r['eventId'], 'waitlist'); $position = 1; foreach ($waiting as $w) { if ($accountId == $w['accountId']) { break; } $position++; } $r['waitlistPosition'] = $position; } } } // Get presently taught classes $teaching = $instructor->getEventsForInstructor($accountId); foreach ($teaching as &$t) { $startDt = new Zend_Date(strtotime($t['date'] . ' ' . $t['startTime'])); $endDt = new Zend_Date(strtotime($t['date'] . ' ' . $t['endTime'])); $endDt->addHour($config->user->numHoursEvaluationAvailability->val); $t = array_merge(array('startDt' => $startDt->getTimestamp()), $t); $t['active'] = false; // checks to see if its possible that the class is open for evaluation if ($endDt->getTimestamp() > $time) { $t['active'] = true; } $t['status'] = 'instructor'; } $events = array_merge($reservations, $teaching); // sort by event order $eDates = array(); foreach ($events as $key => $value) { $eDates[$key] = $value['startDt']; } asort($eDates); $newEvents = array(); foreach (array_keys($eDates) as $key) { $newEvents[] = $events[$key]; } $events = $newEvents; $currentEvents = array(); $pastEvents = array(); foreach ($events as $e) { $where = $instructor->getAdapter()->quoteInto('eventId = ?', $e['eventId']); $instructors = $instructor->fetchAll($where); $instructorIds = array(); foreach ($instructors as $i) { $instructorIds[] = $i->accountId; } if (count($instructorIds) != 0) { $accounts = $account->fetchAll($account->getAdapter()->quoteInto('accountId IN (?)', $instructorIds), array('lastName', 'firstName')); foreach ($accounts as $a) { $e['instructors'][] = $a->firstName . ' ' . $a->lastName; } } if (isset($locationCache[$e['locationId']])) { $e['location'] = $locationCache[$e['locationId']]; } else { $thisLocation = $location->find($e['locationId']); if (is_null($thisLocation)) { throw new Ot_Exception_Data('Location not found'); } $e['location'] = $thisLocation->toArray(); $locationCache[$e['locationId']] = $e['location']; } if ($e['active']) { $currentEvents[] = $e; } else { if ($e['status'] != 'waitlist') { $pastEvents[] = $e; } } } $ret = array('currentEvents' => $currentEvents, 'pastEvents' => array_reverse($pastEvents)); return $ret; }