Penggunaan Callback pada GroceryCrud

Dear all coder seantero jagad raya. Kemarin Kang Cahya sudah membahas mengenai Grocery Crud, yaitu sebuah pugins codeigniter untuk menampilkan data dari database, lengkap dengan proses CRUD-nya. Grocery Crud ini sangat powerfull dan cukup membantu untuk membuat sebuah aplikasi CRUD dengan cepat. Pada form insert/update juga sudah dilakukan rules dan validasi secara otomatis (sesuai rules yang ditetapkan dari database).

Pada tulisan singkat kali ini, saya akan membahas tentang callback pada Grocery Crud dan kasus-kasus umum yang bakal terjadi dalam dunia programming.  Ada beberapa tipe callback pada Grocery Crud, antara lain :

  • Callback Colum
  • Callback Delete
  • Callback After (delete, insert, update, upload)
  • Callback Before (delete, insert, update, upload)
  • Callback add field
  • Callback edit field
  • Callback Insert / Callback Update / Callback Delete

Fungsi callback ini berfungsi untuk melakukan escaping terhadap suatu proses operasi dan memasukkan logika sebelum meneruskan ke proses akhir. Grocery Crud membentuk form input data secara otomatis, jika kita hanya memiliki data sederhana, maka tidak ada masalah untuk menggunakan form yang dibentuk oleh Grocery Crud. Namun jika kita membutuhkan modifikasi terhadap data yang akan dimasukkan ke database, maka akan timbul kesulitan baru.

Marilah kita bahas case berikut ini……

Baca Juga  :Tutorial codeigniter 3 bahasa indonesia

Terdapat sebuah form untuk mengisikan data dari tabel users. Berikut adalah struktur table pada users:

Column Type Length
id int 11
group_id int 11
username Varchar 100
password Varchar 150
email varchar 100
first_name varchar 50
last_name varchar 50
created_at Date
updated_at Date

Dan di bawah ini adalah struktur table pada tabel usergroup:

Column Type Length
id int 11
group_name varchar 20
description Varchar 200

Column id adalah colum type int, merupakan Primary Key dari tabel tersebut. Set autoincrement dari column id ini dengan nilai true.

Sekarang kita masuk ke bagian peng-coding-an. Pada tutorial ini sudah saya sertakan sebuah aplikasi yang dilengkapi dengan Grocery Crud + Code Igniter + SB Admin template. Jadi kita hanya focus di coding nya saja.

Tambahkan fungsi berikut pada controller latihan:

Jika sudah selesai menambahkan coding di atas, jalankanlah aplikasi di web browser. Kalau di tempat saya, link untuk menjalankan aplikasi tersebut adalah:

http://localhost:8080/codeignitergrocerycrud/index.php/latihan/user_management

Kemungkinan link akan berbeda, sesuai dengan konfigurasi port server di server apache yang terinstall di computer. Jika berhasil, maka akan muncul seperti gambar di bawah ini:

Grocery Crud Callback Tutorial

Jika di klik tombol Add User, maka akan muncul form input data seperti gambar di bawah:

Sebenarnya pada tahapan ini, Grocery Crud sudah dapat bekerja dan dapat memasukkan data ke dalam tabel. Tetapi ada beberapa hal yang membutuhkan kustomisasi agar aplikasi dapat berjalan dengan bagus. Pada form tersebut, lihatlah input Group id yang berupa textbox. Kenyataannya yang kita inginkan adalah Group id berupa select combobox, yang dipopulasikan dari sebuah table lain. Untuk itu kita harus melakukan relasi dari tabel users ke tabel usergroup.

Untuk melakukan relation dari tabel users ke tabel usergroup, tambahkanlah script berikut pada fungsi user_management, posisi script tidak boleh setelah baris render dari Grocery Crud, harus sebelumnya.

$crud->set_relation(‘group_id’,’usergroup’,’group_name’);

Kemudian jalankan lagi atau refresh halaman web pada browser. Maka field group_id akan berubah dari textbox menjadi select combobox. Lihat pada gambar di bawah.

Masalah selanjutnya adalah username, sebuah aplikasi yang baik, harus mampu melakukan check data apakah data yang diinput sudah ada di database atau tidak. Untuk itu kita harus melakukan callback terhadap field username. Mengintip database, apakah input yang di post mempunyai value yang sama atau tidak terhadap data yang sudah ada. Jika data sudah ada, maka kita cegah proses penyimpanan data dan melempar pesan error kepada user.

