class DatabaseBackend in Zircon Profile 8
Same name in this branch
- 8 core/lib/Drupal/Core/Flood/DatabaseBackend.php \Drupal\Core\Flood\DatabaseBackend
- 8 core/lib/Drupal/Core/Cache/DatabaseBackend.php \Drupal\Core\Cache\DatabaseBackend
Same name and namespace in other branches
- 8.0 core/lib/Drupal/Core/Flood/DatabaseBackend.php \Drupal\Core\Flood\DatabaseBackend
Defines the database flood backend. This is the default Drupal backend.
Hierarchy
- class \Drupal\Core\Flood\DatabaseBackend implements FloodInterface
Expanded class hierarchy of DatabaseBackend
1 string reference to 'DatabaseBackend'
- core.services.yml in core/
core.services.yml - core/core.services.yml
1 service uses DatabaseBackend
File
- core/
lib/ Drupal/ Core/ Flood/ DatabaseBackend.php, line 16 - Contains \Drupal\Core\Flood\DatabaseBackend.
Namespace
Drupal\Core\FloodView source
class DatabaseBackend implements FloodInterface {
/**
* The database connection used to store flood event information.
*
* @var \Drupal\Core\Database\Connection
*/
protected $connection;
/**
* The request stack.
*
* @var \Symfony\Component\HttpFoundation\RequestStack
*/
protected $requestStack;
/**
* Construct the DatabaseBackend.
*
* @param \Drupal\Core\Database\Connection $connection
* The database connection which will be used to store the flood event
* information.
* @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
* The request stack used to retrieve the current request.
*/
public function __construct(Connection $connection, RequestStack $request_stack) {
$this->connection = $connection;
$this->requestStack = $request_stack;
}
/**
* {@inheritdoc}
*/
public function register($name, $window = 3600, $identifier = NULL) {
if (!isset($identifier)) {
$identifier = $this->requestStack
->getCurrentRequest()
->getClientIp();
}
$this->connection
->insert('flood')
->fields(array(
'event' => $name,
'identifier' => $identifier,
'timestamp' => REQUEST_TIME,
'expiration' => REQUEST_TIME + $window,
))
->execute();
}
/**
* {@inheritdoc}
*/
public function clear($name, $identifier = NULL) {
if (!isset($identifier)) {
$identifier = $this->requestStack
->getCurrentRequest()
->getClientIp();
}
$this->connection
->delete('flood')
->condition('event', $name)
->condition('identifier', $identifier)
->execute();
}
/**
* {@inheritdoc}
*/
public function isAllowed($name, $threshold, $window = 3600, $identifier = NULL) {
if (!isset($identifier)) {
$identifier = $this->requestStack
->getCurrentRequest()
->getClientIp();
}
$number = $this->connection
->select('flood', 'f')
->condition('event', $name)
->condition('identifier', $identifier)
->condition('timestamp', REQUEST_TIME - $window, '>')
->countQuery()
->execute()
->fetchField();
return $number < $threshold;
}
/**
* {@inheritdoc}
*/
public function garbageCollection() {
return $this->connection
->delete('flood')
->condition('expiration', REQUEST_TIME, '<')
->execute();
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DatabaseBackend:: |
protected | property | The database connection used to store flood event information. | |
DatabaseBackend:: |
protected | property | The request stack. | |
DatabaseBackend:: |
public | function |
Makes the flood control mechanism forget an event for the current visitor. Overrides FloodInterface:: |
|
DatabaseBackend:: |
public | function |
Cleans up expired flood events. This method is called automatically on
cron run. Overrides FloodInterface:: |
|
DatabaseBackend:: |
public | function |
Checks whether a user is allowed to proceed with the specified event. Overrides FloodInterface:: |
|
DatabaseBackend:: |
public | function |
Registers an event for the current visitor to the flood control mechanism. Overrides FloodInterface:: |
|
DatabaseBackend:: |
public | function | Construct the DatabaseBackend. |