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.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

config.php

Zuletzt modifiziert: 09.10.2024, 12:54 - Dateigröße: 6.96 KiB


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\search\sphinx;
015   
016  /**
017  * An object representing the sphinx configuration
018  * Can read it from file and write it back out after modification
019  */
020  class config
021  {
022      private $sections = array();
023   
024      /**
025      * Constructor which optionally loads data from a variable
026      *
027      * @param    string    $config_data    Variable containing the sphinx configuration data
028      *
029      * @access    public
030      */
031      function __construct($config_data)
032      {
033          if ($config_data != '')
034          {
035              $this->read($config_data);
036          }
037      }
038   
039      /**
040      * Get a section object by its name
041      *
042      * @param    string                                 $name    The name of the section that shall be returned
043      * @return    \phpbb\search\sphinx\config_section            The section object or null if none was found
044      *
045      * @access    public
046      */
047      function get_section_by_name($name)
048      {
049          for ($i = 0, $size = sizeof($this->sections); $i < $size; $i++)
050          {
051              // Make sure this is really a section object and not a comment
052              if (($this->sections[$i] instanceof \phpbb\search\sphinx\config_section) && $this->sections[$i]->get_name() == $name)
053              {
054                  return $this->sections[$i];
055              }
056          }
057      }
058   
059      /**
060      * Appends a new empty section to the end of the config
061      *
062      * @param    string                                $name    The name for the new section
063      * @return    \phpbb\search\sphinx\config_section            The newly created section object
064      *
065      * @access    public
066      */
067      function add_section($name)
068      {
069          $this->sections[] = new \phpbb\search\sphinx\config_section($name, '');
070          return $this->sections[sizeof($this->sections) - 1];
071      }
072   
073      /**
074      * Reads the config file data
075      *
076      * @param    string    $config_data    The config file data
077      *
078      * @access    private
079      */
080      function read($config_data)
081      {
082          $this->sections = array();
083   
084          $section = null;
085          $found_opening_bracket = false;
086          $in_value = false;
087   
088          foreach ($config_data as $i => $line)
089          {
090              // If the value of a variable continues to the next line because the line
091              // break was escaped then we don't trim leading space but treat it as a part of the value
092              if ($in_value)
093              {
094                  $line = rtrim($line);
095              }
096              else
097              {
098                  $line = trim($line);
099              }
100   
101              // If we're not inside a section look for one
102              if (!$section)
103              {
104                  // Add empty lines and comments as comment objects to the section list
105                  // that way they're not deleted when reassembling the file from the sections
106                  if (!$line || $line[0] == '#')
107                  {
108                      $this->sections[] = new \phpbb\search\sphinx\config_comment($config_file[$i]);
109                      continue;
110                  }
111                  else
112                  {
113                      // Otherwise we scan the line reading the section name until we find
114                      // an opening curly bracket or a comment
115                      $section_name = '';
116                      $section_name_comment = '';
117                      $found_opening_bracket = false;
118                      for ($j = 0, $length = strlen($line); $j < $length; $j++)
119                      {
120                          if ($line[$j] == '#')
121                          {
122                              $section_name_comment = substr($line, $j);
123                              break;
124                          }
125   
126                          if ($found_opening_bracket)
127                          {
128                              continue;
129                          }
130   
131                          if ($line[$j] == '{')
132                          {
133                              $found_opening_bracket = true;
134                              continue;
135                          }
136   
137                          $section_name .= $line[$j];
138                      }
139   
140                      // And then we create the new section object
141                      $section_name = trim($section_name);
142                      $section = new \phpbb\search\sphinx\config_section($section_name, $section_name_comment);
143                  }
144              }
145              else
146              {
147                  // If we're looking for variables inside a section
148                  $skip_first = false;
149   
150                  // If we're not in a value continuing over the line feed
151                  if (!$in_value)
152                  {
153                      // Then add empty lines and comments as comment objects to the variable list
154                      // of this section so they're not deleted on reassembly
155                      if (!$line || $line[0] == '#')
156                      {
157                          $section->add_variable(new \phpbb\search\sphinx\config_comment($config_file[$i]));
158                          continue;
159                      }
160   
161                      // As long as we haven't yet actually found an opening bracket for this section
162                      // we treat everything as comments so it's not deleted either
163                      if (!$found_opening_bracket)
164                      {
165                          if ($line[0] == '{')
166                          {
167                              $skip_first = true;
168                              $line = substr($line, 1);
169                              $found_opening_bracket = true;
170                          }
171                          else
172                          {
173                              $section->add_variable(new \phpbb\search\sphinx\config_comment($config_file[$i]));
174                              continue;
175                          }
176                      }
177                  }
178   
179                  // If we did not find a comment in this line or still add to the previous
180                  // line's value ...
181                  if ($line || $in_value)
182                  {
183                      if (!$in_value)
184                      {
185                          $name = '';
186                          $value = '';
187                          $comment = '';
188                          $found_assignment = false;
189                      }
190                      $in_value = false;
191                      $end_section = false;
192   
193                      /* ... then we should prase this line char by char:
194                       - first there's the variable name
195                       - then an equal sign
196                       - the variable value
197                       - possibly a backslash before the linefeed in this case we need to continue
198                         parsing the value in the next line
199                       - a # indicating that the rest of the line is a comment
200                       - a closing curly bracket indicating the end of this section*/
201                      for ($j = 0, $length = strlen($line); $j < $length; $j++)
202                      {
203                          if ($line[$j] == '#')
204                          {
205                              $comment = substr($line, $j);
206                              break;
207                          }
208                          else if ($line[$j] == '}')
209                          {
210                              $comment = substr($line, $j + 1);
211                              $end_section = true;
212                              break;
213                          }
214                          else if (!$found_assignment)
215                          {
216                              if ($line[$j] == '=')
217                              {
218                                  $found_assignment = true;
219                              }
220                              else
221                              {
222                                  $name .= $line[$j];
223                              }
224                          }
225                          else
226                          {
227                              if ($line[$j] == '\\' && $j == $length - 1)
228                              {
229                                  $value .= "\n";
230                                  $in_value = true;
231                                  // Go to the next line and keep processing the value in there
232                                  continue 2;
233                              }
234                              $value .= $line[$j];
235                          }
236                      }
237   
238                      // If a name and an equal sign were found then we have append a
239                      // new variable object to the section
240                      if ($name && $found_assignment)
241                      {
242                          $section->add_variable(new \phpbb\search\sphinx\config_variable(trim($name), trim($value), ($end_section) ? '' : $comment));
243                          continue;
244                      }
245   
246                      /* If we found a closing curly bracket this section has been completed
247                      and we can append it to the section list and continue with looking for
248                      the next section */
249                      if ($end_section)
250                      {
251                          $section->set_end_comment($comment);
252                          $this->sections[] = $section;
253                          $section = null;
254                          continue;
255                      }
256                  }
257   
258                  // If we did not find anything meaningful up to here, then just treat it
259                  // as a comment
260                  $comment = ($skip_first) ? "\t" . substr(ltrim($config_file[$i]), 1) : $config_file[$i];
261                  $section->add_variable(new \phpbb\search\sphinx\config_comment($comment));
262              }
263          }
264   
265      }
266   
267      /**
268      * Returns the config data
269      *
270      * @return    string    $data    The config data that is generated
271      *
272      * @access    public
273      */
274      function get_data()
275      {
276          $data = "";
277          foreach ($this->sections as $section)
278          {
279              $data .= $section->to_string();
280          }
281   
282          return $data;
283      }
284  }
285