TrackManiaControl/libs/FML/UniqueID.php
2017-03-25 18:40:15 +01:00

125 lines
2.4 KiB
PHP

<?php
namespace FML;
use FML\Types\Identifiable;
/**
* Unique ID Model Class
*
* @author steeffeen
* @copyright FancyManiaLinks Copyright © 2017 Steffen Schröder
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class UniqueID
{
/*
* Constants
*/
const PREFIX = 'FML_ID_';
/**
* @var int $currentIndex Current global id index
*/
protected static $currentIndex = 0;
/**
* @var int $index Unique id index
*/
protected $index = null;
/**
* Create a new Unique ID
*
* @return static
*/
public static function create()
{
return new static();
}
/**
* Check and return the Id of an Identifable Element
*
* @param Identifiable $element Identifable element
* @return string
*/
public static function check(Identifiable $element)
{
$elementId = $element->getId();
if (!$elementId) {
$element->setId(new static());
return $element->getId();
}
$dangerousCharacters = array(' ', '|', PHP_EOL);
$danger = false;
foreach ($dangerousCharacters as $dangerousCharacter) {
if (stripos($elementId, $dangerousCharacter) !== false) {
$danger = true;
break;
}
}
if ($danger) {
trigger_error("Don't use special characters in IDs, they might cause problems! Stripping them for you...");
$elementId = str_ireplace($dangerousCharacters, '', $elementId);
$element->setId($elementId);
}
return $element->getId();
}
/**
* Get a new global unique index
*
* @return int
*/
protected static function newIndex()
{
self::$currentIndex++;
return self::$currentIndex;
}
/**
* Construct a Unique ID
*/
public function __construct()
{
$this->index = static::newIndex();
}
/**
* Get the Unique ID index
*
* @return int
*/
public function getIndex()
{
return $this->index;
}
/**
* Get the Unique ID value
*
* @return string
*/
public function getValue()
{
return self::PREFIX . $this->getIndex();
}
/**
* Get the string representation
*
* @return string
*/
public function __toString()
{
return $this->getValue();
}
}