* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ /** * This class defines the interface for interacting with data, as well * as default implementations. * * @package symfony * @subpackage addon * @author Fabien Potencier * @version SVN: $Id: sfData.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $ */ abstract class sfData { protected $deleteCurrentData = true, $object_references = array(); /** * Sets a flag to indicate if the current data in the database * should be deleted before new data is loaded. * * @param boolean $boolean The flag value */ public function setDeleteCurrentData($boolean) { $this->deleteCurrentData = $boolean; } /** * Gets the current value of the flag that indicates whether * current data is to be deleted or not. * * @return boolean */ public function getDeleteCurrentData() { return $this->deleteCurrentData; } /** * Loads data for the database from a YAML file * * @param string $file The path to the YAML file. */ protected function doLoadDataFromFile($file) { // import new datas $data = sfYaml::load($file); $this->loadDataFromArray($data); } /** * Manages the insertion of data into the data source * * @param array $data The data to be inserted into the data source */ abstract public function loadDataFromArray($data); /** * Manages reading all of the fixture data files and * loading them into the data source * * @param array $files The path names of the YAML data files */ protected function doLoadData(array $files) { $this->object_references = array(); $this->maps = array(); foreach ($files as $file) { $this->doLoadDataFromFile($file); } } /** * Gets a list of one or more *.yml files and returns the list in an array. * * The returned array of files is sorted by alphabetical order. * * @param string|array $element A directory or file name or an array of directories and/or file names * If null, then defaults to 'sf_data_dir'/fixtures * * @return array A list of *.yml files * * @throws sfInitializationException If the directory or file does not exist. */ public function getFiles($element = null) { if (null === $element) { $element = sfConfig::get('sf_data_dir').'/fixtures'; } $files = array(); if (is_array($element)) { foreach ($element as $e) { $files = array_merge($files, $this->getFiles($e)); } } else if (is_file($element)) { $files[] = $element; } else if (is_dir($element)) { $files = sfFinder::type('file')->name('*.yml')->sort_by_name()->in($element); } else { throw new sfInitializationException(sprintf('You must give an array, a directory or a file to sfData::getFiles() (%s given).', $element)); } $files = array_unique($files); sort($files); return $files; } }