2007-08-18 04:33:28 +02:00
|
|
|
<?php
|
|
|
|
/**
|
2008-09-02 00:57:08 +02:00
|
|
|
* Tools for adding an optional Maths protection question to a form.
|
|
|
|
*
|
2008-02-25 03:10:37 +01:00
|
|
|
* @package cms
|
|
|
|
* @subpackage comments
|
2007-08-18 04:33:28 +02:00
|
|
|
*/
|
2008-09-02 00:57:08 +02:00
|
|
|
|
2007-08-18 04:33:28 +02:00
|
|
|
class MathSpamProtection {
|
|
|
|
|
|
|
|
private static $mathProtection = false;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates the question from random variables, which are also saved to the session.
|
2008-09-02 00:57:08 +02:00
|
|
|
* @return String
|
2007-08-18 04:33:28 +02:00
|
|
|
*/
|
|
|
|
static function getMathQuestion(){
|
|
|
|
if(!Session::get("mathQuestionV1")&&!Session::get("mathQuestionV2")){
|
|
|
|
$v1 = rand(1,9);
|
|
|
|
$v2 = rand(1,9);
|
|
|
|
Session::set("mathQuestionV1",$v1);
|
|
|
|
Session::set("mathQuestionV2",$v2);
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
$v1 = Session::get("mathQuestionV1");
|
|
|
|
$v2 = Session::get("mathQuestionV2");
|
|
|
|
}
|
|
|
|
return "What is ".MathSpamProtection::digitToWord($v1)." plus ".MathSpamProtection::digitToWord($v2)."?";
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks the given answer if it matches the addition of the saved session variables. Users can answer using words or digits.
|
|
|
|
*/
|
|
|
|
static function correctAnswer($answer){
|
|
|
|
$v1 = Session::get("mathQuestionV1");
|
|
|
|
$v2 = Session::get("mathQuestionV2");
|
|
|
|
|
|
|
|
Session::clear('mathQuestionV1');
|
|
|
|
Session::clear('mathQuestionV2');
|
|
|
|
|
|
|
|
if(MathSpamProtection::digitToWord($v1 + $v2) == $answer || ($v1 + $v2) == $answer){
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Helper method for converting digits to their equivelant english words
|
|
|
|
*/
|
|
|
|
static function digitToWord($num){
|
|
|
|
$numbers = array("zero","one","two","three","four","five","six","seven","eight","nine",
|
|
|
|
"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen");
|
|
|
|
if($num < 0){
|
|
|
|
return "minus ".($numbers[-1*$num]);
|
|
|
|
}
|
|
|
|
//TODO: add checking or return null for bad value??
|
|
|
|
return $numbers[$num];
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-02 07:13:32 +02:00
|
|
|
static function isEnabled() {
|
|
|
|
return self::$mathProtection;
|
|
|
|
}
|
|
|
|
|
|
|
|
static function setEnabled($math = true) {
|
|
|
|
self::$mathProtection = $math;
|
|
|
|
}
|
|
|
|
|
2007-08-18 04:33:28 +02:00
|
|
|
}
|
|
|
|
?>
|