Untuk mewujudkan hal tersebut, maka kita buat dulu sebuah fungsi untuk melakukan pengecekan ke database. Misal nama fungsinya adalah: cek_user_before_user_save,

$post_array yang di passing ke dalam fungsi itu adalah post data pada form input user yang di generate oleh Grocery Crud. Untuk mengaksesnya sama dengan mengakses data array pada php. Misalkan nama field kita adalah field username, maka untuk mendapatkan nilai username yang di post oleh form adalah sebagai berikut: $post_ array[‘username’]

Bagaimana memanggil fungsi ini? Untuk memanggil fungsi ini, maka kita harus melakukan callback sebelum data diinpute ke database. Pada kasus ini kita gunakan callback before insert yang telah disediakan oleh Grocery Crud.

Script umum dari callback before insert adalah:

$crud->callback_before_insert(array($this,’nama fungsi callback nya….’));

Untuk lebih lengkapnya, fungsi user_management setelah ditambahkan perintah callback dan custom error message adalah sebagai berikut:

Perhatikan script tersebut, ada penambahan perintah set_lang_string dan callback_before_insert. Perintah set_lang_string adalah perintah untuk mengubah isi pesan pada saat state tertentu terjadi. Dalam hal ini yang kita ingin ubah isi pesannya adalah pada saat state insert_error (ada berbagai macam state pada Grocery Crud, bukan hanya insert_error saja). Sekarang coba refresh kembali page di browser, kemudian masukkan sebuah username yang value nya identic dengan username yang ada pada database. Pada database saya, sudah ada username dengan value admin.

Pada kasus ini, berlaku juga untuk state update field username. Post data update juga harus dilakukan pengecekan, apakah sudah ada di database atau tidak. Untuk itu kita tambah satu perintah callback lagi, yaitu callback_before_update. Selengkapnya dapat anda download pada link yang telah disediakan.

Setelah username, field selanjutnya yang membutuhkan perhatian khusus adalah field password. Beberapa hal yang perlu diperhatikan untuk field password ini adalah sebagai berikut :

  • Field password disimpan terenkripsi di database
  • Password harus diuji dengan length tertentu.
  • Pada saat input data, value dari password tidak terlihat.
  • Pada saat update data, field password dibiarkan kosong, jika password diubah, maka ada post data password untuk di masukkan ke database. Jika password tidak diubah atau dibiarkan kosong, maka tidak ada post data password, dan password lama tidak diupdate.

Untuk menyelesaikan bagian nomor 1, maka kita harus edit sedikit fungsi cek_user_before_save, lihat gambar di bawah:

Ganti bagian yang saya kotakin dengan script ini :

sehingga fungsi cek_user_before_user_save menjadi seperti gambar di bawah ini:

Fungsi tersebut akan mengembalikan post data password yang sudah di encode. Saya meminjam library encrypt dari codeigniter. Lakukan hal yang sama pada fungsi cek_user_before_user_update. Jika sudah selesai, maka pada datagrid user akan menjadi seperti gambar di bawah ini:

Permasalahan selanjutnya adalah pada saat kita melakukan edit pada user. Jika kita klik tombol edit, maka akan muncul form edit seperti berikut ini:

Perhatikan pada bagian password. Bentuk password adalah bentuk yang telah di enkripsi, jika kita klik button Update changes, maka password akan disimpan kembali dalam bentuk terenkrip dikarenakan adanya proses callback saat melakukan update.

Jadi prosesnya seperti ini:

Password awal (plain text) -> save (password sudah di encrypt) -> buka form update (password ter-encrypt ditampilkan) -> update changes (password ter-encrypt di encrypt lagi)

Jika proses ini yang terjadi, maka setiap melakukan update data user, maka password akan berubah.

Bagaimana mengantisipasi hal ini? Mudah saja, Grocery Crud menyediakan apa yang anda butuhkan dengan callback. Pada proses update data user yang mempunyai field password, maka harus melalui langkah-langkah sebagai berikut:

  • Pada saat membuka form update, biarkan field password kosong.
  • Pada saat melakukan update, gunakan callback dengan melakukan cek pada post data password, jika post data kosong, artinya column password tidak di update, maka kita lakukan unset terhadap post data password. Jika di unset, maka grocery crud tidak akan melakukan update terhadap password.

Untuk langkah 1, pada fungsi user_management, saya tambahkan baris berikut:

Kemudian tambahkan fungsi set_empty_password_field:

Setelah selesai, fungsi user_management akan menjadi seperti ini:

Silahkan download code dari artikel ini di link berikut:

Referensi

 

Via Mediafire

 

Related Posts
Leave a reply