187 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			187 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace FML\Components;
 | |
| 
 | |
| use FML\Controls\Entry;
 | |
| use FML\Controls\Frame;
 | |
| use FML\Script\Features\RadioButtonGroupFeature;
 | |
| use FML\Script\Features\ScriptFeature;
 | |
| use FML\Types\Renderable;
 | |
| use FML\Types\ScriptFeatureable;
 | |
| 
 | |
| /**
 | |
|  * RadioButtonGroup Component
 | |
|  *
 | |
|  * @author    steeffeen <mail@steeffeen.com>
 | |
|  * @copyright FancyManiaLinks Copyright © 2017 Steffen Schröder
 | |
|  * @license   http://www.gnu.org/licenses/ GNU General Public License, Version 3
 | |
|  */
 | |
| class RadioButtonGroup implements Renderable, ScriptFeatureable
 | |
| {
 | |
| 
 | |
|     /**
 | |
|      * @var string $name RadioButtonGroup name
 | |
|      */
 | |
|     protected $name = null;
 | |
| 
 | |
|     /**
 | |
|      * @var RadioButtonGroupFeature $feature RadioButtonGroup Feature
 | |
|      */
 | |
|     protected $feature = null;
 | |
| 
 | |
|     /**
 | |
|      * Construct a new RadioButtonGroup
 | |
|      *
 | |
|      * @api
 | |
|      * @param string $name (optional) RadioButtonGroup name
 | |
|      */
 | |
|     public function __construct($name = null)
 | |
|     {
 | |
|         $this->feature = new RadioButtonGroupFeature();
 | |
|         if ($name) {
 | |
|             $this->setName($name);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the name
 | |
|      *
 | |
|      * @api
 | |
|      * @return string
 | |
|      */
 | |
|     public function getName()
 | |
|     {
 | |
|         return $this->name;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set the name
 | |
|      *
 | |
|      * @api
 | |
|      * @param string $name RadioButtonGroup name
 | |
|      * @return static
 | |
|      */
 | |
|     public function setName($name)
 | |
|     {
 | |
|         $this->name = (string)$name;
 | |
|         $this->getEntry()
 | |
|              ->setName($this->name);
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the hidden Entry
 | |
|      *
 | |
|      * @return Entry
 | |
|      */
 | |
|     public function getEntry()
 | |
|     {
 | |
|         $entry = $this->feature->getEntry();
 | |
|         if ($entry) {
 | |
|             return $entry;
 | |
|         }
 | |
|         return $this->createEntry();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Create the hidden Entry
 | |
|      *
 | |
|      * @return Entry
 | |
|      */
 | |
|     protected function createEntry()
 | |
|     {
 | |
|         $entry = new Entry();
 | |
|         $entry->setVisible(false);
 | |
|         if ($this->name) {
 | |
|             $entry->setName($this->name);
 | |
|         }
 | |
|         $this->feature->setEntry($entry);
 | |
|         return $entry;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get RadioButtons
 | |
|      *
 | |
|      * @api
 | |
|      * @return CheckBox[]
 | |
|      */
 | |
|     public function getRadioButtons()
 | |
|     {
 | |
|         return $this->feature->getRadioButtons();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set RadioButtons
 | |
|      *
 | |
|      * @api
 | |
|      * @param CheckBox[] $radioButtons RadioButtons
 | |
|      * @return static
 | |
|      */
 | |
|     public function setRadioButtons(array $radioButtons)
 | |
|     {
 | |
|         $this->removeAllRadioButtons()
 | |
|              ->addRadioButtons($radioButtons);
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Add a new RadioButton to the group
 | |
|      *
 | |
|      * @api
 | |
|      * @param CheckBox $radioButton RadioButton
 | |
|      * @return static
 | |
|      */
 | |
|     public function addRadioButton(CheckBox $radioButton)
 | |
|     {
 | |
|         $this->feature->addRadioButton($radioButton);
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Add new RadioButtons to the group
 | |
|      *
 | |
|      * @api
 | |
|      * @param CheckBox[] $radioButtons RadioButtons
 | |
|      * @return static
 | |
|      */
 | |
|     public function addRadioButtons(array $radioButtons)
 | |
|     {
 | |
|         $this->feature->addRadioButtons($radioButtons);
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Remove all RadioButtons
 | |
|      *
 | |
|      * @api
 | |
|      * @return static
 | |
|      */
 | |
|     public function removeAllRadioButtons()
 | |
|     {
 | |
|         $this->feature->removeAllRadioButtons();
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @see ScriptFeatureable::getScriptFeatures()
 | |
|      */
 | |
|     public function getScriptFeatures()
 | |
|     {
 | |
|         return ScriptFeature::collect($this->feature, $this->getEntry());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @see Renderable::render()
 | |
|      */
 | |
|     public function render(\DOMDocument $domDocument)
 | |
|     {
 | |
|         $frame = new Frame();
 | |
| 
 | |
|         $entry = $this->getEntry();
 | |
|         $frame->addChild($entry);
 | |
| 
 | |
|         return $frame->render($domDocument);
 | |
|     }
 | |
| 
 | |
| }
 |