dbTable = 'public.tbl_student'; $this->pk = array('student_uid'); $this->hasSequence = false; } /** * Checks if the user is a Student. * @param string $uid * @return array */ public function isStudent($uid) { $this->addSelect('1'); $result = $this->loadWhere(array('student_uid' => $uid)); if(hasData($result)) { return success(true); } else { return success(false); } } // **** // * Generiert die Matrikelnummer // * FORMAT: 0710254001 // * 07 = Jahr // * 1/2/0 = WS/SS/incoming // * 0254 = Studiengangskennzahl vierstellig // * 001 = Laufende Nummer // **** public function generateMatrikelnummer($studiengang_kz, $studiensemester_kurzbz) { $jahr = mb_substr($studiensemester_kurzbz, 4); $sem = mb_substr($studiensemester_kurzbz, 0, 2); if ($sem == 'SS') $jahr = $jahr - 1; $art = 0; $matrikelnummer = sprintf("%02d", $jahr).$art.sprintf("%04d", $studiengang_kz); $qry = "SELECT matrikelnr FROM public.tbl_student WHERE matrikelnr LIKE ? ORDER BY matrikelnr DESC LIMIT 1"; $matrikelnrres = $this->execQuery($qry, array($matrikelnummer.'%')); if (hasData($matrikelnrres)) { $max = mb_substr($matrikelnrres->retval[0]->matrikelnr, 7); } else $max = 0; $max += 1; return $matrikelnummer.sprintf("%03d", $max); } /** * Generiert die Matrikelnummer * FORMAT: 0710254001 * 07 = Jahr * 1/2/0 = WS/SS/incoming * 0254 = Studiengangskennzahl vierstellig * 001 = Laufende Nummer * copy of generateMatrikelnummer plus * logic FH Burgenland * * TODO(chris): replace function above with this? * TODO(chris): rename to generatePersonenkennzeichen? * * @param integer $studiengang_kz * @param string $studiensemester_kurzbz * @param string $typ * * @return stdClass */ public function generateMatrikelnummer2($studiengang_kz, $studiensemester_kurzbz, $typ = null) { $personenkennzeichen = false; Events::trigger( 'generate_personenkennzeichen', function ($value) use ($personenkennzeichen) { $personenkennzeichen = $value; }, $studiengang_kz, $studiensemester_kurzbz, $typ ); if ($personenkennzeichen !== false) return success($personenkennzeichen); // Validierung der Eingabewerte if (strlen($studiensemester_kurzbz) < 6) { throw new InvalidArgumentException("Ungültiges studiensemester_kurzbz Format."); } $jahr = mb_substr($studiensemester_kurzbz, 4); $art = substr($studiensemester_kurzbz, 0, 2); if (($studiengang_kz < 0) || (isset($typ) && ($typ == 'l'))) { $studiengang_kz=abs($studiengang_kz); //Lehrgang switch($art) { case 'WS': $art = '3'; break; case 'SS': $art = '4'; break; default: $art = '0'; break; } } else { //Studiengang switch($art) { case 'WS': $art = '1'; break; case 'SS': $art = '2'; break; default: $art = '0'; break; } } if($art=='2' || $art=='4') $jahr = $jahr-1; //FH-Burgenland - weil leider die AO Studiengänge aufgeteilt sind //(AO sind normal 9+erhalter Nummer, matrikelnr/personenkz wird auch im DVUH Extension berücksichtigt) if ($studiengang_kz >= 90010 && $studiengang_kz <= 90019) { $matrikelnummer = sprintf("%02d", $jahr).$art.substr($studiengang_kz, 0, 4); } else { $matrikelnummer = sprintf("%02d", $jahr).$art.sprintf("%04d", $studiengang_kz); } $qry = "SELECT matrikelnr FROM public.tbl_student WHERE matrikelnr LIKE ? ORDER BY matrikelnr DESC LIMIT 1"; $matrikelnrres = $this->execQuery($qry, array($matrikelnummer.'%')); $max = 0; if ($matrikelnrres && hasData($matrikelnrres)) { $max = mb_substr(trim(getData($matrikelnrres)[0]->matrikelnr), -3); if (!is_numeric($max)) { $max = (int)$max; } } $max += 1; return success($matrikelnummer.sprintf("%03d", $max)); } /** * Generiert die UID * FORMAT: el07b001 * $stgkzl: el = studiengangskuerzel * $jahr: 07 = Jahr * $stgtyp: b/m/d/x = Bachelor/Master/Diplom/Incoming * $matrikelnummer * 001 = Laufende Nummer Wenn StSem==SS dann wird zur Nummer 500 dazugezaehlt * Bei Incoming im Masterstudiengang wird auch 500 dazugezaehlt * * @param string $stgkzl * @param string $jahr * @param string $stgtyp * @param string $matrikelnummer * @param string $vorname * @param string $nachname * * @return stdClass */ public function generateUID($stgkzl, $jahr, $stgtyp, $matrikelnummer, $vorname, $nachname) { $uid = false; Events::trigger( 'generate_student_uid', function ($value) use ($uid) { $uid = $value; }, $stgkzl, $jahr, $stgtyp, $matrikelnummer, $vorname, $nachname ); if ($uid !== false) return success($uid); $art = mb_substr($matrikelnummer, 2, 1); $nr = mb_substr($matrikelnummer, mb_strlen(trim($matrikelnummer))-3); if($art=='2') //Sommersemester $nr = $nr+500; elseif($art=='0' && $stgtyp=='m') //Incoming im Masterstudiengang $nr = $nr+500; elseif($art=='4' && $stgtyp=='l') // Lehrgangsteilnehmer im Sommersemester $nr = $nr+500; return success(mb_strtolower($stgkzl.$jahr.($art!='0'?$stgtyp:'x').$nr)); } /** * Get students UID by PrestudentID. * @param $prestudent_id * @return mixed */ public function getUID($prestudent_id) { $this->addSelect('student_uid'); $result = $this->loadWhere( array('prestudent_id' => $prestudent_id) ); if (!hasData($result)) { show_error('Failed getting UID by prestudent_id'); } return $result->retval[0]->student_uid; } public function searchStudent($filter) { $this->addSelect('vorname, nachname, gebdatum, person.person_id, student_uid'); $this->addJoin('public.tbl_prestudent ps', 'prestudent_id'); $this->addJoin('public.tbl_person person', 'person_id'); $result = $this->loadWhere( "lower(student_uid) like ".$this->db->escape('%'.$filter.'%')." OR lower(person.nachname) like ".$this->db->escape('%'.$filter.'%')." OR lower(person.vorname) like ".$this->db->escape('%'.$filter.'%')." OR lower(person.nachname || ' ' || person.vorname) like ".$this->db->escape('%'.$filter.'%')." OR lower(person.vorname || ' ' || person.nachname) like ".$this->db->escape('%'.$filter.'%') ); return $result; } /** * Get the FH-Email for a student (not the private kontakt email) * @param $student_uid * @return string */ public function getEmailFH($student_uid) { return $student_uid . '@' . DOMAIN; } public function getEmailAnredeForStudentUID($student_uid) { $qry = "SELECT anrede, titelpre, vorname, vornamen, nachname, titelpost FROM campus.vw_student WHERE uid = ?"; return $this->execReadOnlyQuery($qry, array($student_uid)); } }