2016-04-04 15:20:35 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
|
|
|
|
use App\Http\Requests\StoreEventQuestionRequest;
|
|
|
|
|
use App\Models\Event;
|
2016-04-05 10:31:30 +00:00
|
|
|
use App\Models\Attendee;
|
2016-04-04 15:20:35 +00:00
|
|
|
use App\Models\Question;
|
2016-04-05 23:27:23 +00:00
|
|
|
use App\Models\QuestionAnswer;
|
2016-04-04 15:20:35 +00:00
|
|
|
use App\Models\QuestionType;
|
2016-05-20 22:54:45 +00:00
|
|
|
use JavaScript;
|
2016-04-04 15:20:35 +00:00
|
|
|
use Illuminate\Http\Request;
|
2016-04-07 13:33:07 +00:00
|
|
|
use Excel;
|
2016-04-04 15:20:35 +00:00
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
Attendize.com - Event Management & Ticketing
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
class EventSurveyController extends MyBaseController
|
|
|
|
|
{
|
2016-04-05 10:31:30 +00:00
|
|
|
/**
|
|
|
|
|
* Show the event survey page
|
2016-05-20 22:54:45 +00:00
|
|
|
*
|
2016-04-05 10:31:30 +00:00
|
|
|
* @param Request $request
|
|
|
|
|
* @param $event_id
|
|
|
|
|
* @return mixed
|
|
|
|
|
*/
|
2016-04-04 15:20:35 +00:00
|
|
|
public function showEventSurveys(Request $request, $event_id)
|
|
|
|
|
{
|
|
|
|
|
$event = Event::scope()->findOrFail($event_id);
|
|
|
|
|
|
2016-05-20 22:54:45 +00:00
|
|
|
JavaScript::put([
|
|
|
|
|
'postUpdateQuestionsOrderRoute' => route('postUpdateQuestionsOrder', ['event_id' => $event_id]),
|
|
|
|
|
]);
|
|
|
|
|
|
2016-04-04 15:20:35 +00:00
|
|
|
$data = [
|
2016-05-20 22:54:45 +00:00
|
|
|
'event' => $event,
|
|
|
|
|
'questions' => $event->questions->sortBy('sort_order'),
|
2016-04-04 15:20:35 +00:00
|
|
|
'sort_order' => 'asc',
|
2016-05-20 22:54:45 +00:00
|
|
|
'sort_by' => 'title',
|
|
|
|
|
'q' => '',
|
2016-04-04 15:20:35 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
|
|
return view('ManageEvent.Surveys', $data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Show the form for creating a new resource.
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Http\Response
|
|
|
|
|
*/
|
|
|
|
|
public function showCreateEventQuestion(Request $request, $event_id)
|
|
|
|
|
{
|
|
|
|
|
$event = Event::scope()->findOrFail($event_id);
|
|
|
|
|
|
|
|
|
|
return view('ManageEvent.Modals.CreateQuestion', [
|
2016-05-20 22:54:45 +00:00
|
|
|
'event' => $event,
|
2016-04-04 15:20:35 +00:00
|
|
|
'question_types' => QuestionType::all(),
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Store a newly created resource in storage.
|
|
|
|
|
*
|
|
|
|
|
* @access public
|
|
|
|
|
* @param StoreEventQuestionRequest $request
|
|
|
|
|
* @return \Illuminate\Http\Response
|
|
|
|
|
*/
|
|
|
|
|
public function postCreateEventQuestion(StoreEventQuestionRequest $request, $event_id)
|
|
|
|
|
{
|
|
|
|
|
// Get the event or display a 'not found' warning.
|
|
|
|
|
$event = Event::findOrFail($event_id);
|
|
|
|
|
|
|
|
|
|
// Create question.
|
|
|
|
|
$question = Question::createNew(false, false, true);
|
|
|
|
|
$question->title = $request->get('title');
|
2016-05-20 22:54:45 +00:00
|
|
|
$question->is_required = ($request->get('is_required') == 'yes');
|
2016-04-04 15:20:35 +00:00
|
|
|
$question->question_type_id = $request->get('question_type_id');
|
|
|
|
|
$question->save();
|
|
|
|
|
|
|
|
|
|
// Get options.
|
|
|
|
|
$options = $request->get('option');
|
|
|
|
|
|
|
|
|
|
// Add options.
|
|
|
|
|
if ($options && is_array($options)) {
|
|
|
|
|
foreach ($options as $option_name) {
|
|
|
|
|
if (trim($option_name) !== '') {
|
|
|
|
|
$question->options()->create([
|
|
|
|
|
'name' => $option_name,
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Get tickets.
|
|
|
|
|
$ticket_ids = $request->get('tickets');
|
|
|
|
|
|
|
|
|
|
$question->tickets()->attach($ticket_ids);
|
|
|
|
|
|
|
|
|
|
$event->questions()->attach($question->id);
|
|
|
|
|
|
|
|
|
|
session()->flash('message', 'Successfully Created Question');
|
|
|
|
|
|
|
|
|
|
return response()->json([
|
2016-05-20 22:54:45 +00:00
|
|
|
'status' => 'success',
|
|
|
|
|
'message' => 'Refreshing..',
|
2016-04-04 15:20:35 +00:00
|
|
|
'redirectUrl' => '',
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2016-04-05 10:31:30 +00:00
|
|
|
/**
|
|
|
|
|
* Show the Edit Question Modal
|
2016-05-20 22:54:45 +00:00
|
|
|
*
|
2016-04-05 10:31:30 +00:00
|
|
|
* @param Request $request
|
|
|
|
|
* @param $event_id
|
|
|
|
|
* @param $question_id
|
|
|
|
|
* @return mixed
|
|
|
|
|
*/
|
2016-04-04 15:20:35 +00:00
|
|
|
public function showEditEventQuestion(Request $request, $event_id, $question_id)
|
|
|
|
|
{
|
|
|
|
|
$question = Question::scope()->findOrFail($question_id);
|
|
|
|
|
$event = Event::scope()->findOrFail($event_id);
|
|
|
|
|
|
|
|
|
|
$data = [
|
2016-05-20 22:54:45 +00:00
|
|
|
'question' => $question,
|
|
|
|
|
'event' => $event,
|
2016-04-04 15:20:35 +00:00
|
|
|
'question_types' => QuestionType::all(),
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
return view('ManageEvent.Modals.EditQuestion', $data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2016-04-05 10:31:30 +00:00
|
|
|
/**
|
|
|
|
|
* Edits a question
|
2016-05-20 22:54:45 +00:00
|
|
|
*
|
2016-04-05 10:31:30 +00:00
|
|
|
* @param Request $request
|
|
|
|
|
* @param $event_id
|
|
|
|
|
* @param $question_id
|
|
|
|
|
* @return mixed
|
|
|
|
|
*/
|
2016-04-04 15:20:35 +00:00
|
|
|
public function postEditEventQuestion(Request $request, $event_id, $question_id)
|
|
|
|
|
{
|
|
|
|
|
// Get the event or display a 'not found' warning.
|
|
|
|
|
$event = Event::scope()->findOrFail($event_id);
|
|
|
|
|
|
|
|
|
|
// Create question.
|
|
|
|
|
$question = Question::scope()->findOrFail($question_id);
|
|
|
|
|
$question->title = $request->get('title');
|
|
|
|
|
$question->is_required = $request->get('is_required');
|
|
|
|
|
$question->question_type_id = $request->get('question_type_id');
|
|
|
|
|
$question->save();
|
|
|
|
|
|
2016-05-20 22:54:45 +00:00
|
|
|
$question_type = QuestionType::find($question->question_type_id);
|
2016-04-04 15:20:35 +00:00
|
|
|
|
2016-05-20 22:54:45 +00:00
|
|
|
if ($question_type->has_options) {
|
2016-04-04 15:20:35 +00:00
|
|
|
|
2016-05-20 22:54:45 +00:00
|
|
|
// Get options.
|
|
|
|
|
$options = $request->get('option');
|
|
|
|
|
|
|
|
|
|
$question->options()->delete();
|
|
|
|
|
|
|
|
|
|
// Add options.
|
|
|
|
|
if ($options && is_array($options)) {
|
|
|
|
|
foreach ($options as $option_name) {
|
|
|
|
|
if (trim($option_name) !== '') {
|
|
|
|
|
$question->options()->create([
|
|
|
|
|
'name' => $option_name,
|
|
|
|
|
]);
|
|
|
|
|
}
|
2016-04-04 15:20:35 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2016-05-20 22:54:45 +00:00
|
|
|
|
2016-04-04 15:20:35 +00:00
|
|
|
// Get tickets.
|
2016-05-20 22:54:45 +00:00
|
|
|
$ticket_ids = (array) $request->get('tickets');
|
2016-04-04 15:20:35 +00:00
|
|
|
|
|
|
|
|
$question->tickets()->sync($ticket_ids);
|
|
|
|
|
|
|
|
|
|
session()->flash('message', 'Successfully Edited Question');
|
|
|
|
|
|
|
|
|
|
return response()->json([
|
2016-05-20 22:54:45 +00:00
|
|
|
'status' => 'success',
|
|
|
|
|
'message' => 'Refreshing..',
|
2016-04-04 15:20:35 +00:00
|
|
|
'redirectUrl' => '',
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2016-04-05 10:31:30 +00:00
|
|
|
/**
|
|
|
|
|
* Delete a question
|
2016-05-20 22:54:45 +00:00
|
|
|
*
|
2016-04-05 10:31:30 +00:00
|
|
|
* @param Request $request
|
|
|
|
|
* @param $event_id
|
|
|
|
|
* @return mixed
|
|
|
|
|
*/
|
2016-04-04 15:20:35 +00:00
|
|
|
public function postDeleteEventQuestion(Request $request, $event_id)
|
|
|
|
|
{
|
|
|
|
|
$question_id = $request->get('question_id');
|
|
|
|
|
|
|
|
|
|
$question = Question::scope()->find($question_id);
|
|
|
|
|
|
2016-05-20 22:54:45 +00:00
|
|
|
$question->answers()->delete();
|
|
|
|
|
|
2016-04-04 15:20:35 +00:00
|
|
|
if ($question->delete()) {
|
|
|
|
|
|
|
|
|
|
session()->flash('message', 'Question Successfully Deleted');
|
|
|
|
|
|
|
|
|
|
return response()->json([
|
2016-05-20 22:54:45 +00:00
|
|
|
'status' => 'success',
|
|
|
|
|
'message' => 'Refreshing..',
|
|
|
|
|
'redirectUrl' => '',
|
2016-04-04 15:20:35 +00:00
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return response()->json([
|
|
|
|
|
'status' => 'error',
|
|
|
|
|
'id' => $question->id,
|
|
|
|
|
'message' => 'This question can\'t be deleted.',
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
2016-04-05 10:31:30 +00:00
|
|
|
/**
|
|
|
|
|
* Show all attendees answers to questions
|
|
|
|
|
*
|
|
|
|
|
* @param Request $request
|
|
|
|
|
* @param $event_id
|
|
|
|
|
* @param $question_id
|
|
|
|
|
* @return mixed
|
|
|
|
|
*/
|
|
|
|
|
public function showEventQuestionAnswers(Request $request, $event_id, $question_id)
|
|
|
|
|
{
|
2016-04-05 23:27:23 +00:00
|
|
|
$answers = QuestionAnswer::scope()->where('question_id', $question_id)->get();
|
|
|
|
|
$question = Question::scope()->withTrashed()->find($question_id);
|
|
|
|
|
|
|
|
|
|
$attendees = Attendee::scope()
|
|
|
|
|
->has('answers')
|
|
|
|
|
->where('event_id', $event_id)
|
|
|
|
|
->get();
|
2016-04-05 10:31:30 +00:00
|
|
|
|
|
|
|
|
$data = [
|
2016-04-05 23:27:23 +00:00
|
|
|
'answers' => $answers,
|
|
|
|
|
'question' => $question,
|
2016-04-05 10:31:30 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
|
|
return view('ManageEvent.Modals.ViewAnswers', $data);
|
|
|
|
|
}
|
|
|
|
|
|
2016-05-12 22:33:23 +00:00
|
|
|
|
2016-05-20 22:54:45 +00:00
|
|
|
/**
|
|
|
|
|
* Export answers
|
|
|
|
|
*
|
2016-05-21 17:37:15 +00:00
|
|
|
* @todo This doesn't work :-|
|
2016-05-20 22:54:45 +00:00
|
|
|
* @param Request $request
|
|
|
|
|
* @param $event_id
|
|
|
|
|
* @param string $export_as
|
|
|
|
|
*/
|
|
|
|
|
public function showExportAnswers(Request $request, $event_id, $export_as = 'xlsx')
|
|
|
|
|
{
|
2016-05-12 22:33:23 +00:00
|
|
|
|
2016-05-20 22:54:45 +00:00
|
|
|
Excel::create('answers-as-of-' . date('d-m-Y-g.i.a'), function ($excel) use ($event_id) {
|
2016-05-12 22:33:23 +00:00
|
|
|
|
|
|
|
|
$excel->setTitle('Survey Answers');
|
|
|
|
|
|
|
|
|
|
// Chain the setters
|
|
|
|
|
$excel->setCreator(config('attendize.app_name'))
|
|
|
|
|
->setCompany(config('attendize.app_name'));
|
|
|
|
|
|
|
|
|
|
$excel->sheet('survey_answers_sheet_!', function ($sheet) use ($event_id) {
|
|
|
|
|
|
|
|
|
|
$event = Event::scope()->findOrFail($event_id);
|
|
|
|
|
|
2016-05-20 22:54:45 +00:00
|
|
|
$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) {
|
2016-05-12 22:33:23 +00:00
|
|
|
|
2016-05-20 22:54:45 +00:00
|
|
|
$rows[] = array_merge([
|
|
|
|
|
$attendee->order->order_reference,
|
|
|
|
|
$attendee->full_name,
|
|
|
|
|
$attendee->email,
|
|
|
|
|
$attendee->ticket->title
|
|
|
|
|
], $attendee->answers->lists('answer_text')->toArray());
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$sheet->fromArray($rows);
|
2016-05-12 22:33:23 +00:00
|
|
|
|
|
|
|
|
// Set gray background on first row
|
|
|
|
|
$sheet->row(1, function ($row) {
|
|
|
|
|
$row->setBackground('#f5f5f5');
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
})->export($export_as);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2016-05-20 22:54:45 +00:00
|
|
|
public function postEnableQuestion(Request $request, $event_id, $question_id)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
$question = Question::scope()->find($question_id);
|
|
|
|
|
|
|
|
|
|
$question->is_enabled = ($question->is_enabled == 1) ? 0 : 1;
|
|
|
|
|
|
|
|
|
|
if ($question->save()) {
|
|
|
|
|
return response()->json([
|
|
|
|
|
'status' => 'success',
|
|
|
|
|
'message' => 'Question Successfully Updated',
|
|
|
|
|
'id' => $question->id,
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return response()->json([
|
|
|
|
|
'status' => 'error',
|
|
|
|
|
'id' => $question->id,
|
2016-06-15 02:31:24 +00:00
|
|
|
'message' => 'Whoops! Looks like something went wrong. Please try again.',
|
2016-05-20 22:54:45 +00:00
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Updates the sort order of event questions
|
|
|
|
|
*
|
|
|
|
|
* @param Request $request
|
|
|
|
|
* @return mixed
|
|
|
|
|
*/
|
|
|
|
|
public function postUpdateQuestionsOrder(Request $request)
|
|
|
|
|
{
|
|
|
|
|
$question_ids = $request->get('question_ids');
|
|
|
|
|
$sort = 1;
|
|
|
|
|
|
|
|
|
|
foreach ($question_ids as $question_id) {
|
|
|
|
|
$question = Question::scope()->find($question_id);
|
|
|
|
|
$question->sort_order = $sort;
|
|
|
|
|
$question->save();
|
|
|
|
|
$sort++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return response()->json([
|
|
|
|
|
'status' => 'success',
|
|
|
|
|
'message' => 'Question Order Successfully Updated',
|
|
|
|
|
]);
|
|
|
|
|
}
|
2016-04-04 15:20:35 +00:00
|
|
|
}
|