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'); }); } }