OFF-SOFT.net

ウェブやソフトウェアに関するサポート&情報サイトです。サイト構築からソフトウェアの作成、利用まであなたの助けになるかも・・・・しれません。たぶん・・。


概要:

Joomla! の標準でついているメールフォームを使っていると、だんだん、スパムメールが増えてきます。
セッションのチェック機能をONにしていても、少しずつ、増えてきます。

特に海外向けの記事などがある場合は、顕著です。

さて、このような場合、通常は、メールフォーム(contactで検索すると結構あります)のエクステンションなどを用いますが、
今回は、yvcommentでも使用したキャプチャーであるBigo Captcha extensionを使ったデフォルトのメールフォームでの利用方法について、具体的に記述したいと思います。

実際に、Bigo Captchaを利用できるメールフォームのエクステンションがあります。例えば、ALFcontact です。
ただ、ALFcontact は、最近、セキュリティホールが見つかっており、ちょっと、利用を控えたくなります。

それも、あいまって、今回は、デフォルトのメールフォームに追加してみたいと思います。

では、早速、試してみましょう。


もっと、Joomla!やPHP、Apacheについて詳しく知りたい方は、以下の本なども良いと思います。
本から学ぶことは多いと思います。ネットだけでは判らない様々な事に気づかされます。





Joomla!Pro Book オープンソースCMS導入&カスタマイズガイド





初めてのPHP & MySQL 第2版





Apacheハンドブック

変更の概略

以降は、Bigo Captcha がインストールされているものとして、話を始めます。

また、ここで、使用したJoomla!のバージョンは、1.5.14です。
もし、異なるバージョンの場合は、phpのソースコードの行番号は、異なる場合がありますので、そのバージョン毎のソースコードで、前後関係を確認して、作業を行ってください。

では、早速、始めましょう。

変更するphpのソースコードは、以下の3つです。
ただし、言語ファイルで、コメントなどを変更したい場合は、以下の言語ファイルの変更・追加を行うことで対応できます。
(ここでは、そこまでの説明をしません。)

administrator/language/ja-JP/ja-JP.com_contact.ini
administrator/language/en-GB/en-GB.com_contact.ini
language/ja-JP/ja-JP.com_contact.ini
language/en-GB/en-GB.com_contact.ini

  • administrator/components/com_contact/contact_items.xml
    - ここでは、コンポーネントのメールフォームのパラメータにキャプチャーを使用するか否かのパラメータを追加します。
  • components/com_contact/controller.php
    - ここでは、キャプチャー画像と、入力情報が一致するか否かの判断処理、キャプチャー画像を表示する処理を追加します。
  • components/com_contact/views/contact/tmpl/default_form.php
    - ここでは、メールフォームにキャプチャー画像を表示する処理を追加します。

変更してみましょう
[administrator/components/com_contact/contact_items.xml]

87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
	<params group="email">
		<param name="show_email_form" type="radio" default="1" label="Email Form" description="Show/Hide the email to form">
			<option value="0">Hide</option>
			<option value="1">Show</option>
		</param>
		<param name="email_description" type="text" size="30" default="" label="Description text" description="PARAMEMAILDESCTEXT" />
		<param name="show_email_copy" type="radio" default="1" label="Email Copy" description="PARAMEMAILCOPY">
			<option value="0">Hide</option>
			<option value="1">Show</option>
		</param>
		<param name="use_captcha" type="radio" default="1" label="Use Captcha" description="Enable Captcha verification">
			<option value="0">No</option>
			<option value="1">Yes</option>
		</param>
		<param name="banned_email" type="textarea" default="" label="BANNED EMAIL LABEL" rows="3" cols="30" description="BANNED EMAIL DESC" />
		<param name="banned_subject" type="textarea" default="" label="BANNED SUBJECT LABEL" rows="3" cols="30" description="BANNED SUBJECT DESC" />
		<param name="banned_text" type="textarea" default="" label="BANNED TEXT LABEL" rows="3" cols="30" description="BANNED TEXT DESC" />
	</params>

ここで、追加するのは、97行目 - 100行目までです。

use_captcha というパラメータを追加しています。

この変更を行うと、以下のようにメールフォームのパラメータが追加されます。








[components/com_contact/controller.php]

このソースコードでは、大きく2か所追加があります。

