public function store(Request $request, FormDefinition $formDef) { $this->validate($request, ['name' => 'required|max:255|string', 'email' => 'required|email']); $fields = new Collection(); $errors = new Collection(); $request->session()->forget('field_validation_errors'); $request->session()->put('field_validation_errors', []); if ($formDef->submissions()->where('email', $request->input('email'))->get()->count() > 0) { $errors->push("A submission already exists for the e-mail you used: " . $request->input("email")); } foreach ($formDef->fields()->get() as $field) { $options = json_decode($field->options); if ($options->required && !$request->has($field->field_id) && ($field->type != 'Checkbox' && $field->type != 'File')) { $errors->push("Missing required field named " . $field->name . " with ID " . $field->field_id); } elseif ($options->required && $field->type == "File" && !$request->hasFile($field->field_id)) { $errors->push("Missing required file field named " . $field->name . " with ID " . $field->field_id); } elseif (!$request->has($field->field_id) && $field->type != 'File') { $fields->put($field->field_id, null); } else { if ($this->verifyField($field, $request->input($field->field_id), $request)) { if ($field->type != 'File') { $fields->put($field->field_id, $request->input($field->field_id)); } else { $fname = "file_" . str_random(32) . "." . $request->file($field->field_id)->getClientOriginalExtension(); $file = $request->file($field->field_id)->move('../storage/app/form/' . $formDef->id, $fname); $fields->put($field->field_id, $fname); } } else { $errors->push("Invalid value for field named \"" . $field->name . "\" with ID " . $field->field_id); } } } if ($errors->count() > 0) { //return response()->json(["The submission was REJECTED and errors follow",$errors],422); return redirect()->back()->withErrors($errors); //return view('formdefinitions.display', compact('fields', 'errors')); } $request->session()->forget('form_validation_errors'); $submission = new Submission(["form_definition_id" => $formDef->id, "name" => $request->input('name'), "email" => $request->input('email'), "password" => null, "submitted" => Carbon::now(), "status" => 'Reviewing', "options" => $fields->toJson()]); $submission->save(); //return response()->json(["The submission was accepted and follows",$submission],200); return view('formdefinitions.accepted', compact('formDef', 'submission')); }