mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 20:29:29 +00:00
875 lines
24 KiB
PHP
875 lines
24 KiB
PHP
<?php
|
|
|
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
|
|
|
|
|
$config['person'] = [
|
|
'primarykey' => 'person_id',
|
|
'table' => 'public.tbl_person',
|
|
'searchfields' => [
|
|
'uid' => [
|
|
'comparison' => 'equals',
|
|
'field' => 'uid',
|
|
'join' => [
|
|
'table' => "public.tbl_benutzer",
|
|
'using' => "person_id"
|
|
],
|
|
'1-n' => true
|
|
],
|
|
'vorname' => [
|
|
'alias' => ['firstname'],
|
|
'comparison' => 'similar',
|
|
'field' => 'vorname'
|
|
],
|
|
'nachname' => [
|
|
'alias' => ['lastname', 'surename'],
|
|
'comparison' => 'similar',
|
|
'field' => 'nachname'
|
|
],
|
|
'name' => [
|
|
'comparison' => 'similar',
|
|
'field' => "(vorname || ' ' || nachname)"
|
|
],
|
|
'email' => [
|
|
'comparison' => 'similar',
|
|
'field' => 'kontakt',
|
|
'join' => [
|
|
'table' => "public.tbl_kontakt",
|
|
'on' => "kontakttyp = 'email' AND tbl_kontakt.person_id = tbl_person.person_id"
|
|
],
|
|
"1-n" => true
|
|
],
|
|
'tel' => [
|
|
'alias' => ['phone', 'telefon'],
|
|
'comparison' => 'similar',
|
|
'field' => 'kontakt',
|
|
'join' => [
|
|
'table' => "public.tbl_kontakt",
|
|
'on' => "kontakttyp IN ('telefon', 'so.tel', 'mobil') AND tbl_kontakt.person_id = tbl_person.person_id"
|
|
],
|
|
"1-n" => true
|
|
],
|
|
'preid' => [
|
|
'alias' => ['prestudent_id'],
|
|
'comparison' => 'equal-int',
|
|
'field' => 'prestudent_id',
|
|
'join' => [
|
|
'table' => "public.tbl_prestudent",
|
|
'using' => "person_id"
|
|
],
|
|
'1-n' => true
|
|
],
|
|
'pid' => [
|
|
'alias' => ['person_id'],
|
|
'comparison' => 'equal-int',
|
|
'field' => 'person_id'
|
|
]
|
|
],
|
|
'resultfields' => [
|
|
"ARRAY( SELECT uid FROM public.tbl_benutzer WHERE person_id = p.person_id ) AS uids",
|
|
"p.person_id",
|
|
"(p.vorname || ' ' || p.nachname) AS name",
|
|
"ARRAY( SELECT kontakt FROM public.tbl_kontakt WHERE kontakttyp = 'email' AND person_id=p.person_id ) AS email",
|
|
"CASE
|
|
WHEN p.foto IS NOT NULL THEN 'data:image/jpeg' || CONVERT_FROM(DECODE('3b','hex'), 'UTF8') || 'base64,' || p.foto
|
|
ELSE NULL END
|
|
AS photo_url"
|
|
],
|
|
'resultjoin' => "
|
|
JOIN public.tbl_person p USING (person_id)"
|
|
];
|
|
|
|
$config['student'] = [
|
|
'primarykey' => 'student_uid',
|
|
'table' => 'public.tbl_student',
|
|
'searchfields' => [
|
|
'uid' => [
|
|
'comparison' => 'equals',
|
|
'field' => 'student_uid'
|
|
],
|
|
'vorname' => [
|
|
'alias' => ['firstname'],
|
|
'comparison' => 'similar',
|
|
'field' => 'vorname',
|
|
'join' => [
|
|
[
|
|
'table' => "public.tbl_prestudent",
|
|
'using' => "prestudent_id"
|
|
],
|
|
[
|
|
'table' => "public.tbl_person",
|
|
'using' => "person_id"
|
|
]
|
|
]
|
|
],
|
|
'nachname' => [
|
|
'alias' => ['lastname', 'surename'],
|
|
'comparison' => 'similar',
|
|
'field' => 'nachname',
|
|
'join' => [
|
|
[
|
|
'table' => "public.tbl_prestudent",
|
|
'using' => "prestudent_id"
|
|
],
|
|
[
|
|
'table' => "public.tbl_person",
|
|
'using' => "person_id"
|
|
]
|
|
]
|
|
],
|
|
'name' => [
|
|
'comparison' => 'similar',
|
|
'field' => "(vorname || ' ' || nachname)",
|
|
'join' => [
|
|
[
|
|
'table' => "public.tbl_prestudent",
|
|
'using' => "prestudent_id"
|
|
],
|
|
[
|
|
'table' => "public.tbl_person",
|
|
'using' => "person_id"
|
|
]
|
|
]
|
|
],
|
|
'email' => [
|
|
'comparison' => 'similar',
|
|
'field' => 'kontakt',
|
|
'join' => [
|
|
[
|
|
'table' => "public.tbl_prestudent",
|
|
'using' => "prestudent_id"
|
|
],
|
|
[
|
|
'table' => "public.tbl_kontakt",
|
|
'on' => "kontakttyp = 'email' AND tbl_kontakt.person_id = tbl_prestudent.person_id"
|
|
]
|
|
],
|
|
"1-n" => true
|
|
],
|
|
'tel' => [
|
|
'alias' => ['phone', 'telefon'],
|
|
'comparison' => 'similar',
|
|
'field' => 'kontakt',
|
|
'join' => [
|
|
[
|
|
'table' => "public.tbl_prestudent",
|
|
'using' => "prestudent_id"
|
|
],
|
|
[
|
|
'table' => "public.tbl_kontakt",
|
|
'on' => "kontakttyp IN ('telefon', 'so.tel', 'mobil') AND tbl_kontakt.person_id = tbl_prestudent.person_id"
|
|
]
|
|
],
|
|
"1-n" => true
|
|
],
|
|
'stg' => [
|
|
'alias' => ['studiengang'],
|
|
'comparison' => 'equals',
|
|
'field' => "typ || kurzbz",
|
|
'join' => [
|
|
[
|
|
'table' => "public.tbl_prestudent",
|
|
'using' => "prestudent_id"
|
|
],
|
|
[
|
|
'table' => "public.tbl_studiengang",
|
|
'on' => "tbl_studiengang.studiengang_kz = tbl_prestudent.studiengang_kz"
|
|
]
|
|
]
|
|
],
|
|
'preid' => [
|
|
'alias' => ['prestudent_id'],
|
|
'comparison' => 'equal-int',
|
|
'field' => 'prestudent_id'
|
|
],
|
|
'pid' => [
|
|
'alias' => ['person_id'],
|
|
'comparison' => 'equal-int',
|
|
'field' => 'person_id',
|
|
'join' => [
|
|
'table' => "public.tbl_prestudent",
|
|
'using' => "prestudent_id"
|
|
]
|
|
]
|
|
],
|
|
'resultfields' => [
|
|
"s.student_uid AS uid",
|
|
"s.matrikelnr",
|
|
"p.person_id",
|
|
"(p.vorname || ' ' || p.nachname) AS name",
|
|
"(s.student_uid || '@" . DOMAIN . "') || ARRAY( SELECT kontakt FROM public.tbl_kontakt WHERE kontakttyp = 'email' AND person_id=p.person_id ) AS email",
|
|
"CASE
|
|
WHEN p.foto IS NOT NULL THEN 'data:image/jpeg' || CONVERT_FROM(DECODE('3b','hex'), 'UTF8') || 'base64,' || p.foto
|
|
ELSE NULL END
|
|
AS photo_url",
|
|
"b.aktiv"
|
|
],
|
|
'resultjoin' => "
|
|
JOIN public.tbl_student s USING (student_uid)
|
|
JOIN public.tbl_benutzer b ON(b.uid = s.student_uid)
|
|
JOIN public.tbl_person p USING(person_id)"
|
|
];
|
|
|
|
$prestudent_sort = [
|
|
"Student",
|
|
"Incoming",
|
|
"Outgoing",
|
|
"Diplomand",
|
|
"Unterbrecher",
|
|
"Aufgenommener",
|
|
"Wartender",
|
|
"Bewerber",
|
|
"Interessent",
|
|
"Abgewiesener",
|
|
"Absolvent",
|
|
"Abbrecher",
|
|
"Ausserordentlicher",
|
|
"Praktikant"
|
|
];
|
|
$prestudent_sort_array = "array['" . implode("','", $prestudent_sort) . "']";
|
|
$config['prestudent'] = [
|
|
'primarykey' => 'prestudent_id',
|
|
'table' => 'public.tbl_prestudent',
|
|
'searchfields' => [
|
|
'uid' => [
|
|
'comparison' => 'equals',
|
|
'field' => 'student_uid',
|
|
'join' => [
|
|
'table' => "public.tbl_student",
|
|
'using' => "prestudent_id"
|
|
]
|
|
],
|
|
'vorname' => [
|
|
'alias' => ['firstname'],
|
|
'comparison' => 'similar',
|
|
'field' => 'vorname',
|
|
'join' => [
|
|
'table' => "public.tbl_person",
|
|
'using' => "person_id"
|
|
]
|
|
],
|
|
'nachname' => [
|
|
'alias' => ['lastname', 'surename'],
|
|
'comparison' => 'similar',
|
|
'field' => 'nachname',
|
|
'join' => [
|
|
'table' => "public.tbl_person",
|
|
'using' => "person_id"
|
|
]
|
|
],
|
|
'name' => [
|
|
'comparison' => 'similar',
|
|
'field' => "(vorname || ' ' || nachname)",
|
|
'join' => [
|
|
'table' => "public.tbl_person",
|
|
'using' => "person_id"
|
|
]
|
|
],
|
|
'email' => [
|
|
'comparison' => 'similar',
|
|
'field' => 'kontakt',
|
|
'join' => [
|
|
'table' => "public.tbl_kontakt",
|
|
'on' => "kontakttyp = 'email' AND tbl_kontakt.person_id = tbl_prestudent.person_id"
|
|
],
|
|
"1-n" => true
|
|
],
|
|
'tel' => [
|
|
'alias' => ['phone', 'telefon'],
|
|
'comparison' => 'similar',
|
|
'field' => 'kontakt',
|
|
'join' => [
|
|
'table' => "public.tbl_kontakt",
|
|
'on' => "kontakttyp IN ('telefon', 'so.tel', 'mobil') AND tbl_kontakt.person_id = tbl_prestudent.person_id"
|
|
],
|
|
"1-n" => true
|
|
],
|
|
'stg' => [
|
|
'alias' => ['studiengang'],
|
|
'comparison' => 'equals',
|
|
'field' => "typ || kurzbz",
|
|
'join' => [
|
|
'table' => "public.tbl_studiengang",
|
|
'using' => "studiengang_kz"
|
|
]
|
|
],
|
|
'preid' => [
|
|
'alias' => ['prestudent_id'],
|
|
'comparison' => 'equal-int',
|
|
'field' => 'prestudent_id'
|
|
],
|
|
'pid' => [
|
|
'alias' => ['person_id'],
|
|
'comparison' => 'equal-int',
|
|
'field' => 'person_id',
|
|
'join' => [
|
|
'table' => "public.tbl_person",
|
|
'using' => "person_id"
|
|
]
|
|
]
|
|
],
|
|
'resultfields' => [
|
|
"ps.prestudent_id",
|
|
"ps.studiengang_kz",
|
|
"s.matrikelnr",
|
|
"p.person_id",
|
|
"b.uid",
|
|
"(p.vorname || ' ' || p.nachname) AS name",
|
|
"(b.uid || '@" . DOMAIN . "') || ARRAY( SELECT kontakt FROM public.tbl_kontakt WHERE kontakttyp = 'email' AND person_id=p.person_id ) AS email",
|
|
"CASE
|
|
WHEN p.foto IS NOT NULL THEN 'data:image/jpeg' || CONVERT_FROM(DECODE('3b','hex'), 'UTF8') || 'base64,' || p.foto
|
|
ELSE NULL END
|
|
AS photo_url",
|
|
"UPPER(sg.typ || sg.kurzbz) AS stg_kuerzel",
|
|
"sg.bezeichnung",
|
|
"(
|
|
SELECT bezeichnung_mehrsprachig[(TABLE lang)]
|
|
FROM public.tbl_status
|
|
WHERE status_kurzbz = public.get_rolle_prestudent(ps.prestudent_id, NULL)
|
|
LIMIT 1
|
|
) AS status",
|
|
"COALESCE(
|
|
(
|
|
SELECT COALESCE(plan.orgform_kurzbz, pss.orgform_kurzbz)
|
|
FROM public.tbl_prestudentstatus pss
|
|
LEFT JOIN lehre.tbl_studienplan plan USING (studienplan_id)
|
|
WHERE pss.prestudent_id=ps.prestudent_id
|
|
ORDER BY pss.datum DESC, pss.insertamum DESC, pss.ext_id DESC
|
|
LIMIT 1
|
|
),
|
|
sg.orgform_kurzbz
|
|
) AS orgform",
|
|
"b.aktiv",
|
|
"array_position(" . $prestudent_sort_array . ", public.get_rolle_prestudent(ps.prestudent_id, NULL)) AS sort"
|
|
],
|
|
'resultjoin' => "
|
|
LEFT JOIN public.tbl_prestudent ps USING (prestudent_id)
|
|
LEFT JOIN public.tbl_student s ON (ps.prestudent_id = s.prestudent_id)
|
|
LEFT JOIN public.tbl_benutzer b ON (b.uid = s.student_uid)
|
|
JOIN public.tbl_person p ON (p.person_id = ps.person_id)
|
|
LEFT JOIN public.tbl_studiengang sg ON (sg.studiengang_kz = ps.studiengang_kz)"
|
|
];
|
|
|
|
$config['employee'] = [
|
|
'alias' => ['ma', 'mitarbeiter'],
|
|
'primarykey' => 'mitarbeiter_uid',
|
|
'table' => 'public.tbl_mitarbeiter',
|
|
'searchfields' => [
|
|
'uid' => [
|
|
'alias' => ['mitarbeiter_uid'],
|
|
'comparison' => 'equals',
|
|
'field' => "mitarbeiter_uid"
|
|
],
|
|
'vorname' => [
|
|
'alias' => ['firstname'],
|
|
'comparison' => 'similar',
|
|
'field' => "vorname",
|
|
'join' => [
|
|
[
|
|
'table' => "public.tbl_benutzer",
|
|
'on' => "uid = mitarbeiter_uid"
|
|
],
|
|
[
|
|
'table' => "public.tbl_person",
|
|
'using' => "person_id"
|
|
]
|
|
]
|
|
],
|
|
'nachname' => [
|
|
'alias' => ['lastname', 'surename'],
|
|
'comparison' => 'similar',
|
|
'field' => "nachname",
|
|
'join' => [
|
|
[
|
|
'table' => "public.tbl_benutzer",
|
|
'on' => "uid = mitarbeiter_uid"
|
|
],
|
|
[
|
|
'table' => "public.tbl_person",
|
|
'using' => "person_id"
|
|
]
|
|
]
|
|
],
|
|
'name' => [
|
|
'comparison' => 'similar',
|
|
'field' => "(vorname || ' ' || nachname)",
|
|
'join' => [
|
|
[
|
|
'table' => "public.tbl_benutzer",
|
|
'on' => "uid = mitarbeiter_uid"
|
|
],
|
|
[
|
|
'table' => "public.tbl_person",
|
|
'using' => "person_id"
|
|
]
|
|
]
|
|
],
|
|
'email' => [
|
|
'comparison' => 'similar',
|
|
'field' => "COALESCE(alias, uid) || '" . '@' . DOMAIN . "'",
|
|
'join' => [
|
|
'table' => "public.tbl_benutzer",
|
|
'on' => "uid = mitarbeiter_uid"
|
|
]
|
|
],
|
|
'tel' => [
|
|
'alias' => ['phone', 'telefon'],
|
|
'comparison' => 'similar',
|
|
'field' => "TRIM(COALESCE(kontakt, '') || ' ' || COALESCE(telefonklappe, ''))",
|
|
'join' => [
|
|
'table' => "public.tbl_kontakt",
|
|
'on' => "kontakttyp = 'telefon' AND tbl_kontakt.standort_id = tbl_mitarbeiter.standort_id"
|
|
],
|
|
"1-n" => true
|
|
],
|
|
'pid' => [
|
|
'alias' => ['person_id'],
|
|
'comparison' => 'equal-int',
|
|
'field' => "person_id",
|
|
'join' => [
|
|
'table' => "public.tbl_benutzer",
|
|
'on' => "uid = mitarbeiter_uid"
|
|
]
|
|
],
|
|
'oe' => [
|
|
'alias' => ['ou', 'organisationseinheit', 'organisationunit'],
|
|
'comparison' => 'vector',
|
|
'field' => "fts_bezeichnung",
|
|
'join' => [
|
|
[
|
|
'table' => "public.tbl_benutzerfunktion",
|
|
'on' => "mitarbeiter_uid = uid
|
|
AND funktion_kurzbz = 'oezuordnung'
|
|
AND (datum_von IS NULL OR datum_von <= NOW())
|
|
AND (datum_bis IS NULL OR datum_bis >= NOW())"
|
|
],
|
|
[
|
|
'table' => "public.tbl_organisationseinheit",
|
|
'using' => "oe_kurzbz"
|
|
]
|
|
],
|
|
'1-n' => true
|
|
],
|
|
'kst' => [
|
|
'comparison' => 'vector',
|
|
'field' => "fts_bezeichnung",
|
|
'join' => [
|
|
[
|
|
'table' => "public.tbl_benutzerfunktion",
|
|
'on' => "mitarbeiter_uid = uid
|
|
AND funktion_kurzbz = 'kstzuordnung'
|
|
AND (datum_von IS NULL OR datum_von <= NOW())
|
|
AND (datum_bis IS NULL OR datum_bis >= NOW())"
|
|
],
|
|
[
|
|
'table' => "public.tbl_organisationseinheit",
|
|
'using' => "oe_kurzbz"
|
|
]
|
|
],
|
|
'1-n' => true
|
|
]
|
|
],
|
|
'resultfields' => [
|
|
"b.uid",
|
|
"p.person_id",
|
|
"(p.vorname || ' ' || p.nachname) AS name",
|
|
"ARRAY(
|
|
SELECT
|
|
'[' || ot.bezeichnung || '] ' || o.bezeichnung AS bezeichnung
|
|
FROM public.tbl_benutzerfunktion bf
|
|
JOIN public.tbl_organisationseinheit o USING(oe_kurzbz)
|
|
JOIN public.tbl_organisationseinheittyp ot USING(organisationseinheittyp_kurzbz)
|
|
WHERE bf.funktion_kurzbz = 'oezuordnung'
|
|
AND (bf.datum_von IS NULL OR bf.datum_von <= NOW())
|
|
AND (bf.datum_bis IS NULL OR bf.datum_bis >= NOW())
|
|
AND bf.uid = b.uid
|
|
GROUP BY o.bezeichnung, ot.bezeichnung
|
|
) AS organisationunit_name",
|
|
"COALESCE(b.alias, b.uid) || '" . '@' . DOMAIN . "' AS email",
|
|
"TRIM(COALESCE(k.kontakt, '') || ' ' || COALESCE(m.telefonklappe, '')) AS phone",
|
|
"'" . base_url("/cis/public/bild.php?src=person&person_id=") . "' || p.person_id AS photo_url",
|
|
"ARRAY(
|
|
SELECT
|
|
'[' || ot.bezeichnung || '] ' || o.bezeichnung AS bezeichnung
|
|
FROM public.tbl_benutzerfunktion bf
|
|
JOIN public.tbl_organisationseinheit o USING(oe_kurzbz)
|
|
JOIN public.tbl_organisationseinheittyp ot USING(organisationseinheittyp_kurzbz)
|
|
WHERE bf.funktion_kurzbz = 'kstzuordnung'
|
|
AND (bf.datum_von IS NULL OR bf.datum_von <= NOW())
|
|
AND (bf.datum_bis IS NULL OR bf.datum_bis >= NOW())
|
|
AND bf.uid = b.uid
|
|
GROUP BY o.bezeichnung, ot.bezeichnung
|
|
) AS standardkostenstelle"
|
|
],
|
|
'resultjoin' => "
|
|
JOIN public.tbl_mitarbeiter m USING (mitarbeiter_uid)
|
|
JOIN public.tbl_benutzer b ON (b.uid = m.mitarbeiter_uid)
|
|
JOIN public.tbl_person p USING(person_id)
|
|
LEFT JOIN (
|
|
SELECT kontakt, standort_id
|
|
FROM public.tbl_kontakt
|
|
WHERE kontakttyp = 'telefon'
|
|
) k ON (k.standort_id = m.standort_id)"
|
|
];
|
|
|
|
// TODO(chris): move to searchpv21.php
|
|
$config['unassigned_employee'] = $config['employee'];
|
|
$config['unassigned_employee']['alias'] = ['mitarbeiter_ohne_zuordnung'];
|
|
$config['unassigned_employee']['prepare'] = "unassigned_employee AS (
|
|
SELECT tbl_mitarbeiter.*
|
|
FROM public.tbl_mitarbeiter
|
|
LEFT JOIN public.tbl_benutzerfunktion ON (
|
|
uid = mitarbeiter_uid
|
|
AND funktion_kurzbz = 'kstzuordnung'
|
|
AND (datum_von IS NULL OR datum_von <= NOW())
|
|
AND (datum_bis IS NULL OR datum_bis >= NOW())
|
|
)
|
|
WHERE tbl_benutzerfunktion.bezeichnung IS NULL
|
|
UNION
|
|
SELECT tbl_mitarbeiter.*
|
|
FROM public.tbl_mitarbeiter
|
|
LEFT JOIN public.tbl_benutzerfunktion ON (
|
|
uid = mitarbeiter_uid
|
|
AND funktion_kurzbz = 'oezuordnung'
|
|
AND (datum_von IS NULL OR datum_von <= NOW())
|
|
AND (datum_bis IS NULL OR datum_bis >= NOW())
|
|
)
|
|
WHERE tbl_benutzerfunktion.bezeichnung IS NULL
|
|
)";
|
|
$config['unassigned_employee']['table'] = "unassigned_employee";
|
|
$config['unassigned_employee']['searchfields']['tel']['join']['on'] = "
|
|
kontakttyp = 'telefon'
|
|
AND tbl_kontakt.standort_id = unassigned_employee.standort_id
|
|
";
|
|
$config['unassigned_employee']['renderer'] = 'employee';
|
|
|
|
$config['organisationunit'] = [
|
|
'alias' => ['ou', 'organisationseinheit', 'oe'],
|
|
'primarykey' => 'oe_kurzbz',
|
|
'table' => 'public.tbl_organisationseinheit',
|
|
'searchfields' => [
|
|
'uid' => [
|
|
'comparison' => 'equals',
|
|
'field' => 'uid',
|
|
'prepare' => "organisationunit_leader(oe_kurzbz, uid, vorname, nachname) AS (
|
|
SELECT oe_kurzbz, vorname, nachname, uid
|
|
FROM public.tbl_benutzerfunktion
|
|
JOIN public.tbl_benutzer USING (uid)
|
|
JOIN public.tbl_person USING (person_id)
|
|
WHERE funktion_kurzbz = 'Leitung'
|
|
AND (datum_von IS NULL OR datum_von <= NOW())
|
|
AND (datum_bis IS NULL OR datum_bis >= NOW())
|
|
AND tbl_benutzer.aktiv = TRUE
|
|
)",
|
|
'join' => [
|
|
'table' => "organisationunit_leader",
|
|
'using' => "oe_kurzbz"
|
|
],
|
|
'1-n' => true
|
|
],
|
|
'vorname' => [
|
|
'alias' => ['firstname'],
|
|
'comparison' => 'similar',
|
|
'field' => 'vorname',
|
|
'prepare' => "organisationunit_leader(oe_kurzbz, uid, vorname, nachname) AS (
|
|
SELECT oe_kurzbz, vorname, nachname, uid
|
|
FROM public.tbl_benutzerfunktion
|
|
JOIN public.tbl_benutzer USING (uid)
|
|
JOIN public.tbl_person USING (person_id)
|
|
WHERE funktion_kurzbz = 'Leitung'
|
|
AND (datum_von IS NULL OR datum_von <= NOW())
|
|
AND (datum_bis IS NULL OR datum_bis >= NOW())
|
|
AND tbl_benutzer.aktiv = TRUE
|
|
)",
|
|
'join' => [
|
|
'table' => "organisationunit_leader",
|
|
'using' => "oe_kurzbz"
|
|
],
|
|
'1-n' => true
|
|
],
|
|
'nachname' => [
|
|
'alias' => ['lastname', 'surename'],
|
|
'comparison' => 'similar',
|
|
'field' => 'nachname',
|
|
'prepare' => "organisationunit_leader(oe_kurzbz, uid, vorname, nachname) AS (
|
|
SELECT oe_kurzbz, vorname, nachname, uid
|
|
FROM public.tbl_benutzerfunktion
|
|
JOIN public.tbl_benutzer USING (uid)
|
|
JOIN public.tbl_person USING (person_id)
|
|
WHERE funktion_kurzbz = 'Leitung'
|
|
AND (datum_von IS NULL OR datum_von <= NOW())
|
|
AND (datum_bis IS NULL OR datum_bis >= NOW())
|
|
AND tbl_benutzer.aktiv = TRUE
|
|
)",
|
|
'join' => [
|
|
'table' => "organisationunit_leader",
|
|
'using' => "oe_kurzbz"
|
|
],
|
|
'1-n' => true
|
|
],
|
|
'name' => [
|
|
'comparison' => 'similar',
|
|
'field' => "(vorname || ' ' || nachname)",
|
|
'prepare' => "organisationunit_leader(oe_kurzbz, uid, vorname, nachname) AS (
|
|
SELECT oe_kurzbz, vorname, nachname, uid
|
|
FROM public.tbl_benutzerfunktion
|
|
JOIN public.tbl_benutzer USING (uid)
|
|
JOIN public.tbl_person USING (person_id)
|
|
WHERE funktion_kurzbz = 'Leitung'
|
|
AND (datum_von IS NULL OR datum_von <= NOW())
|
|
AND (datum_bis IS NULL OR datum_bis >= NOW())
|
|
AND tbl_benutzer.aktiv = TRUE
|
|
)",
|
|
'join' => [
|
|
'table' => "organisationunit_leader",
|
|
'using' => "oe_kurzbz"
|
|
],
|
|
'1-n' => true
|
|
],
|
|
'oe' => [
|
|
'alias' => ['ou', 'organisationseinheit', 'organisationunit'],
|
|
'comparison' => 'vector',
|
|
'field' => "fts_bezeichnung"
|
|
],
|
|
'kurzbz' => [
|
|
'alias' => ['oe_kurzbz'],
|
|
'comparison' => 'equals',
|
|
'field' => "oe_kurzbz"
|
|
]
|
|
],
|
|
'resultfields' => [
|
|
"oe.oe_kurzbz",
|
|
"('[' || type.bezeichnung || '] ' || oe.bezeichnung) AS name",
|
|
"oe_parent.oe_kurzbz AS parentoe_kurzbz",
|
|
"(CASE WHEN oe_parent.bezeichnung IS NOT NULL THEN '[' || type_parent.bezeichnung || '] ' || oe_parent.bezeichnung END) AS parentoe_name",
|
|
"ARRAY(
|
|
SELECT JSON_BUILD_OBJECT('uid', b.uid, 'vorname', p.vorname, 'nachname', p.nachname, 'name', (p.vorname || ' ' || p.nachname))
|
|
FROM public.tbl_benutzerfunktion bf
|
|
JOIN public.tbl_benutzer b USING (uid)
|
|
JOIN public.tbl_person p USING (person_id)
|
|
WHERE funktion_kurzbz = 'Leitung'
|
|
AND (datum_von IS NULL OR datum_von <= NOW())
|
|
AND (datum_bis IS NULL OR datum_bis >= NOW())
|
|
AND b.aktiv = TRUE
|
|
AND oe_kurzbz = oe.oe_kurzbz
|
|
) AS leaders",
|
|
"(
|
|
SELECT COUNT(*)
|
|
FROM public.tbl_benutzerfunktion
|
|
WHERE funktion_kurzbz = 'oezuordnung'
|
|
AND (datum_von IS NULL OR datum_von <= NOW())
|
|
AND (datum_bis IS NULL OR datum_bis >= NOW())
|
|
AND oe_kurzbz = oe.oe_kurzbz
|
|
) AS number_of_people",
|
|
"(CASE WHEN oe.mailverteiler THEN oe.oe_kurzbz || '" . '@' . DOMAIN . "' END) AS mailgroup"
|
|
],
|
|
'resultjoin' => "
|
|
JOIN public.tbl_organisationseinheit oe
|
|
USING (oe_kurzbz)
|
|
JOIN public.tbl_organisationseinheittyp type
|
|
USING (organisationseinheittyp_kurzbz)
|
|
LEFT JOIN public.tbl_organisationseinheit oe_parent
|
|
ON (oe_parent.oe_kurzbz = oe.oe_parent_kurzbz)
|
|
LEFT JOIN public.tbl_organisationseinheittyp type_parent
|
|
ON (oe_parent.organisationseinheittyp_kurzbz = type_parent.organisationseinheittyp_kurzbz)"
|
|
];
|
|
|
|
$config['room'] = [
|
|
'alias' => ['raum'],
|
|
'primarykey' => 'ort_kurzbz',
|
|
'table' => 'public.tbl_ort',
|
|
'searchfields' => [
|
|
'name' => [
|
|
'comparison' => 'similar',
|
|
'field' => 'ort_kurzbz'
|
|
]
|
|
],
|
|
'resultfields' => [
|
|
"ort.ort_kurzbz",
|
|
"ort.gebteil AS building",
|
|
"ort.ausstattung AS equipment",
|
|
"ort.stockwerk AS floor",
|
|
"ort.dislozierung AS room_number",
|
|
"ort.content_id",
|
|
"address.ort AS city",
|
|
"address.plz AS zip",
|
|
"address.strasse AS street",
|
|
"ort.max_person",
|
|
"ort.arbeitsplaetze AS workplaces"
|
|
],
|
|
'resultjoin' => "
|
|
JOIN public.tbl_ort ort
|
|
USING (ort_kurzbz)
|
|
LEFT JOIN public.tbl_standort
|
|
USING (standort_id)
|
|
LEFT JOIN public.tbl_adresse address
|
|
USING (adresse_id)"
|
|
];
|
|
$sprache = getUserLanguage();
|
|
$config['cms'] = [
|
|
'primarykey' => 'contentsprache_id',
|
|
'table' => 'campus.tbl_contentsprache',
|
|
'prepare' => "
|
|
cms_auth (content_id) AS (
|
|
SELECT content_id
|
|
FROM campus.tbl_content c
|
|
WHERE NOT EXISTS (SELECT 1 FROM campus.tbl_contentgruppe g WHERE g.content_id=c.content_id)
|
|
UNION
|
|
SELECT content_id
|
|
FROM public.vw_gruppen g
|
|
JOIN campus.tbl_contentgruppe c USING (gruppe_kurzbz)
|
|
WHERE uid = (TABLE auth)
|
|
),
|
|
cms_active (content_id, template_kurzbz) AS (
|
|
SELECT content_id, template_kurzbz
|
|
FROM cms_auth
|
|
JOIN campus.tbl_content USING (content_id)
|
|
WHERE aktiv = TRUE
|
|
),
|
|
cms_active_redirect (content_id) AS (
|
|
SELECT content_id
|
|
FROM cms_active
|
|
WHERE template_kurzbz = 'redirect'
|
|
),
|
|
cms_active_redirect_linked (content_id) AS (
|
|
SELECT content_id
|
|
FROM cms_active_redirect
|
|
JOIN campus.tbl_contentsprache USING (content_id)
|
|
WHERE LEFT((xpath('string(/content/url)', content))[1]::text, 1) <> '#'
|
|
),
|
|
cms_active_others (content_id) AS (
|
|
SELECT content_id
|
|
FROM cms_active
|
|
WHERE template_kurzbz IN ('contentmittitel', 'contentohnetitel', 'contentmittitel_filterwidget')
|
|
)
|
|
",
|
|
'searchfields' => [
|
|
'content' => [
|
|
'alias' => ['inhalt'],
|
|
'comparison' => "vector",
|
|
'field' => "(
|
|
setweight(to_tsvector('simple', COALESCE(titel, '')), 'A')
|
|
||
|
|
setweight(to_tsvector('simple', COALESCE(content, '')::text), 'B')
|
|
)"
|
|
],
|
|
'content_id' => [
|
|
'alias' => ['id'],
|
|
'comparison' => "equal-int",
|
|
'field' => "content_id"
|
|
],
|
|
'lang' => [
|
|
'alias' => ['language', 'sprache'],
|
|
'comparison' => "equals",
|
|
'field' => "sprache"
|
|
]
|
|
],
|
|
'resultfields' => [
|
|
"contentsprache.content_id",
|
|
"content.template_kurzbz",
|
|
"contentsprache.version",
|
|
"contentsprache.sprache AS language",
|
|
"contentsprache.titel AS title",
|
|
"contentsprache.content",
|
|
"(xpath('string(/content/url)', contentsprache.content))[1] AS content_url"
|
|
],
|
|
'resultjoin' => "
|
|
JOIN campus.tbl_contentsprache contentsprache
|
|
USING (contentsprache_id)
|
|
JOIN campus.tbl_content content
|
|
USING (content_id)
|
|
WHERE content_id IN (
|
|
SELECT content_id
|
|
FROM cms_active_redirect_linked
|
|
UNION
|
|
SELECT content_id
|
|
FROM cms_active_others
|
|
)
|
|
AND version = campus.get_highest_content_version(content_id)
|
|
AND contentsprache.sprache = '{$sprache}'"
|
|
];
|
|
|
|
$config['dms'] = [
|
|
'primarykey' => 'dms_id, version',
|
|
'table' => 'campus.tbl_dms_version',
|
|
'searchfields' => [
|
|
'keywords' => [
|
|
'alias' => ['keyword', 'keywords', 'schlagwort', 'schlagworte'],
|
|
'comparison' => "vector",
|
|
'field' => "(to_tsvector('simple', COALESCE(schlagworte, '')))"
|
|
]
|
|
],
|
|
'resultfields' => [
|
|
"v.dms_id",
|
|
"v.version",
|
|
"v.filename",
|
|
"v.mimetype",
|
|
"v.name",
|
|
"v.beschreibung AS description",
|
|
"v.schlagworte AS keywords"
|
|
],
|
|
'resultjoin' => "
|
|
JOIN campus.tbl_dms_version v
|
|
USING (dms_id, version)
|
|
WHERE cis_suche = TRUE
|
|
AND version=(SELECT MAX(version) FROM campus.tbl_dms_version WHERE dms_id=v.dms_id)
|
|
AND NOT EXISTS (
|
|
SELECT
|
|
1
|
|
FROM
|
|
fue.tbl_projekt_dokument p
|
|
WHERE p.dms_id = v.dms_id
|
|
) AND (
|
|
NOT EXISTS (
|
|
WITH RECURSIVE categories (kategorie_kurzbz) AS (
|
|
SELECT
|
|
kategorie_kurzbz
|
|
FROM
|
|
campus.tbl_dms c
|
|
WHERE c.dms_id = v.dms_id
|
|
UNION ALL
|
|
SELECT
|
|
cat.parent_kategorie_kurzbz AS kategorie_kurzbz
|
|
FROM
|
|
categories
|
|
JOIN campus.tbl_dms_kategorie cat USING (kategorie_kurzbz)
|
|
)
|
|
SELECT
|
|
1
|
|
FROM
|
|
categories
|
|
JOIN campus.tbl_dms_kategorie_gruppe USING (kategorie_kurzbz)
|
|
UNION
|
|
SELECT
|
|
1
|
|
FROM
|
|
categories
|
|
JOIN campus.tbl_dms_kategorie USING (kategorie_kurzbz)
|
|
WHERE
|
|
berechtigung_kurzbz IS NOT NULL
|
|
) OR EXISTS (
|
|
WITH RECURSIVE categories (kategorie_kurzbz) AS (
|
|
SELECT
|
|
kategorie_kurzbz
|
|
FROM
|
|
campus.tbl_dms c
|
|
WHERE c.dms_id = v.dms_id
|
|
UNION ALL
|
|
SELECT
|
|
cat.parent_kategorie_kurzbz AS kategorie_kurzbz
|
|
FROM
|
|
categories
|
|
JOIN campus.tbl_dms_kategorie cat USING (kategorie_kurzbz)
|
|
)
|
|
SELECT
|
|
1
|
|
FROM
|
|
categories
|
|
JOIN campus.tbl_dms_kategorie_gruppe USING (kategorie_kurzbz)
|
|
JOIN public.tbl_benutzergruppe USING(gruppe_kurzbz)
|
|
WHERE
|
|
uid = (TABLE auth)
|
|
)
|
|
)"
|
|
];
|