You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

206 lines
5.8 KiB
PHTML

2 years ago
<?php
namespace App\Libs;
use App\Models\Setting;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
trait TraitSetting
{
/**
* 설정목록 가져오기
*
* @param Request $request
* @return array
*/
protected function getSettingList(Request $request)
{
$list = Setting::query()
->with('user')
->where(function ($query) use ($request) {
if ($request->filled('word')) {
if ($request->filled('field') && $request->field != 'all') {
$query->where($request->field, 'like', '%' . $request->word . '%');
} else {
$query->orWhere('name', 'like', '%'. $request->word .'%')
->orWhere('key', 'like', '%'. $request->word .'%')
->orWhere('value', 'like', '%'. $request->word .'%');
}
}
})
->orderBy('key')
->latest()
->get();
$search = $request->all();
$searchs = [
'all' => '통합검색',
'name' => '변수명',
'key' => '변수키',
'value' => '변수값'
];
$data = [
'mode' => 'list',
'data' => $list,
'search' => $search,
'searchs' => $searchs
];
return $data;
}
/**
* 설정변수 가져오기
*
* @param int $id
* @return mixed
*/
protected function getSettingInfo($id = 0)
{
$data = Setting::query()
->with('user')
->where('id', $id)
->first();
return $data;
}
/**
* 설정변수 등록
*
* @param Request $request
* @return array
*/
protected function createSetting(Request $request)
{
$id = $request->get('id', 0);
if ($id) {
$data = $this->getSettingInfo($id);
$data->mode = 'modify';
} else {
$data = new Setting;
$data->mode = 'add';
$data->system = 1;
}
return $data;
}
/**
* 설정변수 저장
*
* @param Request $request
* @return mixed
*/
protected function storeSetting(Request $request)
{
return DB::transaction(function() use ($request) {
$rules = [
'name' => 'required|string|max:100',
'key' => 'required|string|max:30',
'value' => 'string',
'system' => 'integer'
];
$validator = $this->validation($request, $rules);
if ($validator !== true) {
return $this->sendResult($validator);
}
$mode = $request->get('mode', 'add');
$id = $request->get('id', 0);
$data = $this->getSettingInfo($id);
$postData = $request->only([
'name', 'key', 'value'
]);
$postData = array_map('setDefault', $postData);
$postData['system'] = $request->get('system', 0);
// 수정
if ($mode == 'modify') {
if (!$data) {
return $this->sendResult('해당 변수가 존재하지 않습니다.');
}
// 시스템 변수는 key값 수정 불가
if ($data->system && $data->key != $postData['key']) {
return $this->sendResult('시스템 변수는 변수키를 수정할 수 없습니다.');
}
$exist = Setting::query()->whereNotIn('id', [$id])->where('key', $postData['key'])->first();
if ($exist) {
return $this->sendResult('이미 등록된 변수키입니다.');
}
$appends = [
'updated_id' => auth()->user()->id,
'updated_at' => (string)Carbon::now()
];
$postData = array_merge($postData, $appends);
$data->fill($postData);
$data->save();
} else {
$exist = Setting::query()->where('key', $postData['key'])->first();
if ($exist) {
return $this->sendResult('이미 등록된 변수키입니다.');
}
$appends = [
'created_id' => auth()->user()->id,
'created_at' => (string)Carbon::now()
];
$postData = array_merge($postData, $appends);
$data = Setting::query()->create($postData);
if (!$data) {
return $this->sendResult('변수 등록에 실패했습니다.');
}
}
if ($mode == 'add') {
$message = '변수가 등록되었습니다.';
} else {
$message = '변수정보가 수정되었습니다.';
}
return $this->sendResult($message, 'success');
});
}
/**
* 변수 삭제
*
* @param Request $request
* @return mixed
*/
public function deleteSetting(Request $request)
{
return DB::transaction(function() use ($request) {
$id = $request->get('id', 0);
$data = $this->getSettingInfo($id);
// 시스템 변수 삭제 불가
if ($data->system) {
return $this->sendResult('시스템 변수는 삭제할 수 없습니다.');
}
if (!$data) {
return $this->sendResult('해당 변수가 존재하지 않습니다.');
}
$data->delete();
return $this->sendResult('변수가 삭제되었습니다.', 'success');
});
}
}