Initial commit
This commit is contained in:
@@ -0,0 +1,263 @@
|
||||
<?php
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
class Users extends CI_Controller {
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->load->model('DynamicModel', 'dm');
|
||||
$this->load->library('form_validation');
|
||||
|
||||
if (!$this->session->userdata('logged_in')) {
|
||||
redirect('auth');
|
||||
}
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
|
||||
if($this->session->userdata('role') != 'Admin'){
|
||||
show_error('Akses ditolak', 403);
|
||||
}
|
||||
|
||||
$data = ["active_menu" => "users"];
|
||||
|
||||
$this->load->view('partials/header', $data);
|
||||
$this->load->view('users/layout');
|
||||
$this->load->view('partials/footer');
|
||||
}
|
||||
|
||||
// =========================
|
||||
// DATATABLE USERS + ROLES
|
||||
// =========================
|
||||
public function get_data()
|
||||
{
|
||||
$this->db->select('
|
||||
users.id,
|
||||
users.username,
|
||||
users.nama,
|
||||
roles.nama_role
|
||||
');
|
||||
$this->db->from('users');
|
||||
$this->db->join('roles', 'roles.id = users.role_id', 'left');
|
||||
|
||||
$column_order = ['users.id', 'users.username', 'users.nama', 'roles.nama_role'];
|
||||
$column_search = ['users.username', 'users.nama', 'roles.nama_role'];
|
||||
$order = ['users.id' => 'DESC'];
|
||||
|
||||
$search_value = $this->input->post('search')['value'] ?? '';
|
||||
|
||||
if (!empty($search_value)) {
|
||||
$this->db->group_start();
|
||||
foreach ($column_search as $i => $col) {
|
||||
if ($i === 0) {
|
||||
$this->db->like($col, $search_value);
|
||||
} else {
|
||||
$this->db->or_like($col, $search_value);
|
||||
}
|
||||
}
|
||||
$this->db->group_end();
|
||||
}
|
||||
|
||||
if ($this->input->post('order')) {
|
||||
$col_index = $this->input->post('order')[0]['column'];
|
||||
$dir = $this->input->post('order')[0]['dir'];
|
||||
|
||||
if (isset($column_order[$col_index])) {
|
||||
$this->db->order_by($column_order[$col_index], $dir);
|
||||
}
|
||||
} else {
|
||||
$this->db->order_by(key($order), $order[key($order)]);
|
||||
}
|
||||
|
||||
if ($this->input->post('length') != -1) {
|
||||
$this->db->limit(
|
||||
$this->input->post('length'),
|
||||
$this->input->post('start')
|
||||
);
|
||||
}
|
||||
|
||||
$query = $this->db->get();
|
||||
$data = $query->result();
|
||||
|
||||
$output = [
|
||||
"draw" => intval($this->input->post('draw')),
|
||||
"recordsTotal" => $this->db->count_all('users'),
|
||||
"recordsFiltered" => $this->_count_filtered($search_value),
|
||||
"data" => []
|
||||
];
|
||||
|
||||
foreach ($data as $row) {
|
||||
|
||||
$action = '
|
||||
<button class="btn btn-sm btn-warning btn-edit" data-id="'.$row->id.'">Edit</button>
|
||||
<button class="btn btn-sm btn-danger btn-delete" data-id="'.$row->id.'">Hapus</button>
|
||||
';
|
||||
|
||||
$output['data'][] = [
|
||||
$row->id,
|
||||
$row->username,
|
||||
$row->nama,
|
||||
$row->nama_role,
|
||||
$action
|
||||
];
|
||||
}
|
||||
|
||||
echo json_encode($output);
|
||||
}
|
||||
|
||||
private function _count_filtered($search_value)
|
||||
{
|
||||
$this->db->from('users');
|
||||
$this->db->join('roles', 'roles.id = users.role_id', 'left');
|
||||
|
||||
if (!empty($search_value)) {
|
||||
$this->db->group_start();
|
||||
$this->db->like('users.username', $search_value);
|
||||
$this->db->or_like('users.nama', $search_value);
|
||||
$this->db->or_like('roles.nama_role', $search_value);
|
||||
$this->db->group_end();
|
||||
}
|
||||
|
||||
return $this->db->count_all_results();
|
||||
}
|
||||
|
||||
// =========================
|
||||
// STORE USER
|
||||
// =========================
|
||||
public function store()
|
||||
{
|
||||
$this->form_validation->set_rules('username', 'Username', 'required|is_unique[users.username]');
|
||||
$this->form_validation->set_rules('nama', 'Nama', 'required');
|
||||
$this->form_validation->set_rules('role_id', 'Role', 'required');
|
||||
$this->form_validation->set_rules('password', 'Password', 'required|min_length[6]');
|
||||
|
||||
if ($this->form_validation->run() == FALSE) {
|
||||
echo json_encode([
|
||||
'status' => false,
|
||||
'message' => validation_errors()
|
||||
]);
|
||||
return;
|
||||
}
|
||||
|
||||
$data = [
|
||||
'username' => $this->input->post('username'),
|
||||
'nama' => $this->input->post('nama'),
|
||||
'role_id' => $this->input->post('role_id'),
|
||||
'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT)
|
||||
];
|
||||
|
||||
$this->dm->setTable('users')->insert($data);
|
||||
|
||||
log_activity(
|
||||
'users',
|
||||
'create',
|
||||
'Menambahkan user: ' . $data['username'],
|
||||
'success'
|
||||
);
|
||||
|
||||
echo json_encode([
|
||||
'status' => true,
|
||||
'message' => 'User berhasil ditambahkan'
|
||||
]);
|
||||
}
|
||||
|
||||
// =========================
|
||||
// EDIT USER
|
||||
// =========================
|
||||
public function edit($id)
|
||||
{
|
||||
$user = $this->db->get_where('users', ['id' => $id])->row();
|
||||
|
||||
if ($user) {
|
||||
echo json_encode([
|
||||
'status' => true,
|
||||
'data' => $user
|
||||
]);
|
||||
} else {
|
||||
echo json_encode([
|
||||
'status' => false,
|
||||
'message' => 'User tidak ditemukan'
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
// =========================
|
||||
// UPDATE USER
|
||||
// =========================
|
||||
public function update()
|
||||
{
|
||||
$id = $this->input->post('id');
|
||||
|
||||
$this->form_validation->set_rules('username', 'Username', 'required');
|
||||
$this->form_validation->set_rules('nama', 'Nama', 'required');
|
||||
$this->form_validation->set_rules('role_id', 'Role', 'required');
|
||||
|
||||
if (!empty($this->input->post('password'))) {
|
||||
$this->form_validation->set_rules('password', 'Password', 'min_length[6]');
|
||||
}
|
||||
|
||||
if ($this->form_validation->run() == FALSE) {
|
||||
echo json_encode([
|
||||
'status' => false,
|
||||
'message' => validation_errors()
|
||||
]);
|
||||
return;
|
||||
}
|
||||
|
||||
$data = [
|
||||
'username' => $this->input->post('username'),
|
||||
'nama' => $this->input->post('nama'),
|
||||
'role_id' => $this->input->post('role_id')
|
||||
];
|
||||
|
||||
if (!empty($this->input->post('password'))) {
|
||||
$data['password'] = password_hash($this->input->post('password'), PASSWORD_DEFAULT);
|
||||
}
|
||||
|
||||
$this->dm->setTable('users')->update($id, $data);
|
||||
|
||||
log_activity(
|
||||
'users',
|
||||
'update',
|
||||
'Update user ID: ' . $id . ' username: ' . $this->input->post('username'),
|
||||
'success'
|
||||
);
|
||||
|
||||
echo json_encode([
|
||||
'status' => true,
|
||||
'message' => 'User berhasil diupdate'
|
||||
]);
|
||||
}
|
||||
|
||||
// =========================
|
||||
// DELETE USER
|
||||
// =========================
|
||||
public function delete($id)
|
||||
{
|
||||
$this->dm->setTable('users')->delete($id);
|
||||
|
||||
log_activity(
|
||||
'users',
|
||||
'delete',
|
||||
'Hapus user ID: ' . $id,
|
||||
'success'
|
||||
);
|
||||
|
||||
echo json_encode([
|
||||
'status' => true,
|
||||
'message' => 'User berhasil dihapus'
|
||||
]);
|
||||
}
|
||||
|
||||
// =========================
|
||||
// GET ROLES
|
||||
// =========================
|
||||
public function get_role()
|
||||
{
|
||||
$roles = $this->db->get('roles')->result();
|
||||
|
||||
echo json_encode($roles);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user