6b1765d098082cea36109faf401329e22e3c8344
[toast/cookiecaptcha.git] / HTMLCaptchaField.php
1 <?php
2 /**
3  * HTMLFormField for inserting Captchas into a form.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  * http://www.gnu.org/copyleft/gpl.html
19  *
20  * @class
21  */
22 class HTMLCaptchaField extends HTMLFormField {
23
24         /**
25          * @var Captcha
26          */
27         private $captcha;
28
29         public $prefix = '';
30
31         /**
32          * @var Bool|Array
33          */
34         private $validationResult;
35
36         public function __construct( $params ) {
37                 parent::__construct( $params );
38
39                 // For differentiating the type of form, mainly
40                 if ( isset( $params['prefix'] ) ) {
41                         $this->prefix = $params['prefix'];
42                 }
43         }
44
45         /**
46          * Get the captcha body.  Don't include any of the surrounding table cells/rows
47          *
48          * @param  $value String
49          * @return String
50          */
51         public function getInputHTML( $value ) {
52                 # TODO
53         }
54
55         public function validate( $data, $alldata ) {
56                 // We sent back the exists status of the captcha before.  If it *doesn't* exist
57                 // we actually want to validate this as true, because we don't want an angry red
58                 // error message, just for the user to put the captcha in again
59                 if ( $data === false ) {
60                         return true;
61                 }
62
63
64         }
65
66         /**
67          * @param  $request WebRequest
68          * @return void
69          */
70         public function loadDataFromRequest( $request ) {
71                 $this->captcha = Captcha::factory();
72                 $this->captcha->loadFromRequest( $request, $this );
73                 if ( !$this->captcha->exists() ) {
74                         // The captcha doesn't exist; probably because it's already been used and
75                         // then deleted for security.  Load the field up with a new captcha which
76                         // will be shown to the user when the validation of said new object fails
77                         $this->captcha = Captcha::newRandom();
78                 }
79
80                 // This will be useful as the difference between "the captcha doesn't exist" and
81                 // "you answered the captcha wrongly"
82                 return $this->captcha->exists();
83         }
84 }