472 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			472 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace FML\XmlRpc;
 | |
| 
 | |
| /**
 | |
|  * Class representing common UI Properties
 | |
|  *
 | |
|  * @author    steeffeen
 | |
|  * @copyright FancyManiaLinks Copyright © 2017 Steffen Schröder
 | |
|  * @license   http://www.gnu.org/licenses/ GNU General Public License, Version 3
 | |
|  */
 | |
| class UIProperties
 | |
| {
 | |
| 
 | |
|     /**
 | |
|      * @var array $chatProperties Chat properties
 | |
|      */
 | |
|     protected $chatProperties = array();
 | |
| 
 | |
|     /**
 | |
|      * @var array $chatAvatarProperties Chat avatar properties
 | |
|      */
 | |
|     protected $chatAvatarProperties = array();
 | |
| 
 | |
|     /**
 | |
|      * @var array $mapInfoProperties Map info properties
 | |
|      */
 | |
|     protected $mapInfoProperties = array();
 | |
| 
 | |
|     /**
 | |
|      * @var array $countdownProperties Countdown properties
 | |
|      */
 | |
|     protected $countdownProperties = array();
 | |
| 
 | |
|     /**
 | |
|      * @var array $goProperties Go! properties
 | |
|      */
 | |
|     protected $goProperties = array();
 | |
| 
 | |
|     /**
 | |
|      * @var array $endMapLadderRecapProperties End map ladder recap properties
 | |
|      */
 | |
|     protected $endMapLadderRecapProperties = array();
 | |
| 
 | |
|     /**
 | |
|      * @var array $scoresTableProperties Scores table properties
 | |
|      */
 | |
|     protected $scoresTableProperties = array();
 | |
| 
 | |
|     /**
 | |
|      * Create new UI Properties
 | |
|      *
 | |
|      * @api
 | |
|      * @return static
 | |
|      */
 | |
|     public static function create()
 | |
|     {
 | |
|         return new static();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the chat visibility
 | |
|      *
 | |
|      * @api
 | |
|      * @return bool
 | |
|      */
 | |
|     public function getChatVisible()
 | |
|     {
 | |
|         return $this->getVisibleProperty($this->chatProperties);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set the chat visibility
 | |
|      *
 | |
|      * @api
 | |
|      * @param bool $visible If the chat should be visible
 | |
|      * @return static
 | |
|      */
 | |
|     public function setChatVisible($visible)
 | |
|     {
 | |
|         $this->setVisibleProperty($this->chatProperties, $visible);
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the chat offset
 | |
|      *
 | |
|      * @api
 | |
|      * @return string
 | |
|      */
 | |
|     public function getChatOffset()
 | |
|     {
 | |
|         return $this->getProperty($this->chatProperties, "offset");
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set the chat offset
 | |
|      *
 | |
|      * @api
 | |
|      * @param float $offsetX X offset
 | |
|      * @param float $offsetY Y offset
 | |
|      * @return static
 | |
|      */
 | |
|     public function setChatOffset($offsetX, $offsetY)
 | |
|     {
 | |
|         $offset = array((float)$offsetX, (float)$offsetY);
 | |
|         $this->setProperty($this->chatProperties, "offset", implode(" ", $offset));
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the chat line count
 | |
|      *
 | |
|      * @api
 | |
|      * @return int
 | |
|      */
 | |
|     public function getChatLineCount()
 | |
|     {
 | |
|         return $this->getProperty($this->chatProperties, "linecount");
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set the chat line count
 | |
|      *
 | |
|      * @api
 | |
|      * @param int $lineCount Line count
 | |
|      * @return static
 | |
|      */
 | |
|     public function setChatLineCount($lineCount)
 | |
|     {
 | |
|         $this->setProperty($this->chatProperties, "linecount", (int)$lineCount);
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the chat avatar visibility
 | |
|      *
 | |
|      * @api
 | |
|      * @return bool
 | |
|      */
 | |
|     public function getChatAvatarVisible()
 | |
|     {
 | |
|         return $this->getVisibleProperty($this->chatAvatarProperties);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set the chat avatar visibility
 | |
|      *
 | |
|      * @api
 | |
|      * @param bool $visible If the chat avatar should be visible
 | |
|      * @return static
 | |
|      */
 | |
|     public function setChatAvatarVisible($visible)
 | |
|     {
 | |
|         $this->setVisibleProperty($this->chatAvatarProperties, $visible);
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the map info visibility
 | |
|      *
 | |
|      * @api
 | |
|      * @return bool
 | |
|      */
 | |
|     public function getMapInfoVisible()
 | |
|     {
 | |
|         return $this->getVisibleProperty($this->mapInfoProperties);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set the map info visibility
 | |
|      *
 | |
|      * @api
 | |
|      * @param bool $visible If the map info should be visible
 | |
|      * @return static
 | |
|      */
 | |
|     public function setMapInfoVisible($visible)
 | |
|     {
 | |
|         $this->setVisibleProperty($this->mapInfoProperties, $visible);
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the map info position
 | |
|      *
 | |
|      * @api
 | |
|      * @return string
 | |
|      */
 | |
|     public function getMapInfoPosition()
 | |
|     {
 | |
|         return $this->getPositionProperty($this->mapInfoProperties);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set the map info position
 | |
|      *
 | |
|      * @api
 | |
|      * @param float $positionX X position
 | |
|      * @param float $positionY Y position
 | |
|      * @param float $positionZ (optional) Z position (Z-index)
 | |
|      * @return static
 | |
|      */
 | |
|     public function setMapInfoPosition($positionX, $positionY, $positionZ = null)
 | |
|     {
 | |
|         $this->setPositionProperty($this->mapInfoProperties, $positionX, $positionY, $positionZ);
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the countdown visibility
 | |
|      *
 | |
|      * @api
 | |
|      * @return bool
 | |
|      */
 | |
|     public function getCountdownVisible()
 | |
|     {
 | |
|         return $this->getVisibleProperty($this->countdownProperties);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set the countdown visibility
 | |
|      *
 | |
|      * @api
 | |
|      * @param bool $visible If the countdown should be visible
 | |
|      * @return static
 | |
|      */
 | |
|     public function setCountdownVisible($visible)
 | |
|     {
 | |
|         $this->setVisibleProperty($this->countdownProperties, $visible);
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the countdown position
 | |
|      *
 | |
|      * @api
 | |
|      * @return string
 | |
|      */
 | |
|     public function getCountdownPosition()
 | |
|     {
 | |
|         return $this->getPositionProperty($this->countdownProperties);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set the countdown position
 | |
|      *
 | |
|      * @api
 | |
|      * @param float $positionX X position
 | |
|      * @param float $positionY Y position
 | |
|      * @param float $positionZ (optional) Z position (Z-index)
 | |
|      * @return static
 | |
|      */
 | |
|     public function setCountdownPosition($positionX, $positionY, $positionZ = null)
 | |
|     {
 | |
|         $this->setPositionProperty($this->countdownProperties, $positionX, $positionY, $positionZ);
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the Go! visibility
 | |
|      *
 | |
|      * @api
 | |
|      * @return bool
 | |
|      */
 | |
|     public function getGoVisible()
 | |
|     {
 | |
|         return $this->getVisibleProperty($this->goProperties);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set the Go! visibility
 | |
|      *
 | |
|      * @api
 | |
|      * @param bool $visible If Go! should be visible
 | |
|      * @return static
 | |
|      */
 | |
|     public function setGoVisible($visible)
 | |
|     {
 | |
|         $this->setVisibleProperty($this->goProperties, $visible);
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the end map ladder recap visibility
 | |
|      *
 | |
|      * @api
 | |
|      * @return bool
 | |
|      */
 | |
|     public function getEndMapLadderRecapVisible()
 | |
|     {
 | |
|         return $this->getVisibleProperty($this->endMapLadderRecapProperties);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set the end map ladder recap visibility
 | |
|      *
 | |
|      * @api
 | |
|      * @param bool $visible If the end map ladder recap should be visible
 | |
|      * @return static
 | |
|      */
 | |
|     public function setEndMapLadderRecapVisible($visible)
 | |
|     {
 | |
|         $this->setVisibleProperty($this->endMapLadderRecapProperties, $visible);
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the scores table alt visibility
 | |
|      *
 | |
|      * @api
 | |
|      * @return bool
 | |
|      */
 | |
|     public function getScoresTableAltVisible()
 | |
|     {
 | |
|         return $this->getProperty($this->scoresTableProperties, "alt_visible");
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set the scores table alt visibility
 | |
|      *
 | |
|      * @api
 | |
|      * @param bool $altVisible If the scores table should be visible on alt
 | |
|      * @return static
 | |
|      */
 | |
|     public function setScoresTableAltVisible($altVisible)
 | |
|     {
 | |
|         $this->setProperty($this->scoresTableProperties, "alt_visible", (bool)$altVisible);
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Render the UI Properties standalone
 | |
|      *
 | |
|      * @return \DOMDocument
 | |
|      */
 | |
|     public function renderStandalone()
 | |
|     {
 | |
|         $domDocument                = new \DOMDocument("1.0", "utf-8");
 | |
|         $domDocument->xmlStandalone = true;
 | |
| 
 | |
|         $domElement = $domDocument->createElement("ui_properties");
 | |
|         $domDocument->appendChild($domElement);
 | |
| 
 | |
|         $allProperties = $this->getProperties();
 | |
|         foreach ($allProperties as $property => $propertySettings) {
 | |
|             if (!$propertySettings) {
 | |
|                 continue;
 | |
|             }
 | |
| 
 | |
|             $propertyDomElement = $domDocument->createElement($property);
 | |
|             $domElement->appendChild($propertyDomElement);
 | |
| 
 | |
|             foreach ($propertySettings as $settingName => $settingValue) {
 | |
|                 $settingValueString = (is_string($settingValue) ? $settingValue : var_export($settingValue, true));
 | |
|                 $propertyDomElement->setAttribute($settingName, $settingValueString);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return $domDocument;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get string representation
 | |
|      *
 | |
|      * @return string
 | |
|      */
 | |
|     public function __toString()
 | |
|     {
 | |
|         return $this->renderStandalone()
 | |
|                     ->saveXML();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get associative array of all properties
 | |
|      *
 | |
|      * @return array
 | |
|      */
 | |
|     protected function getProperties()
 | |
|     {
 | |
|         return array(
 | |
|             "chat" => $this->chatProperties,
 | |
|             "chat_avatar" => $this->chatAvatarProperties,
 | |
|             "map_info" => $this->mapInfoProperties,
 | |
|             "countdown" => $this->countdownProperties,
 | |
|             "go" => $this->goProperties,
 | |
|             "endmap_ladder_recap" => $this->endMapLadderRecapProperties,
 | |
|             "scorestable" => $this->scoresTableProperties
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get a property value if it's set
 | |
|      *
 | |
|      * @param array  $properties Properties array
 | |
|      * @param string $name       Property name
 | |
|      * @return mixed
 | |
|      */
 | |
|     protected function getProperty(array $properties, $name)
 | |
|     {
 | |
|         return (isset($properties[$name]) ? $properties[$name] : null);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set a property value
 | |
|      *
 | |
|      * @param array  $properties Properties array
 | |
|      * @param string $name       Property name
 | |
|      * @param mixed  $value      Property value
 | |
|      * @return static
 | |
|      */
 | |
|     protected function setProperty(array &$properties, $name, $value)
 | |
|     {
 | |
|         $properties[$name] = $value;
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set the Visible property value
 | |
|      *
 | |
|      * @param array $properties Properties array
 | |
|      * @return bool
 | |
|      */
 | |
|     protected function getVisibleProperty(array &$properties)
 | |
|     {
 | |
|         return $this->getProperty($properties, "visible");
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set the Visible property value
 | |
|      *
 | |
|      * @param array $properties Properties array
 | |
|      * @param bool  $visible    Visibility value
 | |
|      * @return static
 | |
|      */
 | |
|     protected function setVisibleProperty(array &$properties, $visible)
 | |
|     {
 | |
|         $this->setProperty($properties, "visible", (bool)$visible);
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the Position property value
 | |
|      *
 | |
|      * @param array $properties Properties array
 | |
|      * @return string
 | |
|      */
 | |
|     protected function getPositionProperty(array &$properties)
 | |
|     {
 | |
|         return $this->getProperty($properties, "pos");
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set the Position property value
 | |
|      *
 | |
|      * @param array $properties Properties array
 | |
|      * @param float $positionX  X position
 | |
|      * @param float $positionY  Y position
 | |
|      * @param float $positionZ  (optional) Z position (Z-index)
 | |
|      * @return static
 | |
|      */
 | |
|     protected function setPositionProperty(array &$properties, $positionX, $positionY, $positionZ = null)
 | |
|     {
 | |
|         $position = array((float)$positionX, (float)$positionY);
 | |
|         if ($positionZ) {
 | |
|             array_push($position, (float)$positionZ);
 | |
|         }
 | |
|         $this->setProperty($properties, "pos", implode(" ", $position));
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
| }
 |