function spambot_sfs_request_multiple in Spambot 8
Invoke www.stopforumspam.com's api with multiple usernames, emails, and ips.
Note: Results in $data are not guaranteed to be in the same order as the request in $query when caching is enabled.
Parameters
array $query: An associative array indexed by query type ('email', username', and/or 'ip', each an array of values to be queried). For example: ['email' => ['blah@blah.com', 'blah2@blah2.com']].
array $data: An array that will be filled with the data from www.stopforumspam.com.
Return value
bool TRUE on successful request (and $data will contain the data) FALSE otherwise.
1 call to spambot_sfs_request_multiple()
- spambot_sfs_request in ./
spambot.module - Invoke www.stopforumspam.com's api with single username, email, and/or ip.
File
- ./
spambot.module, line 464 - Main module file.
Code
function spambot_sfs_request_multiple(array $query, array &$data) {
// An empty request results in no match.
if (empty($query)) {
return FALSE;
}
// Attempt to return a response from the cache bins if cache is enabled.
$config = \Drupal::config('spambot.settings');
$cache_enabled = $config
->get('spambot_enable_cache');
$cache_data = [];
if ($cache_enabled) {
// For each query type, see if each value is present in the cache, and if so
// retain it in $cache_data and remove it from the query.
foreach ([
'email',
'username',
'ip',
] as $field_name) {
foreach ($query[$field_name] ?? [] as $index => $query_datum) {
$cache_dataum = \Drupal::cache('spambot')
->get("{$field_name}:{$query_datum}");
if ($cache_dataum) {
$cache_data[$field_name][$index] = $cache_dataum->data;
unset($query[$field_name][$index]);
}
}
if (empty($query[$field_name])) {
unset($query[$field_name]);
}
}
// Serve only a cached response if one exists.
if (empty($query)) {
$data = $cache_data;
$data['success'] = TRUE;
return TRUE;
}
}
// Use php serialisation format.
$query['f'] = 'serial';
$url = 'http://www.stopforumspam.com/api?' . urldecode(http_build_query($query, '', '&'));
$response = \Drupal::httpClient()
->get($url, [
'headers' => [
'Accept' => 'text/plain',
],
]);
$status_code = $response
->getStatusCode();
if ($status_code == 200) {
$data = unserialize($response
->getBody()
->getContents());
// Store responses to the cache for fast lookups.
if ($cache_enabled) {
$expire = $config
->get('spambot_cache_expire');
$expire = $expire != CacheBackendInterface::CACHE_PERMANENT ? time() + $expire : CacheBackendInterface::CACHE_PERMANENT;
$expire_false = $config
->get('spambot_cache_expire_false');
$expire_false = $expire_false != CacheBackendInterface::CACHE_PERMANENT ? time() + $expire_false : CacheBackendInterface::CACHE_PERMANENT;
foreach ([
'email',
'username',
'ip',
] as $field_name) {
foreach ($data[$field_name] ?? [] as $result) {
$expire_email = $result['appears'] ? $expire : $expire_false;
\Drupal::cache('spambot')
->set("{$field_name}:{$result['value']}", $result, $expire_email);
}
}
}
// Merge in cached results.
$data = array_merge_recursive($data, $cache_data);
$vars = [
'%url' => $url,
'%data' => serialize($data),
];
if (!empty($data['success'])) {
\Drupal::logger('spambot')
->notice("Success: %url %data", $vars);
return TRUE;
}
else {
\Drupal::logger('spambot')
->notice("Request unsuccessful: %url %data", $vars);
}
}
else {
\Drupal::logger('spambot')
->error("Error contacting service: %url", [
'%url' => $url,
]);
}
return FALSE;
}