From dd01c16ffaa3c37f96bd495f1cf24f84b213171c Mon Sep 17 00:00:00 2001 From: alexandergull Date: Thu, 2 Nov 2023 14:13:42 +0500 Subject: [PATCH 01/16] Fix. SFW. Update log on SFW pass fixed. --- .../Cleantalk/Common/Firewall/Modules/SFW.php | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/cleantalk.antispam/lib/Cleantalk/Common/Firewall/Modules/SFW.php b/cleantalk.antispam/lib/Cleantalk/Common/Firewall/Modules/SFW.php index 7d59252..2deb37b 100644 --- a/cleantalk.antispam/lib/Cleantalk/Common/Firewall/Modules/SFW.php +++ b/cleantalk.antispam/lib/Cleantalk/Common/Firewall/Modules/SFW.php @@ -28,12 +28,12 @@ class SFW extends FirewallModule { public function __construct( $data_table, $params = array() ) { $this->db_data_table_name = $data_table ?: null; - + foreach( $params as $param_name => $param ){ $this->$param_name = isset( $this->$param_name ) ? $param : false; } } - + /** * Use this method to execute main logic of the module. * @@ -51,7 +51,7 @@ public function check() } else { $ct_sfw_pass_key = Cookie::get( 'ct_sfw_pass_key'); } - + // Skip by cookie foreach( $this->ip_array as $current_ip ){ @@ -66,7 +66,7 @@ public function check() } // Do logging an one passed request - $this->update_log( $current_ip, 'PASS_SFW' ); + $this->update_log( $current_ip, 'PASS_SFW', false ); if( $this->sfw_counter ){ // @ToDo have to implement the logic of incrementing and saving count of all handled requests. @@ -81,11 +81,11 @@ public function check() if( $status ) { $results[] = array('ip' => $current_ip, 'is_personal' => false, 'status' => 'PASS_SFW__BY_WHITELIST',); } - + return $results; } } - + // Common check foreach( $this->ip_array as $origin => $current_ip ) { @@ -96,7 +96,7 @@ public function check() $needles[] = sprintf( "%u", bindec( $mask & base_convert( $current_ip_v4, 10, 2 ) ) ); } $needles = array_unique( $needles ); - + $db_results = $this->db->fetch_all("SELECT * FROM " . $this->db_data_table_name . " WHERE network IN (". implode( ',', $needles ) .") AND network = " . $current_ip_v4 . " & mask @@ -104,7 +104,7 @@ public function check() ORDER BY status DESC"); if ( ! empty( $db_results ) ) { - + foreach( $db_results as $db_result ){ $is_personal = isset($db_result['source']) && $db_result['source'] == 1 ? true : false; if ( $db_result['status'] == 1 ) { @@ -126,7 +126,7 @@ public function check() } return $results; } - + /** * Add entry to SFW log. * Writes to database. @@ -139,7 +139,7 @@ public function update_log( $ip, $status, $is_personal ) $id = md5( $ip . $this->module_name ); $time = time(); - + $query = "INSERT INTO " . $this->db_log_table_name . " SET id = '$id', @@ -158,7 +158,7 @@ public function update_log( $ip, $status, $is_personal ) ua_name = '" . addslashes(Server::get('HTTP_USER_AGENT')) . "'%s"; if ( $is_personal ) { - $is_personal_sql = ", source = '" . $is_personal . "'"; + $is_personal_sql = ", source = '" . (int)$is_personal . "'"; $query = sprintf( $query, $is_personal_sql, $is_personal_sql); } else { $query = sprintf( $query, '', ''); @@ -195,9 +195,9 @@ public function actionsForPassed( $result ) */ public function _die( $result ) { - + parent::_die( $result ); - + // Statistics if( ! empty( $this->blocked_ips ) ){ reset($this->blocked_ips); @@ -208,10 +208,10 @@ public function _die( $result ) $this->apbct->save('stats'); */ } - + // File exists? if( file_exists( __DIR__ . "/die_page_sfw.html" ) ){ - + $sfw_die_page = file_get_contents( __DIR__ . "/die_page_sfw.html" ); $net_count = $this->db->fetch( 'SELECT COUNT(*) as net_count FROM ' . $this->db_data_table_name ); @@ -231,12 +231,12 @@ public function _die( $result ) '{HOST}' => '', '{GENERATED}' => '

The page was generated at ' . date( 'D, d M Y H:i:s' ) . "

", '{REQUEST_URI}' => Server::get( 'REQUEST_URI' ), - + // Cookie '{COOKIE_PREFIX}' => '', '{COOKIE_DOMAIN}' => $this->cookie_domain, '{COOKIE_SFW}' => $this->test ? $this->test_ip : $cookie_val, - + // Test '{TEST_TITLE}' => '', '{REAL_IP__HEADER}' => '', @@ -244,7 +244,7 @@ public function _die( $result ) '{TEST_IP}' => '', '{REAL_IP}' => '', ); - + // Test if($this->test){ $replaces['{TEST_TITLE}'] = $this->__( 'This is the testing page for SpamFireWall', 'cleantalk-spam-protect' ); @@ -253,7 +253,7 @@ public function _die( $result ) $replaces['{TEST_IP}'] = $this->test_ip; $replaces['{REAL_IP}'] = $this->real_ip; } - + // Debug if($this->debug){ $debug = '

Headers

' @@ -268,17 +268,17 @@ public function _die( $result ) . var_export( $this->debug_data, true ); } $replaces['{DEBUG}'] = isset( $debug ) ? $debug : ''; - + foreach( $replaces as $place_holder => $replace ){ $sfw_die_page = str_replace( $place_holder, $replace, $sfw_die_page ); } - + die( $sfw_die_page ); - + } die( "IP BLACKLISTED. Blocked by SFW " . $result['ip'] ); } -} \ No newline at end of file +} From 64194febc2439fb6870ff06fcb6aab7d43a72876 Mon Sep 17 00:00:00 2001 From: alexandergull Date: Thu, 2 Nov 2023 17:02:41 +0500 Subject: [PATCH 02/16] Fix. SFW update. Temp tables fixes. --- .../Common/Firewall/FirewallUpdater.php | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/cleantalk.antispam/lib/Cleantalk/Common/Firewall/FirewallUpdater.php b/cleantalk.antispam/lib/Cleantalk/Common/Firewall/FirewallUpdater.php index 26d6f94..fb124da 100644 --- a/cleantalk.antispam/lib/Cleantalk/Common/Firewall/FirewallUpdater.php +++ b/cleantalk.antispam/lib/Cleantalk/Common/Firewall/FirewallUpdater.php @@ -355,21 +355,27 @@ private function writeDbExclusions() */ private function createTempTables() { + //drop current temp table to prevent any keys mismatches with the main table + $this->db->execute('DROP TABLE IF EXISTS `' . $this->db->prefix . APBCT_TBL_FIREWALL_DATA . '_temp`'); + + //check if main table exists $sql = 'SHOW TABLES LIKE "%scleantalk_sfw";'; $sql = sprintf( $sql, $this->db->prefix ); // Adding current blog prefix $result = $this->db->fetch( $sql ); + // create the main table if not if( ! $result ){ $sql = sprintf( Schema::getSchema('sfw'), $this->db->prefix ); $this->db->execute( $sql ); } - $is_source_column_exist = $this->db->fetch( 'SHOW COLUMNS FROM `' . APBCT_TBL_FIREWALL_DATA . '` LIKE "source";' ); + //hardcode for new "source" column + $is_source_column_exist = $this->db->fetch( 'SHOW COLUMNS FROM `' . $this->db->prefix . APBCT_TBL_FIREWALL_DATA . '` LIKE "source";' ); if( ! $is_source_column_exist ) { - $sql = 'ALTER TABLE `' . APBCT_TBL_FIREWALL_DATA . '` ADD `source` TINYINT NULL DEFAULT NULL AFTER `status`;'; + $sql = 'ALTER TABLE `' . $this->db->prefix . APBCT_TBL_FIREWALL_DATA . '` ADD `source` TINYINT NULL DEFAULT NULL AFTER `status`;'; $this->db->execute( $sql ); } - $this->db->execute( 'CREATE TABLE IF NOT EXISTS `' . APBCT_TBL_FIREWALL_DATA . '_temp` LIKE `' . APBCT_TBL_FIREWALL_DATA . '`;' ); - $this->db->execute( 'TRUNCATE TABLE `' . APBCT_TBL_FIREWALL_DATA . '_temp`;' ); + $this->db->execute( 'CREATE TABLE IF NOT EXISTS `' . $this->db->prefix . APBCT_TBL_FIREWALL_DATA . '_temp` LIKE `' . $this->db->prefix . APBCT_TBL_FIREWALL_DATA . '`;' ); + $this->db->execute( 'TRUNCATE TABLE `' . $this->db->prefix . APBCT_TBL_FIREWALL_DATA . '_temp`;' ); } /** @@ -392,4 +398,4 @@ private function renameDataTables() $this->db->execute( 'ALTER TABLE `'. APBCT_TBL_FIREWALL_DATA .'_temp` RENAME `'. APBCT_TBL_FIREWALL_DATA .'`;' ); } -} \ No newline at end of file +} From f459232f9d4c734c759efccc63b5c50ae6341280 Mon Sep 17 00:00:00 2001 From: svfcode Date: Fri, 17 Nov 2023 14:39:12 +0300 Subject: [PATCH 03/16] Fix. SFW. Reduction to a number. --- .../lib/Cleantalk/Common/Firewall/FirewallUpdater.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cleantalk.antispam/lib/Cleantalk/Common/Firewall/FirewallUpdater.php b/cleantalk.antispam/lib/Cleantalk/Common/Firewall/FirewallUpdater.php index fb124da..4050d94 100644 --- a/cleantalk.antispam/lib/Cleantalk/Common/Firewall/FirewallUpdater.php +++ b/cleantalk.antispam/lib/Cleantalk/Common/Firewall/FirewallUpdater.php @@ -97,7 +97,7 @@ public function update() if( Get::get('spbc_remote_call_action') == 'sfw_update__write_base' && Get::get('firewall_updating_id') && - Get::get('firewall_updating_id') !== $fw_stats['firewall_updating_id'] && + (int)Get::get('firewall_updating_id') !== (int)$fw_stats['firewall_updating_id'] && time() - $fw_stats['firewall_updating_last_start'] < 8600 ) { return array( 'error' => 'FIREWALL_IS_UPDATING' ); From d81b5bb640db09ec484959fe2490e94a90bc016b Mon Sep 17 00:00:00 2001 From: Glomberg Date: Tue, 5 Dec 2023 13:36:00 +0300 Subject: [PATCH 04/16] Fix. Settings. Getting Access Key message fixed. --- cleantalk.antispam/lang/en/options.php | 5 +++++ cleantalk.antispam/lang/ru/options.php | 5 +++++ cleantalk.antispam/options.php | 10 ++++++++++ 3 files changed, 20 insertions(+) diff --git a/cleantalk.antispam/lang/en/options.php b/cleantalk.antispam/lang/en/options.php index b5591f1..b972664 100644 --- a/cleantalk.antispam/lang/en/options.php +++ b/cleantalk.antispam/lang/en/options.php @@ -24,6 +24,11 @@ $MESS['CLEANTALK_KEY_VALID'] = 'Key is valid'; $MESS['CLEANTALK_KEY_NOT_VALID'] = 'Key is not valid'; $MESS['CLEANTALK_EMAIL_REGISTRATION_WARNING'] = "Administrator's e-mail will be used for registration"; +$MESS['CLEANTALK_API_KEY_GETTING_WARNING'] = sprintf( + 'Please, get the Access Key from %s CleanTalk Control Panel %s and insert it in the Access Key field', + '', + '' +); $MESS['CLEANTALK_LICENSE_AGREEMENT'] = 'License agreement'; $MESS['CLEANTALK_KEY'] = 'Access key'; $MESS['CLEANTALK_EXCLUSIONS'] = 'Exclusions'; diff --git a/cleantalk.antispam/lang/ru/options.php b/cleantalk.antispam/lang/ru/options.php index a6252dd..5d25351 100644 --- a/cleantalk.antispam/lang/ru/options.php +++ b/cleantalk.antispam/lang/ru/options.php @@ -24,6 +24,11 @@ $MESS['CLEANTALK_KEY_VALID'] = 'Ключ активен'; $MESS['CLEANTALK_KEY_NOT_VALID'] = 'Ключ не активен'; $MESS['CLEANTALK_EMAIL_REGISTRATION_WARNING'] = 'Для регистрации будет использована почта администратора'; +$MESS['CLEANTALK_API_KEY_GETTING_WARNING'] = sprintf( + 'Пожалуйста, используйте ключ доступа из вашей %s панели управления CleanTalk %s', + '', + '' +); $MESS['CLEANTALK_LICENSE_AGREEMENT'] = 'Лицензионное соглашение'; $MESS['CLEANTALK_KEY'] = 'Ключ доступа'; $MESS['CLEANTALK_EXCLUSIONS'] = 'Исключения'; diff --git a/cleantalk.antispam/options.php b/cleantalk.antispam/options.php index f301dc4..dae384a 100644 --- a/cleantalk.antispam/options.php +++ b/cleantalk.antispam/options.php @@ -19,6 +19,7 @@ $cleantalk_is_wrong_regexp = false; $cleantalk_is_wrong_url_regexp = false; +$is_account_exists = false; if ( ! empty($REQUEST_METHOD) && $REQUEST_METHOD == 'POST' && $_POST['Update'] == 'Y' ) { //try to get default options @@ -44,6 +45,10 @@ $result = CleantalkAPI::method__get_api_key('antispam', COption::GetOptionString("main", "email_from"), $_SERVER["HTTP_HOST"], 'bitrix'); + if ( isset($result['account_exists']) && $result['account_exists'] == 1 ) { + $is_account_exists = true; + } + if (empty($result['error'])){ if(isset($result['user_token'])){ @@ -354,6 +359,11 @@ function ctDdisableInputLine(ct_input_line){ value="" /> + + +
+ + ).
From 9a4dd811f36548c22daec266826218ec1a74e412 Mon Sep 17 00:00:00 2001 From: SVFCode Date: Sun, 26 May 2024 09:21:49 +0000 Subject: [PATCH 05/16] New. Settings. Added option for sfw pass get param. --- cleantalk.antispam/default_option.php | 1 + cleantalk.antispam/include.php | 2 +- cleantalk.antispam/lang/en/options.php | 2 + cleantalk.antispam/lang/ru/options.php | 2 + .../lib/Cleantalk/ApbctBitrix/SFW.php | 100 +++++++++++ .../Cleantalk/ApbctBitrix/die_page_sfw.html | 167 ++++++++++++++++++ cleantalk.antispam/options.php | 46 ++++- 7 files changed, 318 insertions(+), 2 deletions(-) create mode 100644 cleantalk.antispam/lib/Cleantalk/ApbctBitrix/SFW.php create mode 100644 cleantalk.antispam/lib/Cleantalk/ApbctBitrix/die_page_sfw.html diff --git a/cleantalk.antispam/default_option.php b/cleantalk.antispam/default_option.php index efaa679..6cc1b73 100644 --- a/cleantalk.antispam/default_option.php +++ b/cleantalk.antispam/default_option.php @@ -12,6 +12,7 @@ 'form_global_check' => 0, 'form_global_check_without_email' => 0, 'form_sfw' => 1, + 'form_sfw_uniq_get_option' => 1, 'site_exclusions' => '', 'form_exclusions_url' => '', 'form_exclusions_url__regexp' => 0, diff --git a/cleantalk.antispam/include.php b/cleantalk.antispam/include.php index 56c21c8..07ccb0b 100644 --- a/cleantalk.antispam/include.php +++ b/cleantalk.antispam/include.php @@ -19,7 +19,7 @@ use Cleantalk\ApbctBitrix\Cron; use Cleantalk\ApbctBitrix\DB; use Cleantalk\Common\Variables\Server; -use Cleantalk\Common\Firewall\Modules\SFW; +use Cleantalk\ApbctBitrix\SFW; if ( ! defined( 'CLEANTALK_USER_AGENT' ) ) define( 'CLEANTALK_USER_AGENT', 'bitrix-3.12.0' ); diff --git a/cleantalk.antispam/lang/en/options.php b/cleantalk.antispam/lang/en/options.php index b972664..7b3e391 100644 --- a/cleantalk.antispam/lang/en/options.php +++ b/cleantalk.antispam/lang/en/options.php @@ -19,6 +19,8 @@ $MESS['CLEANTALK_LABEL_GLOBAL_CHECK_WITHOUT_EMAIL'] = 'Check all POST data'; $MESS['CLEANTALK_WARNING_GLOBAL_CHECK_WITHOUT_EMAIL'] = '- Warning, conflict possibility!'; $MESS['CLEANTALK_LABEL_SFW'] = 'Spam FireWall'; +$MESS['CLEANTALK_LABEL_UNIQ_GET_OPTION'] = 'Uniq GET option'; +$MESS['CLEANTALK_LABEL_UNIQ_GET_OPTION_DESC'] = 'If a visitor gets the SpamFireWall page, the plugin will put a unique GET variable in the URL to avoid issues with caching plugins.'; $MESS['CLEANTALK_LABEL_NOTIFY'] = "Like Anti-spam by CleanTalk? Help others learn about CleanTalk! Leave a review at the Bitrix.Marketplace"; $MESS['CLEANTALK_ENTER_KEY'] = 'Enter the access key'; $MESS['CLEANTALK_KEY_VALID'] = 'Key is valid'; diff --git a/cleantalk.antispam/lang/ru/options.php b/cleantalk.antispam/lang/ru/options.php index 5d25351..3820a0f 100644 --- a/cleantalk.antispam/lang/ru/options.php +++ b/cleantalk.antispam/lang/ru/options.php @@ -19,6 +19,8 @@ $MESS['CLEANTALK_LABEL_GLOBAL_CHECK_WITHOUT_EMAIL'] = 'Проверять все POST данные'; $MESS['CLEANTALK_WARNING_GLOBAL_CHECK_WITHOUT_EMAIL'] = '- Внимание, возможны конфликты!'; $MESS['CLEANTALK_LABEL_SFW'] = 'Spam FireWall'; +$MESS['CLEANTALK_LABEL_UNIQ_GET_OPTION'] = 'Добавление уникального гет параметра'; +$MESS['CLEANTALK_LABEL_UNIQ_GET_OPTION_DESC'] = 'Если посетитель попадает на страницу файервола, плагин помещает уникальный GET параметр в URL-адрес, чтобы избежать проблем с кэшированием.'; $MESS['CLEANTALK_LABEL_NOTIFY'] = "Нравится антиспам от CleanTalk? Помогите другим узнать о нас! Оставьте отзыв на Битрикс.Маркетплейс"; $MESS['CLEANTALK_ENTER_KEY'] = 'Введите ключ'; $MESS['CLEANTALK_KEY_VALID'] = 'Ключ активен'; diff --git a/cleantalk.antispam/lib/Cleantalk/ApbctBitrix/SFW.php b/cleantalk.antispam/lib/Cleantalk/ApbctBitrix/SFW.php new file mode 100644 index 0000000..39aad46 --- /dev/null +++ b/cleantalk.antispam/lib/Cleantalk/ApbctBitrix/SFW.php @@ -0,0 +1,100 @@ +blocked_ips ) ){ + reset($this->blocked_ips); + } + + // File exists? + if( file_exists( __DIR__ . "/die_page_sfw.html" ) ){ + + $sfw_die_page = file_get_contents( __DIR__ . "/die_page_sfw.html" ); + + $net_count = $this->db->fetch( 'SELECT COUNT(*) as net_count FROM ' . $this->db_data_table_name ); + + $status = $result['status'] === 'PASS_SFW__BY_WHITELIST' ? '1' : '0'; + $cookie_val = md5( $result['ip'] . $this->api_key ) . $status; + + // Translation + $replaces = array( + '{SFW_DIE_NOTICE_IP}' => $this->__('SpamFireWall is activated for your IP ', 'cleantalk-spam-protect'), + '{SFW_DIE_MAKE_SURE_JS_ENABLED}' => $this->__( 'To continue working with the web site, please make sure that you have enabled JavaScript.', 'cleantalk-spam-protect' ), + '{SFW_DIE_CLICK_TO_PASS}' => $this->__('Please click the link below to pass the protection,', 'cleantalk-spam-protect'), + '{SFW_DIE_YOU_WILL_BE_REDIRECTED}' => sprintf( $this->__('Or you will be automatically redirected to the requested page after %d seconds.', 'cleantalk-spam-protect'), 3), + '{CLEANTALK_TITLE}' => ($this->test ? $this->__('This is the testing page for SpamFireWall', 'cleantalk-spam-protect') : ''), + '{REMOTE_ADDRESS}' => $result['ip'], + '{SERVICE_ID}' => $net_count['net_count'], + '{HOST}' => '', + '{GENERATED}' => '

