214 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			214 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace FML;
 | |
| 
 | |
| /**
 | |
|  * Class holding several ManiaLinks at once
 | |
|  *
 | |
|  * @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 ManiaLinks
 | |
| {
 | |
| 
 | |
|     /**
 | |
|      * @var ManiaLink[] $children ManiaLinks children
 | |
|      */
 | |
|     protected $children = array();
 | |
| 
 | |
|     /**
 | |
|      * @var CustomUI $customUI Custom UI
 | |
|      */
 | |
|     protected $customUI = null;
 | |
| 
 | |
|     /**
 | |
|      * Create a new ManiaLinks object
 | |
|      *
 | |
|      * @api
 | |
|      * @param ManiaLink[] $children ManiaLink children
 | |
|      * @return static
 | |
|      */
 | |
|     public static function create(?array $children = null)
 | |
|     {
 | |
|         return new static($children);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Construct a new ManiaLinks object
 | |
|      *
 | |
|      * @api
 | |
|      * @param ManiaLink[] $children ManiaLink children
 | |
|      */
 | |
|     public function __construct(?array $children = null)
 | |
|     {
 | |
|         if ($children) {
 | |
|             $this->setChildren($children);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get all child ManiaLinks
 | |
|      *
 | |
|      * @api
 | |
|      * @return ManiaLink[]
 | |
|      */
 | |
|     public function getChildren()
 | |
|     {
 | |
|         return $this->children;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Add a child ManiaLink
 | |
|      *
 | |
|      * @api
 | |
|      * @param ManiaLink $child Child ManiaLink
 | |
|      * @return static
 | |
|      * @deprecated Use addChild()
 | |
|      * @see        ManiaLinks::addChild()
 | |
|      */
 | |
|     public function add(ManiaLink $child)
 | |
|     {
 | |
|         return $this->addChild($child);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Add a child ManiaLink
 | |
|      *
 | |
|      * @api
 | |
|      * @param ManiaLink $child Child ManiaLink
 | |
|      * @return static
 | |
|      */
 | |
|     public function addChild(ManiaLink $child)
 | |
|     {
 | |
|         if (!in_array($child, $this->children, true)) {
 | |
|             array_push($this->children, $child);
 | |
|         }
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Add child ManiaLinks
 | |
|      *
 | |
|      * @api
 | |
|      * @param ManiaLink[] $children Child ManiaLinks
 | |
|      * @return static
 | |
|      */
 | |
|     public function addChildren(array $children)
 | |
|     {
 | |
|         foreach ($children as $child) {
 | |
|             $this->addChild($child);
 | |
|         }
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set ManiaLink children
 | |
|      *
 | |
|      * @api
 | |
|      * @param ManiaLink[] $children ManiaLink children
 | |
|      * @return static
 | |
|      */
 | |
|     public function setChildren(array $children)
 | |
|     {
 | |
|         return $this->removeAllChildren()
 | |
|                     ->addChildren($children);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Remove all child ManiaLinks
 | |
|      *
 | |
|      * @api
 | |
|      * @return static
 | |
|      */
 | |
|     public function removeAllChildren()
 | |
|     {
 | |
|         $this->children = array();
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Remove all child ManiaLinks
 | |
|      *
 | |
|      * @api
 | |
|      * @return static
 | |
|      * @deprecated Use removeAllChildren()
 | |
|      * @see        ManiaLinks::removeAllChildren()
 | |
|      */
 | |
|     public function removeChildren()
 | |
|     {
 | |
|         return $this->removeAllChildren();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the CustomUI
 | |
|      *
 | |
|      * @api
 | |
|      * @param bool $createIfEmpty (optional) If the Custom UI should be created if it doesn't exist yet
 | |
|      * @return CustomUI
 | |
|      */
 | |
|     public function getCustomUI($createIfEmpty = true)
 | |
|     {
 | |
|         if (!$this->customUI && $createIfEmpty) {
 | |
|             $this->setCustomUI(new CustomUI());
 | |
|         }
 | |
|         return $this->customUI;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set the CustomUI
 | |
|      *
 | |
|      * @api
 | |
|      * @param CustomUI $customUI CustomUI object
 | |
|      * @return static
 | |
|      */
 | |
|     public function setCustomUI(?CustomUI $customUI = null)
 | |
|     {
 | |
|         $this->customUI = $customUI;
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Render the ManiaLinks object
 | |
|      *
 | |
|      * @param bool (optional) $echo If the XML text should be echoed and the Content-Type header should be set
 | |
|      * @return \DOMDocument
 | |
|      */
 | |
|     public function render($echo = false)
 | |
|     {
 | |
|         $domDocument                = new \DOMDocument("1.0", "utf-8");
 | |
|         $domDocument->xmlStandalone = true;
 | |
|         $maniaLinks                 = $domDocument->createElement("manialinks");
 | |
|         $domDocument->appendChild($maniaLinks);
 | |
| 
 | |
|         foreach ($this->children as $child) {
 | |
|             $childXml = $child->render(false, $domDocument);
 | |
|             $maniaLinks->appendChild($childXml);
 | |
|         }
 | |
| 
 | |
|         if ($this->customUI) {
 | |
|             $customUIElement = $this->customUI->render($domDocument);
 | |
|             $maniaLinks->appendChild($customUIElement);
 | |
|         }
 | |
| 
 | |
|         if ($echo) {
 | |
|             header("Content-Type: application/xml; charset=utf-8;");
 | |
|             echo $domDocument->saveXML();
 | |
|         }
 | |
| 
 | |
|         return $domDocument;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get string representation
 | |
|      *
 | |
|      * @return string
 | |
|      */
 | |
|     public function __toString()
 | |
|     {
 | |
|         return $this->render()
 | |
|                     ->saveXML();
 | |
|     }
 | |
| 
 | |
| }
 |