Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
posting
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
3 / 3
5
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 set_lock_name
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 acquire
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2/**
3 *
4 * This file is part of the phpBB Forum Software package.
5 *
6 * @copyright (c) phpBB Limited <https://www.phpbb.com>
7 * @license GNU General Public License, version 2 (GPL-2.0)
8 *
9 * For full copyright and license information, please see
10 * the docs/CREDITS.txt file.
11 *
12 */
13
14namespace phpbb\lock;
15
16use phpbb\cache\driver\driver_interface as cache_interface;
17use phpbb\config\config;
18
19class posting
20{
21    /** @var cache_interface */
22    private $cache;
23
24    /** @var config */
25    private $config;
26
27    /** @var string */
28    private $lock_name = '';
29
30    /**
31     * Constructor for posting lock
32     *
33     * @param cache_interface $cache
34     * @param config $config
35     */
36    public function __construct(cache_interface $cache, config $config)
37    {
38        $this->cache = $cache;
39        $this->config = $config;
40    }
41
42    /**
43     * Set lock name
44     *
45     * @param int $creation_time Creation time of form, must be checked already
46     * @param string $form_token Form token used for form, must be checked already
47     *
48     * @return void
49     */
50    private function set_lock_name(int $creation_time, string $form_token): void
51    {
52        $this->lock_name = sha1(((string) $creation_time) . $form_token) . '_posting_lock';
53    }
54
55    /**
56     * Acquire lock for current posting form submission
57     *
58     * @param int $creation_time Creation time of form, must be checked already
59     * @param string $form_token Form token used for form, must be checked already
60     *
61     * @return bool True if lock could be acquired, false if not
62     */
63    public function acquire(int $creation_time, string $form_token): bool
64    {
65        $this->set_lock_name($creation_time, $form_token);
66
67        // Lock is held for session, cannot acquire it unless special flag for testing is set
68        if ($this->cache->_exists($this->lock_name) && !$this->config->offsetExists('ci_tests_no_lock_posting'))
69        {
70            return false;
71        }
72
73        $this->cache->put($this->lock_name, true, $this->config['flood_interval']);
74
75        return true;
76    }
77}