diff --git a/application/helpers/hlp_common_helper.php b/application/helpers/hlp_common_helper.php index 6a2675a04..a7eda8827 100644 --- a/application/helpers/hlp_common_helper.php +++ b/application/helpers/hlp_common_helper.php @@ -301,3 +301,45 @@ function isLogged() return isset($ci->authlib) && $ci->authlib->getAuthObj() != null; } + +/** + * Konvertiert Problematische Sonderzeichen in Strings fuer + * Accountnamen und EMail-Aliase + * + * @param $str + * @return bereinigter String + */ +function sanitizeProblemChars($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' => '/ß/' + ); + + return preg_replace($acentos, array_keys($acentos), htmlentities($str,ENT_NOQUOTES, $enc)); +} diff --git a/application/models/person/Benutzer_model.php b/application/models/person/Benutzer_model.php index 15bce56db..45edf5122 100644 --- a/application/models/person/Benutzer_model.php +++ b/application/models/person/Benutzer_model.php @@ -43,13 +43,13 @@ class Benutzer_model extends DB_Model $this->addSelect('1'); $result = $this->loadWhere(array('alias' => $alias)); - if (!isError($result)) + if (isSuccess($result)) { if (hasData($result)) { $result = success(array(true)); } - else if (!hasData($result)) + else { $result = success(array(false)); } @@ -66,6 +66,7 @@ class Benutzer_model extends DB_Model public function generateAlias($uid) { $aliasres = ''; + $this->addLimit(1); $this->addSelect('vorname, nachname'); $this->addJoin('public.tbl_person', 'person_id'); $nameresult = $this->loadWhere(array('uid' => $uid)); @@ -86,43 +87,13 @@ class Benutzer_model extends DB_Model // Private methods /** - * Sanitizes a string used for alias. Replaces special characters, spaces, upper case. + * Sanitizes a string used for alias. Replaces special characters, spaces, sets lower 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)); + $str = sanitizeProblemChars($str); return mb_strtolower(str_replace(' ','_', $str)); } } diff --git a/application/models/ressource/Mitarbeiter_model.php b/application/models/ressource/Mitarbeiter_model.php index 329cc3064..abf71e1b9 100644 --- a/application/models/ressource/Mitarbeiter_model.php +++ b/application/models/ressource/Mitarbeiter_model.php @@ -132,4 +132,67 @@ class Mitarbeiter_model extends DB_Model return $this->execQuery($qry, $params); } + + /** + * Checks if alias exists + * @param $kurzbz + */ + public function kurzbzExists($kurzbz) + { + $this->addSelect('1'); + $result = $this->loadWhere(array('kurzbz' => $kurzbz)); + + if (isSuccess($result)) + { + if (hasData($result)) + { + $result = success(array(true)); + } + else + { + $result = success(array(false)); + } + } + + return $result; + } + + /** + * Generates alias for a uid. + * @param $uid + * @return array the alias if newly generated + */ + public function generateKurzbz($uid) + { + $kurzbz = ''; + $this->addLimit(1); + $this->addSelect('vorname, nachname'); + $this->addJoin('public.tbl_benutzer', 'tbl_mitarbeiter.mitarbeiter_uid = tbl_benutzer.uid'); + $this->addJoin('public.tbl_person', 'person_id'); + $nameresult = $this->loadWhere(array('uid' => $uid)); + + if (hasData($nameresult)) + { + $kurzbzdata = getData($nameresult); + $nachname_clean = sanitizeProblemChars($kurzbzdata[0]->nachname); + $vorname_clean = sanitizeProblemChars($kurzbzdata[0]->vorname); + + for ($nn = 6, $vn = 2; $nn != 0; $nn--, $vn++) + { + $kurzbz = mb_substr($nachname_clean, 0, $nn); + $kurzbz .= mb_substr($vorname_clean, 0, $vn); + + $kurzbzexists = $this->kurzbzExists($kurzbz); + + if (hasData($kurzbzexists) && !getData($kurzbzexists)[0]) + break; + } + + $kurzbzexists = $this->kurzbzExists($kurzbz); + + if (hasData($kurzbzexists) && getData($kurzbzexists)[0]) + return error('No Kurzbezeichnung could be generated'); + } + return success($kurzbz); + } }