'Text', 'Cost' => 'Currency' ); static $has_many = array ( 'DateTimes' => 'TripDateTime' ); static $has_one = array ( 'TripHolder' => 'TripHolder', 'Registration' => 'TripRegistration' ); static $can_be_root = false; static $hide_ancestor = 'CalendarEvent'; public function getCMSFields() { $f = parent::getCMSFields(); $f->addFieldToTab('Root.Content.Main', new TextField('Location',_t('Trip.LOCATION','The Trip Location')), 'Content'); $f->addFieldToTab("Root.Content.Main", new CurrencyField('Cost',_t('Trip.COST','Trip Cost')),'Content'); $f->addFieldToTab("Root.Content.Registration", new DataObjectManager( $this, 'Registration', 'TripRegistration', array( 'Name' => 'Name', 'Email' => 'Email', 'Mobile' => 'Mobile' ),'getCMSfields_forPopup', "'TripID' = '{$this->ID}'" )); return $f; } } class Trip_Controller extends CalendarEvent_Controller { static $allowed_actions = array ( 'register', 'RegistrationForm' ); public function register(SS_HTTPRequest $request) { if(!$request->requestVar('DateID')) { return Director::redirectBack(); } return array(); } public function RegistrationForm() { $date_id = (int) $this->getRequest()->requestVar('DateID'); if(!$date = DataObject::get_by_id("TripDateTime", $date_id)) { return $this->httpError(404); } $date_map = array(); if($Trip = $date->Trip()) { if($all_dates = $Trip->DateTimes()) { $date_map = $all_dates->toDropdownMap('ID','DateLabel'); } } return new Form ( $this, "RegistrationForm", new Fieldset ( new TextField('Name', _t('Trip.Name','Name')), new EmailField('Email', _t('Trip.EMAIl','Email')), new TextField('Mobile', _t('Trip.Mobile','Mobile')), new DropdownField('DateID', _t('Trip.CHOOSEDATE','Choose a date'), $date_map, $date_id) ), new FieldSet ( new FormAction('doRegister', _t('Trip.REGISTER','Register')) ), new RequiredFields('Name','Email','Mobile','DateID') ); } public function doRegister($data, $form) { // Sanity check if(!isset($data['DateID'])) { return Director::redirectBack(); } if(!$date = DataObject::get_by_id("TripDateTime", (int) $data['DateID'])) { return $this->httpError(404); } $trip = $date->Trip(); // Save the registration $form->saveInto($reg = new TripRegistration()); $reg->TripHolderID = $date->Trip()->ParentID; $reg->write(); // Decrease the tickets available $date->TicketsAvailable--; $date->write(); // Email the admin $email = new Email($data['Email'], "majed_m9@hotmail.com", "Event Registration: {$trip->Title}"); $email->ss_template = "TripRegistration"; $email->populateTemplate(array( 'Registration' => $reg )); $email->send(); $form->sessionMessage(_t('Trip.THANKYOU','Thank you for signing up!'),'good'); return Director::redirectBack(); } } ?>