2020-06-21 18:00:31 +03:00

154 lines
4.5 KiB
PHP

<?php
namespace App\Http\Controllers\Settings;
use App\Abstracts\Http\Controller;
use App\Http\Requests\Setting\Setting as Request;
use App\Models\Common\Company;
use App\Models\Common\EmailTemplate;
use App\Models\Setting\Setting;
use App\Utilities\Installer;
use Illuminate\Support\Str;
class Email extends Controller
{
public $skip_keys = ['company_id', '_method', '_token', '_prefix'];
/**
* Instantiate a new controller instance.
*/
public function __construct()
{
// No need to check for permission in console
if (app()->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;
}
}
}