Ejemplo n.º 1
0
 /**
  * Checking all forms for spam
  * @return null|boolean NULL when success or FALSE when spam detected
  */
 public function OnPageStartHandler()
 {
     global $APPLICATION, $USER;
     if (!is_object($USER)) {
         $USER = new CUser();
     }
     $ct_status = COption::GetOptionString('cleantalk.antispam', 'status', '0');
     $ct_global = COption::GetOptionString('cleantalk.antispam', 'form_global_check', '0');
     $key = COption::GetOptionString('cleantalk.antispam', 'key', '');
     $last_checked = COption::GetOptionString('cleantalk.antispam', 'last_checked', 0);
     $last_status = COption::GetOptionString('cleantalk.antispam', 'is_paid', 0);
     $new_checked = time();
     $is_sfw = COption::GetOptionString('cleantalk.antispam', 'form_sfw', 0);
     $sfw_last_updated = COption::GetOptionString('cleantalk.antispam', 'sfw_last_updated', 0);
     if ($is_sfw == 1 && time() - $sfw_last_updated > 10) {
         global $DB;
         $data = array('auth_key' => $key, 'method_name' => '2s_blacklists_db');
         $result = CleantalkAntispam::CleantalkSendRequest('https://api.cleantalk.org/2.1', $data, false);
         $result = json_decode($result, true);
         if (isset($result['data'])) {
             $result = $result['data'];
             $query = "INSERT INTO `" . $wpdb->base_prefix . "cleantalk_sfw` VALUES ";
             //$wpdb->query("TRUNCATE TABLE `".$wpdb->base_prefix."cleantalk_sfw`;");
             for ($i = 0; $i < sizeof($result); $i++) {
                 if ($i == sizeof($result) - 1) {
                     $query .= "(" . $result[$i][0] . "," . $result[$i][1] . ");";
                 } else {
                     $query .= "(" . $result[$i][0] . "," . $result[$i][1] . "), ";
                 }
             }
             $DB->Query($query);
         }
         include_once "cleantalk-sfw.class.php";
         $sfw = new CleanTalkSFW();
         $sfw->send_logs();
         COption::SetOptionString('cleantalk.antispam', 'sfw_last_updated', time());
     }
     if ($is_sfw == 1 && !$USER->IsAdmin()) {
         include_once "cleantalk-sfw.class.php";
         $is_sfw_check = true;
         $ip = CleantalkAntispam::CleantalkGetIP();
         $ip = array_unique($ip);
         $sfw_log = COption::GetOptionString('cleantalk.antispam', 'sfw_log', '');
         for ($i = 0; $i < sizeof($ip); $i++) {
             if (isset($_COOKIE['ct_sfw_pass_key']) && $_COOKIE['ct_sfw_pass_key'] == md5($ip[$i] . $key)) {
                 $is_sfw_check = false;
                 if (isset($_COOKIE['ct_sfw_passed'])) {
                     if ($sfw_log == '') {
                         $sfw_log = array();
                         $sfw_log[$ip[$i]] = array();
                     } else {
                         $sfw_log = json_decode($sfw_log, true);
                     }
                     $sfw_log[$ip[$i]]['allow']++;
                     COption::SetOptionString('cleantalk.antispam', 'sfw_log', json_encode($sfw_log));
                     @setcookie('ct_sfw_passed', '0', 1, "/");
                 }
             }
         }
         if ($is_sfw_check) {
             include_once "cleantalk-sfw.class.php";
             $sfw = new CleanTalkSFW();
             $sfw->cleantalk_get_real_ip();
             $sfw->check_ip();
             if ($sfw->result) {
                 $sfw->sfw_die();
             }
         }
     }
     if ($key != '' && $key != 'enter key' && $USER->IsAdmin()) {
         $new_status = $last_status;
         if ($new_checked - $last_checked > 86400) {
             $url = 'https://api.cleantalk.org';
             $dt = array('auth_key' => $key, 'method_name' => 'get_account_status');
             $result = CleantalkAntispam::CleantalkSendRequest($url, $dt, false);
             if ($result !== null) {
                 $result = json_decode($result);
                 if (isset($result->data) && isset($result->data->paid)) {
                     $new_status = intval($result->data->paid);
                     if ($last_status != 1 && $new_status == 1) {
                         COption::SetOptionString('cleantalk.antispam', 'is_paid', 1);
                         $show_notice = 1;
                         if (LANGUAGE_ID == 'ru') {
                             $review_message = "Нравится антиспам от CleanTalk? Расскажите другим об этом! <a target='_blank' href='http://marketplace.1c-bitrix.ru/solutions/cleantalk.antispam/#rating'>Оставьте отзыв в Bitrix.Marketplace</a>";
                         } else {
                             $review_mess = "Like Anti-spam by CleanTalk? Help others learn about CleanTalk! <a  target='_blank' href='http://marketplace.1c-bitrix.ru/solutions/cleantalk.antispam/#rating'>Leave a review at the Bitrix.Marketplace</a>";
                         }
                         CAdminNotify::Add(array('MESSAGE' => $review_mess, 'TAG' => 'review_notify', 'MODULE_ID' => 'main', 'ENABLE_CLOSE' => 'Y'));
                     }
                 }
             }
             $url = 'https://api.cleantalk.org';
             $dt = array('auth_key' => $key, 'method_name' => 'notice_paid_till');
             $result = CleantalkAntispam::CleantalkSendRequest($url, $dt, false);
             if ($result !== null) {
                 $result = json_decode($result);
                 if (isset($result->moderate_ip) && $result->moderate_ip == 1) {
                     COption::SetOptionString('cleantalk.antispam', 'moderate_ip', 1);
                     COption::SetOptionString('cleantalk.antispam', 'ip_license', $result['ip_license']);
                 } else {
                     COption::SetOptionString('cleantalk.antispam', 'moderate_ip', 0);
                     COption::SetOptionString('cleantalk.antispam', 'ip_license', 0);
                 }
             }
             COption::SetOptionString('cleantalk.antispam', 'last_checked', $new_checked);
         }
     }
     if (!$USER->IsAdmin() && $ct_status == 1 && $ct_global == 1) {
         $sender_email = null;
         $message = '';
         CleantalkAntispam::CleantalkGetFields($sender_email, $message, $_POST);
         if ($sender_email !== null) {
             $arUser = array();
             $arUser["type"] = "comment";
             $arUser["sender_email"] = $sender_email;
             $arUser["sender_nickname"] = '';
             $arUser["sender_ip"] = $_SERVER['REMOTE_ADDR'];
             $arUser["message_title"] = "";
             $arUser["message_body"] = $message;
             $arUser["example_title"] = "";
             $arUser["example_body"] = "";
             $arUser["example_comments"] = "";
             $aResult = CleantalkAntispam::CheckAllBefore($arUser, FALSE);
             if (isset($aResult) && is_array($aResult)) {
                 if ($aResult['errno'] == 0) {
                     if ($aResult['allow'] == 1) {
                         //Not spammer - just return;
                         return;
                     } else {
                         CleantalkAntispam::CleantalkDie($aResult['ct_result_comment']);
                         return false;
                     }
                 }
             }
         }
     }
 }