Menambah Fungsi Approve di Module Guestbook Drupal 5 (standar)

23.17.00 K. Novianto 0 Comments

Menambah Fungsi Approve di Module Guestbook Drupal 5 (standar). Gara-gara banyak iklan-iklan porno masuk ke guestbook website yang sedang saya develop(maklum lupa pasang spam filter), jadi kena complain deh. tapi tidak masalah, lumayan buat ngilangin malessnya saya ngoprek oprek module guestbook standar drupal (belum ada fasilitas moderasinya).



Prinsipnya sih simple: Tambahkan field baru di table guestbook punyanya drupal. Jadi modul guestbook harus sudah di install terlebih dahulu. untuk script yang saya pakai, fieldnya saya beri nama moderated. Nah buat saja dengan tipe varchar 1. Field iniakan di isi dengan huruf y or n. Nah setelah itu, u cari deh file guestbook.module yang ada di direktori: modules/guestbook. Lalu edit beberapa baris code jadi seperti berikut ini ... (cari saja di baris berapa, lalu yang saya kasih warna merah itu baris tambahan yang harus di tambahkan di script)
  
$result = pager_query(
"SELECT g.*, u1.name, u1.data, u1.picture, u2.name as commentby
FROM {guestbook} g
LEFT JOIN {users} u1 ON g.author = u1.uid
LEFT JOIN {users} u2 ON g.commentauthor = u2.uid
WHERE g.recipient = %d
AND g.moderated = 'y'
ORDER BY g.created DESC",
$limit, 0, "SELECT COUNT(*) FROM {guestbook} WHERE recipient = %d", $uid);
}

// Insert new message
if (_guestbook_access('post', $uid) == 'allowed') {
if ($user->uid == 0) {
// anonymous user
$entryid = db_next_id('{guestbook}_id');
$result = db_query("INSERT INTO {guestbook} (id, anonname, anonemail, anonwebsite, author, recipient, message, created, moderated)
VALUES(%d, '%s', '%s', '%s', %d, %d, '%s', %d, 'n')", $entryid, $edit['anonname'], $edit['anonemail'], $edit['anonwebsite'], 0, $uid, $message, time());
}
else {
// registered user
$entryid = db_next_id('{guestbook}_id');
$result = db_query("INSERT INTO {guestbook} (id, author, recipient, message, created, moderated)
VALUES(%d, %d, %d, '%s', %d, 'n')", $entryid, $user->uid, $uid, $message, time());
}
}
return 'guestbook/'. $uid;

if (_guestbook_access('administer', $uid) && is_numeric($op_id)) {
switch ($op) {
case 'delete':
return guestbook_delete_entry_confirm_page($uid, $op_id);
case 'show':
return guestbook_show_entry_confirm_page($uid, $op_id);
case 'hidden':
return guestbook_hidden_entry_confirm_page($uid, $op_id);
case 'comment':
$comment_entry = $op_id;
break;
}
}

// links
if (_guestbook_access('administer', $uid) && !$confirm_delete) {
if ($comment_entry != $entry['id']) {
$pager = $_GET['page'] ? 'page='. $_GET['page'] : NULL;
$output .= '<div class="links">» ';
$output .= 'Status (click to change status):';
if($entry['moderated']=="y"){
$output .= l(t('Show entry'), "guestbook/$uid/show/{$entry['id']}", array(), $pager) .' | ';
} else {
$output .= l(t('Hidden entry'), "guestbook/$uid/hidden/{$entry['id']}", array(), $pager) .' | ';
}
$output .= l(t('Delete entry'), "guestbook/$uid/delete/{$entry['id']}", array(), $pager) .' | ';
$output .= l($entry['comment'] == '' ? t('Add comment') : t('Edit comment'), "guestbook/$uid/comment/{$entry['id']}", array(), $pager, 'comment-entry');
$output .= '</div>';
}
}
$output .= "\n</div>";
return $output;

Klo sudah selesai maka tambahkan baris-baris fungsi yang ada di bawah ini :
  
function guestbook_hidden_entry_confirm_page($uid, $entry_id) {
return drupal_get_form('guestbook_hidden_entry_confirm', $uid, $entry_id );
}

function guestbook_show_entry_confirm_page($uid, $entry_id) {
return drupal_get_form('guestbook_show_entry_confirm', $uid, $entry_id );
}

function guestbook_hidden_entry_confirm($uid, $entry_id) {
$entry = db_fetch_array(db_query(
"SELECT g.*, u1.name, u1.data, u1.picture, u2.name as commentby
FROM {guestbook} g
LEFT JOIN {users} u1 ON g.author = u1.uid
LEFT JOIN {users} u2 ON g.commentauthor = u2.uid
WHERE g.id = %d", $entry_id));

$form = array();
$form['entry_id'] = array('#type' => 'value', '#value' => $entry_id);
$form['uid'] = array('#type' => 'value', '#value' => $uid);
return confirm_form(
$form,
t('Are you sure you want to show this guestbook entry?'),
'guestbook/'. $uid,
theme('guestbook_entry', $uid, $entry, NULL, true),
t('Show'), t('Cancel'));
}

function guestbook_show_entry_confirm($uid, $entry_id) {
$entry = db_fetch_array(db_query(
"SELECT g.*, u1.name, u1.data, u1.picture, u2.name as commentby
FROM {guestbook} g
LEFT JOIN {users} u1 ON g.author = u1.uid
LEFT JOIN {users} u2 ON g.commentauthor = u2.uid
WHERE g.id = %d", $entry_id));

$form = array();
$form['entry_id'] = array('#type' => 'value', '#value' => $entry_id);
$form['uid'] = array('#type' => 'value', '#value' => $uid);
return confirm_form(
$form,
t('Are you sure you want to hidden this guestbook entry?'),
'guestbook/'. $uid,
theme('guestbook_entry', $uid, $entry, NULL, true),
t('Hidden'), t('Cancel'));
}

function guestbook_show_entry_confirm_submit($form_id, $form_values) {
if (_guestbook_access('administer', $form_values['uid']) && $form_values['confirm']) {
db_query("UPDATE {guestbook} SET moderated = 'n' WHERE id = %d", $form_values['entry_id']);
}
return 'guestbook/'. $form_values['uid'];
}

function guestbook_hidden_entry_confirm_submit($form_id, $form_values) {
if (_guestbook_access('administer', $form_values['uid']) && $form_values['confirm']) {
db_query("UPDATE {guestbook} SET moderated = 'y' WHERE id = %d", $form_values['entry_id']);
}
return 'guestbook/'. $form_values['uid'];
}
Selesai tinggal di upload deh overwrite aja filenya, dan selesai. Sekarang semua new submission guesbook yang masuk akan otomatis berstatus hidden. Dan hanya akan tampil jika anda login sebagai administrator. Di bagian bawah setiap isian buku tamu akan muncul status dari kontent tersebut. Klik saja status tersebut untuk mengubah dari hidden ke show atau sebaliknya.

Ok, tampilannya masih sederhana sih, habis males bikin yang canggih-canggih. Klo mau silakan didisplay pakai dropdown or else. Klo sukses bagi-bagi ya ilmunya. He...he..he...

0 comments: