/** * Store a newly created resource in storage. * * Interviews are submitted as sets of tags and responses to questionnaires. * * @return Response */ public function store() { $v = Validator::make(Request::all(), ['type' => 'required|string', 'questionSet' => 'required|string', 'recordedAt' => 'required', 'questions' => 'array', 'taggable' => 'array', 'location' => 'required|string', 'area' => 'required|string', 'houseno' => 'string']); if ($v->fails()) { return Response::json(['errors' => $v->errors()], 400); } $Date = Carbon::createFromTimeStamp(Input::get('recordedAt')); $interview = Interview::firstOrNew(['date' => $Date, 'interviewer_id' => Auth::user()->id]); $Questionnaire = Questionnaire::where('name', '=', Input::get('questionSet'))->first(); // important to fail here, you shouldn't be able to submit an interview for a questionnaire that doesn't exist if (!$Questionnaire) { return Response::json(['message' => 'questionnaire "' . Input::get('questionSet') . '" does not exist'], 400); } $interview->questionnaire_id = $Questionnaire->id; $interview->type = Input::get('type'); // similarly, area has to exist already $area = Area::where(['name' => Input::get('area')])->first(); if (!$area) { return Response::json(['message' => 'area "' . Input::get('area') . '" does not exist'], 400); } // although we can allow for dynamically adding new locations as they come in. $location = Location::firstOrCreate(['name' => Input::get('location'), 'area_id' => $area->id]); $interview->location_id = $location->id; if (Input::has('houseno')) { $interview->house_number = Input::get('houseno'); } $interview->save(); if (Input::has('questions') && $interview->type === 'interview') { foreach (Input::get('questions') as $response) { InterviewResponse::create(['question' => $response['question'], 'answer' => $response['answer'], 'interview_id' => $interview->id]); } } if (Input::has('taggable') && $interview->type === 'interview') { foreach (Input::get('taggable') as $list) { if (isset($list['id'])) { $this->saveTagsToQuestionnaire($list); } $TagList = new TagList(); $TagList->name = $list['name']; $interview->tagLists()->save($TagList); foreach ($list['tagged'] as $tag) { $TagList->tags()->save(Tag::create(['name' => $tag, 'tag_list_id' => $TagList->id])); } } } $interview->push(); return Response::json(Interview::with('responses')->find($interview->id), 200); }
/** * @return Questionnaire */ protected function get_questionnaires() { $person = new Person(); $person->get_by_id(auth_get_id()); $questionnaire_answers = new Questionnaire_answer(); $questionnaire_answers->select_func('MAX', '@answer_number', 'max_answer'); $questionnaire_answers->group_by('person_id'); $questionnaire_answers->where_related($person); $questionnaire_answers->where_related_questionnaire('id', '${parent}.id'); $questonnaires = new Questionnaire(); $questonnaires->select('*'); $questonnaires->select_subquery($questionnaire_answers, 'max_answer_number'); $questonnaires->where('published', 1); $questonnaires->get_iterated(); return $questonnaires; }
public function adminNeueFrage() { $qid = Input::get("qid"); $quest = Questionnaire::where('id', '=', $qid)->first(); $newQuestion = new Question(); $newQuestion->question = Input::get('neueFrage'); $newQuestion->questionnaire_id = $qid; $newQuestion->save(); $toanswer = Question::all(); return Redirect::to('adminstart/admin'); }