The page was generated at ' . date( 'D, d M Y H:i:s' ) . "

", + '{REQUEST_URI}' => Server::get( 'REQUEST_URI' ), + + // Cookie + '{COOKIE_PREFIX}' => '', + '{COOKIE_DOMAIN}' => $this->cookie_domain, + '{COOKIE_SFW}' => $this->test ? $this->test_ip : $cookie_val, + + // Test + '{TEST_TITLE}' => '', + '{REAL_IP__HEADER}' => '', + '{TEST_IP__HEADER}' => '', + '{TEST_IP}' => '', + '{REAL_IP}' => '', + ); + + // Test + if($this->test){ + $replaces['{TEST_TITLE}'] = $this->__( 'This is the testing page for SpamFireWall', 'cleantalk-spam-protect' ); + $replaces['{REAL_IP__HEADER}'] = 'Real IP:'; + $replaces['{TEST_IP__HEADER}'] = 'Test IP:'; + $replaces['{TEST_IP}'] = $this->test_ip; + $replaces['{REAL_IP}'] = $this->real_ip; + } + + $form_sfw_uniq_get_option = \COption::GetOptionInt('cleantalk.antispam', 'form_sfw_uniq_get_option', 1); + $sfwgetoption = ""; + $replaces['{SFWGETOPTION}'] = $sfwgetoption; + + // Debug + if($this->debug){ + $debug = '

