| <?php |
| /** |
| * File containing the ezcConfigurationFileReader class. |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| * @package Configuration |
| * @version //autogen// |
| * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 |
| */ |
| /** |
| * ezcConfigurationFileReader class provides the functionality for reading |
| * file based configuration formats. |
| * |
| * This class implements most of the interface of ezcConfigurationReader and |
| * makes it easier to work on file based configuration. All methods except |
| * load() and validate() are implemented by this class, so a subclass only |
| * needs to handle the actual serialization. |
| * |
| * @package Configuration |
| * @version //autogen// |
| */ |
| abstract class ezcConfigurationFileReader extends ezcConfigurationReader |
| { |
| /** |
| * The path to the file which will contain the serialized configuration data. |
| * |
| * @var string |
| */ |
| protected $path = ''; |
| |
| /** |
| * The current location of the config, this is either the path on the filesystem |
| * or a PHP stream prefix. |
| * |
| * @var string |
| */ |
| protected $location = ''; |
| |
| /** |
| * The base name of the configuration file, the suffix will be appended to this |
| * to find the real filename. |
| * |
| * @var string |
| */ |
| protected $name = ''; |
| |
| /** |
| * Current options for the reader. |
| * See the specific reader to see which options it supports. |
| * |
| * @var array |
| */ |
| protected $options = array(); |
| |
| /** |
| * Contains the configuration object that was read from the file with |
| * load(). |
| * |
| * @var ezcConfiguration |
| */ |
| protected $config = false; |
| |
| /** |
| * Controls whether comments are read from the INI file or not. |
| * |
| * @var bool |
| */ |
| private $useComments; |
| |
| /** |
| * Constructs the reader object. |
| * |
| * $path must contain the relative or absolute path to the configuration file. |
| * You can use PHP streams, e.g compress.gz://site.ini.gz. |
| * |
| * After construction call load() to parse the INI file from disk and return a |
| * configuration object. |
| * |
| * @param string $path |
| */ |
| public function __construct( $path = null ) |
| { |
| if ( $path !== null ) |
| { |
| $this->parseLocationPath( $path, $this->getSuffix() ); |
| } |
| } |
| |
| /** |
| * Initializes the reader with a location and a name. These values determine |
| * where the configuration will be serialized. |
| * |
| * @param string $location The main placement for the configuration. It is |
| * up to the specific reader to interpret this value. This |
| * can for instance be used to determine the directory |
| * location for an INI file. |
| * @param string $name The name for the configuration. It is up to the |
| * specific reader to interpret this value. This can for |
| * instance be the basename for the INI file, so a value of |
| * 'site' would create a file with name 'site.ini'. |
| * @param array $options An associative array of options for the reader. |
| * Which options to use is determined by the specific reader |
| * class. |
| * @return void |
| */ |
| public function init( $location, $name, array $options = array() ) |
| { |
| $this->path = $location . DIRECTORY_SEPARATOR . $name . '.' . $this->getSuffix(); |
| $this->location = $location; |
| $this->name = $name; |
| $this->setOptions( $options ); |
| } |
| |
| /** |
| * Sets the options $configurationData. |
| * |
| * The options are specified in a associative array in the form 'optionName' => value. |
| * |
| * @throws ezcBaseSettingNotFoundException if you try to set a non existent setting. |
| * @throws ezcBaseSettingValueException if you specify a value out of range for a setting. |
| * @param array(string=>mixed) $configurationData |
| * @return void |
| */ |
| public function setOptions( $configurationData ) |
| { |
| foreach ( $configurationData as $name => $value ) |
| { |
| switch ( $name ) |
| { |
| case 'useComments': |
| if ( gettype( $value ) != 'boolean' ) |
| { |
| throw new ezcBaseSettingValueException( $name, $value, 'bool' ); |
| } |
| $this->useComments = $value; |
| break; |
| default: |
| throw new ezcBaseSettingNotFoundException( $name ); |
| } |
| } |
| } |
| |
| /** |
| * Returns the current options for the reader. |
| * |
| * @return array |
| */ |
| public function getOptions() |
| { |
| return array( 'useComments' => $this->useComments ); |
| } |
| /** |
| * Returns the current configuration object. |
| * |
| * Returns false if there no current configuration. |
| * |
| * @return ezcConfiguration |
| */ |
| public function getConfig() |
| { |
| return $this->config; |
| } |
| |
| /** |
| * Returns the current location string. |
| * |
| * @return string |
| */ |
| public function getLocation() |
| { |
| return $this->location; |
| } |
| |
| /** |
| * Returns the current name for the configuration to be read. |
| * |
| * @return string |
| */ |
| public function getName() |
| { |
| return $this->name; |
| } |
| |
| /** |
| * Parses a the path $path and sets the location and name |
| * properties on this object. |
| * |
| * ezcConfigurationFileWriter::parseLocationPath() has the same |
| * code. It is duplicated to prevent complex OO hacks. |
| * |
| * @throws ezcConfigurationException if the configuration file has the wrong suffix. |
| * @param string $path |
| * @param string $suffix |
| * @return void |
| */ |
| protected function parseLocationPath( $path, $suffix ) |
| { |
| $this->path = $path; |
| $this->location = dirname( $path ); |
| $base = basename( $path ); |
| if ( $suffix[0] != '.' ) |
| { |
| $suffix = ".$suffix"; |
| } |
| if ( !preg_match( '@' . preg_quote( $suffix ) . '$@', $path ) ) |
| { |
| throw new ezcConfigurationInvalidSuffixException( $path, $suffix ); |
| } |
| $this->name = basename( $base, $suffix ); |
| } |
| |
| /** |
| * Returns the last modified timestamp. |
| * |
| * Returns false if there is not last current timestamp. |
| * |
| * @return int |
| */ |
| public function getTimestamp() |
| { |
| if ( file_exists( $this->path ) ) |
| { |
| return filemtime( $this->path ); |
| } |
| return false; |
| } |
| |
| /** |
| * Returns true if the configuration exists. |
| * |
| * @return bool |
| */ |
| public function configExists() |
| { |
| return file_exists( $this->path ); |
| } |
| } |
| ?> |