You are here

abstract class FileDumper in Zircon Profile 8.0

Same name and namespace in other branches
  1. 8 vendor/symfony/translation/Dumper/FileDumper.php \Symfony\Component\Translation\Dumper\FileDumper

FileDumper is an implementation of DumperInterface that dump a message catalogue to file(s). Performs backup of already existing files.

Options:

  • path (mandatory): the directory where the files should be saved

@author Michel Salib <michelsalib@hotmail.com>

Hierarchy

Expanded class hierarchy of FileDumper

1 file declares its use of FileDumper
FileDumperTest.php in vendor/symfony/translation/Tests/Dumper/FileDumperTest.php

File

vendor/symfony/translation/Dumper/FileDumper.php, line 25

Namespace

Symfony\Component\Translation\Dumper
View source
abstract class FileDumper implements DumperInterface {

  /**
   * A template for the relative paths to files.
   *
   * @var string
   */
  protected $relativePathTemplate = '%domain%.%locale%.%extension%';

  /**
   * Make file backup before the dump.
   *
   * @var bool
   */
  private $backup = true;

  /**
   * Sets the template for the relative paths to files.
   *
   * @param string $relativePathTemplate A template for the relative paths to files
   */
  public function setRelativePathTemplate($relativePathTemplate) {
    $this->relativePathTemplate = $relativePathTemplate;
  }

  /**
   * Sets backup flag.
   *
   * @param bool
   */
  public function setBackup($backup) {
    $this->backup = $backup;
  }

  /**
   * {@inheritdoc}
   */
  public function dump(MessageCatalogue $messages, $options = array()) {
    if (!array_key_exists('path', $options)) {
      throw new \InvalidArgumentException('The file dumper needs a path option.');
    }

    // save a file for each domain
    foreach ($messages
      ->getDomains() as $domain) {

      // backup
      $fullpath = $options['path'] . '/' . $this
        ->getRelativePath($domain, $messages
        ->getLocale());
      if (file_exists($fullpath)) {
        if ($this->backup) {
          copy($fullpath, $fullpath . '~');
        }
      }
      else {
        $directory = dirname($fullpath);
        if (!file_exists($directory) && !@mkdir($directory, 0777, true)) {
          throw new \RuntimeException(sprintf('Unable to create directory "%s".', $directory));
        }
      }

      // save file
      file_put_contents($fullpath, $this
        ->format($messages, $domain));
    }
  }

  /**
   * Transforms a domain of a message catalogue to its string representation.
   *
   * @param MessageCatalogue $messages
   * @param string           $domain
   *
   * @return string representation
   */
  protected abstract function format(MessageCatalogue $messages, $domain);

  /**
   * Gets the file extension of the dumper.
   *
   * @return string file extension
   */
  protected abstract function getExtension();

  /**
   * Gets the relative file path using the template.
   *
   * @param string $domain The domain
   * @param string $locale The locale
   *
   * @return string The relative file path
   */
  private function getRelativePath($domain, $locale) {
    return strtr($this->relativePathTemplate, array(
      '%domain%' => $domain,
      '%locale%' => $locale,
      '%extension%' => $this
        ->getExtension(),
    ));
  }

}

Members

Namesort descending Modifiers Type Description Overrides
FileDumper::$backup private property Make file backup before the dump.
FileDumper::$relativePathTemplate protected property A template for the relative paths to files. 1
FileDumper::dump public function Dumps the message catalogue. Overrides DumperInterface::dump 1
FileDumper::format abstract protected function Transforms a domain of a message catalogue to its string representation. 11
FileDumper::getExtension abstract protected function Gets the file extension of the dumper. 11
FileDumper::getRelativePath private function Gets the relative file path using the template.
FileDumper::setBackup public function Sets backup flag.
FileDumper::setRelativePathTemplate public function Sets the template for the relative paths to files.