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
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');
-
}
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" />
-
}
-
?>
-
<br/><br/>
dibawah kode tersebut tambahkan kode berikut:
-
<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:
tambahkan kode dibawah ini:
-
$spamstop = mosGetParam( $_POST, '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_copy = mosGetParam( $_POST, 'email_copy', 0 );
-
-
if ( !$email || !$text || ( is_email( $email )==false ) ) {
-
}
-
-
mosMail( $email, $name , $contact[0]->email_to, $mosConfig_fromname .': '. $subject, $text );
-
-
if ( $email_copy ) {
-
$copy_text = $copy_text ."\n\n". $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_copy = mosGetParam( $_POST, 'email_copy', 0 );
-
-
if ( !$email || !$text || ( is_email( $email )==false ) ) {
-
}
-
-
mosMail( $email, $name , $contact[0]->email_to, $mosConfig_fromname .': '. $subject, $text );
-
-
if ( $email_copy ) {
-
$copy_text = $copy_text ."\n\n". $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





Thanks euy atas tutsnya.
BTW, trik ini mampu menangkap SPAM yang tanpa link ga, bli? (yang ternyata tidak mampu ditangkap WP)
Oh ya, yang kedua, kenapa mos_Confid_absolute_path nya harus merubah folder?
Thx
(*asik euy nanya langsung ama cordev nya*)
[quote comment="226"]Thanks euy atas tutsnya.
BTW, trik ini mampu menangkap SPAM yang tanpa link ga, bli? (yang ternyata tidak mampu ditangkap WP)
Oh ya, yang kedua, kenapa mos_Confid_absolute_path nya harus merubah folder?
[/quote]
kalo SPAM tanpa link, selama itu robot, AFAIK masih bisa ditangkal. kenapa harus rubah folder include font? biar enak aja dan keliatan seragam
Wah ini yang lagi aku cari2
Soale banyak SPAM yang ‘rajin’ masuk ke website-ku
Oya salam kenal ya mas…
[quote comment="234"]Wah ini yang lagi aku cari2
Soale banyak SPAM yang ‘rajin’ masuk ke website-ku
Oya salam kenal ya mas…
:D[/quote]
met kenal juga, mudah2an spam-nya berkurang :D, saya doain..
mas, mo nanya…
kalo mo ganti gambar header atau gambar lain yg ada di template defaulnyta bisa gak lewat administrator? caranya? atau harus langsung ganti filenya aja lewat cpanel?
thx….
[quote comment="242"]caranya? atau harus langsung ganti filenya aja lewat cpanel?
thx….[/quote]
lewat cpanel aja
sip… ganti logonya dah bisa…
terus, kalo ada peringatan seperti ini:
Joomla! RG_EMULATION setting is `ON` instead of `OFF` in file globals.php
maksudnya apa? dan cara ngilanginnya gimana?
thx….
[quote comment="247"]
maksudnya apa? dan cara ngilanginnya gimana?
thx….[/quote]
di global configuration, Register Globals Emulation.
mas,,,bagaimana dengan mambo versi 4.6.1
apakah bisa dengan mengupdate file2 diatas ?
salam kenal
rizky
[quote comment="260"]mas,,,bagaimana dengan mambo versi 4.6.1
apakah bisa dengan mengupdate file2 diatas ?
salam kenal
[/quote]
met kenal juga. kan 4.6 udah ada captcha by default