Headers

' + . var_export( apache_request_headers(), true ) + . '

REMOTE_ADDR

' + . Server::get( 'REMOTE_ADDR' ) + . '

SERVER_ADDR

' + . Server::get( 'REMOTE_ADDR' ) + . '

IP_ARRAY

' + . var_export( $this->ip_array, true ) + . '

ADDITIONAL

' + . var_export( $this->debug_data, true ); + } + $replaces['{DEBUG}'] = isset( $debug ) ? $debug : ''; + + foreach( $replaces as $place_holder => $replace ){ + $sfw_die_page = str_replace( $place_holder, $replace, $sfw_die_page ); + } + + die( $sfw_die_page ); + + } + + die( "IP BLACKLISTED. Blocked by SFW " . $result['ip'] ); + + } + +} diff --git a/cleantalk.antispam/lib/Cleantalk/ApbctBitrix/die_page_sfw.html b/cleantalk.antispam/lib/Cleantalk/ApbctBitrix/die_page_sfw.html new file mode 100644 index 0000000..236f83a --- /dev/null +++ b/cleantalk.antispam/lib/Cleantalk/ApbctBitrix/die_page_sfw.html @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + +
+

{SFW_DIE_NOTICE_IP}{REMOTE_ADDRESS}

+ +

{REAL_IP__HEADER} {REAL_IP}

