diff --git a/app/Http/Controllers/EventSurveyController.php b/app/Http/Controllers/EventSurveyController.php index 9100a659..a9bd8640 100644 --- a/app/Http/Controllers/EventSurveyController.php +++ b/app/Http/Controllers/EventSurveyController.php @@ -64,7 +64,7 @@ class EventSurveyController extends MyBaseController * * @access public * @param StoreEventQuestionRequest $request - * @return \Illuminate\Http\Response + * @return \Illuminate\Http\JsonResponse */ public function postCreateEventQuestion(StoreEventQuestionRequest $request, $event_id) { @@ -133,12 +133,12 @@ class EventSurveyController extends MyBaseController /** - * Edits a question + * Edit a question * * @param Request $request * @param $event_id * @param $question_id - * @return mixed + * @return \Illuminate\Http\JsonResponse */ public function postEditEventQuestion(Request $request, $event_id, $question_id) { @@ -173,9 +173,8 @@ class EventSurveyController extends MyBaseController } } - // Get tickets. - $ticket_ids = (array) $request->get('tickets'); + $ticket_ids = (array)$request->get('tickets'); $question->tickets()->sync($ticket_ids); @@ -194,7 +193,7 @@ class EventSurveyController extends MyBaseController * * @param Request $request * @param $event_id - * @return mixed + * @return \Illuminate\Http\JsonResponse */ public function postDeleteEventQuestion(Request $request, $event_id) { @@ -250,16 +249,14 @@ class EventSurveyController extends MyBaseController /** - * Export answers + * Export answers to xls, csv etc. * - * @todo This doesn't work :-| * @param Request $request * @param $event_id * @param string $export_as */ public function showExportAnswers(Request $request, $event_id, $export_as = 'xlsx') { - Excel::create('answers-as-of-' . date('d-m-Y-g.i.a'), function ($excel) use ($event_id) { $excel->setTitle('Survey Answers'); @@ -272,26 +269,7 @@ class EventSurveyController extends MyBaseController $event = Event::scope()->findOrFail($event_id); - $rows[] = array_merge([ - 'Order Ref', - 'Attendee Name', - 'Attendee Email', - 'Attendee Ticket' - ], $event->questions->lists('title')->toArray()); - - $attendees = $event->attendees()->has('answers')->get(); - foreach ($attendees as $attendee) { - - $rows[] = array_merge([ - $attendee->order->order_reference, - $attendee->full_name, - $attendee->email, - $attendee->ticket->title - ], $attendee->answers->lists('answer_text')->toArray()); - - } - - $sheet->fromArray($rows); + $sheet->fromArray($event->survey_answers, null, 'A1', false, false); // Set gray background on first row $sheet->row(1, function ($row) { @@ -299,13 +277,18 @@ class EventSurveyController extends MyBaseController }); }); })->export($export_as); - - } + /** + * Toggle the enabled status of question + * + * @param Request $request + * @param $event_id + * @param $question_id + * @return \Illuminate\Http\JsonResponse + */ public function postEnableQuestion(Request $request, $event_id, $question_id) { - $question = Question::scope()->find($question_id); $question->is_enabled = ($question->is_enabled == 1) ? 0 : 1; @@ -330,7 +313,7 @@ class EventSurveyController extends MyBaseController * Updates the sort order of event questions * * @param Request $request - * @return mixed + * @return \Illuminate\Http\JsonResponse */ public function postUpdateQuestionsOrder(Request $request) { diff --git a/app/Models/Event.php b/app/Models/Event.php index 5be3f8ed..3922eb9d 100644 --- a/app/Models/Event.php +++ b/app/Models/Event.php @@ -10,7 +10,7 @@ use URL; class Event extends MyBaseModel { use SoftDeletes; - + /** * The validation rules. * @@ -221,6 +221,48 @@ class Event extends MyBaseModel return $this->currency->code; } + /** + * Return an array of attendees and answers they gave to questions at checkout + * + * @return array + */ + public function getSurveyAnswersAttribute() + { + $rows[] = array_merge([ + 'Order Ref', + 'Attendee Name', + 'Attendee Email', + 'Attendee Ticket' + ], $this->questions->lists('title')->toArray()); + + $attendees = $this->attendees()->has('answers')->get(); + + foreach ($attendees as $attendee) { + + $answers = []; + + foreach ($this->questions as $question) { + + if (in_array($question->id, $attendee->answers->lists('question_id')->toArray())) { + $answers[] = $attendee->answers->where('question_id', $question->id)->first()->answer_text; + } else { + $answers[] = null; + } + + } + + $rows[] = array_merge([ + $attendee->order->order_reference, + $attendee->full_name, + $attendee->email, + $attendee->ticket->title + ], $answers); + + } + + return $rows; + } + /** * Get the embed html code. * @@ -229,7 +271,7 @@ class Event extends MyBaseModel public function getEmbedHtmlCodeAttribute() { return " - + "; } @@ -239,13 +281,13 @@ class Event extends MyBaseModel */ public function getMapAddressAttribute() { - $string = $this->venue.',' - .$this->location_street_number.',' - .$this->location_address_line_1.',' - .$this->location_address_line_2.',' - .$this->location_state.',' - .$this->location_post_code.',' - .$this->location_country; + $string = $this->venue . ',' + . $this->location_street_number . ',' + . $this->location_address_line_1 . ',' + . $this->location_address_line_2 . ',' + . $this->location_state . ',' + . $this->location_post_code . ',' + . $this->location_country; return urlencode($string); } @@ -257,7 +299,7 @@ class Event extends MyBaseModel */ public function getBgImageUrlAttribute() { - return URL::to('/').'/'.$this->bg_image_path; + return URL::to('/') . '/' . $this->bg_image_path; } /** @@ -267,7 +309,7 @@ class Event extends MyBaseModel */ public function getEventUrlAttribute() { - return URL::to('/').'/e/'.$this->id.'/'.Str::slug($this->title); + return URL::to('/') . '/e/' . $this->id . '/' . Str::slug($this->title); } /** @@ -279,7 +321,7 @@ class Event extends MyBaseModel { return $this->sales_volume + $this->organiser_fees_volume; } - + /** * The attributes that should be mutated to dates. *