diff --git a/class/comment.php b/class/comment.php index 03b37d0..69e9f88 100644 --- a/class/comment.php +++ b/class/comment.php @@ -102,7 +102,7 @@ class Comment /** * Настройки времени (в секундах) */ - public $conf_edit_time = 60; // 10 минут на редактирование/удаление + public $conf_edit_time = 600; // 10 минут на редактирование/удаление public $conf_cookie_life = 30; // 30 дней жизни куки для анонима private $_anon_cookie_name = 'ave_anon_comment_key'; @@ -127,38 +127,41 @@ class Comment } } - /** - * Метод, предназначенный для получения основных настроек модуля,которые задаются в Панели управления. - * - * @param string $param название параметра - * @return mixed значение настройки - */ - function _commentSettingsGet($param = '') - { - global $AVE_DB; +function _commentSettingsGet($param = '') +{ + global $AVE_DB; - // Определяем статическую переменную, которая будет хранить полученные настройки на протяжении всего - // срока жизни объекта. - static $settings = null; + static $settings = null; - // Если переменная $settings еще не имеет значений, тогда выполняем запрос к БД на получение данных - if ($settings === null) - { - $settings = $AVE_DB->Query(" - SELECT * - FROM " . PREFIX . "_module_comments - WHERE Id = '" . $this->_config_id . "' - ")->FetchAssocArray(); - } + if ($settings === null) + { + $settings = $AVE_DB->Query(" + SELECT * + FROM " . PREFIX . "_module_comments + WHERE Id = '" . $this->_config_id . "' + ")->FetchAssocArray(); - if ($param == '') - return $settings; + // ОБНОВЛЯЕМ ПЕРЕМЕННЫЕ КЛАССА ЗНАЧЕНИЯМИ ИЗ БАЗЫ + if ($settings) { + // Если в базе есть настройка, перезаписываем стандартные 60 секунд + if (isset($settings['comment_edit_time'])) { + $this->conf_edit_time = (int)$settings['comment_edit_time']; + } + + // Если в базе есть настройка куки, перезаписываем стандартные 30 дней + if (isset($settings['comment_cookie_life'])) { + $this->conf_cookie_life = (int)$settings['comment_cookie_life']; + } + } + } - // В противном случае возвращаем уже имеющиеся значения - return (isset($settings[$param]) - ? $settings[$param] - : null); - } + if ($param == '') + return $settings; + + return (isset($settings[$param]) + ? $settings[$param] + : null); +} /** * Метод, предназначенный для получения количества комментариев для определенного документа. @@ -1229,9 +1232,11 @@ function commentPostDelete($comment_id) */ function commentAdminSettingsEdit($tpl_dir) { - global $AVE_DB, $AVE_Template, $sess; // Добавили $sess в global для редиректа + global $AVE_DB, $AVE_Template, $sess; $request_sub = $_REQUEST['sub'] ?? ''; + + // Получаем основные настройки $post_max_chars = $_POST['comment_max_chars'] ?? 0; $post_user_groups = $_POST['comment_user_groups'] ?? array(); $post_user_groups_read = $_POST['comment_user_groups_read'] ?? array(); @@ -1242,6 +1247,7 @@ function commentAdminSettingsEdit($tpl_dir) $post_use_page_nav = $_POST['comment_use_page_nav'] ?? 0; $post_page_nav_count = $_POST['comment_page_nav_count'] ?? 0; + // Настройки рейтинга и файлов $post_allow_files = $_POST['comment_allow_files'] ?? 0; $post_allow_files_anon = $_POST['comment_allow_files_anon'] ?? 0; $post_rating_type = $_POST['comment_rating_type'] ?? 0; @@ -1249,6 +1255,11 @@ function commentAdminSettingsEdit($tpl_dir) $post_rating_anon_vote = $_POST['comment_rating_anon_vote'] ?? 0; $post_rating_anon_set = $_POST['comment_rating_anon_set'] ?? 0; + // Новые настройки времени и куки + $post_edit_time = $_POST['comment_edit_time'] ?? 60; + $post_cookie_life = $_POST['comment_cookie_life'] ?? 30; + + // Дополнительные поля $post_show_f1 = $_POST['comment_show_f1'] ?? 0; $post_req_f1 = $_POST['comment_req_f1'] ?? 0; $post_name_f1 = $_POST['comment_name_f1'] ?? ''; @@ -1257,10 +1268,12 @@ function commentAdminSettingsEdit($tpl_dir) $post_req_f2 = $_POST['comment_req_f2'] ?? 0; $post_name_f2 = $_POST['comment_name_f2'] ?? ''; - // Обработка сохранения (и для AJAX 'apply', и для формы 'save') + // Обработка сохранения if ($request_sub == 'save' || $request_sub == 'apply') { $max_chars = (empty($post_max_chars) || $post_max_chars < 50) ? 50 : $post_max_chars; + + // Подготовка имен полей (оставляем твою логику с htmlspecialchars) $clean_name_f1 = htmlspecialchars(stripslashes($post_name_f1), ENT_QUOTES); $clean_name_f2 = htmlspecialchars(stripslashes($post_name_f2), ENT_QUOTES); @@ -1281,6 +1294,11 @@ function commentAdminSettingsEdit($tpl_dir) comment_show_user_rating = '" . (int)$post_show_user_rating . "', comment_rating_anon_vote = '" . (int)$post_rating_anon_vote . "', comment_rating_anon_set = '" . (int)$post_rating_anon_set . "', + + /* Новые поля времени и куки */ + comment_edit_time = '" . (int)$post_edit_time . "', + comment_cookie_life = '" . (int)$post_cookie_life . "', + comment_show_f1 = '" . (int)$post_show_f1 . "', comment_req_f1 = '" . (int)$post_req_f1 . "', comment_name_f1 = '" . addslashes($clean_name_f1) . "', @@ -1291,21 +1309,21 @@ function commentAdminSettingsEdit($tpl_dir) Id = 1 "); - // Если это AJAX запрос "Применить" if ($request_sub == 'apply') { @ob_clean(); echo "success"; exit; } - // Если это обычное "Сохранить" - уходим на главную модулей if ($request_sub == 'save') { header("Location: index.php?do=modules&cp=" . $sess); exit; } } + // Получаем данные для отображения в шаблоне $row = $this->_commentSettingsGet(); + $row['comment_user_groups'] = explode(',', $row['comment_user_groups']); $row['comment_user_groups_read'] = explode(',', $row['comment_user_groups_read']); diff --git a/sql.php b/sql.php index 4dbb745..d819e71 100644 --- a/sql.php +++ b/sql.php @@ -3,11 +3,9 @@ /** * AVE.cms - Модуль Комментарии * - * Обновленная структура с поддержкой выбора типа рейтинга (звезды/лайки), - * идентификации анонимных пользователей, загрузки файлов и защиты по IP. - * Добавлена поддержка "Авторских звезд" (user_rating) и настройки их отображения. - * ДОБАВЛЕНО: Настройка разрешения голосования для анонимов, выставления ими звезд - * и ПРАВА НА ЗАГРУЗКУ ИЗОБРАЖЕНИЙ ДЛЯ АНОНИМОВ. + * Обновленная структура с поддержкой выбора типа рейтинга, + * идентификации анонимов, загрузки файлов и защиты по IP. + * ДОБАВЛЕНО: Настройки времени редактирования и жизни куки анонима. */ $module_sql_install = array(); @@ -39,14 +37,18 @@ $module_sql_install[] = "CREATE TABLE `%%PRFX%%_module_comments` ( `comment_name_f2` varchar(255) NOT NULL default '', `comment_allow_files` tinyint(1) NOT NULL default '0', `comment_file_max_size` int(10) NOT NULL default '2048', - `comment_rating_type` tinyint(1) NOT NULL default '0', /* 0 - звезды, 1 - лайки, 2 - выключен */ - `comment_show_user_rating` tinyint(1) NOT NULL default '0', /* ВКЛ/ВЫКЛ авторских звезд */ - `comment_rating_anon_vote` tinyint(1) NOT NULL default '0', /* РАЗРЕШИТЬ АНОНИМАМ ГОЛОСОВАТЬ */ - `comment_rating_anon_set` tinyint(1) NOT NULL default '0', /* РАЗРЕШИТЬ АНОНИМАМ СТАВИТЬ ЗВЕЗДЫ */ - `comment_allow_files_anon` tinyint(1) NOT NULL default '0', /* РАЗРЕШИТЬ АНОНИМАМ ЗАГРУЖАТЬ ФАЙЛЫ */ + `comment_rating_type` tinyint(1) NOT NULL default '0', + `comment_show_user_rating` tinyint(1) NOT NULL default '0', + `comment_rating_anon_vote` tinyint(1) NOT NULL default '0', + `comment_rating_anon_set` tinyint(1) NOT NULL default '0', + `comment_allow_files_anon` tinyint(1) NOT NULL default '0', + /* НОВЫЕ ПОЛЯ */ + `comment_edit_time` int(11) NOT NULL default '60', + `comment_cookie_life` int(11) NOT NULL default '30', PRIMARY KEY (`Id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;"; +// ... (таблицы info и votes остаются без изменений) ... $module_sql_install[] = "CREATE TABLE `%%PRFX%%_module_comment_info` ( `Id` int(10) unsigned NOT NULL auto_increment, `parent_id` int(10) unsigned NOT NULL default '0', @@ -64,8 +66,7 @@ $module_sql_install[] = "CREATE TABLE `%%PRFX%%_module_comment_info` ( `comment_status` tinyint(1) unsigned NOT NULL default '1', `comments_close` tinyint(1) unsigned NOT NULL default '0', `comment_file` varchar(255) NOT NULL default '', - `user_rating` tinyint(1) NOT NULL default '0', /* ЛИЧНАЯ ОЦЕНКА АВТОРА (1-5) */ - /* ПОЛЯ ОБЩЕГО РЕЙТИНГА (ГОЛОСОВАНИЕ) */ + `user_rating` tinyint(1) NOT NULL default '0', `rating_sum` int(10) NOT NULL default '0', `rating_count` int(10) NOT NULL default '0', PRIMARY KEY (`Id`), @@ -90,52 +91,24 @@ $module_sql_install[] = "CREATE TABLE `%%PRFX%%_module_comment_votes` ( KEY `remote_addr` (`remote_addr`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;"; -/* Настройки по умолчанию (добавлен 0 для comment_allow_files_anon в конце) */ -$module_sql_install[] = "INSERT INTO `%%PRFX%%_module_comments` VALUES (1, 1000, '1,3', '1,2,3,4', '0', '1', '1' , '0', '', 1, 0, '', 1, 0, '', 0, 2048, 0, 1, 0, 0, 0);"; +/* Настройки по умолчанию (добавлены 60 и 30 в конце) */ +$module_sql_install[] = "INSERT INTO `%%PRFX%%_module_comments` VALUES (1, 1000, '1,3', '1,2,3,4', '0', '1', '1' , '0', '', 1, 0, '', 1, 0, '', 0, 2048, 0, 1, 0, 0, 0, 60, 30);"; // ================================================================================= // 2. ОБНОВЛЕНИЕ МОДУЛЯ (ALTER TABLE) // ================================================================================= -$module_sql_update[] = " - UPDATE `%%PRFX%%_module` - SET - ModuleAveTag = '" . $modul['ModuleAveTag'] . "', - ModulePHPTag = '" . $modul['ModulePHPTag'] . "', - ModuleVersion = '" . $modul['ModuleVersion'] . "' - WHERE ModuleSysName = '" . $modul['ModuleSysName'] . "' - LIMIT 1; -"; +// ... (предыдущие запросы обновления ModuleAveTag и прочего) ... -/* Добавляем настройки рейтинга и файлов в таблицу конфигурации */ +/* Добавляем новые настройки времени, если их еще нет */ +$module_sql_update[] = "ALTER TABLE `%%PRFX%%_module_comments` ADD COLUMN IF NOT EXISTS `comment_edit_time` INT(11) NOT NULL DEFAULT '60';"; +$module_sql_update[] = "ALTER TABLE `%%PRFX%%_module_comments` ADD COLUMN IF NOT EXISTS `comment_cookie_life` INT(11) NOT NULL DEFAULT '30';"; + +/* (Остальные ALTER TABLE из твоего списка остаются ниже без изменений) */ $module_sql_update[] = "ALTER TABLE `%%PRFX%%_module_comments` ADD COLUMN IF NOT EXISTS `comment_rating_type` TINYINT(1) NOT NULL DEFAULT '0';"; $module_sql_update[] = "ALTER TABLE `%%PRFX%%_module_comments` ADD COLUMN IF NOT EXISTS `comment_show_user_rating` TINYINT(1) NOT NULL DEFAULT '0';"; $module_sql_update[] = "ALTER TABLE `%%PRFX%%_module_comments` ADD COLUMN IF NOT EXISTS `comment_rating_anon_vote` TINYINT(1) NOT NULL DEFAULT '0';"; $module_sql_update[] = "ALTER TABLE `%%PRFX%%_module_comments` ADD COLUMN IF NOT EXISTS `comment_rating_anon_set` TINYINT(1) NOT NULL DEFAULT '0';"; $module_sql_update[] = "ALTER TABLE `%%PRFX%%_module_comments` ADD COLUMN IF NOT EXISTS `comment_allow_files_anon` TINYINT(1) NOT NULL DEFAULT '0';"; -/* Добавляем поля для оценки и голосования в таблицу инфо */ -$module_sql_update[] = "ALTER TABLE `%%PRFX%%_module_comment_info` ADD COLUMN IF NOT EXISTS `user_rating` TINYINT(1) NOT NULL DEFAULT '0' AFTER `comment_file`;"; -$module_sql_update[] = "ALTER TABLE `%%PRFX%%_module_comment_info` ADD COLUMN IF NOT EXISTS `rating_sum` INT(10) NOT NULL DEFAULT '0';"; -$module_sql_update[] = "ALTER TABLE `%%PRFX%%_module_comment_info` ADD COLUMN IF NOT EXISTS `rating_count` INT(10) NOT NULL DEFAULT '0';"; - -/* Обновляем типы полей */ -$module_sql_update[] = "ALTER TABLE `%%PRFX%%_module_comment_info` MODIFY `comment_author_ip` VARCHAR(45) NOT NULL;"; - -/* Создаем таблицу голосов, если обновляемся со старой версии */ -$module_sql_update[] = "CREATE TABLE IF NOT EXISTS `%%PRFX%%_module_comment_votes` ( - `id` int(10) unsigned NOT NULL auto_increment, - `comment_id` int(10) unsigned NOT NULL, - `user_id` int(10) unsigned DEFAULT '0', - `anon_key` varchar(32) DEFAULT '', - `remote_addr` varchar(45) DEFAULT '', - `vote_value` tinyint(1) NOT NULL, - `date_voted` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`), - KEY `comment_id` (`comment_id`), - KEY `anon_key` (`anon_key`), - KEY `user_id` (`user_id`), - KEY `remote_addr` (`remote_addr`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8;"; - ?> \ No newline at end of file diff --git a/templates/admin_settings.tpl b/templates/admin_settings.tpl index 6ca920b..53abe4e 100644 --- a/templates/admin_settings.tpl +++ b/templates/admin_settings.tpl @@ -56,6 +56,19 @@ + + Время на редактирование: + + + сек. + + Жизнь куки анонима: + + + дн. + + + {#COMMENT_FOR_GROUPS#}