Files
panel/app/Http/Controllers/Admin/Settings/MailController.php

83 lines
2.3 KiB
PHP
Raw Normal View History

<?php
2024-03-12 22:39:16 -04:00
namespace App\Http\Controllers\Admin\Settings;
2024-03-16 20:30:31 -04:00
use App\Models\Setting;
use Illuminate\View\View;
2018-09-15 19:59:07 -04:00
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Contracts\Console\Kernel;
2024-03-12 22:39:16 -04:00
use App\Notifications\MailTested;
2018-09-15 19:59:07 -04:00
use Illuminate\Support\Facades\Notification;
2024-03-12 22:39:16 -04:00
use App\Exceptions\DisplayException;
use App\Http\Controllers\Controller;
use App\Providers\SettingsServiceProvider;
use App\Http\Requests\Admin\Settings\MailSettingsFormRequest;
class MailController extends Controller
{
/**
* MailController constructor.
*/
public function __construct(
private Kernel $kernel,
) {
}
/**
* Render UI for editing mail settings. This UI should only display if
* the server is configured to send mail using SMTP.
*/
public function index(): View
{
2024-03-16 23:23:07 -04:00
return view('admin.settings.mail', [
2024-03-19 04:59:19 -04:00
'disabled' => config('mail.default') !== 'smtp',
]);
}
/**
* Handle request to update SMTP mail settings.
*
2018-05-13 12:19:35 -04:00
* @throws DisplayException
2024-03-12 22:39:16 -04:00
* @throws \App\Exceptions\Model\DataValidationException
*/
public function update(MailSettingsFormRequest $request): Response
{
2024-03-19 04:59:19 -04:00
if (config('mail.default') !== 'smtp') {
throw new DisplayException('This feature is only available if SMTP is the selected email driver for the Panel.');
}
$values = $request->normalize();
2022-12-12 14:31:49 -07:00
if (array_get($values, 'mail:mailers:smtp:password') === '!e') {
$values['mail:mailers:smtp:password'] = '';
}
foreach ($values as $key => $value) {
2021-01-23 12:33:34 -08:00
if (in_array($key, SettingsServiceProvider::getEncryptedKeys()) && !empty($value)) {
2024-03-19 05:11:41 -04:00
$value = encrypt($value);
}
2024-03-16 20:30:31 -04:00
Setting::set('settings::' . $key, $value);
}
$this->kernel->call('queue:restart');
return response('', 204);
}
2018-09-15 19:43:22 -04:00
/**
* Submit a request to send a test mail message.
*/
public function test(Request $request): Response
2018-09-15 19:43:22 -04:00
{
try {
Notification::route('mail', $request->user()->email)
->notify(new MailTested($request->user()));
2023-02-23 12:30:16 -07:00
} catch (\Exception $exception) {
return response($exception->getMessage(), 500);
2018-09-15 19:43:22 -04:00
}
return response('', 204);
2018-09-15 19:43:22 -04:00
}
}