vendor/symfony/src/Symfony/Component/Templating/Helper/SlotsHelper.php
changeset 0 7f95f8617b0b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/symfony/src/Symfony/Component/Templating/Helper/SlotsHelper.php	Sat Sep 24 15:40:41 2011 +0200
@@ -0,0 +1,147 @@
+<?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 Symfony\Component\Templating\Helper;
+
+/**
+ * SlotsHelper manages template slots.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class SlotsHelper extends Helper
+{
+    protected $slots = array();
+    protected $openSlots = array();
+
+    /**
+     * Starts a new slot.
+     *
+     * This method starts an output buffer that will be
+     * closed when the stop() method is called.
+     *
+     * @param string $name  The slot name
+     *
+     * @throws \InvalidArgumentException if a slot with the same name is already started
+     *
+     * @api
+     */
+    public function start($name)
+    {
+        if (in_array($name, $this->openSlots)) {
+            throw new \InvalidArgumentException(sprintf('A slot named "%s" is already started.', $name));
+        }
+
+        $this->openSlots[] = $name;
+        $this->slots[$name] = '';
+
+        ob_start();
+        ob_implicit_flush(0);
+    }
+
+    /**
+     * Stops a slot.
+     *
+     * @throws \LogicException if no slot has been started
+     *
+     * @api
+     */
+    public function stop()
+    {
+        if (!$this->openSlots) {
+            throw new \LogicException('No slot started.');
+        }
+
+        $name = array_pop($this->openSlots);
+
+        $this->slots[$name] = ob_get_clean();
+    }
+
+    /**
+     * Returns true if the slot exists.
+     *
+     * @param string $name The slot name
+     *
+     * @api
+     */
+    public function has($name)
+    {
+        return isset($this->slots[$name]);
+    }
+
+    /**
+     * Gets the slot value.
+     *
+     * @param string $name    The slot name
+     * @param string $default The default slot content
+     *
+     * @return string The slot content
+     *
+     * @api
+     */
+    public function get($name, $default = false)
+    {
+        return isset($this->slots[$name]) ? $this->slots[$name] : $default;
+    }
+
+    /**
+     * Sets a slot value.
+     *
+     * @param string $name    The slot name
+     * @param string $content The slot content
+     *
+     * @api
+     */
+    public function set($name, $content)
+    {
+        $this->slots[$name] = $content;
+    }
+
+    /**
+     * Outputs a slot.
+     *
+     * @param string $name    The slot name
+     * @param string $default The default slot content
+     *
+     * @return Boolean true if the slot is defined or if a default content has been provided, false otherwise
+     *
+     * @api
+     */
+    public function output($name, $default = false)
+    {
+        if (!isset($this->slots[$name])) {
+            if (false !== $default) {
+                echo $default;
+
+                return true;
+            }
+
+            return false;
+        }
+
+        echo $this->slots[$name];
+
+        return true;
+    }
+
+    /**
+     * Returns the canonical name of this helper.
+     *
+     * @return string The canonical name
+     *
+     * @api
+     */
+    public function getName()
+    {
+        return 'slots';
+    }
+}