95 lines
2.2 KiB
PHP
95 lines
2.2 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace addons\clicaptcha;
|
||
|
|
||
|
use think\Addons;
|
||
|
use think\Validate;
|
||
|
|
||
|
/**
|
||
|
* 全新点选验证码插件
|
||
|
*/
|
||
|
class Clicaptcha extends Addons
|
||
|
{
|
||
|
|
||
|
/**
|
||
|
* 插件安装方法
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function install()
|
||
|
{
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 插件卸载方法
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function uninstall()
|
||
|
{
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 插件启用方法
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function enable()
|
||
|
{
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 插件禁用方法
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function disable()
|
||
|
{
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 自定义captcha验证事件
|
||
|
*/
|
||
|
public function actionBegin()
|
||
|
{
|
||
|
$module = strtolower(request()->module());
|
||
|
if (in_array($module, ['index', 'admin', 'api', 'store'])) {
|
||
|
Validate::extend('captcha', function ($value, $id = "") {
|
||
|
$clicaptcha = new \addons\clicaptcha\library\Clicaptcha();
|
||
|
$value = $value ? $value : request()->post("captcha");
|
||
|
if (!$clicaptcha->check($value, true)) {
|
||
|
return false;
|
||
|
};
|
||
|
return true;
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 脚本替换
|
||
|
*/
|
||
|
public function viewFilter(&$content)
|
||
|
{
|
||
|
$module = strtolower(request()->module());
|
||
|
if (($module == 'index' && config('fastadmin.user_register_captcha') == 'text') || ($module == 'admin' && config('fastadmin.login_captcha')) || ($module == 'store' && config('fastadmin.login_captcha'))) {
|
||
|
$content = preg_replace_callback('/<!--@CaptchaBegin-->([\s\S]*?)<!--@CaptchaEnd-->/i', function ($matches) {
|
||
|
return '<!--@CaptchaBegin--><div><input type="hidden" name="captcha" /></div><!--@CaptchaEnd-->';
|
||
|
}, $content);
|
||
|
|
||
|
if (preg_match('/<!--@CaptchaBegin-->([\s\S]*?)<!--@CaptchaEnd-->/i', $content)) {
|
||
|
$content = preg_replace('/<button(?![^>]*\s+disabled)(?=[^>]*\stype="submit")(.*?)(>)/', '<button$1 disabled$2', $content);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function captchaMode()
|
||
|
{
|
||
|
return 'clicaptcha';
|
||
|
}
|
||
|
|
||
|
}
|