Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
3 / 3 |
CRAP | |
100.00% |
10 / 10 |
posting | |
100.00% |
1 / 1 |
|
100.00% |
3 / 3 |
5 | |
100.00% |
10 / 10 |
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
set_lock_name | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
acquire | |
100.00% |
1 / 1 |
3 | |
100.00% |
5 / 5 |
<?php | |
/** | |
* | |
* This file is part of the phpBB Forum Software package. | |
* | |
* @copyright (c) phpBB Limited <https://www.phpbb.com> | |
* @license GNU General Public License, version 2 (GPL-2.0) | |
* | |
* For full copyright and license information, please see | |
* the docs/CREDITS.txt file. | |
* | |
*/ | |
namespace phpbb\lock; | |
use phpbb\cache\driver\driver_interface as cache_interface; | |
use phpbb\config\config; | |
class posting | |
{ | |
/** @var cache_interface */ | |
private $cache; | |
/** @var config */ | |
private $config; | |
/** @var string */ | |
private $lock_name = ''; | |
/** | |
* Constructor for posting lock | |
* | |
* @param cache_interface $cache | |
* @param config $config | |
*/ | |
public function __construct(cache_interface $cache, config $config) | |
{ | |
$this->cache = $cache; | |
$this->config = $config; | |
} | |
/** | |
* Set lock name | |
* | |
* @param int $creation_time Creation time of form, must be checked already | |
* @param string $form_token Form token used for form, must be checked already | |
* | |
* @return void | |
*/ | |
private function set_lock_name(int $creation_time, string $form_token): void | |
{ | |
$this->lock_name = sha1(((string) $creation_time) . $form_token) . '_posting_lock'; | |
} | |
/** | |
* Acquire lock for current posting form submission | |
* | |
* @param int $creation_time Creation time of form, must be checked already | |
* @param string $form_token Form token used for form, must be checked already | |
* | |
* @return bool True if lock could be acquired, false if not | |
*/ | |
public function acquire(int $creation_time, string $form_token): bool | |
{ | |
$this->set_lock_name($creation_time, $form_token); | |
// Lock is held for session, cannot acquire it unless special flag for testing is set | |
if ($this->cache->_exists($this->lock_name) && !$this->config->offsetExists('ci_tests_no_lock_posting')) | |
{ | |
return false; | |
} | |
$this->cache->put($this->lock_name, true, $this->config['flood_interval']); | |
return true; | |
} | |
} |