125 lines
2.4 KiB
PHP
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();
|
|
}
|
|
|
|
}
|