Merge branch 'feature-7697/SAPSF_erweiterte_Attributliste'

This commit is contained in:
Andreas Österreicher
2020-08-13 17:29:37 +02:00
3 changed files with 110 additions and 34 deletions
+42
View File
@@ -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));
}
+5 -34
View File
@@ -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));
}
}
@@ -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);
}
}