contactUs = model(ContactUs::class); $this->emailService = app(EmailService::class); } /** * POST /api/v1/pages/contact * Submit contact form */ public function submitContact() { $payload = $this->payloadData(); if (empty($payload)) { return $this->respondError('Invalid request data', Response::HTTP_BAD_REQUEST); } $rules = [ 'email' => 'required|email', 'message' => 'required|min_length[10]', ]; $errors = $this->validateRequest($payload, $rules); if (!empty($errors)) { return $this->respondValidationError($errors); } $email = strtolower(trim((string) ($payload['email'] ?? ''))); $message = trim((string) ($payload['message'] ?? '')); try { // Save the message to the database using ContactUs // Note: ContactUs expects different fields, so we'll use DB directly // or adapt to the model structure if needed $contactData = [ 'email' => $email, 'message' => $message, 'created_at' => utc_now(), 'updated_at' => utc_now(), ]; // Try using model first, fallback to DB if model structure differs $saved = false; try { // Check if ContactUs supports email/message fields directly // ContactUs has different fields (sender_id, receiver_id, etc.), so use DB directly $saved = DB::table('contactus')->insert($contactData); } catch (\Throwable $e) { log_message('error', 'Failed to save contact data: ' . $e->getMessage()); return $this->respondError('Failed to save message. Please try again.', Response::HTTP_INTERNAL_SERVER_ERROR); } if (!$saved) { log_message('error', 'Failed to save contact data'); return $this->respondError('Failed to save message. Please try again.', Response::HTTP_INTERNAL_SERVER_ERROR); } // Prepare the email content $recipient = 'alrahma.isgl@gmail.com'; $subject = 'Contact Us Form Submission'; $emailMessage = "You have received a new message from {$email}:\n\n{$message}"; // Send email using EmailService $emailSent = false; try { $this->emailService->setTo($recipient); $this->emailService->setFrom( config('mail.from.address', 'no-reply@alrahmaisgl.org'), config('mail.from.name', 'Alrahma Team') ); $this->emailService->setSubject($subject); $this->emailService->setMessage($emailMessage); $emailSent = $this->emailService->send(); } catch (\Throwable $e) { log_message('error', 'Failed to send email: ' . $e->getMessage()); } if (!$emailSent) { log_message('error', 'Failed to send email.'); // Don't fail the request if email fails, just log it } return $this->success([ 'email' => $email, 'email_sent' => $emailSent, ], 'Message sent successfully'); } catch (\Throwable $e) { log_message('error', 'Contact form error: ' . $e->getMessage()); return $this->respondError('An unexpected error occurred. Please try again.', Response::HTTP_INTERNAL_SERVER_ERROR); } } /** * GET /api/v1/pages/privacy * Get privacy policy HTML content */ public function privacyPolicy() { return $this->renderStaticFile('privacy_policy.html', 'privacy_policy'); } /** * GET /api/v1/pages/terms * Get terms of service HTML content */ public function termsOfService() { return $this->renderStaticFile('terms_of_service.html', 'terms_of_service'); } /** * GET /api/v1/pages/help * Get help center HTML content */ public function helpCenter() { return $this->renderStaticFile('help_center.html', 'help_center'); } protected function renderStaticFile(string $filename, string $type) { $path = base_path('public/html/' . $filename); if (!is_readable($path)) { return $this->respondError('Failed to retrieve ' . str_replace('_', ' ', $type), Response::HTTP_INTERNAL_SERVER_ERROR); } try { $content = file_get_contents($path); } catch (\Throwable $e) { log_message('error', ucfirst($type) . ' load error: ' . $e->getMessage()); return $this->respondError('Failed to retrieve ' . str_replace('_', ' ', $type), Response::HTTP_INTERNAL_SERVER_ERROR); } return $this->success([ 'content' => $content, 'type' => $type, ], ucfirst(str_replace('_', ' ', $type)) . ' retrieved successfully'); } }