runningInConsole()) { return; } // Add CRUD permission check $this->middleware('permission:create-settings-settings')->only('create', 'store', 'duplicate', 'import'); $this->middleware('permission:read-settings-email')->only('index', 'show', 'edit', 'export'); $this->middleware('permission:update-settings-settings')->only('update', 'enable', 'disable'); $this->middleware('permission:delete-settings-settings')->only('destroy'); } public function edit() { $setting = Setting::prefix('email')->get()->transform(function ($s) { $s->key = str_replace('email.', '', $s->key); return $s; })->pluck('value', 'key'); $templates = EmailTemplate::all(); $email_protocols = [ 'mail' => trans('settings.email.php'), 'smtp' => trans('settings.email.smtp.name'), 'sendmail' => trans('settings.email.sendmail'), 'log' => trans('settings.email.log'), ]; return view('settings.email.edit', compact( 'setting', 'templates', 'email_protocols' )); } public function update(Request $request) { $fields = $request->all(); $prefix = $request->get('_prefix', 'email'); $total_companies = Company::count(); foreach ($fields as $key => $value) { $real_key = $prefix . '.' . $key; // Don't process unwanted keys if (in_array($key, $this->skip_keys)) { continue; } if (Str::startsWith($key, 'template_')) { $this->updateEmailTemplate($key, $fields); continue; } if ($total_companies == 1) { $this->oneCompany($real_key, $value); } setting()->set($real_key, $value); } // Save all settings setting()->save(); $message = trans('messages.success.updated', ['type' => trans_choice('general.settings', 2)]); $response = [ 'status' => null, 'success' => true, 'error' => false, 'message' => $message, 'data' => null, 'redirect' => route('settings.index'), ]; flash($message)->success(); return response()->json($response); } public function updateEmailTemplate($key, &$fields) { $alias = str_replace(['template_', '_subject', '_body'], '', $key); $subject_key = 'template_' . $alias . '_subject'; $body_key = 'template_' . $alias . '_body'; if (empty($fields[$subject_key]) || empty($fields[$body_key])) { return; } $template = EmailTemplate::alias($alias)->first(); $template->update([ 'subject' => $fields[$subject_key], 'body' => $fields[$body_key], ]); unset($fields[$subject_key]); unset($fields[$body_key]); } protected function oneCompany($real_key, $value) { if (empty($value)) { return; } switch ($real_key) { case 'email.protocol': Installer::updateEnv(['MAIL_MAILER' => '"' . $value . '"']); break; case 'email.smtp_host': Installer::updateEnv(['MAIL_HOST' => '"' . $value . '"']); break; case 'email.smtp_port': Installer::updateEnv(['MAIL_PORT' => '"' . $value . '"']); break; case 'email.smtp_username': Installer::updateEnv(['MAIL_USERNAME' => '"' . $value . '"']); break; case 'email.smtp_password': Installer::updateEnv(['MAIL_PASSWORD' => '"' . $value . '"']); break; case 'email.smtp_encryption': Installer::updateEnv(['MAIL_ENCRYPTION' => '"' . $value . '"']); break; } } }