Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Entity/CaptchaQuestion.php
<?php

namespace XF\Entity;

use
XF\Mvc\Entity\Entity;
use
XF\Mvc\Entity\Structure;

use function
in_array, strval;

/**
 * COLUMNS
 * @property int|null $captcha_question_id
 * @property string $question
 * @property array $answers
 * @property bool $active
 *
 * GETTERS
 * @property string $hash
 */
class CaptchaQuestion extends Entity
{
    public function
isCorrect($answer)
    {
        return
in_array(strtolower($answer), array_map('strtolower', $this->answers), true);
    }

    protected function
insertHash()
    {
       
$hash = sha1(
           
'Question'
           
. $this->captcha_question_id
           
. $this->app()->config('globalSalt')
            .
uniqid(microtime(), true)
        );

       
$captchaLog = $this->_em->create('XF:CaptchaLog');
       
$captchaLog->bulkSet([
           
'hash' => $hash,
           
'captcha_type' => 'Question',
           
'captcha_data' => $this->captcha_question_id,
           
'captcha_date' => time()
        ]);
       
$captchaLog->save();

        return
$captchaLog;
    }

   
/**
     * @return string
     */
   
public function getHash()
    {
        return
$this->insertHash()->hash;
    }

    public function
verifyAnswers(&$answers)
    {
       
$answers = array_filter($answers, function($answer)
        {
            return
trim(strval($answer)) !== '';
        });
        if (!
$answers)
        {
           
$this->error(\XF::phrase('please_provide_at_least_one_answer'), 'answers');
            return
false;
        }
        return
true;
    }

    public static function
getStructure(Structure $structure)
    {
       
$structure->table = 'xf_captcha_question';
       
$structure->shortName = 'XF:CaptchaQuestion';
       
$structure->primaryKey = 'captcha_question_id';
       
$structure->columns = [
           
'captcha_question_id' => ['type' => self::UINT, 'autoIncrement' => true, 'nullable' => true],
           
'question' => ['type' => self::STR, 'maxLength' => 250, 'required' => true],
           
'answers' => ['type' => self::JSON_ARRAY, 'required' => true],
           
'active' => ['type' => self::BOOL, 'default' => true]
        ];
       
$structure->getters = [
           
'hash' => true
       
];
       
$structure->relations = [];

        return
$structure;
    }
}