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;
|
|
|
|
|
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
|
|
|
|
|
*
|
|
|
|
|
* @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);
|
|
|
|
|
|
|
|
|
|
$data = [
|
|
|
|
|
'event' => $event,
|
|
|
|
|
'questions' => $event->questions,
|
|
|
|
|
'sort_order' => 'asc',
|
|
|
|
|
'sort_by' => 'title',
|
|
|
|
|
'q' => '',
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
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', [
|
|
|
|
|
'event' => $event,
|
|
|
|
|
'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');
|
|
|
|
|
$question->is_required = ($request->get('is_required') == 'yes') ;
|
|
|
|
|
$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([
|
|
|
|
|
'status' => 'success',
|
|
|
|
|
'message' => 'Refreshing..',
|
|
|
|
|
'redirectUrl' => '',
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2016-04-05 10:31:30 +00:00
|
|
|
/**
|
|
|
|
|
* Show the Edit Question Modal
|
|
|
|
|
*
|
|
|
|
|
* @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 = [
|
|
|
|
|
'question' => $question,
|
|
|
|
|
'event' => $event,
|
|
|
|
|
'question_types' => QuestionType::all(),
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
return view('ManageEvent.Modals.EditQuestion', $data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2016-04-05 10:31:30 +00:00
|
|
|
/**
|
|
|
|
|
* Edits a question
|
|
|
|
|
*
|
|
|
|
|
* @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();
|
|
|
|
|
|
|
|
|
|
// 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,
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Get tickets.
|
|
|
|
|
$ticket_ids = $request->get('tickets');
|
|
|
|
|
|
|
|
|
|
$question->tickets()->sync($ticket_ids);
|
|
|
|
|
|
|
|
|
|
session()->flash('message', 'Successfully Edited Question');
|
|
|
|
|
|
|
|
|
|
return response()->json([
|
|
|
|
|
'status' => 'success',
|
|
|
|
|
'message' => 'Refreshing..',
|
|
|
|
|
'redirectUrl' => '',
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2016-04-05 10:31:30 +00:00
|
|
|
/**
|
|
|
|
|
* Delete a question
|
|
|
|
|
*
|
|
|
|
|
* @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);
|
|
|
|
|
|
|
|
|
|
if ($question->delete()) {
|
|
|
|
|
|
|
|
|
|
session()->flash('message', 'Question Successfully Deleted');
|
|
|
|
|
|
|
|
|
|
return response()->json([
|
|
|
|
|
'status' => 'success',
|
|
|
|
|
'message' => 'Refreshing..',
|
|
|
|
|
'redirectUrl' => route('showEventCustomize', ['event_id' => $event_id]) . '#questions',
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
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');
|
|
|
|
|
|
|
|
|
|
// 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);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @todo Build array of question and all its answers
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
$sheet->fromArray([]);
|
|
|
|
|
|
|
|
|
|
// Set gray background on first row
|
|
|
|
|
$sheet->row(1, function ($row) {
|
|
|
|
|
$row->setBackground('#f5f5f5');
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
})->export($export_as);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2016-04-04 15:20:35 +00:00
|
|
|
}
|