View source
<?php
require_once dirname(__FILE__) . '/Cleantalk.php';
require_once dirname(__FILE__) . '/CleantalkRequest.php';
require_once dirname(__FILE__) . '/CleantalkHelper.php';
require_once dirname(__FILE__) . '/CleantalkSFW.php';
class CleantalkFuncs {
public static function _cleantalk_get_submit_time() {
return self::_cleantalk_apbct_cookies_test() == 1 ? time() - (int) self::_apbct_getcookie('apbct_timestamp') : null;
}
public static function _cleantalk_apbct_cookies_set() {
if (!variable_get('cleantalk_set_cookies', 1)) {
return;
}
if (headers_sent()) {
return;
}
$cookie_test_value = array(
'cookies_names' => array(),
'check_value' => trim(variable_get('cleantalk_authkey', '')),
);
$apbct_timestamp = time();
if (variable_get('cleantalk_alternative_cookies_session', 0)) {
$prev_time = self::_apbct_getcookie('apbct_prev_timestamp');
if (is_null($prev_time)) {
self::_apbct_setcookie('apbct_timestamp', $apbct_timestamp);
self::_apbct_setcookie('apbct_prev_timestamp', $apbct_timestamp);
$cookie_test_value['check_value'] .= $apbct_timestamp;
}
else {
self::_apbct_setcookie('apbct_timestamp', $prev_time);
self::_apbct_setcookie('apbct_prev_timestamp', $apbct_timestamp);
$cookie_test_value['check_value'] .= $prev_time;
}
}
else {
self::_apbct_setcookie('apbct_timestamp', $apbct_timestamp);
$cookie_test_value['check_value'] .= $apbct_timestamp;
}
$cookie_test_value['cookies_names'][] = 'apbct_timestamp';
if (!empty($_SERVER['HTTP_REFERER'])) {
self::_apbct_setcookie('apbct_prev_referer', $_SERVER['HTTP_REFERER']);
$cookie_test_value['cookies_names'][] = 'apbct_prev_referer';
$cookie_test_value['check_value'] .= $_SERVER['HTTP_REFERER'];
}
$cookie_test_value['check_value'] = md5($cookie_test_value['check_value']);
self::_apbct_setcookie('apbct_cookies_test', json_encode($cookie_test_value));
}
private static function _apbct_setcookie($name, $value) {
if (variable_get('cleantalk_alternative_cookies_session', 0)) {
self::_apbct_alt_sessions__remove_old();
db_query("INSERT INTO {cleantalk_sessions}\n (id, name, value, last_update)\n VALUES (:id, :name, :value, :last_update)\n ON DUPLICATE KEY UPDATE\n value = :value,\n last_update = :last_update", array(
':id' => self::_apbct_alt_session__id__get(),
':name' => $name,
':value' => $value,
':last_update' => date('Y-m-d H:i:s'),
));
}
else {
setcookie($name, $value, 0, '/');
}
}
private static function _apbct_getcookie($name) {
if (variable_get('cleantalk_alternative_cookies_session', 0)) {
$value = db_query("SELECT value FROM {cleantalk_sessions} WHERE id = :id AND name = :name", array(
':id' => self::_apbct_alt_session__id__get(),
':name' => $name,
))
->fetchField();
if (false !== $value) {
return $value;
}
else {
return null;
}
}
else {
if (isset($_COOKIE[$name])) {
return $_COOKIE[$name];
}
else {
return null;
}
}
}
private static function _apbct_alt_sessions__remove_old() {
if (rand(0, 1000) < APBCT_SESSION__CHANCE_TO_CLEAN) {
db_query("DELETE\n FROM {cleantalk_sessions}\n WHERE last_update < NOW() - INTERVAL " . APBCT_SESSION__LIVE_TIME . " SECOND\n LIMIT 100000;");
}
}
private static function _apbct_alt_session__id__get() {
$id = CleantalkHelper::ip_get(array(
'real',
)) . filter_input(INPUT_SERVER, 'HTTP_USER_AGENT') . filter_input(INPUT_SERVER, 'HTTP_ACCEPT_LANGUAGE');
return hash('sha256', $id);
}
public static function _cleantalk_apbct_cookies_test() {
if (variable_get('cleantalk_alternative_cookies_session', 0)) {
return 1;
}
$cookie_test = json_decode(stripslashes(self::_apbct_getcookie('apbct_cookies_test')), true);
if (is_null($cookie_test)) {
return null;
}
$check_string = trim(variable_get('cleantalk_authkey', ''));
foreach ($cookie_test['cookies_names'] as $cookie_name) {
$check_string .= self::_apbct_getcookie($cookie_name);
}
unset($cokie_name);
if ($cookie_test['check_value'] == md5($check_string)) {
return 1;
}
else {
return 0;
}
}
public static function _cleantalk_get_fields_any($arr, $message = array(), $email = null, $nickname = array(
'nick' => '',
'first' => '',
'last' => '',
), $subject = null, $contact = true, $prev_name = '') {
$skip_params = array(
'ipn_track_id',
'txn_type',
'payment_status',
'ccbill_ipn',
'ct_checkjs',
'api_mode',
'loadLastCommentId',
);
$obfuscate_params = array(
'password',
'pass',
'pwd',
'pswd',
);
$skip_fields_with_strings = array(
'ct_checkjs',
'nonce',
'security',
'http_referer',
'timestamp',
'captcha',
'form_key',
'submit_entry',
'form_id',
'ccf_form',
'form_page',
'iphorm_uid',
'form_url',
'post_id',
'iphorm_ajax',
'iphorm_id',
'fs_postonce_1',
'fscf_submitted',
'mailto_id',
'si_contact_action',
'formData_id',
'formData_settings',
'formData_fields_\\d+_id',
'formData_fields_\\d+_files.*',
'recipient_signature',
'output_\\d+_\\w{0,2}',
'_formId',
'_returnLink',
'_save',
'_facebook',
'_social',
'user_login-',
'_wpcf7',
'avatar__file_image_data',
'form_build_id',
'form_token',
'op',
'details_page_num',
'details_page_count',
'details_finished',
);
if (variable_get('cleantalk_fields_exclusions')) {
$fields_exclusions = explode(',', variable_get('cleantalk_fields_exclusions'));
foreach ($fields_exclusions as &$fields_exclusion) {
if (preg_match('/\\[*\\]/', $fields_exclusion)) {
$fields_exclusion = str_replace(array(
'[',
']',
), array(
'_',
'',
), $fields_exclusion);
}
}
if ($fields_exclusions && is_array($fields_exclusions) && count($fields_exclusions) > 0) {
$skip_fields_with_strings = array_merge($skip_fields_with_strings, $fields_exclusions);
}
}
$skip_message_post = array(
'edd_action',
);
foreach ($skip_params as $value) {
if (@array_key_exists($value, $_GET) || @array_key_exists($value, $_POST)) {
$contact = false;
}
}
unset($value);
if (count($arr)) {
foreach ($arr as $key => $value) {
if (gettype($value) == 'string') {
$decoded_json_value = json_decode($value, true);
if ($decoded_json_value !== null) {
$value = $decoded_json_value;
}
}
if (strpos($key, 'ajax_') !== false) {
continue;
}
if (!is_array($value) && !is_object($value)) {
if (in_array($key, $skip_params, true) && $key != 0 && $key != '' || preg_match("/^ct_checkjs/", $key)) {
$contact = false;
}
if ($value === '') {
continue;
}
foreach ($skip_fields_with_strings as $needle) {
if (preg_match("/^" . $needle . "\$/", $prev_name . $key) == 1) {
continue 2;
}
}
unset($needle);
foreach ($obfuscate_params as $needle) {
if (strpos($key, $needle) !== false) {
$value = self::_cleantalk_obfuscate_param($value);
continue 2;
}
}
unset($needle);
$value = urldecode(trim($value));
$value_for_email = trim($value);
if (!$email && preg_match("/^\\S+@\\S+\\.\\S+\$/", $value_for_email)) {
$email = $value_for_email;
}
elseif (preg_match("/name/i", $key)) {
preg_match("/((name.?)?(your|first|for)(.?name)?)\$/", $key, $match_forename);
preg_match("/((name.?)?(last|family|second|sur)(.?name)?)\$/", $key, $match_surname);
preg_match("/^(name.?)?(nick|user)(.?name)?\$/", $key, $match_nickname);
if (count($match_forename) > 1) {
$nickname['first'] = $value;
}
elseif (count($match_surname) > 1) {
$nickname['last'] = $value;
}
elseif (count($match_nickname) > 1) {
$nickname['nick'] = $value;
}
else {
$nickname[$prev_name . $key] = $value;
}
}
elseif ($subject === null && preg_match("/subject/i", $key)) {
$subject = $value;
}
else {
$message[$prev_name . $key] = $value;
}
}
elseif (!is_object($value)) {
$prev_name_original = $prev_name;
$prev_name = $prev_name === '' ? $key . '_' : $prev_name . $key . '_';
$temp = self::_cleantalk_get_fields_any($value, $message, $email, $nickname, $subject, $contact, $prev_name);
$message = $temp['message'];
$email = $temp['email'] ? $temp['email'] : null;
$nickname = $temp['nickname'] ? $temp['nickname'] : null;
$subject = $temp['subject'] ? $temp['subject'] : null;
if ($contact === true) {
$contact = $temp['contact'] === false ? false : true;
}
$prev_name = $prev_name_original;
}
}
unset($key, $value);
}
foreach ($skip_message_post as $v) {
if (isset($_POST[$v])) {
$message = null;
break;
}
}
unset($v);
if ($prev_name === '') {
if (!empty($nickname)) {
$nickname_str = '';
foreach ($nickname as $value) {
$nickname_str .= $value ? $value . " " : "";
}
unset($value);
}
$nickname = $nickname_str;
}
$return_param = array(
'email' => $email,
'nickname' => $nickname,
'subject' => $subject,
'contact' => $contact,
'message' => $message,
);
return $return_param;
}
public static function _cleantalk_obfuscate_param($value = null) {
if ($value && (!is_object($value) || !is_array($value))) {
$length = strlen($value);
$value = str_repeat('*', $length);
}
return $value;
}
public static function _cleantalk_die($message) {
print '<!DOCTYPE html><!-- Ticket #11289, IE bug fix: always pad the error page with enough characters such that it is greater than 512 bytes, even after gzip compression abcdefghijklmnopqrstuvwxyz1234567890aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz11223344556677889900abacbcbdcdcededfefegfgfhghgihihjijikjkjlklkmlmlnmnmononpopoqpqprqrqsrsrtstsubcbcdcdedefefgfabcadefbghicjkldmnoepqrfstugvwxhyz1i234j567k890laabmbccnddeoeffpgghqhiirjjksklltmmnunoovppqwqrrxsstytuuzvvw0wxx1yyz2z113223434455666777889890091abc2def3ghi4jkl5mno6pqr7stu8vwx9yz11aab2bcc3dd4ee5ff6gg7hh8ii9j0jk1kl2lmm3nnoo4p5pq6qrr7ss8tt9uuvv0wwx1x2yyzz13aba4cbcb5dcdc6dedfef8egf9gfh0ghg1ihi2hji3jik4jkj5lkl6kml7mln8mnm9ono--><html xmlns="http://www.w3.org/1999/xhtml" lang="en-US"><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Blacklisted</title> <style type="text/css"> html { background: #f1f1f1; } body { background: #fff; color: #444; font-family: "Open Sans", sans-serif; margin: 2em auto; padding: 1em 2em; max-width: 700px; -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13); box-shadow: 0 1px 3px rgba(0,0,0,0.13); } h1 { border-bottom: 1px solid #dadada; clear: both; color: #666; font: 24px "Open Sans", sans-serif; margin: 30px 0 0 0; padding: 0; padding-bottom: 7px; } #error-page { margin-top: 50px; } #error-page p { font-size: 14px; line-height: 1.5; margin: 25px 0 20px; } a { color: #21759B; text-decoration: none; } a:hover { color: #D54E21; } </style></head><body id="error-page"> <p><center><b style="color: #49C73B;">Clean</b><b style="color: #349ebf;">Talk.</b> Spam protection</center><br><br>' . $message . '<script>setTimeout("history.back()", 5000);</script></p><p><a href="javascript:history.back()">« Back</a></p></body></html>';
drupal_exit();
}
public static function _cleantalk_get_checkjs_value() {
return md5(variable_get('cleantalk_authkey', ''));
}
public static function _cleantalk_check_spam($spam_check, $form_errors = null) {
global $user, $cleantalk_executed, $language;
if (empty($spam_check) || !isset($spam_check['type'])) {
return;
}
if ($cleantalk_executed) {
return;
}
if (user_access('administer modules') && path_is_admin(current_path())) {
return;
}
$roles = variable_get('cleantalk_roles_exclusions');
if ($roles) {
$set_check = true;
foreach ($roles as $role_id) {
if (self::_cleantalk_user_has_role_id($role_id)) {
$set_check = false;
}
}
if (!$set_check) {
return;
}
}
if ($user->uid > 0 && module_exists('comment')) {
$result = db_query('SELECT count(*) AS count FROM {comment} WHERE uid=:uid AND status=1', array(
':uid' => $user->uid,
));
$count = intval($result
->fetchObject()->count);
$ct_comments = variable_get('cleantalk_check_comments_min_approved', 3);
if ($count >= $ct_comments) {
return;
}
}
$url_check = true;
if (variable_get('cleantalk_url_exclusions', '')) {
$url_exclusion = explode(',', variable_get('cleantalk_url_exclusions', ''));
if ($url_exclusion && is_array($url_exclusion) && count($url_exclusion) > 0) {
$check_type = variable_get('cleantalk_url_exclusions_regexp', 0);
foreach ($url_exclusion as $key => $value) {
if ($check_type == 1) {
if (@preg_match('/' . $value . '/', $_SERVER['REQUEST_URI'])) {
$url_check = false;
}
}
else {
if ($_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] === $value) {
$url_check = false;
}
}
if (strpos($value, 'node') !== false && strpos($_SERVER['REQUEST_URI'], 'q=comment/reply/') !== false) {
$get_node = array_values(array_slice(explode('/', $value), -1))[0];
$current_reply_id = array_values(array_slice(explode('/', $_SERVER['REQUEST_URI']), -1))[0];
if ($get_node == $current_reply_id) {
$url_check = false;
}
}
if (strpos($_SERVER['REQUEST_URI'], $value) !== false) {
$url_check = false;
}
}
}
}
if (!$url_check) {
return;
}
$ct_authkey = variable_get('cleantalk_authkey', '');
$ct_ws = self::_cleantalk_get_ws();
$ct = new Cleantalk();
$ct->work_url = $ct_ws['work_url'];
$ct->server_url = $ct_ws['server_url'];
$ct->server_ttl = $ct_ws['server_ttl'];
$ct->server_changed = $ct_ws['server_changed'];
$ct_options = array(
'access_key' => $ct_authkey,
'cleantalk_check_comments' => variable_get('cleantalk_check_comments', ''),
'cleantalk_check_comments_automod' => variable_get('cleantalk_check_comments_automod', ''),
'cleantalk_check_comments_min_approved' => variable_get('cleantalk_check_comments_min_approved', 3),
'cleantalk_check_register' => variable_get('cleantalk_check_register', ''),
'cleantalk_check_webforms' => variable_get('cleantalk_check_webforms', ''),
'cleantalk_check_contact_forms' => variable_get('cleantalk_check_contact_forms', ''),
'cleantalk_check_forum_topics' => variable_get('cleantalk_check_forum_topics', ''),
'cleantalk_check_ccf' => variable_get('cleantalk_check_ccf', ''),
'cleantalk_check_search_form' => variable_get('cleantalk_check_search_form', 1),
'cleantalk_add_search_noindex' => variable_get('cleantalk_add_search_noindex', 0),
'cleantalk_url_exclusions' => variable_get('cleantalk_url_exclusions', ''),
'cleantalk_url_exclusions_regexp' => variable_get('cleantalk_url_exclusions_regexp', 0),
'cleantalk_fields_exclusions' => variable_get('cleantalk_fields_exclusions', ''),
'cleantalk_roles_exclusions' => variable_get('cleantalk_roles_exclusions') ? implode(',', variable_get('cleantalk_roles_exclusions')) : '',
'cleantalk_set_cookies' => variable_get('cleantalk_set_cookies', 1),
'cleantalk_alternative_cookies_session' => variable_get('cleantalk_alternative_cookies_session', 0),
'cleantalk_sfw' => variable_get('cleantalk_sfw', ''),
'cleantalk_ssl' => variable_get('cleantalk_ssl', ''),
'cleantalk_link' => variable_get('cleantalk_link', ''),
);
$ct_request = new CleantalkRequest();
$ct_request->auth_key = $ct_authkey;
$ct_request->agent = CLEANTALK_USER_AGENT;
$ct_request->response_lang = $language->language;
$ct_request->js_on = isset($_COOKIE['ct_check_js']) && $_COOKIE['ct_check_js'] == self::_cleantalk_get_checkjs_value() ? 1 : 0;
$ct_request->sender_info = drupal_json_encode(array(
'cms_lang' => $language->language,
'REFFERRER' => isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null,
'page_url' => isset($_SERVER['SERVER_NAME'], $_SERVER['REQUEST_URI']) ? htmlspecialchars($_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']) : null,
'USER_AGENT' => isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null,
'ct_options' => drupal_json_encode($ct_options),
'js_timezone' => isset($_COOKIE['ct_timezone']) ? $_COOKIE['ct_timezone'] : '',
'mouse_cursor_positions' => isset($_COOKIE['ct_pointer_data']) ? json_decode($_COOKIE['ct_pointer_data']) : '',
'key_press_timestamp' => isset($_COOKIE['ct_fkp_timestamp']) ? $_COOKIE['ct_fkp_timestamp'] : '',
'page_set_timestamp' => isset($_COOKIE['ct_ps_timestamp']) ? $_COOKIE['ct_ps_timestamp'] : 0,
'REFFERRER_PREVIOUS' => self::_apbct_getcookie('apbct_prev_referer'),
'cookies_enabled' => self::_cleantalk_apbct_cookies_test(),
'form_validation' => $form_errors && is_array($form_errors) ? json_encode(array(
'validation_notice' => json_encode($form_errors),
'page_url' => $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],
)) : null,
));
$ct_request->post_info = drupal_json_encode(array(
'comment_type' => $spam_check['type'],
'post_url' => isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null,
));
$ct_request->sender_email = isset($spam_check['sender_email']) ? $spam_check['sender_email'] : '';
$ct_request->sender_nickname = isset($spam_check['sender_nickname']) ? $spam_check['sender_nickname'] : '';
$ct_request->sender_user_role = implode(',', $user->roles);
$ct_request->sender_ip = CleantalkHelper::ip_get(array(
'real',
), false);
$ct_request->x_forwarded_for = CleantalkHelper::ip_get(array(
'x_forwarded_for',
), false);
$ct_request->x_real_ip = CleantalkHelper::ip_get(array(
'x_real_ip',
), false);
$ct_request->submit_time = self::_cleantalk_get_submit_time();
if ($spam_check['type'] == 'custom_contact_form' && isset($_SERVER['HTTP_REFERER']) && htmlspecialchars($_SERVER['HTTP_REFERER']) === 'https://www.google.com/') {
$spam_check['type'] = 'site_search_drupal7';
}
switch ($spam_check['type']) {
case 'comment':
case 'contact':
case 'webform':
case 'custom_contact_form':
case 'site_search_drupal7':
$timelabels_key = 'mail_error_comment';
if (isset($spam_check['message_title']) && is_array($spam_check['message_title'])) {
$spam_check['message_title'] = implode("\n\n", $spam_check['message_title']);
}
if (isset($spam_check['message_body']) && is_array($spam_check['message_body'])) {
$spam_check['message_body'] = implode("\n\n", $spam_check['message_body']);
}
$ct_request->message = $spam_check['message_title'] . " \n\n" . preg_replace('/\\s+/', ' ', str_replace("<br />", " ", $spam_check['message_body']));
$ct_result = $ct
->isAllowMessage($ct_request);
break;
case 'register':
$timelabels_key = 'mail_error_reg';
$ct_request->tz = !empty($spam_check['timezone']) ? $spam_check['timezone'] : '';
if (arg(0) != 'user') {
$ct_request->js_on = 1;
}
$ct_result = $ct
->isAllowUser($ct_request);
break;
}
$cleantalk_executed = true;
$ret_val = array();
if ($ct_result) {
$ret_val['ct_request_id'] = $ct_result->id;
if ($ct->server_change) {
self::_cleantalk_set_ws($ct->work_url, $ct->server_ttl, REQUEST_TIME);
}
if (!empty($ct_result->errstr) || !empty($ct_result->inactive) && $ct_result->inactive == 1) {
$ret_val['errno'] = 1;
if ($ct_request->js_on == 0) {
$ret_val['allow'] = 0;
}
$err_title = $_SERVER['SERVER_NAME'] . ' - CleanTalk hook error';
if (!empty($ct_result->errstr)) {
$ret_val['errstr'] = self::_cleantalk_filter_response($ct_result->errstr);
}
else {
$ret_val['errstr'] = self::_cleantalk_filter_response($ct_result->comment);
}
$send_flag = FALSE;
$result = db_select('cleantalk_timelabels', 'c')
->fields('c', array(
'ct_value',
))
->condition('ct_key', $timelabels_key, '=')
->execute();
if ($result
->rowCount() == 0) {
$send_flag = TRUE;
}
elseif (REQUEST_TIME - 900 > $result
->fetchObject()->ct_value) {
$send_flag = TRUE;
}
if ($send_flag) {
db_merge('cleantalk_timelabels')
->key(array(
'ct_key' => $timelabels_key,
))
->fields(array(
'ct_value' => REQUEST_TIME,
))
->execute();
$to = variable_get('site_mail', ini_get('sendmail_from'));
if (!empty($to)) {
drupal_mail("cleantalk", $timelabels_key, $to, language_default(), array(
'subject' => $err_title,
'body' => $ret_val['errstr'],
'headers' => array(),
), $to, TRUE);
}
}
return $ret_val;
}
$ret_val['errno'] = 0;
if ($ct_result->allow == 1) {
$ret_val['allow'] = 1;
self::_cleantalk_ct_result('set', $ct_result->id, $ret_val['allow']);
}
else {
$ret_val['allow'] = 0;
$ret_val['ct_result_comment'] = self::_cleantalk_filter_response($ct_result->comment);
if ($spam_check['type'] == 'comment') {
self::_cleantalk_ct_result('set', $ct_result->id, $ret_val['allow'], $ret_val['ct_result_comment']);
$ret_val['stop_queue'] = $ct_result->stop_queue;
}
}
}
return $ret_val;
}
public static function _cleantalk_filter_response($ct_response) {
if (preg_match('//u', $ct_response)) {
$err_str = preg_replace('/\\*\\*\\*/iu', '', $ct_response);
}
else {
$err_str = preg_replace('/\\*\\*\\*/i', '', $ct_response);
}
return filter_xss($err_str, array(
'a',
));
}
public static function _cleantalk_ct_result($cmd = 'get', $id = '', $allow = 1, $comment = '') {
static $request_id = '';
static $result_allow = 1;
static $result_comment = '';
if ($cmd == 'set') {
$request_id = $id;
$result_allow = $allow;
$result_comment = $comment;
}
else {
return array(
'ct_request_id' => $request_id,
'ct_result_allow' => $result_allow,
'ct_result_comment' => $result_comment,
);
}
}
public static function _cleantalk_get_ws() {
return array(
'work_url' => variable_get('cleantalk_work_url', ''),
'server_url' => variable_get('cleantalk_server_url', 'http://moderate.cleantalk.org'),
'server_ttl' => variable_get('cleantalk_server_ttl', 0),
'server_changed' => variable_get('cleantalk_server_changed', 0),
);
}
public static function _cleantalk_set_ws($work_url = 'http://moderate.cleantalk.org', $server_ttl = 0, $server_changed = 0) {
variable_set('cleantalk_work_url', $work_url);
variable_set('cleantalk_server_ttl', $server_ttl);
variable_set('cleantalk_server_changed', $server_changed);
}
public static function _cleantalk_check_form_submit_handlers($submitHandlers) {
if ($submitHandlers && is_array($submitHandlers)) {
foreach ($submitHandlers as $handler) {
if ($handler === 'submit') {
return true;
}
}
}
return false;
}
public static function _cleantalk_user_has_role_id($role_id, $user = NULL) {
if ($user == NULL) {
global $user;
}
if (is_array($user->roles) && in_array($role_id, array_keys($user->roles))) {
return TRUE;
}
return FALSE;
}
public static function cleantalk_get_user_roles() {
$roles = user_roles();
asort($roles);
return $roles;
}
public static function cleantalk_get_user_roles_default() {
$roles = self::cleantalk_get_user_roles();
foreach ($roles as $role_id => $role_name) {
if (strpos('administrator', $role_name) === false) {
unset($roles[$role_id]);
}
}
return $default_roles = array_keys($roles);
}
public static function _cleantalk_apbct_remote_call__perform() {
$remote_calls_config = variable_get('cleantalk_remote_calls', array());
$remote_action = $_GET['spbc_remote_call_action'];
$auth_key = trim(variable_get('cleantalk_authkey', ''));
if (array_key_exists($remote_action, $remote_calls_config)) {
if (time() - $remote_calls_config[$remote_action]['last_call'] > APBCT_REMOTE_CALL_SLEEP) {
$remote_calls[$remote_action]['last_call'] = time();
variable_set('remote_calls', $remote_calls);
if (strtolower($_GET['spbc_remote_call_token']) == strtolower(md5($auth_key))) {
if ($_GET['spbc_remote_call_action'] == 'close_renew_banner') {
variable_set('cleantalk_show_renew_banner', 0);
die('OK');
}
elseif ($_GET['spbc_remote_call_action'] == 'sfw_update') {
$sfw = new CleantalkSFW();
$result = $sfw
->sfw_update($auth_key);
die(empty($result['error']) ? 'OK' : 'FAIL ' . json_encode(array(
'error' => $result['error_string'],
)));
}
elseif ($_GET['spbc_remote_call_action'] == 'sfw_send_logs') {
$sfw = new CleantalkSFW();
$result = $sfw
->sfw_send_logs($auth_key);
die(empty($result['error']) ? 'OK' : 'FAIL ' . json_encode(array(
'error' => $result['error_string'],
)));
}
elseif ($_GET['spbc_remote_call_action'] == 'update_plugin') {
}
else {
die('FAIL ' . json_encode(array(
'error' => 'UNKNOWN_ACTION_2',
)));
}
}
else {
die('FAIL ' . json_encode(array(
'error' => 'WRONG_TOKEN',
)));
}
}
else {
die('FAIL ' . json_encode(array(
'error' => 'TOO_MANY_ATTEMPTS',
)));
}
}
else {
die('FAIL ' . json_encode(array(
'error' => 'UNKNOWN_ACTION',
)));
}
}
}