count(); $totalResponses = Response::count(); $forms = Form::where('user_id', Auth::id())->orderBy('created_at', 'desc')->get(); return view('forms.index', [ 'forms' => $forms, 'totalForms' => $totalForms, 'publishedForms' => $publishedForms, 'totalResponses' => $totalResponses, ]); } public function create() { return view('forms.create'); } public function togglePublish(Form $form) { $form->is_published = !$form->is_published; $form->save(); return redirect()->route('forms.show', $form->id)->with('success', 'Form publish status updated.'); } public function edit(Form $form) { $questions = $form->questions; foreach ($questions as $question) { $question->options = json_decode($question->options, true); } return view('forms.edit', compact('form', 'questions')); } public function createWithTemplate($template) { $data = []; switch ($template) { case 'contact': $data = [ 'title' => 'Contact Information', 'description' => 'Template for collecting contact information.', 'questions' => [ ['type' => 'text', 'question_text' => 'Name'], ['type' => 'text', 'question_text' => 'Email'], // Add more questions as needed ], ]; break; case 'rsvp': $data = [ 'title' => 'RSVP', 'description' => 'Event Address: 123 Your Street Your City, ST 12345 Contact us at (123) 456-7890 or no_reply@example.com ', 'questions' => [ ['type' => 'text', 'question_text' => 'Can you attend?'], ['type' => 'text', 'question_text' => 'Number of Guests'], ], ]; break; case 'party': $data = [ 'title' => 'Party Invite', 'description' => 'Template for party invitations.', 'questions' => [ ['type' => 'text', 'question_text' => 'Name'], ['type' => 'text', 'question_text' => 'RSVP Status'], ], ]; break; } return view('forms.create', ['data' => $data]); } public function store(Request $request) { try { $validatedData = $request->validate([ 'title' => 'required|string|max:255', 'description' => 'nullable|string', 'questions' => 'required|array', 'questions.*.type' => 'required|string|in:multiple_choice,checkbox,dropdown,text', 'questions.*.text' => 'required|string', 'questions.*.options' => 'nullable|array', 'questions.*.required' => 'nullable|boolean', ]); $form = new Form(); $form->title = $validatedData['title']; $form->description = $validatedData['description']; $form->is_published = $request->input('is_published', false); $form->user_id = Auth::id(); $form->save(); foreach ($validatedData['questions'] as $questionData) { $question = new Question(); $question->form_id = $form->id; $question->type = $questionData['type']; $question->question_text = $questionData['text']; $question->options = isset($questionData['options']) ? json_encode($questionData['options']) : null; $question->required = isset($questionData['required']) ? $questionData['required'] : false; $question->save(); } return response()->json(['success' => true, 'form_id' => $form->id]); } catch (\Exception $e) { Log::error('Error saving form: ' . $e->getMessage(), ['exception' => $e]); return response()->json(['success' => false, 'message' => 'Error saving form'], 500); } } public function show(Form $form) { $form->load('questions.responses'); return view('forms.show', compact('form')); } public function preview($id) { $form = Form::findOrFail($id); return view('forms.previewForm', compact('form')); } public function update(Request $request, Form $form) { if ($request->has('publish')) { $form->is_published = !$form->is_published; $form->save(); return redirect()->route('forms.show', $form); } Log::info('Incoming request data: ', $request->all()); $validatedData = $request->validate([ 'title' => 'required|string|max:255', 'description' => 'nullable|string|max:255', 'questions' => 'required|array', 'questions.*.id' => 'nullable|exists:questions,id', 'questions.*.type' => 'required|string|in:multiple_choice,checkbox,dropdown,text', 'questions.*.text' => 'required|string|max:255', 'questions.*.options' => 'nullable|array', 'questions.*.options.*' => 'nullable|string|max:255', ]); Log::info('Validated data: ', $validatedData); $form->update([ 'title' => $validatedData['title'], 'description' => $validatedData['description'], ]); $existingQuestionIds = []; foreach ($validatedData['questions'] as $questionData) { if (isset($questionData['id'])) { $question = Question::find($questionData['id']); } else { $question = new Question(); $question->form_id = $form->id; } $question->type = $questionData['type']; $question->question_text = $questionData['text']; $question->options = isset($questionData['options']) ? json_encode($questionData['options']) : json_encode([]); $question->save(); Log::info('Saved question: ', $question->toArray()); $existingQuestionIds[] = $question->id; } $form->questions()->whereNotIn('id', $existingQuestionIds)->delete(); Log::info('Remaining questions: ', $form->questions()->get()->toArray()); return redirect()->route('forms.show', $form)->with('success', 'Form updated successfully.'); } public function destroy(Form $form) { // This will also delete all related questions and responses due to foreign key constraints $form->delete(); return redirect()->route('forms.index')->with('delete', 'Form deleted successfully.'); } }