vendor/bundles/Sensio/Bundle/DistributionBundle/Configurator/Configurator.php
changeset 0 7f95f8617b0b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/bundles/Sensio/Bundle/DistributionBundle/Configurator/Configurator.php	Sat Sep 24 15:40:41 2011 +0200
@@ -0,0 +1,200 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Sensio\Bundle\DistributionBundle\Configurator;
+
+use Sensio\Bundle\DistributionBundle\Configurator\Step\StepInterface;
+
+/**
+ * Configurator.
+ *
+ * @author Marc Weistroff <marc.weistroff@gmail.com>
+ */
+class Configurator
+{
+    protected $filename;
+    protected $steps;
+    protected $parameters;
+
+    public function __construct($kernelDir)
+    {
+        $this->kernelDir = $kernelDir;
+        $this->filename = $kernelDir.'/config/parameters.ini';
+
+        $this->steps = array();
+        $this->parameters = $this->read();
+    }
+
+    public function isFileWritable()
+    {
+        return is_writable($this->filename);
+    }
+
+    public function clean()
+    {
+        if (file_exists($this->getCacheFilename())) {
+            @unlink($this->getCacheFilename());
+        }
+    }
+
+    /**
+     * @param StepInterface $step
+     */
+    public function addStep(StepInterface $step)
+    {
+        $this->steps[] = $step;
+    }
+
+    /**
+     * @param integer $index
+     *
+     * @return StepInterface
+     */
+    public function getStep($index)
+    {
+        if (isset($this->steps[$index])) {
+            return $this->steps[$index];
+        }
+    }
+
+    /**
+     * @return array
+     */
+    public function getSteps()
+    {
+        return $this->steps;
+    }
+
+    /**
+     * @return array
+     */
+    public function getParameters()
+    {
+        return $this->parameters;
+    }
+
+    /**
+     * @return integer
+     */
+    public function getStepCount()
+    {
+        return count($this->steps);
+    }
+
+    /**
+     * @param array $parameters
+     */
+    public function mergeParameters($parameters)
+    {
+        $this->parameters = array_merge($this->parameters, $parameters);
+    }
+
+    /**
+     * @return array
+     */
+    public function getRequirements()
+    {
+        $majors = array();
+        foreach ($this->steps as $step) {
+            foreach ($step->checkRequirements() as $major) {
+                $majors[] = $major;
+            }
+        }
+
+        return $majors;
+    }
+
+    /**
+     * @return array
+     */
+    public function getOptionalSettings()
+    {
+        $minors = array();
+        foreach ($this->steps as $step) {
+            foreach ($step->checkOptionalSettings() as $minor) {
+                $minors[] = $minor;
+            }
+        }
+
+        return $minors;
+    }
+
+    /**
+     * Renders parameters as a string.
+     *
+     * @return string
+     */
+    public function render()
+    {
+        $lines[] = "[parameters]\n";
+
+        foreach ($this->parameters as $key => $value) {
+            if (is_integer($value) || is_float($value)) {
+            } elseif (is_bool($value)) {
+                $value = $value ? 'true' : 'false';
+            } elseif (false === strpos($value, '"')) {
+                $value = '"'.$value.'"';
+            } else {
+                throw new \RuntimeException('A value in an ini file can not contain double quotes (").');
+            }
+
+            $lines[] = sprintf("    %s=%s\n", $key, $value);
+        }
+
+        return implode('', $lines);
+    }
+
+    /**
+     * Writes parameters to parameters.ini or temporary in the cache directory.
+     *
+     * @return boolean
+     */
+    public function write()
+    {
+        $filename = $this->isFileWritable() ? $this->filename : $this->getCacheFilename();
+
+        return file_put_contents($filename, $this->render());
+    }
+
+    /**
+     * Reads parameters from file.
+     *
+     * @return array
+     */
+    protected function read()
+    {
+        $filename = $this->filename;
+        if (!$this->isFileWritable() && file_exists($this->getCacheFilename())) {
+            $filename = $this->getCacheFilename();
+        }
+
+        $ret = parse_ini_file($filename, true);
+        if (false === $ret || array() === $ret) {
+            throw new \InvalidArgumentException(sprintf('The %s file is not valid.', $filename));
+        }
+
+        if (isset($ret['parameters']) && is_array($ret['parameters'])) {
+            return $ret['parameters'];
+        } else {
+            return array();
+        }
+    }
+
+    /**
+     * getCacheFilename
+     *
+     * @return string
+     */
+    protected function getCacheFilename()
+    {
+        return $this->kernelDir.'/cache/parameters.ini';
+    }
+}