Dernière mise à jour : 01/03/2023 à 10h25
Table des matières
Nous allons voir comment en créer un.
Création de la base du module du Captcha
Premièrement, il faut mettre en place la Structure de base du module.
Création de la classe principale de votre Captcha
Créer une classe avec le nom de votre Captcha dans le dossier phpboost de votre module. Cette classe doit être une classe fille de la classe Captcha.
Celle-ci doit comprendre à minima les fonctions suivantes :
-
public function get_name()
: retourne le nom du Captcha. -
public function is_available()
: permet de réaliser des tests afin de déterminer si le Captcha est disponible, utile s'il utilise une librairie distante par exemple. Mettretrue
s'il n'y a pas besoin de faire de test de disponibilité. -
public function is_valid()
: permet de vérifier la validité du Captcha. -
public function display()
: permet d'afficher le Captcha.
Exemple :
Code PHP :
<?php /** * @copyright © 2005-2022 PHPBoost * @license https://www.gnu.org/licenses/gpl-3.0.html GNU/GPL-3.0 * @author Prénom NOM <pseudonyme@site.ext> * @version PHPBoost 6.0 - last update: 2022 11 18 * @since PHPBoost 6.0 - 2022 11 18 * @contributor Prénom NOM <pseudonyme@site.ext> */ class QuestionCaptcha extends Captcha { private static $questions; public static function __static() { self::$questions = QuestionCaptchaConfig::load()->get_questions(); } public function get_name() { return 'QuestionCaptcha'; } public function is_available() { return true; } public function is_valid() { if (!$this->is_available() || AppContext::get_current_user()->check_level(User::MEMBER_LEVEL)) { return true; } $answer = AppContext::get_request()->get_value($this->get_html_id(), ''); $question_id = AppContext::get_request()->get_int($this->get_html_id() . '_question_id', 0); if (!empty($question_id)) { $question = new QuestionCaptchaQuestion(); $question->set_properties(self::$questions[$question_id]); return in_array(trim(strtolower($answer)), $question->get_formated_answers()); } return false; } public function display() { $question_id = array_rand(self::$questions); //Question aléatoire $question = new QuestionCaptchaQuestion(); $question->set_properties(self::$questions[$question_id]); $tpl = new FileTemplate('QuestionCaptcha/QuestionCaptcha.tpl'); $tpl->put_all(array( 'QUESTION_ID' => $question_id, 'QUESTION' => $question->get_label(), 'HTML_ID' => $this->get_html_id() )); return $tpl->render(); } } ?>
ExtensionPointProvider
L'ExtensionPointProvider est à remplir comme tout autre module, il faut en plus y indiquer la fonction
captcha()qui va retourner la classe principale de votre module.
Exemple :
Code PHP :
<?php /** * @copyright © 2005-2022 PHPBoost * @license https://www.gnu.org/licenses/gpl-3.0.html GNU/GPL-3.0 * @author Prénom NOM <pseudonyme@site.ext> * @version PHPBoost 6.0 - last update: 2022 11 18 * @since PHPBoost 6.0 - 2022 11 18 * @contributor Prénom NOM <pseudonyme@site.ext> */ class QuestionCaptchaExtensionPointProvider extends ExtensionPointProvider { public function __construct() { parent::__construct('QuestionCaptcha'); } public function captcha() { return new QuestionCaptcha(); } public function css_files() { $module_css_files = new ModuleCssFiles(); $module_css_files->adding_running_module_displayed_file('QuestionCaptcha.css'); return $module_css_files; } public function url_mappings() { return new UrlMappings(array(new DispatcherUrlMapping('/QuestionCaptcha/index.php'))); } } ?>
Tout le reste fonctionne comme tout autre module pour l'utilisation des fichiers css, la création de templates, etc...