From 51d83a3832cff4f9ef6cc108a03530aaca68fb2b Mon Sep 17 00:00:00 2001 From: Repellent Date: Fri, 6 Mar 2026 15:28:56 +0500 Subject: [PATCH] update ver 3.31 --- README.md | 6 +- class/editcaptcha.php | 105 ++++++++++++-- info.php | 2 +- lang/ru.txt | 22 +-- module.php | 37 +++-- res.php | 43 ------ templates/editcaptcha.tpl | 283 ++++++++++++++++++++++---------------- 7 files changed, 285 insertions(+), 213 deletions(-) delete mode 100644 res.php diff --git a/README.md b/README.md index d74c3be..85d5eed 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ ### editcaptcha -## Модуль Настройки captcha - -![Модуль Настройки captcha](https://gitget.ru/img/3.png "Модуль Настройки captcha") +## Модуль Настройки captcha v 3.31 ### Модуль позволяет настроить визуальный вывод captcha. @@ -12,6 +10,8 @@ ### Changelog: +06.03.2026 - Адаптация для версии ave.cms 3.31 ALT, добавлены настройки фона. + 02.09.2019 - Адаптация для версии ave.cms 3.26 12.10.2016 - начальная версия 1.0 \ No newline at end of file diff --git a/class/editcaptcha.php b/class/editcaptcha.php index e0935b9..6071388 100644 --- a/class/editcaptcha.php +++ b/class/editcaptcha.php @@ -1,19 +1,96 @@ -assign('captchas',$captcha); - $AVE_Template->assign('content', $AVE_Template->fetch($this->tpl_dir . 'editcaptcha.tpl')); - } -} -?> + public $tpl_dir; + + private function checkAccess() + { + return (defined('ACP') && check_permission('modules')); + } + + public function editCaptcha() + { + global $AVE_Template; + $config_file = BASE_DIR . '/lib/kcaptcha/kcaptcha_config.php'; + + // Дефолты + $allowed_symbols = "23456789abcdegikpqsvxyz"; + $length = "4,6"; + $fluctuation_amplitude = 8; + $white_noise_density = "1/30"; + $black_noise_density = "1/30"; + $no_spaces = true; + $background_color = array(255, 255, 255); + + if (file_exists($config_file)) { + include($config_file); + } + + // Преобразуем массив RGB в HEX для инпута в админке + $bg_hex = sprintf("#%02x%02x%02x", $background_color[0], $background_color[1], $background_color[2]); + + $AVE_Template->assign([ + 'allow_symbols' => $allowed_symbols, + 'count_symbols' => $length, + 'fluct_amplit' => $fluctuation_amplitude, + 'white_noise' => $white_noise_density, + 'black_noise' => $black_noise_density, + 'no_spaces' => ($no_spaces == true) ? 'true' : 'false', + 'bg_color' => $bg_hex + ]); + + $AVE_Template->assign('content', $AVE_Template->fetch($this->tpl_dir . 'editcaptcha.tpl')); + } + + public function saveCaptcha() + { + if (!$this->checkAccess()) exit("Access Denied"); + + $a = preg_replace('/[^a-z0-9]/i', '', $_POST['a'] ?? ''); + $b = preg_replace('/[^0-9,]/', '', $_POST['b'] ?? '4,6'); + $c = (int)($_POST['c'] ?? 8); + $d = strip_tags($_POST['d'] ?? '0'); + $e = strip_tags($_POST['e'] ?? '0'); + $f = ($_POST['f'] === 'true') ? 'true' : 'false'; + + // Обработка цвета фона (из #ffffff в array(255,255,255)) + $hex = $_POST['g'] ?? '#ffffff'; + list($r, $g, $b_rgb) = sscanf($hex, "#%02x%02x%02x"); + + $length_val = (strpos($b, ',') !== false) ? "mt_rand({$b})" : (int)$b; + + $text = ""; + + $file_path = BASE_DIR . "/lib/kcaptcha/kcaptcha_config.php"; + if (is_writable($file_path) || @chmod($file_path, 0666)) { + file_put_contents($file_path, $text); + echo "success"; + } else { + echo "Ошибка прав доступа к файлу конфига!"; + } + exit; + } +} \ No newline at end of file diff --git a/info.php b/info.php index 9c5c5e6..ea7b0fe 100644 --- a/info.php +++ b/info.php @@ -4,7 +4,7 @@ $module = array( 'ModuleSysName' => 'editcaptcha', - 'ModuleVersion' => '1.26.0', + 'ModuleVersion' => '3.31', 'ModuleAutor' => 'Repellent', 'ModuleCopyright' => '© 2007-' . date('Y') . ' AVE.cms', 'ModuleStatus' => 1, diff --git a/lang/ru.txt b/lang/ru.txt index cff98a2..ffe917d 100644 --- a/lang/ru.txt +++ b/lang/ru.txt @@ -1,6 +1,6 @@ [name] -MODULE_NAME = "Настройки captcha" -MODULE_DESCRIPTION = "Модуль позволяет настроить визуальный вывод captcha" +MODULE_NAME = "Настройки captcha" +MODULE_DESCRIPTION = "Модуль позволяет настроить визуальный вывод captcha" [admin] mod_name = "Управление модулем Настройки captcha" @@ -8,17 +8,21 @@ e_cap_title = "Настройки captcha" e_cap_infomod = "В данном разделе Вы можете настроить визуальный вывод captcha." e_cap_infomod1 = "Перед сохранением, обязательно заполните все поля !" e_cap_infomod2 = "Настройки captcha успешно изменены. Вы можете продолжать ими пользоваться. Для просмотра созданных настроек - нажмите Обновить код captcha" -e_cap_on = "captcha включена" -e_cap_of = "captcha выключена" -e_cap_on_info = "Функция ' Использовать captcha при входе в панель администратора включена. '" -e_cap_of_info = "Внимание: Функция ' Использовать captcha при входе в панель администратора выключена! '
Для включения captcha перейдите в раздел ' Системные настройки '" -e_cap_ref = "Обновить код
captcha" -e_cap_real = "Просмотр настроек
captcha" +e_cap_on = "captcha включена" +e_cap_of = "captcha выключена" +e_cap_on_info = "Функция ' Использовать captcha при входе в панель администратора включена. '" +e_cap_of_info = "Внимание: Функция ' Использовать captcha при входе в панель администратора выключена! '
Для включения captcha перейдите в раздел ' Системные настройки '" +e_cap_ref = "Обновить код
captcha" +e_cap_real = "Просмотр настроек
captcha" e_cap_allow_symbol = "Разрешенные символы (?)
23456789abcdegikpqsvxyz" e_cap_count_symbol = "Количество (?)
символов" e_cap_fluc_amplit = "Амплитуда (?)
изгиба ~" e_cap_white_noise = "Белый шум (?)
выкл=0 вкл=1/30" e_cap_black_noise = "Черный шум (?)
выкл=0 вкл=1/30" e_cap_spaces_symb = "Пробелы (?)
да=false нет=true" +e_cap_bg_color = "Цвет фона" e_cap_actions = "Действия" -e_cap_submit = "Применить" \ No newline at end of file +e_cap_submit = "Применить" +e_cap_field = "Заполните все поля!" +e_cap_err = "Ошибка:" +e_cap_err_crit = "Критическая ошибка сервера:" \ No newline at end of file diff --git a/module.php b/module.php index 8a9af47..39cf29d 100644 --- a/module.php +++ b/module.php @@ -2,40 +2,35 @@ /** * AVE.cms - Модуль Настройки captcha - * @autor Repellent + * @author Repellent * @package AVE.cms - * @subpackage editcaptcha - * @filesource */ if(!defined('BASE_DIR')) exit; - /** * Админка */ if (defined('ACP') && (isset($_REQUEST['moduleaction']))) { - // класс - require_once(BASE_DIR . '/modules/editcaptcha/class/editcaptcha.php'); + require_once(BASE_DIR . '/modules/editcaptcha/class/editcaptcha.php'); - $captcha = new ModuleEditcaptcha; + $captcha = new ModuleEditcaptcha; + $captcha->tpl_dir = BASE_DIR . '/modules/editcaptcha/templates/'; - // папка с шаблонами - $captcha->tpl_dir = BASE_DIR . '/modules/editcaptcha/templates/'; + // Загрузка языкового файла + $AVE_Template->config_load(BASE_DIR . '/modules/editcaptcha/lang/' . $_SESSION['admin_language'] . '.txt', 'admin'); + $AVE_Template->assign('config_vars', $AVE_Template->get_config_vars()); - // ленги - $AVE_Template->config_load(BASE_DIR . '/modules/editcaptcha/lang/' . $_SESSION['admin_language'] . '.txt', 'admin'); - $AVE_Template->assign('config_vars', $AVE_Template->get_config_vars()); + switch($_REQUEST['moduleaction']) + { + case '1': // Основная страница настроек + $captcha->editCaptcha(); + break; - - - switch($_REQUEST['moduleaction']) - { - case '1': - $captcha->editCaptcha(); - break; - - } + case 'save': // AJAX-сохранение настроек + $captcha->saveCaptcha(); + break; + } } ?> \ No newline at end of file diff --git a/res.php b/res.php deleted file mode 100644 index 9d5d2bd..0000000 --- a/res.php +++ /dev/null @@ -1,43 +0,0 @@ -'; -chmod(BASE_DIR . "/lib/kcaptcha/kcaptcha_config.php", 0755); -$fp = fopen(BASE_DIR . "/lib/kcaptcha/kcaptcha_config.php", "w"); -fwrite($fp, $text); -fclose($fp); -?> \ No newline at end of file diff --git a/templates/editcaptcha.tpl b/templates/editcaptcha.tpl index b2c6402..e8a62e7 100644 --- a/templates/editcaptcha.tpl +++ b/templates/editcaptcha.tpl @@ -1,132 +1,171 @@
-
{#mod_name#}
+
{#mod_name#}
-
-
    -
  • {#e_cap_infomod#}
  • -
  • {#e_cap_infomod1#}
  • -
-
+
+
    +
  • {#e_cap_infomod#}
  • +
  • {#e_cap_infomod1#}
  • +
+
-
-
{#e_cap_title#}
-
- {if ADMIN_CAPTCHA == true}{#e_cap_on#}{else}{#e_cap_of#}{/if} -
-
+
+
{#e_cap_title#}
+
+ {if ADMIN_CAPTCHA == true}{#e_cap_on#}{else}{#e_cap_of#}{/if} +
+
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{#e_cap_real#}{#e_cap_ref#}{#e_cap_allow_symbol#}{#e_cap_count_symbol#}{#e_cap_fluc_amplit#}{#e_cap_white_noise#}{#e_cap_black_noise#}{#e_cap_spaces_symb#}{#e_cap_actions#}


- 23456789abcdegikpqsvxyz -


- | 4,4 | - 4,5 | - 5,5 | - 5,6 | -


- | 0 | - 1 | - 2 | - 3 | - 4 | - 5 | - 6 | - 7 | - 8 | -


- | 0 | - 1/6 | -


- | 0 | - 1/30 | -


- | false | - true | -
- {#e_cap_submit#} -
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{#e_cap_real#}{#e_cap_ref#}{#e_cap_allow_symbol#}{#e_cap_count_symbol#}{#e_cap_fluc_amplit#}{#e_cap_white_noise#}{#e_cap_black_noise#}{#e_cap_spaces_symb#}{#e_cap_bg_color#}{#e_cap_actions#}
+

+ 23456789abcdegikpqsvxyz +
+

+ | 4,4 | + 4,5 | + 5,5 | + 5,6 | +
+

+ {section name=foo start=0 loop=9 step=1} + {$smarty.section.foo.index} | + {/section} +
+

+ | 0 | + 1/6 | +
+

+ | 0 | + 1/30 | +
+

+ | false | + true | +
+

+ HEX +
+ {#e_cap_submit#} +
- \ No newline at end of file