<?php
namespace App\Models;
use CodeIgniter\Model;
use Config\Services;
class UsersModel extends Model
{
protected $table = 'sm_user';
protected $primaryKey = 'user_no';
protected $useAutoIncrement = true;
protected $returnType = 'array';
protected $allowedFields = [
'user_company',
'user_name',
'user_email',
'user_password',
'user_phone',
'user_register_token',
'user_register_flag',
'user_reset_token',
'user_reset_flag',
'user_lastlogin',
'user_created_by',
'user_modified_by',
'user_deleted_by',
'user_locked',
];
protected $useSoftDeletes = true;
protected $useTimestamps = true;
protected $createdField = 'user_created_date';
protected $updatedField = 'user_modified_date';
protected $deletedField = 'user_deleted_date';
protected $beforeInsert = ['hashPassword','registerToken','resetToken'];
protected $beforeUpdate = ['hashPassword'];
protected $allowCallbacks = true;
protected $validationRules = [];
protected $validationMessages = [];
protected $skipValidation = false;
public function __construct()
{
helper('date');
$this->db = \Config\Database::connect();
$this->builder = $this->db->table($this->table);
$this->encrypter = Services::encrypter();
}
/**
* -----------------------------------------
* Hash Password
* -----------------------------------------
*
* Function Hash Password beforeInsert
* and beforeUpdate
*
* @param array $data Data Models
*/
protected function hashPassword(array $data): array
{
if (! isset($data['data']['user_password'])) {
return $data;
}
$data['data']['user_password'] = password_hash($data['data']['user_password'], PASSWORD_DEFAULT);
return $data;
}
/**
* -----------------------------------------
* Generate Token - Register
* -----------------------------------------
*
* Function Generate Token Register beforeInsert
*
* @param array $data Data Models
*/
protected function registerToken(array $data): array
{
if (! isset($data['data']['user_register_token'])) {
return $data;
}
$data['data']['user_register_token'] = $this->encrypter->encrypt($data['data']['user_register_token']);
return $data;
}
/**
* -----------------------------------------
* Generate Token - Reset
* -----------------------------------------
*
* Function Generate Token Reset
* beforeInsert
*
* @param array $data Data Models
*/
protected function resetToken(array $data): array
{
if (! isset($data['data']['user_reset_token'])) {
return $data;
}
$data['data']['user_reset_token'] = $this->encrypter->encrypt($data['data']['user_reset_token']);
return $data;
}
/**
* -----------------------------------------
* Finding Data
* -----------------------------------------
*
* @param string $selectParams Selected Field with Delimeter Commma (,)
* @param array $whereParams More Where with Array Like ['field_name' => 'value'] or ['field_name >' => 3]
* @param array $joinParams Join more with Array Like
* [
* 1 => [
* 'to' => [
* 'table' => 'tb_field,
* 'condition' => 'tb_field.id = tb_fieldother.id'
* ],
* 'type' => 'inner',
* ],
* ]
*/
public function findData(string $selectParams = '*', array $whereParams = [], array $joinParams = []): array
{
$this->builder->select($selectParams);
if (count($joinParams) > 0) {
foreach ($joinParams as $index => $val) {
$this->builder->join($joinParams[$index]['to']['table'], $joinParams[$index]['to']['condition'], $joinParams[$index]['type']);
}
}
if (count($whereParams) > 0) {
$this->builder->where($whereParams);
}
$findData = $this->builder->get();
return $findData->getResultArray();
}
/**
* -----------------------------------------
* Save Data
* -----------------------------------------
*
* Simpan Data User.
*
* @param array $data Data User
*/
public function saveData(array $data = [])
{
return $this->insert($data);
}
/**
* -----------------------------------------
* Delete Data
* -----------------------------------------
*
* Delete Data User.
*
* @param int $id Data User
* @param int $byDeleted Deleted by User
*/
public function deleteData(int $id = 0)
{
return $this->delete(intval($id));
}
}