<?php
/* Copyright (C) 2008 Technikum-Wien
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
 *
 * Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
 *          Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
 *          Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
 */
/****************************************************************************
 * Script: 			mlists_generate.php
 * Descr:  			Das Skript generiert Mailinglisten in der Datenbanken
 *					fuer Einheiten, Lektoren und  fix Angestellte.
 * Author: 			Christian Paminger
 * Erstellt: 		12.9.2005
 * Update: 			14.9.2005 von Christian Paminger
 *****************************************************************************/

require_once('../../config/vilesci.config.inc.php');
require_once('../../include/functions.inc.php');
require_once('../../include/studiensemester.class.php');
require_once('../../include/organisationseinheit.class.php');
require_once('../../include/gruppe.class.php');
require_once('../../include/basis_db.class.php');
require_once('../../include/mail.class.php');

$error_msg='';
?>

<HTML>
<HEAD>
	<TITLE>Mailinglisten</TITLE>
	<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<LINK rel="stylesheet" href="../../skin/vilesci.css" type="text/css">
</HEAD>
<BODY>
	<H3>MailingListen abgleich</H3>
	<?php
	if (!$db = new basis_db())
 		die('Fehler beim Oeffnen der Datenbankverbindung');

	// aktuelles Studiensemester ermitteln
	$sql_query="SELECT studiensemester_kurzbz FROM public.vw_studiensemester ORDER BY delta LIMIT 1";
	if(!($result = $db->db_query($sql_query)))
		$error_msg.=$db->db_last_error();
	if($row = $db->db_fetch_object($result))
		$studiensemester=$row->studiensemester_kurzbz;
	else
		$error_msg.= $db->db_last_error().$sql_query;

	$stsem_obj = new studiensemester();

	/*
	if(mb_substr($studiensemester,0,1)=='W')
		$stsem2 = $stsem_obj->getPreviousFrom($studiensemester);
	else
		$stsem2 = $stsem_obj->getNextFrom($studiensemester);
	*/
	$stsem2 = $stsem_obj->getNearestFrom($studiensemester);

	function setGeneriert($gruppe)
	{
		$db = new basis_db();
		$qry = "UPDATE public.tbl_gruppe SET generiert=true WHERE UPPER(gruppe_kurzbz)=UPPER('".addslashes($gruppe)."')";
		$db->db_query($qry);
	}

	/**
	 * Löscht alle BenutzerInnen aus NICHT-generierten Verteilern im Studiengang 0 (Erhalter), deren Account vor mehr als 3 Wochen deaktiviert wurde
	 */

	$qry_delete = "	DELETE FROM public.tbl_benutzergruppe
					WHERE tbl_benutzergruppe.studiensemester_kurzbz IS NULL
					AND gruppe_kurzbz IN (SELECT gruppe_kurzbz FROM public.tbl_gruppe WHERE generiert=false AND studiengang_kz=0)
					AND uid IN (SELECT uid FROM public.tbl_benutzer WHERE aktiv=false AND updateaktivam<now()-'3 weeks'::interval);";

	if(!($result = $db->db_query($qry_delete)))
		$error_msg .= $db->db_last_error().$qry_delete.'<br><br>';

	echo $db->db_affected_rows($result).' inaktive BenutzerInnen wurden aus statischen Verteilern gelöscht<BR><BR>';

	/**
	 * Einfache Verteiler, deren Erstellung ohne Schleifen-Logik moeglich ist, werden ueber dieses Array erstellt
	 * Benoetigt werden die 3 Attribute:
	 * $verteilerArray['name_des_verteilers']['bezeichnung'] = 'Bezeichnung des Verteilers (32 Zeichen)';
	 * $verteilerArray['name_des_verteilers']['beschreibung'] = 'Beschreibung des Verteilers (Anzeige im CIS)(128 Zeichen)';
	 * $verteilerArray['name_des_verteilers']['sql'] = 'UIDs, die im Verteiler enthalten sein sollen (kein Semikolon am Ende)';
	 *
	 * Die Verteiler werden dann alle gleich erstellt:
	 * - Pruefen, ob Gruppe existiert, wenn nicht, anlegen mit Default-Werten
	 * - Gruppe auf generiert setzen
	 * - UIDs loeschen, die nicht mehr in den Verteiler gehoeren
	 * - UIDs hinzufuegen, die im Verteiler fehlen
	 */

	$verteilerArray = array();

	// Sql-Schema: SELECT foo AS uid FROM bar WHERE foobar

	//Aktive MitarbeiterInnen mit Personalnummer > 0
	$verteilerArray['tw_ma']['bezeichnung'] = 'Alle aktiven MitarbeiterInnen';
	$verteilerArray['tw_ma']['beschreibung'] = 'Alle aktiven MitarbeiterInnen';
	$verteilerArray['tw_ma']['sql'] = "	SELECT DISTINCT mitarbeiter_uid AS uid
										FROM public.tbl_mitarbeiter
										JOIN public.tbl_benutzer ON (mitarbeiter_uid=uid)
										WHERE aktiv
										AND personalnummer >= 0";
	//Aktive weibliche MitarbeiterInnen mit Personalnummer > 0
	$verteilerArray['tw_ma_w']['bezeichnung'] = 'Weibliche Mitarbeiterinnen';
	$verteilerArray['tw_ma_w']['beschreibung'] = 'Weibliche Mitarbeiterinnen';
	$verteilerArray['tw_ma_w']['sql'] = "	SELECT DISTINCT mitarbeiter_uid AS uid
											FROM public.tbl_mitarbeiter
											JOIN public.tbl_benutzer ON (mitarbeiter_uid=uid)
											JOIN public.tbl_person USING(person_id)
											WHERE tbl_benutzer.aktiv
											AND geschlecht='w'
											AND personalnummer >=0";
	//Alle aktiven MitarbeiterInnen mit Attribut lektor=true
	$verteilerArray['tw_lkt']['bezeichnung'] = 'Alle LektorInnen';
	$verteilerArray['tw_lkt']['beschreibung'] = 'Alle LektorInnen an der FH Technikum Wien';
	$verteilerArray['tw_lkt']['sql'] = "	SELECT DISTINCT mitarbeiter_uid AS uid
											FROM public.tbl_mitarbeiter
											JOIN public.tbl_benutzer ON (mitarbeiter_uid=uid)
											WHERE lektor
											AND aktiv
											AND personalnummer >=0";
	//MitarbeiterInnen mit gueltiger Funktion "ass" (assistenz)
	$verteilerArray['tw_sek']['bezeichnung'] = 'Alle Sekretariate';
	$verteilerArray['tw_sek']['beschreibung'] = 'Alle Sekretariate an der FH Technikum Wien';
	$verteilerArray['tw_sek']['sql'] = "	SELECT DISTINCT mitarbeiter_uid AS uid
											FROM
											public.tbl_mitarbeiter
											JOIN public.tbl_benutzer ON (mitarbeiter_uid=uid)
											JOIN public.tbl_benutzerfunktion USING(uid)
											WHERE aktiv AND funktion_kurzbz='ass' AND
											(tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von<=now()) AND
											(tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis>=now()) AND
											mitarbeiter_uid NOT LIKE '\\\\_%' ";
	//Aktive MitarbeiterInnen mit gueltiger Funktion "Leitung", "gLtg" oder "stvLtg" in aktiven Studiengaengen
	$verteilerArray['tw_stgl']['bezeichnung'] = 'Alle StudiengangsleiterInnen';
	$verteilerArray['tw_stgl']['beschreibung'] = 'Alle StudiengangsleiterInnen und deren StellvertreterInnen';
	$verteilerArray['tw_stgl']['sql'] = "	SELECT DISTINCT mitarbeiter_uid AS uid
											FROM
												public.tbl_mitarbeiter
												JOIN public.tbl_benutzer ON (mitarbeiter_uid=uid)
												JOIN public.tbl_benutzerfunktion USING(uid)
												JOIN public.tbl_studiengang USING(oe_kurzbz)
											WHERE
												tbl_benutzer.aktiv
												AND (tbl_benutzerfunktion.funktion_kurzbz='Leitung' OR funktion_kurzbz='gLtg' OR funktion_kurzbz='stvLtg')
												AND (tbl_benutzerfunktion.datum_von is null OR tbl_benutzerfunktion.datum_von<=now())
												AND (tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis>=now())
												AND mitarbeiter_uid NOT LIKE '\\\\_%'
												AND tbl_studiengang.aktiv=true";
	//Aktive MitarbeiterInnen mit gueltiger Funktion "Leitung", "gLtg" oder "stvLtg" in aktiven Bachelor- oder Master-Studiengaengen mit Kennzahl>0 und Kennzahl<10000
	$verteilerArray['tw_stgl_bama']['bezeichnung'] = 'Studiengangsleitung BAMA';
	$verteilerArray['tw_stgl_bama']['beschreibung'] = 'Studiengangsleitung und Stellvertretung von Bachelor und Master Studiengängen';
	$verteilerArray['tw_stgl_bama']['sql'] = "	SELECT DISTINCT mitarbeiter_uid AS uid
												FROM
													public.tbl_mitarbeiter
													JOIN public.tbl_benutzer ON (mitarbeiter_uid=uid)
													JOIN public.tbl_benutzerfunktion USING(uid)
													JOIN public.tbl_studiengang USING(oe_kurzbz)
												WHERE
													tbl_benutzer.aktiv
													AND (tbl_benutzerfunktion.funktion_kurzbz='Leitung' OR funktion_kurzbz='gLtg' OR funktion_kurzbz='stvLtg')
													AND (tbl_benutzerfunktion.datum_von is null OR tbl_benutzerfunktion.datum_von<=now())
													AND (tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis>=now())
													AND mitarbeiter_uid NOT LIKE '\\\\_%'
													AND tbl_studiengang.aktiv=true
													AND tbl_studiengang.typ in('b','m')
													AND tbl_studiengang.studiengang_kz>0
													AND tbl_studiengang.studiengang_kz<10000";
	//Alle aktiven MitarbeiterInnen mit Attribut fixangestellt=true
	$verteilerArray['tw_fix']['bezeichnung'] = 'Alle Fix-Angestellten';
	$verteilerArray['tw_fix']['beschreibung'] = 'Alle Fix-Angestellten an der FH Technikum Wien';
	$verteilerArray['tw_fix']['sql'] = "	SELECT DISTINCT mitarbeiter_uid AS uid
											FROM public.tbl_mitarbeiter
											JOIN public.tbl_benutzer ON(uid=mitarbeiter_uid)
											WHERE fixangestellt
											AND aktiv
											AND mitarbeiter_uid NOT LIKE '\\\\_%'
											AND NOT EXISTS(SELECT 1 FROM public.tbl_benutzerfunktion WHERE funktion_kurzbz in('hilfskraft','praktikum') AND uid=mitarbeiter_uid AND (datum_bis>=now() or datum_bis is null))";
	//Alle aktiven MitarbeiterInnen mit Attribut fixangestellt=true und lektor=true
	$verteilerArray['tw_fix_lkt']['bezeichnung'] = 'Alle fixangestellten LektorInnen';
	$verteilerArray['tw_fix_lkt']['beschreibung'] = 'Alle fixangestellten LektorInnen an der FH Technikum Wien';
	$verteilerArray['tw_fix_lkt']['sql'] = "	SELECT DISTINCT mitarbeiter_uid AS uid
												FROM public.tbl_mitarbeiter
												JOIN public.tbl_benutzer ON(uid=mitarbeiter_uid)
												WHERE fixangestellt
												AND lektor
												AND aktiv
												AND mitarbeiter_uid NOT LIKE '\\\\_%'";
	//Alle aktiven MitarbeiterInnen mit Attribut fixangestellt=false und lektor=true
	$verteilerArray['tw_ext_lkt']['bezeichnung'] = 'Externe LektorInnen';
	$verteilerArray['tw_ext_lkt']['beschreibung'] = 'Alle externen LektorInnen an der FH Technikum Wien';
	$verteilerArray['tw_ext_lkt']['sql'] = "	SELECT DISTINCT mitarbeiter_uid AS uid
												FROM public.tbl_mitarbeiter
												JOIN public.tbl_benutzer ON(uid=mitarbeiter_uid)
												WHERE NOT fixangestellt
												AND lektor
												AND aktiv
												AND mitarbeiter_uid NOT LIKE '\\\\_%'";
	//Hochschulvertretung. Studierende mit gueltiger Funktion 'hsv'.
	$verteilerArray['tw_hsv']['bezeichnung'] = 'Hochschulvertretung FHTW';
	$verteilerArray['tw_hsv']['beschreibung'] = 'Hochschulvertretung FHTW';
	$verteilerArray['tw_hsv']['sql'] = "	SELECT DISTINCT uid
											FROM
												public.tbl_benutzerfunktion
											JOIN public.tbl_benutzer USING(uid)
											WHERE
												funktion_kurzbz='hsv'
												AND tbl_benutzer.aktiv AND
												(tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von<=now()) AND
												(tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis>=now())";
	//Studienvertretung. Studierende mit gueltiger Funktion 'stdv'.
	$verteilerArray['tw_stdv']['bezeichnung'] = 'Alle StudierendenvertreterInnen';
	$verteilerArray['tw_stdv']['beschreibung'] = 'Alle StudierendenvertreterInnen';
	$verteilerArray['tw_stdv']['sql'] = "	SELECT DISTINCT uid
											FROM
												public.tbl_benutzerfunktion
											JOIN public.tbl_benutzer USING(uid)
											WHERE
												funktion_kurzbz='stdv'
												AND tbl_benutzer.aktiv AND
												(tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von<=now()) AND
												(tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis>=now())";
	//Jahrgangsvertretung. Studierende mit gueltiger Funktion 'jgv'.
	$verteilerArray['tw_jgv']['bezeichnung'] = 'Alle JahrgangsvertreterInnen';
	$verteilerArray['tw_jgv']['beschreibung'] = 'Alle JahrgangsvertreterInnen';
	$verteilerArray['tw_jgv']['sql'] = "	SELECT DISTINCT uid
											FROM
												public.tbl_benutzerfunktion
											JOIN public.tbl_benutzer USING(uid)
											WHERE
												funktion_kurzbz='jgv'
												AND tbl_benutzer.aktiv AND
												(tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von<=now()) AND
												(tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis>=now())";
	//Alle aktiven Studierenden
	//Abbrecher bleiben noch 3 Wochen im Verteiler andere inaktive noch fuer 20 Wochen
	//damit im CIS die Menuepunkte fuer Studierende richtig angezeigt werden
	$verteilerArray['tw_std']['bezeichnung'] = 'Alle Studierenden';
	$verteilerArray['tw_std']['beschreibung'] = 'Alle ordentlichen, außerordentlichen und fiktiven Studierenden';
	$verteilerArray['tw_std']['sql'] = "	SELECT DISTINCT uid
											FROM campus.vw_student
											WHERE (
												aktiv
												OR
												(aktiv=false AND get_rolle_prestudent(vw_student.prestudent_id, null)='Abbrecher' AND updateaktivam>now()-'3 weeks'::interval)
												OR
												(aktiv=false AND get_rolle_prestudent(vw_student.prestudent_id, null)!='Abbrecher' AND updateaktivam>now()-'20 weeks'::interval)
											)";
	//Alle aktiven männlichen Studierenden
	//Abbrecher bleiben noch 3 Wochen im Verteiler andere inaktive noch fuer 20 Wochen
	$verteilerArray['tw_std_m']['bezeichnung'] = 'Alle männlichen Studenten';
	$verteilerArray['tw_std_m']['beschreibung'] = 'Alle männlichen Studenten an der FHTW';
	$verteilerArray['tw_std_m']['sql'] = "	SELECT DISTINCT uid
											FROM campus.vw_student
											WHERE (
												aktiv
												AND geschlecht='m'
												OR
												(aktiv=false AND geschlecht='m' AND get_rolle_prestudent(vw_student.prestudent_id, null)='Abbrecher' AND updateaktivam>now()-'3 weeks'::interval)
												OR
												(aktiv=false AND geschlecht='m' AND get_rolle_prestudent(vw_student.prestudent_id, null)!='Abbrecher' AND updateaktivam>now()-'20 weeks'::interval)
											)";
	//Alle aktiven weiblichen Studierenden
	//Abbrecher bleiben noch 3 Wochen im Verteiler andere inaktive noch fuer 20 Wochen
	$verteilerArray['tw_std_w']['bezeichnung'] = 'Alle weiblichen Studentinnen';
	$verteilerArray['tw_std_w']['beschreibung'] = 'Alle weiblichen Studentinnen an der FHTW';
	$verteilerArray['tw_std_w']['sql'] = "	SELECT DISTINCT uid
											FROM campus.vw_student
											WHERE (
												aktiv
												AND geschlecht='w'
												OR
												(aktiv=false AND geschlecht='w' AND get_rolle_prestudent(vw_student.prestudent_id, null)='Abbrecher' AND updateaktivam>now()-'3 weeks'::interval)
												OR
												(aktiv=false AND geschlecht='w' AND get_rolle_prestudent(vw_student.prestudent_id, null)!='Abbrecher' AND updateaktivam>now()-'20 weeks'::interval)
											)";
	//Alle ordentlichen, aktiven Bachelor- und Master-Studierenden
	//Absolventen bleiben noch  20 Wochen im Verteiler
	$verteilerArray['tw_bama']['bezeichnung'] = 'Alle BaMa-Studierenden';
	$verteilerArray['tw_bama']['beschreibung'] = 'Alle ordentlichen Bachelor- und Master-Studierenden';
	$verteilerArray['tw_bama']['sql'] = "	SELECT DISTINCT uid
											FROM campus.vw_student
											WHERE (
												aktiv
												OR
												(aktiv=false AND get_rolle_prestudent(vw_student.prestudent_id, null)='Absolvent' AND updateaktivam>now()-'20 weeks'::interval)
												AND studiengang_kz IN (SELECT studiengang_kz FROM public.tbl_studiengang WHERE typ IN ('b','m'))
											)";
	//Moodle-LektorenVerteiler
	/* Von kindlm auskommentiert am 27.09.2017. Verteiler wird vermutlich nicht mehr benötigt. Wenn ein Jahr lang kein Problem, dann bitte löschen.
	$verteilerArray['moodle_lkt']['bezeichnung'] = 'Moodle Lektoren';
	$verteilerArray['moodle_lkt']['beschreibung'] = 'Moodle Lektoren';
	$verteilerArray['moodle_lkt']['sql'] = "	SELECT distinct mitarbeiter_uid AS uid
												FROM lehre.tbl_lehrveranstaltung, lehre.tbl_lehreinheit, addon.tbl_moodle ,campus.vw_lehreinheit
												WHERE tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id
												AND vw_lehreinheit.studiengang_kz=tbl_lehrveranstaltung.studiengang_kz
												AND vw_lehreinheit.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id
												AND vw_lehreinheit.lehreinheit_id=tbl_lehreinheit.lehreinheit_id
												AND vw_lehreinheit.studiensemester_kurzbz=tbl_lehreinheit.studiensemester_kurzbz
												AND vw_lehreinheit.studiensemester_kurzbz=tbl_lehreinheit.studiensemester_kurzbz
												AND ((tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_moodle.lehrveranstaltung_id
												AND tbl_moodle.studiensemester_kurzbz=tbl_lehreinheit.studiensemester_kurzbz)
												OR 	(tbl_lehreinheit.lehreinheit_id=tbl_moodle.lehreinheit_id))";*/
	//Serviceabteilungen. Aktive MitarbeiterInnen mit gueltiger Leitungsfunktion in einer Abteilung
	$verteilerArray['serviceabteilungen']['bezeichnung'] = 'LeiterInnen sonst. OEen';
	$verteilerArray['serviceabteilungen']['beschreibung'] = 'LeiterInnen der Abteilungen und Gruppen';
	$verteilerArray['serviceabteilungen']['sql'] = "	SELECT distinct mitarbeiter_uid AS uid
														FROM
															public.tbl_mitarbeiter
														JOIN public.tbl_benutzer ON (mitarbeiter_uid=uid)
														JOIN public.tbl_benutzerfunktion USING(uid)
														JOIN public.tbl_organisationseinheit USING(oe_kurzbz)
														WHERE tbl_benutzer.aktiv AND (funktion_kurzbz='Leitung')
														AND (tbl_benutzerfunktion.datum_von is null OR tbl_benutzerfunktion.datum_von<=now())
														AND (tbl_benutzerfunktion.datum_bis is null OR tbl_benutzerfunktion.datum_bis>=now())
														AND tbl_organisationseinheit.organisationseinheittyp_kurzbz='Abteilung'";
	//Aktive MitarbeiterInnen der OE "Sprachen"
	$verteilerArray['sprachen']['bezeichnung'] = 'Sprachen';
	$verteilerArray['sprachen']['beschreibung'] = 'MitarbeiterInnen des Instituts Sprachen und Kulturwissenschaften ';
	$verteilerArray['sprachen']['sql'] = "	SELECT distinct uid
											FROM
												public.tbl_benutzer
												JOIN public.tbl_benutzerfunktion USING(uid)
												JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid)
											WHERE oe_kurzbz in('Sprachen')
											AND tbl_benutzer.aktiv
											AND (tbl_benutzerfunktion.datum_von<=now() OR tbl_benutzerfunktion.datum_von is null)
											AND (tbl_benutzerfunktion.datum_bis>=now() OR tbl_benutzerfunktion.datum_bis is null)";
	// Aktive MitarbeiterInnen der OE "Sprachen"
	$verteilerArray['humanities']['bezeichnung'] = 'MA Institut Sprachen';
	$verteilerArray['humanities']['beschreibung'] = 'MitarbeiterInnen des Instituts Sprachen und Kulturwissenschaften ';
	$verteilerArray['humanities']['sql'] = "SELECT distinct uid
											FROM
												public.tbl_benutzer
												JOIN public.tbl_benutzerfunktion USING(uid)
												JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid)
											WHERE oe_kurzbz in('Sprachen')
											AND tbl_benutzer.aktiv
											AND (tbl_benutzerfunktion.datum_von<=now() OR tbl_benutzerfunktion.datum_von is null)
											AND (tbl_benutzerfunktion.datum_bis>=now() OR tbl_benutzerfunktion.datum_bis is null)";
	//Aktive BenutzerInnen mit der Funktion "kollegium"
	$verteilerArray['kollegium']['bezeichnung'] = 'Kollegium der FH Technikum Wien';
	$verteilerArray['kollegium']['beschreibung'] = 'Kollegium der FH Technikum Wien';
	$verteilerArray['kollegium']['sql'] = "	SELECT distinct uid
											FROM
												public.tbl_benutzer
												JOIN public.tbl_benutzerfunktion USING(uid)
											WHERE funktion_kurzbz='kollegium'
											AND tbl_benutzer.aktiv
											AND (tbl_benutzerfunktion.datum_von<=now() OR tbl_benutzerfunktion.datum_von is null)
											AND (tbl_benutzerfunktion.datum_bis>=now() OR tbl_benutzerfunktion.datum_bis is null)";
	//Aktive BenutzerInnen mit der Funktion "managementteam"
	$verteilerArray['tw_managementteam']['bezeichnung'] = 'Akademisches Managementteam';
	$verteilerArray['tw_managementteam']['beschreibung'] = 'Akademisches Managementteam';
	$verteilerArray['tw_managementteam']['sql'] = "	SELECT distinct uid
													FROM
														public.tbl_benutzer
														JOIN public.tbl_benutzerfunktion USING(uid)
													WHERE funktion_kurzbz='managementteam'
													AND tbl_benutzer.aktiv
													AND (tbl_benutzerfunktion.datum_von<=now() OR tbl_benutzerfunktion.datum_von is null)
													AND (tbl_benutzerfunktion.datum_bis>=now() OR tbl_benutzerfunktion.datum_bis is null)";
	//Aktive BenutzerInnen mit der Funktion "fue"
	$verteilerArray['tw_fue']['bezeichnung'] = 'Forschung und Entwicklung';
	$verteilerArray['tw_fue']['beschreibung'] = 'Forschung und Entwicklung';
	$verteilerArray['tw_fue']['sql'] = "	SELECT distinct uid
											FROM
												public.tbl_benutzer
												JOIN public.tbl_benutzerfunktion USING(uid)
											WHERE funktion_kurzbz='fue'
											AND tbl_benutzer.aktiv
											AND (tbl_benutzerfunktion.datum_von<=now() OR tbl_benutzerfunktion.datum_von is null)
											AND (tbl_benutzerfunktion.datum_bis>=now() OR tbl_benutzerfunktion.datum_bis is null)";
	//Aktive weiblichen Benutzerinnen mit der Funktion "fue"
	$verteilerArray['tw_fue_frauen']['bezeichnung'] = 'Weibliche Mitarbeiterinnen FuE';
	$verteilerArray['tw_fue_frauen']['beschreibung'] = 'Weibliche Mitarbeiterinnen in Forschung und Entwicklung';
	$verteilerArray['tw_fue_frauen']['sql'] = "	SELECT distinct uid
												FROM
													public.tbl_benutzer
													JOIN public.tbl_benutzerfunktion USING(uid)
													JOIN public.tbl_person USING (person_id)
												WHERE funktion_kurzbz='fue'
												AND geschlecht='w'
												AND tbl_benutzer.aktiv
												AND (tbl_benutzerfunktion.datum_von<=now() OR tbl_benutzerfunktion.datum_von is null)
												AND (tbl_benutzerfunktion.datum_bis>=now() OR tbl_benutzerfunktion.datum_bis is null)";
	//Alle aktiven MitarbeiterInnen mit Funktion Leitung oder stvLeitung oder gfLtg
	$verteilerArray['tw_leitung']['bezeichnung'] = 'Alle MA mit Leitungsfunktion';
	$verteilerArray['tw_leitung']['beschreibung'] = 'Alle MA mit Funktion Leitung, stellvertretende Leitung oder geschäftsführende Leitung';
	$verteilerArray['tw_leitung']['sql'] = "	SELECT DISTINCT uid
												FROM
													public.tbl_person
												JOIN public.tbl_benutzer USING (person_id)
												JOIN tbl_benutzerfunktion USING (uid)
												WHERE funktion_kurzbz IN('Leitung','stvLtg','gLtg')
												AND tbl_benutzer.aktiv
												AND (tbl_benutzerfunktion.datum_von<=now() OR tbl_benutzerfunktion.datum_von is null)
												AND (tbl_benutzerfunktion.datum_bis>=now() OR tbl_benutzerfunktion.datum_bis is null)";
	//Alle aktiven Studierenden in Academy-Lehrgaengen
	//Abbrecher bleiben noch 3 Wochen im Verteiler andere inaktive noch fuer 20 Wochen
	$verteilerArray['tw_academy_std']['bezeichnung'] = 'Alle Studierenden der Academy';
	$verteilerArray['tw_academy_std']['beschreibung'] = 'Alle Studierenden der TW-Academy (LehrgangsteilnehmerInnen)';
	$verteilerArray['tw_academy_std']['sql'] = "	SELECT DISTINCT uid AS uid
													FROM campus.vw_student
													JOIN public.tbl_studiengang USING (studiengang_kz)
													JOIN public.tbl_organisationseinheit USING (oe_kurzbz)
													WHERE (
														vw_student.aktiv
														OR
														(vw_student.aktiv=false AND get_rolle_prestudent(vw_student.prestudent_id, null)='Abbrecher' AND vw_student.updateaktivam>now()-'3 weeks'::interval)
														OR
														(vw_student.aktiv=false AND get_rolle_prestudent(vw_student.prestudent_id, null)!='Abbrecher' AND vw_student.updateaktivam>now()-'20 weeks'::interval))
													AND tbl_organisationseinheit.oe_parent_kurzbz='lehrgang'
													AND organisationseinheittyp_kurzbz='Lehrgang'";
	//Alle aktiven Lektoren von BIF DUA
	$verteilerArray['bif_lkt_dua']['bezeichnung'] = 'Alle Lektoren von BIF DUAL';
	$verteilerArray['bif_lkt_dua']['beschreibung'] = 'Alle Lektoren von BIF DUAL';
	$verteilerArray['bif_lkt_dua']['sql'] = "SELECT distinct mitarbeiter_uid as uid
											FROM
												lehre.tbl_lehrveranstaltung
												JOIN lehre.tbl_lehreinheit USING(lehrveranstaltung_id)
												JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id)
											WHERE
												(studiensemester_kurzbz='$studiensemester' OR
												 studiensemester_kurzbz='$stsem2')
												AND mitarbeiter_uid NOT LIKE '\\\\_%'
												AND tbl_lehrveranstaltung.studiengang_kz=257
												AND tbl_lehrveranstaltung.orgform_kurzbz='DUA'
											";
	$bezeichnung = '';
	$beschreibung = '';
	foreach ($verteilerArray AS $listname => $data)
	{
		$grp = new gruppe();
		// Pruefen, ob die Gruppe existert, wenn nicht, anlegen
		if(!$grp->exists($listname))
		{
			if (strlen($data['bezeichnung']) > 32)
				$bezeichnung = substr($data['bezeichnung'], 0, 32);
			else
				$bezeichnung = $data['bezeichnung'];

			if (strlen($data['beschreibung']) > 128)
				$beschreibung = substr($data['beschreibung'], 0, 128);
			else
				$beschreibung = $data['beschreibung'];

			$grp->gruppe_kurzbz = $listname;
			$grp->studiengang_kz = '0';
			$grp->semester = '0';
			$grp->bezeichnung = $bezeichnung;
			$grp->beschreibung = $beschreibung;
			$grp->mailgrp = true;
			$grp->sichtbar = true;
			$grp->generiert = true;
			$grp->aktiv = true;
			$grp->lehre = false;
			$grp->content_visible = false;
			$grp->gesperrt = false;
			$grp->zutrittssystem = false;
			$grp->aufnahmegruppe = false;
			$grp->insertamum = date('Y-m-d H:i:s');
			$grp->insertvon = 'mlists_generate';

			if(!$grp->save(true, true))
			{
				$error_msg .= 'Fehler beim Anlegen der Gruppe '.$listname.': '.$grp->errormsg;
				continue;
			}
		}
		else
		{
			setGeneriert($listname);
		}
		echo strtoupper($listname).' wird abgeglichen...<BR>';
		flush();
		//Eventuelles Semikolon am Ende des SQLs entfernen
		if (substr($data['sql'], -1) == ';')
			$data['sql'] = substr($data['sql'], 0, strlen($data['sql'])-1);

		$qry_delete = "	DELETE FROM
							public.tbl_benutzergruppe
						WHERE
							UPPER(gruppe_kurzbz)=UPPER(".$db->db_add_param($listname).")
						AND
							uid NOT IN (".$data['sql'].");";

		if(!($result = $db->db_query($qry_delete)))
			$error_msg .= $db->db_last_error().$qry_delete.'<br><br>';

		echo strtoupper($listname).' '.$db->db_affected_rows($result).' Einträge gelöscht<BR>';

		flush();

		$qry_insert = "	WITH
							uids AS (".$data['sql'].")
						INSERT INTO
							public.tbl_benutzergruppe(uid, gruppe_kurzbz, insertamum, insertvon)
						SELECT
							*, UPPER(".$db->db_add_param($listname)."), now(), 'mlists_generate'
						FROM
							uids
						WHERE
							uid NOT IN (SELECT uid FROM public.tbl_benutzergruppe WHERE UPPER(gruppe_kurzbz)=UPPER(".$db->db_add_param($listname)."));";

		if(!($result = $db->db_query($qry_insert)))
			$error_msg .= $db->db_last_error().$qry_insert.'<br><br>';

		echo strtoupper($listname).' '.$db->db_affected_rows($result).' Einträge hinzugefügt<BR><BR>';

		flush();
	}

