Mambo CMS versi terbaru (4.6.2) menawarkan fitur autentikasi captcha yang sudah di-include kan di sistem core. Sayangnya fitur tersebut tidak tersedia di versi lawas 4.5.5 dan versi-versi sebelumnya. Padahal masih banyak pengguna yang menggunakan versi 4.5.* yang ingin memiliki fitur tersebut tanpa harus meng-upgrade mambo nya ke versi baru karena pertimbangan kompatibilitas component yg belum sebanyak versi sebelumnya. tutorial ini akan sedikit mengupas tips memiliki fitur captcha di component contact di versi Mambo 4.5.* menggunakan script yang ada di mambo 4.6.2. fitur captcha ini nantinya akan bisa kita gunakan utk form2 lain dengan metode yang sama.
File-file yg akan dijelaskan diasumsikan menggunakan 4.5.4 sehingga kemungkinan ada sedikit perubahan. Yang pertama kita lakukan adalah mendownload mambo terbaru 4.6.2, mengekstrak dan mengambil file2 berikut utk kita copy kan ke mambo kita. Pastikan lokasi nya sama.
includes/captchaFonts
includes/captcha.php
setelah kita copy folder captchaFonts dan file captcha.php, edit file captcha.php, tambahkan kode berikut di baris paling pertama
/** ensure this file is being included by a parent file */ defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
kode diatas berfungsi agar file captcha.php tidak bisa diakses langsung tetapi harus di include-kan melalui index2.php yg akan kita edit juga nanti. Selanjutnya, cari baris yg berisi:
// Fontsetup $font = './captchaFonts/font1.ttf';
ubah menjadi:
// Fontsetup $font = $mosConfig_absolute_path.'/includes/captchaFonts/font1.ttf';
Seperti terlihat, kita merubah lokasi include folder, menggunakan variabel $mosConfig_absolute_path. simpan, kemudian edit file index2.php di root folder mambo kamu. cari baris yg berisi:
$mainframe->initSession();
Persis setelah baris tersebut. tambahkan code berikut sehingga menjadi:
$mainframe->initSession();
//modifikasi utk intercept kalo request berupa captcha
if ($option == 'captcha') {
include('includes/captcha.php');
exit();
}
Dengan menambahkan kode diatas, kita dapat mengakses file captcha melalui index2.php?option=captcha. Selanjutnya ubah file component contact di components/com_contact/contact.html.php cari fungsi _writeEmailForm dan cari baris yg berisi:
<?php
if ( $params->get( 'email_copy' ) ) {
?>
<br />
<input type="checkbox" name="email_copy" value="1" />
<?php echo(_EMAIL_A_COPY);
}
?>
<br/><br/>
dibawah kode tersebut tambahkan kode berikut:
<?php echo 'Security Check. Please enter the code seen below:';?> <input type='text' name='spamstop' maxlength='5' size='5' class='inputbox' title=''> <img src='index2.php?option=captcha' border='0' title='' alt='' align='absmiddle' /> <br /><br />
kode diatas menambahkan input field untuk user agar mengisi verifikasi kode dan image yg digenerate dari captcha.php. Selanjutnya edit file components/com_contact.php. File ini adalah file yang akan memproses dan melakukan validasi form. Cari fungsi sendmail, tepat dibawah definisi global berikut:
function sendmail( $con_id, $option ) {
global $database, $Itemid;
global $mosConfig_sitename, $mosConfig_live_site, $mosConfig_mailfrom, $mosConfig_fromname;
tambahkan kode dibawah ini:
$spamstop = mosGetParam( $_POST, 'spamstop', '' );
if(isset($_SESSION['code']) && ($_SESSION['code'] != "") && ($_SESSION['code'] == $spamstop)) {
$captcha_success = 1; // success
} else {
$captcha_success = 2; // fail
}
kode diatas akan mengecek apakah kode yg dimasukkan user sama dengan kode yg digenerate oleh captcha.php. Terakhir, rubah kode berikut:
$query = "SELECT * FROM #__contact_details WHERE id='$con_id'";
$database->setQuery( $query );
$contact = $database->loadObjectList();
$default = $mosConfig_sitename.' '. _ENQUIRY;
$email = trim( mosGetParam( $_POST, 'email', '' ) );
$text = trim( mosGetParam( $_POST, 'text', '' ) );
$name = trim( mosGetParam( $_POST, 'name', '' ) );
$subject = trim( mosGetParam( $_POST, 'subject', $default ) );
$email_copy = mosGetParam( $_POST, 'email_copy', 0 );
if ( !$email || !$text || ( is_email( $email )==false ) ) {
echo "<script>alert (""._CONTACT_FORM_NC.""); window.history.go(-1);</script>";
exit(0);
}
$prefix = sprintf( _ENQUIRY_TEXT, $mosConfig_live_site );
$text = $prefix ."n". $name. ' <'. $email .'>' ."nn". stripslashes( $text );
mosMail( $email, $name , $contact[0]->email_to, $mosConfig_fromname .': '. $subject, $text );
if ( $email_copy ) {
$copy_text = sprintf( _COPY_TEXT, $contact[0]->name, $mosConfig_sitename );
$copy_text = $copy_text ."nn". $text .'';
$copy_subject = _COPY_SUBJECT . $subject;
mosMail( $mosConfig_mailfrom, $mosConfig_fromname, $email, $copy_subject, $copy_text );
}
?>
<script>
alert( "<?php echo _THANK_MESSAGE; ?>" );
document.location.href='<?php echo sefRelToAbs( 'index.php?option='. $option .'&Itemid='. $Itemid ); ?>';
</script>
menjadi:
if ($captcha_success == 1) {
$query = "SELECT * FROM #__contact_details WHERE id='$con_id'";
$database->setQuery( $query );
$contact = $database->loadObjectList();
$default = $mosConfig_sitename.' '. _ENQUIRY;
$email = trim( mosGetParam( $_POST, 'email', '' ) );
$text = trim( mosGetParam( $_POST, 'text', '' ) );
$name = trim( mosGetParam( $_POST, 'name', '' ) );
$subject = trim( mosGetParam( $_POST, 'subject', $default ) );
$email_copy = mosGetParam( $_POST, 'email_copy', 0 );
if ( !$email || !$text || ( is_email( $email )==false ) ) {
echo "<script>alert (""._CONTACT_FORM_NC.""); window.history.go(-1);</script>";
exit(0);
}
$prefix = sprintf( _ENQUIRY_TEXT, $mosConfig_live_site );
$text = $prefix ."n". $name. ' <'. $email .'>' ."nn". stripslashes( $text );
mosMail( $email, $name , $contact[0]->email_to, $mosConfig_fromname .': '. $subject, $text );
if ( $email_copy ) {
$copy_text = sprintf( _COPY_TEXT, $contact[0]->name, $mosConfig_sitename );
$copy_text = $copy_text ."nn". $text .'';
$copy_subject = _COPY_SUBJECT . $subject;
mosMail( $mosConfig_mailfrom, $mosConfig_fromname, $email, $copy_subject, $copy_text );
}
?>
<script>
alert( "<?php echo _THANK_MESSAGE; ?>" );
document.location.href='<?php echo sefRelToAbs( 'index.php?option='. $option .'&Itemid='. $Itemid ); ?>';
</script>
<?php
} else {
echo "<script> alert('Incorrect Security Code '); window.history.go(-1);</script>";
}
di kode tersebut kita mengecek, jika verifikasi sukses, jalankan kode2 sesudahnya, atau keluarkan javascript error message. That’s all! Kalo gak mau repot2, silahkan download file2 berikut ini dan replace file2 lama, jangan lupa di backup dulu file2 yg lama kale aja ada error
happy mambo!
modifikasi file com_contact
file captcha di folder includes
modifikasi file index2.php