Completed
Pull Request — master (#109)
by Patrick
10:35
created

class.FlipsideCAPTCHA.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
/**
3
 * FlipsideCAPTCHA class
4
 *
5
 * This file describes the FlipsideCAPTCHA class
6
 *
7
 * PHP version 5 and 7
8
 *
9
 * @author Patrick Boyd / [email protected]
10
 * @copyright Copyright (c) 2015, Austin Artistic Reconstruction
11
 * @license http://www.apache.org/licenses/ Apache 2.0 License
12
 */
13
14
/**
15
 * Allow other classes to be loaded as needed
16
 */
17
require_once('Autoload.php');
18
19
/**
20
 * A class to represent a Completely Automated Public Turing test to tell Computers and Humans Apart
21
 */
22
class FlipsideCAPTCHA implements JsonSerializable
23
{
24
    /**
25
     * The ID of the CAPTCHA in the DB
26
     */
27
    public  $random_id;
28
    /**
29
     * An array of all valid IDs in the DB
30
     */
31
    private $validIDs;
32
33
    public  $wwwUrl;
34
35
    /**
36
     * Get all valid CAPTCH IDs
37
     *
38
     * @return array An array of captch IDs
39
     *
40
     * @deprecated 2.1 Will be removed in favor of self::getValidCaptchaIDs()
41
     */
42
    public static function get_valid_captcha_ids()
43
    {
44
        return self::getValidCaptchaIDs();
45
    }
46
47
    /**
48
     * Get all valid CAPTCH IDs
49
     *
50
     * @return array An array of captch IDs
51
     */
52
    public static function getValidCaptchaIDs()
53
    {
54
        $datatable = DataSetFactory::getDataTableByNames('profiles', 'captcha');
55
        $data = $datatable->read(false, array('id'));
56
        $count = count($data);
57
        for($i = 0; $i < $count; $i++)
58
        {
59
            $data[$i] = $data[$i]['id'];
60
        }
61
        return $data;
62
    }
63
64
    /**
65
     * Get an array of all CAPTCHAs
66
     *
67
     * @return array An array of captchas
68
     *
69
     * @deprecated 2.1 Will be removed in favor of self::getAll()
70
     */
71
    public static function get_all()
72
    {
73
        return self::getAll();
74
    }
75
76
    /**
77
     * Get an array of all CAPTCHAs
78
     *
79
     * @return array An array of captchas
80
     */
81
    public static function getAll()
82
    {
83
        $res = array();
84
        $ids = self::getValidCaptchaIDs();
85
        $count = count($ids);
86
        for($i = 0; $i < $count; $i++)
87
        {
88
            $captcha = new FlipsideCAPTCHA();
89
            $captcha->random_id = $ids[$i];
90
            array_push($res, $captcha);
91
        }
92
        return $res;
93
    }
94
95
    public static function save_new_captcha($question, $hint, $answer)
96
    {
97
        $dataset = DataSetFactory::getDataSetByName('profiles');
98
        $datatable = $dataset['captcha'];
99
        return $datatable->create(array('question'=>$question, 'hint'=>$hint, 'answer'=>$answer));
100
    }
101
102
    public function __construct()
103
    {
104
        $this->validIDs = FlipsideCAPTCHA::get_valid_captcha_ids();
0 ignored issues
show
Deprecated Code introduced by
The method FlipsideCAPTCHA::get_valid_captcha_ids() has been deprecated with message: 2.1 Will be removed in favor of self::getValidCaptchaIDs()

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
105
        $this->random_id = mt_rand(0, count($this->validIDs) - 1);
106
        $this->random_id = $this->validIDs[$this->random_id];
107
        $settings = \Settings::getInstance();
108
        $this->wwwUrl = $settings->getGlobalSetting('www_url', 'https://www.burningflipside.com');
109
    }
110
111
    protected function getCaptchField($fieldName)
112
    {
113
        $dataset = DataSetFactory::getDataSetByName('profiles');
114
        $datatable = $dataset['captcha'];
115
        $data = $datatable->read(new \Data\Filter('id eq '.$this->random_id), array($fieldName));
116
        if(empty($data))
117
        {
118
            return false;
119
        }
120
        return $data[0][$fieldName];
121
    }
122
123
    public function get_question()
124
    {
125
        return $this->getCaptchField('question');
126
    }
127
128
    public function get_hint()
129
    {
130
        return $this->getCaptchField('hint');
131
    }
132
133
    private function get_answer()
134
    {
135
        return $this->getCaptchField('answer');
136
    }
137
138
    public function is_answer_right($answer)
139
    {
140
        return strcasecmp($this->get_answer(), $answer) === 0;
141
    }
142
143
    public function draw_captcha($explination = true, $return = false, $ownForm = false)
144
    {
145
        $string = '';
146
147
        if($ownForm)
148
        {
149
            $string .= '<form id="flipcaptcha" name="flipcaptcha">';
150
        }
151
152
        $string .= '<label for="captcha" class="col-sm-2 control-label">'.$this->get_question().'</label><div class="col-sm-10"><input class="form-control" type="text" id="captcha" name="captcha" placeholder="'.$this->get_hint().'" required/></div>';
153
        if($ownForm)
154
        {
155
            $string .= '</form>';
156
        }
157
        if($explination)
158
        {
159
            $string .= '<div class="col-sm-10">The answer to this question may be found in the Burning Flipside Survival Guide. It may be found <a href="'.$this->wwwUrl.'/sg">here</a>.</div>';
160
        }
161
        
162
        if(!$return)
163
        {
164
            echo $string;
165
        }
166
        return $string;
167
    }
168
169
    public function self_json_encode()
170
    {
171
        return json_encode($this->jsonSerialize());
172
    }
173
174
    public function jsonSerialize()
175
    {
176
        $res = array();
177
        $res['id'] = $this->random_id;
178
        $res['question'] = $this->get_question();
179
        $res['hint'] = $this->get_hint();
180
        $res['answer'] = $this->get_answer();
181
        return $res;
182
    }
183
}
184
/* vim: set tabstop=4 shiftwidth=4 expandtab: */
185