117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
		if (!$email || !$body || (JMailHelper::isEmailAddress($email) == false))
		{
			$this-->setError(JText::_('CONTACT_FORM_NC'));
			$this-->display();
			return false;
		}
		/**
		Captcha
		*/
		if (!$this-->_checkCaptcha()) {
			JError::raiseWarning("666","You have entered the wrong CAPTCHA sequence. Please try again.");
			$this-->display();
			return false;
		}
 
		// Contact plugins
		JPluginHelper::importPlugin( 'contact' );
		$dispatcher	=& JDispatcher::getInstance();

ここで、追加するのは、124行目 - 131行目までです。

ここでは、メールフォームの入力情報をチェックしている箇所で、キャプチャー画像と入力情報が一致しているかチェックしています。

128行目が、入力情報に誤りがあった時のエラーメッセージです。文言を変更したい場合は、ここの文字列を変更すると良いでしょう。

396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
	/**
	@author bigo
	@date januray, 2008
	*/
	function displaycaptcha() {
		global $mainframe;
		$contactId = JRequest::getVar('contact_id', 0, '', 'int');
		// load the contact details
		$model    = &$this-->getModel('contact');
		$qOptions['id'] = $contactId;
		$contact        = $model-->getContact( $qOptions );
		$params = new JParameter( $contact-->params );
		if ($params-->get('use_captcha')) {
			$Ok = null;
			$mainframe-->triggerEvent('onCaptcha_Display', array($Ok));
			if (!$Ok) {
				echo "<br/>Error displaying Captcha<br/>";
			}
		}
	}
 
	function _checkCaptcha() {
		global $mainframe;
		$contactId = JRequest::getVar('id', 0, '', 'int');
		// load the contact details
		$model = &$this-->getModel('contact');
		$qOptions['id'] = $contactId;
		$contact = $model-->getContact( $qOptions );
		$params = new JParameter( $contact-->params );
		// not using captcha!
		if (!$params-->get('use_captcha')) {
			return true;
		}
		$return = false;
		$word = JRequest::getVar('word', false, '', 'CMD');
		$mainframe-->triggerEvent('onCaptcha_confirm', array($word, &$return));
		if ($return) {
			return true;
		} else return false;
	}
}

ここで、追加するのは、396行目 - 435行目までです。

ここでは、このクラスの末尾に、2つのメソッドを追加しています。
一つは、displaycaptcha() キャプチャー画像を表示するメソッドです。
もう一つは、_checkCaptcha() キャプチャー画像と入力情報が一致しているかチェックするメソッドです。

[components/com_contact/views/contact/tmpl/default_form.php]
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
			<?php if ($this-->contact-->params-->get( 'show_email_copy' )) : ?>
			<br />
				<input type="checkbox" name="email_copy" id="contact_email_copy" value="1"  />
				<label for="contact_email_copy">
					<?php echo JText::_( 'EMAIL_A_COPY' ); ?>
				</label>
			<?php endif; ?>
			<?php if ($this-->params-->get('use_captcha')) { ?>
			 <!-- Bigo Captcha -->
			 <br clear=left />
			 <img src="/index.php?option=com_contact&task=displaycaptcha&contact_id=<?php echo $this-->contact-->id; ?>">
			 <br clear=left />
			 <?php echo JText::_( 'Verification' ); ?> : <input type="text" name="word" />
			 <br />
			<?php } ?>

ここで、追加するのは、64行目 - 71行目までです。

ここでは、メールフォームにキャプチャー画像の表示を行っています。

この変更を行うと、以下のようにメールフォームにBigo Captcha の画像が表示されます。


ここでは、69行目の"Verification"の文言を"絵の英数字を入力してください"としています。

これで完了です。

実際に動作させて見て下さい。キャプチャーの入力情報に誤りがあるとエラーが表示されるでしょう。
また、この時、入力情報をすべて消去してしまいます。これが良いかどうかは、多少意見が分かれるところでしょう。

いろいろとご自身でカスタマイズされるのも良いと思います。



ブックマークへ追加: はてなdel.icio.usLivedoor ClipYahoo!FC2Nifty ClipPOOKMARK. AirlinesBuzzurl(バザール)Choixnewsing

Trackback URL

このコメントは管理人から承認された後、表示されます。


コメント

コメントをどうぞ











タグクラウド

リンク

このサイトは?

ウェブやソフトウェアに関するサポート&情報サイトです。サイト構築からソフトウェアの作成、利用まであなたの助けになるかも・・・・しれません。たぶん・・。

ブックマークへ追加

はてなdel.icio.usLivedoor ClipYahoo!FC2Nifty ClipPOOKMARK. AirlinesBuzzurl(バザール)Choixnewsing