public function placeOrder(SS_HTTPRequest $request)
 {
     $eventbrite_event_header = $request->getHeader('X-Eventbrite-Event');
     if (!$eventbrite_event_header) {
         return $this->httpError(403);
     }
     if ($eventbrite_event_header !== 'order.placed') {
         return $this->httpError(403);
     }
     if (!$this->isJson()) {
         return $this->httpError(403);
     }
     $json_request = $this->getJsonRequest();
     if (!isset($json_request['config']) || !isset($json_request['api_url'])) {
         return $this->httpError(403);
     }
     $config = $json_request['config'];
     if (!isset($config['action']) || $config['action'] !== 'order.placed') {
         return $this->httpError(403);
     }
     $current_local_url = Controller::join_links(Director::absoluteBaseURL(), $request->getURL());
     if (!isset($config['endpoint_url']) || $config['endpoint_url'] !== $current_local_url) {
         return $this->httpError(403);
     }
     try {
         $this->manager->registerEvent('ORDER_PLACED', $json_request['api_url']);
     } catch (Exception $ex) {
         SS_Log::log($ex->getMessage(), SS_Log::ERR);
         return $this->httpError(500);
     }
     return true;
 }
 public function saveSummitAttendeeInfo($data, Form $form)
 {
     if ($current_member = Member::currentUser()) {
         $attendee = $current_member->getCurrentSummitAttendee();
         if (!$attendee && !isset($data['SelectedAttendee'])) {
             try {
                 if (Session::get('attendees')) {
                     // already retrieved data
                     $form->sessionMessage('Please select an attendee', "bad");
                     return $this->owner->redirect($this->owner->Link('attendeeInfoRegistration'));
                 }
                 $attendees = $this->manager->getOrderAttendees($data['ExternalOrderId']);
                 Session::set('attendees', $attendees);
                 Session::set('ExternalOrderId', $data['ExternalOrderId']);
                 Session::set('SharedContactInfo', $data['SharedContactInfo']);
                 return $this->owner->redirect($this->owner->Link('attendeeInfoRegistration'));
             } catch (InvalidEventbriteOrderStatusException $ex1) {
                 Session::clear('attendees');
                 Session::clear('ExternalOrderId');
                 Session::clear('SharedContactInfo');
                 $form->sessionMessage('Current order was cancelled, please try with another one!', "bad");
                 return $this->owner->redirect($this->owner->Link('attendeeInfoRegistration'));
             }
         }
         if ($attendee) {
             return $this->owner->redirect($this->owner->Link('attendeeInfoRegistration'));
         }
         if (isset($data['SelectedAttendee'])) {
             try {
                 // register attendee with current member
                 $attendees = Session::get('attendees');
                 $external_order_id = Session::get('ExternalOrderId');
                 $external_attendee_id = $data['SelectedAttendee'];
                 $selected_attendee_data = $attendees[$external_attendee_id];
                 $external_event_id = $selected_attendee_data['event_id'];
                 $external_ticket_class_id = $selected_attendee_data['ticket_class_id'];
                 $created = $selected_attendee_data['created'];
                 $this->manager->registerAttendee($current_member, $external_event_id, $external_order_id, $external_attendee_id, $external_ticket_class_id, $created, $data['SharedContactInfo']);
                 Session::clear('attendees');
                 Session::clear('ExternalOrderId');
                 Session::clear('SharedContactInfo');
                 $form->sessionMessage('Your registration request was successfully processed!', "good");
                 return $this->owner->redirect($this->owner->Link('attendeeInfoRegistration'));
             } catch (Exception $ex) {
                 Session::clear('attendees');
                 Session::clear('ExternalOrderId');
                 Session::clear('SharedContactInfo');
                 SS_Log::log($ex->getMessage(), SS_Log::ERR);
                 $form->sessionMessage('Your request can not be processed, please contact your administrator', "bad");
                 return $this->owner->redirect($this->owner->Link('attendeeInfoRegistration'));
             }
         }
     }
     return $this->owner->httpError(403);
 }
 public function saveSummitAttendeeInfo($data, Form $form)
 {
     if ($current_member = Member::currentUser()) {
         $attendee = $current_member->getCurrentSummitAttendee();
         if ($attendee) {
             return $this->owner->redirect($this->owner->Link('attendeeInfoRegistration'));
         }
         if (!isset($data['SelectedAttendee'])) {
             // if we dont selected an attendee ...
             try {
                 if (Session::get('attendees')) {
                     // already retrieved data (we have a valid order # with attendees)
                     $form->sessionMessage('Please select an attendee', "bad");
                     return $this->owner->redirect($this->owner->Link('attendeeInfoRegistration'));
                 }
                 // get order info
                 $order_id = isset($data['ExternalOrderId']) ? $data['ExternalOrderId'] : null;
                 if (intval($order_id) <= 0) {
                     $form->sessionMessage('invalid order #', "bad");
                     return $this->owner->redirect($this->owner->Link('attendeeInfoRegistration'));
                 }
                 $attendees = $this->manager->getOrderAttendees($order_id);
                 // store data
                 Session::set('attendees', $attendees);
                 Session::set('ExternalOrderId', $data['ExternalOrderId']);
                 return $this->owner->redirect($this->owner->Link('attendeeInfoRegistration'));
             } catch (InvalidEventbriteOrderStatusException $ex1) {
                 Session::clear('attendees');
                 Session::clear('ExternalOrderId');
                 $form->sessionMessage('Current order was cancelled, please try with another one!', "bad");
                 return $this->owner->redirect($this->owner->Link('attendeeInfoRegistration'));
             } catch (NotFoundEntityException $ex2) {
                 Session::clear('attendees');
                 Session::clear('ExternalOrderId');
                 $form->sessionMessage('Your request can not be processed, please contact your administrator', "bad");
                 return $this->owner->redirect($this->owner->Link('attendeeInfoRegistration'));
             } catch (Exception $ex3) {
                 Session::clear('attendees');
                 Session::clear('ExternalOrderId');
                 $form->sessionMessage('Your request can not be processed, please contact your administrator', "bad");
                 return $this->owner->redirect($this->owner->Link('attendeeInfoRegistration'));
             }
         } else {
             try {
                 // register attendee with current member
                 $attendees = Session::get('attendees');
                 $external_order_id = Session::get('ExternalOrderId');
                 $external_attendee_id = $data['SelectedAttendee'];
                 if (!isset($attendees[$external_attendee_id])) {
                     throw new InvalidArgumentException();
                 }
                 $selected_attendee_data = $attendees[$external_attendee_id];
                 $external_event_id = $selected_attendee_data['event_id'];
                 $external_ticket_class_id = $selected_attendee_data['ticket_class_id'];
                 $created = $selected_attendee_data['created'];
                 $this->manager->registerAttendee($current_member, $external_event_id, $external_order_id, $external_attendee_id, $external_ticket_class_id, $created, false);
                 Session::clear('attendees');
                 Session::clear('ExternalOrderId');
                 $form->sessionMessage('Your registration request was successfully processed!', "good");
                 return $this->owner->redirect($this->owner->Link('attendeeInfoRegistration'));
             } catch (Exception $ex) {
                 Session::clear('attendees');
                 Session::clear('ExternalOrderId');
                 SS_Log::log($ex->getMessage(), SS_Log::ERR);
                 $form->sessionMessage('Your request can not be processed, please contact your administrator', "bad");
                 return $this->owner->redirect($this->owner->Link('attendeeInfoRegistration'));
             }
         }
     }
     return $this->owner->httpError(403);
 }