194 lines
5.7 KiB
PHP
Raw Normal View History

2017-09-14 22:21:00 +03:00
<?php
namespace App\Http\Controllers\Settings;
use App\Http\Controllers\Controller;
use App\Http\Requests\Setting\Setting as Request;
use App\Models\Banking\Account;
2018-06-10 02:48:51 +03:00
use App\Models\Common\Company;
2017-09-14 22:21:00 +03:00
use App\Models\Setting\Currency;
use App\Models\Setting\Setting;
use App\Models\Common\Media;
2017-12-06 14:06:02 +03:00
use App\Models\Setting\Tax;
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;
use App\Utilities\Modules;
2018-12-31 14:41:17 +03:00
use Date;
2017-09-14 22:21:00 +03:00
class Settings extends Controller
{
use DateTime, Uploads;
/**
* Show the form for editing the specified resource.
*
* @return Response
*/
public function edit()
{
$setting = Setting::all()->map(function ($s) {
2017-09-14 22:21:00 +03:00
$s->key = str_replace('general.', '', $s->key);
2017-09-14 22:21:00 +03:00
return $s;
})->pluck('value', 'key');
2018-12-31 14:41:17 +03:00
$setting->put('company_logo', Media::find($setting->pull('company_logo')));
$setting->put('invoice_logo', Media::find($setting->pull('invoice_logo')));
2017-09-14 22:21:00 +03:00
$timezones = $this->getTimezones();
2018-06-29 14:42:15 +03:00
$accounts = Account::enabled()->orderBy('name')->pluck('name', 'id');
2017-09-14 22:21:00 +03:00
2018-06-29 14:42:15 +03:00
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code');
2017-09-14 22:21:00 +03:00
2018-11-07 19:56:11 +03:00
$taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id');
2017-09-14 22:21:00 +03:00
$payment_methods = Modules::getPaymentMethods();
2017-09-14 22:21:00 +03:00
$date_formats = [
'd M Y' => '31 Dec 2017',
'd F Y' => '31 December 2017',
'd m Y' => '31 12 2017',
'm d Y' => '12 31 2017',
2018-04-16 19:01:29 +03:00
'Y m d' => '2017 12 31',
2017-09-14 22:21:00 +03:00
];
$date_separators = [
'dash' => trans('settings.localisation.date.dash'),
'slash' => trans('settings.localisation.date.slash'),
'dot' => trans('settings.localisation.date.dot'),
'comma' => trans('settings.localisation.date.comma'),
'space' => trans('settings.localisation.date.space'),
];
2018-10-17 20:58:46 +03:00
$item_names = [
'settings.invoice.item' => trans('settings.invoice.item'),
'settings.invoice.product' => trans('settings.invoice.product'),
'settings.invoice.service' => trans('settings.invoice.service'),
'custom' => trans('settings.invoice.custom'),
];
$price_names = [
'settings.invoice.price' => trans('settings.invoice.price'),
'settings.invoice.rate' => trans('settings.invoice.rate'),
'custom' => trans('settings.invoice.custom'),
];
$quantity_names = [
'settings.invoice.quantity' => trans('settings.invoice.quantity'),
'custom' => trans('settings.invoice.custom'),
];
2017-09-14 22:21:00 +03:00
$email_protocols = [
'mail' => trans('settings.email.php'),
'smtp' => trans('settings.email.smtp.name'),
'sendmail' => trans('settings.email.sendmail'),
2018-04-16 19:01:29 +03:00
'log' => trans('settings.email.log'),
];
$percent_positions = [
'before' => trans('settings.localisation.percent.before'),
'after' => trans('settings.localisation.percent.after'),
2017-09-14 22:21:00 +03:00
];
return view('settings.settings.edit', compact(
'setting',
'timezones',
'accounts',
'currencies',
'taxes',
'payment_methods',
2017-09-14 22:21:00 +03:00
'date_formats',
'date_separators',
2018-10-17 20:58:46 +03:00
'item_names',
'price_names',
'quantity_names',
2018-04-16 19:01:29 +03:00
'email_protocols',
'percent_positions'
2017-09-14 22:21:00 +03:00
));
}
/**
* Update the specified resource in storage.
*
* @param Request $request
*
* @return Response
*/
public function update(Request $request)
{
$fields = $request->all();
$company_id = $request->get('company_id');
if (empty($company_id)) {
$company_id = session('company_id');
}
$company = Company::find($company_id);
2017-09-14 22:21:00 +03:00
$skip_keys = ['company_id', '_method', '_token'];
$file_keys = ['company_logo', 'invoice_logo'];
2017-12-06 14:06:02 +03:00
$companies = Company::all()->count();
2017-09-14 22:21:00 +03:00
foreach ($fields as $key => $value) {
// Don't process unwanted keys
if (in_array($key, $skip_keys)) {
continue;
}
// Process file uploads
if (in_array($key, $file_keys)) {
// Upload attachment
if ($request->file($key)) {
$media = $this->getMedia($request->file($key), 'settings');
$company->attachMedia($media, $key);
$value = $media->id;
}
2017-09-14 22:21:00 +03:00
// Prevent reset
if (empty($value)) {
continue;
}
}
2018-06-09 15:37:28 +03:00
// If only 1 company
if ($companies == 1) {
$this->oneCompany($key, $value);
2017-12-06 14:06:02 +03:00
}
2017-09-14 22:21:00 +03:00
setting()->set('general.' . $key, $value);
}
// Save all settings
setting()->save();
$message = trans('messages.success.updated', ['type' => trans_choice('general.settings', 2)]);
flash($message)->success();
return redirect('settings/settings');
}
2018-06-09 15:37:28 +03:00
protected function oneCompany($key, $value)
{
switch ($key) {
2018-11-06 14:00:30 +03:00
case 'company_name':
Installer::updateEnv(['MAIL_FROM_NAME' => '"' . $value . '"']);
break;
case 'company_email':
Installer::updateEnv(['MAIL_FROM_ADDRESS' => $value]);
break;
2018-06-09 15:37:28 +03:00
case 'default_locale':
2018-11-06 14:00:30 +03:00
Installer::updateEnv(['APP_LOCALE' => $value]);
2018-06-09 15:37:28 +03:00
break;
case 'session_handler':
2018-11-06 14:00:30 +03:00
Installer::updateEnv(['SESSION_DRIVER' => $value]);
2018-06-09 15:37:28 +03:00
break;
}
}
2017-09-14 22:21:00 +03:00
}