// **************************************************************
// Erstellen der Mailinglisten mit Schleifen-Logik
// **************************************************************


	// **************************************************************
	// Lektoren-Verteiler innerhalb der Studiengaenge abgleichen
	// Lektoren holen die nicht mehr in den Verteiler gehoeren
	echo '<BR>Lektoren-Verteiler der Studiengaenge werden abgeglichen!<BR>';
	flush();
	$sql_query="SELECT uid, gruppe_kurzbz FROM public.tbl_benutzergruppe
		WHERE gruppe_kurzbz LIKE '%\\_LKT' AND UPPER(gruppe_kurzbz)!=UPPER('tw_lkt') AND UPPER(gruppe_kurzbz)!=UPPER('tw_fix_lkt') AND UPPER(gruppe_kurzbz)!=UPPER('tw_ext_lkt') AND UPPER(gruppe_kurzbz)!=UPPER('moodle_lkt')
		AND (uid,UPPER(gruppe_kurzbz)) NOT IN
		(SELECT mitarbeiter_uid,UPPER(typ::varchar(1) || tbl_studiengang.kurzbz || '_lkt')
			FROM lehre.tbl_lehrveranstaltung, lehre.tbl_lehreinheit, lehre.tbl_lehreinheitmitarbeiter, public.tbl_studiengang
			WHERE
			tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id AND
			tbl_lehreinheit.lehreinheit_id=tbl_lehreinheitmitarbeiter.lehreinheit_id AND
			tbl_studiengang.studiengang_kz=tbl_lehrveranstaltung.studiengang_kz AND
			(studiensemester_kurzbz='$studiensemester' OR
			 studiensemester_kurzbz='$stsem2') AND mitarbeiter_uid NOT LIKE '\\\\_%')";

	if(!($result=$db->db_query($sql_query)))
		$error_msg.=$db->db_last_error().$sql_query;
	while($row=$db->db_fetch_object($result))
	{
		$sql_query="DELETE FROM public.tbl_benutzergruppe WHERE UPPER(gruppe_kurzbz)=UPPER('$row->gruppe_kurzbz') AND uid='$row->uid'";
		if(!$db->db_query($sql_query))
			$error_msg.=$db->db_last_error().$sql_query;
		echo '-';
		flush();
	}
	// Lektoren holen die noch nicht im Verteiler sind
	echo '<BR>';
	$sql_query="SELECT distinct mitarbeiter_uid, UPPER(typ::varchar(1) || tbl_studiengang.kurzbz || '_lkt') AS mlist_name, tbl_studiengang.studiengang_kz
		FROM lehre.tbl_lehrveranstaltung, lehre.tbl_lehreinheit, lehre.tbl_lehreinheitmitarbeiter, public.tbl_studiengang
		WHERE
		tbl_lehrveranstaltung.lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id AND
		tbl_lehreinheit.lehreinheit_id=tbl_lehreinheitmitarbeiter.lehreinheit_id AND
		tbl_studiengang.studiengang_kz=tbl_lehrveranstaltung.studiengang_kz AND
		(studiensemester_kurzbz='$studiensemester' OR
		 studiensemester_kurzbz='$stsem2') AND
		mitarbeiter_uid NOT LIKE '\\\\_%' AND tbl_studiengang.studiengang_kz!=0 AND
		(mitarbeiter_uid,UPPER(typ::varchar(1) || tbl_studiengang.kurzbz || '_lkt')) NOT IN
		(SELECT uid, UPPER(gruppe_kurzbz) FROM public.tbl_benutzergruppe
			WHERE gruppe_kurzbz LIKE '%\\_LKT' AND UPPER(gruppe_kurzbz)!=UPPER('tw_lkt') AND UPPER(gruppe_kurzbz)!=UPPER('tw_fix_lkt') AND UPPER(gruppe_kurzbz)!=UPPER('tw_ext_lkt') AND UPPER(gruppe_kurzbz)!=UPPER('moodle_lkt'))";
	//echo $sql_query;
	if(!($result=$db->db_query($sql_query)))
		$error_msg.=$db->db_last_error().$sql_query;
	while($row=$db->db_fetch_object($result))
	{
		$sql_query="SELECT * FROM public.tbl_gruppe WHERE gruppe_kurzbz='".strtoupper($row->mlist_name)."'";
		if($res = $db->db_query($sql_query))
		{
			if($db->db_num_rows($res)<=0)
			{
				setGeneriert($row->mlist_name);
				$sql_query="INSERT INTO public.tbl_gruppe(gruppe_kurzbz, studiengang_kz, semester, bezeichnung,
							beschreibung, mailgrp, sichtbar, generiert, aktiv, updateamum, updatevon,
							insertamum, insertvon)
							VALUES('".strtoupper($row->mlist_name)."',$row->studiengang_kz, 0,'$row->mlist_name',".
							"'$row->mlist_name', true, true, true, true, now(),'mlists_generate',now(), 'mlists_generate');";
				if(!$db->db_query($sql_query))
					echo "<br>Fehler beim Anlegen der Gruppe: $sql_query<br>";
			}
		}
		else
			echo "<br>Fehler:$sql_query";

		setGeneriert($row->mlist_name);
		$sql_query="INSERT INTO public.tbl_benutzergruppe(uid, gruppe_kurzbz, insertamum, insertvon) VALUES ('$row->mitarbeiter_uid','".strtoupper($row->mlist_name)."', now(), 'mlists_generate')";
		if(!$db->db_query($sql_query))
			$error_msg.=$db->db_last_error().$sql_query;

		flush();
	}


	// **************************************************************
	// Studienvertretungen der Studiengänge abgleichen

	echo 'Studienvertretungsverteiler werden abgeglichen!<BR>';
	flush();

	//Verteiler anlegen
	$sql_query="SELECT DISTINCT
					UPPER(typ||kurzbz)||'_'||UPPER(funktion_kurzbz) AS gruppe ,
					UPPER(typ||kurzbz) AS studiengang,
					tbl_studiengang.studiengang_kz
				FROM public.tbl_benutzerfunktion
				JOIN public.tbl_studiengang USING (oe_kurzbz)
				WHERE funktion_kurzbz='stdv'
				AND UPPER(typ||kurzbz)||'_'||UPPER(funktion_kurzbz) NOT IN (SELECT gruppe_kurzbz FROM public.tbl_gruppe)
				AND tbl_studiengang.aktiv
				AND tbl_studiengang.studiengang_kz!=0";
	if($res = $db->db_query($sql_query))
	{
		while($row = $db->db_fetch_object($res))
		{
			if($db->db_num_rows($res)>0)
			{
				$sql_query="INSERT INTO public.tbl_gruppe(gruppe_kurzbz, studiengang_kz, semester, bezeichnung,
								beschreibung, mailgrp, sichtbar, generiert, aktiv, updateamum, updatevon,
								insertamum, insertvon)
								VALUES(".$db->db_add_param($row->gruppe).",".$db->db_add_param($row->studiengang_kz).", NULL,".$db->db_add_param('Studienvertretung '.$row->studiengang).",".$db->db_add_param('Studienvertretung '.$row->studiengang).", true, true, true, true, now(),'mlists_generate',now(), 'mlists_generate');";
				if(!$db->db_query($sql_query))
					echo "<br>Fehler beim Anlegen der Gruppe: $sql_query<br>";
			}
		}
	}

	// Studierende holen, die nicht mehr in den Verteiler gehoeren
	$sql_query="SELECT gruppe_kurzbz, uid
				FROM public.tbl_benutzergruppe JOIN public.tbl_gruppe USING(gruppe_kurzbz)
				WHERE gruppe_kurzbz LIKE '%_STDV'
				AND uid not in (SELECT uid FROM public.tbl_benutzerfunktion JOIN public.tbl_benutzer USING(uid)
								WHERE funktion_kurzbz='stdv' AND tbl_benutzer.aktiv AND
								(tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von<=now()) AND
								(tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis>=now())
								AND (SELECT studiengang_kz FROM public.tbl_studiengang
									WHERE oe_kurzbz=tbl_benutzerfunktion.oe_kurzbz LIMIT 1)=tbl_gruppe.studiengang_kz)
								AND tbl_gruppe.studiengang_kz!='0'";
	if(!($result=$db->db_query($sql_query)))
		$error_msg.=$db->db_last_error();
	while($row = $db->db_fetch_object($result))
	{
		$sql_query="DELETE FROM public.tbl_benutzergruppe WHERE UPPER(gruppe_kurzbz)=UPPER('$row->gruppe_kurzbz') AND uid='$row->uid'";
		if(!$db->db_query($sql_query))
			$error_msg.=$db->db_last_error().$sql_query;

		flush();
	}
	ob_flush();
	// Studierende holen, die nicht im Verteiler sind
	echo '<BR>';
	$sql_query="SELECT DISTINCT uid, tbl_gruppe.gruppe_kurzbz
				FROM
					public.tbl_benutzerfunktion
					JOIN public.tbl_benutzer USING(uid)
					JOIN public.tbl_studiengang USING(oe_kurzbz)
					JOIN public.tbl_gruppe ON(tbl_gruppe.studiengang_kz=tbl_studiengang.studiengang_kz AND gruppe_kurzbz like '%_STDV')
				WHERE
					funktion_kurzbz='stdv'
					AND tbl_benutzer.aktiv AND
					(tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von<=now()) AND
					(tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis>=now())
					AND uid NOT in(Select uid from public.tbl_benutzergruppe JOIN public.tbl_gruppe USING(gruppe_kurzbz)
				WHERE studiengang_kz=(SELECT studiengang_kz FROM public.tbl_studiengang
				WHERE oe_kurzbz=tbl_benutzerfunktion.oe_kurzbz LIMIT 1)
					AND gruppe_kurzbz Like '%_STDV')";
	if(!($result = $db->db_query($sql_query)))
		$error_msg.=$db->db_last_error();
	while($row = $db->db_fetch_object($result))
	{
		if($row->gruppe_kurzbz!='')
		{
			setGeneriert($row->gruppe_kurzbz);
			$sql_query="INSERT INTO public.tbl_benutzergruppe (uid, gruppe_kurzbz, insertamum, insertvon) VALUES ('$row->uid','".mb_strtoupper($row->gruppe_kurzbz)."', now(), 'mlists_generate')";
			if(!$db->db_query($sql_query))
				$error_msg.=$db->db_last_error().$sql_query;

			flush();
		}
	}


	// **************************************************************
	// Verteiler Jahrgangsvertretung abgleichen

	echo 'Jahrgangsvertretungsverteiler werden abgeglichen!<BR>';
	flush();

	//Verteiler der einzelnen Studiengaenge anlegen
	$sql_query="SELECT DISTINCT
					UPPER(typ||kurzbz)||'_'||UPPER(funktion_kurzbz) AS gruppe ,
					UPPER(typ||kurzbz) AS studiengang,
					tbl_studiengang.studiengang_kz
				FROM public.tbl_benutzerfunktion
				JOIN public.tbl_studiengang USING (oe_kurzbz)
				WHERE funktion_kurzbz='jgv'
				AND UPPER(typ||kurzbz)||'_'||UPPER(funktion_kurzbz) NOT IN (SELECT gruppe_kurzbz FROM public.tbl_gruppe)
				AND tbl_studiengang.aktiv
				AND tbl_studiengang.studiengang_kz!=0";
	if($res = $db->db_query($sql_query))
	{
		while($row = $db->db_fetch_object($res))
		{
			if($db->db_num_rows($res)>0)
			{
				$sql_query="INSERT INTO public.tbl_gruppe(gruppe_kurzbz, studiengang_kz, semester, bezeichnung,
								beschreibung, mailgrp, sichtbar, generiert, aktiv, updateamum, updatevon,
								insertamum, insertvon)
								VALUES(".$db->db_add_param($row->gruppe).",".$db->db_add_param($row->studiengang_kz).", NULL,".$db->db_add_param('Jahrgangsvertretung '.$row->studiengang).",".$db->db_add_param('Jahrgangsvertretung '.$row->studiengang).", true, true, true, true, now(),'mlists_generate',now(), 'mlists_generate');";
				if(!$db->db_query($sql_query))
					echo "<br>Fehler beim Anlegen der Gruppe: $sql_query<br>";
			}
		}
	}

	// Studierende holen, die nicht mehr in den Verteiler gehoeren
	$sql_query="SELECT gruppe_kurzbz, uid
				FROM public.tbl_benutzergruppe JOIN public.tbl_gruppe USING(gruppe_kurzbz)
				WHERE gruppe_kurzbz LIKE '%_JGV'
				AND uid not in (SELECT uid FROM public.tbl_benutzerfunktion JOIN public.tbl_benutzer USING(uid)
								WHERE funktion_kurzbz='jgv' AND tbl_benutzer.aktiv AND
								(tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von<=now()) AND
								(tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis>=now())
								AND (SELECT studiengang_kz FROM public.tbl_studiengang
									WHERE oe_kurzbz=tbl_benutzerfunktion.oe_kurzbz LIMIT 1)=tbl_gruppe.studiengang_kz)
								AND tbl_gruppe.studiengang_kz!='0'";
	if(!($result=$db->db_query($sql_query)))
		$error_msg.=$db->db_last_error();
	while($row = $db->db_fetch_object($result))
	{
		$sql_query="DELETE FROM public.tbl_benutzergruppe WHERE UPPER(gruppe_kurzbz)=UPPER('$row->gruppe_kurzbz') AND uid='$row->uid'";
		if(!$db->db_query($sql_query))
			$error_msg.=$db->db_last_error().$sql_query;

		flush();
	}

	// Studierende holen, die noch nicht im Verteiler sind
	echo '<BR>';
	$sql_query="SELECT DISTINCT uid, tbl_gruppe.gruppe_kurzbz
				FROM
					public.tbl_benutzerfunktion
					JOIN public.tbl_benutzer USING(uid)
					JOIN public.tbl_studiengang USING(oe_kurzbz)
					JOIN public.tbl_gruppe ON(tbl_gruppe.studiengang_kz=tbl_studiengang.studiengang_kz AND gruppe_kurzbz like '%_JGV')
				WHERE
					funktion_kurzbz='jgv'
					AND tbl_benutzer.aktiv AND
					(tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von<=now()) AND
					(tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis>=now())
					AND uid NOT in(Select uid from public.tbl_benutzergruppe JOIN public.tbl_gruppe USING(gruppe_kurzbz)
				WHERE studiengang_kz=(SELECT studiengang_kz FROM public.tbl_studiengang
				WHERE oe_kurzbz=tbl_benutzerfunktion.oe_kurzbz LIMIT 1)
					AND gruppe_kurzbz Like '%_JGV')";
	if(!($result = $db->db_query($sql_query)))
		$error_msg.=$db->db_last_error();
	while($row = $db->db_fetch_object($result))
	{
		if($row->gruppe_kurzbz!='')
		{
			setGeneriert($row->gruppe_kurzbz);
			$sql_query="INSERT INTO public.tbl_benutzergruppe (uid, gruppe_kurzbz, insertamum, insertvon) VALUES ('$row->uid','".mb_strtoupper($row->gruppe_kurzbz)."', now(), 'mlists_generate')";
			if(!$db->db_query($sql_query))
				$error_msg.=$db->db_last_error().$sql_query;

			flush();
		}
	}

	// **************************************************************
	// Organisationseinheiten-Verteiler

	/*
	$qry = "SELECT * FROM public.tbl_organisationseinheit WHERE aktiv AND mailverteiler";
	if($result = $db->db_query($qry))
	{
		while($row = $db->db_fetch_object($result))
		{
			$mlist_name=strtoupper($row->oe_kurzbz);

			$grp = new gruppe();
			if(!$grp->exists($mlist_name))
			{
				$grp->gruppe_kurzbz = $mlist_name;
				$grp->studiengang_kz = '0';
				$grp->bezeichnung = $row->oe_kurzbz;
				$grp->beschreibung = 'Personen der Organisationseinheit '.$row->bezeichnung;
				$grp->semester = '0';
				$grp->mailgrp = true;
				$grp->sichtbar = true;
				$grp->generiert = true;
				$grp->aktiv = true;
				$grp->lehre = true;
				$grp->insertamum = date('Y-m-d H:i:s');
				$grp->insertvon = 'mlists_generate';

				if(!$grp->save(true, false))
					die('Fehler: '.$grp->errormsg);
			}
			else
			{
				setGeneriert($mlist_name);
			}

			$oe = new organisationseinheit();
			$childs = $oe->getChilds($row->oe_kurzbz);

			// Lektoren holen die nicht mehr in den Verteiler gehoeren
			echo '<br>'.$mlist_name.' wird abgeglichen!<BR>';
			flush();

			$oes='';
			foreach ($childs as $oe_kurzbz)
			{
				if($oes!='')
					$oes.=',';

				$oes .= "'".addslashes($oe_kurzbz)."'";
			}

			$sql_query = "SELECT distinct uid FROM public.tbl_benutzer JOIN public.tbl_benutzerfunktion USING(uid)
						WHERE oe_kurzbz in($oes)
						AND tbl_benutzer.aktiv
						AND (tbl_benutzerfunktion.datum_von<=now() OR tbl_benutzerfunktion.datum_von is null)
						AND (tbl_benutzerfunktion.datum_bis>=now() OR tbl_benutzerfunktion.datum_bis is null)";

			$sql_querys="DELETE FROM public.tbl_benutzergruppe WHERE gruppe_kurzbz='$mlist_name' AND uid NOT IN ($sql_query)";
			if(!$db->db_query($sql_querys))
			{
				$error_msg.=$db->db_last_error().' '.$sql_querys;
				echo '-';
				flush();
			}

			$sql_query.=" AND uid NOT IN (SELECT uid FROM public.tbl_benutzergruppe WHERE gruppe_kurzbz='$mlist_name')";
			if(!($result_oe = $db->db_query($sql_query)))
				$error_msg.=$db->db_last_error().' '.$sql_query;
			// Lektoren holen die nicht im Verteiler sind
			echo '<BR>';
			while($row_oe = $db->db_fetch_object($result_oe))
			{
				$sql_query="INSERT INTO public.tbl_benutzergruppe(uid, gruppe_kurzbz, insertamum, insertvon) VALUES ('$row_oe->uid','".$mlist_name."', now(), 'mlists_generate')";
				if(!$db->db_query($sql_query))
				{
					$error_msg.=$db->db_last_error().$sql_query;
					exit($error_msg);
				}
				echo '-';
				flush();
			}
		}
	}
	*/
	// **************************************************************
	// Instituts-Verteiler
	echo '<br>Abgleich der Institutsverteiler<br>';
	//Externe Mitarbeiter
	$qry = "SELECT * FROM public.tbl_organisationseinheit WHERE aktiv AND mailverteiler AND organisationseinheittyp_kurzbz='Institut'";

	if($result = $db->db_query($qry))
	{
		while($row = $db->db_fetch_object($result))
		{
			$mlist_name=strtoupper($row->oe_kurzbz).'_EXT';

			$grp = new gruppe();
			if(!$grp->exists($mlist_name))
			{
				$grp->gruppe_kurzbz = $mlist_name;
				$grp->studiengang_kz = '0';
				$grp->bezeichnung = $row->oe_kurzbz;
				$grp->beschreibung = 'Externe Mitarbeiter des Instituts '.$row->bezeichnung;
				$grp->semester = '0';
				$grp->mailgrp = true;
				$grp->sichtbar = true;
				$grp->generiert = true;
				$grp->aktiv = true;
				$grp->lehre = true;
				$grp->insertamum = date('Y-m-d H:i:s');
				$grp->insertvon = 'mlists_generate';

				if(!$grp->save(true, false))
					die('Fehler: '.$grp->errormsg);
			}
			else
			{
				setGeneriert($mlist_name);
			}

			$oe = new organisationseinheit();
			$childs = $oe->getChilds($row->oe_kurzbz);

			// Lektoren holen die nicht mehr in den Verteiler gehoeren
			echo '<br>'.$mlist_name.' wird abgeglichen!';
			flush();

			$oes='';
			foreach ($childs as $oe_kurzbz)
			{
				if($oes!='')
					$oes.=',';

				$oes .= "'".addslashes($oe_kurzbz)."'";
			}

			$sql_query = "SELECT distinct uid
						FROM
							public.tbl_benutzer
							JOIN public.tbl_benutzerfunktion USING(uid)
							JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid)
						WHERE oe_kurzbz in($oes)
						AND tbl_benutzer.aktiv AND NOT fixangestellt
						AND (tbl_benutzerfunktion.datum_von<=now() OR tbl_benutzerfunktion.datum_von is null)
						AND (tbl_benutzerfunktion.datum_bis>=now() OR tbl_benutzerfunktion.datum_bis is null)";

			$sql_querys="DELETE FROM public.tbl_benutzergruppe WHERE gruppe_kurzbz='$mlist_name' AND uid NOT IN ($sql_query)";
			if(!$db->db_query($sql_querys))
			{
				$error_msg.=$db->db_last_error().' '.$sql_querys;
			}

			$sql_query.=" AND uid NOT IN (SELECT uid FROM public.tbl_benutzergruppe WHERE gruppe_kurzbz='$mlist_name')";
			if(!($result_oe = $db->db_query($sql_query)))
				$error_msg.=$db->db_last_error().' '.$sql_query;
			// Lektoren holen die nicht im Verteiler sind

			while($row_oe = $db->db_fetch_object($result_oe))
			{
				$sql_query="INSERT INTO public.tbl_benutzergruppe(uid, gruppe_kurzbz, insertamum, insertvon) VALUES ('$row_oe->uid','".$mlist_name."', now(), 'mlists_generate')";
				if(!$db->db_query($sql_query))
				{
					$error_msg.=$db->db_last_error().$sql_query;
				}
			}
		}
	}

	//Fixe Mitarbeiter
	$qry = "SELECT * FROM public.tbl_organisationseinheit WHERE aktiv AND mailverteiler AND organisationseinheittyp_kurzbz='Institut'";

	if($result = $db->db_query($qry))
	{
		while($row = $db->db_fetch_object($result))
		{
			$mlist_name=strtoupper($row->oe_kurzbz).'_FIX';

			$grp = new gruppe();
			if(!$grp->exists($mlist_name))
			{
				$grp->gruppe_kurzbz = $mlist_name;
				$grp->studiengang_kz = '0';
				$grp->bezeichnung = $row->oe_kurzbz;
				$grp->beschreibung = 'Fixangestellte Mitarbeiter des Instituts '.$row->bezeichnung;
				$grp->semester = '0';
				$grp->mailgrp = true;
				$grp->sichtbar = true;
				$grp->generiert = true;
				$grp->aktiv = true;
				$grp->lehre = true;
				$grp->insertamum = date('Y-m-d H:i:s');
				$grp->insertvon = 'mlists_generate';

				if(!$grp->save(true, false))
					die('Fehler: '.$grp->errormsg);
			}
			else
			{
				setGeneriert($mlist_name);
			}

			$oe = new organisationseinheit();
			$childs = $oe->getChilds($row->oe_kurzbz);

			// Lektoren holen die nicht mehr in den Verteiler gehoeren
			echo '<br>'.$mlist_name.' wird abgeglichen!';
			flush();

			$oes='';
			foreach ($childs as $oe_kurzbz)
			{
				if($oes!='')
					$oes.=',';

				$oes .= "'".addslashes($oe_kurzbz)."'";
			}

			$sql_query = "SELECT distinct uid
						FROM
							public.tbl_benutzer
							JOIN public.tbl_benutzerfunktion USING(uid)
							JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid)
						WHERE oe_kurzbz in($oes)
						AND tbl_benutzer.aktiv AND fixangestellt
						AND (tbl_benutzerfunktion.datum_von<=now() OR tbl_benutzerfunktion.datum_von is null)
						AND (tbl_benutzerfunktion.datum_bis>=now() OR tbl_benutzerfunktion.datum_bis is null)";

			$sql_querys="DELETE FROM public.tbl_benutzergruppe WHERE gruppe_kurzbz='$mlist_name' AND uid NOT IN ($sql_query)";
			if(!$db->db_query($sql_querys))
			{
				$error_msg.=$db->db_last_error().' '.$sql_querys;
			}

			$sql_query.=" AND uid NOT IN (SELECT uid FROM public.tbl_benutzergruppe WHERE gruppe_kurzbz='$mlist_name')";
			if(!($result_oe = $db->db_query($sql_query)))
				$error_msg.=$db->db_last_error().' '.$sql_query;
			// Lektoren holen die nicht im Verteiler sind
			while($row_oe = $db->db_fetch_object($result_oe))
			{
				$sql_query="INSERT INTO public.tbl_benutzergruppe(uid, gruppe_kurzbz, insertamum, insertvon) VALUES ('$row_oe->uid','".$mlist_name."', now(), 'mlists_generate')";
				if(!$db->db_query($sql_query))
				{
					$error_msg.=$db->db_last_error().$sql_query;
				}
			}
		}
	}
	echo '<br>';

	// **************************************************************
	// Studierendenverteiler fuer die einzelnen Organisationseinheiten bei Mischformen
	echo '<br>Abgleich der Mischformverteiler';
	$stsem = $stsem_obj->getNearest();

	$sql_query = "
		SELECT
			tbl_prestudentstatus.orgform_kurzbz,
			tbl_studiengang.studiengang_kz,
			tbl_studiengang.typ,
			tbl_studiengang.kurzbz
		FROM
			public.tbl_student
			JOIN public.tbl_benutzer ON(student_uid=uid)
			JOIN public.tbl_prestudentstatus USING(prestudent_id)
			JOIN public.tbl_studiengang USING(studiengang_kz)
		WHERE
			tbl_studiengang.mischform
			AND tbl_benutzer.aktiv
			AND tbl_prestudentstatus.orgform_kurzbz is not null
		GROUP BY
			tbl_studiengang.studiengang_kz, tbl_prestudentstatus.orgform_kurzbz, tbl_studiengang.typ, tbl_studiengang.kurzbz
		";

	if($result = $db->db_query($sql_query))
	{
		echo '<BR>';

		while($row = $db->db_fetch_object($result))
		{
			$mlist_name=strtoupper($row->typ.$row->kurzbz.'_'.$row->orgform_kurzbz);
			echo $mlist_name.'<br>';

			//Gruppe anlegen falls noch nicht vorhanden
			$grp = new gruppe();
			if(!$grp->exists($mlist_name))
			{
				$grp->gruppe_kurzbz = $mlist_name;
				$grp->studiengang_kz = $row->studiengang_kz;
				$grp->bezeichnung = 'Alle '.$row->orgform_kurzbz.' Studenten von '.strtoupper($row->typ.$row->kurzbz);
				$grp->beschreibung = 'Alle '.$row->orgform_kurzbz.' Studenten von '.strtoupper($row->typ.$row->kurzbz);
				$grp->semester = '0';
				$grp->mailgrp = true;
				$grp->sichtbar = true;
				$grp->generiert = true;
				$grp->aktiv = true;
				$grp->lehre = false;
				$grp->insertamum = date('Y-m-d H:i:s');
				$grp->insertvon = 'mlists_generate';

				if(!$grp->save(true, false))
					die('Fehler: '.$grp->errormsg);
			}
			else
			{
				setGeneriert($mlist_name);
			}

			$sql_query="
				SELECT
					distinct student_uid
				FROM
					public.tbl_student
					JOIN public.tbl_benutzer ON(uid=student_uid)
				WHERE
					tbl_benutzer.aktiv AND
					'".addslashes($row->orgform_kurzbz)."'=
						(SELECT orgform_kurzbz
						 FROM public.tbl_prestudentstatus
						 WHERE
						 	prestudent_id=tbl_student.prestudent_id
						 	AND tbl_prestudentstatus.studiensemester_kurzbz='".addslashes($stsem)."'
						 ORDER BY datum desc, insertamum desc, ext_id desc LIMIT 1)
					AND tbl_student.studiengang_kz='".addslashes($row->studiengang_kz)."'";

			//Personen entfernen die nicht mehr in den Verteiler gehoeren
			$qry = "DELETE FROM public.tbl_benutzergruppe WHERE gruppe_kurzbz='".$mlist_name."' AND uid NOT IN(".$sql_query.");";
			if(!$db->db_query($qry))
			{
				$error_msg.="Fehler bei Qry:".$qry;
			}

			//Fehlende Personen hinzufuegen
			$sql_query.=" AND student_uid NOT IN (SELECT uid FROM public.tbl_benutzergruppe WHERE gruppe_kurzbz='$mlist_name')";
			if(!($result_oe = $db->db_query($sql_query)))
				$error_msg.=$db->db_last_error().' '.$sql_query;


			while($row_oe = $db->db_fetch_object($result_oe))
			{
				$sql_query="INSERT INTO public.tbl_benutzergruppe(uid, gruppe_kurzbz, insertamum, insertvon) VALUES ('$row_oe->student_uid','".$mlist_name."', now(), 'mlists_generate')";
				if(!$db->db_query($sql_query))
				{
					$error_msg.=$db->db_last_error().$sql_query;
					exit($error_msg);
				}
				flush();
			}
		}
	}
	else
		$error_msg.=$db->db_last_error().' '.$sql_query;

	echo $error_msg;

	// Send Mail to admin if error occurs
	if ($error_msg != '')
	{
		$mailtext = '
			<style type="text/css">
			.table1
			{
				font-size: small;
				cellpadding: 3px;
			}
			.table1 th
			{
				background: #DCE4EF;
				border: 1px solid #FFF;
				padding: 4px;
				text-align: left;
			}
			.table1 td
			{
				background-color: #EEEEEE;
				padding: 4px;
			}
			</style>
			Im Script mlists_generate.php sind folgende Fehler aufgetreten:<br><br>';
		$mailtext .= $error_msg;
		$mailtext = wordwrap($mailtext,70);
		$mail = new mail(MAIL_ADMIN, 'no-reply', 'ERROR mlists_generate.php', 'Bitte sehen Sie sich die Nachricht in HTML Sicht an, um den Inhalt vollständig darzustellen.');
		//$mail->setBCCRecievers('kindlm@technikum-wien.at');
		$mail->setHTMLContent($mailtext);
		$mail->send();
	}
	?>
	<BR>
	<P>
		Die Mailinglisten wurden abgeglichen. <BR>
	</P>
</BODY>
</HTML>
