From e8648e52ecd27dea3603e8e8a08303fe41bbe86b Mon Sep 17 00:00:00 2001 From: Alexei Date: Mon, 4 May 2020 20:21:57 +0200 Subject: [PATCH] person/Benutzer_model.php: generated alias string is sanitized (special characters, spaces,...) --- application/models/person/Benutzer_model.php | 48 +++++++++++++++++++- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/application/models/person/Benutzer_model.php b/application/models/person/Benutzer_model.php index b2bc0f027..2c65003dd 100644 --- a/application/models/person/Benutzer_model.php +++ b/application/models/person/Benutzer_model.php @@ -59,7 +59,7 @@ class Benutzer_model extends DB_Model } /** - * Generates alias for a uid + * Generates alias for a uid. * @param $uid * @return array the alias */ @@ -73,7 +73,7 @@ class Benutzer_model extends DB_Model if (hasData($nameresult)) { $aliasdata = getData($nameresult); - $alias = mb_strtolower($aliasdata[0]->vorname).'.'.mb_strtolower($aliasdata[0]->nachname); + $alias = $this->_sanitizeAliasName($aliasdata[0]->vorname).'.'.$this->_sanitizeAliasName($aliasdata[0]->nachname); $aliasexists = $this->aliasExists($alias); if (hasData($aliasexists) && !getData($aliasexists)[0]) @@ -82,4 +82,48 @@ class Benutzer_model extends DB_Model } return success($aliasres); } + + // -------------------------------------------------------------------------------------------- + // Private methods + + /** + * Sanitizes a string used for alias. Replaces special characters, spaces, upper case. + * @param string $str + * @return string + */ + private function _sanitizeAliasName($str) + { + $enc = 'UTF-8'; + + $acentos = array( + 'A' => '/À|Á|Â|Ã|Å/', + 'Ae' => '/Ä/', + 'a' => '/à|á|â|ã|å/', + 'ae'=> '/ä/', + 'C' => '/Ç/', + 'c' => '/ç/', + 'E' => '/È|É|Ê|Ë/', + 'e' => '/è|é|ê|ë/', + 'I' => '/Ì|Í|Î|Ï/', + 'i' => '/ì|í|î|ï/', + 'N' => '/Ñ/', + 'n' => '/ñ/', + 'O' => '/Ò|Ó|Ô|Õ/', + 'Oe' => '/Ö/', + 'o' => '/ò|ó|ô|õ/', + 'oe' => '/ö/', + 'U' => '/Ù|Ú|Û/', + 'Ue' => '/Ü/', + 'u' => '/ù|ú|û/', + 'ue' => '/ü/', + 'Y' => '/Ý/', + 'y' => '/ý|ÿ/', + 'a.' => '/ª/', + 'o.' => '/º/', + 'ss' => '/ß/', + ); + + $str = preg_replace($acentos, array_keys($acentos), htmlentities($str,ENT_NOQUOTES, $enc)); + return mb_strtolower(str_replace(' ','_', $str)); + } }