+

{TEST_IP__HEADER} {TEST_IP}

+ +

{TEST_TITLE}

+ +

{SFW_DIE_MAKE_SURE_JS_ENABLED}
+ +
+

{SFW_DIE_CLICK_TO_PASS}

+ +
+

{SFW_DIE_YOU_WILL_BE_REDIRECTED}

+
+
+
+
+
+
+
+ {GENERATED} +

Browser time

+
+ +
+
+

{SERVICE_ID},

+

{HOST}

+
+ + {SFWGETOPTION} + + {DEBUG} + + diff --git a/cleantalk.antispam/options.php b/cleantalk.antispam/options.php index dae384a..cdfc6ef 100644 --- a/cleantalk.antispam/options.php +++ b/cleantalk.antispam/options.php @@ -122,6 +122,7 @@ Option::set( $sModuleId, 'form_global_check', $_POST['form_global_check'] == '1' ? 1 : 0 ); Option::set( $sModuleId, 'form_global_check_without_email', $_POST['form_global_check_without_email'] == '1' ? 1 : 0 ); Option::set( $sModuleId, 'form_sfw', $_POST['form_sfw'] == '1' ? 1 : 0 ); + Option::set( $sModuleId, 'form_sfw_uniq_get_option', $_POST['form_sfw_uniq_get_option'] == '1' ? 1 : 0 ); Option::set( $sModuleId, 'complete_deactivation', $_POST['complete_deactivation'] == '1' ? 1 : 0 ); if (isset($_POST['form_exclusions_sites']) && is_array($_POST['form_exclusions_sites'])) { @@ -496,7 +497,7 @@ function ctDdisableInputLine(ct_input_line){ -