Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
84.00% covered (warning)
84.00%
21 / 25
83.33% covered (warning)
83.33%
5 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
manager
84.00% covered (warning)
84.00%
21 / 25
83.33% covered (warning)
83.33%
5 / 6
17.05
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 get_resume_data
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
4
 update_resume_data
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
3
 schedule
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
3
 schedule_all
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 find_reparser
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
12
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\textreparser;
15
16class manager
17{
18    /**
19     * @var \phpbb\config\config
20     */
21    protected $config;
22
23    /**
24     * @var \phpbb\config\db_text
25     */
26    protected $config_text;
27
28    /**
29     * @var \phpbb\di\service_collection
30     */
31    protected $reparsers;
32
33    /**
34     * @var array
35     */
36    protected $resume_data;
37
38    /**
39     * Constructor
40     *
41     * @param \phpbb\config\config            $config
42     * @param \phpbb\config\db_text            $config_text
43     * @param \phpbb\di\service_collection    $reparsers
44     */
45    public function __construct(\phpbb\config\config $config, \phpbb\config\db_text $config_text, \phpbb\di\service_collection $reparsers)
46    {
47        $this->config = $config;
48        $this->config_text = $config_text;
49        $this->reparsers = $reparsers;
50    }
51
52    /**
53     * Loads resume data from the database
54     *
55     * @param string    $name    Name of the reparser to which the resume data belongs
56     *
57     * @return array
58     */
59    public function get_resume_data($name)
60    {
61        if ($this->resume_data === null)
62        {
63            $resume_data = $this->config_text->get('reparser_resume');
64            $this->resume_data = !empty($resume_data) ? unserialize($resume_data) : array();
65        }
66
67        return isset($this->resume_data[$name]) ? $this->resume_data[$name] : array();
68    }
69
70    /**
71     * Updates the resume data in the database
72     *
73     * @param string    $name        Name of the reparser to which the resume data belongs
74     * @param int        $min        Lowest record ID
75     * @param int        $current    Current record ID
76     * @param int        $size        Number of records to process at a time
77     * @param bool        $update_db    True if the resume data should be written to the database, false if not. (default: true)
78     */
79    public function update_resume_data($name, $min, $current, $size, $update_db = true)
80    {
81        // Prevent overwriting the old, stored array
82        if ($this->resume_data === null)
83        {
84            $this->get_resume_data('');
85        }
86
87        $this->resume_data[$name] = array(
88            'range-min'        => $min,
89            'range-max'        => $current,
90            'range-size'    => $size,
91        );
92
93        if ($update_db)
94        {
95            $this->config_text->set('reparser_resume', serialize($this->resume_data));
96        }
97    }
98
99    /**
100     * Sets the interval for a text_reparser cron task
101     *
102     * @param string    $name        Name of the reparser to schedule
103     * @param int        $interval    Interval in seconds, 0 to disable the cron task
104     */
105    public function schedule($name, $interval)
106    {
107        if (isset($this->reparsers[$name]) && isset($this->config[$name . '_cron_interval']))
108        {
109            $this->config->set($name . '_cron_interval', $interval);
110        }
111    }
112
113    /**
114     * Sets the interval for all text_reparser cron tasks
115     *
116     * @param int    $interval    Interval in seconds, 0 to disable the cron task
117     */
118    public function schedule_all($interval)
119    {
120        // This way we don't construct every registered reparser
121        $reparser_array = array_keys($this->reparsers->getArrayCopy());
122
123        foreach ($reparser_array as $reparser)
124        {
125            $this->schedule($reparser, $interval);
126        }
127    }
128
129    /**
130     * Finds a reparser by name.
131     *
132     * If there is no reparser with the specified name, null is returned.
133     *
134     * @param string $name Name of the reparser to look up.
135     * @return string|null A reparser service name, or null.
136     */
137    public function find_reparser(string $name)
138    {
139        foreach ($this->reparsers as $service => $reparser)
140        {
141            if ($reparser->get_name() == $name)
142            {
143                return $service;
144            }
145        }
146        return null;
147    }
148}