akaunting/app/Abstracts/Http/SettingController.php

182 lines
5.3 KiB
PHP
Raw Normal View History

2017-09-14 22:21:00 +03:00
<?php
2022-06-01 10:15:55 +03:00
namespace App\Abstracts\Http;
2017-09-14 22:21:00 +03:00
2019-11-16 10:21:14 +03:00
use App\Abstracts\Http\Controller;
2017-09-14 22:21:00 +03:00
use App\Http\Requests\Setting\Setting as Request;
2018-06-10 02:48:51 +03:00
use App\Models\Common\Company;
2020-02-28 17:54:01 +03:00
use App\Models\Setting\Currency;
2017-09-14 22:21:00 +03:00
use App\Traits\DateTime;
use App\Traits\Uploads;
2018-02-20 18:47:10 +03:00
use App\Utilities\Installer;
2019-11-16 10:21:14 +03:00
use Illuminate\Support\Str;
2022-06-01 10:15:55 +03:00
abstract class SettingController extends Controller
2017-09-14 22:21:00 +03:00
{
use DateTime, Uploads;
2022-06-01 10:15:55 +03:00
public $redirect_route = '';
2021-05-29 17:01:22 +03:00
public $skip_keys = ['company_id', '_method', '_token', '_prefix'];
2019-11-16 10:21:14 +03:00
public $file_keys = ['company.logo', 'invoice.logo'];
2021-05-29 17:01:22 +03:00
public $uploaded_file_keys = ['company.uploaded_logo', 'invoice.uploaded_logo'];
2017-09-14 22:21:00 +03:00
/**
* Update the specified resource in storage.
*
2019-11-16 10:21:14 +03:00
* @param Request $request
2017-09-14 22:21:00 +03:00
*
* @return Response
*/
public function update(Request $request)
{
$fields = $request->all();
2019-11-16 10:21:14 +03:00
$prefix = $request->get('_prefix', 'general');
2017-09-14 22:21:00 +03:00
$company_id = $request->get('company_id');
if (empty($company_id)) {
2021-04-16 00:59:43 +03:00
$company_id = company_id();
}
$company = Company::find($company_id);
2020-02-12 18:48:31 +03:00
$total_companies = Company::count();
2019-11-16 10:21:14 +03:00
2022-08-05 19:03:57 +03:00
// Clear setting media
foreach ($this->file_keys as $file_key) {
$keys = explode('.', $file_key);
if ($prefix != $keys[0]) {
continue;
}
if (! setting($file_key, false)) {
continue;
}
$file_old_key = 'uploaded_' . $keys[1];
if (array_key_exists($file_old_key, $fields)) {
continue;
}
setting()->forget($file_key);
}
2017-09-14 22:21:00 +03:00
foreach ($fields as $key => $value) {
2019-11-16 10:21:14 +03:00
$real_key = $prefix . '.' . $key;
2017-09-14 22:21:00 +03:00
// Don't process unwanted keys
2019-11-16 10:21:14 +03:00
if (in_array($key, $this->skip_keys)) {
2017-09-14 22:21:00 +03:00
continue;
}
2021-05-29 17:01:22 +03:00
// change dropzone middleware already uploaded file
if (in_array($real_key, $this->uploaded_file_keys)) {
continue;
}
2017-09-14 22:21:00 +03:00
// Process file uploads
2019-11-16 10:21:14 +03:00
if (in_array($real_key, $this->file_keys)) {
// Upload attachment
if ($request->file($key)) {
$media = $this->getMedia($request->file($key), 'settings');
2019-11-16 10:21:14 +03:00
$company->attachMedia($media, Str::snake($real_key));
$value = $media->id;
}
2017-09-14 22:21:00 +03:00
// Prevent reset
if (empty($value)) {
continue;
}
}
2019-11-16 10:21:14 +03:00
if ($real_key == 'default.locale') {
2021-05-29 17:01:22 +03:00
if (!in_array($value, config('language.allowed'))) {
continue;
}
2019-11-16 10:21:14 +03:00
user()->setAttribute('locale', $value)->save();
}
2020-02-28 17:54:01 +03:00
if ($real_key == 'default.currency') {
$currencies = Currency::enabled()->pluck('code')->toArray();
if (!in_array($value, $currencies)) {
continue;
}
2020-02-28 17:54:01 +03:00
$currency = Currency::code($value)->first();
$currency->rate = '1';
$currency->save();
}
2018-06-09 15:37:28 +03:00
// If only 1 company
2020-02-12 18:48:31 +03:00
if ($total_companies == 1) {
2019-11-16 10:21:14 +03:00
$this->oneCompany($real_key, $value);
2017-12-06 14:06:02 +03:00
}
2019-11-16 10:21:14 +03:00
setting()->set($real_key, $value);
2017-09-14 22:21:00 +03:00
}
// Save all settings
setting()->save();
$message = trans('messages.success.updated', ['type' => trans_choice('general.settings', 2)]);
2022-06-01 10:15:55 +03:00
$redirect_url = !empty($this->redirect_route) ? route($this->redirect_route) : url()->previous();
2019-11-16 10:21:14 +03:00
$response = [
'status' => null,
'success' => true,
'error' => false,
'message' => $message,
'data' => null,
2022-06-01 10:15:55 +03:00
'redirect' => $redirect_url,
2019-11-16 10:21:14 +03:00
];
2017-09-14 22:21:00 +03:00
flash($message)->success();
2019-11-16 10:21:14 +03:00
return response()->json($response);
2017-09-14 22:21:00 +03:00
}
2018-06-09 15:37:28 +03:00
2019-11-16 10:21:14 +03:00
protected function oneCompany($real_key, $value)
2018-06-09 15:37:28 +03:00
{
2019-11-16 10:21:14 +03:00
switch ($real_key) {
case 'company.name':
2018-11-06 14:00:30 +03:00
Installer::updateEnv(['MAIL_FROM_NAME' => '"' . $value . '"']);
break;
2019-11-16 10:21:14 +03:00
case 'company.email':
2021-05-29 17:01:22 +03:00
Installer::updateEnv(['MAIL_FROM_ADDRESS' => '"' . $value . '"']);
2018-11-06 14:00:30 +03:00
break;
2019-11-16 10:21:14 +03:00
case 'default.locale':
2021-05-29 17:01:22 +03:00
Installer::updateEnv(['APP_LOCALE' => '"' . $value . '"']);
2018-06-09 15:37:28 +03:00
break;
2019-11-16 10:21:14 +03:00
case 'schedule.time':
Installer::updateEnv(['APP_SCHEDULE_TIME' => '"' . $value . '"']);
break;
2022-06-01 10:15:55 +03:00
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;
2018-06-09 15:37:28 +03:00
}
}
2022-06-01 10:15:55 +03:00
}