<?php
namespace CoreSite\Controllers;
use CoreSite\Entities\SettingEntity;
use CoreSite\Libraries\ParameterDataInput;
use CodeIgniter\HTTP\ResponseInterface;
use CoreSite\Models\SettingModel;
class Setting extends ApiController
{
/**
* index function
* @method : GET
*/
public function index()
{
$settingModel = new SettingModel();
$parameterDataInput = new ParameterDataInput();
$parameterDataInput->receiveParameters();
if ($parameterDataInput->getExact()) {
$result = $settingModel->where($parameterDataInput->getExactExplode('key'), $parameterDataInput->getExactExplode('value'))
->orderBy($parameterDataInput->getSortExplode('key'), $parameterDataInput->getSortExplode('value'))
->paginate(10, 'default', $parameterDataInput->getPage());
} else if ($parameterDataInput->getExcept()) {
$result = $settingModel->where($parameterDataInput->getExceptExplode('key') . ' !=', $parameterDataInput->getExceptExplode('value'))
->orderBy($parameterDataInput->getSortExplode('key'), $parameterDataInput->getSortExplode('value'))
->paginate(10, 'default', $parameterDataInput->getPage());
} else {
$result = $settingModel->like($parameterDataInput->getFilterExplode('key'), $parameterDataInput->getFilterExplode('value'))
->orderBy($parameterDataInput->getSortExplode('key'), $parameterDataInput->getSortExplode('value'))
->paginate(10, 'default', $parameterDataInput->getPage());
}
return $this->respond([
'data' => $result,
'pager' => $settingModel->pager->getDetails()
], ResponseInterface::HTTP_OK, lang('Response.api.receive'));
}
/**
* show function
* @method : GET with params ID
*/
public function show($id = null)
{
$settingModel = new SettingModel();
return $this->respond([
'data' => $settingModel->where('id', $id)->paginate(1, 'default'),
'pager' => $settingModel->pager->getDetails()
], ResponseInterface::HTTP_OK, lang('Response.api.receive'));
}
/**
* create function
* @method : POST
*/
public function create()
{
$settingModel = new SettingModel();
$settingEntity = new SettingEntity();
if ($this->request->getJSON()) {
//get request from Vue Js
$rules = [
'key' => 'required|min_length[3]|max_length[255]|is_unique[setting.key]',
'value' => 'required|min_length[3]|max_length[255]',
'description' => 'required|min_length[3]|max_length[255]',
'status' => 'required',
];
if (!$this->validate($rules)) {
return $this->respond([
'error' => $this->validator->getErrors(),
'success' => false
], ResponseInterface::HTTP_NOT_ACCEPTABLE, lang('Response.api.validation'));
}
$settingEntity->key = $this->request->getJSON()->key;
$settingEntity->value = $this->request->getJSON()->value;
$settingEntity->description = $this->request->getJSON()->description;
$settingEntity->status = $this->request->getJSON()->description;
$settingEntity->createdAt();
if (!$settingModel->save($settingEntity)) {
return $this->respond([
'error' => $settingModel->errors(),
'success' => false,
], ResponseInterface::HTTP_BAD_REQUEST, lang('Response.api.reject'));
}
return $this->respond([
'data' => ''
], ResponseInterface::HTTP_CREATED, lang('Response.api.save'));
}
}
/**
* update function
* @method : PUT or PATCH
*/
public function update($id = null)
{
$settingModel = new SettingModel();
$settingEntity = new SettingEntity();
if ($this->request->getJSON()) {
//get request from Vue Js
//get request from Vue Js
$json = $this->request->getJSON();
if (!isset($id)) {
$id = $json->id;
}
$rules = [
'value' => 'required|min_length[3]|max_length[255]',
'description' => 'required|min_length[3]|max_length[255]',
'status' => 'required'
];
if (!$this->validate($rules)) {
return $this->respond([
'error' => $this->validator->getErrors(),
'success' => false
], ResponseInterface::HTTP_NOT_ACCEPTABLE, lang('Response.api.validation') );
}
$setting = $settingModel->where('id', $id)->first();
if (is_null($setting)) {
return $this->respond([
'error' => $this->validator->getErrors(),
'success' => false
], ResponseInterface::HTTP_NOT_FOUND, lang('Response.api.exist'));
}
// Success! Save the new password, and cleanup the reset hash.
// $setting->key = $this->request->getJSON()->key;
$setting->value = $this->request->getJSON()->value;
$setting->description = $this->request->getJSON()->description;
$setting->status = $this->request->getJSON()->status;
// date_default_timezone_set('Asia/Tehran');
$setting->updated_at = date('Y-m-d H:i:s', time());
if (!$settingModel->save($setting)) {
return $this->respond([
'error' => $settingModel->errors(),
'success' => false,
], ResponseInterface::HTTP_BAD_REQUEST, lang('Response.api.reject'));
}
return $this->respond([
], ResponseInterface::HTTP_OK, lang('Response.api.update'));
}
}
/**
* edit function
* @method : DELETE with params ID
*/
public function delete($id = null)
{
$settingModel = new \App\Models\SettingModel();
$isExist = $settingModel->find($id);
if ($isExist) {
$settingModel->delete($id);
}
return $this->respond([
], ResponseInterface::HTTP_OK, lang('Response.api.remove'));
}
}