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 |
data_access.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\textformatter;
015
016 /**
017 * Data access layer that fetchs BBCodes, smilies and censored words from the database.
018 * To be extended to include insert/update/delete operations.
019 *
020 * Also used to get templates.
021 */
022 class data_access
023 {
024 /**
025 * @var string Name of the BBCodes table
026 */
027 protected $bbcodes_table;
028
029 /**
030 * @var \phpbb\db\driver\driver_interface
031 */
032 protected $db;
033
034 /**
035 * @var string Name of the smilies table
036 */
037 protected $smilies_table;
038
039 /**
040 * @var string Name of the styles table
041 */
042 protected $styles_table;
043
044 /**
045 * @var string Path to the styles dir
046 */
047 protected $styles_path;
048
049 /**
050 * @var string Name of the words table
051 */
052 protected $words_table;
053
054 /**
055 * Constructor
056 *
057 * @param \phpbb\db\driver\driver_interface $db Database connection
058 * @param string $bbcodes_table Name of the BBCodes table
059 * @param string $smilies_table Name of the smilies table
060 * @param string $styles_table Name of the styles table
061 * @param string $words_table Name of the words table
062 * @param string $styles_path Path to the styles dir
063 */
064 public function __construct(\phpbb\db\driver\driver_interface $db, $bbcodes_table, $smilies_table, $styles_table, $words_table, $styles_path)
065 {
066 $this->db = $db;
067
068 $this->bbcodes_table = $bbcodes_table;
069 $this->smilies_table = $smilies_table;
070 $this->styles_table = $styles_table;
071 $this->words_table = $words_table;
072
073 $this->styles_path = $styles_path;
074 }
075
076 /**
077 * Return the list of custom BBCodes
078 *
079 * @return array
080 */
081 public function get_bbcodes()
082 {
083 $sql = 'SELECT bbcode_match, bbcode_tpl FROM ' . $this->bbcodes_table;
084 $result = $this->db->sql_query($sql);
085 $rows = $this->db->sql_fetchrowset($result);
086 $this->db->sql_freeresult($result);
087
088 return $rows;
089 }
090
091 /**
092 * Return the list of smilies
093 *
094 * @return array
095 */
096 public function get_smilies()
097 {
098 // NOTE: smilies that are displayed on the posting page are processed first because they're
099 // typically the most used smilies and it ends up producing a slightly more efficient
100 // renderer
101 $sql = 'SELECT code, emotion, smiley_url, smiley_width, smiley_height
102 FROM ' . $this->smilies_table . '
103 ORDER BY display_on_posting DESC';
104 $result = $this->db->sql_query($sql);
105 $rows = $this->db->sql_fetchrowset($result);
106 $this->db->sql_freeresult($result);
107
108 return $rows;
109 }
110
111 /**
112 * Return the list of installed styles
113 *
114 * @return array
115 */
116 protected function get_styles()
117 {
118 $sql = 'SELECT style_id, style_path, style_parent_id, bbcode_bitfield FROM ' . $this->styles_table;
119 $result = $this->db->sql_query($sql);
120 $rows = $this->db->sql_fetchrowset($result);
121 $this->db->sql_freeresult($result);
122
123 return $rows;
124 }
125
126 /**
127 * Return the bbcode.html template for every installed style
128 *
129 * @return array 2D array. style_id as keys, each element is an array with a "template" element that contains the style's bbcode.html and a "bbcodes" element that contains the name of each BBCode that is to be stylised
130 */
131 public function get_styles_templates()
132 {
133 $templates = array();
134
135 $bbcode_ids = array(
136 'quote' => 0,
137 'b' => 1,
138 'i' => 2,
139 'url' => 3,
140 'img' => 4,
141 'size' => 5,
142 'color' => 6,
143 'u' => 7,
144 'code' => 8,
145 'list' => 9,
146 '*' => 9,
147 'email' => 10,
148 'flash' => 11,
149 'attachment' => 12,
150 );
151
152 $styles = array();
153 foreach ($this->get_styles() as $row)
154 {
155 $styles[$row['style_id']] = $row;
156 }
157
158 foreach ($styles as $style_id => $style)
159 {
160 $bbcodes = array();
161
162 // Collect the name of the BBCodes whose bit is set in the style's bbcode_bitfield
163 $template_bitfield = new \bitfield($style['bbcode_bitfield']);
164 foreach ($bbcode_ids as $bbcode_name => $bit)
165 {
166 if ($template_bitfield->get($bit))
167 {
168 $bbcodes[] = $bbcode_name;
169 }
170 }
171
172 $filename = $this->resolve_style_filename($styles, $style);
173 if ($filename === false)
174 {
175 // Ignore this style, it will use the default templates
176 continue;
177 }
178
179 $templates[$style_id] = array(
180 'bbcodes' => $bbcodes,
181 'template' => file_get_contents($filename),
182 );
183 }
184
185 return $templates;
186 }
187
188 /**
189 * Resolve inheritance for given style and return the path to their bbcode.html file
190 *
191 * @param array $styles Associative array of [style_id => style] containing all styles
192 * @param array $style Style for which we resolve
193 * @return string|bool Path to this style's bbcode.html, or FALSE
194 */
195 protected function resolve_style_filename(array $styles, array $style)
196 {
197 // Look for a bbcode.html in this style's dir
198 $filename = $this->styles_path . $style['style_path'] . '/template/bbcode.html';
199 if (file_exists($filename))
200 {
201 return $filename;
202 }
203
204 // Resolve using this style's parent
205 $parent_id = $style['style_parent_id'];
206 if ($parent_id && !empty($styles[$parent_id]))
207 {
208 return $this->resolve_style_filename($styles, $styles[$parent_id]);
209 }
210
211 return false;
212 }
213
214 /**
215 * Return the list of censored words
216 *
217 * @return array
218 */
219 public function get_censored_words()
220 {
221 $sql = 'SELECT word, replacement FROM ' . $this->words_table;
222 $result = $this->db->sql_query($sql);
223 $rows = $this->db->sql_fetchrowset($result);
224 $this->db->sql_freeresult($result);
225
226 return $rows;
227 }
228 }
229