Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
reparser.php
001 <?php
002 /**
003 *
004 * This file is part of the phpBB Forum Software package.
005 *
006 * @copyright (c) phpBB Limited <https://www.phpbb.com>
007 * @license GNU General Public License, version 2 (GPL-2.0)
008 *
009 * For full copyright and license information, please see
010 * the docs/CREDITS.txt file.
011 *
012 */
013
014 namespace phpbb\cron\task\text_reparser;
015
016 /**
017 * Reparse text cron task
018 */
019 class reparser extends \phpbb\cron\task\base
020 {
021 const MIN = 1;
022 const SIZE = 100;
023
024 /**
025 * @var \phpbb\config\config
026 */
027 protected $config;
028
029 /**
030 * @var \phpbb\config\db_text
031 */
032 protected $config_text;
033
034 /**
035 * @var \phpbb\lock\db
036 */
037 protected $reparse_lock;
038
039 /**
040 * @var \phpbb\textreparser\manager
041 */
042 protected $reparser_manager;
043
044 /**
045 * @var string
046 */
047 protected $reparser_name;
048
049 /**
050 * @var \phpbb\di\service_collection
051 */
052 protected $reparsers;
053
054 /**
055 * @var array
056 */
057 protected $resume_data;
058
059 /**
060 * Constructor
061 *
062 * @param \phpbb\config\config $config
063 * @param \phpbb\config\db_text $config_text
064 * @param \phpbb\lock\db $reparse_lock
065 * @param \phpbb\textreparser\manager $reparser_manager
066 * @param \phpbb\di\service_collection $reparsers
067 */
068 public function __construct(\phpbb\config\config $config, \phpbb\config\db_text $config_text, \phpbb\lock\db $reparse_lock, \phpbb\textreparser\manager $reparser_manager, \phpbb\di\service_collection $reparsers)
069 {
070 $this->config = $config;
071 $this->config_text = $config_text;
072 $this->reparse_lock = $reparse_lock;
073 $this->reparser_manager = $reparser_manager;
074 $this->reparsers = $reparsers;
075 }
076
077 /**
078 * Sets the reparser for this cron task
079 *
080 * @param string $reparser
081 */
082 public function set_reparser($reparser)
083 {
084 $this->reparser_name = !isset($this->reparsers[$reparser]) ? $this->reparser_manager->find_reparser($reparser) : $reparser;
085
086 if ($this->resume_data === null)
087 {
088 $this->reparser_manager->get_resume_data($this->reparser_name);
089 }
090 }
091
092 /**
093 * {@inheritdoc}
094 */
095 public function is_runnable()
096 {
097 if ($this->resume_data === null)
098 {
099 $this->reparser_manager->get_resume_data($this->reparser_name);
100 }
101
102 if (!isset($this->resume_data['range-max']) || $this->resume_data['range-max'] >= $this->resume_data['range-min'])
103 {
104 return true;
105 }
106
107 return false;
108 }
109
110 /**
111 * {@inheritdoc}
112 */
113 public function should_run()
114 {
115 if (!empty($this->config['reparse_lock']))
116 {
117 $last_run = explode(' ', $this->config['reparse_lock']);
118
119 if ($last_run[0] + 3600 >= time())
120 {
121 return false;
122 }
123 }
124
125 if ($this->config[$this->reparser_name . '_cron_interval'])
126 {
127 return $this->config[$this->reparser_name . '_last_cron'] < time() - $this->config[$this->reparser_name . '_cron_interval'];
128 }
129
130 return false;
131 }
132
133 /**
134 * {@inheritdoc}
135 */
136 public function run()
137 {
138 if ($this->reparse_lock->acquire())
139 {
140 if ($this->resume_data === null)
141 {
142 $this->resume_data = $this->reparser_manager->get_resume_data($this->reparser_name);
143 }
144
145 /**
146 * @var \phpbb\textreparser\reparser_interface $reparser
147 */
148 $reparser = $this->reparsers[$this->reparser_name];
149
150 $min = isset($this->resume_data['range-min']) ? $this->resume_data['range-min'] : self::MIN;
151 $current = isset($this->resume_data['range-max']) ? $this->resume_data['range-max'] : $reparser->get_max_id();
152 $size = isset($this->resume_data['range-size']) ? $this->resume_data['range-size'] : self::SIZE;
153
154 if ($current >= $min)
155 {
156 $start = max($min, $current + 1 - $size);
157 $end = max($min, $current);
158
159 $reparser->reparse_range($start, $end);
160
161 $this->reparser_manager->update_resume_data($this->reparser_name, $min, $start - 1, $size);
162 }
163
164 $this->config->set($this->reparser_name . '_last_cron', time());
165 $this->reparse_lock->release();
166 }
167 }
168 }
169