بِسْمِ اللَّهِ Mudah-mudahan tutorial Codeigniter 3 – Mencatat Aktivitas User dalam CRUD ini bermanfaat
Tutorial ini bisa dibilang lanjutan dari tutorial sebelumnya Codeigniter 4 – Mencatat Aktivitas User dalam CRUD dan Codeigniter 4 – Mencatat Aktivitas User dalam CRUD 2, pada tutorial kali ini yang akan dibahas bisa dibilang ini adalah metode yang ketiga. Karena saya hanya melakukan penambahan nilai balik berupa ID pada waktu insert data, dan melakukan pengecekan/membandingkan data sebelum dan sesudah perubahan untuk setiap kolom.
Pada Codeigniter 3 saya belum menemukan fitur yang bisa digunakan, jadi saya menggunakan versi manual ini yang menurut saya bisa diimplementasikan.
Persiapan Codeigniter 3 – Mencatat Aktivitas User dalam CRUD
Untuk melanjutkan tutorial pastikan sudah:
Ada database dan Project Codeigniter 3 anda sudah terhubung dengan database, tutorialnya Codeigniter 3 – Koneksi ke Database
Menerapkan template untuk project Codeigniter 3
Mengerjakan tutorial CRUD Codeigniter 3 – CRUD Bagian 1 Tambah Data, Codeigniter 3 – CRUD Bagian 2 Edit Data dan Codeigniter 3 – CRUD Bagian 3 Hapus Data
Pertama
Buat tabel log_activities untuk menyimpan atau mencatat aktivitas user. Scriptnya sebagai berikut:
CREATE TABLE `log_activities` (
`id` int(11) NOT NULL,
`tables_name` varchar(255) NOT NULL,
`description` varchar(255) NOT NULL,
`before` varchar(255) DEFAULT NULL,
`after` varchar(255) DEFAULT NULL,
`create_date` datetime NOT NULL,
`create_by` varchar(75) NOT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `log_activities`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `id` (`id`);
ALTER TABLE `log_activities`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
Berikut penjelasan untuk masing-masing field, mungkin bisa dikurang atau ditambah. Silakan sesuaikan dengan kebutuhan Anda.
tables_name
= untuk menyimpan nama tabel (ditrigger di hardcode sesuaikan dengan nama tabel)description
= untuk menyimpan keterangan tambah, update, delete (bisa disesuaikan dengan keinginan Anda)before
= jika dibutuhkan untuk menyimpan nilai sebelum perubahan (biasanya untuk AFTER UPDATE)after
= jika dibutuhkan untuk menyimpan nilai baru setelah perubahan (biasanya untuk AFTER UPDATE)create_date
= untuk menyimpan tanggal aktivitascreate_by
= untuk menyimpan user yang melakukan aktivitas
Kedua
Membuat model LogActivities_model dengan lokasi application\models\LogActivities_model.php. Scriptnya sebagai berikut
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class LogActivities_model extends CI_Model
{
public function __construct() {
parent::__construct();
}
function list() {
$this->db->select('*');
$this->db->where('active', 1);
$query = $this->db->get("log_activities");
return $query;
}
function insert($tables_name, $description, $before, $after, $create_date, $create_by) {
$data = array(
'tables_name' => $tables_name,
'description' => $description,
'before' => $before,
'after' => $after,
'create_date' => $create_date,
'create_by' => $create_by,
'active' => '1',
);
$this->db->insert('log_activities', $data);
}
public function make_query()
{
$query = "
SELECT * from log_activities
WHERE active=1
";
return $query;
}
public function fetch_data($limit, $start)
{
$query = $this->make_query();
$query .= ' order by id desc';
$query .= ' LIMIT '.$start.', '.$limit;
$data = $this->db->query($query);
return $data->result() ;
}
public function count_all()
{
$query = $this->make_query();
$data = $this->db->query($query);
return $data->num_rows();
}
}
Fungsi insert() digunakan untuk input data log aktivitas user
Fungsi make_query, fetch_data dan count_all digunakan untuk kebutuhan menampilkan data dan pagination
Ketiga
Melakukan perubahan pada model, dalam hal ini Product_model (application\models\Product_model.php). Yaitu dengan dengan menambahkan return value untuk setiap fungsi CRUD (insert, update dan delete). Berikut scriptnya
function insert() {
$post = $this->input->post();
$image = $this->uploadImage();
$data = array(
'product_name' => $post["product_name"],
'description' => $post["description"],
'url' => $image,
'create_date' => date("Y-m-d H:i:s"),
'create_by' => $this->ion_auth->user()->row()->username,
'active' => '1',
);
if ($this->db->insert('products', $data))
{
return $this->db->insert_id();
} else {
return 0;
}
}
function update() {
$post = $this->input->post();
if (!empty($_FILES["image_file"]["name"])) {
$image = $this->uploadImage();
} else {
$image = $post["url_old"];
}
$id = $post["id"];
$data = array(
'product_name' => $post["product_name"],
'description' => $post["description"],
'url' => $image,
'update_date' => date("Y-m-d H:i:s"),
'update_by' => $this->ion_auth->user()->row()->username,
'active' => '1',
);
$this->db->where('id', $id);
return $this->db->update('products', $data);
}
function delete($id) {
$data = array(
'update_date' => date("Y-m-d H:i:s"),
'update_by' => $this->ion_auth->user()->row()->username,
'active' => '0',
);
$this->db->where('id', $id);
return $this->db->update('products', $data);
}
Fungsi insert menghasilkan ID yang terakhir, fungsi update dan delete menghasilkan nilai TRUE (1) jika prosesnya berhasil dan FALSE (0) jika prosesnya gagal.
Keempat
Update controller Product (application\controllers\Product.php), fungsi save() silakan update dengan script berikut:
public function save()
{
if ($this->ion_auth->logged_in()) {
$this->form_validation->set_rules('product_name', 'Nama Produk', 'trim|required',
array(
'required' => '%s harus diisi.'
)
);
$this->form_validation->set_rules('description', 'Diskripsi', 'trim|required',
array(
'required' => '%s harus diisi.'
)
);
if ($this->form_validation->run() == FALSE) {
$data['title'] = "Tambah Produk";
$data['page_name'] = "product/add";
$this->load->view('template', $data);
} else {
$id = $this->product_model->insert();
if ($id !== 0) {
$this->logActivities_model->insert('products', 'tambah data produk dengan id = '.$id, '', $id, date("Y-m-d H:i:s"), $this->ion_auth->user()->row()->username);
}
redirect('product');
}
} else {
redirect('auth/login');
}
}
Fungsi update(), silakan update dengan script berikut:
public function update()
{
if ($this->ion_auth->logged_in()) {
$post = $this->input->post();
$this->form_validation->set_rules('product_name', 'Nama Produk', 'trim|required',
array(
'required' => '%s harus diisi.'
)
);
$this->form_validation->set_rules('description', 'Diskripsi', 'trim|required',
array(
'required' => '%s harus diisi.'
)
);
$id = $post["id"];
$products = $this->product_model->findById($id);
$data['products'] = $products;
if ($this->form_validation->run() == FALSE) {
$data['title'] = "Edit Produk";
$data['page_name'] = "product/edit";
$this->load->view('template', $data);
} else {
if ($this->product_model->update()) {
$products_new = $this->product_model->findById($id);
if ($products["product_name"] !== $products_new["product_name"]) {
$this->logActivities_model->insert('products', 'update data produk dengan id = '.$id.' field = product_name', $products["product_name"], $products_new["product_name"], date("Y-m-d H:i:s"), $this->ion_auth->user()->row()->username);
}
if ($products["description"] !== $products_new["description"]) {
$this->logActivities_model->insert('products', 'update data produk dengan id = '.$id.' field = description', $products["description"], $products_new["description"], date("Y-m-d H:i:s"), $this->ion_auth->user()->row()->username);
}
if ($products["url"] !== $products_new["url"]) {
$this->logActivities_model->insert('products', 'update data produk dengan id = '.$id.' field = url', $products["url"], $products_new["url"], date("Y-m-d H:i:s"), $this->ion_auth->user()->row()->username);
}
redirect('product');
} else {
$data['title'] = "Edit Produk";
$data['page_name'] = "product/edit";
$this->load->view('template', $data);
}
}
} else {
redirect('auth/login');
}
}
Fungsi delete() silakan update dengan script berikut:
public function delete($id)
{
if ($this->ion_auth->logged_in()) {
if ($this->product_model->delete($id)) {
$this->logActivities_model->insert('products', 'delete data produk dengan id = '.$id, $id, '', date("Y-m-d H:i:s"), $this->ion_auth->user()->row()->username);
}
redirect('product');
} else {
redirect('auth/login');
}
}
Kelima
Kemudian membuat controller LogActivities dengan lokasi application\controllers\LogActivities.php. Scriptnya sebagai berikut
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class LogActivities extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model("logActivities_model");
}
public function index()
{
$per_page = 5;
$config["per_page"] = $per_page;
$config["base_url"] = base_url() . "product";
$config["total_rows"] = $this->logActivities_model->count_all();
$this->pagination->initialize($config);
$page = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0;
$data["links"] = $this->pagination->create_links();
$data['log_activities'] = $this->logActivities_model->fetch_data($per_page, $page);
$data['title'] = "Daftar Aktivitas";
$data['page_name'] = "log_activities/list";
$this->load->view('template', $data);
}
}
Yang berikutnya buat view list.php yang lokasinya di application\views\log_activities\list.php. Berikut ini scriptnya
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary"><?= $title; ?></h6>
<div class="row">
<div class="col">
<div class="text-center"><?= $links; ?></div>
</div>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
<thead>
<tr>
<th>ID</th>
<th>Nama Tabel</th>
<th>Deskripsi</th>
<th>Nama User</th>
<th>Tanggal</th>
</tr>
</thead>
<tfoot>
<tr>
<th>ID</th>
<th>Nama Tabel</th>
<th>Deskripsi</th>
<th>Nama User</th>
<th>Tanggal</th>
</tr>
</tfoot>
<tbody>
<?php foreach($log_activities as $row): ?>
<tr>
<td><?= $row->id; ?></td>
<td><?= $row->tables_name; ?></td>
<td><?= $row->description; ?></td>
<td><?= $row->create_by; ?></td>
<td><?= $row->create_date; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
Terakhir
Coba buka browser dan buka alamat http://localhost/ci3/logActivities. Tampilan akhirnya kurang lebih seperti ini
Demikian tutorial Codeigniter 3 – Mencatat Aktivitas User dalam CRUD. Silakan dilanjutkan dan dikembangkan lagi.
Mudah-mudahan tutorial ini bermanfaat.
You ought to take part in a contest for one of the best websites on the net. I am going to highly recommend this website!