/** * Retrieve a unique URL for a profile based on the display name. * * @param string $displayName The display name to base on. * @param int $id The id of the profile to ignore. * @return string */ public static function getUrl($displayName, $id = null) { // decode special chars $displayName = \SpoonFilter::htmlspecialcharsDecode((string) $displayName); // urlise $url = (string) CommonUri::getUrl($displayName); // get db $db = FrontendModel::getContainer()->get('database'); // new item if ($id === null) { // get number of profiles with this URL $number = (int) $db->getVar('SELECT 1 FROM profiles AS p WHERE p.url = ? LIMIT 1', (string) $url); // already exists if ($number != 0) { // add number $url = FrontendModel::addNumber($url); // try again return self::getURL($url); } } else { // current profile should be excluded // get number of profiles with this URL $number = (int) $db->getVar('SELECT 1 FROM profiles AS p WHERE p.url = ? AND p.id != ? LIMIT 1', array((string) $url, (int) $id)); // already exists if ($number != 0) { // add number $url = FrontendModel::addNumber($url); // try again return self::getURL($url, $id); } } return $url; }