From 554fb2586a3bc8612f3011c7986e84f628310aac Mon Sep 17 00:00:00 2001 From: Alexei Date: Thu, 30 Apr 2020 21:42:30 +0200 Subject: [PATCH 1/4] person/Benutzer_model: - added methods for generating alias and checking if alias exists ressource/Mitarbeiter_model: - added method getPersonal --- application/models/person/Benutzer_model.php | 49 +++++++++++++++++++ .../models/ressource/Mitarbeiter_model.php | 41 ++++++++++++++++ 2 files changed, 90 insertions(+) diff --git a/application/models/person/Benutzer_model.php b/application/models/person/Benutzer_model.php index a21811bb4..b2bc0f027 100644 --- a/application/models/person/Benutzer_model.php +++ b/application/models/person/Benutzer_model.php @@ -33,4 +33,53 @@ class Benutzer_model extends DB_Model return $this->execQuery($sql, array($person_id, $oe_kurzbz)); } + + /** + * Checks if alias exists + * @param $alias + */ + public function aliasExists($alias) + { + $this->addSelect('1'); + $result = $this->loadWhere(array('alias' => $alias)); + + if (!isError($result)) + { + if (hasData($result)) + { + $result = success(array(true)); + } + else if (!hasData($result)) + { + $result = success(array(false)); + } + } + + return $result; + } + + /** + * Generates alias for a uid + * @param $uid + * @return array the alias + */ + public function generateAlias($uid) + { + $aliasres = ''; + $this->addSelect('vorname, nachname'); + $this->addJoin('public.tbl_person', 'person_id'); + $nameresult = $this->loadWhere(array('uid' => $uid)); + + if (hasData($nameresult)) + { + $aliasdata = getData($nameresult); + $alias = mb_strtolower($aliasdata[0]->vorname).'.'.mb_strtolower($aliasdata[0]->nachname); + $aliasexists = $this->aliasExists($alias); + + if (hasData($aliasexists) && !getData($aliasexists)[0]) + $aliasres = $alias; + + } + return success($aliasres); + } } diff --git a/application/models/ressource/Mitarbeiter_model.php b/application/models/ressource/Mitarbeiter_model.php index ccaeacd0d..523a69fa1 100644 --- a/application/models/ressource/Mitarbeiter_model.php +++ b/application/models/ressource/Mitarbeiter_model.php @@ -40,4 +40,45 @@ class Mitarbeiter_model extends DB_Model return success(false); } } + + /** + * Laedt das Personal + * + * @param $fix wenn true werden nur fixangestellte geladen + * @param $aktiv wenn true werden nur aktive geladen, wenn false dann nur inaktve, wenn null dann alle + * @param $verwendung wenn true werden alle geladen die eine BIS-Verwendung eingetragen haben + * @return array + */ + public function getPersonal($aktiv, $fix, $verwendung) + { + $qry = "SELECT DISTINCT ON(mitarbeiter_uid) *, + tbl_benutzer.aktiv as aktiv, + tbl_mitarbeiter.insertamum, + tbl_mitarbeiter.insertvon, + tbl_mitarbeiter.updateamum, + tbl_mitarbeiter.updatevon + FROM ((public.tbl_mitarbeiter JOIN public.tbl_benutzer ON(mitarbeiter_uid=uid)) + JOIN public.tbl_person USING(person_id)) + LEFT JOIN public.tbl_benutzerfunktion USING(uid) + WHERE true"; + + if ($fix === true) + $qry .= " AND fixangestellt=true"; + if ($fix === false) + $qry .= " AND fixangestellt=false"; + if ($aktiv === true) + $qry .= " AND tbl_benutzer.aktiv=true"; + if ($aktiv === false) + $qry .= " AND tbl_benutzer.aktiv=false"; + if ($verwendung === true) + { + $qry.=" AND EXISTS(SELECT * FROM bis.tbl_bisverwendung WHERE (ende>now() or ende is null) AND tbl_bisverwendung.mitarbeiter_uid=tbl_mitarbeiter.mitarbeiter_uid)"; + } + if ($verwendung === false) + { + $qry.=" AND NOT EXISTS(SELECT * FROM bis.tbl_bisverwendung WHERE (ende>now() or ende is null) AND tbl_bisverwendung.mitarbeiter_uid=tbl_mitarbeiter.mitarbeiter_uid)"; + } + + return $this->execQuery($qry); + } } From e8648e52ecd27dea3603e8e8a08303fe41bbe86b Mon Sep 17 00:00:00 2001 From: Alexei Date: Mon, 4 May 2020 20:21:57 +0200 Subject: [PATCH 2/4] 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)); + } } From 704d39095b8b5026790c2b8e71a9f1c4a1b4ac4b Mon Sep 17 00:00:00 2001 From: Alexei Date: Tue, 12 May 2020 19:34:17 +0200 Subject: [PATCH 3/4] - ressource/Mitarbeiter_model.php - improved getPersonal method - person/Kontakt_model.php - added getFormaKontakttyp and get FirmenTelefon methods --- application/models/person/Kontakt_model.php | 60 +++++++++++++++++++ .../models/ressource/Mitarbeiter_model.php | 8 ++- 2 files changed, 65 insertions(+), 3 deletions(-) diff --git a/application/models/person/Kontakt_model.php b/application/models/person/Kontakt_model.php index 3f27604e8..36ba05be4 100644 --- a/application/models/person/Kontakt_model.php +++ b/application/models/person/Kontakt_model.php @@ -10,6 +10,7 @@ class Kontakt_model extends DB_Model parent::__construct(); $this->dbTable = 'public.tbl_kontakt'; $this->pk = 'kontakt_id'; + $this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel'); } public function getWholeKontakt($kontakt_id, $person_id = null, $kontakttyp = null) @@ -59,4 +60,63 @@ class Kontakt_model extends DB_Model return $this->execQuery($sql, array($person_id, $kontakttyp)); } + + /** + * Laedt einen Kontakt eines Standortes + * Es wird nur der erste Eintrag zurueckgeliefert! + * @param $standort_id + * @param $kontakttyp + */ + public function getFirmaKontakttyp($standort_id, $kontakttyp) + { + if (!is_numeric($standort_id)) + { + return error('StandortID ist ungueltig'); + } + + $qry = "SELECT kontakt, kontakt_id FROM public.tbl_kontakt WHERE standort_id=? AND kontakttyp=? ORDER BY kontakt_id LIMIT 1;"; + + return $this->execQuery($qry, array('standort_id' => $standort_id, 'kontakttyp' => $kontakttyp)); + } + + /** + * Gets Firmentelefon for a uid, can be Vorwahl with Telefonklappe or Formenhandy + * @param $uid + */ + public function getFirmenTelefon($uid) + { + $firmentelefon = success(array()); + + $this->MitarbeiterModel->addSelect('standort_id, telefonklappe, person_id'); + $this->MitarbeiterModel->addJoin('public.tbl_benutzer', 'tbl_mitarbeiter.mitarbeiter_uid = tbl_benutzer.uid'); + $mitarbeiter = $this->MitarbeiterModel->load(array('uid' => $uid)); + + if (hasData($mitarbeiter)) + { + $mitarbeiter = getData($mitarbeiter); + if (isEmptyString($mitarbeiter[0]->telefonklappe)) + { + $this->addSelect('kontakt'); + $this->addOrder('updateamum, insertamum', 'DESC'); + $this->addLimit(1); + $firmenhandy = $this->loadWhere(array('person_id' => $mitarbeiter[0]->person_id, 'kontakttyp' => 'firmenhandy')); + if (hasData($firmenhandy)) + { + $firmenhandy = getData($firmenhandy); + $firmentelefon = success($firmenhandy[0]->kontakt); + } + } + else + { + $firmaKontakttyp = $this->getFirmaKontakttyp($mitarbeiter[0]->standort_id, 'telefon'); + if (hasData($firmaKontakttyp)) + { + $vorwahl = getData($firmaKontakttyp); + $vorwahl = $vorwahl[0]->kontakt; + $firmentelefon = success(array($vorwahl.'-'.$mitarbeiter[0]->telefonklappe)); + } + } + } + return $firmentelefon; + } } diff --git a/application/models/ressource/Mitarbeiter_model.php b/application/models/ressource/Mitarbeiter_model.php index 523a69fa1..3b0bd2479 100644 --- a/application/models/ressource/Mitarbeiter_model.php +++ b/application/models/ressource/Mitarbeiter_model.php @@ -64,17 +64,19 @@ class Mitarbeiter_model extends DB_Model if ($fix === true) $qry .= " AND fixangestellt=true"; - if ($fix === false) + elseif ($fix === false) $qry .= " AND fixangestellt=false"; + if ($aktiv === true) $qry .= " AND tbl_benutzer.aktiv=true"; - if ($aktiv === false) + elseif ($aktiv === false) $qry .= " AND tbl_benutzer.aktiv=false"; + if ($verwendung === true) { $qry.=" AND EXISTS(SELECT * FROM bis.tbl_bisverwendung WHERE (ende>now() or ende is null) AND tbl_bisverwendung.mitarbeiter_uid=tbl_mitarbeiter.mitarbeiter_uid)"; } - if ($verwendung === false) + elseif ($verwendung === false) { $qry.=" AND NOT EXISTS(SELECT * FROM bis.tbl_bisverwendung WHERE (ende>now() or ende is null) AND tbl_bisverwendung.mitarbeiter_uid=tbl_mitarbeiter.mitarbeiter_uid)"; } From 7ce489e8472f816f5e01e0c73ec0d0192a8b1f8f Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 10 Jun 2020 10:11:19 +0200 Subject: [PATCH 4/4] - added iso3166_1_a3 field to bis.tbl_nation - person/kontakt_model: renamed getFirmenTelefon to getFirmentelefon, separated vorwahl from telefonklappe --- application/models/person/Kontakt_model.php | 8 ++++---- system/dbupdate_3.3.php | 14 +++++++++++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/application/models/person/Kontakt_model.php b/application/models/person/Kontakt_model.php index 36ba05be4..33dc66c86 100644 --- a/application/models/person/Kontakt_model.php +++ b/application/models/person/Kontakt_model.php @@ -80,10 +80,10 @@ class Kontakt_model extends DB_Model } /** - * Gets Firmentelefon for a uid, can be Vorwahl with Telefonklappe or Formenhandy + * Gets Firmentelefon for a uid, can be Vorwahl with Telefonklappe or Firmenhandy * @param $uid */ - public function getFirmenTelefon($uid) + public function getFirmentelefon($uid) { $firmentelefon = success(array()); @@ -103,7 +103,7 @@ class Kontakt_model extends DB_Model if (hasData($firmenhandy)) { $firmenhandy = getData($firmenhandy); - $firmentelefon = success($firmenhandy[0]->kontakt); + $firmentelefon = success(array('kontakt' => $firmenhandy[0]->kontakt, 'telefonklappe' => '')); } } else @@ -113,7 +113,7 @@ class Kontakt_model extends DB_Model { $vorwahl = getData($firmaKontakttyp); $vorwahl = $vorwahl[0]->kontakt; - $firmentelefon = success(array($vorwahl.'-'.$mitarbeiter[0]->telefonklappe)); + $firmentelefon = success(array('kontakt' => $vorwahl, 'telefonklappe' => $mitarbeiter[0]->telefonklappe)); } } } diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index b54b28373..504a048a1 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -4019,6 +4019,18 @@ if (!$result = @$db->db_query('SELECT 1 FROM system.tbl_jobtriggers LIMIT 1')) echo '
Granted privileges to vilesci on system.tbl_jobtriggers'; } +// Add column iso3166_1_a3 to tbl_nation +if(!$result = @$db->db_query("SELECT iso3166_1_a3 FROM bis.tbl_nation LIMIT 1")) +{ + $qry = "ALTER table bis.tbl_nation ADD COLUMN iso3166_1_a3 VARCHAR(3); + COMMENT ON COLUMN bis.tbl_nation.iso3166_1_a3 IS 'ISO 3166-1 alpha-3 country code';"; + + if(!$db->db_query($qry)) + echo 'bis.tbl_nation: '.$db->db_last_error().'
'; + else + echo '
bis.tbl_nation: Spalte iso3166_1_a3 hinzugefuegt'; +} + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; @@ -4048,7 +4060,7 @@ $tabellen=array( "bis.tbl_mobilitaet" => array("mobilitaet_id","prestudent_id","mobilitaetstyp_kurzbz","studiensemester_kurzbz","mobilitaetsprogramm_code","gsprogramm_id","firma_id","status_kurzbz","ausbildungssemester","insertvon","insertamum","updatevon","updateamum"), "bis.tbl_mobilitaetstyp" => array("mobilitaetstyp_kurzbz","bezeichnung","aktiv"), "bis.tbl_mobilitaetsprogramm" => array("mobilitaetsprogramm_code","kurzbz","beschreibung","sichtbar","sichtbar_outgoing"), - "bis.tbl_nation" => array("nation_code","entwicklungsstand","eu","ewr","kontinent","kurztext","langtext","engltext","sperre","nationengruppe_kurzbz"), + "bis.tbl_nation" => array("nation_code","entwicklungsstand","eu","ewr","kontinent","kurztext","langtext","engltext","sperre","nationengruppe_kurzbz","iso3166_1_a3"), "bis.tbl_nationengruppe" => array("nationengruppe_kurzbz","nationengruppe_bezeichnung","aktiv"), "bis.tbl_orgform" => array("orgform_kurzbz","code","bezeichnung","rolle","bisorgform_kurzbz","bezeichnung_mehrsprachig"), "bis.tbl_verwendung" => array("verwendung_code","verwendungbez"),