public function getReportCsv($fromDate, $toDate) { $event = new Event(); $workshop = new Workshop(); $location = new Location(); $attendee = new Event_Attendee(); // go ahead and get all the workshops so we don't have to do loads of DB queries $workshopList = $workshop->fetchAll(); $workshops = array(); foreach ($workshopList as $w) { $workshops[$w->workshopId] = $w->toArray(); } // go ahead and get all the locations so we don't have to do loads of DB queries $locationList = $location->fetchAll(); $locations = array(); foreach ($locationList as $l) { $locations[$l->locationId] = $l->toArray(); } $events = $event->getEvents(null, null, null, $fromDate, $toDate)->toArray(); $fileName = 'report-' . date('Ymd-B') . '.csv'; $tmpName = tempnam('/tmp', $fileName); $fp = fopen($tmpName, 'w'); $columnNames = array('eventId' => 'eventId', 'workshopId' => 'workshopId', 'workshopTitle' => 'workshopTitle', 'locationId' => 'locationId', 'locationName' => 'locationName', 'eventDate' => 'eventDate', 'startTime' => 'startTime', 'endTime' => 'endTime', 'accountId' => 'accountId', 'username' => 'username', 'firstName' => 'firstName', 'lastName' => 'lastName', 'status' => 'status', 'attended' => 'attended'); $ret = fputcsv($fp, $columnNames, ',', '"'); if ($ret === false) { throw new Ot_Exception_Data('Error writing backup CSV file'); } foreach ($events as &$e) { $e['workshop'] = $workshops[$e['workshopId']]; $e['location'] = $locations[$e['locationId']]; $e['attendees'] = $attendee->getAttendeesForEvent($e['eventId']); foreach ($e['attendees'] as $a) { $data = array(); $data = array('eventId' => $e['eventId'], 'workshopId' => $e['workshopId'], 'workshopTitle' => $e['workshop']['title'], 'locationId' => $e['locationId'], 'locationName' => $e['location']['name'], 'eventDate' => $e['date'], 'startTime' => $e['startTime'], 'endTime' => $e['endTime'], 'accountId' => $a['accountId'], 'username' => $a['username'], 'firstName' => $a['firstName'], 'lastName' => $a['lastName'], 'status' => $a['status'], 'attended' => $a['attended']); $ret = fputcsv($fp, $data, ',', '"'); if ($ret === false) { throw new Ot_Exception_Data('Error writing backup CSV file'); } } } fclose($fp); file_get_contents($tmpName); header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Length: ' . filesize($tmpName)); header("Content-Disposition: attachment; filename={$fileName}"); readfile($tmpName); unlink($tmpName); }
/** * Allows a user to view the list of locations. * */ public function indexAction() { $this->view->acl = array('add' => $this->_helper->hasAccess('add'), 'edit' => $this->_helper->hasAccess('edit'), 'viewDisabled' => $this->_helper->hasAccess('view-disabled')); $locationDb = new Location(); $locations = $locationDb->fetchAll(null, array('status', 'name')); $locationType = new LocationType(); foreach ($locations as $key => $location) { $type = $locationType->getTypeById($location['locationType']); $location->locationType = $type['name']; $locations[$key] = $location; } $this->view->locations = $locations; $this->view->messages = $this->_helper->flashMessenger->getMessages(); $this->_helper->pageTitle('workshop-location-index:title'); }
/** * Allows a user to view the details of a workshop * */ public function detailsAction() { $get = Zend_Registry::get('getFilter'); if (!isset($get->workshopId)) { throw new Ot_Exception_Input('msg-error-workshopIdNotSet'); } $workshop = new Workshop(); $thisWorkshop = $workshop->find($get->workshopId); if (is_null($thisWorkshop)) { throw new Ot_Exception_Data('msg-error-noWorkshop'); } $document = new Workshop_Document(); $this->view->documents = $document->getDocumentsForWorkshop($thisWorkshop->workshopId); $tag = new Tag(); $this->view->tags = $tag->getTagsForAttribute('workshopId', $thisWorkshop->workshopId); $event = new Event(); $events = $event->getEvents($thisWorkshop->workshopId, null, null, time(), null, 'open')->toArray(); $auth = Zend_Auth::getInstance(); foreach ($events as &$e) { if ($auth->hasIdentity()) { $e['status'] = $event->getStatusOfUserForEvent($auth->getIdentity()->accountId, $e['eventId']); } else { $e['status'] = ''; } $e['workshop'] = $thisWorkshop->toArray(); } $this->view->events = $events; $wl = new Workshop_Link(); $this->view->links = $wl->getLinksForWorkshop($thisWorkshop->workshopId)->toArray(); $location = new Location(); $locations = $location->fetchAll(); $locs = array(); foreach ($locations as $l) { $locs[$l->locationId] = $l->toArray(); } $this->view->locations = $locs; $we = new Workshop_Editor(); $isEditor = false; if ($this->_helper->hasAccess('edit-all-workshops')) { $isEditor = true; } elseif ($auth->hasIdentity()) { $isEditor = $we->isEditor($thisWorkshop->workshopId, $auth->getIdentity()->accountId); } $this->view->acl = array('edit' => $isEditor, 'addDocuments' => $isEditor, 'editDocument' => $isEditor, 'deleteDocument' => $isEditor, 'addLink' => $isEditor, 'deleteLink' => $isEditor, 'editLink' => $isEditor, 'reorderLink' => $isEditor, 'addEvent' => $this->_helper->hasAccess('index', 'workshop_schedule'), 'options' => $this->_helper->hasAccess('options')); if ($this->view->acl['edit']) { $we = new Workshop_Editor(); $where = $we->getAdapter()->quoteInto('workshopId = ?', $thisWorkshop->workshopId); $results = $we->fetchAll($where); $currentEditors = array(); foreach ($results as $r) { $currentEditors[] = $r->accountId; } if (count($currentEditors) != 0) { $account = new Ot_Account(); $accounts = $account->fetchAll($account->getAdapter()->quoteInto('accountId IN (?)', $currentEditors), array('lastName', 'firstName')); $currentEditors = $accounts->toArray(); } $this->view->editors = $currentEditors; } $category = new Category(); $thisCategory = $category->find($thisWorkshop->categoryId); $this->view->layout()->setLayout('twocolumn'); $this->view->layout()->rightContent = $this->view->render('index/right.phtml'); $this->view->messages = $this->_helper->flashMessenger->getMessages(); $this->view->title = $thisWorkshop->title; $this->view->workshop = $thisWorkshop->toArray(); $this->view->category = $thisCategory; }
public static function getAll() { if (self::$_locations) { return self::$_locations; } //$region_b = System::getSetting('display_region_b'); //$region_c = System::getSetting('display_region_c'); $tableObj = new Location(); $select = $tableObj->select()->from(array('l' => 'location'))->where('is_deleted = 0')->order('location_name'); $output = array(); try { $rows = $tableObj->fetchAll($select); //reindex with id $indexed = array(); while ($rows->current()) { $indexed[$rows->current()->id] = $rows->current()->toArray(); $rows->next(); } $num_tiers = 1; foreach ($indexed as $row) { //check that the hierarchy works //if the parent is more than one tier higher, then no good unless the middle region is off $is_good = true; $parent_tier = !$row['parent_id'] ? 0 : $indexed[$row['parent_id']]['tier']; if ($row['tier'] > 1 && !$parent_tier) { $is_good = false; } else { if ($parent_tier + 1 != $row['tier']) { $is_good = false; } } $output[$row['id']] = array('id' => $row['id'], 'uuid' => $row['uuid'], 'name' => $row['location_name'], 'parent_id' => $row['parent_id'] ? $row['parent_id'] : 0, 'tier' => $row['tier'], 'is_default' => $row['is_default'], 'is_good' => $is_good); if ($row['tier'] > $num_tiers) { $num_tiers = $row['tier']; } } //check for null parents and add 'unknown' option $has_parents = array(); for ($t = 2; $t <= $num_tiers; $t++) { $has_parents[$t] = true; } for ($t = 2; $t <= $num_tiers; $t++) { foreach ($output as $l) { if (!$l['parent_id']) { $has_parents[$t] = false; } } } /* foreach($has_parents as $t=>$has) { if ( !$has ) $output []= array('id' => 0, 'name' => t('unknown'), 'tier'=>$t-1 ,'is_default'=>0, 'parent_id'=>0); } */ self::$_locations = $output; return self::$_locations; } catch (Zend_Exception $e) { error_log($e); } return null; }
/** * The main scheduler page. This allows a user to view and edit the schedule. Users * will almost certainly need access to this entire controller to make the * scheduler work properly and look right. * */ public function indexAction() { $this->view->acl = array('addEvent' => $this->_helper->hasAccess('add-event')); $get = Zend_Registry::get('getFilter'); if (isset($get->workshopId)) { $workshopId = $get->workshopId; $this->view->workshopId = $workshopId; $this->view->startInAddMode = 1; } if (isset($get->startYear)) { $this->view->startYear = $get->startYear; } else { $this->view->startYear = date('Y'); } if (isset($get->startMonth)) { $this->view->startMonth = $get->startMonth; } else { $this->view->startMonth = date('m'); } $eventId = null; if (isset($get->eventId)) { $eventId = $get->eventId; $this->view->eventId = $eventId; $this->view->startInEditMode = 1; $e = new Event(); $thisEvent = $e->find($eventId)->toArray(); $this->view->locationId = $thisEvent['locationId']; } $zd = new Zend_Date(); $this->view->workshopLength = mktime(1, 0, 0, 1, 1, 1970); $this->view->startTime = mktime(0, 0, 0, 1, 1, 1970); $this->view->endTime = mktime(23, 30, 0, 1, 1, 1970); $this->view->baseTime = mktime(0, 0, 0, 1, 1, 1970); $this->view->today = $zd->get(Zend_Date::MONTH) . "/" . $zd->get(Zend_Date::DAY) . "/" . $zd->get(Zend_Date::YEAR); $this->view->thisYear = $zd->get(Zend_Date::YEAR); $this->view->thisWeek = $zd->get(Zend_Date::WEEK); if (!is_null($eventId)) { $tmpDate = explode('-', $thisEvent['date']); $zd->setYear($tmpDate[0]); $zd->setMonth($tmpDate[1]); $zd->setDay($tmpDate[2]); } $this->view->year = $zd->get(Zend_Date::YEAR); $this->view->week = $zd->get(Zend_Date::WEEK); $this->_helper->pageTitle('workshop-schedule-index:title'); $workshop = new Workshop(); $where = $workshop->getAdapter()->quoteInto('status = ?', 'enabled'); $workshops = $workshop->fetchAll($where, 'title'); $workshopList = array(); $workshopList[0] = ""; foreach ($workshops as $w) { $workshopList[$w->workshopId] = $w->title; } $this->view->workshops = $workshopList; $location = new Location(); $where = $location->getAdapter()->quoteInto('status = ?', 'enabled'); $locations = $location->fetchAll($where, 'name'); if (count($locations) == 0) { $this->_helper->redirector->gotoUrl('/workshop/schedule/noLocationsFound'); } foreach ($locations as $l) { $locationList[$l->locationId] = $l->name; } $this->view->locationList = $locationList; //get all the users available for the instructor list $profile = new Ot_Account(); $profiles = $profile->fetchAll(null, array('lastName', 'firstName'))->toArray(); $instructors = array(); foreach ($profiles as $p) { $instructors[$p['username']] = $p['lastName'] . ", " . $p['firstName']; } $this->view->messages = $this->_helper->flashMessenger->getMessages(); $this->view->instructors = $instructors; $this->view->headScript()->appendFile($this->view->baseUrl() . '/public/scripts/jMonthCalendar-1.1.0.js'); //$this->view->headScript()->appendFile($this->view->baseUrl() . '/scripts/jMonthCalendar-1.2.2.js'); $this->view->headScript()->appendFile($this->view->baseUrl() . '/public/scripts/jquery.bt.min.js'); }
public function form($values = array()) { $config = Zend_Registry::get('config'); $form = new Zend_Form(); $form->setAttrib('id', 'eventForm')->setDecorators(array('FormElements', array('HtmlTag', array('tag' => 'div', 'class' => 'zend_form')), 'Form')); $workshop = new Workshop(); $where = $workshop->getAdapter()->quoteInto('status = ?', 'enabled'); $workshops = $workshop->fetchAll($where, 'title'); $workshopList = array(); foreach ($workshops as $w) { $workshopList[$w->workshopId] = $w->title; } $workshopElement = $form->createElement('select', 'workshop', array('label' => 'Workshop:')); $workshopElement->setMultiOptions($workshopList)->setValue(isset($values['workshopId']) ? $values['workshopId'] : ''); $location = new Location(); $where = $location->getAdapter()->quoteInto('status = ?', 'enabled'); $locations = $location->fetchAll($where, 'name'); $locationList = array(); $locationCapacity = array(); foreach ($locations as $l) { $locationList[$l->locationId] = $l->name; $locationCapacity['loc_' . $l->locationId] = $l->capacity; } $locationIds = array_keys($locationList); // add the location capacities to the page in js so we can process it as a json object for the "live" max size changing with location selection Zend_Layout::getMvcInstance()->getView()->headScript()->appendScript('var locationCapacitiesString = ' . Zend_Json::encode($locationCapacity) . ';'); $locationElement = $form->createElement('select', 'location', array('label' => 'Location:')); $locationElement->setMultiOptions($locationList)->setValue(isset($values['locationId']) ? $values['locationId'] : $locationCapacity['loc_' . $locationIds[0]]); $date = $form->createElement('text', 'date', array('label' => 'Date:')); $date->setRequired(true)->addFilter('StringTrim')->addFilter('StripTags')->setAttrib('maxlength', '128')->setAttrib('style', 'width: 200px')->setValue(isset($values['date']) ? strftime('%A, %B %e, %Y', strtotime($values['date'])) : ''); $password = $form->createElement('text', 'password', array('label' => 'Event Password:'******'StringTrim')->addFilter('StripTags')->setAttrib('maxlength', '100')->setValue(isset($values['password']) ? $values['password'] : ''); // add the start time selector $startTimeSub = new Zend_Form_SubForm(); $startTimeSub->setDecorators(array('FormElements', array('HtmlTag', array('tag' => 'div', 'class' => 'zend_form')))); $startTimeSub->setAttrib('class', 'sub'); $startTimeHour = $startTimeSub->createElement('select', 'hour', array('label' => 'Start Time:')); for ($i = 1; $i <= 12; $i++) { $startTimeHour->addMultiOption($i, $i); } $startTimeHour->setDecorators(array(array('ViewHelper', array('helper' => 'formSelect')), array('Label'))); $startTimeHour->setValue(isset($values['startTime']) ? date('g', strtotime($values['startTime'])) : date('g')); $startTimeMinute = $startTimeSub->createElement('select', 'minute'); for ($i = 0; $i < 60; $i += 5) { $startTimeMinute->addMultiOption(str_pad($i, 2, '0', STR_PAD_LEFT), str_pad($i, 2, '0', STR_PAD_LEFT)); } $startTimeMinute->setDecorators(array(array('ViewHelper', array('helper' => 'formSelect')))); $startTimeMinute->setValue(isset($values['startTime']) ? date('i', strtotime($values['startTime'])) : date('i')); $startTimeMeridian = $startTimeSub->createElement('select', 'meridian'); $startTimeMeridian->addMultiOption('am', 'AM')->addMultiOption('pm', 'PM')->setDecorators(array(array('ViewHelper', array('helper' => 'formSelect')))); $startTimeMeridian->setValue(isset($values['startTime']) ? date('a', strtotime($values['startTime'])) : date('a')); $startTimeSub->addElements(array($startTimeHour, $startTimeMinute, $startTimeMeridian)); // add the end time selector $endTimeSub = new Zend_Form_SubForm(); $endTimeSub->setDecorators(array('FormElements', array('HtmlTag', array('tag' => 'div', 'class' => 'zend_form')))); $endTimeSub->setAttrib('class', 'sub'); $endTimeHour = $endTimeSub->createElement('select', 'hour', array('label' => 'End Time:')); for ($i = 1; $i <= 12; $i++) { $endTimeHour->addMultiOption($i, $i); } $endTimeHour->setDecorators(array(array('ViewHelper', array('helper' => 'formSelect')), array('Label'))); $endTimeHour->setValue(isset($values['endTime']) ? date('g', strtotime($values['endTime'])) : date('g')); $endTimeMinute = $endTimeSub->createElement('select', 'minute'); for ($i = 0; $i < 60; $i += 5) { $endTimeMinute->addMultiOption(str_pad($i, 2, '0', STR_PAD_LEFT), str_pad($i, 2, '0', STR_PAD_LEFT)); } $endTimeMinute->setDecorators(array(array('ViewHelper', array('helper' => 'formSelect')))); $endTimeMinute->setValue(isset($values['endTime']) ? date('i', strtotime($values['endTime'])) : date('i')); $endTimeMeridian = $endTimeSub->createElement('select', 'meridian'); $endTimeMeridian->addMultiOption('am', 'AM')->addMultiOption('pm', 'PM')->setDecorators(array(array('ViewHelper', array('helper' => 'formSelect')))); $endTimeMeridian->setValue(isset($values['endTime']) ? date('a', strtotime($values['endTime'])) : date('a')); $endTimeSub->addElements(array($endTimeHour, $endTimeMinute, $endTimeMeridian)); // get all the users available for the instructor list $otAccount = new Ot_Account(); $accounts = $otAccount->fetchAll(null, array('lastName', 'firstName'))->toArray(); $instructorList = array(); foreach ($accounts as $a) { $instructorList[$a['accountId']] = $a['lastName'] . ", " . $a['firstName']; } $instructorElement = $form->createElement('multiselect', 'instructors', array('label' => 'Instructor(s):')); $instructorElement->setMultiOptions($instructorList)->setAttrib('size', 10)->setValue(isset($values['instructorIds']) ? $values['instructorIds'] : ''); $minSize = $form->createElement('text', 'minSize', array('label' => 'Min Size:')); $minSize->setRequired(true)->addFilter('StringTrim')->addFilter('StripTags')->setAttrib('maxlength', '64')->setAttrib('style', 'width: 50px;')->setValue(isset($values['minSize']) ? $values['minSize'] : $config->user->defaultMinWorkshopSize->val); $maxSize = $form->createElement('text', 'maxSize', array('label' => 'Max Size:')); $maxSize->setRequired(true)->addFilter('StringTrim')->addFilter('StripTags')->setAttrib('maxlength', '64')->setAttrib('style', 'width: 50px;')->setValue(isset($values['maxSize']) ? $values['maxSize'] : $locationElement->getValue()); $waitlistSize = $form->createElement('text', 'waitlistSize', array('label' => 'Waitlist Size:')); $waitlistSize->setRequired(true)->addFilter('StringTrim')->addFilter('StripTags')->setAttrib('maxlength', '64')->setAttrib('style', 'width: 50px;')->setValue(isset($values['waitlistSize']) ? $values['waitlistSize'] : $config->user->defaultWorkshopWaitlistSize->val); $evaluationType = $form->createElement('select', 'evaluationType', array('label' => 'Evaluation Type:')); $evaluationType->setMultiOptions(array('default' => 'Default', 'google' => 'Google Form'))->setRequired(true)->setValue(isset($values['evaluationType']) ? $values['evaluationType'] : 'default'); $formKey = $form->createElement('textarea', 'formKey', array('label' => 'Google Form Question Key:')); $formKey->setAttribs(array('cols' => '10', 'rows' => '5', 'style' => 'width : 250px;'))->addDecorators(array('ViewHelper', 'Errors', 'HtmlTag', array('Label', array('tag' => 'span')), array(array('elementDiv' => 'HtmlTag'), array('tag' => 'div', 'id' => 'formKey', 'class' => 'elm'))))->setValue(isset($values['formKey']) ? $values['formKey'] : ''); $answerKey = $form->createElement('textarea', 'answerKey', array('label' => 'Google Form Answer Key:')); $answerKey->addFilter('StringTrim')->addFilter('StripTags')->setAttribs(array('cols' => '10', 'rows' => '3', 'style' => 'width : 250px;'))->addDecorators(array('ViewHelper', 'Errors', 'HtmlTag', array('Label', array('tag' => 'span')), array(array('elementDiv' => 'HtmlTag'), array('tag' => 'div', 'id' => 'answerKey', 'class' => 'elm'))))->setValue(isset($values['answerKey']) ? $values['answerKey'] : ''); $submit = $form->createElement('submit', 'submitButton', array('label' => 'Submit')); $submit->setDecorators(array(array('ViewHelper', array('helper' => 'formSubmit')))); $cancel = $form->createElement('button', 'cancel', array('label' => 'Cancel')); $cancel->setAttrib('id', 'cancel'); $cancel->setDecorators(array(array('ViewHelper', array('helper' => 'formButton')))); $form->addElements(array($workshopElement, $locationElement, $password, $date, $evaluationType))->addSubForms(array('startTime' => $startTimeSub, 'endTime' => $endTimeSub))->addElements(array($minSize, $maxSize, $waitlistSize, $instructorElement)); $form->addDisplayGroup(array('instructors'), 'instructors-group', array('legend' => 'Instructors')); $form->addDisplayGroup(array('workshop', 'password', 'location', 'minSize', 'maxSize', 'waitlistSize'), 'generalInformation', array('legend' => 'General Information')); $form->setElementDecorators(array('ViewHelper', 'Errors', array('HtmlTag', array('tag' => 'div', 'class' => 'elm')), array('Label', array('tag' => 'span'))))->addElements(array($submit, $cancel)); $form->addElements(array($evaluationType, $formKey, $answerKey)); $form->addDisplayGroup(array('evaluationType', 'formKey', 'answerKey'), 'evaluationTypes', array('legend' => 'Evaluations')); $form->addDisplayGroup(array('submitButton', 'cancel'), 'buttons'); $form->setDisplayGroupDecorators(array('FormElements', array('HtmlTag', array('tag' => 'div', 'class' => 'widget-content')), array(array('elementDiv' => 'HtmlTag'), array('tag' => 'div', 'class' => array('widget-footer', 'ui-corner-bottom'), 'placement' => Zend_Form_Decorator_Abstract::APPEND)), array('FieldSet', array('class' => 'formField')))); $buttons = $form->getDisplayGroup('buttons'); $buttons->setDecorators(array('FormElements', array('HtmlTag', array('tag' => 'div', 'style' => 'clear : both;')))); if (isset($values['eventId'])) { $eventId = $form->createElement('hidden', 'eventId'); $eventId->setValue($values['eventId']); $eventId->setDecorators(array(array('ViewHelper', array('helper' => 'formHidden')))); $form->addElement($eventId); } return $form; }