Files
4G/f_admin.php

10508 lines
279 KiB
PHP
Executable File

<?php
include_once( "kd_einsprungspunkte.php" );
function xlog( $level, $meldung )
{
chdir( $_SERVER[ "DOCUMENT_ROOT" ]."/ca/" );
$zeitstempel = date( "Y.m.d H:i:s", time( ) );
$LOG_LEVEL = 4;
switch ( $level )
{
case 6:
$loglevel = "DEB_2";
break;
case 5:
$loglevel = "DEBUG";
break;
case 4:
$loglevel = "INFO ";
break;
case 3:
$loglevel = "WARN ";
break;
case 2:
$loglevel = "ERROR";
break;
case 1:
$loglevel = "FATAL";
break;
}
if ( $level <= $LOG_LEVEL )
{
$datei = fopen( "system.log", "a+" );
fwrite( $datei, $zeitstempel." ".$loglevel." ".$_SESSION[ "mandant_id" ]." ".$meldung."\n" );
fclose( $datei );
}
}
function xdb( $STATEMENT )
{
/*
Es wird ein Array zurückgegeben
array( $rc, $ergebnis )
$rc = -1 wenn Fehler
$rc = Anzahl Ergebniszeilen wenn Select
$rc = ID des eingefügten Elements wenn Insert
$rc = 0 für Inserts ohne auto_increment und andere Statements ( update, delete, ...)
*/
/*if ( strtoupper( substr( $STATEMENT, 0, 5 ) ) == "DELET" )
{
return array( 0, 0 );
}
*/
// Herstellen der DB-Verbindung
$connection = mysqli_connect( "p:localhost", "ca_db", "ca_db", "ca_system" );
mysqli_query( $connection, "SET NAMES utf8" );
mysqli_select_db( $connection, "ca_system" );
//xlog(4, $STATEMENT );
//$STATEMENT = utf8_encode( $STATEMENT );
$ergebnis = mysqli_query( $connection, $STATEMENT );
$id = mysqli_insert_id( $connection );
$sql_ok = mysqli_error( $connection );
if ( strlen( $sql_ok ) > 0 )
{
$rc = -1;
$ergebnis = $sql_ok;
//xlog( 2, $STATEMENT );
xlog( 2, $sql_ok );
}
else
{
if ( ! is_bool( $ergebnis ) )
{
// STATEMENT offenbar ein Select, Trefferliste:
while ( $zeile = mysqli_fetch_array( $ergebnis, MYSQLI_ASSOC ) )
{
/*$ergebnis_2 = array();
foreach( $zeile as $key=>$value )
{
$ergebnis_2[ $key ] = utf8_decode( $value );
}
$ergebnis_1[ ] = $ergebnis_2;
*/
$ergebnis_1[ ] = $zeile;
}
$rc = count( $ergebnis_1 );
$ergebnis = $ergebnis_1;
}
else
{
// STATEMENT offenbar ein Insert
//$STATEMENT = "select @@IDENTITY as id";
//$STATEMENT = utf8_encode( $STATEMENT );
//$ergebnis_2 = mysql_query( $STATEMENT );
//$id = mysql_fetch_array( $ergebnis_2 );
$rc = $id;
if ( strlen( $rc ) == 0 )
{
$rc = 0;
}
$ergebnis = "Liefere ID ".$rc.".";
}
}
return array( $rc, $ergebnis );
}
function login( $mandant_name, $domaene, $benutzer_anmeldename, $passwort )
{
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
if ( $benutzer_anmeldename == "superuser" )
{
$mandant_name = "Standard";
}
//xlog( 3, " Parameter: ". $mandant_name."|". $domaene."|". $benutzer_anmeldename."|". $passwort );
// Machen wir LDAP?
$ldap = liefere_konfig( $mandant_name, "ldap_aktiv" );
if ( ( $ldap == "ja" ) and ( strlen( $domaene ) > 0 ) )
{
$ldap_server = liefere_konfig( $mandant_name, "ldap_server" );
$ldap_server = 'ldap://'.$ldap_server;
$connection = @ldap_connect( $ldap_server );
ldap_set_option($connection, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($connection, LDAP_OPT_REFERRALS, 0);
$login = @ldap_bind( $connection, $benutzer_anmeldename."@".$domaene, $passwort );
ldap_unbind( $connection );
if ( $login !== false )
{
$ok_1 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
$ergebnis = ldap_liefere_benutzerinformationen( $mandant_name, $domaene, $benutzer_anmeldename );
if ( $ok_1[ 0 ] == 0 )
{
// Benutzer existiert nicht
// benutzer_anlegen( $mandant_name, $benutzer_anmeldename, $passwort, $vorname = "", $nachname = "", $email="", $geschlecht = "", $geburtstag = "", $passwort_pruefen = true, $domaene = "" )
// Erweiterte Benutzerinformationen aus dem LDAP lesen
$_SESSION[ "benutzer_anmeldename" ] = "superuser";
$ok_2 = benutzer_anlegen( $mandant_name, $benutzer_anmeldename, "", $ergebnis[ 2 ][ "vorname" ], $ergebnis[ 2 ][ "nachname" ], $ergebnis[ 2 ][ "email" ], "m", date( "d.m.Y" ), false, $domaene );
$_SESSION[ "benutzer_anmeldename" ] = "";
}
// Gruppenzugehörigkeiten regeln
// erstmal den Benutzer aus allen Gruppen entfernen
$in_welchen_gruppen_ist_benutzer_mitglied = in_welchen_gruppen_ist_benutzer_mitglied( $mandant_name, $benutzer_anmeldename );
$_SESSION[ "benutzer_anmeldename" ] = "superuser";
foreach( $in_welchen_gruppen_ist_benutzer_mitglied[ 2 ] as $gruppen_name )
{
benutzer_aus_gruppe_entfernen( $mandant_name, $benutzer_anmeldename, $gruppen_name );
}
$_SESSION[ "benutzer_anmeldename" ] = "";
// jetzt den Benutzer aufgrund von LDAP-Gruppenzugehörigkeiten in 4w-Gruppen zuordnen
$gruppenzuordnungen = liefere_wertemenge_elemente( $mandant_name, "ldap_gruppen" );
$_SESSION[ "benutzer_anmeldename" ] = "superuser";
foreach ( $gruppenzuordnungen[ 2 ] as $zuordnung )
{
foreach( $ergebnis[ 3 ] as $ldap_gruppe=>$ldap_vollbezeichnung )
{
if ( strpos( $zuordnung[ "alpha_01" ], $ldap_gruppe ) !== false )
{
benutzer_einer_gruppe_hinzufuegen( $mandant_name, $benutzer_anmeldename, $zuordnung[ "alpha_02" ] );
}
}
}
$_SESSION[ "benutzer_anmeldename" ] = "";
// fertig.
// Unterscheidungen zwischen Domänen- und nicht-Domänenbenutzern
$rc = 0;
$meldung = "Der Benutzer >".$benutzer_anmeldename."< wird eingeloggt.";
}
else
{
ldap_get_option( $connection, LDAP_OPT_ERROR_STRING, $error );
$rc = -1;
$meldung = $error;
}
}
else
{
if ( $benutzer_anmeldename <> "superuser" )
{
$erweiterung = " and mandant_id = (select mandant_id from ca_mandant where mandant_name = '".$mandant_name."') ";
}
else
{
$erweiterung = "";
}
//xlog( 4, "Passwort: >".$passwort."<" );
$passwort = md5( $passwort );
$benutzer_anmeldename = mb_strtolower( $benutzer_anmeldename, "UTF-8" );
$STATEMENT = "select count(*) anz from ca_benutzer where benutzer_anmeldename = '".mysqli_real_escape_string( $connection, $benutzer_anmeldename )."' and benutzer_passwort = '".mysqli_real_escape_string( $connection, $passwort )."'".$erweiterung;
//xlog( 4, "STATEMENT: ".$STATEMENT );
$ergebnis_1 = xdb( $STATEMENT );
//xlog( 4, "Ergebnis 1 " . json_encode( $ergebnis_1[ 0 ] ));
$STATEMENT = "select benutzer_gesperrt from ca_benutzer where benutzer_anmeldename = '".mysqli_real_escape_string( $connection, $benutzer_anmeldename )."'".$erweiterung;
$ergebnis_2 = xdb( $STATEMENT );
//xlog( 4, json_encode( $ergebnis_2 ) );
if ( $ergebnis_2[ 0 ] == 0 )
{
$benutzer_gesperrt = 0;
}
else
{
$benutzer_gesperrt = $ergebnis_2[ 1 ][ 0 ][ "benutzer_gesperrt" ];
}
//xlog( 4, $benutzer_gesperrt );
/*xlog( 4, "Ergebnis 2 " . json_encode( $ergebnis_1[ 1 ] ));
xlog( 4, "Ergebnis 3 " . json_encode( $ergebnis_1[ 1 ][ 0 ] ));
xlog( 4, "Ergebnis 4 " . json_encode( $ergebnis_1[ 1 ][ 0 ][ "anz" ] ));*/
if ( $ergebnis_1[ 1 ][ 0 ][ "anz" ] > 0 )
{
if ( $benutzer_gesperrt <> 1 )
{
// Setzen der Fehlversuche auf 0 (werden mitgezählt bei fehlerhaften Anmeldeversuchen)
$STATEMENT = "update ca_benutzer set benutzer_passwort_fehlversuche = '0' where benutzer_anmeldename = '".mysqli_real_escape_string( $connection, $benutzer_anmeldename )."'";
xdb( $STATEMENT );
// sind seit dem letzten erfolgreichen Einlogvorgang mehr als X tage vergangen? (mit X aus Konfiguration gelesen)
$pwd_gueltigkeitsdauer_tage = liefere_konfig( $mandant_name, "pwd_gueltigkeitsdauer_tage" );
$meldung = "pwd_gueltigkeitsdauer_tage = ".$pwd_gueltigkeitsdauer_tage;
$STATEMENT = "select benutzer_passwort_letzte_aenderung from ca_benutzer where benutzer_anmeldename = '".mysqli_real_escape_string( $connection, $benutzer_anmeldename )."' and mandant_id = (select mandant_id from ca_mandant where mandant_name = '".$mandant_name."')";
$ergebnis_3 = xdb( $STATEMENT );
$benutzer_passwort_letzte_aenderung = $ergebnis_3[ 1 ][ 0 ][ "benutzer_passwort_letzte_aenderung" ];
$datum_uhrzeit_oder_beides = time();
$zeitpunkt = bcadd( bcmul( $pwd_gueltigkeitsdauer_tage, "86400", 0 ), $benutzer_passwort_letzte_aenderung );
//xlog( 2, $zeitpunkt." < ".$datum_uhrzeit_oder_beides );
if ( $zeitpunkt < $datum_uhrzeit_oder_beides )
{
// Passwort ist abgelaufen
$rc = 1;
$meldung = "Das Passwort des Benutzers ".$benutzer_anmeldename." ist abgelaufen.";
}
else
{
// Passwort ist noch gültig
$rc = 0;
$meldung = "Der Benutzer >".$benutzer_anmeldename."< wird eingeloggt.";
}
}
else
{
$rc = -2;
$meldung = "Der Benutzer ".$benutzer_anmeldename." (Mandant ".$mandant_name.") ist gesperrt. Bitte kontaktieren Sie den Administrator.";
}
}
else
{
// Passwort falsch oder Benutzername falsch oder Benutzername existiert nicht
$STATEMENT = "update ca_benutzer set benutzer_passwort_fehlversuche = benutzer_passwort_fehlversuche + 1 where benutzer_anmeldename = '".mysqli_real_escape_string( $connection, $benutzer_anmeldename )."'";
xdb( $STATEMENT );
$max_anzahl_fehlversuche = liefere_konfig( $mandant_name, "pwd_anzahl_erlaubter_fehlversuche" );
$STATEMENT = "select benutzer_passwort_fehlversuche from ca_benutzer where benutzer_anmeldename = '".mysqli_real_escape_string( $connection, $benutzer_anmeldename )."' and mandant_id = ( select mandant_id from ca_mandant where mandant_name = '".$mandant_name."')";
$ergebnis_4 = xdb( $STATEMENT );
if ( $ergebnis_4[ 0 ] == 0 )
{
// Benutzer existiert nicht
$rc = -1;
$meldung = "Benutzername oder Passwort sind nicht korrekt.";
}
else
{
// Passwort falsch
$benutzer_passwort_fehlversuche = $ergebnis_4[ 1 ][ 0 ][ "benutzer_passwort_fehlversuche" ];
if ( $benutzer_passwort_fehlversuche >= $max_anzahl_fehlversuche )
{
// Maximale Anzahl Fehlversuche erreicht, Benutzer wird gesperrt
$STATEMENT = "update ca_benutzer set benutzer_gesperrt = '1' where benutzer_anmeldename = '".mysqli_real_escape_string( $connection, $benutzer_anmeldename )."'";
//xlog( 4, $STATEMENT );
xdb( $STATEMENT );
$rc = -4;
$meldung = "Der Benutzer ".$benutzer_anmeldename." wurde nach ".$benutzer_passwort_fehlversuche." Versuchen, sein Passwort einzugeben, gesperrt.";
}
else
{
$rc = -1;
$meldung = "Benutzername oder Passwort sind nicht korrekt.";
}
}
}
}
if ( $rc < 0 )
{
$level = 3;
}
else
{
$level = 4;
}
xlog( $level, "admin.login: RC ".$rc.": ".$meldung );
mysqli_close( $connection );
return array( $rc, $meldung );
}
function ldap_liefere_benutzerinformationen( $mandant_name, $domaene, $benutzer_anmeldename )
{
$ldap_server = liefere_konfig( $mandant_name, "ldap_server" );
$ldap_benutzer = liefere_konfig( $mandant_name, "ldap_benutzer" );
$ldap_passwort = liefere_konfig( $mandant_name, "ldap_passwort" );
//ldap_set_option( NULL, LDAP_OPT_DEBUG_LEVEL, 7 );
$ldap_server = 'ldap://'.$ldap_server;
$connection = @ldap_connect( $ldap_server );
@ldap_set_option( $connection, LDAP_OPT_PROTOCOL_VERSION, 3 );
@ldap_set_option( $connection, LDAP_OPT_REFERRALS, 0 );
@ldap_bind($connection, $ldap_benutzer, $ldap_passwort);
$dn = utf8_encode( "DC=dms01,DC=local" );
$filter = "(CN=".$benutzer_anmeldename.")";
$justthese = array( "ou", "sn", "cn", "givenName", "mail", "vorname", "memberOf", "dn", "pwdlastset", "badpwdcount" );
$sr = ldap_search( $connection, $dn, $filter, $justthese );
//$test = ldap_get_option( $connection, LDAP_OPT_ERROR_STRING, $error );
$info = ldap_get_entries( $connection, $sr );
$benutzerinfos[ "nachname" ] = $info[ 0 ][ "sn" ][ 0 ];
$benutzerinfos[ "benutzer_anmeldename" ] = $info[ 0 ][ "cn" ][ 0 ];
$benutzerinfos[ "vorname" ] = $info[ 0 ][ "givenname" ][ 0 ];
$benutzerinfos[ "email" ] = $info[ 0 ][ "mail" ][ 0 ];
$benutzerinfos[ "dn" ] = $info[ 0 ][ "dn" ][ 0 ];
$pwdlastset = $info[ 0 ][ "pwdlastset" ][ 0 ]; // The date and time that the password for this account was last changed. This value is stored as a large integer that represents the number of 100 nanosecond intervals since January 1, 1601 (UTC). If this value is set to 0 and the User-Account-Control attribute does not contain the UF_DONT_EXPIRE_PASSWD flag, then the user must set the password at the next logon.
$winSecs = bcdiv( $pwdlastset, 10000000); // divide by 10 000 000 to get seconds
$benutzerinfos[ "pw_letzte_aenderung" ] = bcsub($winSecs, 11644473600); // 1.1.1600 -> 1.1.1970 difference in seconds
$benutzerinfos[ "benutzer_passwort_fehlversuche" ] = $info[ 0 ][ "badpwdcount" ][ 0 ];
/*
foreach( $benutzerinfos as $key=>$element )
{
xlog( 3, "key ".$key." element ".$element );
}
*/
$gruppen = array();
foreach( $info[ 0 ][ "memberof" ] as $key=>$element )
{
if ( is_int( $key) )
{
$gruppenname_voll = $element;
//CN=Alle,CN=Users,DC=DMS01,DC=local
$element = explode( "=", $element );
$element = explode( ",", $element[ 1 ] );
$element = $element[ 0 ];
$gruppen[ $element ] = $gruppenname_voll;
}
}
ldap_unbind( $connection );
$rc = 0;
$meldung = "Liefere Informationen über den LDAP-Benutzer ".$benutzer_anmeldename." aus der Domaene ".$domaene.".";
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.ldap_liefere_benutzerinformationen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $benutzerinfos, $gruppen );
}
/*
Benutzerfunktionen
*/
function benutzer_anlegen( $mandant_name, $benutzer_anmeldename, $passwort, $vorname = "", $nachname = "", $email = "", $geschlecht = "", $geburtstag = "", $passwort_pruefen = true, $domaene = "" )
{
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
/****************
BESCHREIBUNG_____Diese Funktion erstellt einen Benutzer.
RETURNS_____array( (integer) Returncode, (string) Meldung)
****************/
$ok = existiert_mandant( $mandant_name );
if ( $ok[ 0 ] > 0 )
{
if ( mb_strtoupper( $exekutor, "UTF-8" ) == "SUPERUSER" )
{
$exec[ 0 ] = 1;
}
else
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMIN_BENUTZER" );
}
if ( $exec[ 0 ] == 1 )
{
if ( strlen( $benutzer_anmeldename ) <> 0 )
{
if ( ( strlen( $passwort ) <> 0 ) or ( ! $passwort_pruefen ) )
{
$benutzer_anmeldename = mb_strtolower( $benutzer_anmeldename, "UTF-8" );
if ( strlen( $geburtstag ) == 0 )
{
$geburtstag = date( "d.m.Y" );
}
xlog( 1, $geburtstag );
$geburtstag = datum2mysql( $geburtstag );
xlog( 1, $geburtstag );
$geschlecht = mb_strtolower( $geschlecht, "UTF-8" );
if ( ( strlen( $geschlecht ) == 0 ) or ( ( $geschlecht <> "m" ) and ( $geschlecht <> "w" ) ) )
{
$geschlecht = "m";
}
$regex = preg_match( "/[\!\"\§\$\%\&\\\,\.\ \?\:\;\/\(\)\=\*\#\'\{\}\[\]\~\|]/", $benutzer_anmeldename );
if ( $regex == 0 )
{
$benutzer_id = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $benutzer_id[ 0 ] == 0 )
{
if ( $passwort_pruefen == true )
{
$pass_ok = pruefe_password( $mandant_name, $passwort );
}
else
{
$pass_ok = array( "0", "Es hat keine Prüfung stattgefunden." );
}
if ( $pass_ok[ 0 ] == "0" )
{
$regex_vorname = preg_match( "/[\!\"\§\$\%\&\\\,\.\?\:\;\/\(\)\=\*\#\{\}\[\]\~\|]/", $vorname );
$regex_nachname = preg_match( "/[\!\"\§\$\%\&\\\,\.\?\:\;\/\(\)\=\*\#\{\}\[\]\~\|]/", $nachname );
if ( ( $regex_vorname == 0 ) and ( $regex_nachname == 0 ) )
{
$passwort = md5( $passwort );
$datum_uhrzeit_oder_beides = time( );
// Erstellen des Benutzers
$STATEMENT = "insert into ca_benutzer ( benutzer_geburtstag, domaene, mandant_id, benutzer_geschlecht, benutzer_vorname, benutzer_nachname, benutzer_anmeldename, benutzer_email_adresse, benutzer_passwort, benutzer_angelegt_am, benutzer_letzte_aenderung, benutzer_passwort_letzte_aenderung, benutzer_passwort_fehlversuche, benutzer_abwesend, benutzer_gesperrt, benutzer_vertreter, benutzer_vertreter_typ ) values ( '".mysqli_real_escape_string( $connection, $geburtstag )."', '".mysqli_real_escape_string( $connection, $domaene )."', ".mysqli_real_escape_string( $connection, $ok[ 0 ] ).", '".mysqli_real_escape_string( $connection, $geschlecht )."', '".mysqli_real_escape_string( $connection, $vorname )."', '".mysqli_real_escape_string( $connection, $nachname )."', '".mysqli_real_escape_string( $connection, $benutzer_anmeldename )."', '".mysqli_real_escape_string( $connection, $email )."', '".mysqli_real_escape_string( $connection, $passwort )."', '".mysqli_real_escape_string( $connection, $datum_uhrzeit_oder_beides )."', '".mysqli_real_escape_string( $connection, $datum_uhrzeit_oder_beides )."', '".mysqli_real_escape_string( $connection, $datum_uhrzeit_oder_beides )."', '0', 'nein', '', '', '' );";
$ergebnis = xdb( $STATEMENT );
/////////////////////////////////////////////////
// Es fehlt noch das Anlegen der benutzerspezifischen Konfiguration (siehe Wertemenge benutzer_konfig)
//
// initale Gruppen/Benutzerzuordnungen eintragen
$element_anzulegen = liefere_wertemenge_elemente( $mandant_name, "benutzer_konfig" );
if ( $element_anzulegen[ 0 ] > 0 )
{
foreach( $element_anzulegen[ 2 ] as $element )
{
// benutzer_einer_gruppe_hinzufuegen( $mandant_name, $benutzer_anmeldename, $gruppen_name )
//xlog( 4, "Benutzername ".$element[ "alpha_01" ]." gruppenname ".$element[ "alpha_02" ] ) ;
//$ok = benutzer_einer_gruppe_hinzufuegen( $mandant_name, "superuser", $element[ "alpha_01" ], $element[ "alpha_02" ] );
$ok = aktualisiere_benutzerspezifische_einstellung( $mandant_name, $benutzer_anmeldename, $element[ "alpha_01" ], $element[ "alpha_02" ], $element[ "alpha_04" ], $element[ "alpha_03" ], $element[ "alpha_05" ], $element[ "alpha_06" ], $element[ "text_01" ] );
}
}
if ( $ergebnis[ 0 ] <> -1 )
{
// Feststellen der Benutzer-ID
$rc = $ergebnis[ 0 ];
$meldung = "Der Benutzer >".$benutzer_anmeldename."< wurde mit der ID >".$ergebnis[ 0 ]."< angelegt.";
}
else
{
$rc = -8;
$meldung = "Beim Anlegen des Benutzers ist ein Fehler aufgetreten: >".$ergebnis[ 1 ]."<";
}
}
else
{
$rc = -7;
$meldung = "Sonderzeichen sind im Realnamen nicht erlaubt.";
}
}
else
{
$rc = -6;
$meldung = $pass_ok[1];
}
}
else
{
$rc = -5;
$meldung = "Der Benutzer ".$benutzer_anmeldename." existiert bereits mit der ID ".$benutzer_id[ 0 ].".";
}
}
else
{
$rc = -4;
$meldung = "Beim gewünschten Benutzer-Anmeldenamen >".$benutzer_anmeldename."< wurde ein nicht erlaubtes Sonderzeichen verwendet.";
}
}
else
{
$rc = -3;
$meldung = "Es wurde kein Passwort angegeben.";
}
}
else
{
$rc = -2;
$meldung = "Es wurde kein Benutzer-Anmeldename angegeben.";
}
}
else
{
$rc = -12;
$meldung = "Der ausführende Benutzer >".$exekutor."< besitzt nicht das notwendige Recht, um Benutzer anlegen zu dürfen.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
mysqli_close( $connection );
xlog( $level, "admin.benutzer_anlegen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function benutzer_loeschen( $mandant_name, $benutzer_anmeldename, $force = false )
{
if ( ( $force !== true ) && ( $force !== false ) )
{
$force = false;
}
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $ok_2[ 0 ] > 0 )
{
// Benutzer und Mandant existieren .... das ist gut so!
if ( mb_strtoupper( $exekutor, "UTF-8" ) == "SUPERUSER" )
{
$exec[ 0 ] = 1;
}
else
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMIN_BENUTZER" );
}
if ( $exec[ 0 ] == 1 )
{
if ( ( $benutzer_anmeldename <> "ca_admin" ) || ( $force === true ) )
{
$erg = in_welchen_gruppen_ist_benutzer_mitglied( $mandant_name, $benutzer_anmeldename );
if ( $erg[ 0 ] > 0 )
{
foreach( $erg[ 3 ] as $gruppe )
{
//xlog( 6, "benutzer aus Gruppe entfernen: ".$benutzer_anmeldename." ** ".$gruppe." ... ".$force );
benutzer_aus_gruppe_entfernen( $mandant_name, $benutzer_anmeldename, $gruppe, $force );
}
}
$STATEMENT = "delete from ca_benutzer_einstellungen where benutzer_id = ".$ok_2[ 0 ];
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_notiz where element_typ = 'b' and element_id = ".$ok_2[ 0 ];
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_benutzer where benutzer_id = ".$ok_2[ 0 ];
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_favoriten where benutzer_anmeldename = '".$benutzer_anmeldename."' and mandant_id = ".$ok_1[ 0 ];
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = 0;
$meldung = "Der Benutzer ".$benutzer_anmeldename." wurde im Mandanten ".$mandant_name." gelöscht.";
}
else
{
$rc = -1;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -2;
$meldung = "Der Systembenutzer >".$benutzer_anmeldename."< kann nicht gelöscht werden.";
}
}
else
{
$rc = -12;
$meldung = "Der Benutzer >".$exekutor."< verfügt nicht über ausreichende Berechtigungen.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.benutzer_loeschen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function existiert_benutzer( $mandant_name, $benutzer_anmeldename )
{
/****************
BESCHREIBUNG_____Liefert die Benutzer-ID anhand des Benutzernamens
RETURNS_____(string) Benutzer-ID
****************/
$ok = existiert_mandant( $mandant_name );
if ( $ok[ 0 ] > 0 )
{
if ( strlen( $benutzer_anmeldename ) > 0 )
{
// Feststellen der Benutzer-ID zum Anmeldenamen
$STATEMENT = "select benutzer_id from ca_benutzer where lower( benutzer_anmeldename ) = '".mb_strtolower( $benutzer_anmeldename, "UTF-8" )."' and mandant_id = ".$ok[ 0 ]." ;";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
if ( $ergebnis[ 0 ] <> 0 )
{
$rc = $ergebnis[ 1 ][ 0 ][ "benutzer_id" ];
$meldung = "Der Benutzer ".$benutzer_anmeldename." hat im Mandanten ".$mandant_name." die ID ".$rc.".";
}
else
{
$rc = 0;
$meldung = "Der Benutzer ".$benutzer_anmeldename." existiert im Mandanten ".$mandant_name." nicht.";
}
}
else
{
$rc = -3;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -2;
$meldung = "Es wurde kein Benutzer-Anmeldename angegeben.";
}
}
else
{
$rc = -1;
$meldung = "Der Mandant ".$mandant_name." existiert nicht.";
}
xlog( 6, "admin.existiert_benutzer: ".$meldung );
return array( $rc, $meldung );
}
function liefere_benutzerinformationen( $mandant_name, $benutzer_anmeldename )
{
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
if ( strlen( $benutzer_anmeldename ) > 0 )
{
$ok_2 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $ok_2[ 0 ] > 0 )
{
$STATEMENT = "select domaene, mandant_id , benutzer_id , benutzer_anmeldename , benutzer_vorname , benutzer_nachname , benutzer_passwort , benutzer_email_adresse , benutzer_geschlecht , benutzer_angelegt_am , benutzer_letzte_aenderung , benutzer_gesperrt , benutzer_passwort_letzte_aenderung , benutzer_passwort_fehlversuche , benutzer_geburtstag, benutzer_abwesend, benutzer_vertreter, benutzer_vertreter_typ FROM ca_benutzer where benutzer_id = ".$ok_2[ 0 ];
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$zeile = $ergebnis[ 1 ][ 0 ];
$benutzer_array = array( );
if ( $zeile[ "benutzer_abwesend" ] == "nein" )
{
$zeile[ "benutzer_vertreter" ] = "";
$zeile[ "benutzer_vertreter_typ" ] = "";
}
$benutzer_array[ "domaene" ] = (string) $zeile[ "domaene" ];
$benutzer_array[ "mandant_id" ] = (string) $zeile[ "mandant_id" ];
$benutzer_array[ "benutzer_id" ] = (int) $zeile[ "benutzer_id" ];
$benutzer_array[ "benutzer_anmeldename" ] = (string) $zeile[ "benutzer_anmeldename" ];
$benutzer_array[ "benutzer_vorname" ] = (string) $zeile[ "benutzer_vorname" ];
$benutzer_array[ "benutzer_nachname" ] = (string) $zeile[ "benutzer_nachname" ];
$benutzer_array[ "benutzer_name" ] = $benutzer_array[ "benutzer_vorname" ]." ".$benutzer_array[ "benutzer_nachname" ];
$benutzer_array[ "benutzer_name_komplett" ] = $benutzer_array[ "benutzer_vorname" ]." ".$benutzer_array[ "benutzer_nachname" ]." (".$benutzer_array[ "benutzer_anmeldename" ].")";
$benutzer_array[ "benutzer_gesperrt" ] = (string) $zeile[ "benutzer_gesperrt" ];
$benutzer_array[ "benutzer_email_adresse" ] = (string) $zeile[ "benutzer_email_adresse" ];
$benutzer_array[ "benutzer_geschlecht" ] = (string) $zeile[ "benutzer_geschlecht" ];
$benutzer_array[ "benutzer_angelegt_am" ] = (string) $zeile[ "benutzer_angelegt_am" ];
$benutzer_array[ "benutzer_passwort_letzte_aenderung" ] = (string) $zeile[ "benutzer_passwort_letzte_aenderung" ];
$benutzer_array[ "benutzer_letzte_aenderung" ] = (string) $zeile[ "benutzer_letzte_aenderung" ];
$benutzer_array[ "benutzer_passwort_fehlversuche" ] = (string) $zeile[ "benutzer_passwort_fehlversuche" ];
$benutzer_array[ "benutzer_abwesend" ] = (string) $zeile[ "benutzer_abwesend" ];
$benutzer_array[ "benutzer_vertreter" ] = (string) $zeile[ "benutzer_vertreter" ];
$benutzer_array[ "benutzer_vertreter_typ" ] = (string) $zeile[ "benutzer_vertreter_typ" ];
$benutzer_array[ "benutzer_geburtstag" ] = (string)mysql2datum( $zeile[ "benutzer_geburtstag" ] );
$rc = $benutzer_array[ "benutzer_id" ];
$meldung = "Liefere Informationen zum Benutzer ".$benutzer_array[ "benutzer_anmeldename" ].": ".json_encode( $benutzer_array );
}
else
{
$rc = -3;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -2;
$meldung = "Der angegebene Benutzer wurde nicht im System gefunden.";
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Benutzername angegeben.";
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.liefere_benutzerinformationen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $benutzer_array );
}
function liefere_alle_benutzer( $mandant_name )
{
$ok_1 = existiert_mandant( $mandant_name );
$benutzerliste = array();
if ( $ok_1[ 0 ] > 0 )
{
$STATEMENT = "select benutzer_anmeldename from ca_benutzer where mandant_id = ".$ok_1[ 0 ];
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = $ergebnis[ 0 ];
$benutzerliste = $ergebnis[ 1 ];
$meldung = "Liefere ".$rc." Benutzer des Mandants ".$mandant_name.".";
}
else
{
$rc = -1;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.liefere_alle_benutzer: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $benutzerliste );
}
function liefere_alle_benutzer_bavn( $mandant_name, $systembenutzer_liefern = true, $abwesende_benutzer_liefern = true )
{
// liefert nur benutzer-anmeldename, vorname und nachname und Abwesenheitsstatus
$ok_1 = existiert_mandant( $mandant_name );
$benutzerliste = array();
if ( $ok_1[ 0 ] > 0 )
{
if ( $systembenutzer_liefern == false )
{
$sysbenutzer = liefere_wertemenge_elemente( $mandant_name, "systembenutzer" );
$STMT_ERW = " and benutzer_anmeldename not in ( ";
foreach ( $sysbenutzer[ 2 ] as $systembenutzer )
{
$STMT_ERW = $STMT_ERW." '".$systembenutzer[ "alpha_01" ]."', ";
}
$STMT_ERW = substr( $STMT_ERW, 0, -2 )." )";
}
else
{
$STMT_ERW = "";
}
if ( $abwesende_benutzer_liefern == false )
{
$where = " and benutzer_abwesend = 'nein' ";
}
else
{
$where = " ";
}
$STATEMENT = "select benutzer_anmeldename, benutzer_vorname, benutzer_nachname, benutzer_abwesend from ca_benutzer where mandant_id = ".$ok_1[ 0 ]." ".$STMT_ERW.$where." order by benutzer_nachname, benutzer_vorname";
//xlog( 4, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = $ergebnis[ 0 ];
$benutzerliste = $ergebnis[ 1 ];
$meldung = "Liefere ".$rc." Benutzer des Mandants ".$mandant_name.".";
}
else
{
$rc = -1;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.liefere_alle_benutzer_bavn: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $benutzerliste );
}
function setze_password_fuer_benutzer( $mandant_name, $benutzer_anmeldename, $passwort, $setze_auf_jeden_fall = false )
{
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$darf_aktualisierung_stattfinden = false;
if ( $exekutor == $benutzer_anmeldename )
{
$darf_aktualisierung_stattfinden = true;
}
if ( mb_strtoupper( $exekutor, "UTF-8" ) == "SUPERUSER" )
{
$darf_aktualisierung_stattfinden = true;
}
if ( $darf_aktualisierung_stattfinden == false )
{
$darf_stattfinden = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMIN_BENUTZER" );
if ( $darf_stattfinden[ 0 ] == 1 )
{
$darf_aktualisierung_stattfinden = true;
}
}
if ( $darf_aktualisierung_stattfinden == true )
{
$erg = pruefe_password( $mandant_name, $passwort );
if ( ( $setze_auf_jeden_fall == true ) or ( $erg[ 0 ] == 0 ) )
{
//xlog( 4, "Passwort: >".$passwort."<" );
$STATEMENT = "update ca_benutzer set benutzer_passwort = '".mysqli_real_escape_string( $connection, md5( $passwort ) )."', benutzer_passwort_letzte_aenderung='".time()."' where benutzer_anmeldename = '".mysqli_real_escape_string( $connection, $benutzer_anmeldename )."' and mandant_id = ".$ok_1[ 0 ];
//xlog( 4, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
//xlog( 4, $ergebnis[ 0 ]." ".$ergebnis[ 1 ] );
if ( $ergebnis[ 0 ] == 0 )
{
$rc = 0;
$meldung = "Das Passwort des Benutzers >".$benutzer_anmeldename."< wurde geändert.";
}
else
{
$rc = -4;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = $erg[ 0 ];
$meldung = $erg[ 1 ];
}
}
else
{
$rc = -10;
$meldung = "Der ausführende Benutzer >".$exekutor."< besitzt nicht ausreichende Rechte, um das Passwort des Benutzers >".$benutzer_anmeldename."< zu ändern.";
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
mysqli_close( $connection );
xlog( $level, "admin.setze_password: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function benutzer_sperren( $mandant_name, $benutzer_anmeldename )
{
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $ok_2[ 0 ] > 0 )
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMIN_BENUTZER" );
if ( $exec[ 0 ] == 1 )
{
$ergebnis_1 = liefere_wertemenge_elemente( $mandant_name, "systembenutzer" );
$gefunden = false;
if ( count ( $ergebnis_1[ 2 ] ) > 0 )
{
foreach ( $ergebnis_1[ 2 ] as $zeile )
{
if ( $zeile[ "alpha_01" ] == $benutzer_anmeldename )
{
$gefunden = true;
}
}
}
if ( ! ( $gefunden ) )
{
$STATEMENT = "update ca_benutzer set benutzer_gesperrt = 1 where benutzer_id = ".$ok_2[ 0 ]." and mandant_id = ".$ok_1[ 0 ];
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = 0;
$meldung = "Der Benutzer ".$benutzer_anmeldename." wurde im Mandanten ".$mandant_name." gesperrt.";
}
else
{
$rc = -1;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -2;
$meldung = "Der Systembenutzer >".$benutzer_anmeldename."< kann nicht gesperrt werden.";
}
}
else
{
$rc = -12;
$meldung = "Der Benutzer >".$exekutor."< verfügt nicht über ausreichende Berechtigungen.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.benutzer_sperren: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function benutzer_entsperren( $mandant_name, $benutzer_anmeldename )
{
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $ok_2[ 0 ] > 0 )
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMIN_BENUTZER" );
if ( $exec[ 0 ] == 1 )
{
$ergebnis_1 = liefere_wertemenge_elemente( $mandant_name, "systembenutzer" );
$gefunden = false;
if ( count ( $ergebnis_1[ 2 ] ) > 0 )
{
foreach ( $ergebnis_1[ 2 ] as $zeile )
{
if ( $zeile[ "alpha_01" ] == $benutzer_anmeldename )
{
$gefunden = true;
}
}
}
if ( ! ( $gefunden ) )
{
$STATEMENT = "update ca_benutzer set benutzer_gesperrt = 0 where benutzer_id = ".$ok_2[ 0 ]." and mandant_id = ".$ok_1[ 0 ];
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = 0;
$meldung = "Der Benutzer ".$benutzer_anmeldename." wurde im Mandanten ".$mandant_name." entsperrt.";
}
else
{
$rc = -1;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -2;
$meldung = "Der Systembenutzer >".$benutzer_anmeldename."< sollte nicht entsperrt werden müssen.";
}
}
else
{
$rc = -12;
$meldung = "Der Benutzer >".$exekutor."< verfügt nicht über ausreichende Berechtigungen.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.benutzer_entsperren: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function benutzer_aendern( $mandant_name, $benutzer_anmeldename, $parameter )
{
/*
$parameter kann folgende Elementen haben:
benutzer_vorname
benutzer_nachname
benutzer_email_adresse
benutzer_geschlecht
benutzer_geburtstag
benutzer_abwesend
benutzer_vertreter
benutzer_vertreter_typ
*/
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $ok_2[ 0 ] > 0 )
{
$ergebnis_1 = liefere_wertemenge_elemente( $mandant_name, "systembenutzer" );
$gefunden = false;
if ( count ( $ergebnis_1[ 2 ] ) > 0 )
{
foreach ( $ergebnis_1[ 2 ] as $zeile )
{
if ( $zeile[ "alpha_01" ] == $benutzer_anmeldename )
{
$gefunden = true;
}
}
}
if ( ! ( $gefunden ) )
{
if ( !( ( $parameter[ "benutzer_abwesend" ] == "ja" ) && ( ( strlen( $parameter[ "benutzer_vertreter" ] ) == 0 ) || ( strlen( $parameter[ "benutzer_vertreter_typ" ] ) == 0 ) ) ) )
{
$meldung = "";
if ( ( $parameter[ "benutzer_abwesend" ] == "ja" ) && ( strlen( $parameter[ "benutzer_vertreter_typ" ] ) == "b" ) )
{
$b = liefere_benutzerinformmationen( $mandant_name, $parameter[ "benutzer_vertreter" ] );
if ( $b[ 2 ][ "benutzer_abwesend" ] == "ja" )
{
$rc = -15;
$meldung = "Der als Vertreter angegebene Benutzer ".$parameter[ "benutzer_vertreter" ]." ist abwesend und kann daher nicht als Vertreter angegeben werden.";
}
}
$vertretung_nur_gruppen = liefere_konfig( $_SESSION[ "mandant_name" ], "vertretung_nur_gruppen" );
if ( ( $vertretung_nur_gruppen == "ja" ) && ( $parameter[ "benutzer_vertreter_typ" ] == "b" ) )
{
$rc = -16;
$meldung = "Es sind nur Gruppen als Vertreter erlaubt.";
}
if ( strlen( $meldung ) == 0 )
{
if ( $parameter[ "benutzer_abwesend" ] == "nein" )
{
$parameter[ "benutzer_vertreter" ] = "";
$parameter[ "benutzer_vertreter_typ" ] = "";
}
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMIN_BENUTZER" );
if ( $exec[ 0 ] == 1 )
{
foreach( $parameter as $key=>$value )
{
if ( $key == "benutzer_geburtstag" )
{
$set = $set.$key." = '".datum2mysql( $value )."', ";
$liste = $liste.$key." => >".datum2mysql( $value )."< ";
}
else
{
$set = $set.$key." = '".$value."', ";
$liste = $liste.$key." => >".$value."< ";
}
}
//$set = substr( $set, 0, -2 );
$STATEMENT = "update ca_benutzer set ".$set." benutzer_letzte_aenderung = '".time()."' where benutzer_id = ".$ok_2[ 0 ]." and mandant_id = ".$ok_1[ 0 ];
//xlog( 4, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
if ( $parameter[ "benutzer_abwesend" ] == "ja" )
{
$STATEMENT = "update ca_postkorb set empfaenger = '".$parameter[ "benutzer_vertreter" ]."', empfaenger_typ = '".$parameter[ "benutzer_vertreter_typ" ]."', ursprung = '".$benutzer_anmeldename."' where empfaenger = '".$benutzer_anmeldename."' and mandant_id = ".$ok_1[ 0 ];
//xlog( 5, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
}
if ( $parameter[ "benutzer_abwesend" ] == "nein" )
{
$STATEMENT = "update ca_postkorb set empfaenger = '".$benutzer_anmeldename."', empfaenger_typ = 'b', ursprung = '' where ursprung = '".$benutzer_anmeldename."' and mandant_id = ".$ok_1[ 0 ];
//xlog( 5, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
}
$rc = 0;
$meldung = "Der Benutzer ".$benutzer_anmeldename." wurde im Mandanten ".$mandant_name." geändert.";// (".substr( $liste, 0, -1 ).").";
}
else
{
$rc = -1;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -12;
$meldung = "Der Benutzer >".$exekutor."< verfügt nicht über ausreichende Berechtigungen.";
}
}
}
else
{
$rc = -13;
$meldung = "Der Benutzer ".$benutzer_anmeldename." sollte abwesend gemeldet werden, es wurde aber kein Vertreter angegeben.";
}
}
else
{
$rc = -14;
$meldung = "Der Systembenutzer ".$benutzer_anmeldename." kann nicht geändert werden.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.benutzer_aendern: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function benutzer_password_fehlversuche_zuruecksetzen( $mandant_name, $benutzer_anmeldename )
{
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $ok_2[ 0 ] > 0 )
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMIN_BENUTZER" );
if ( $exec[ 0 ] == 1 )
{
$STATEMENT = "update ca_benutzer set benutzer_passwort_fehlversuche = 0, benutzer_letzte_aenderung = '".time()."' where benutzer_id = ".$ok_2[ 0 ]." and mandant_id = ".$ok_1[ 0 ];
//xlog( 4, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = 0;
$meldung = "Der Passwort-Fehleingabenzähler für den Benutzer ".$benutzer_anmeldename." im Mandanten ".$mandant_name." wurde auf 0 gesetzt.";
}
else
{
$rc = -1;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -12;
$meldung = "Der Benutzer >".$exekutor."< verfügt nicht über ausreichende Berechtigungen.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.benutzer_password_fehlversuche_zuruecksetzen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function suche_benutzer( $mandant_name, $suchstring )
{
$ok_1 = existiert_mandant( $mandant_name );
$benutzerliste = array();
if ( $ok_1[ 0 ] > 0 )
{
$STATEMENT = "select benutzer_anmeldename, benutzer_vorname, benutzer_nachname, domaene, benutzer_id, benutzer_email_adresse, benutzer_geschlecht, benutzer_angelegt_am, benutzer_letzte_aenderung, benutzer_gesperrt, benutzer_passwort_letzte_aenderung, benutzer_passwort_fehlversuche, benutzer_geburtstag from ca_benutzer where mandant_id = ".$ok_1[ 0 ]." and ( ( benutzer_anmeldename like '%".$suchstring."%' ) or ( benutzer_vorname like '%".$suchstring."%' ) or ( benutzer_nachname like '%".$suchstring."%' ) ) order by benutzer_nachname, benutzer_vorname";
//xlog( 4, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = $ergebnis[ 0 ];
$benutzerliste = $ergebnis[ 1 ];
$meldung = "Liefere ".$rc." Benutzer des Mandants ".$mandant_name.".";
}
else
{
$rc = -1;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.suche_benutzer: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $benutzerliste );
}
function setze_benutzer_abwesend( $mandant_name, $benutzer_anmeldename, $parameter )
{
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok = existiert_mandant( $mandant_name );
if ( $ok[ 0 ] > 0 )
{
if ( ( strlen( $benutzer_anmeldename ) > 0 ) && ( $benutzer_anmeldename == $exekutor ) && ( strlen( $parameter[ "vertreter" ] ) > 0 ) && ( strlen( $parameter[ "vertreter_typ" ] ) > 0 ) )
{
$o = welche_benutzer_vertritt_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $o[ 0 ] == 0 )
{
$b = liefere_benutzerinformationen( $mandant_name, $benutzer_anmeldename );
if ( $b[ 2 ][ "benutzer_abwesend" ] == "nein" )
{
if ( $parameter[ "vertreter_typ" ] == "b" )
{
$v = liefere_benutzerinformationen( $mandant_name, $parameter[ "vertreter" ] );
if ( $v[ 2 ][ "benutzer_abwesend" ] != "nein" )
{
$rc = -4;
$meldung = "Der als Vertreter gewählte Benutzer ".$parameter[ "vertreter" ]." ist selber abwesend.";
}
}
else
{
// Es wurde eine Gruppe als Vertreter gewählt
$v = liefere_gruppeninformationen( $mandant_name, $parameter[ "vertreter" ] );
if ( $v[ 0 ] < 0 )
{
$rc = -3;
$meldung = "Es gibt ein Problem mit der angegebenen Gruppe: ".$v[ 1 ];
}
}
if ( strlen( $meldung ) == 0 )
{
$STATEMENT = "update ca_benutzer set benutzer_abwesend = 'ja', benutzer_vertreter = '".$parameter[ "vertreter" ]."', benutzer_vertreter_typ = '".$parameter[ "vertreter_typ" ]."' where benutzer_anmeldename = '".$benutzer_anmeldename."' and mandant_id = ".$ok[ 0 ];
xlog( 6, "admin.setze_benutzer_abwesend: ".$STATEMENT );
xdb( $STATEMENT );
$STATEMENT = "update ca_postkorb set empfaenger = '".$parameter[ "vertreter" ]."', empfaenger_typ = '".$parameter[ "vertreter_typ" ]."', ursprung = '".$benutzer_anmeldename."' where empfaenger = '".$benutzer_anmeldename."' and mandant_id = ".$ok[ 0 ];
xlog( 6, "admin.setze_benutzer_abwesend: ".$STATEMENT );
$ergebnis = xdb( $STATEMENT );
$rc = 1;
$meldung = "Der Benutzer ".$benutzer_anmeldename." hat sich abwesend gemeldet.";
}
}
else
{
$rc = 2;
$meldung = "Der Benutzer ".$benutzer_anmeldename." ist bereits abwesend gemeldet.";
}
}
else
{
$rc = -17;
$meldung = "Der Benutzer ".$benutzer_anmeldename." ist Vertreter für andere Benutzer und kann daher nicht abwesend gemeldet werden.";
}
}
else
{
$rc = -12;
$meldung = "Falsche Parametrisierung: mandant_name|benutzer_anmeldename|Session Benutzer|parameter vertreter, vertreter_typ: ".$mandant_name."|".$benutzer_anmeldename."|".$_SESSION[ "benutzer_anmeldename" ]."|".$parameter[ "vertreter" ]."|".$parameter[ "vertreter_typ" ];
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.setze_benutzer_abwesend: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function setze_benutzer_anwesend( $mandant_name, $benutzer_anmeldename )
{
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok = existiert_mandant( $mandant_name );
if ( $ok[ 0 ] > 0 )
{
if ( ( strlen( $benutzer_anmeldename ) > 0 ) && ( $benutzer_anmeldename == $exekutor ) )
{
$b = liefere_benutzerinformationen( $mandant_name, $benutzer_anmeldename );
if ( $b[ 2 ][ "benutzer_abwesend" ] == "ja" )
{
if ( strlen( $meldung ) == 0 )
{
$STATEMENT = "update ca_benutzer set benutzer_abwesend = 'nein', benutzer_vertreter = '', benutzer_vertreter_typ = '' where benutzer_anmeldename = '".$benutzer_anmeldename."' and mandant_id = ".$ok[ 0 ];
xdb( $STATEMENT );
$STATEMENT = "update ca_postkorb set empfaenger = '".$benutzer_anmeldename."', empfaenger_typ = 'b', ursprung = '' where ursprung = '".$benutzer_anmeldename."' and mandant_id = ".$ok[ 0 ];
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$rc = 1;
$meldung = "Der Benutzer ".$benutzer_anmeldename." hat sich anwesend gemeldet.";
}
}
else
{
$rc = 2;
$meldung = "Der Benutzer ".$benutzer_anmeldename." ist bereits anwesend gemeldet.";
}
}
else
{
$rc = -12;
$meldung = "Falsche Parametrisierung: mandant_name|benutzer_anmeldename|Session Benutzer|parameter vertreter, vertreter_typ: ".$mandant_name."|".$benutzer_anmeldename."|".$_SESSION[ "benutzer_anmeldename" ]."|".$parameter[ "vertreter" ]."|".$parameter[ "vertreter_typ" ];
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.setze_benutzer_anwesend: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function welche_benutzer_vertritt_benutzer( $mandant_name, $benutzer_anmeldename )
{
$ok = existiert_mandant( $mandant_name );
if ( $ok[ 0 ] > 0 )
{
if ( strlen( $benutzer_anmeldename ) > 0 )
{
$e = array();
$STATEMENT = "select distinct b.benutzer_vorname, b.benutzer_anmeldename, b.benutzer_nachname from ca_benutzer b where b.benutzer_vertreter = '".$benutzer_anmeldename."' and b.benutzer_vertreter_typ = 'b' and b.mandant_id = ".$ok[ 0 ]." ";
//xlog( 4, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] > 0 )
{
$e = $ergebnis[ 1 ];
$rc = count( $e );
$meldung = "Liefere ".$rc." Benutzer, die von ".$benutzer_anmeldename." vertreten werden.";
}
else
{
$rc = 0;
$meldung = "Der Benutzer ".$benutzer_anmeldename." vertritt aktuell niemanden.";
}
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.welche_benutzer_vertritt_benutzer: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $e );
}
/*
Gruppenfunktionen
*/
function existiert_gruppe( $mandant_name, $gruppen_name )
{
/****************
BESCHREIBUNG_____Liefert eine Gruppen-ID anhand des Gruppennamens
RETURNS_____(string) Gruppen-ID
****************/
$ok = existiert_mandant( $mandant_name );
// Feststellen der Gruppen-ID zum Gruppennamen
$STATEMENT = "select gruppen_id from ca_gruppe where gruppen_name = '".$gruppen_name."' and mandant_id = ".$ok[ 0 ]." ;";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
if ( $ergebnis[ 0 ] > 0 )
{
$rc = $ergebnis[ 1 ][ 0 ][ "gruppen_id" ];
$meldung = "Die Gruppe ".$gruppen_name." hat im Mandanten ".$mandant_name." die ID ".$rc.".";
}
else
{
$rc = -1;
$meldung = "Die Gruppe ".$gruppen_name." existiert im Mandanten ".$mandant_name." nicht.";
}
}
else
{
$rc = -1;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.existiert_gruppe: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function gruppe_anlegen( $mandant_name, $gruppen_name, $gruppen_email_adresse, $gruppen_fremd_id )
{
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
if ( strlen( $gruppen_name ) <> 0 )
{
if ( mb_strtoupper( $exekutor, "UTF-8" ) == "SUPERUSER" )
{
$exec[ 0 ] = 1;
}
else
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMIN_GRUPPE" );
}
if ( $exec[ 0 ] == 1 )
{
$wert_1 = "'".mysqli_real_escape_string( $connection, $gruppen_email_adresse )."'";
$wert_2 = "'".mysqli_real_escape_string( $connection, $gruppen_fremd_id )."'";
$gruppen_id = existiert_gruppe( $mandant_name, $gruppen_name );
$regex = preg_match( "/[\!\"\§\$\%\&\\\,\?\:\;\/\(\)\=\*\#\'\{\}\[\]\~]/", $gruppen_name );
if ( $regex == 0 )
{
if ( $gruppen_id[ 0 ] < 0 )
{
// Erstellen der Gruppe
$STATEMENT = "insert into ca_gruppe ( mandant_id, gruppe_angelegt_am, gruppe_letzte_aenderung, gruppen_name, gruppen_email_adresse, gruppen_fremd_id ) values ( ".$ok_1[ 0 ].", '".time()."', '".time()."', '".mysqli_real_escape_string( $connection, $gruppen_name )."', ".$wert_1.", ".$wert_2." );";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = $ergebnis[ 0 ];
$meldung = "Die Gruppe ".$gruppen_name." wurde angelegt (ID ".$rc.").";
}
else
{
$rc = -4;
$meldung = "Es ist ein DB-Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -3;
$meldung = "Die Gruppe ".$gruppen_name." existiert bereits (ID ".$gruppen_id[ 0 ].").";
}
}
else
{
$rc = -2;
$meldung = "Beim gewünschten Gruppennamen wurde ein nicht erlaubtes Sonderzeichen verwendet.";
}
}
else
{
$rc = -12;
$meldung = "Der Benutzer >".$exekutor."< verfügt nicht über ausreichende Berechtigungen.";
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Gruppenname angegeben.";
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
mysqli_close( $connection );
xlog( $level, "admin.erstelle_gruppe: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function gruppe_loeschen( $mandant_name, $gruppen_name, $force = false )
{
if ( ( $force !== true ) && ( $force !== false ) )
{
$force = false;
}
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$gruppen_id = existiert_gruppe( $mandant_name, $gruppen_name );
if ( $gruppen_id[ 0 ] > 0 )
{
if ( mb_strtoupper( $exekutor, "UTF-8" ) == "SUPERUSER" )
{
$exec[ 0 ] = 1;
}
else
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMIN_GRUPPE" );
}
if ( ( $exec[ 0 ] == 1 ) && ( ( $gruppen_name != "Administratoren" ) || ( $force === true ) ) )
{
$ergebnis = in_welchen_gruppen_ist_gruppe_mitglied( $mandant_name, $gruppen_name );
if ( $ergebnis[ 0 ] > 0 )
{
foreach ( $ergebnis[ 2 ] as $gruppe )
{
gruppe_aus_einer_gruppe_entfernen( $mandant_name, $gruppe, $gruppen_name, $force );
}
}
$ergebnis = liefere_benutzer_die_in_gruppe_sind( $mandant_name, $gruppen_name );
if ( $ergebnis[ 0 ] > 0 )
{
foreach ( $ergebnis[ 2 ] as $benutzer_anmeldename )
{
benutzer_aus_gruppe_entfernen( $mandant_name, $benutzer_anmeldename, $gruppen_name, $force );
}
}
$ergebnis = welche_systemrechte_besitzt_gruppe( $mandant_name, $gruppen_name );
if ( $ergebnis[ 0 ] > 0 )
{
foreach ( $ergebnis[ 3 ] as $systemrecht )
{
gruppe_systemrecht_entziehen( $mandant_name, $gruppen_name, $systemrecht, $force );
}
}
$STATEMENT = "delete from ca_gruppe where gruppen_id = ".$gruppen_id[ 0 ]; //( mandant_id, gruppen_name".$feld_1.$feld_2." ) values ( ".$ok_1[ 0 ].", '".$gruppen_name."' ".$wert_1.$wert_2." );";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = 0;
$meldung = "Die Gruppe ".$gruppen_name." wurde im Mandanten ".$mandant_name." gelöscht.";
}
else
{
$rc = -4;
$meldung = "Es ist ein DB-Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -12;
$meldung = "Der Benutzer >".$exekutor."< verfügt nicht über ausreichende Berechtigungen.";
}
}
else
{
$rc = -3;
$meldung = "Die Gruppe ".$gruppen_name." existiert nicht im Mandanten >".$mandant_name."<.";
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.gruppe_loeschen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function gruppe_aendern( $mandant_name, $gruppen_name, $parameter )
{
/*
$parameter kann folgende Elementen haben:
gruppen_fremd_id
gruppen_email_adresse
gruppen_name
*/
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_gruppe( $mandant_name, $gruppen_name );
if ( $ok_2[ 0 ] > 0 )
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMIN_GRUPPE" );
if ( $exec[ 0 ] == 1 )
{
foreach( $parameter as $key=>$value )
{
$set = $set.$key." = '".mysqli_real_escape_string( $connection, $value )."', ";
$liste = $liste.$key." => >".$value."< ";
}
$STATEMENT = "update ca_gruppe set ".$set." gruppe_letzte_aenderung = '".time()."' where gruppen_id = ".$ok_2[ 0 ]." and mandant_id = ".$ok_1[ 0 ];
xlog( 4, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = 0;
$meldung = "Die Gruppe ".$gruppen_name." wurde im Mandanten ".$mandant_name." geändert.";// (".substr( $liste, 0, -1 ).").";
}
else
{
$rc = -1;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -12;
$meldung = "Der Benutzer >".$exekutor."< verfügt nicht über ausreichende Berechtigungen.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
mysqli_close( $connection );
xlog( $level, "admin.gruppe_aendern: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function liefere_gruppeninformationen( $mandant_name, $gruppen_name )
{
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$gruppen_id = existiert_gruppe( $mandant_name, $gruppen_name );
if ( $gruppen_id[ 0 ] > 0 )
{
$STATEMENT = "select mandant_id, gruppen_name, gruppen_email_adresse, gruppen_fremd_id, gruppen_id, gruppe_angelegt_am, gruppe_letzte_aenderung from ca_gruppe where gruppen_id = ".$gruppen_id[ 0 ];
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$gruppe_array = array( );
$gruppe_array[ "mandant_id" ] = (string) $ergebnis[ 1 ][ 0 ][ "mandant_id" ];
$gruppe_array[ "gruppen_name" ] = (string) $ergebnis[ 1 ][ 0 ][ "gruppen_name" ];
$gruppe_array[ "gruppen_email_adresse" ] = (string) $ergebnis[ 1 ][ 0 ][ "gruppen_email_adresse" ];
$gruppe_array[ "gruppen_fremd_id" ] = (string) $ergebnis[ 1 ][ 0 ][ "gruppen_fremd_id" ];
$gruppe_array[ "gruppen_id" ] = (string) $ergebnis[ 1 ][ 0 ][ "gruppen_id" ];
$gruppe_array[ "gruppe_angelegt_am" ] = (string) $ergebnis[ 1 ][ 0 ][ "gruppe_angelegt_am" ];
$gruppe_array[ "gruppe_letzte_aenderung" ] = (string) $ergebnis[ 1 ][ 0 ][ "gruppe_letzte_aenderung" ];
$rc = $gruppe_array[ "gruppen_id" ];
$meldung = "Liefere Informationen zur Gruppe ".$gruppen_name.".";
}
else
{
$rc = -4;
$meldung = "Es ist ein DB-Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -2;
$meldung = "Die Gruppe ".$gruppen_name." existiert nicht im Mandanten ".$mandant_name.".";
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.liefere_gruppeninformationen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $gruppe_array );
}
function liefere_alle_gruppen( $mandant_name, $liefere_systemgruppen = true )
{
$ok_1 = existiert_mandant( $mandant_name );
$gruppenliste = array();
if ( $ok_1[ 0 ] > 0 )
{
if ( $liefere_systemgruppen == false )
{
$sysgruppen = liefere_wertemenge_elemente( $mandant_name, "systemgruppen" );
$STMT_ERW = " and gruppen_name not in ( ";
foreach ( $sysgruppen[ 2 ] as $systemgruppen )
{
$STMT_ERW = $STMT_ERW." '".$systemgruppen[ "alpha_01" ]."', ";
}
$STMT_ERW = substr( $STMT_ERW, 0, -2 )." )";
}
else
{
$STMT_ERW = "";
}
$STATEMENT = "select gruppen_name from ca_gruppe where mandant_id = ".$ok_1[ 0 ].$STMT_ERW;
//xlog( 4, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] > 0 )
{
foreach( $ergebnis[ 1 ] as $gruppen )
{
$gruppenliste[ ] = (string)$gruppen[ "gruppen_name" ];
}
}
else
{
$gruppenliste = array();
}
$rc = count( $gruppenliste );
$meldung = "Liefere ".$rc." Gruppen des Mandants ".$mandant_name.".";
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.liefere_alle_gruppen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $gruppenliste );
}
/*
Mandanten-Funktionen
*/
function existiert_mandant( $mandant_name )
{
if ( strlen( $mandant_name ) > 0 )
{
$STATEMENT = "select mandant_id from ca_mandant where lower( mandant_name ) = '".mb_strtolower( $mandant_name, "utf-8" )."'";
$ergebnis = xdb( $STATEMENT );
/*
xlog( 4, json_encode( $ergebnis ));
xlog( 4, json_encode( $ergebnis[1] ));
xlog( 4, json_encode( $ergebnis[1][0] ));
xlog( 4, json_encode( $ergebnis[1][0][ "mandant_id" ] ));
*/
if ( $ergebnis[ 0 ] <> -1 )
{
if ( $ergebnis[ 0 ] > 0 )
{
$rc = $ergebnis[ 1 ][ 0 ][ "mandant_id" ];
$meldung = "Der Mandant >".$mandant_name."< existiert im System (ID ".$rc.").";
}
else
{
$rc = 0;
$meldung = "Der Mandant >".$mandant_name."< existiert nicht im System.";
}
}
else
{
$rc = -2;
$meldung = "Es ist ein DB-Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Mandant angegeben.";
}
if ( $rc <= 0 )
{
$level = 3;
}
else
{
$level = 6;
}
xlog( $level, "admin.existiert_mandant: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function mandant_anlegen( $mandant_name )
{
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
if ( strlen( $mandant_name ) > 0 )
{
$existiert_mandant = existiert_mandant( $mandant_name );
if ( $existiert_mandant[ 0 ] <= 0 )
{
// Der Mandant wurde nicht gefunden
$STATEMENT = "insert into ca_mandant ( mandant_name, mandant_erstellt_am, mandant_lizenz ) values ( '".mysqli_real_escape_string( $connection, $mandant_name )."', '".time()."', '".mysqli_real_escape_string( $connection, $lizenz )."' ) ";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
if ( $ergebnis[ 0 ] > 0 )
{
$rc = $ergebnis[ 0 ];
if ( $benutzer_gruppen_anlegen !== true )
{
$benutzer_gruppen_anlegen = false;
}
if ( $dokumentarten_anlegen !== true )
{
$dokumentarten_anlegen = false;
}
/////////////////////////////////////////////////////////////////
// zuerst muss noch die Grundkonfiguration angelegt werden
$element_anzulegen = liefere_wertemenge_elemente( "Standard", "init_konfig" );
if ( $element_anzulegen[ 0 ] > 0 )
{
foreach( $element_anzulegen[ 2 ] as $element )
{
// erstelle_konfig( $mandant_name, $parameter, $kategorie, $wert = "", $wertemenge = "", $beschreibung = "" )
$ok = erstelle_konfig( $mandant_name, $element[ "alpha_01" ], $element[ "alpha_04" ], $element[ "alpha_02" ], $element[ "alpha_03" ], $element[ "text_01" ] );
set_time_limit( 30 );
}
}
/////////////////////////////////////////////////////////////////
// jetzt werden die Systemrechte erzeugt
$element_anzulegen = liefere_wertemenge_elemente( "Standard", "init_systemrechte" );
if ( $element_anzulegen[ 0 ] > 0 )
{
foreach( $element_anzulegen[ 2 ] as $element )
{
// erstelle_konfig( $mandant_name, $parameter, $kategorie, $wert = "", $wertemenge = "", $beschreibung = "" )
$ok = systemrecht_anlegen( $mandant_name, $element[ "alpha_02" ], $element[ "num_01" ], $element[ "alpha_01" ] );
set_time_limit( 30 );
}
}
/////////////////////////////////////////////////////////////////
// initale Wertemengen erzeugen
$element_anzulegen = liefere_wertemenge_elemente( "Standard", "init_wertemenge" );
if ( $element_anzulegen[ 0 ] > 0 )
{
foreach( $element_anzulegen[ 2 ] as $element )
{
// Erst Wertemenge liefern lassen und im neuen Mandanten anlegen
$wertemenge = liefere_wertemenge( "Standard", $element[ "alpha_01" ] );
if ( $wertemenge[ 2 ][ "typ" ] == "static" )
{
$w_elemente = liefere_wertemenge_elemente( "Standard", $element[ "alpha_01" ] );
}
else
{
$w_elemente = array( 0, 1, array() );
}
$ok = wertemenge_anlegen( $mandant_name, $wertemenge[ 2 ][ "kuerzel" ], $wertemenge[ 2 ][ "typ" ], $wertemenge[ 2 ][ "konfig" ], $wertemenge[ 2 ][ "bezeichnung" ], $wertemenge[ 2 ][ "kategorie" ], $wertemenge[ 2 ][ "beschreibung" ], array( "bezeichnung_alpha_01"=>$wertemenge[ 2 ][ "bezeichnung_alpha_01" ], "bezeichnung_alpha_02"=>$wertemenge[ 2 ][ "bezeichnung_alpha_02" ], "bezeichnung_alpha_03"=>$wertemenge[ 2 ][ "bezeichnung_alpha_03" ], "bezeichnung_alpha_04"=>$wertemenge[ 2 ][ "bezeichnung_alpha_04" ], "bezeichnung_alpha_05"=>$wertemenge[ 2 ][ "bezeichnung_alpha_05" ], "bezeichnung_alpha_06"=>$wertemenge[ 2 ][ "bezeichnung_alpha_06" ], "bezeichnung_alpha_07"=>$wertemenge[ 2 ][ "bezeichnung_alpha_07" ], "bezeichnung_alpha_08"=>$wertemenge[ 2 ][ "bezeichnung_alpha_08" ], "bezeichnung_alpha_09"=>$wertemenge[ 2 ][ "bezeichnung_alpha_09" ], "bezeichnung_alpha_10"=>$wertemenge[ 2 ][ "bezeichnung_alpha_10" ], "bezeichnung_alpha_11"=>$wertemenge[ 2 ][ "bezeichnung_alpha_11" ], "bezeichnung_alpha_12"=>$wertemenge[ 2 ][ "bezeichnung_alpha_12" ], "bezeichnung_alpha_13"=>$wertemenge[ 2 ][ "bezeichnung_alpha_13" ], "bezeichnung_alpha_14"=>$wertemenge[ 2 ][ "bezeichnung_alpha_14" ], "bezeichnung_alpha_15"=>$wertemenge[ 2 ][ "bezeichnung_alpha_15" ], "bezeichnung_alpha_16"=>$wertemenge[ 2 ][ "bezeichnung_alpha_16" ], "bezeichnung_alpha_17"=>$wertemenge[ 2 ][ "bezeichnung_alpha_17" ], "bezeichnung_alpha_18"=>$wertemenge[ 2 ][ "bezeichnung_alpha_18" ], "bezeichnung_alpha_19"=>$wertemenge[ 2 ][ "bezeichnung_alpha_19" ], "bezeichnung_alpha_20"=>$wertemenge[ 2 ][ "bezeichnung_alpha_20" ], "bezeichnung_alpha_21"=>$wertemenge[ 2 ][ "bezeichnung_alpha_21" ], "bezeichnung_alpha_22"=>$wertemenge[ 2 ][ "bezeichnung_alpha_22" ], "bezeichnung_alpha_23"=>$wertemenge[ 2 ][ "bezeichnung_alpha_23" ], "bezeichnung_alpha_24"=>$wertemenge[ 2 ][ "bezeichnung_alpha_24" ], "bezeichnung_alpha_25"=>$wertemenge[ 2 ][ "bezeichnung_alpha_25" ], "bezeichnung_alpha_26"=>$wertemenge[ 2 ][ "bezeichnung_alpha_26" ], "bezeichnung_alpha_27"=>$wertemenge[ 2 ][ "bezeichnung_alpha_27" ], "bezeichnung_alpha_28"=>$wertemenge[ 2 ][ "bezeichnung_alpha_28" ], "bezeichnung_alpha_29"=>$wertemenge[ 2 ][ "bezeichnung_alpha_29" ], "bezeichnung_alpha_30"=>$wertemenge[ 2 ][ "bezeichnung_alpha_30" ], "bezeichnung_num_01"=>$wertemenge[ 2 ][ "bezeichnung_num_01" ], "bezeichnung_num_02"=>$wertemenge[ 2 ][ "bezeichnung_num_02" ], "bezeichnung_num_03"=>$wertemenge[ 2 ][ "bezeichnung_num_03" ], "bezeichnung_datum_01"=>$wertemenge[ 2 ][ "bezeichnung_datum_01" ], "bezeichnung_datum_02"=>$wertemenge[ 2 ][ "bezeichnung_datum_02" ], "bezeichnung_datum_03"=>$wertemenge[ 2 ][ "bezeichnung_datum_03" ], "bezeichnung_geld_01"=>$wertemenge[ 2 ][ "bezeichnung_geld_01" ], "bezeichnung_geld_02"=>$wertemenge[ 2 ][ "bezeichnung_geld_02" ], "bezeichnung_geld_03"=>$wertemenge[ 2 ][ "bezeichnung_geld_03" ], "bezeichnung_text_01"=>$wertemenge[ 2 ][ "bezeichnung_text_01" ] ), $w_elemente[ 2 ] );
set_time_limit( 30 );
}
}
/////////////////////////////////////////////////////////////////
// Anlegen der Systembenutzer und -Gruppen
$ok = benutzer_anlegen( $mandant_name, "ca_admin", "ca_admin", "Systembenutzer", "Administrator", "info@calbers.de", "m", "01.01.2011", false );
$ok = benutzer_anlegen( $mandant_name, "ca_system", "ca_system", "Systembenutzer", "System", "info@calbers.de", "m", "01.01.2011", false );
$ok = gruppe_anlegen( $mandant_name, "Administratoren", "", "" );
$ok = gruppe_systemrecht_zuweisen( $mandant_name, "Administratoren", "ADMINISTRATOR" );
$ok = benutzer_einer_gruppe_hinzufuegen( $mandant_name, "ca_admin", "Administratoren" );
$ok = benutzer_einer_gruppe_hinzufuegen( $mandant_name, "ca_system", "Administratoren" );
/*
$ok = attribut_anlegen( $mandant_name, "[Benutzer-Anmeldename]", "alpha_01", "", "" );
$ok = attribut_anlegen( $mandant_name, "[Zweck]", "alpha_02", "", "" );
$ok = depot_anlegen( $mandant_name, "UN", "D", "", 0, false, "offen", "" );
$ok = dokart_anlegen( $mandant_name, "[USERNOTE]", "Benutzerinformationen", "System-Dokumentart für Informationen von Benutzern", "d", "UN", array( array( "attrib_name"=>"[Benutzer-Anmeldename]", "pflichtfeld"=>false ), array( "attrib_name"=>"[Zweck]", "pflichtfeld"=>false ) ) );
*/
/////////////////////////////////////////////////////////////////
// Anlegen der Benutzer
$element_anzulegen = liefere_wertemenge_elemente( "Standard", "init_benutzer" );
if ( $element_anzulegen[ 0 ] > 0 )
{
foreach( $element_anzulegen[ 2 ] as $element )
{
// benutzer_anlegen( $mandant_name, $benutzer_anmeldename, $passwort, $vorname = "", $nachname = "", $email="", $geschlecht = "", $geburtstag = "", $passwort_pruefen = true )
$ok = benutzer_anlegen( $mandant_name, $element[ "alpha_01" ], $element[ "alpha_01" ], $element[ "alpha_02" ], $element[ "alpha_03" ], $element[ "alpha_04" ], $element[ "alpha_05" ], $element[ "datum_01" ], false );
set_time_limit( 30 );
}
}
/////////////////////////////////////////////////////////////////
// initale Gruppen anlegen
$element_anzulegen = liefere_wertemenge_elemente( "Standard", "init_gruppen" );
if ( $element_anzulegen[ 0 ] > 0 )
{
foreach( $element_anzulegen[ 2 ] as $element )
{
// gruppe_anlegen( $mandant_name, $gruppen_name, $gruppen_email_adresse, $gruppen_fremd_id )
$ok = gruppe_anlegen( $mandant_name, $element[ "alpha_01" ], $element[ "alpha_02" ], $element[ "alpha_03" ] );
set_time_limit( 30 );
}
}
/////////////////////////////////////////////////////////////////
// initale Gruppen/Benutzerzuordnungen eintragen
$element_anzulegen = liefere_wertemenge_elemente( "Standard", "init_benutzer_gruppe" );
if ( $element_anzulegen[ 0 ] > 0 )
{
foreach( $element_anzulegen[ 2 ] as $element )
{
// benutzer_einer_gruppe_hinzufuegen( $mandant_name, $benutzer_anmeldename, $gruppen_name )
//xlog( 4, "Benutzername ".$element[ "alpha_01" ]." gruppenname ".$element[ "alpha_02" ] ) ;
$ok = benutzer_einer_gruppe_hinzufuegen( $mandant_name, $element[ "alpha_01" ], $element[ "alpha_02" ] );
set_time_limit( 30 );
}
}
/////////////////////////////////////////////////////////////////
// initale Gruppen/Gruppenzuordnungen eintragen
$element_anzulegen = liefere_wertemenge_elemente( "Standard", "init_gruppe_gruppen" );
if ( $element_anzulegen[ 0 ] > 0 )
{
foreach( $element_anzulegen[ 2 ] as $element )
{
// gruppe_einer_gruppe_hinzufuegen( $mandant_name, $ober_gruppe, $unter_gruppe )
$ok = gruppe_einer_gruppe_hinzufuegen( $mandant_name, $element[ "alpha_01" ], $element[ "alpha_02" ] );
set_time_limit( 30 );
}
}
// initale Attribute anlegen
$element_anzulegen = liefere_wertemenge_elemente( "Standard", "init_attrib" );
if ( $element_anzulegen[ 0 ] > 0 )
{
foreach( $element_anzulegen[ 2 ] as $element )
{
// attribut_anlegen( $mandant_name, $attrib_name, $attrib_db_spalte, $attrib_wertemenge, $attrib_beschreibung )
$ok = attribut_anlegen( $mandant_name, $element[ "alpha_01" ], $element[ "alpha_02" ], $element[ "alpha_03" ], $element[ "alpha_04" ] );
set_time_limit( 30 );
}
}
// initale Depots anlegen
$element_anzulegen = liefere_wertemenge_elemente( "Standard", "init_depot" );
if ( $element_anzulegen[ 0 ] > 0 )
{
foreach( $element_anzulegen[ 2 ] as $element )
{
// depot_anlegen( $mandant_name, $kuerzel, $typ, $ort, $schranke = 0, $scramble = false, $status="offen", $beschreibung = "" )
$ok = depot_anlegen( $mandant_name, $element[ "alpha_01" ], $element[ "alpha_02" ], $element[ "alpha_03" ], $element[ "num_01" ], $element[ "alpha_04" ], $element[ "alpha_05" ], $element[ "alpha_06" ] );
set_time_limit( 30 );
}
}
// initale Dokumentarten anlegen
$element_anzulegen = liefere_wertemenge_elemente( "Standard", "init_dokarten" );
if ( $element_anzulegen[ 0 ] > 0 )
{
foreach( $element_anzulegen[ 2 ] as $element )
{
// dokart_anlegen( $mandant_name, $dokart_kuerzel, $dokart_name, $dokart_beschreibung, $dokart_typ, $arr_attribute, $flags )
// dokart_anlegen( $mandant_name, $dokart_kuerzel, $dokart_name, $dokart_beschreibung, $dokart_typ, $depot, $arr_attribute, $flags )
$attribs = array();
$attribute = explode( "|", $element[ "alpha_05" ] );
foreach ( $attribute as $attr )
{
$attribs[ ] = array( "attrib_name"=>$attr );
}
/*
$flags = explode( "|", $element[ "alpha_06" ] );
foreach ( $flags as $flag )
{
$flag_dummy = explode( "=", $flag );
$flags_fertig[ $flag_dummy[ 0 ] ] = $flag_dummy[ 1 ];
}
*/
//xlog( 2, "======================>".$element[ "alpha_06" ] );
$ok = dokart_anlegen( $mandant_name, $element[ "alpha_02" ], $element[ "alpha_01" ], $element[ "alpha_03" ], $element[ "alpha_04" ], $element[ "alpha_06" ], $attribs, "" );
set_time_limit( 30 );
}
}
/////////////////////////////////////////////////////////////////
// initale Gruppen/Systemrechtzuordnungen eintragen
$element_anzulegen = liefere_wertemenge_elemente( "Standard", "init_gruppe_systemrecht" );
if ( $element_anzulegen[ 0 ] > 0 )
{
foreach( $element_anzulegen[ 2 ] as $element )
{
// gruppe_einer_gruppe_hinzufuegen( $mandant_name, $ober_gruppe, $unter_gruppe )
$ok = gruppe_systemrecht_zuweisen( $mandant_name, $element[ "alpha_01" ], $element[ "alpha_02" ] );
set_time_limit( 30 );
}
}
/////////////////////////////////////////////////////////////////
// Dokumentübergreifende Suche anlegen
$d = liefere_depotinformationen( $mandant_name, "DB", false );
if ( $d[ 0 ] < 0 )
{
// depot_anlegen( $mandant_name, $kuerzel, $typ, $ort, $schranke = 0, $scramble = false, $status="offen", $beschreibung = "" )
$ok = depot_anlegen( $mandant_name, "DB", "D", "", 50000, false, "offen", "Datenbank-Depot" );
set_time_limit( 30 );
}
//attribut_anlegen( $mandant_name, $attrib_name, $attrib_db_spalte, $attrib_wertemenge, $attrib_beschreibung )
$ok = attribut_anlegen( $mandant_name, "Stichwort", "alpha_01", "", "Stichwort für dokumentartübergreifende Suche" );
set_time_limit( 30 );
// dokart_anlegen( $mandant_name, $dokart_kuerzel, $dokart_name, $dokart_beschreibung, $dokart_typ, $depot, $arr_attribute, $flags )
$attribs = array( array( "attrib_name" => "Stichwort" ) );
$ok = dokart_anlegen( $mandant_name, "SCHABLONE", "*****Übergreifende Suche", "Dokumentartübergreifende Suche", "A", "DB", $attribs, "" );
set_time_limit( 30 );
//$ok = benutzer_anlegen( $mandant_name, "ca_admin", "ca_admin", "System", "Verwaltung", "", "m", "01.01.".date( "Y" ), false );
if ( $ok[ 0 ] >= 0 )
{
/* Benutzer Systemrecht zuweisen
$ok_2 = erstelle_konfig( $mandant_name, "SYSTEMRECHT_01", "systemrechte", "ADMINISTRATOR", "Systemrechte sollten nicht geändert werden." );
$ok_3 = gruppe_anlegen( $mandant_name, "Administratoren", "", "Administratoren" );
$ok_4 = gruppe_systemrecht_zuweisen( $mandant_name, "Administratoren", "ADMINISTRATOR" );
$ok_5 = benutzer_einer_gruppe_hinzufuegen( $mandant_name, "ca_admin", "Administratoren" );
*/
$meldung = "Der Mandant >".$mandant_name."< wurde mit der ID >".$rc."< angelegt.";
}
else
{
// Rollback ...
$STATEMENT = "delete from ca_mandant where mandant_id = ".$rc;
$ergebnis = xdb( $STATEMENT );
$rc = -4;
$meldung = "Es ist ein Problem aufgetreten: '".$ok[ 1 ]."'";
}
}
else
{
$rc = -3;
$meldung = "Beim Anlegen des Mandanten ist ein Fehler aufgetreten: >".$ergebnis[ 1 ]."<";
}
}
else
{
$rc = -2;
$meldung = "Es ist ein DB-Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
// Der Mandant existiert bereits
$rc = -2;
$meldung = "Es ist ein Fehler aufgetreten: '".$existiert_mandant[ 1 ]."'";
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Mandant angegeben.";
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
mysqli_close( $connection );
xlog( $level, "admin.mandant_anlegen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function mandant_loeschen( $mandant_name )
{
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
// Dokumente löschen
$STATEMENT = "delete from ca_dok_history where dok_id in ( select dok_id from ca_dok_ablage where mandant_id = ".$ok_1[ 0 ]." )";
$ergebnis = xdb( $STATEMENT );
set_time_limit( 300 );
$STATEMENT = "delete from ca_index where dok_id in ( select dok_id from ca_dok_ablage where mandant_id = ".$ok_1[ 0 ]." )";
$ergebnis = xdb( $STATEMENT );
set_time_limit( 300 );
$STATEMENT = "delete from ca_index_history where dok_id in ( select dok_id from ca_dok_ablage where mandant_id = ".$ok_1[ 0 ]." )";
$ergebnis = xdb( $STATEMENT );
set_time_limit( 300 );
$STATEMENT = "delete from ca_notiz where element_typ = 'd' and element_id in ( select dok_id from ca_dok_ablage where mandant_id = ".$ok_1[ 0 ]." )";
$ergebnis = xdb( $STATEMENT );
set_time_limit( 300 );
$STATEMENT = "delete from ca_posdaten where dok_id in ( select dok_id from ca_dok_ablage where mandant_id = ".$ok_1[ 0 ]." )";
$ergebnis = xdb( $STATEMENT );
set_time_limit( 300 );
$STATEMENT = "delete from ca_posdaten_history where dok_id in ( select dok_id from ca_dok_ablage where mandant_id = ".$ok_1[ 0 ]." )";
$ergebnis = xdb( $STATEMENT );
set_time_limit( 300 );
$STATEMENT = "delete from ca_rech_verlauf where mandant_id = ".$ok_1[ 0 ]." ";
$ergebnis = xdb( $STATEMENT );
set_time_limit( 300 );
/*
$STATEMENT = "delete from ca_posdaten_ablage where dok_id in ( select dok_id from ca_dok_ablage where mandant_id = ".$ok_1[ 0 ]." )";
$ergebnis = xdb( $STATEMENT );
set_time_limit( 300 );
*/
// Bezüge löschen
$STATEMENT = "delete from ca_bezug where dok_id_1 in ( select dok_id from ca_dok_ablage where mandant_id = ".$ok_1[ 0 ]." )";
$ergebnis = xdb( $STATEMENT );
set_time_limit( 300 );
$STATEMENT = "delete from ca_bezug where dok_id_2 in ( select dok_id from ca_dok_ablage where mandant_id = ".$ok_1[ 0 ]." )";
$ergebnis = xdb( $STATEMENT );
set_time_limit( 300 );
$STATEMENT = "delete from ca_dok_ablage where mandant_id = ".$ok_1[ 0 ]." ";
$ergebnis = xdb( $STATEMENT );
set_time_limit( 300 );
// Benutzer/Gruppen löschen
//$STATEMENT = "delete from ca_benutzer_einstellungen where benutzer_id in (select benutzer_id from ca_benutzer where mandant_id = ".$ok_1[ 0 ]." )";
//$ergebnis = xdb( $STATEMENT );
//$STATEMENT = "delete from ca_benutzer where mandant_id = ".$ok_1[ 0 ];
//$ergebnis = xdb( $STATEMENT );
$ergebnis = liefere_alle_benutzer( $mandant_name );
if ( ( is_array( $ergebnis[ 2 ] ) == true ) && ( count( $ergebnis[ 2 ] ) > 0 ) )
{
foreach( $ergebnis[ 2 ] as $benutzer )
{
$erg = benutzer_loeschen( $mandant_name, $benutzer[ "benutzer_anmeldename" ], true );
set_time_limit( 300 );
}
}
$ergebnis = liefere_alle_gruppen( $mandant_name );
if ( ( is_array( $ergebnis[ 2 ] ) == true ) && ( count( $ergebnis[ 2 ] ) > 0 ) )
{
foreach( $ergebnis[ 2 ] as $gruppe )
{
$erg = gruppe_loeschen( $mandant_name, $gruppe, true );
set_time_limit( 300 );
}
}
//$STATEMENT = "delete from ca_gruppe where mandant_id = ".$ok_1[ 0 ];
//$ergebnis = xdb( $STATEMENT );
// Rechte löschen
//$STATEMENT = "delete from ca_gruppe_in_gruppe where mandant_id = ".$ok_1[ 0 ];
//$ergebnis = xdb( $STATEMENT );
//$STATEMENT = "delete from ca_benutzer_in_gruppe where mandant_id = ".$ok_1[ 0 ];
//$ergebnis = xdb( $STATEMENT );
//$STATEMENT = "delete from ca_gruppe_system_rechte where mandant_id = ".$ok_1[ 0 ];
//$ergebnis = xdb( $STATEMENT );
$ergebnis = liefere_alle_systemrechte( $mandant_name );
if ( ( is_array( $ergebnis[ 2 ] ) == true ) && ( count( $ergebnis[ 2 ] ) > 0 ) )
{
foreach( $ergebnis[ 2 ] as $systemrecht )
{
$erg = systemrecht_loeschen( $mandant_name, $systemrecht );
set_time_limit( 300 );
}
}
// Wertemengen, Konfiguration, Mandant-Informationen löschen
$ergebnis = liefere_alle_wertemengen( $mandant_name );
if ( ( is_array( $ergebnis[ 2 ] ) == true ) && ( count( $ergebnis[ 2 ] ) > 0 ) )
{
foreach( $ergebnis[ 2 ] as $wertemenge )
{
$erg = wertemenge_loeschen( $mandant_name, $wertemenge[ "kuerzel" ] );
set_time_limit( 300 );
}
}
$STATEMENT = "delete from ca_wertemenge where mandant_id = ".$ok_1[ 0 ];
$ergebnis = xdb( $STATEMENT );
set_time_limit( 300 );
$STATEMENT = "delete from ca_wertemenge_elemente where mandant_id = ".$ok_1[ 0 ];
$ergebnis = xdb( $STATEMENT );
set_time_limit( 300 );
$STATEMENT = "delete from ca_mandant_informationen where mandant_id = ".$ok_1[ 0 ];
$ergebnis = xdb( $STATEMENT );
set_time_limit( 300 );
$STATEMENT = "delete from ca_konfig where mandant_id = ".$ok_1[ 0 ];
$ergebnis = xdb( $STATEMENT );
set_time_limit( 300 );
$STATEMENT = "delete from ca_konfig_history where mandant_id = ".$ok_1[ 0 ];
$ergebnis = xdb( $STATEMENT );
set_time_limit( 300 );
$ergebnis = liefere_dok_akten_art_liste( $mandant_name, "", true );
if ( $ergebnis[ 0 ] > 0 )
{
foreach ( $ergebnis[ 2 ] as $dokart )
{
$alarm = dokart_loeschen( $mandant_name, $dokart[ "dokart_kuerzel" ] );
set_time_limit( 300 );
}
}
$ergebnis = liefere_attributliste( $mandant_name, true );
if ( $ergebnis[ 0 ] > 0 )
{
foreach ( $ergebnis[ 2 ] as $attribut )
{
$alarm = attribut_loeschen( $mandant_name, $attribut[ "attrib_name" ] );
set_time_limit( 300 );
}
}
$ergebnis = welche_depots_gibt_es( $mandant_name );
if ( $ergebnis[ 0 ] > 0 )
{
foreach ( $ergebnis[ 2 ] as $kuerzel )
{
$alarm = depot_loeschen( $mandant_name, $kuerzel );
set_time_limit( 300 );
}
}
$STATEMENT = "delete from ca_mandant where mandant_id = ".$ok_1[ 0 ];
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = 0;
$meldung = "Der Mandant >".$mandant_name."< wurde gelöscht.";
}
else
{
$rc = -4;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.mandant_loeschen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function mandant_aendern( $mandant_name_alt, $mandant_name_neu, $lizenz )
{
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
//xlog( $level, "admin.mandant_aendern ----------------- START" );
$ok_1 = liefere_mandant( $mandant_name_alt );
$ok_2 = existiert_mandant( $mandant_name_neu );
$gruppenliste = array();
if ( $ok_1[ 0 ] > 0 )
{
if ( $ok_2[ 0 ] == 0 )
{
if ( mb_strtoupper( $exekutor, "UTF-8" ) == "SUPERUSER" )
{
$exec[ 0 ] = 1;
}
else
{
$exec = besitzt_benutzer_systemrecht( $mandant_name_alt, $exekutor, "ADMINISTRATOR" );
}
if ( $exec[ 0 ] == 1 )
{
if ( strlen( $lizenz ) > 0 )
{
$STATEMENT_ERW = ", mandant_lizenz = '".mysqli_real_escape_string( $connection, $lizenz )."'";
$erw = ", neue Lizenz: >".$lizenz."<.";
}
else
{
$STATEMENT_ERW = "";
$erw = ".";
}
$STATEMENT = "update ca_mandant set mandant_name = '".mysqli_real_escape_string( $connection, $mandant_name_neu )."' ".$STATEMENT_ERW." where mandant_id = ".$ok_1[ 0 ]." ";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = $ok_1[ 0 ];
$meldung = "Der Mandant >".$mandant_name_alt."< (ID ".$ok_1[ 0 ].") wurde geändert. Neuer Name: >".$mandant_name_neu."<".$erw;
}
else
{
$rc = -3;
$meldung = "Es ist ein Problem aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -12;
$meldung = "Der Benutzer >".$exekutor."< verfügt nicht über ausreichende Berechtigungen.";
}
}
else
{
if ( $ok_2[ 0 ] > 0 )
{
if ( $ok_1[ 2 ][ "mandant_lizenz" ] == $lizenz )
{
$rc = -1;
$meldung = "Der gewünschte Mandantenname >".$mandant_name_neu."< ist bereits belegt.";
}
else
{
$STATEMENT = "update ca_mandant set mandant_lizenz = '".mysqli_real_escape_string( $connection, $lizenz )."' where mandant_id = ".$ok_1[ 0 ];
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = $ok_1[ 0 ];
$meldung = "Die Lizenz des Mandanten ".$mandant_name_alt." wurde geändert, neue Lizenz: >".$lizenz."<.";
}
else
{
$rc = -4;
$meldung = "Es ist ein Problem aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
}
else
{
$rc = -2;
$meldung = $ok_2[ 1 ];
}
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
mysqli_close( $connection );
xlog( $level, "admin.mandant_aendern: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function liefere_alle_mandanten( $wirklich_alle = false )
{
$mandantenliste = array();
$STATEMENT = "select mandant_name from ca_mandant";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
foreach( $ergebnis[ 1 ] as $zeile )
{
if ( ( (string)$zeile[ "mandant_name" ] <> "Standard" ) or ( $wirklich_alle == true ) )
{
$mandantenliste[ ] = (string)$zeile[ "mandant_name" ];
}
}
}
else
{
$rc = -2;
$meldung = "Es ist ein DB-Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
if ( count( $mandantenliste ) == 0 )
{
$mandantenliste[ ] = "Standard";
}
$rc = count( $mandantenliste );
$meldung = "Liefere ".$rc." Mandanten.";
xlog( 6, "admin.liefere_alle_mandanten: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $mandantenliste );
}
function liefere_mandant( $mandant_name )
{
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
$STATEMENT = "select mandant_id, mandant_name, mandant_erstellt_am, mandant_lizenz from ca_mandant where mandant_name = '".mysqli_real_escape_string( $connection, $mandant_name )."'";
//xlog( 4, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
if ( $ergebnis[ 0 ] > 0 )
{
$mandant = $ergebnis[ 1 ][ 0 ];
$ergebnis_arr = array( "mandant_id"=>$mandant[ "mandant_id" ], "mandant_name"=>$mandant[ "mandant_name" ], "mandant_erstellt_am"=>$mandant[ "mandant_erstellt_am" ], "mandant_lizenz"=>$mandant[ "mandant_lizenz" ] );
$STATEMENT = "select count(*) calbers from ca_benutzer where mandant_id = ".$ok_1[ 0 ];
$ergebnis_1 = xdb( $STATEMENT );
$anzahl_user = $ergebnis_1[ 1 ][ 0 ][ "calbers" ];
$STATEMENT = "select count(*) calbers from ca_gruppe where mandant_id = ".$ok_1[ 0 ];
$ergebnis_2 = xdb( $STATEMENT );
$anzahl_gruppen = $ergebnis_2[ 1 ][ 0 ][ "calbers" ];
$STATEMENT = "select count(*) calbers from ca_dok_ablage where mandant_id = ".$ok_1[ 0 ]." ";
$ergebnis_3 = xdb( $STATEMENT );
$anzahl_dokumente = $ergebnis_3[ 1 ][ 0 ][ "calbers" ];
$ergebnis_arr[ "anzahl_benutzer" ] = $anzahl_user;
$ergebnis_arr[ "anzahl_gruppen" ] = $anzahl_gruppen;
$ergebnis_arr[ "anzahl_dokumente" ] = $anzahl_dokumente;
$rc = (int)$mandant[ "mandant_id" ];
$meldung = "Liefere Informationen zu Mandant ".$mandant_name.".";
}
else
{
//darf eigentlich nicht vorkommen, da schon mit existiert_mandant abgefragt
}
}
else
{
$rc = -3;
$meldung = "Es ist ein Fehler aufgetreten: >".$ergebnis[ 1 ]."<";
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
mysqli_close( $connection );
xlog( $level, "admin.liefere_mandant: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $ergebnis_arr );
}
/*
Rechte
*/
function gruppe_systemrecht_zuweisen( $mandant_name, $gruppen_name, $systemrecht )
{
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
if ( strlen( $systemrecht ) > 0 )
{
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_gruppe( $mandant_name, $gruppen_name );
if ( $ok_2[ 0 ] > 0 )
{
if ( mb_strtoupper( $exekutor, "UTF-8" ) == "SUPERUSER" )
{
$exec[ 0 ] = 1;
}
else
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMINISTRATOR" );
}
if ( $exec[ 0 ] == 1 )
{
$besitzt_gruppe_systemrecht = besitzt_gruppe_systemrecht( $mandant_name, $gruppen_name, $systemrecht );
$systemrecht = strtoupper( $systemrecht );
if ( $besitzt_gruppe_systemrecht[ 0 ] == 0 )
{
$STATEMENT = "insert into ca_gruppe_systemrechte ( gruppen_id, systemrecht ) values ( ".$ok_2[ 0 ].", '".mysqli_real_escape_string( $connection, $systemrecht )."' )";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = 0;
$meldung = "Der Gruppe >".$gruppen_name."< (ID ".$ok_2[ 0 ].") wurde im Mandant >".$mandant_name."< (ID ".$ok_1[ 0 ].") das Systemrecht >".$systemrecht."< zugewiesen.";
}
else
{
$rc = -4;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -5;
$meldung = "Die Gruppe ".$gruppen_name." besitzt im Mandanten ".$mandant_name." bereits das Systemrecht ".$systemrecht." (oder ein höherwertiges Systemrecht).";
}
}
else
{
$rc = -12;
$meldung = "Der Benutzer >".$exekutor."< verfügt nicht über ausreichende Berechtigungen.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Systemrecht angegeben.";
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
mysqli_close( $connection );
xlog( $level, "admin.gruppe_systemrecht_zuweisen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function gruppe_systemrecht_entziehen( $mandant_name, $gruppen_name, $systemrecht, $force = false )
{
if ( ( $force !== true ) && ( $force !== false ) )
{
$force = false;
}
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
if ( strlen( $systemrecht ) > 0 )
{
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_gruppe( $mandant_name, $gruppen_name );
if ( $ok_2[ 0 ] > 0 )
{
if ( mb_strtoupper( $exekutor, "UTF-8" ) == "SUPERUSER" )
{
$exec[ 0 ] = 1;
}
else
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMINISTRATOR" );
}
if ( $exec[ 0 ] == 1 )
{
if ( ( ! ( ( mb_strtoupper( $gruppen_name, "UTF-8" ) == "ADMINISTRATOREN" ) && ( mb_strtoupper( $systemrecht, "UTF-8" ) == "ADMINISTRATOR" ) ) ) || ( $force === true ) )
{
$systemrecht = strtoupper( $systemrecht );
$STATEMENT = "delete from ca_gruppe_systemrechte where gruppen_id = ".$ok_2[ 0 ]." and systemrecht = '".$systemrecht."'";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = 0;
$meldung = "Der Gruppe >".$gruppen_name."< (ID ".$ok_2[ 0 ].") wurde im Mandant >".$mandant_name."< (ID ".$ok_1[ 0 ].") das Systemrecht >".$systemrecht."< entzogen.";
}
else
{
$rc = -4;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -2;
$meldung = "Der Gruppe Administratoren kann das Systemrecht ADMINISTRATOR nicht entzogen werden.";
}
}
else
{
$rc = -12;
$meldung = "Der Benutzer >".$exekutor."< verfügt nicht über ausreichende Berechtigungen.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Systemrecht angegeben.";
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.gruppe_systemrecht_entziehen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function besitzt_gruppe_systemrecht( $mandant_name, $gruppen_name, $systemrecht )
{
/*
liefert array( $rc, $meldung )
$rc = 1 wenn gruppe das Systemrecht besitzt
$rc = 0 wenn das nicht der Fall ist
*/
$ergebnis = welche_systemrechte_besitzt_gruppe( $mandant_name, $gruppen_name );
//xlog( 4, $ergebnis[ 0 ]);
if ( $ergebnis[ 0 ] == 0 )
{
// Die Gruppe besitzt keine Systemrechte
$rc = 0;
$meldung = $meldung = "Die Gruppe >".$gruppen_name."< besitzt im Mandant >".$mandant_name."< das Systemrecht >".$systemrecht."< NICHT.";
}
elseif ( $ergebnis[ 0 ] < 0 )
{
// Es ist ein Fehler aufgetreten
$rc = $ergebnis[ 0 ];
$meldung = $ergebnis[ 1 ];
}
else
{
// Die Gruppe besitzt Systemrechte, jetzt muß festgestellt werden, ob das gefragte Systemrecht dabei ist
// erstmal legen wir fest, daß das Recht nicht zugewiesen ist, und prüfen dann das Gegenteil.
$rc = 0;
$meldung = "Die Gruppe >".$gruppen_name."< besitzt im Mandant >".$mandant_name."< das Systemrecht >".$systemrecht."< NICHT.";
foreach( $ergebnis[ 2 ] as $sys_recht )
{
if ( mb_strtoupper( $sys_recht, "UTF-8" ) == mb_strtoupper( $systemrecht, "UTF-8" ) )
{
$rc = 1;
$meldung = "Die Gruppe >".$gruppen_name."< besitzt im Mandant >".$mandant_name."< das Systemrecht >".$systemrecht."<.";
break;
}
}
}
/*
///////////////////
Alte Implementierung:
///////////////////
if ( strlen( $systemrecht ) > 0 )
{
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_gruppe( $mandant_name, $gruppen_name );
if ( $ok_2[ 0 ] > 0 )
{
$systemrecht = strtoupper( $systemrecht );
$STATEMENT = "select count(*) calbers from ca_gruppe_system_rechte where mandant_id = ".$ok_1[ 0 ]." and gruppen_id = ".$ok_2[ 0 ]." and systemrecht = '".$systemrecht."'";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 1 ][ 0 ][ "calbers" ] > 0 )
{
$rc = 1;
$meldung = "Die Gruppe >".$gruppen_name."< (ID ".$ok_2[ 0 ].") besitzt im Mandant >".$mandant_name."< (ID ".$ok_1[ 0 ].") das Systemrecht >".$systemrecht."<.";
}
else
{
$rc = 0;
$meldung = "Die Gruppe >".$gruppen_name."< (ID ".$ok_2[ 0 ].") besitzt im Mandant >".$mandant_name."< (ID ".$ok_1[ 0 ].") das Systemrecht >".$systemrecht."< NICHT.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Systemrecht angegeben.";
}
*/
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.besitzt_gruppe_systemrecht: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function welche_systemrechte_besitzt_gruppe( $mandant_name, $gruppen_name )
{
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_gruppe( $mandant_name, $gruppen_name );
if ( $ok_2[ 0 ] > 0 )
{
$systemrecht = strtoupper( $systemrecht );
$STATEMENT = "select systemrecht from ca_gruppe_systemrechte where gruppen_id = ".$ok_2[ 0 ];
$ergebnis = xdb( $STATEMENT );
//xlog( 4, "anzahl treffer: ".$ergebnis[ 0 ] );
if ( $ergebnis[ 0 ] > 0 )
{
$erstes_ergebnis = array();
foreach ( $ergebnis[ 1 ] as $zeile )
{
$finales_ergebnis_nachher[] = $zeile[ "systemrecht" ];
}
$nur_direkte_systemrechte = $finales_ergebnis_nachher;
//xlog( 4, "anzahl sysrechte: ".count( $finales_ergebnis_nachher ) );
$finales_ergebnis_vorher = array();
//xlog( 4, "count vorher ".count( $finales_ergebnis_vorher )." nachher ".count( $finales_ergebnis_nachher ) );
while ( count( $finales_ergebnis_vorher ) <> count( $finales_ergebnis_nachher ) )
{
$finales_ergebnis_vorher = $finales_ergebnis_nachher;
foreach( $finales_ergebnis_vorher as $systemrecht )
{
$STATEMENT = "select systemrecht from ca_systemrecht where ober_systemrecht = '".$systemrecht."' and mandant_id = ".$ok_1[ 0 ];
$ergebnis_2 = xdb( $STATEMENT );
if ( $ergebnis_2[ 0 ] > 0 )
{
foreach ( $ergebnis_2[ 1 ] as $zeile )
{
$finales_ergebnis_nachher[] = $zeile[ "systemrecht" ];
}
}
}
$finales_ergebnis_nachher = array_unique( $finales_ergebnis_nachher );
}
$rc = count( $finales_ergebnis_nachher );
$meldung = "Liefere ".$rc." Systemrechte für die Gruppe ".$gruppen_name." im Mandanten ".$mandant_name.".";
}
else
{
$finales_ergebnis_nachher = array();
$nur_direkte_systemrechte = array();
$rc = 0;
$meldung = "Für die Gruppe ".$gruppen_name." sind im Mandanten ".$mandant_name." keine Systemrechte eingetragen.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.welche_systemrechte_besitzt_gruppe: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $finales_ergebnis_nachher, $nur_direkte_systemrechte );
}
function welche_systemrechte_besitzt_gruppe_nicht( $mandant_name, $gruppen_name )
{
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_gruppe( $mandant_name, $gruppen_name );
if ( $ok_2[ 0 ] > 0 )
{
$systemrecht = strtoupper( $systemrecht );
$STATEMENT = "select distinct systemrecht from ca_systemrecht where mandant_id = ".$ok_1[ 0 ]." and systemrecht not in ( select systemrecht from ca_gruppe_systemrechte where gruppen_id = ".$ok_2[ 0 ]." ) order by systemrecht ";
$ergebnis = xdb( $STATEMENT );
//xlog( 4, "anzahl treffer: ".$ergebnis[ 0 ] );
if ( $ergebnis[ 0 ] > 0 )
{
foreach ( $ergebnis[ 1 ] as $zeile )
{
$finales_ergebnis[] = $zeile[ "systemrecht" ];
}
$rc = count( $finales_ergebnis );
$meldung = "Liefere ".$rc." Systemrechte, die die Gruppe ".$gruppen_name." im Mandanten ".$mandant_name." nicht besitzt.";
}
else
{
$rc = 0;
$meldung = "Für die Gruppe ".$gruppen_name." sind im Mandanten ".$mandant_name." alle Systemrechte eingetragen.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.welche_systemrechte_besitzt_gruppe: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $finales_ergebnis );
}
function besitzt_benutzer_systemrecht( $mandant_name, $benutzer_anmeldename, $systemrecht )
{
$gruppen = in_welchen_gruppen_ist_benutzer_mitglied( $mandant_name, $benutzer_anmeldename );
//xlog( 4, "hallo");
$rc = 0;
$meldung = "Der Benutzer >".$benutzer_anmeldename."< aus dem Mandanten >".$mandant_name."< besitzt über die Mitgliedschaft in der Gruppe >".$gruppen_name."< das Systemrecht ".$systemrecht." NICHT.";
if ( $gruppen[ 0 ] > 0 )
{
foreach( $gruppen[ 2 ] as $gruppen_name )
{
$ergebnis = besitzt_gruppe_systemrecht( $mandant_name, $gruppen_name, $systemrecht );
if ( $ergebnis[ 0 ] == 1 )
{
$rc = 1;
$meldung = "Der Benutzer >".$benutzer_anmeldename."< aus dem Mandanten >".$mandant_name."< besitzt über die Mitgliedschaft in der Gruppe >".$gruppen_name."< das Systemrecht ".$systemrecht.".";
break;
}
}
}
if ( $rc <> 1 )
{
$rc = 0;
$meldung = "Der Benutzer >".$benutzer_anmeldename."< aus dem Mandanten >".$mandant_name."< besitzt das Systemrecht ".$systemrecht." nicht.";
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.besitzt_benutzer_systemrecht: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function welche_systemrechte_besitzt_benutzer( $mandant_name, $benutzer_anmeldename )
{
//xlog( 4, "admin.welche_systemrechte_besitzt_benutzer ----------------- START" );
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$gruppen = in_welchen_gruppen_ist_benutzer_mitglied( $mandant_name, $benutzer_anmeldename );
$benutzer_final_systemrechte = array();
if ( $gruppen[ 0 ] > 0 )
{
foreach( $gruppen[ 2 ] as $gruppen_name )
{
$ergebnis = welche_systemrechte_besitzt_gruppe( $mandant_name, $gruppen_name, $systemrecht );
if ( $ergebnis[ 0 ] > 0 )
{
foreach( $ergebnis[ 2 ] as $systemrecht )
{
$benutzer_final_systemrechte[ ] = $systemrecht;
}
}
}
$benutzer_final_systemrechte = array_unique( $benutzer_final_systemrechte );
sort( $benutzer_final_systemrechte );
$rc = count( $benutzer_final_systemrechte );
$meldung = "Liefere ".$rc." Systemrechte für den Benutzer ".$benutzer_anmeldename." aus dem Mandanten ".$mandant_name.".";
}
else
{
$rc = 0;
$meldung = "Der Benutzer ".$benutzer_anmeldename." aus dem Mandanten ".$mandant_name." besitzt keine Systemrechte.";
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.welche_systemrechte_besitzt_benutzer: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $benutzer_final_systemrechte );
}
function welche_systemrecht_gruppen_besitzt_gruppe( $mandant_name, $gruppen_name )
{
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_gruppe( $mandant_name, $gruppen_name );
if ( $ok_2[ 0 ] > 0 )
{
$systemrechte = welche_systemrechte_besitzt_gruppe( $mandant_name, $gruppen_name );
if ( $systemrechte[ 0 ] > 0 )
{
$STATEMENT = "select distinct rechte_gruppe from ca_systemrecht where mandant_id = ".$ok_1[ 0 ]." and systemrecht in ( ";
foreach ( $systemrechte[ 2 ] as $systemrecht )
{
$STATEMENT = $STATEMENT." '".$systemrecht."', ";
}
$STATEMENT = substr( $STATEMENT, 0, -2 )." )";
//xlog( 4, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$liste_str = "";
$liste_arr = array();
if ( count( $ergebnis[ 1 ] ) > 0 )
{
foreach( $ergebnis[ 1 ] as $zeile )
{
$liste_str = $liste_str.$zeile[ "rechte_gruppe" ].", ";
$liste_arr[] = $zeile[ "rechte_gruppe" ];
}
$liste_str = substr( $liste_str, 0, -2 );
}
else
{
$liste_str = "-keine-";
}
$rc = count( $ergebnis[ 1 ] );
$meldung = "Die Gruppe ".$gruppen_name." im Mandanten ".$mandant_name." besitzt folgende Rechtegruppen: ( ".$liste_str." ).";
$ergebnis = $ergebnis[ 1 ];
}
else
{
$rc = 0;
$meldung = "Die Gruppe ".$gruppen_name." im Mandanten ".$mandant_name." besitzt keine Rechtegruppen.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.welche_systemrecht_gruppen_besitzt_gruppe: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $liste_arr );
}
function welche_systemrecht_gruppen_besitzt_benutzer( $mandant_name, $benutzer_anmeldename )
{
$gruppen = in_welchen_gruppen_ist_benutzer_mitglied( $mandant_name, $benutzer_anmeldename );
$liste_arr = array();
foreach( $gruppen[ 2 ] as $gruppe )
{
$ergebnis = welche_systemrecht_gruppen_besitzt_gruppe( $mandant_name, $gruppe );
if ( $ergebnis[ 0 ] > 0 )
{
foreach( $ergebnis[ 2 ] as $ksdjf )
{
$liste_arr[] = $ksdjf;
}
}
}
$liste_arr = array_unique( $liste_arr );
foreach( $liste_arr as $element )
{
$liste_str = $liste_str.$element.", ";
}
$liste_str = substr( $liste_str, 0, -2 );
$rc = count( $liste_arr );
$meldung = "Der Benutzer ".$benutzer_anmeldename." besitzt im Mandanten ".$mandant_name." folgende Rechtegruppen: ( ".$liste_str." ).";
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.welche_systemrecht_gruppen_besitzt_benutzer: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $liste_arr );
}
function welche_dok_akt_rechte_hat_benutzer( $mandant_name, $benutzer_anmeldename, $typ = "", $sysdokuarten_auflisten = false )
{
if ( $sysdokuarten_auflisten !== true )
{
$sysdokuarten_auflisten = false;
}
$ergebnis = welche_systemrechte_besitzt_benutzer( $mandant_name, $benutzer_anmeldename );
//$sysdokarten = liefere_wertemengen_elemente( $mandant_name, "systemdokarten" );
if ( $ergebnis[ 0 ] > 0 )
{
// IMPORT
// AENDERN
// LESEN
// LOESCHEN
$typ = mb_strtoupper( $typ );
if ( ( $typ == "D" ) || ( $typ == "A" ) || ( strlen( $typ ) == 0 ) )
{
$i = 0;
foreach ( $ergebnis[ 2 ] as $systemrecht )
{
//xlog( 1, $systemrecht );
//xlog( 1, substr( $systemrecht, 2, 1 ) );
$sysrecht = explode( "_", $systemrecht );
if ( ( count( $sysrecht ) == 3 ) && ( ( $sysrecht[ 2 ] == "IMPORT" ) || ( $sysrecht[ 2 ] == "AENDERN" ) || ( $sysrecht[ 2 ] == "LESEN" ) || ( $sysrecht[ 2 ] == "LOESCHEN" ) ) )
{
if ( ! $sysdokuarten_auflisten )
{
$enth = ist_element_in_wertemenge( $mandant_name, "systemdokarten", $sysrecht[ 1 ] );
if ( $enth[ 0 ] > 0 )
{
continue;
}
}
switch( $sysrecht[ 2 ] )
{
case "IMPORT":
if ( strlen ( $typ ) > 0 )
{
//xlog( 1, "Typ: ".$typ." sysrecht[ 0 ]: ".$sysrecht[ 0 ]." dokuart ".$sysrecht[ 1 ] );
if ( $sysrecht[ 0 ] == $typ )
{
$ergebnis_IMP[] = $sysrecht[ 1 ];
$erg_IMP_liste = $erg_IMP_liste.$sysrecht[ 1 ]."|";
}
}
else
{
$ergebnis_IMP[] = $sysrecht[ 1 ];
$erg_IMP_liste = $erg_IMP_liste.$sysrecht[ 1 ]."|";
}
//xlog( 1, "systemrecht".$systemrecht );
//xlog( 1, "typ".$typ );
//xlog( 1, "sysrecht[0]".$sysrecht[0] );
$i++;
break;
case "AENDERN":
if ( strlen ( $typ ) > 0 )
{
if ( $sysrecht[ 0 ] == $typ )
{
$ergebnis_AEN[] = $sysrecht[ 1 ];
$erg_AEN_liste = $erg_AEN_liste.$sysrecht[ 1 ]."|";
}
}
else
{
$ergebnis_AEN[] = $sysrecht[ 1 ];
$erg_AEN_liste = $erg_AEN_liste.$sysrecht[ 1 ]."|";
}
$i++;
break;
case "LESEN":
if ( strlen ( $typ ) > 0 )
{
if ( $sysrecht[ 0 ] == $typ )
{
$ergebnis_LES[] = $sysrecht[ 1 ];
$erg_LES_liste = $erg_LES_liste.$sysrecht[ 1 ]."|";
}
}
else
{
$ergebnis_LES[] = $sysrecht[ 1 ];
$erg_LES_liste = $erg_LES_liste.$sysrecht[ 1 ]."|";
}
$i++;
break;
case "LOESCHEN":
if ( strlen ( $typ ) > 0 )
{
if ( $sysrecht[ 0 ] == $typ )
{
$ergebnis_LOE[] = $sysrecht[ 1 ];
$erg_LOE_liste = $erg_LOE_liste.$sysrecht[ 1 ]."|";
}
}
else
{
$ergebnis_LOE[] = $sysrecht[ 1 ];
$erg_LOE_liste = $erg_LOE_liste.$sysrecht[ 1 ]."|";
}
$i++;
break;
}
}
}
if ( strlen( $erg_IMP_liste ) > 0 )
{
$erg_IMP_liste = substr( $erg_IMP_liste, 0, strlen( $erg_IMP_liste ) -1 );
}
if ( strlen( $erg_AEN_liste ) > 0 )
{
$erg_AEN_liste = substr( $erg_AEN_liste, 0, strlen( $erg_AEN_liste ) -1 );
}
if ( strlen( $erg_LES_liste ) > 0 )
{
$erg_LES_liste = substr( $erg_LES_liste, 0, strlen( $erg_LES_liste ) -1 );
}
if ( strlen( $erg_LOE_liste ) > 0 )
{
$erg_LOE_liste = substr( $erg_LOE_liste, 0, strlen( $erg_LOE_liste ) -1 );
}
switch ( $typ )
{
case "D":
$text_dummy = "Dokumentart-Systemrechte";
break;
case "A":
$text_dummy = "Aktenart-Systemrechte";
break;
default:
$text_dummy = "Dok.- und Aktenart-Systemrechte";
break;
}
$rc = $i;
$meldung = "Liefere ".$rc." ".$text_dummy." für Benutzer ".$benutzer_anmeldename.".";
}
else
{
$rc = -1;
$meldung = "Der Typ ".$typ." ist nicht erlaubt.";
}
}
else
{
$rc = $ergebnis[ 0 ];
$meldung = $ergebnis[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.welche_dok_akt_rechte_hat_benutzer: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $ergebnis_IMP, $ergebnis_AEN, $ergebnis_LES, $ergebnis_LOE, $erg_IMP_liste, $erg_AEN_liste, $erg_LES_liste, $erg_LOE_liste );
}
function welche_dokumentartrechte_hat_benutzer( $mandant_name, $benutzer_anmeldename )
{
$ergebnis = welche_dok_akt_rechte_hat_benutzer( $mandant_name, $benutzer_anmeldename, "D" );
return $ergebnis;
}
function welche_dokumentarten_darf_benutzer_importieren( $mandant_name, $benutzer_anmeldename )
{
$ergebnis = welche_dok_akt_rechte_hat_benutzer( $mandant_name, $benutzer_anmeldename, "D" );
if ( count( $ergebnis[ 2 ] ) == 0 )
{
$ergebnis = welche_dok_akt_rechte_hat_benutzer( $mandant_name, $benutzer_anmeldename, "A" );
}
//xlog( 4, "admin.welche_dokumentarten_darf_benutzer_importieren: RC ".count( $ergebnis[ 2 ] ).": ".$ergebnis[ 1 ] );
return array( count( $ergebnis[ 2 ] ), $ergebnis[ 2 ] );
}
function welche_dokumentarten_darf_benutzer_lesen( $mandant_name, $benutzer_anmeldename )
{
$ergebnis = welche_dok_akt_rechte_hat_benutzer( $mandant_name, $benutzer_anmeldename, "D" );
return array( count( $ergebnis[ 4 ] ), $ergebnis[ 4 ] );
}
function welche_dokumentarten_darf_benutzer_aendern( $mandant_name, $benutzer_anmeldename )
{
$ergebnis = welche_dok_akt_rechte_hat_benutzer( $mandant_name, $benutzer_anmeldename, "D" );
return array( count( $ergebnis[ 3 ] ), $ergebnis[ 3 ] );
}
function welche_dokumentarten_darf_benutzer_loeschen( $mandant_name, $benutzer_anmeldename )
{
$ergebnis = welche_dok_akt_rechte_hat_benutzer( $mandant_name, $benutzer_anmeldename, "D" );
return array( count( $ergebnis[ 5 ] ), $ergebnis[ 5 ] );
}
function welche_aktenartrechte_hat_benutzer( $mandant_name, $benutzer_anmeldename )
{
$ergebnis = welche_dok_akt_rechte_hat_benutzer( $mandant_name, $benutzer_anmeldename, "A" );
return $ergebnis;
}
function welche_aktenarten_darf_benutzer_importieren( $mandant_name, $benutzer_anmeldename )
{
$ergebnis = welche_dok_akt_rechte_hat_benutzer( $mandant_name, $benutzer_anmeldename, "A" );
return array( count( $ergebnis[ 2 ] ), $ergebnis[ 2 ] );
}
function welche_aktenarten_darf_benutzer_lesen( $mandant_name, $benutzer_anmeldename )
{
$ergebnis = welche_dok_akt_rechte_hat_benutzer( $mandant_name, $benutzer_anmeldename, "A" );
return array( count( $ergebnis[ 4 ] ), $ergebnis[ 4 ] );
}
function welche_aktenarten_darf_benutzer_aendern( $mandant_name, $benutzer_anmeldename )
{
$ergebnis = welche_dok_akt_rechte_hat_benutzer( $mandant_name, $benutzer_anmeldename, "A" );
return array( count( $ergebnis[ 3 ] ), $ergebnis[ 3 ] );
}
function welche_aktenarten_darf_benutzer_loeschen( $mandant_name, $benutzer_anmeldename )
{
$ergebnis = welche_dok_akt_rechte_hat_benutzer( $mandant_name, $benutzer_anmeldename, "A" );
return array( count( $ergebnis[ 5 ] ), $ergebnis[ 5 ] );
}
function welche_dokaktenarten_darf_benutzer_lesen( $mandant_name, $benutzer_anmeldename )
{
$ergebnis = welche_dok_akt_rechte_hat_benutzer( $mandant_name, $benutzer_anmeldename );
return array( count( $ergebnis[ 4 ] ), $ergebnis[ 4 ] );
}
function welche_rechte_hat_benutzer_auf_dokuaktenart( $mandant_name, $benutzer_anmeldename, $dokart_kuerzel )
{
$e = welche_dok_akt_rechte_hat_benutzer( $mandant_name, $benutzer_anmeldename );
//xlog( 2, json_encode( $e ) );
$dokart = liefere_dokartinformationen( $mandant_name, $dokart_kuerzel );
$dokart_rechte = array();
if ( ( $e[ 0 ] > 0 ) and ( $dokart[ 0 ] > 0 ) )
{
foreach( $e[ 2 ] as $recht )
{
if ( $recht == $dokart_kuerzel )
{
$dokart_rechte[ "IMPORT" ] = "ja";
break;
}
}
if ( $dokart_rechte[ "IMPORT" ] != "ja" )
{
$dokart_rechte[ "IMPORT" ] = "nein";
}
foreach( $e[ 3 ] as $recht )
{
if ( $recht == $dokart_kuerzel )
{
$dokart_rechte[ "AENDERN" ] = "ja";
break;
}
}
if ( $dokart_rechte[ "AENDERN" ] != "ja" )
{
$dokart_rechte[ "AENDERN" ] = "nein";
}
foreach( $e[ 4 ] as $recht )
{
if ( $recht == $dokart_kuerzel )
{
$dokart_rechte[ "LESEN" ] = "ja";
break;
}
}
if ( $dokart_rechte[ "LESEN" ] != "ja" )
{
$dokart_rechte[ "LESEN" ] = "nein";
}
foreach( $e[ 5 ] as $recht )
{
if ( $recht == $dokart_kuerzel )
{
$dokart_rechte[ "LOESCHEN" ] = "ja";
break;
}
}
if ( $dokart_rechte[ "LOESCHEN" ] != "ja" )
{
$dokart_rechte[ "LOESCHEN" ] = "nein";
}
$rc = 1;
$meldung = "Liefere Rechte für Benutzer ".$benutzer_anmeldename." auf Dokumentart ".$dokart_kuerzel.".";
}
else
{
$rc = -1;
$meldung = "Es ist ein Fehler aufgetreten: ".$e[ 1 ]." | ".$dokart[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.welche_rechte_hat_benutzer_auf_dokuaktenart: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $dokart_rechte );
}
function systemrecht_anlegen( $mandant_name, $systemrecht, $rechtegruppe, $ober_systemrecht = "root" )
{
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
if ( strlen( $systemrecht ) > 0 )
{
if ( mb_strtoupper( $exekutor, "UTF-8" ) == "SUPERUSER" )
{
$exec[ 0 ] = 1;
}
else
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMINISTRATOR" );
}
if ( $exec[ 0 ] == 1 )
{
$systemrecht = mb_strtoupper( $systemrecht, "UTF-8" );
if ( strlen( $ober_systemrecht ) == 0 )
{
$ober_systemrecht = "root";
}
if ( ( strlen( $ober_systemrecht ) > 0 ) and ( $ober_systemrecht <> "root" ) )
{
$ober_systemrecht = mb_strtoupper( $ober_systemrecht, "UTF-8" );
}
$STATEMENT = "insert into ca_systemrecht ( mandant_id, ober_systemrecht, systemrecht, rechte_gruppe ) values ( ".$ok_1[ 0 ].", '".mysqli_real_escape_string( $connection, $ober_systemrecht )."', '".mysqli_real_escape_string( $connection, $systemrecht )."', ".mysqli_real_escape_string( $connection, $rechtegruppe )." )";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] == 0 )
{
$rc = 0;
$meldung = "Das Systemrecht ".$systemrecht." wurde unterhalb des Systemrechts ".$ober_systemrecht." im Mandanten ".$mandant_name." angelegt.";
}
else
{
$rc = -2;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -12;
$meldung = "Der Benutzer >".$exekutor."< verfügt nicht über ausreichende Berechtigungen.";
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Systemrecht angegeben.";
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
mysqli_close( $connection );
xlog( $level, "admin.systemrecht_anlegen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function systemrecht_loeschen( $mandant_name, $systemrecht )
{
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
if ( strlen( $systemrecht ) > 0 )
{
if ( mb_strtoupper( $exekutor, "UTF-8" ) == "SUPERUSER" )
{
$exec[ 0 ] = 1;
}
else
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMINISTRATOR" );
}
if ( $exec[ 0 ] == 1 )
{
$systemrecht = mb_strtoupper( $systemrecht, "UTF-8" );
$STATEMENT = "delete from ca_systemrecht where mandant_id = ".$ok_1[ 0 ]." and systemrecht = '".$systemrecht."'";
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_gruppe_systemrechte where systemrecht = '".$systemrecht."' and gruppen_id in ( select gruppen_id from ca_gruppe where mandant_id = ".$ok_1[ 0 ]." ) ";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] == 0 )
{
$rc = 0;
$meldung = "Das Systemrecht ".$systemrecht." wurde im Mandanten ".$mandant_name." gelöscht.";
}
else
{
$rc = -2;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -12;
$meldung = "Der Benutzer >".$exekutor."< verfügt nicht über ausreichende Berechtigungen.";
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Systemrecht angegeben.";
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.systemrecht_loeschen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $masken );
}
function liefere_alle_systemrechte( $mandant_name )
{
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$systemrechte = array();
$STATEMENT = "select systemrecht from ca_systemrecht where mandant_id = ".$ok_1[ 0 ];
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] > 0 )
{
foreach ( $ergebnis[ 1 ] as $zeile )
{
$systemrechte[ ] = $zeile[ "systemrecht" ];
}
$rc = $ergebnis[ 0 ];
$meldung = "Liefere ".$rc." Systemrechte im Mandanten ".$mandant_name.".";
}
else
{
$rc = $ergebnis[ 0 ];
$meldung = "Es wurden keine Systemrechte gefunden oder ein Fehler ist aufgetreten.";
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.liefere_alle_systemrechte: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $systemrechte );
}
/*
Gruppenzugehörigkeiten
*/
function benutzer_einer_gruppe_hinzufuegen( $mandant_name, $benutzer_anmeldename, $gruppen_name )
{
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $ok_2[ 0 ] > 0 )
{
$ok_3 = existiert_gruppe( $mandant_name, $gruppen_name );
if ( $ok_3[ 0 ] > 0 )
{
if ( mb_strtoupper( $exekutor, "UTF-8" ) == "SUPERUSER" )
{
$exec[ 0 ] = 1;
}
else
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMIN_BENUTZER_GRUPPE" );
}
if ( $exec[ 0 ] == 1 )
{
$STATEMENT = "insert into ca_benutzer_in_gruppe ( mandant_id, benutzer_id, gruppen_id ) values ( ".$ok_1[ 0 ].", ".$ok_2[ 0 ].", ".$ok_3[ 0 ]." )";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = 0;
$meldung = "Der Benutzer >".$benutzer_anmeldename."< (ID ".$ok_2[ 0 ].") wurde im Mandant >".$mandant_name."< (ID ".$ok_1[ 0 ].") der Gruppe >".$gruppen_name."< (ID ".$ok_3[ 0 ].") zugewiesen.";
}
else
{
$rc = -4;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -12;
$meldung = "Der Benutzer >".$exekutor."< verfügt nicht über ausreichende Berechtigungen.";
}
}
else
{
$rc = $ok_3[ 0 ];
$meldung = $ok_3[ 1 ];
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.benutzer_einer_gruppe_zuweisen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function benutzer_aus_gruppe_entfernen( $mandant_name, $benutzer_anmeldename, $gruppen_name, $force = false )
{
if ( ( $force !== true ) && ( $force !== false ) )
{
$force = false;
}
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
if ( ( ! ( ( mb_strtoupper( $benutzer_anmeldename, "UTF-8" ) == "CA_ADMIN" ) and ( mb_strtoupper( $gruppen_name, "UTF-8" ) == "ADMINISTRATOREN" ) ) ) || ( $force === true ) )
{
$ok_2 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $ok_2[ 0 ] > 0 )
{
$ok_3 = existiert_gruppe( $mandant_name, $gruppen_name );
if ( $ok_3[ 0 ] > 0 )
{
if ( mb_strtoupper( $exekutor, "UTF-8" ) == "SUPERUSER" )
{
$exec[ 0 ] = 1;
}
else
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMIN_BENUTZER_GRUPPE" );
}
if ( $exec[ 0 ] == 1 )
{
$STATEMENT = "delete from ca_benutzer_in_gruppe where mandant_id = ".$ok_1[ 0 ]." and benutzer_id = ".$ok_2[ 0 ]." and gruppen_id = ".$ok_3[ 0 ];
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = 0;
$meldung = "Der Benutzer >".$benutzer_anmeldename."< (ID ".$ok_2[ 0 ].") wurde im Mandant >".$mandant_name."< (ID ".$ok_1[ 0 ].") aus der Gruppe >".$gruppen_name."< (ID ".$ok_3[ 0 ].") entfernt.";
}
else
{
$rc = -4;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -12;
$meldung = "Der Benutzer >".$exekutor."< verfügt nicht über ausreichende Berechtigungen.";
}
}
else
{
$rc = $ok_3[ 0 ];
$meldung = $ok_3[ 1 ];
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = -7;
$meldung = "Der Administrationsbenutzer ca_admin kann nicht aus der Administratorgruppe entfernt werden.";
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.benutzer_aus_gruppe_entfernen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function gruppe_einer_gruppe_hinzufuegen( $mandant_name, $ober_gruppe, $unter_gruppe )
{
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_gruppe( $mandant_name, $ober_gruppe );
if ( $ok_2[ 0 ] > 0 )
{
$ok_3 = existiert_gruppe( $mandant_name, $unter_gruppe );
if ( $ok_3[ 0 ] > 0 )
{
if ( mb_strtoupper( $exekutor, "UTF-8" ) == "SUPERUSER" )
{
$exec[ 0 ] = 1;
}
else
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMIN_BENUTZER_GRUPPE" );
}
if ( $exec[ 0 ] == 1 )
{
$STATEMENT = "insert into ca_gruppe_in_gruppe ( ober_gruppen_id, unter_gruppen_id ) values ( ".$ok_2[ 0 ].", ".$ok_3[ 0 ]." )";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = 0;
$meldung = "Die Gruppe >".$unter_gruppe."< (ID ".$ok_3[ 0 ].") wurde im Mandant >".$mandant_name."< (ID ".$ok_1[ 0 ].") der Gruppe >".$ober_gruppe."< (ID ".$ok_2[ 0 ].") hinzugefügt.";
}
else
{
$rc = -4;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -12;
$meldung = "Der Benutzer >".$exekutor."< verfügt nicht über ausreichende Berechtigungen.";
}
}
else
{
$rc = $ok_3[ 0 ];
$meldung = $ok_3[ 1 ];
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.gruppe_einer_gruppe_hinzufuegen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function gruppe_aus_einer_gruppe_entfernen( $mandant_name, $ober_gruppe, $unter_gruppe, $force = false )
{
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_gruppe( $mandant_name, $ober_gruppe );
if ( $ok_2[ 0 ] > 0 )
{
$ok_3 = existiert_gruppe( $mandant_name, $unter_gruppe );
if ( $ok_3[ 0 ] > 0 )
{
if ( mb_strtoupper( $exekutor, "UTF-8" ) == "SUPERUSER" )
{
$exec[ 0 ] = 1;
}
else
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMIN_BENUTZER_GRUPPE" );
}
if ( $exec[ 0 ] == 1 )
{
$STATEMENT = "delete from ca_gruppe_in_gruppe where ( ober_gruppen_id = ".$ok_2[ 0 ]." and unter_gruppen_id = ".$ok_3[ 0 ]." )";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = 0;
$meldung = "Die Gruppe >".$unter_gruppe."< (ID ".$ok_3[ 0 ].") wurde im Mandant >".$mandant_name."< (ID ".$ok_1[ 0 ].") aus der Gruppe >".$ober_gruppe."< (ID ".$ok_2[ 0 ].") entfernt.";
}
else
{
$rc = -4;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -12;
$meldung = "Der Benutzer >".$exekutor."< verfügt nicht über ausreichende Berechtigungen.";
}
}
else
{
$rc = $ok_3[ 0 ];
$meldung = $ok_3[ 1 ];
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.gruppe_aus_einer_gruppe_entfernen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function in_welchen_gruppen_ist_gruppe_mitglied( $mandant_name, $gruppen_name )
{
$gruppenliste = array();
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_gruppe( $mandant_name, $gruppen_name );
if ( $ok_2[ 0 ] > 0 )
{
$STATEMENT = "select g.gruppen_name g_name from ca_gruppe g, ca_gruppe_in_gruppe m where m.unter_gruppen_id = ".$ok_2[ 0 ]." and m.ober_gruppen_id = g.gruppen_id";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] > 0 )
{
foreach ( $ergebnis[ 1 ] as $zeile )
{
$gruppenliste[ ] = (string)$zeile[ "g_name" ];
}
}
else
{
$rc = -4;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
$rc = count( $gruppenliste );
$meldung = "Die Gruppe ".$gruppen_name." ist im Mandant >".$mandant_name."< in ".$rc." Gruppen enthalten.";
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.in_welchen_gruppen_ist_gruppe_mitglied: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $gruppenliste );
}
function liefere_benutzer_die_in_gruppe_sind( $mandant_name, $gruppen_name )
{
$benutzerliste = array();
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_gruppe( $mandant_name, $gruppen_name );
if ( $ok_2[ 0 ] > 0 )
{
$STATEMENT = "select b.benutzer_id, b.benutzer_anmeldename b_aname from ca_benutzer b, ca_benutzer_in_gruppe g where g.benutzer_id = b.benutzer_id and g.gruppen_id = ".$ok_2[ 0 ];
//xlog( 5, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] > 0 )
{
foreach( $ergebnis[ 1 ] as $zeile )
{
$benutzerliste[ ] = (string)$zeile[ "b_aname" ];
}
}
$rc = count( $benutzerliste );
$meldung = "Liefere ".$rc." Gruppenmitglieder der Gruppe ".$gruppen_name." (Mandant >".$mandant_name."<).";
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.liefere_benutzer_die_in_gruppe_sind: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $benutzerliste );
}
function in_welchen_gruppen_ist_benutzer_mitglied( $mandant_name, $benutzer_anmeldename )
{
// return array( $rc, $meldung, $gruppenliste, $direkte_gruppenliste, $indirekte_gruppenliste_gefiltert );
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $ok_2[ 0 ] > 0 )
{
$STATEMENT = "select big.gruppen_id g_id, g.gruppen_name g_name from ca_benutzer_in_gruppe big, ca_gruppe g where big.benutzer_id = ".$ok_2[ 0 ]." and big.gruppen_id = g.gruppen_id;";
//xlog( 4, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$direkte_gruppenliste = array();
$indirekte_gruppenliste = array();
if ( $ergebnis[ 0 ] <> -1 )
{
if ( $ergebnis[ 0 ] > 0 )
{
foreach ( $ergebnis[ 1 ] as $zeile )
{
$direkte_gruppenliste[ ] = (string)$zeile[ "g_name" ];
$ergebnis_2 = in_welchen_gruppen_ist_gruppe_mitglied( $mandant_name, (string)$zeile[ "g_name" ] );
$neue_indirekte_gruppenliste = $ergebnis_2[ 2 ];
while ( count( $neue_indirekte_gruppenliste ) > count( $indirekte_gruppenliste ) )
{
$indirekte_gruppenliste = $neue_indirekte_gruppenliste;
foreach( $indirekte_gruppenliste as $gruppe )
{
$ergebnis_3 = in_welchen_gruppen_ist_gruppe_mitglied( $mandant_name, $gruppe );
$neue_indirekte_gruppenliste = array_unique( array_merge( $ergebnis_3[ 2 ], $neue_indirekte_gruppenliste ) );
}
}
}
}
else
{
$rc = 0;
$meldung = "Der Benutzer ".$benutzer_anmeldename." ist im Mandanten ".$mandant_name." in keiner Gruppe Mitglied.";
}
}
else
{
$rc = -4;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
$indirekte_gruppenliste_gefiltert = array();
foreach( $indirekte_gruppenliste as $igruppe )
{
foreach( $direkte_gruppenliste as $dgruppe )
{
if ( $dgruppe == $igruppe )
{
$flag = true;
break;
}
else
{
$flag = false;
}
}
if ( ! $flag )
{
$indirekte_gruppenliste_gefiltert[] = $igruppe;
}
}
$indirekte_gruppenliste_gefiltert = array_unique( $indirekte_gruppenliste_gefiltert );
$gruppenliste = array_merge( $direkte_gruppenliste, $indirekte_gruppenliste_gefiltert );
$rc = bcadd( count( $direkte_gruppenliste ), count( $indirekte_gruppenliste_gefiltert ), 0 );
$meldung = "Liefere ".$rc." Gruppen, in denen der Benutzer >".$benutzer_anmeldename."< des Mandants >".$mandant_name."< Mitglied ist (davon ".count( $direkte_gruppenliste )." direkte Gruppenmitgliedschaften und ".count( $indirekte_gruppenliste_gefiltert )." indirekte Gruppenmitgliedschaften).";
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.in_welchen_gruppen_ist_benutzer_mitglied: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $gruppenliste, $direkte_gruppenliste, $indirekte_gruppenliste_gefiltert );
}
function in_welchen_gruppen_ist_benutzer_nicht_mitglied( $mandant_name, $benutzer_anmeldename )
{
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $ok_2[ 0 ] > 0 )
{
$gruppenliste = array();
$STATEMENT = "select gruppen_name from ca_gruppe where mandant_id = ".$ok_1[ 0 ]." and gruppen_id not in ( select gruppen_id from ca_benutzer_in_gruppe where benutzer_id = ".$ok_2[ 0 ]." )";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
if ( $ergebnis[ 0 ] > 0 )
{
foreach( $ergebnis[ 1 ] as $zeile )
{
$gruppenliste[] = $zeile[ "gruppen_name" ];
}
$rc = count( $gruppenliste );
$meldung = "Der Benutzer ".$benutzer_anmeldename." ist im Mandanten ".$mandant_name." in ".$rc." Gruppen Mitglied.";
}
else
{
$rc = 0;
$meldung = "Der Benutzer ".$benutzer_anmeldename." ist im Mandanten ".$mandant_name." in jeder Gruppe Mitglied.";
}
}
else
{
$rc = -4;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.in_welchen_gruppen_ist_benutzer_nicht_mitglied: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $gruppenliste );
}
/*
benutzerspezifische Einstellungen
*/
function liefere_benutzerspezifische_einstellung( $mandant_name, $benutzer_anmeldename, $einstellung )
{
// liefert nur den Wert
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $ok_2[ 0 ] > 0 )
{
if ( strlen( $einstellung ) > 0 )
{
$STATEMENT = "select wert from ca_benutzer_einstellungen where benutzer_id = ".$ok_2[ 0 ]." and einstellung = '".$einstellung."'";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] > 0 )
{
$rc = $ergebnis[ 1 ][ 0 ][ "wert" ];
}
else
{
$rc = "";
}
}
else
{
$rc = "";
}
}
else
{
$rc = "";
}
}
else
{
$rc = "";
}
xlog( 6, "admin.liefere_benutzerspezifische_einstellung: Liefere Wert ".$rc." für die Einstellung ".$einstellung."." );
return $rc;
}
function liefere_benutzerspezifische_einstellung_2( $mandant_name, $benutzer_anmeldename, $einstellung )
{
// liefert ein Array
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $ok_2[ 0 ] > 0 )
{
if ( strlen( $einstellung ) > 0 )
{
$STATEMENT = "select wert from ca_benutzer_einstellungen where benutzer_id = ".$ok_2[ 0 ]." and einstellung = '".$einstellung."'";
//xlog( 4, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] > 0 )
{
$rc = 0;
$wert = $ergebnis[ 1 ][ 0 ][ "wert" ];
$meldung = "Die Einstellung >".$einstellung."< ist für den Benutzer >".$benutzer_anmeldename."< im Mandanten >".$mandant_name."< auf folgenden Wert gesetzt: >".$wert."<.";
}
else
{
$rc = -4;
$meldung = "Die Einstellung >".$einstellung."< ist für den Benutzer >".$benutzer_anmeldename."< im Mandanten >".$mandant_name."< nicht gesetzt.";
}
}
else
{
$rc = -5;
$meldung = "Es wurde keine Einstellung angegeben.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
xlog( 6, "admin.liefere_benutzerspezifische_einstellung_2: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $wert );
}
function liefere_benutzerspezifische_einstellung_3( $mandant_name, $benutzer_anmeldename, $einstellung )
{
// liefert ein Array mit allen Infos über die Einstellung
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $ok_2[ 0 ] > 0 )
{
if ( strlen( $einstellung ) > 0 )
{
$STATEMENT = "select kategorie, einstellung, bezeichnung, wertemenge, benutzer_darf_wert_aendern, beschreibung, benutzer_id, wert from ca_benutzer_einstellungen where benutzer_id = ".$ok_2[ 0 ]." and einstellung = '".$einstellung."'";
xlog( 4, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] > 0 )
{
$rc = 0;
$infos = $ergebnis[ 1 ][ 0 ];
$meldung = "Die Einstellung >".$einstellung."< ist für den Benutzer >".$benutzer_anmeldename."< im Mandanten >".$mandant_name."< auf folgenden Wert gesetzt: >".$infos[ "wert" ]."<.";
}
else
{
$rc = -4;
$meldung = "Die Einstellung >".$einstellung."< ist für den Benutzer >".$benutzer_anmeldename."< im Mandanten >".$mandant_name."< nicht gesetzt.";
}
}
else
{
$rc = -5;
$meldung = "Es wurde keine Einstellung angegeben.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
xlog( 6, "admin.liefere_benutzerspezifische_einstellung_3: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $infos );
}
function liefere_benutzerspezifische_einstellungen_kategorien( $mandant_name, $benutzer_anmeldename )
{
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $ok_2[ 0 ] > 0 )
{
$kategorien = array();
$STATEMENT = "select distinct kategorie from ca_benutzer_einstellungen where benutzer_id = ".$ok_2[ 0 ]." order by kategorie";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] > 0 )
{
foreach ( $ergebnis[ 1 ] as $zeile )
{
$kategorien[] = $zeile[ "kategorie" ];
}
$rc = count( $kategorien );
$meldung = "Liefere ".$rc." Kategorien für Benutzer ".$benutzer_anmeldename." im Mandanten ".$mandant_name.".";
}
else
{
$rc = -4;
$meldung = "Es wurden keine Einstellungen für den Benutzer ".$benutzer_anmeldename." im Mandanten ".$mandant_name." gefunden.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.liefere_benutzerspezifische_einstellungen_kategorien: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $kategorien );
}
function aktualisiere_benutzerspezifische_einstellung( $mandant_name, $benutzer_anmeldename, $einstellung, $neuer_wert, $kategorie = "Sonstiges", $wertemenge = "", $benutzer_darf_wert_aendern = "ja", $bezeichnung = "Einstellung", $beschreibung = "" )
{
// setzt Wertemenge nur, wenn sie angegeben wurde (leere Angabe => keine Änderung der bestehenden Konfiguration), das gleiche gilt für den Parameter "Benutzer darf Wert ändern".
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $ok_2[ 0 ] > 0 )
{
if ( strlen( $einstellung ) > 0 )
{
$wert = liefere_benutzerspezifische_einstellung_2( $mandant_name, $benutzer_anmeldename, $einstellung );
if ( $wert[ 0 ] == 0 )
{
// Eintrag gefunden
if ( strlen( $wertemenge ) > 0 )
{
$STATEMENT_ERW = ", wertemenge = '".mysqli_real_escape_string( $connection, $wertemenge )."'";
}
if ( strlen( $benutzer_darf_wert_aendern ) > 0 )
{
$STATEMENT_ERW = $STATEMENT_ERW.", benutzer_darf_wert_aendern = '".mysqli_real_escape_string( $connection, $benutzer_darf_wert_aendern )."'";
}
$STATEMENT = "update ca_benutzer_einstellungen set wert = '".mysqli_real_escape_string( $connection, $neuer_wert )."'".$STATEMENT_ERW." where benutzer_id = ".$ok_2[ 0 ]." and einstellung = '".$einstellung."'";
//xlog( 4, $STATEMENT );
xdb( $STATEMENT );
$rc = 1;
$meldung = "Die Einstellung ".$einstellung." für den Benutzer ".$benutzer_anmeldename." im Mandanten ".$mandant_name." wurde auf den Wert >".$neuer_wert."< gesetzt.";
}
else
{
// Eintrag nicht gefunden
$STATEMENT = "insert into ca_benutzer_einstellungen ( benutzer_id, kategorie, einstellung, wert, wertemenge, benutzer_darf_wert_aendern, beschreibung, bezeichnung ) values ( ".$ok_2[ 0 ].", '".mysqli_real_escape_string( $connection, $kategorie )."', '".mysqli_real_escape_string( $connection, $einstellung )."', '".mysqli_real_escape_string( $connection, $neuer_wert )."', '".mysqli_real_escape_string( $connection, $wertemenge )."', '".mysqli_real_escape_string( $connection, $benutzer_darf_wert_aendern )."', '".mysqli_real_escape_string( $connection, $beschreibung )."', '".mysqli_real_escape_string( $connection, $bezeichnung )."' ) ";
xdb( $STATEMENT );
$rc = 2;
$meldung = "Die Einstellung ".$einstellung." für den Benutzer ".$benutzer_anmeldename." im Mandanten ".$mandant_name." wurde auf den Wert >".$neuer_wert."< gesetzt.";
}
}
else
{
$rc = -5;
$meldung = "Es wurde keine Einstellung angegeben.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
mysqli_close( $connection );
xlog( $level, "admin.aktualisiere_benutzerspezifische_einstellung: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function aktualisiere_benutzerspezifische_einstellung_2( $mandant_name, $benutzer_anmeldename, $einstellung, $neuer_wert, $kategorie = "Sonstiges", $wertemenge, $benutzer_darf_wert_aendern = "ja", $bezeichnung = "", $beschreibung = "" )
{
// setzt immer auch die Wertemenge (leere Angabe => setzen von "keine Wertemenge") und das "benutzer darf ändern"-Flag (dito).
$ok_1 = existiert_mandant( $mandant_name );
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $ok_2[ 0 ] > 0 )
{
if ( strlen( $einstellung ) > 0 )
{
$wert = liefere_benutzerspezifische_einstellung_2( $mandant_name, $benutzer_anmeldename, $einstellung );
if ( $wert[ 0 ] == 0 )
{
// Eintrag gefunden
$STATEMENT = "update ca_benutzer_einstellungen set wert = '".mysqli_real_escape_string( $connection, $neuer_wert )."', wertemenge = '".mysqli_real_escape_string( $connection, $wertemenge )."', benutzer_darf_wert_aendern = '".mysqli_real_escape_string( $connection, $benutzer_darf_wert_aendern )."' where benutzer_id = ".$ok_2[ 0 ]." and einstellung = '".mysqli_real_escape_string( $connection, $einstellung )."'";
//xlog( 4, $STATEMENT );
xdb( $STATEMENT );
$rc = 1;
$meldung = "Die Einstellung ".$einstellung." für den Benutzer ".$benutzer_anmeldename." im Mandanten ".$mandant_name." wurde auf den Wert >".$neuer_wert."< gesetzt.";
}
else
{
if ( strlen( $bezeichnung ) == 0 )
{
$bezeichnung = "Einstellung ".$einstellung;
}
// Eintrag nicht gefunden
$STATEMENT = "insert into ca_benutzer_einstellungen ( benutzer_id, kategorie, einstellung, wert, wertemenge, benutzer_darf_wert_aendern, beschreibung, bezeichnung ) values ( ".$ok_2[ 0 ].", '".mysqli_real_escape_string( $connection, $kategorie )."', '".mysqli_real_escape_string( $connection, $einstellung )."', '".mysqli_real_escape_string( $connection, $neuer_wert )."', '".mysqli_real_escape_string( $connection, $wertemenge )."', '".mysqli_real_escape_string( $connection, $benutzer_darf_wert_aendern )."', '".mysqli_real_escape_string( $connection, $beschreibung )."', '".mysqli_real_escape_string( $connection, $bezeichnung )."' ) ";
xdb( $STATEMENT );
$rc = 2;
$meldung = "Die Einstellung ".$einstellung." für den Benutzer ".$benutzer_anmeldename." im Mandanten ".$mandant_name." wurde auf den Wert >".$neuer_wert."< gesetzt.";
}
}
else
{
$rc = -5;
$meldung = "Es wurde keine Einstellung angegeben.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
mysqli_close( $connection );
xlog( $level, "admin.aktualisiere_benutzerspezifische_einstellung: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function liefere_benutzerspezifische_einstellungen_anhand_kategorie( $mandant_name, $benutzer_anmeldename, $kategorie )
{
/*
Liefert die Einstellungen und die Werte, verzichtet aber auf genauere Informationen (Wertemenge, ...)
*/
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $ok_2[ 0 ] > 0 )
{
if ( strlen( $kategorie ) > 0 )
{
$STATEMENT = "select einstellung, wert from ca_benutzer_einstellungen where benutzer_id = ".$ok_2[ 0 ]." and kategorie = '".$kategorie."' order by einstellung";
$ergebnis = xdb( $STATEMENT );
$einstellungen = array();
if ( $ergebnis[ 0 ] > 0 )
{
foreach( $ergebnis[ 1 ] as $zeile )
{
$einstellungen[ $zeile[ "einstellung" ] ] = $zeile[ "wert" ];
}
$rc = count( $einstellungen );
$meldung = "Für den Benutzer ".$benutzer_anmeldename." im Mandanten ".$mandant_name." wurden ".$rc." Einstellungen in der Kategorie ".$kategorie." gefunden.";
}
else
{
$rc = -4;
$meldung = "Es wurden keine Einstellungen für den Benutzer ".$benutzer_anmeldename." im Mandanten ".$mandant_name." gefunden.";
}
}
else
{
$rc = -5;
$meldung = "Es wurde keine Kategorie angegeben.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.liefere_benutzerspezifische_einstellungen_anhand_kategorie: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $einstellungen );
}
function liefere_benutzerspezifische_einstellungen_anhand_kategorie_vollstaendig( $mandant_name, $benutzer_anmeldename, $kategorie )
{
/*
Liefert alle Einstellungen mit allen Parametern (Wertemenge, Benutzer darf Wert ändern, ...)
*/
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $ok_2[ 0 ] > 0 )
{
if ( strlen( $kategorie ) > 0 )
{
$STATEMENT = "select einstellung, bezeichnung, wert, kategorie, wertemenge, benutzer_darf_wert_aendern, beschreibung from ca_benutzer_einstellungen where benutzer_id = ".$ok_2[ 0 ]." and kategorie = '".$kategorie."' order by einstellung";
$ergebnis = xdb( $STATEMENT );
$einstellungen = array();
if ( $ergebnis[ 0 ] > 0 )
{
$einstellungen = $ergebnis[ 1 ];
$rc = count( $einstellungen );
$meldung = "Für den Benutzer ".$benutzer_anmeldename." im Mandanten ".$mandant_name." wurden ".$rc." Einstellungen in der Kategorie ".$kategorie." gefunden.";
}
else
{
$rc = -4;
$meldung = "Es wurden keine Einstellungen für den Benutzer ".$benutzer_anmeldename." im Mandanten ".$mandant_name." gefunden.";
}
}
else
{
$rc = -5;
$meldung = "Es wurde keine Kategorie angegeben.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.liefere_benutzerspezifische_einstellungen_anhand_kategorie: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $einstellungen );
}
function loesche_benutzerspezifische_einstellung( $mandant_name, $benutzer_anmeldename, $einstellung )
{
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
$ok_2 = existiert_benutzer( $mandant_name, $benutzer_anmeldename );
if ( $ok_2[ 0 ] > 0 )
{
if ( strlen( $einstellung ) > 0 )
{
$STATEMENT = "delete from ca_benutzer_einstellungen where benutzer_id = ".$ok_2[ 0 ]." and einstellung = '".$einstellung."'";
//xlog( 4, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] == 0 )
{
$rc = 0;
$meldung = "Die Einstellung >".$einstellung."< wurde für den Benutzer >".$benutzer_anmeldename."< im Mandanten >".$mandant_name."< gelöscht.";
}
else
{
$rc = -4;
$meldung = "Es ist ein Fehler aufgetreten: ".$ergebnis[ 1 ];
}
}
else
{
$rc = -5;
$meldung = "Es wurde keine Einstellung angegeben.";
}
}
else
{
$rc = $ok_2[ 0 ];
$meldung = $ok_2[ 1 ];
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
xlog( 4, "admin.loesche_benutzerspezifische_einstellung: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $wert );
}
/*
Arbeitsfunktionen
*/
function pruefe_password( $mandant_name, $password )
{
/****************
BESCHREIBUNG_____Prüft ein Passwort, ob es die in der DB hinterlegten Richtlinien für Passwörter einhält
RETURNS_____array( (integer) Returncode, (string) Meldung) ($rc = 0 wenn alles ok, < 0 wenn Fehler)
****************/
if ( strlen( $password ) <> 0 )
{
$pruefe_grossbuchstaben = liefere_konfig( $mandant_name, "pwd_rl_grossbuchstaben" );
$pruefe_kleinbuchstaben = liefere_konfig( $mandant_name, "pwd_rl_kleinbuchstaben" );
$pruefe_zahlen = liefere_konfig( $mandant_name, "pwd_rl_zahlen" );
$pruefe_sonderzeichen = liefere_konfig( $mandant_name, "pwd_rl_sonderzeichen" );
$pruefe_min_laenge = liefere_konfig( $mandant_name, "pwd_rl_min_laenge" );
$pruefe_max_laenge = liefere_konfig( $mandant_name, "pwd_rl_max_laenge" );
$min_grp = liefere_konfig( $mandant_name, "pwd_rl_min_zeichgrp" );
$max_grp = liefere_konfig( $mandant_name, "pwd_rl_max_zeichgrp" );
// Großbuchstaben
if ( $pruefe_grossbuchstaben == "ja" )
{
if ( preg_match( "/[A-Z]/", $password ) == "1" )
{
$ergebnis_grossbuchstaben = "1";
}
else
{
$ergebnis_grossbuchstaben = "0";
$fehlermeldung = "Obwohl benötigt, wurden im Passwort keine Großbuchstaben (A, B, C, ...) verwendet.";
}
}
else
{
$ergebnis_grossbuchstaben = "1";
}
// Kleinbuchstaben
if ( ( $pruefe_kleinbuchstaben == "ja" ) )
{
if ( $ergebnis_grossbuchstaben == "1" )
{
if ( preg_match( "/[a-z]/", $password ) == "1" )
{
$ergebnis_kleinbuchstaben = "1";
}
else
{
$ergebnis_kleinbuchstaben = "0";
$fehlermeldung = "Obwohl benötigt, wurden im Passwort keine Kleinbuchstaben (a, b, c, ...) verwendet.";
}
}
else
{
$ergebnis_kleinbuchstaben = "0";
}
}
else
{
$ergebnis_kleinbuchstaben = "1";
}
// Zahlen
if ( $pruefe_zahlen == "ja" )
{
if ( $ergebnis_kleinbuchstaben == "1" )
{
if ( preg_match( "/[0-9]/", $password ) == "1" )
{
$ergebnis_zahlen = "1";
}
else
{
$ergebnis_zahlen = "0";
$fehlermeldung = "Obwohl benötigt, wurden im Passwort keine Zahlen (1, 2, 3, ...) verwendet.";
}
}
else
{
$ergebnis_zahlen = "0";
}
}
else
{
$ergebnis_zahlen = "1";
}
// Sonderzeichen
if ( $pruefe_sonderzeichen == "ja" )
{
if ( $ergebnis_zahlen == "1" )
{
if ( preg_match( "/[!§$%&()=?+#\-_ \[\]\{\}]/", $password ) == "1" )
{
$ergebnis_sonderzeichen = "1";
}
else
{
$ergebnis_sonderzeichen = "0";
$fehlermeldung = "Obwohl benötigt, wurden im Passwort keine Sonderzeichen ( !§$%&()=?+#-_ []{} ) verwendet.";
}
}
else
{
$ergebnis_sonderzeichen = "0";
}
}
else
{
$ergebnis_sonderzeichen = "1";
}
// Passwortmindestlänge
if ( $ergebnis_sonderzeichen == "1" )
{
if ( strlen( $password ) >= $pruefe_min_laenge )
{
$ergebnis_min_laenge = "1";
}
else
{
$ergebnis_min_laenge = "0";
$fehlermeldung = "Das Passwort ist zu kurz (mindestens ".$pruefe_min_laenge." Zeichen).";
}
}
else
{
$ergebnis_min_laenge = "0";
}
// Passwortmaximumlänge
if ( $ergebnis_min_laenge == "1" )
{
if ( strlen( $password ) <= $pruefe_max_laenge )
{
$ergebnis_max_laenge = "1";
}
else
{
$ergebnis_max_laenge = "0";
$fehlermeldung = "Das Passwort ist zu lang (maximal ".$pruefe_max_laenge." Zeichen).";
}
}
else
{
$ergebnis_max_laenge = "0";
}
// Passwort-Zeichengruppen
$zeichengrp = bcadd( bcadd( preg_match( "/[A-Z]/", $password ), preg_match( "/[a-z]/", $password ) ), bcadd( preg_match( "/[0-9]/", $password ), preg_match( "/[!§$%&()=?+#\-_ \[\]\{\}]/", $password ) ) );
if ( $zeichengrp >= $min_grp )
{
if ( $zeichengrp <= $max_grp )
{
$ergebnis_zeichengrp = "1";
}
else
{
$ergebnis_zeichengrp = "0";
$fehlermeldung = "Es wurden zuviele Zeichengruppen (".$zeichengrp.") verwendet (max. erlaubt: ".$max_grp.").";
}
}
else
{
$ergebnis_zeichengrp = "0";
$fehlermeldung = "Es wurden zuwenige Zeichengruppen (".(int)$zeichengrp.") verwendet (min. benötigt: ".$min_grp.").";
}
// Zusammenfassen der einzelnen Prüfungen
$gesamt_ergebnis = $ergebnis_grossbuchstaben.$ergebnis_kleinbuchstaben.$ergebnis_zahlen.$ergebnis_sonderzeichen.$ergebnis_min_laenge.$ergebnis_max_laenge.$ergebnis_zeichengrp;
if ( strpos( $gesamt_ergebnis, "0" ) === false )
{
// das Ergebnis besteht nur aus Einsen "1", also ist alles gut
$rc = 0;
$meldung = "Das Passwort entspricht den Anforderungen.";
}
else
{
// das Ergebnis enthält Nullen "0", also wurde eine Richtlinie nicht eingehalten.
$rc = -1;
$meldung = $fehlermeldung;
}
}
else
{
$rc = -2;
$meldung = "Es wurde kein Passwort zur Prüfung übergeben.";
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.pruefe_password: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function existiert_dokument( $mandant_name, $dokument_id )
{
/****************
BESCHREIBUNG_____Prüft, ob ein Dokument existiert
RETURNS_____array( Dokument-ID, Meldung )
****************/
if ( strlen( $dokument_id ) > 0 )
{
$ok = existiert_mandant( $mandant_name );
// Feststellen der Dokument-ID zum Gruppennamen
$STATEMENT = "select i.dok_id from ca_index i, ca_dok_ablage a where i.dok_id = ".$dokument_id." and a.mandant_id = ".$ok[ 0 ]." and i.dok_id = a.dok_id;";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
if ( $ergebnis[ 0 ] > 0 )
{
$rc = $ergebnis[ 1 ][ 0 ][ "dok_id" ];
$meldung = "Das Dokument ".$dokument_id." existiert im Mandanten ".$mandant_name.".";
}
else
{
$rc = -1;
$meldung = "Das Dokument ".$gruppen_name." existiert im Mandanten ".$mandant_name." nicht.";
}
}
else
{
$rc = -1;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -1;
$meldung = "Es wurde keine Dokument-ID angegeben.";
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.existiert_dokument: ".$meldung );
return array( $rc, $meldung );
}
function attribut_anlegen( $mandant_name, $attrib_name, $attrib_db_spalte, $attrib_wertemenge, $attrib_beschreibung )
{
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok = existiert_mandant( $mandant_name );
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
if ( $ok[ 0 ] > 0 )
{
if ( mb_strtoupper( $exekutor, "UTF-8" ) == "SUPERUSER" )
{
$exec[ 0 ] = 1;
}
else
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMINISTRATOR" );
}
if ( $exec[ 0 ] == 1 )
{
if ( strlen( $attrib_name ) > 0 )
{
if ( strlen( $attrib_db_spalte ) > 0 )
{
$raus = false;
if ( strlen( $attrib_wertemenge ) > 0 )
{
$ergebnis = existiert_wertemenge( $mandant_name, $attrib_wertemenge );
if ( $ergebnis[ 0 ] <> 1 )
{
$raus = true;
}
}
$a = liefere_attributinformationen( $mandant_name, $attrib_name );
if ( $a[ 0 ] > 0 )
{
$raus = true;
$ergebnis[ 0 ] = -3;
$ergebnis[ 1 ] = "Das Attribut ".$attrib_name." existiert bereits.";
}
if ( $raus == false )
{
$STATEMENT = "insert into ca_attribut ( mandant_id, attrib_name, attrib_db_spalte, attrib_wertemenge, attrib_beschreibung, attrib_erstellt_am, attrib_geaendert_am ) values ( ".$ok[ 0 ].", '".mysqli_real_escape_string( $connection, $attrib_name )."', '".mysqli_real_escape_string( $connection, $attrib_db_spalte )."', '".mysqli_real_escape_string( $connection, $attrib_wertemenge )."', '".mysqli_real_escape_string( $connection, $attrib_beschreibung )."', '".time()."', '' );";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] > 0 )
{
$rc = $ergebnis[ 0 ];
$meldung = "Das Attribut <".$attrib_name."> wurde mit der ID ".$ergebnis[0]." angelegt.";
}
else
{
$rc = $ergebnis[ 0 ];
$meldung = $ergebnis[ 1 ];
}
}
else
{
$rc = $ergebnis[ 0 ];
$meldung = $ergebnis[ 1 ];
}
}
else
{
$rc = -2;
$meldung = "Es wurde keine Ziel-DB-Spalte angegeben.";
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Attributname angegeben.";
}
}
else
{
$rc = -12;
$meldung = "Der ausführende Benutzer >".$exekutor."< besitzt nicht das notwendige Recht.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
mysqli_close( $connection );
xlog( $level, "admin.erstelle_attribut: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function liefere_attributinformationen( $mandant_name, $attrib_name )
{
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok = existiert_mandant( $mandant_name );
if ( $ok[ 0 ] > 0 )
{
if ( strlen( $attrib_name ) > 0 )
{
$STATEMENT = "select mandant_id, attrib_id, attrib_name, attrib_db_spalte, attrib_wertemenge, attrib_beschreibung, attrib_erstellt_am, attrib_geaendert_am from ca_attribut where mandant_id = ".$ok[0]." and attrib_name = '".$attrib_name."';";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] > 0 )
{
$zeile = $ergebnis[ 1 ][ 0 ];
$attribut_array = array( );
$attribut_array[ "mandant_id" ] = (int) $zeile[ "mandant_id" ];
$attribut_array[ "attrib_id" ] = (int) $zeile[ "attrib_id" ];
$attribut_array[ "attrib_name" ] = (string) $zeile[ "attrib_name" ];
$attribut_array[ "attrib_db_spalte" ] = (string) $zeile[ "attrib_db_spalte" ];
$attribut_array[ "attrib_wertemenge" ] = (string) $zeile[ "attrib_wertemenge" ];
$attribut_array[ "attrib_beschreibung" ] = (string) $zeile[ "attrib_beschreibung" ];
$attribut_array[ "attrib_erstellt_am" ] = (string) $zeile[ "attrib_erstellt_am" ];
if ( strlen( $zeile[ "attrib_geaendert_am" ] ) > 0 )
{
$attrib_geaendert_am = (string) $zeile[ "attrib_geaendert_am" ];
}
else
{
$attrib_geaendert_am = "";
}
$attribut_array[ "attrib_geaendert_am" ] = $attrib_geaendert_am;
$rc = $attribut_array[ "attrib_id" ];
$meldung = "Liefere Informationen zum Attribut ".$attrib_name." im Mandanten ".$mandant_name.".";
}
else
{
if ( $ergebnis[ 0 ] == 0 )
{
$rc = 0;
$meldung = "Das Attribut ".$attrib_name." wurde nicht gefunden.";
}
else
{
$rc = -3;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Attributname angegeben.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.liefere_attributinformationen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $attribut_array );
}
function attribut_loeschen( $mandant_name, $attrib_name )
{
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok = existiert_mandant( $mandant_name );
if ( $ok[ 0 ] > 0 )
{
if ( mb_strtoupper( $exekutor, "UTF-8" ) == "SUPERUSER" )
{
$exec[ 0 ] = 1;
}
else
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMINISTRATOR" );
}
if ( $exec[ 0 ] == 1 )
{
if ( strlen( $attrib_name ) > 0 )
{
// Prüfen, in welchen Dokumentarten ein Attribut enthalten ist, bevor es gelöscht wird.
$erg = in_welchen_dokarten_ist_attribut_enthalten( $mandant_name, $attrib_name );
if ( $erg[ 0 ] == 0 )
{
$STATEMENT = "delete from ca_attribut where mandant_id = ".$ok[ 0 ]." and attrib_name = '".$attrib_name."'";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] == 0 )
{
$rc = 0;
$meldung = "Das Attribut ".$attrib_name." wurde im Mandanten ".$mandant_name." gelöscht.";
}
else
{
$rc = -2;
$meldung = "Das Attribut ".$attrib_name." konnte im Mandanten ".$mandant_name." nicht gelöscht werden. ".$ergebnis[ 1 ];
}
}
else
{
if ( $erg[ 0 ] > 0 )
{
$rc = -3;
if ( $erg[ 0 ] == 1 )
{
$text = "in der Dokument-/Aktenart ";
}
else
{
$text = "in den Dokument-/ und Aktenarten ";
}
$meldung = "Das Attribut ".$attrib_name." kann nicht gelöscht werden, da es noch ".$text.$erg[ 3 ]." enthalten ist.";
}
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Attributname angegeben.";
}
}
else
{
$rc = -12;
$meldung = "Der ausführende Benutzer >".$exekutor."< besitzt nicht das notwendige Recht.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.attribut_loeschen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function attribut_aendern( $mandant_name, $attrib_name_alt, $attrib_db_spalte, $attrib_wertemenge = "", $attrib_beschreibung = "", $attrib_name_neu = "")
{
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok = existiert_mandant( $mandant_name );
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
if ( $ok[ 0 ] > 0 )
{
if ( mb_strtoupper( $exekutor, "UTF-8" ) == "SUPERUSER" )
{
$exec[ 0 ] = 1;
}
else
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMINISTRATOR" );
}
if ( $exec[ 0 ] == 1 )
{
if ( strlen( $attrib_name_neu ) > 0 )
{
if ( strlen( $attrib_db_spalte ) > 0 )
{
$raus = false;
if ( strlen( $attrib_wertemenge ) > 0 )
{
$ergebnis = existiert_wertemenge( $mandant_name, $attrib_wertemenge );
if ( $ergebnis[ 0 ] <> 1 )
{
$raus = true;
}
}
if ( $raus == false )
{
$STATEMENT = "update ca_attribut set attrib_name = '".mysqli_real_escape_string( $connection, $attrib_name_neu )."', attrib_db_spalte = '".mysqli_real_escape_string( $connection, $attrib_db_spalte )."', attrib_wertemenge = '".mysqli_real_escape_string( $connection, $attrib_wertemenge )."', attrib_beschreibung = '".mysqli_real_escape_string( $connection, $attrib_beschreibung )."', attrib_geaendert_am = '".time()."' where mandant_id = ".$ok[ 0 ]." and attrib_name = '".mysqli_real_escape_string( $connection, $attrib_name_alt )."';";
$sqlergebnis = xdb( $STATEMENT );
if ( $sqlergebnis[ 0 ] <> -1 )
{
$rc = $sqlergebnis[ 0 ];
if ( ( strlen( $attrib_name_neu ) > 0 ) && ( $attrib_name_neu <> $attrib_name_alt ) )
{
$meld = " (vormals ".$attrib_name_alt.")";
}
else
{
$meld = "";
}
$meldung = "Das Attribut ".$attrib_name_neu.$meld." wurde geändert.";
}
else
{
$rc = $sqlergebnis[ 0 ];
$meldung = $sqlergebnis[ 1 ];
}
}
else
{
$rc = $ergebnis[ 0 ];
$meldung = $ergebnis[ 1 ];
}
}
else
{
$rc = -2;
$meldung = "Es wurde keine Ziel-DB-Spalte angegeben.";
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Attributname angegeben.";
}
}
else
{
$rc = -12;
$meldung = "Der ausführende Benutzer >".$exekutor."< besitzt nicht das notwendige Recht.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
mysqli_close( $connection );
xlog( $level, "admin.attribut_aendern: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function liefere_attributliste( $mandant_name, $liefere_sysattribs = true )
{
$ok_1 = existiert_mandant( $mandant_name );
$attributliste = array();
if ( $liefere_sysattribs !== true )
{
$liefere_sysattribs = false;
}
if ( $liefere_sysattribs )
{
$where = "";
}
else
{
$where = " and attrib_name not like '[%]'";
}
if ( $ok_1[ 0 ] > 0 )
{
$STATEMENT = "select attrib_name from ca_attribut where mandant_id = ".$ok_1[ 0 ].$where." order by attrib_name";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = $ergebnis[ 0 ];
$attributliste = $ergebnis[ 1 ];
$meldung = "Liefere ".$rc." Attribute des Mandants ".$mandant_name.".";
}
else
{
$rc = -1;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.liefere_attributliste: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $attributliste );
}
function attribut_suchen( $mandant_name, $suchstring )
{
$ok_1 = existiert_mandant( $mandant_name );
$attributliste = array();
if ( $ok_1[ 0 ] > 0 )
{
$STATEMENT = "select attrib_name from ca_attribut where mandant_id = ".$ok_1[ 0 ]." and attrib_name like '%".$suchstring."%' order by attrib_name";
//xlog( 4, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] > 0 )
{
$rc = $ergebnis[ 0 ];
$attributliste = $ergebnis[ 1 ];
$meldung = "Liefere ".$rc." Attribute des Mandants ".$mandant_name.".";
}
else
{
$rc = -1;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.suche_attribut: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $attributliste );
}
function dokart_anlegen( $mandant_name, $dokart_kuerzel, $dokart_name, $dokart_beschreibung, $dokart_typ, $depot, $arr_attribute, $flags )
{
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok = existiert_mandant( $mandant_name );
$dokart_kuerzel = mb_strtoupper( $dokart_kuerzel );
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
if ( $ok[ 0 ] > 0 )
{
if ( mb_strtoupper( $exekutor, "UTF-8" ) == "SUPERUSER" )
{
$exec[ 0 ] = 1;
}
else
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMINISTRATOR" );
}
if ( $exec[ 0 ] == 1 )
{
if ( strlen( $dokart_kuerzel ) > 0 )
{
if ( strpos( $dokart_kuerzel, "_" ) === false )
{
if ( strlen( $dokart_name ) > 0 )
{
if ( ( mb_strtoupper( $dokart_typ ) == "D" ) || ( mb_strtoupper( $dokart_typ ) == "A" ) )
{
/*
Aufbau des $arr_attribute-Arrays:
array( array( "attrib_name"=>name1, "pflichtfeld"=>pflicht ), array( "attrib_name"=>name2, ....
*/
if ( count( $arr_attribute ) > 0 )
{
$erg = liefere_attributliste( $mandant_name, true );
$breaker = false;
foreach ( $arr_attribute as $attrib )
{
$gefunden = false;
foreach ( $erg[ 2 ] as $zeile )
{
if ( $attrib[ "attrib_name" ] == $zeile[ "attrib_name" ] )
{
$gefunden = true;
break;
}
}
if ( $gefunden == false )
{
$breaker = true;
break;
}
}
if ( $breaker == false )
{
// jetzt kanns losgehen
// parsen der Flags
/*
if ( $flags[ "dok_ablage" ] == "D" )
{
$insert_flag = "D";
}
else
{
$insert_flag = "F";
}
*/
// ggf. parsen weiterer Flags....
$dep_ok = liefere_depotinformationen( $mandant_name, $depot );
if ( $dep_ok[ 0 ] > 0 )
{
// auffüllen noch nicht verwendeter Flags
for ( $i = 1; $i <= 15; $i ++ )
{
$insert_flag = $insert_flag."0";
}
$dokart_kuerzel = mb_strtoupper( $dokart_kuerzel );
$STATEMENT = "insert into ca_dokart ( mandant_id, dokart_kuerzel, dokart_name, dokart_beschreibung, dokart_typ, dokart_erstellt_am, flags, dokart_depot, dokart_geaendert_am ) values ( ".$ok[ 0 ].", '".mysqli_real_escape_string( $connection, $dokart_kuerzel )."', '".mysqli_real_escape_string( $connection, $dokart_name )."', '".mysqli_real_escape_string( $connection, $dokart_beschreibung )."', '".mysqli_real_escape_string( $connection, $dokart_typ )."', '".time()."', '".mysqli_real_escape_string( $connection, $insert_flag )."', '".mysqli_real_escape_string( $connection, $depot )."', 0 );";
//xlog(5, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis >= 0 )
{
// Jetzt müssen noch die Attribute zur Dokument-/Aktenart hinzugefügt werden.
$fehler = false;
$pos_in_maske = 0;
foreach( $arr_attribute as $attrib )
{
$pos_in_maske = bcadd( $pos_in_maske, 1 );
$erg = attrib_zu_dokart_hinzufuegen( $mandant_name, $dokart_kuerzel, $attrib[ "attrib_name" ], array(), $pos_in_maske );
if ( $erg[ 0 ] <= 0 )
{
$fehler = true;
break;
}
}
// Hinzufügen der Systemrechte
if ( $fehler == false )
{
$ergebnis = systemrecht_anlegen( $mandant_name, $dokart_typ."_".$dokart_kuerzel, 10, "root" );
$ergebnis = systemrecht_anlegen( $mandant_name, $dokart_typ."_".$dokart_kuerzel."_LESEN", 10, $dokart_typ."_".$dokart_kuerzel );
if ( $dokart_kuerzel != "SCHABLONE" )
{
$ergebnis = systemrecht_anlegen( $mandant_name, $dokart_typ."_".$dokart_kuerzel."_LOESCHEN", 10, $dokart_typ."_".$dokart_kuerzel );
$ergebnis = systemrecht_anlegen( $mandant_name, $dokart_typ."_".$dokart_kuerzel."_IMPORT", 10, $dokart_typ."_".$dokart_kuerzel );
$ergebnis = systemrecht_anlegen( $mandant_name, $dokart_typ."_".$dokart_kuerzel."_AENDERN", 10, $dokart_typ."_".$dokart_kuerzel );
}
$rc = 1;
$meldung = "Die Dokumentart ".$dokart_name." (".$dokart_kuerzel.") wurde erfolgreich angelegt.";
}
else
{
$rc = $erg[ 0 ];
$meldung = "Die Dokument-/Aktenart wurde angelegt. Beim Hinzufügen der Attribute gab es einen Fehler: >".$erg[ 1 ]."<";
}
}
else
{
$rc = $ergebnis[ 0 ];
$meldung = $ergebnis[ 1 ];
}
}
else
{
$rc = $dep_ok[ 0 ];
$meldung = $dep_ok[ 1 ];
}
}
else
{
$rc = -5;
$meldung = "Es wurden nicht existente Attribute (".$attrib[ "attrib_name" ].") angegeben.";
}
}
else
{
$rc = -4;
$meldung = "Es wurden keine Attribute angegeben.";
}
}
else
{
$rc = -3;
$meldung = "Es wurde kein korrekter Dokumentarttyp angegeben.";
}
}
else
{
$rc = -2;
$meldung = "Es wurde kein Dokumentartname angegeben.";
}
}
else
{
$rc = -6;
$meldung = "Das Dokumentartkürzel enthält unerlaubte Unterstriche.";
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Dokumentartkürzel angegeben.";
}
}
else
{
$rc = -12;
$meldung = "Der ausführende Benutzer >".$exekutor."< besitzt nicht das notwendige Recht.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
mysqli_close( $connection );
xlog( $level, "admin.dokumentart_anlegen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function liefere_dokartinformationen( $mandant_name, $dokart_kuerzel, $ausfuehrlich = false )
{
$ok = existiert_mandant( $mandant_name );
$dokart_kuerzel = mb_strtoupper( $dokart_kuerzel );
if ( $ok[ 0 ] > 0 )
{
if ( strlen( $dokart_kuerzel ) > 0 )
{
$STATEMENT = "select dokart_kuerzel, dokart_name, dokart_beschreibung, dokart_typ, flags, dokart_depot, dokart_erstellt_am, dokart_geaendert_am from ca_dokart where dokart_kuerzel = '".$dokart_kuerzel."' and mandant_id = ".$ok[ 0 ];
$ergebnis = xdb( $STATEMENT );
//xlog( 2, $STATEMENT );
//xlog( 1, "ergebnis ".$ergebnis[ 0 ] );
if ( $ergebnis[ 0 ] > 0 )
{
$zeile = $ergebnis[ 1 ][ 0 ];
$dokart = array();
$dokart[ "mandant_id" ] = $ok[ 0 ];
$dokart[ "dokart_kuerzel" ] = $zeile[ "dokart_kuerzel" ];
$dokart[ "dokart_name" ] = $zeile[ "dokart_name" ];
$dokart[ "dokart_beschreibung" ] = $zeile[ "dokart_beschreibung" ];
$dokart[ "dokart_typ" ] = $zeile[ "dokart_typ" ];
$dokart[ "dokart_depot" ] = $zeile[ "dokart_depot" ];
$dokart[ "flags" ] = $zeile[ "flags" ];
$dokart[ "dokart_erstellt_am" ] = $zeile[ "dokart_erstellt_am" ];
$dokart[ "dokart_geaendert_am" ] = $zeile[ "dokart_geaendert_am" ];
$dokart[ "dokart_dok_ablage" ] = substr( $zeile[ "flags" ], 0, 1 );
if ( $ausfuehrlich == true )
{
$STATEMENT = "select count(*) anzahl from ca_dok_ablage where dokart_kuerzel = '".$zeile[ "dokart_kuerzel" ]."'";
$anzahl = xdb( $STATEMENT );
$dokart[ "anzahl_doks" ] = $anzahl[ 1 ][ 0 ][ "anzahl" ];
}
else
{
$dokart[ "anzahl_doks" ] = "./.";
}
$attribute = liefere_attribute_zu_dokumentart( $mandant_name, $dokart_kuerzel );
if ( $attribute[ 0 ] > 0 )
{
// es wurden Attribute gefunden.
$dokart[ "attribute" ] = $attribute[ 2 ];
$rc = $attribute[ 0 ];
$meldung = "Liefere Informationen (inklusive ".$rc." Attribute) über Dokument-/Aktenart ".$dokart_kuerzel.".";
}
else
{
$rc = 0;
$meldung = "Liefere Informationen über Dokument-/Aktenart ".$dokart_kuerzel.".";
}
}
else
{
if ( $ergebnis[ 0 ] == 0 )
{
$rc = -2;
$meldung = "Die Dokument-/Aktenart ".$dokart_kuerzel." wurde nicht im System gefunden.";
}
else
{
$rc = -3;
$meldung = "Es ist ein Fehler aufgetreten: ".$ergebnis[ 1 ];
}
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Dokument-/Aktenartkürzel angegeben.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.liefere_dokartinformationen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $dokart );
}
function liefere_dokartinformationen_multi( $mandant_name, $dokart_kuerzel_arr, $ausfuehrlich = false )
{
$ok = existiert_mandant( $mandant_name );
//$dokart_kuerzel = mb_strtoupper( $dokart_kuerzel );
if ( $ok[ 0 ] > 0 )
{
if ( is_array( $dokart_kuerzel_arr ) )
{
$dokart_kuerzel = " ( ";
foreach( $dokart_kuerzel_arr as $kuerzel )
{
$dokart_kuerzel = $dokart_kuerzel."'".$kuerzel."', ";
}
$dokart_kuerzel = substr( $dokart_kuerzel, 0, -2 )." ) ";
$STATEMENT = "select dokart_kuerzel, dokart_name, dokart_beschreibung, dokart_typ, flags, dokart_depot, dokart_erstellt_am, dokart_geaendert_am from ca_dokart where dokart_kuerzel in ".$dokart_kuerzel." and mandant_id = ".$ok[ 0 ];
$ergebnis = xdb( $STATEMENT );
//xlog( 2, $STATEMENT );
//xlog( 1, "ergebnis ".$ergebnis[ 0 ] );
if ( $ergebnis[ 0 ] > 0 )
{
$e = array();
foreach( $ergebnis[ 1 ] as $zeile )
{
$dokart = array();
$dokart[ "mandant_id" ] = $ok[ 0 ];
$dokart[ "dokart_kuerzel" ] = $zeile[ "dokart_kuerzel" ];
$dokart[ "dokart_name" ] = $zeile[ "dokart_name" ];
$dokart[ "dokart_beschreibung" ] = $zeile[ "dokart_beschreibung" ];
$dokart[ "dokart_typ" ] = $zeile[ "dokart_typ" ];
$dokart[ "dokart_depot" ] = $zeile[ "dokart_depot" ];
$dokart[ "flags" ] = $zeile[ "flags" ];
$dokart[ "dokart_erstellt_am" ] = $zeile[ "dokart_erstellt_am" ];
$dokart[ "dokart_geaendert_am" ] = $zeile[ "dokart_geaendert_am" ];
$dokart[ "dokart_dok_ablage" ] = substr( $zeile[ "flags" ], 0, 1 );
if ( $ausfuehrlich == true )
{
$STATEMENT = "select count(*) anzahl from ca_dok_ablage where dokart_kuerzel = '".$zeile[ "dokart_kuerzel" ]."'";
$anzahl = xdb( $STATEMENT );
$dokart[ "anzahl_doks" ] = $anzahl[ 1 ][ 0 ][ "anzahl" ];
}
else
{
$dokart[ "anzahl_doks" ] = "./.";
}
$attribute = liefere_attribute_zu_dokumentart( $mandant_name, $dokart[ "dokart_kuerzel" ] );
if ( $attribute[ 0 ] > 0 )
{
// es wurden Attribute gefunden.
$dokart[ "attribute" ] = $attribute[ 2 ];
}
$e[ $dokart[ "dokart_kuerzel" ] ] = $dokart;
}
$rc = count( $e );
$meldung = "Liefere Informationen über die Dokumentarten ".$dokart_kuerzel.".";
}
else
{
if ( $ergebnis[ 0 ] == 0 )
{
$rc = -2;
$meldung = "Die Dokument-/Aktenarten ".$dokart_kuerzel." wurde nicht im System gefunden.";
}
else
{
$rc = -3;
$meldung = "Es ist ein Fehler aufgetreten: ".$ergebnis[ 1 ];
}
}
}
else
{
$rc = -1;
$meldung = "Es wurde keine Dokument-/Aktenartkürzel in Arrayform angegeben.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.liefere_dokartinformationen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $e );
}
function dokart_loeschen( $mandant_name, $dokart_kuerzel, $dokumente_loeschen = false )
{
$dokart_kuerzel = mb_strtoupper( $dokart_kuerzel );
$ok = existiert_mandant( $mandant_name );
// 1. Dokumente löschen
// 2. Attribute aus Dokumentart entfernen
// 3. Systemrechte löschen
// 4. Dokumentart löschen
$dokart = liefere_dokartinformationen( $mandant_name, $dokart_kuerzel );
if ( $dokart[ 0 ] > 0 )
{
// Dokumentart existiert.
// 1. Dokumente löschen (geht das schon?!)
if ( $dokumente_loeschen == true )
{
xlog( 3, "admin.dokart_loeschen: Dokumente löschen geht noch nicht!");
}
// 2. Attribute aus Dokumentart entfernen
$fehler = false;
foreach ( $dokart[ 2 ][ "attribute" ] as $attribut )
{
$erg = attrib_aus_dokart_loeschen( $mandant_name, $dokart_kuerzel, $attribut[ "attrib_name" ] );
if ( $erg[ 0 ] < 0 )
{
$fehler = true;
$rc = $erg[ 0 ];
$meldung = "Es ist ein Fehler aufgetreten: ".$erg[ 1 ];
}
}
if ( $fehler == false )
{
// 3. Systemrechte löschen
$ergebnis = systemrecht_loeschen( $mandant_name, $dokart[ 2 ][ "dokart_typ" ]."_".$dokart_kuerzel );
$ergebnis = systemrecht_loeschen( $mandant_name, $dokart[ 2 ][ "dokart_typ" ]."_".$dokart_kuerzel."_LESEN" );
$ergebnis = systemrecht_loeschen( $mandant_name, $dokart[ 2 ][ "dokart_typ" ]."_".$dokart_kuerzel."_LOESCHEN" );
$ergebnis = systemrecht_loeschen( $mandant_name, $dokart[ 2 ][ "dokart_typ" ]."_".$dokart_kuerzel."_IMPORT" );
$ergebnis = systemrecht_loeschen( $mandant_name, $dokart[ 2 ][ "dokart_typ" ]."_".$dokart_kuerzel."_AENDERN" );
// 4. Dokumentart löschen
$STATEMENT = "delete from ca_dokart where mandant_id = ".$ok[ 0 ]." and dokart_kuerzel = '".$dokart_kuerzel."'; ";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] == 0 )
{
$rc = 0;
$meldung = "Die Dokumentart ".$dokart[ 2 ][ "dokart_name" ]." (".$dokart[ 2 ][ "dokart_kuerzel" ].") wurde gelöscht.";
}
else
{
$rc = -1;
$meldung = "Es ist ein Fehler aufgetreten: ".$ergebnis[ 1 ];
}
}
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.dokart_loeschen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $dokart );
}
function dokart_aendern( $mandant_name, $dokart_kuerzel, $dokart_name, $dokart_beschreibung, $depot, $arr_attribute, $flags )
{
// $flags wird aktuell noch nicht ausgewertet.
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
if ( strlen( $dokart_kuerzel ) > 0 )
{
$dokart_kuerzel = mb_strtoupper( $dokart_kuerzel );
$ok = existiert_mandant( $mandant_name );
if ( $ok[ 0 ] > 0 )
{
$dokart = liefere_dokartinformationen( $mandant_name, $dokart_kuerzel );
$STATEMENT = "update ca_dokart set dokart_name = '".mysqli_real_escape_string( $connection, $dokart_name )."', dokart_beschreibung = '".mysqli_real_escape_string( $connection, $dokart_beschreibung )."', dokart_geaendert_am = '".time()."', dokart_depot = '".mysqli_real_escape_string( $connection, $depot )."' where dokart_kuerzel = '".mysqli_real_escape_string( $connection, $dokart_kuerzel )."' and mandant_id = ".$ok[ 0 ];
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] == 0 )
{
// jetzt noch Attribute aktualisieren
// zuerst die löschen, die nicht mehr in der Dokumentart enthalten sind
foreach( $dokart[ 2 ][ "attribute" ] as $aktuelles_attribut )
{
$gefunden = false;
foreach( $arr_attribute as $neues_attribut )
{
if ( $aktuelles_attribut[ "attrib_name" ] == $neues_attribut[ "attrib_name" ] )
{
$gefunden = true;
break;
}
}
if ( $gefunden == false )
{
// Lösche das Attribut aus der Dokumentart
$erg = attrib_aus_dokart_loeschen( $mandant_name, $dokart_kuerzel, $aktuelles_attribut[ "attrib_name" ] );
}
}
// dann die hinzufügen, die dazugekommen sind
foreach( $arr_attribute as $neues_attribut )
{
$gefunden = false;
foreach( $dokart[ 2 ][ "attribute" ] as $aktuelles_attribut )
{
if ( $aktuelles_attribut[ "attrib_name" ] == $neues_attribut[ "attrib_name" ] )
{
$gefunden = true;
break;
}
}
if ( $gefunden == false )
{
// Füge das Attribut der Dokumentart hinzu
$erg = attrib_zu_dokart_hinzufuegen( $mandant_name, $dokart_kuerzel, $neues_attribut[ "attrib_name" ], array(), count( $dokart[ 2 ][ "attribute" ] ) + 1 );
}
}
$rc = 0;
$meldung = "Die Dokumentart ".$dokart_name." (".$dokart_kuerzel.") wurde geändert.";
}
else
{
$rc = -2;
$meldung = "Es ist ein Fehler aufgetreten: ".$ergebnis[ 1 ];
}
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Dokument-/Aktenartkürzel angegeben.";
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
mysqli_close( $connection );
xlog( $level, "admin.dokart_aendern: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function liefere_dok_akten_art_liste( $mandant_name, $menge = "", $liefere_sysdokarten = true )
{
// $menge => "A" für Aktenarten, "D" für Dokumentarten
$ok = existiert_mandant( $mandant_name );
if ( $ok[ 0 ] > 0 )
{
if ( $liefere_sysdokarten !== true )
{
$liefere_sysdokarten = false;
}
if ( $liefere_sysdokarten )
{
$where_2 = "";
}
else
{
$sysdokarten = liefere_wertemenge_elemente( $mandant_name, "systemdokarten" );
if ( $sysdokarten[ 0 ] > 0 )
{
$where_2 = " and dokart_kuerzel not in ( ";
foreach ( $sysdokarten[ 2 ] as $dokart_kurz )
{
$where_2 = $where_2." '".$dokart_kurz[ "alpha_01" ]."', ";
}
$where_2 = substr( $where_2, 0, strlen( $where_2 ) - 2 )." )";
}
}
if ( strlen( $menge ) > 0 )
{
$where = " and dokart_typ = '".$menge."'";
}
else
{
$where = "";
}
$STATEMENT = "select dokart_kuerzel, dokart_name, dokart_typ from ca_dokart where mandant_id = ".$ok[ 0 ].$where.$where_2." order by dokart_name";
//xlog( 6, $STATEMENT );
$erg = xdb( $STATEMENT );
if ( $erg[ 0 ] > 0 )
{
$rc = $erg[ 0 ];
$meldung = "Liefere ".$rc." Dokument-/Aktenarten für Mandant ".$mandant_name.".";
$dokart = $erg[ 1 ];
}
else
{
if ( $erg[ 0 ] == 0 )
{
$rc = 0;
$meldung = "Es wurden im Mandanten ".$mandant_name." keine Dokument-/Aktenarten gefunden.";
}
else
{
$rc = $erg[ 0 ];
$meldung = "Es ist ein Fehler aufgetreten: ".$erg[ 1 ];
}
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.liefere_dok_akten_art_liste: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $dokart );
}
function liefere_aktenartliste( $mandant_name )
{
$ok = liefere_dok_akten_art_liste( $mandant_name, "A" );
return $ok;
}
function liefere_dokartliste( $mandant_name )
{
$ok = liefere_dok_akten_art_liste( $mandant_name, "D" );
return $ok;
}
function dokart_suchen( $mandant_name, $suchstring )
{}
function attrib_zu_dokart_hinzufuegen( $mandant_name, $dokart_kuerzel, $attrib_name, $flags = array(), $pos_in_maske = 9 )
{
$exekutor = $_SESSION[ "benutzer_anmeldename" ];
$ok = existiert_mandant( $mandant_name );
$dokart_kuerzel = mb_strtoupper( $dokart_kuerzel );
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
if ( $ok[ 0 ] > 0 )
{
if ( mb_strtoupper( $exekutor, "UTF-8" ) == "SUPERUSER" )
{
$exec[ 0 ] = 1;
}
else
{
$exec = besitzt_benutzer_systemrecht( $mandant_name, $exekutor, "ADMINISTRATOR" );
}
if ( $exec[ 0 ] == 1 )
{
if ( strlen( $dokart_kuerzel ) > 0 )
{
$erg = ist_attrib_in_dokart_enthalten( $mandant_name, $dokart_kuerzel, $attrib_name );
if ( $erg[ 0 ] <= 0 )
{
// Attribut ist nicht in Dokumentart enthalten. Es kann also hinzugefügt werden.
// Herausfinden der Attribut-ID
$ergeb = liefere_attributinformationen( $mandant_name, $attrib_name );
if ( $ergeb[ 0 ] > 0 )
{
$aid = $ergeb[ 0 ];
// Herausfinden der Flags
if ( strlen( $flags[ "pflicht" ] ) > 0 )
{
$flags_setup = "1";
}
else
{
$flags_setup = "0";
}
$flags_setup = $flags_setup."00000000000000"; // 14 Nullen. Eine ist belegt.
$attrib_laenge = "";
if ( strpos( $ergeb[ 2 ][ "attrib_db_spalte" ], "num" ) !== false )
{
$sql_attrib_laenge = ", attrib_laenge ";
$wert_attrib_laenge = ", 3 ";
}
else
{
$sql_attrib_laenge = "";
$wert_attrib_laenge = "";
}
$STATEMENT = "insert into ca_dokart_attrib ( mandant_id, dokart_kuerzel, attrib_id, flags, pos_in_maske, hinzugefuegt_am ".$sql_attrib_laenge." ) values ( ".$ok[ 0 ].", '".mysqli_real_escape_string( $connection, $dokart_kuerzel )."', ".mysqli_real_escape_string( $connection, $aid ).", '".mysqli_real_escape_string( $connection, $flags_setup )."', ".mysqli_real_escape_string( $connection, $pos_in_maske ).", '".time()."' ".$wert_attrib_laenge." );";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] >= 0 )
{
$rc = 1;
$meldung = "Das Attribut ".$attrib_name." wurde der Dokument-/Aktenart ".$dokart_kuerzel." hinzugefügt.";
}
else
{
$rc = $ergebnis[ 0 ];
$meldung = $ergebnis[ 1 ];
}
}
else
{
$rc = $ergeb[ 0 ];
$meldung = $ergeb[ 1 ];
}
}
else
{
// Attribut ist in Dokumentart enthalten
$rc = $erg[ 0 ];
$meldung = $erg[ 1 ];
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Dokument-/Aktenartkürzel angegeben.";
}
}
else
{
$rc = -12;
$meldung = "Der ausführende Benutzer >".$exekutor."< besitzt nicht das notwendige Recht.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.attrib_zu_dokuart_hinzufuegen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function ist_attrib_in_dokart_enthalten( $mandant_name, $dokart_kuerzel, $attrib_name )
{
$ok = existiert_mandant( $mandant_name );
$dokart_kuerzel = mb_strtoupper( $dokart_kuerzel );
if ( $ok[ 0 ] > 0 )
{
if ( strlen( $dokart_kuerzel ) > 0 )
{
if ( strlen( $attrib_name ) > 0 )
{
$erg = liefere_attributinformationen( $mandant_name, $attrib_name );
//erg2 = function liefere_dokumentartinformationen( $mandant_name, $dokart_kuerzel ); -- fehlt noch, weil die Funktion noch nicht implementiert ist.
if ( $erg[ 0 ] > 0 )
{
$STATEMENT = "select count(*) anzahl from ca_dokart_attrib where mandant_id = ".$ok[ 0 ]." and dokart_kuerzel = '".$dokart_kuerzel."' and attrib_id = ".$erg[ 0 ].";";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
//$zeile = $ergebnis[ 1 ][ 0 ];
if ( $ergebnis[ 1 ][ 0 ][ "anzahl" ] == "0" )
{
$rc = 0;
$meldung = "Das Attribut ".$attrib_name." ist nicht in der Dokument-/Aktenart ".$dokart_kuerzel." enthalten.";
}
else
{
$rc = $erg[ 0 ];
$meldung = "Das Attribut ".$attrib_name." ist in der Dokument-/Aktenart ".$dokart_kuerzel." enthalten.";
}
}
else
{
$rc = -4;
$meldung = $ergebnis[ 1 ];
}
}
else
{
$rc = -3;
$meldung = "Das angegebene Attribut existiert nicht.";
}
}
else
{
$rc = -2;
$meldung = "Es wurde kein Attributname angegeben.";
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Dokument-/Aktenartkürzel angegeben.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.ist_attrib_in_dokart_enthalten: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function liefere_attribute_zu_dokumentart( $mandant_name, $dokart_kuerzel )
{
$ok = existiert_mandant( $mandant_name );
$dokart_kuerzel = mb_strtoupper( $dokart_kuerzel );
if ( $ok[ 0 ] > 0 )
{
if ( strlen( $dokart_kuerzel ) > 0 )
{
$STATEMENT = "select a.attrib_id attrib_id, a.dokart_kuerzel dokart_kuerzel, a.pos_in_maske pos_in_maske, a.attrib_laenge attrib_laenge, a.attrib_einheit attrib_einheit, a.flags flags, a.hinzugefuegt_am hinzugefuegt_am, a.mandant_id mandant_id, b.attrib_beschreibung attrib_beschreibung, b.attrib_db_spalte attrib_db_spalte, b.attrib_erstellt_am attrib_erstellt_am, b.attrib_geaendert_am attrib_geaendert_am, b.attrib_name attrib_name, b.attrib_wertemenge attrib_wertemenge from ca_dokart_attrib a, ca_attribut b where a.attrib_id = b.attrib_id and a.mandant_id = b.mandant_id and a.mandant_id = ".$ok[ 0 ]." and a.dokart_kuerzel = '".$dokart_kuerzel."' order by a.pos_in_maske, a.attrib_id";
//xlog( 4, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] > 0 )
{
$dokart_attribs = array();
foreach( $ergebnis[ 1 ] as $zeile )
{
//xlog( 4, $zeile[ "attrib_db_spalte"] );
if ( substr( $zeile[ "flags" ], 0, 1 ) == 0 )
{
$pflicht = false;
}
else
{
$pflicht = true;
}
//xlog( 4, $zeile[ "attrib_db_spalte"] ." => ".substr( $zeile[ "flags" ], 0, 1 )." => ".$pflicht );
switch ( substr( $zeile[ "flags" ], 1, 1 ) )
{
case "0":
$farbe = "standard";
break;
case "1":
$farbe = "gruen";
break;
case "2":
$farbe = "blau";
break;
case "3":
$farbe = "gelb";
break;
case "4":
$farbe = "rot";
break;
case "5":
$farbe = "braun";
break;
}
switch ( substr( $zeile[ "flags" ], 2, 1 ) )
{
/*
$fett = Bit 1
$unterstrichen = Bit 2
$kursiv = Bit 3
*/
case "0":
$fett = false;
$unterstrichen = false;
$kursiv = false;
break;
case "1":
$fett = true;
$unterstrichen = false;
$kursiv = false;
break;
case "2":
$fett = false;
$unterstrichen = true;
$kursiv = false;
break;
case "3":
$fett = true;
$unterstrichen = true;
$kursiv = false;
break;
case "4":
$fett = false;
$unterstrichen = false;
$kursiv = true;
break;
case "5":
$fett = true;
$unterstrichen = false;
$kursiv = true;
break;
case "6":
$fett = false;
$unterstrichen = true;
$kursiv = true;
break;
case "7":
$fett = true;
$unterstrichen = true;
$kursiv = true;
break;
}
if ( substr( $zeile[ "flags" ], 3, 1 ) == 0 )
{
$vorhanden = false;
}
else
{
$vorhanden = true;
}
if ( substr( $zeile[ "flags" ], 4, 1 ) == 0 )
{
$titel = false;
}
else
{
$titel = true;
}
//$pflicht.$farbe.$fuk.$vorhanden.$titel.$pos_in_maske."000000000";
$pos_in_maske = $zeile[ "pos_in_maske" ];
$attrib_typ = explode( "_", $zeile[ "attrib_db_spalte"] );
if ( mb_strtoupper( $attrib_typ[ 0 ] ) == "P" )
{
$attrib_typ = $attrib_typ[ 0 ]."_".$attrib_typ[ 1 ];
}
else
{
$attrib_typ = $attrib_typ[ 0 ];
}
$dokart_attribs[ $zeile[ "attrib_db_spalte"] ] = array( "attrib_laenge"=>$zeile[ "attrib_laenge"], "attrib_einheit"=>$zeile[ "attrib_einheit"], "attrib_pflicht"=>$pflicht, "attrib_farbe"=>$farbe, "attrib_layout_fett"=>$fett, "attrib_layout_unterstrichen"=>$unterstrichen, "attrib_layout_kursiv"=>$kursiv, "attrib_id"=>$zeile[ "attrib_id"], "dokart_kuerzel"=>$zeile[ "dokart_kuerzel"], "flags"=>$zeile[ "flags"], "hinzugefuegt_am"=>$zeile[ "hinzugefuegt_am"], "mandant_id"=>$zeile[ "mandant_id"], "attrib_beschreibung"=>$zeile[ "attrib_beschreibung"], "attrib_db_spalte"=>$zeile[ "attrib_db_spalte"], "attrib_erstellt_am"=>$zeile[ "attrib_erstellt_am"], "attrib_geaendert_am"=>$zeile[ "attrib_geaendert_am"], "attrib_name"=>$zeile[ "attrib_name"], "attrib_wertemenge"=>$zeile[ "attrib_wertemenge"], "attrib_vorhandene_werte"=>$vorhanden, "attrib_typ"=>$attrib_typ, "attrib_titel"=>$titel, "attrib_pos_in_maske"=>$pos_in_maske );
}
$rc = count( $dokart_attribs );
$meldung = "Liefere ".$rc." Attribute für Dokument-/Aktenart ".$dokart_kuerzel.".";
}
else
{
if ( $ergebnis[ 0 ] == 0 )
{
$rc = 0;
$meldung = "Es wurden keine Attribute für Dokument-/Aktenart ".$dokart_kuerzel." gefunden.";
}
else
{
$rc = $ergebnis[ 0 ];
$meldung = $ergebnis[ 1 ];
}
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Dokument-/Aktenartkürzel angegeben.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.liefere_attribute_zu_dokumentart: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $dokart_attribs );
}
function attrib_aus_dokart_loeschen( $mandant_name, $dokart_kuerzel, $attrib_name )
{
$erg = ist_attrib_in_dokart_enthalten( $mandant_name, $dokart_kuerzel, $attrib_name );
$ok = existiert_mandant( $mandant_name );
$dokart_kuerzel = mb_strtoupper( $dokart_kuerzel );
if ( $erg[ 0 ] > 0 )
{
$STATEMENT = "delete from ca_dokart_attrib where dokart_kuerzel = '".$dokart_kuerzel."' and attrib_id = ".$erg[ 0 ]." and mandant_id = ".$ok[ 0 ].";";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] == 0 )
{
$rc = 0;
$meldung = "Das Attribut ".$attrib_name." wurde aus der Dokumentart ".$dokart_kuerzel." gelöscht.";
}
else
{
$rc = $ergebnis[ 0 ];
$meldung = "Das Attribut ".$attrib_name." wurde nicht aus der Dokumentart ".$dokart_kuerzel." gelöscht: ".$ergebnis[ 1 ];
}
}
else
{
if ( $erg[ 0 ] == 0 )
{
$rc = 0;
$meldung = "Das Attribut ".$attrib_name." ist nicht in der Dokumentart ".$dokart_kuerzel." enthalten.";
}
else
{
$rc = $erg[ 0 ];
$meldung = "Bei der Verarbeitung ist ein Fehler aufgetreten: ".$erg[ 1 ];
}
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.attrib_aus_dokart_loeschen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function in_welchen_dokarten_ist_attribut_enthalten( $mandant_name, $attrib_name )
{
$ok = existiert_mandant( $mandant_name );
if ( strlen( $attrib_name ) > 0 )
{
$STATEMENT = "select d.dokart_kuerzel dokart_kuerzel from ca_dokart_attrib d, ca_attribut a where d.attrib_id = a.attrib_id and a.attrib_name = '".$attrib_name."' and a.mandant_id = ".$ok[ 0 ];
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] > 0 )
{
foreach( $ergebnis[ 1 ] as $zeile )
{
$dokartliste_arr[] = $zeile[ "dokart_kuerzel" ];
$dokartliste_txt = $dokartliste_txt.$zeile[ "dokart_kuerzel" ]." | ";
}
$dokartliste_txt = substr( $dokartliste_txt, 0, strlen( $dokartliste_txt ) - 3 );
$rc = $ergebnis[ 0 ];
$meldung = "Das Attribut ".$attrib_name." ist in ".$rc." Dokument-/Aktenarten enthalten.";
}
else if ( $ergebnis[ 0 ] == 0 )
{
$dokartliste_arr = array();
$rc = $ergebnis[ 0 ];
$meldung = "Das Attribut ".$attrib_name." ist in ".$rc." Dokument-/Aktenarten enthalten.";
}
else
{
$rc = -2;
$meldung = "Es ist ein Fehler aufgetreten: ".$ergebnis[ 1 ];
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Attribut angegeben.";
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.in_welchen_dokarten_ist_attribut_enthalten: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $dokartliste_arr, $dokartliste_txt );
}
function attrib_in_dokart_konfigurieren( $mandant_name, $dokart_kuerzel, $attrib_name, $flags_arr )
{
/*
erwartet ein Array in der Form:
$flags_arr[ "pflicht" ] = true
$flags_arr[ "farbe" ] = "gruen"
$flags_arr[ "fett" ] = false
$flags_arr[ "unterstrichen" ] = false
$flags_arr[ "kursiv" ] = false
$flags_arr[ "titel" ] = false
$flags_arr[ "einheit" ] = "km/h";
$flags_arr[ "anzahl_nachkommastellen" ] = 3;
Falls einer der Werte nicht angegeben wurde, wird auf "standard" bzw. false defaulted.
*/
$ok = existiert_mandant( $mandant_name );
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
$dokart_kuerzel = mb_strtoupper( $dokart_kuerzel );
if ( $ok[ 0 ] > 0 )
{
$erg = ist_attrib_in_dokart_enthalten( $mandant_name, $dokart_kuerzel, $attrib_name );
if ( $erg[ 0 ] > 0 )
{
if ( $flags_arr[ "pflicht" ] == true )
{
$pflicht = "1";
}
else
{
$pflicht = "0";
}
if ( $flags_arr[ "vorhandene_werte" ] == true )
{
$vorhanden = "1";
}
else
{
$vorhanden = "0";
}
//xlog( 1, "pflicht >".$flags_arr[ "pflicht" ]."< ");
switch ( $flags_arr[ "farbe" ] )
{
case "standard":
$farbe = "0";
break;
case "gruen":
$farbe = "1";
break;
case "blau":
$farbe = "2";
break;
case "gelb":
$farbe = "3";
break;
case "rot":
$farbe = "4";
break;
case "braun":
$farbe = "5";
break;
default:
$farbe = "0";
break;
}
////////////////////////////////////
//xlog(2, "fett >".$flags_arr[ "fett" ]."<" );
if ( $flags_arr[ "fett" ] == true )
{
$fett = "1";
}
else
{
$fett = "0";
}
////////////////////////////////////
//xlog(2, "unterstrichen >".$flags_arr[ "unterstrichen" ]."<" );
if ( $flags_arr[ "unterstrichen" ] == true )
{
$unterstrichen = "1";
}
else
{
$unterstrichen = "0";
}
////////////////////////////////////
//xlog(2, "kursiv >".$flags_arr[ "kursiv" ]."<" );
if ( $flags_arr[ "kursiv" ] == true )
{
$kursiv = "1";
}
else
{
$kursiv = "0";
}
////////////////////////////////////
//xlog(2, "kursiv >".$flags_arr[ "titel" ]."<" );
if ( $flags_arr[ "titel" ] == true )
{
$titel = "1";
}
else
{
$titel = "0";
}
////////////////////////////////////
switch ( $kursiv.$unterstrichen.$fett )
{
case "000":
$fuk = "0";
break;
case "001":
$fuk = "1";
break;
case "010":
$fuk = "2";
break;
case "011":
$fuk = "3";
break;
case "100":
$fuk = "4";
break;
case "101":
$fuk = "5";
break;
case "110":
$fuk = "6";
break;
case "111":
$fuk = "7";
break;
default:
$fuk = "0";
break;
}
$hochkomma = "'";
if ( strlen( $flags_arr[ "anzahl_nachkommastellen" ] ) == 0 )
{
$flags_arr[ "anzahl_nachkommastellen" ] = "null";
$hochkomma = "";
}
$flags = $pflicht.$farbe.$fuk.$vorhanden.$titel."0000000000";
$STATEMENT = "update ca_dokart_attrib set attrib_einheit = '".mysqli_real_escape_string( $connection, $flags_arr[ "einheit" ] )."', attrib_laenge = ".$hochkomma.mysqli_real_escape_string( $connection, $flags_arr[ "anzahl_nachkommastellen" ] ).$hochkomma.", flags = '".mysqli_real_escape_string( $connection, $flags )."', pos_in_maske = ".mysqli_real_escape_string( $connection, $flags_arr[ "pos_in_maske" ] )." where mandant_id = ".$ok[ 0 ]." and dokart_kuerzel = '".mysqli_real_escape_string( $connection, $dokart_kuerzel )."' and attrib_id = ".$erg[ 0 ];
//xlog( 1, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] == 0 )
{
$rc = 0;
$meldung = "Die Flags des Attributs ".$attrib_name." in der Dokumentart ".$dokart_kuerzel." wurden geändert.";
}
else
{
$rc = $ergebnis[ 0 ];
$meldung = "Es ist ein Fehler aufgetreten: ".$ergebnis[ 1 ];
}
}
else
{
// Attribut ist nicht in Dokumentart enthalten oder Fehler.
$rc = $ergebnis[ 0 ];
$meldung = "Das Attribut ".$attrib_name." ist nicht in der Dokumentart ".$dokart_kuerzel." enthalten oder Fehler: ".$ergebnis[ 1 ];
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.attrib_in_dokart_konfigurieren: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function liefere_vorhandene_werte_zu_attrib( $mandant_name, $dokart_kuerzel, $attrib_name )
{
$ok = existiert_mandant( $mandant_name );
$dokart_kuerzel = mb_strtoupper( $dokart_kuerzel );
if ( $ok[ 0 ] > 0 )
{
$erg = ist_attrib_in_dokart_enthalten( $mandant_name, $dokart_kuerzel, $attrib_name );
if ( $erg[ 0 ] > 0 )
{
$attrib = liefere_attributinformationen( $mandant_name, $attrib_name );
$STATEMENT = "select distinct i.".$attrib[ 2 ][ "attrib_db_spalte" ]." spalte from ca_index i, ca_dok_ablage a where a.mandant_id = ".$ok[ 0 ]." and a.dokart_kuerzel = '".$dokart_kuerzel."' and i.dok_id = a.dok_id order by i.".$attrib[ 2 ][ "attrib_db_spalte" ];
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] > 0 )
{
foreach ( $ergebnis[ 1 ] as $element )
{
$ergebnis_arr[] = $element[ "spalte" ];
$ergebnis_liste = $ergebnis_liste.$element[ "spalte" ]."|";
}
$ergebnis_liste = substr( $ergebnis_liste, 0, strlen( $ergebnis_liste ) - 1 );
$rc = $ergebnis[ 0 ];
$meldung = "Liefere ".$rc." gefundene Elemente.";
}
else
{
$rc = 0;
$meldung = "Es wurden keine Elemente gefunden.";
$ergebnis_arr = array();
$ergebnis_liste = "";
}
}
else
{
// Attribut ist nicht in Dokumentart enthalten oder Fehler.
$rc = $ergebnis[ 0 ];
$meldung = "Das Attribut ".$attrib_name." ist nicht in der Dokumentart ".$dokart_kuerzel." enthalten oder Fehler: ".$ergebnis[ 1 ];
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.liefere_vorhandene_werte_zu_attrib: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $ergebnis_arr, $ergebnis_liste );
}
function depot_anlegen( $mandant_name, $kuerzel, $typ, $ort, $schranke = 0, $scramble = false, $status="offen", $beschreibung = "" )
{
// Schranke: default 2 GB, wird unten gesetzt
$ok = existiert_mandant( $mandant_name );
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
if ( $ok[ 0 ] > 0 )
{
if ( strlen( $kuerzel ) > 0 )
{
$kuerzel = mb_strtoupper( $kuerzel );
$typ = mb_strtoupper( $typ );
$status = mb_strtolower( $status );
if ( ( $typ == "D" ) || ( $typ == "F" ) )
{
$rc = 0;
if ( $typ == "F" )
{
if ( strlen( $ort ) > 0 )
{
/*
// Prüfen ob korrektes Verzeichnis
$ort_arr = explode( DIRECTORY_SEPARATOR, $ort );
foreach( $ort_arr as $elem )
{
if ( strlen( $elem ) > 0 )
{
if ( strlen( $ort_fix ) > 0 )
{
$ort_fix = $ort_fix.DIRECTORY_SEPARATOR.$elem;
}
else
{
$ort_fix = $elem;
}
}
}
*/
if ( is_dir( $ort ) )
{
$test1 = fopen( $ort.DIRECTORY_SEPARATOR."test.test", "w" );
$test2 = fwrite( $test1, "123");
if ( ( $test1 !== false ) && ( $test2 !== false ) )
{
// alles gut!
fclose( $test );
unlink( $ort.DIRECTORY_SEPARATOR."test.test" );
$ort_fix = $ort.DIRECTORY_SEPARATOR;
}
else
{
$rc = -3;
$meldung = "Es gab einen Dateisystemfehler beim Testen des Depot-Verzeichnisses.";
}
}
else
{
$rc = -7;
$meldung = "Der angegebene Speicherort '".$ort."' ist kein gültiges Verzeichnis.";
}
}
else
{
$rc = -6;
$meldung = "Zu einem Dateisystem-Depot wurde kein Ablageort (Verzeichnis auf der Festplatte) angegeben.";
}
}
else
{
if ( strlen( $ort ) > 0 )
{
// Beim Typ "D" darf kein Ort angegeben sein.
xlog( 3, "Bei Ablage im Typ 'D' (Datenbank) darf kein Ort angegeben sein. Die Angabe wird ignoriert." );
$ort = "";
}
}
if ( $schranke == 0 )
{
$schranke = 2 * 1024 * 1024 * 1024;
}
if ( $rc == 0 )
{
if ( $scramble == true )
{
$scramble_wert = "ja";
}
else
{
$scramble_wert = "nein";
}
// alles gut, die Tests waren erfolgreich
$STATEMENT = "insert into ca_depot( mandant_id, ao_kuerzel, ao_typ, ao_ort, ao_erstellt_am, ao_beschreibung, ao_scramble, ao_status, ao_schranke, ao_geaendert_am ) values ( ".$ok[ 0 ].", '".mysqli_real_escape_string( $connection, $kuerzel )."', '".mysqli_real_escape_string( $connection, $typ )."', '".mysqli_real_escape_string( $connection, $ort )."', '".time()."', '".mysqli_real_escape_string( $connection, $beschreibung )."', '".mysqli_real_escape_string( $connection, $scramble_wert )."', '".mysqli_real_escape_string( $connection, $status )."', ".mysqli_real_escape_string( $connection, $schranke ).", '' ); ";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] == 0 )
{
$rc = 0;
$meldung = "Das Depot '".$kuerzel."' wurde erfolgreich angelegt.";
}
else
{
$rc = -5;
$meldung = "Es gab einen Fehler bei Anlage des Depots '".$kuerzel."'.";
}
}
// else wurde oben schon gesetzt
}
else
{
$rc = -2;
$meldung = "Es wurde kein (korrekter) Typ angegeben.";
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Kürzel angegeben.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.depot_anlegen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function liefere_depotinformationen( $mandant_name, $kuerzel, $ausfuehrlich = false )
{
$ok = existiert_mandant( $mandant_name );
if ( $ok[ 0 ] > 0 )
{
if ( strlen( $kuerzel ) > 0 )
{
$kuerzel = mb_strtoupper( $kuerzel );
$STATEMENT = "select mandant_id, ao_kuerzel, ao_typ, ao_ort, ao_erstellt_am, ao_beschreibung, ao_geaendert_am, ao_scramble, ao_status, ao_schranke from ca_depot where mandant_id = ".$ok[ 0 ]." and ao_kuerzel = '".$kuerzel."'";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] == 1 )
{
foreach( $ergebnis[ 1 ] as $dep )
{
foreach( $dep as $eigenschaft => $wert )
{
switch ( $eigenschaft )
{
case "ao_geaendert_am":
case "ao_erstellt_am":
//$wert_fertig = date( "d.m.Y H:i", $wert )." Uhr";
$wert_fertig = $wert;
break;
case "ao_scramble":
if ( $wert == "ja" )
{
$wert_fertig = true;
}
else
{
$wert_fertig = false;
}
break;
case "ao_schranke":
$original_wert = $wert;
$wert_fertig = $wert / 1024 / 1024;
break;
default:
$wert_fertig = $wert;
break;
}
if ( $eigenschaft != "mandant_id" )
{
$eigenschaft = substr( $eigenschaft, 3 );
}
$erg_arr[ $eigenschaft ] = $wert_fertig;
}
}
$erg_arr[ "kuerzel" ] = $kuerzel;
$erg_arr[ "schranke_byte" ] = $original_wert;
$erg_arr[ "schranke_text" ] = round( $original_wert / 1024 / 1024 , 2)." MB";
if ( $ausfuehrlich == true )
{
$STATEMENT = "select sum( groesse ) summe from ca_dok_datei where mandant_id = ".$ok[ 0 ]." and dok_id in ( select dok_id from ca_dok_ablage where depot = '".$kuerzel."' and mandant_id = ".$ok[ 0 ]." )";
//xlog( 4, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( strlen( $ergebnis[ 1 ][ 0 ][ "summe" ] ) == 0 )
{
$aktuelle_groesse_byte = 0;
}
else
{
$aktuelle_groesse_byte = $ergebnis[ 1 ][ 0 ][ "summe" ];
}
$erg_arr[ "aktuelle_groesse_byte" ] = $aktuelle_groesse_byte;
//xlog( 1, $aktuelle_groesse_byte );
//$aktuelle_groesse_byte = str_replace( ".", ",", $aktuelle_groesse_byte );
$megabyte = round( $aktuelle_groesse_byte / 1024 / 1024 , 2);
$aktuelle_groesse_text = "0 MB";
if ( $megabyte > 0 )
{
$aktuelle_groesse_text = $megabyte." MB ";
}
$erg_arr[ "aktuelle_groesse_text" ] = $aktuelle_groesse_text;
}
else
{
$erg_arr[ "aktuelle_groesse_text" ] = "unbekannt.";
$erg_arr[ "aktuelle_groesse_byte" ] = 0;
}
$rc = 1;
$meldung = "Liefere Informationen zu Depot '".$kuerzel."'.";
}
else
{
$rc = -2;
$meldung = "Es ist ein Fehler aufgetreten: ".$ergebnis[ 1 ];
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Kürzel angegeben.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.liefere_depotinformationen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $erg_arr );
}
function depot_loeschen( $mandant_name, $kuerzel )
{
$ok = existiert_mandant( $mandant_name );
if ( $ok[ 0 ] > 0 )
{
if ( strlen( $kuerzel ) > 0 )
{
$kuerzel = mb_strtoupper( $kuerzel );
$STATEMENT = "select count(*) anzahl from ca_dok_ablage where mandant_id = ".$ok[ 0 ]." and depot = '".$kuerzel."'";
//xlog( 4, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 1 ][ 0 ][ "anzahl" ] == 0 )
{
$ergebnis = welche_dokumentarten_verwenden_depot( $mandant_name, $kuerzel );
if ( $ergebnis[ 0 ] == 0 )
{
$STATEMENT = "delete from ca_depot where mandant_id = ".$ok[ 0 ]." and ao_kuerzel = '".$kuerzel."'";
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] <> -1 )
{
$rc = 0;
$meldung = "Das Depot '".$kuerzel."' wurde im Mandanten '".$mandant_name."' gelöscht.";
}
else
{
$rc = -4;
$meldung = "Es ist ein Fehler aufgetreten: '".$ergebnis[ 1 ]."'.";
}
}
else
{
$rc = -3;
$meldung = "Das Depot '".$kuerzel."' wird noch von den Dokumentarten ".$ergebnis[ 3 ]." verwendet und kann daher nicht gelöscht werden.";
}
}
else
{
$rc = -2;
$meldung = "Das Depot '".$kuerzel."' kann nicht gelöscht werden, weil es noch Dokumente enthält.";
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Kürzel angegeben.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.depot_loeschen: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $ergebnis_arr, $ergebnis_liste );
}
function welche_dokumentarten_verwenden_depot( $mandant_name, $kuerzel )
{
$ok = existiert_mandant( $mandant_name );
if ( $ok[ 0 ] > 0 )
{
if ( strlen( $kuerzel ) > 0 )
{
$kuerzel = mb_strtoupper( $kuerzel );
$STATEMENT = "select dokart_kuerzel from ca_dokart where dokart_depot = '".$kuerzel."' and mandant_id = ".$ok[ 0 ];
$ergebnis = xdb( $STATEMENT );
foreach ( $ergebnis[ 1 ] as $zeile )
{
$ergebnis_arr[] = $zeile[ "dokart_kuerzel" ];
$ergebnis_list = $ergebnis_list.$zeile[ "dokart_kuerzel" ]."|";
}
$ergebnis_list = substr( $ergebnis_list, 0, -1 );
$rc = count( $ergebnis_arr );
$meldung = "Das Depot '".$kuerzel."' wird von ".$rc." Dokumentarten verwendet.";
}
else
{
$rc = -1;
$meldung = "Es wurde kein Kürzel angegeben.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.welche_dokumentarten_verwenden_depot: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $ergebnis_arr, $ergebnis_list );
}
function depot_aendern( $mandant_name, $kuerzel, $ort, $schranke = 0, $status = "offen", $beschreibung = "" )
{
// Scramble und Typ sind nicht änderbar
// Datenbank-Depots sind ebenfalls nicht änderbar.
$ok = existiert_mandant( $mandant_name );
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
if ( $ok[ 0 ] > 0 )
{
if ( strlen( $kuerzel ) > 0 )
{
$kuerzel = mb_strtoupper( $kuerzel );
$typ = mb_strtoupper( $typ );
$rc = 0;
$depot = liefere_depotinformationen( $mandant_name, $kuerzel );
if ( $depot[ 0 ] > 0 )
{
if ( $depot[ 2 ][ "typ" ] == "F" )
{
/*
// Prüfen ob korrektes Verzeichnis
$ort_arr = explode( DIRECTORY_SEPARATOR, $ort );
foreach( $ort_arr as $elem )
{
if ( strlen( $elem ) > 0 )
{
if ( strlen( $ort_fix ) > 0 )
{
$ort_fix = $ort_fix.DIRECTORY_SEPARATOR.$elem;
}
else
{
$ort_fix = $elem;
}
}
}
*/
if ( is_dir( $ort ) )
{
$test1 = fopen( $ort.DIRECTORY_SEPARATOR."test.test", "w" );
$test2 = fwrite( $test1, "123");
if ( ( $test1 !== false ) && ( $test2 !== false ) )
{
// alles gut!
fclose( $test );
unlink( $ort.DIRECTORY_SEPARATOR."test.test" );
//$ort_fix = $ort.DIRECTORY_SEPARATOR;
}
else
{
$rc = -3;
$meldung = "Es gab einen Dateisystemfehler beim Testen des Depot-Verzeichnisses.";
}
}
else
{
$rc = -7;
$meldung = "Der angegebene Speicherort '".$ort."' ist kein gültiges Verzeichnis.";
}
}
$status = mb_strtolower( $status );
if ( ( $status != "offen" ) && ( $status != "geschlossen" ) )
{
$rc = -7;
$meldung = "Es wurde kein korrekter neuer Status ('".$status."') angegeben.";
}
if ( $schranke == 0 )
{
$schranke = 50 * 1024 * 1024;
}
if ( $rc == 0 )
{
// alles gut, die Tests waren erfolgreich
$STATEMENT = "update ca_depot set ao_ort='".mysqli_real_escape_string( $connection, $ort )."', ao_beschreibung='".mysqli_real_escape_string( $connection, $beschreibung )."', ao_geaendert_am='".time()."', ao_status = '".mysqli_real_escape_string( $connection, $status )."', ao_schranke = ".mysqli_real_escape_string( $connection, $schranke )." where ao_kuerzel = '".mysqli_real_escape_string( $connection, $kuerzel )."' and mandant_id=".$ok[ 0 ];
//xlog( 4, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] == 0 )
{
$rc = 0;
$meldung = "Das Depot '".$kuerzel."' wurde erfolgreich aktualisiert.";
}
else
{
$rc = -5;
$meldung = "Es gab einen Fehler beim Ändern des Depots '".$kuerzel."'.";
}
}
}
else
{
$rc = -4;
$meldung = "Das gewünschte Depot '".$kuerzel."' wurde nicht gefunden und kann daher nicht geändert werden.";
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Kürzel angegeben.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.depot_aendern: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function welche_depots_gibt_es( $mandant_name )
{
$ok = existiert_mandant( $mandant_name );
if ( $ok[ 0 ] > 0 )
{
$STATEMENT = "select ao_kuerzel from ca_depot where mandant_id = ".$ok[ 0 ];
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] > 0 )
{
foreach( $ergebnis[ 1 ] as $zeile )
{
$ergebnis_arr[ ] = $zeile[ "ao_kuerzel" ];
}
$rc = count( $ergebnis_arr );
$meldung = "Liefere ".$rc." Depots für Mandant '".$mandant_name."'.";
}
else
{
$ergebnis_arr = array();
$rc = 0;
$meldung = "Entweder gibt es keine Depots, oder es ist ein Fehler aufgetreten (".$ergebnis[ 1 ].").";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.welche_depots_gibt_es: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $ergebnis_arr );
}
function lege_dokument_in_depot_ab( $mandant_name, $depot_name, $dok_id, $kennung, $dokument_binary, $optionen = array() )
{
$ok = existiert_mandant( $mandant_name );
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
if ( $ok[ 0 ] > 0 )
{
$depot = liefere_depotinformationen( $mandant_name, $depot_name, true );
if ( $depot[ 0 ] == 1 )
{
$mime_type = $optionen[ "mime_type" ];
$ursprungs_dateiname = $optionen[ "ursprungs_dateiname" ];
$zeitstempel = $optionen[ "zeitstempel" ];
$neues_dokument = $optionen[ "neues_dokument" ];
$datei_erw_typ = $optionen[ "datei_erw_typ" ];
$md5 = $optionen[ "md5" ];
$status = $depot[ 2 ][ "status" ];
$schranke = $depot[ 2 ][ "schranke_byte" ];
$typ = $depot[ 2 ][ "typ" ];
$ort = $depot[ 2 ][ "ort" ];
$scramble = $depot[ 2 ][ "scramble" ];
$aktuelle_groesse_byte = $depot[ 2 ][ "aktuelle_groesse_byte" ];
$kuerzel = $depot[ 2 ][ "kuerzel" ];
// dieses Statement wäre noch zu prüfen, wenn man mal weitere Dateitypen zu einem Dokument (z. B. OCR-Dateien, ....) archivieren will - dann sollte $datei_erw_typ auch andere Werte annehmen können als 0 und 1.
if ( $datei_erw_typ <> 1 )
{
$datei_erw_typ = 0;
}
if ( $scramble )
{
$dokument_binary = substr( $dokument_binary, 20 ).substr( $dokument_binary, 0, 20);
$dokument_binary = str_rot13( $dokument_binary );
}
$pruef_summe = bcadd( $aktuelle_groesse_byte, strlen( $dokument_binary ) );
if ( $pruef_summe <= $schranke )
{
if ( $status == "offen" )
{
if ( strlen( $dok_id ) == 0 )
{
$update = " kennung = '".mysqli_real_escape_string( $connection, $kennung )."' ";
}
else
{
$update = " dok_id = ".$dok_id;
}
$STATEMENT = "select d_version, dok_id, kennung from ca_dok_ablage where ".$update;
//xlog( 1, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
//xlog( 1, "Anzahl treffer: ".json_encode( $ergebnis ) );
if ( strlen( $ergebnis[ 1 ][ 0 ][ "d_version" ] ) == 0 )
{
$version = 0;
}
else
{
$version = $ergebnis[ 1 ][ 0 ][ "d_version" ];
}
$dok_id = $ergebnis[ 1 ][ 0 ][ "dok_id" ];
$kennung = $ergebnis[ 1 ][ 0 ][ "kennung" ];
$log_erg = "";
$j_flag = 0;
if ( $neues_dokument )
{
$ereignis = "IMPORT";
$k_version = "+";
$d_version = "+";
$erw_datei_typ = "0";
}
else
{
switch( $datei_erw_typ )
{
// sollte man diese Liste von Case-Fällen mal erweitern wollen, z. B. um auch OCR-Dateien ablegen zu können, müßte ebenfalls erzeuge_neuen_versionseintrag() angepasst werden.
case "1":
$erw_datei_typ = "1";
$j_flag = 1;
$k_version = "";
$d_version = "";
$ereignis = "PIC_RESIZE";
$log_erg = " / ".$ereignis;
break;
default:
$erw_datei_typ = "0";
$k_version = "";
$d_version = "+";
$ereignis = "NEUE_DATEI";
}
}
//erzeuge_neuen_versionseintrag( $dok_id, $ereignis, $d_version = "", $k_version = "", $info = "" )
$neuer_versionseintrag = erzeuge_neuen_versionseintrag( $dok_id, $ereignis, $d_version, $k_version, "" );
//xlog( 1, json_encode( $neuer_versionseintrag ) );
$neue_d_version = $neuer_versionseintrag[ 2 ];
if ( $neue_d_version > 1 )
{
$v_flag = "1";
}
else
{
$v_flag = "0";
}
/*
xlog( 1, "dok_id ".$dok_id );
xlog( 1, "version ".$version );
xlog( 1, "kennung ".$kennung );
xlog( 1, "neue_d_version ".$neue_d_version );
*/
$groesse = strlen( $dokument_binary );
/// Ablage wo genau?
if ( $typ == "D" )
{
// Datenbank
$abl_verfahren = 20;
if ( $pic_resize != "gesetzt" )
{
$STATEMENT = "insert into ca_dok_datei ( mandant_id, dok_id, version, dokument, groesse, mime_type, ursprungs_dateiname, erstellt_am, md5, erw, abl_verfahren, opt_info_1, opt_info_2, opt_info_3, opt_info_4, opt_info_5 ) values ( ".$ok[ 0 ].", ".$dok_id.", ".$neue_d_version.", '".mysqli_real_escape_string( $connection, $dokument_binary )."', ".$groesse.", '".mysqli_real_escape_string( $connection, $mime_type )."', '".mysqli_real_escape_string( $connection, $ursprungs_dateiname )."', '".$neuer_versionseintrag[ 4 ]."', '".$md5."', 0, 0, '' , '' , '' , '' , '' )";
$ergebnis = xdb( $STATEMENT );
//xlog( 1, $STATEMENT );
//xlog( 1, $ergebnis[ 0 ] );
$STATEMENT = "update ca_dok_ablage set depot = '".mysqli_real_escape_string( $connection, $kuerzel )."', v_flag = '".$v_flag."', abl_verfahren = ".$abl_verfahren." where dok_id = ".$dok_id." and mandant_id = ".$ok[ 0 ];
//xlog( 4, $STATEMENT );
$ergebnis2 = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] == 0 )
{
$rc = 1;
$meldung = "Die Nutzdatei zu Dokument ".$dok_id." wurde im Depot '".$kuerzel."' abgelegt.";
}
else
{
$rc = -41;
$meldung = "Die Nutzdatei zu Dokument ".$dok_id." konnte nicht im Depot '".$kuerzel."' abgelegt werden: ".$ergebnis[ 1 ];
}
}
else
{
$rc = -42;
$meldung = "PIC_RESIZE-Dokumente können nicht in DB-Depots abgelegt werden.";
}
}
else
{
// Dateisystem
$rc = 0;
$abl_verfahren = 110;
$ablagepfad = liefere_ablagepfad_zu_dokument( $mandant_name, $dok_id, $depot, $neuer_versionseintrag[ 2 ], $erw_datei_typ, $abl_verfahren );
if ( $ablagepfad[ 0 ] == 0 )
{
$dateidok = $ablagepfad[ 2 ];
$ablagepfad = $ablagepfad[ 3 ];
$gesamt = $ablagepfad[ 4 ];
}
$ergebnis = is_dir( $ablagepfad );
if ( !$ergebnis )
{
$ergebnis = mkdir( $ablagepfad, 0777, true );
if ( !$ergebnis )
{
$rc = -5;
$meldung = "Das Ablageverzeichnis existiert nicht, ließ sich aber nicht anlegen.";
}
}
if ( $rc == 0 )
{
// ab hier sollte das Ablageverzeichnis existieren.
xlog( 1, "Ablagepfad ". $ablagepfad.$dateidok );
$ergebnis = file_put_contents( $ablagepfad.$dateidok, $dokument_binary);
if ( $ergebnis !== false )
{
$STATEMENT = "insert into ca_dok_datei ( mandant_id, dok_id, version, groesse, mime_type, ursprungs_dateiname, erstellt_am, abl_verfahren, erw, md5, opt_info_1, opt_info_2, opt_info_3, opt_info_4, opt_info_5, dokument ) values ( ".$ok[ 0 ].", ".$dok_id.", ".$neue_d_version.", ".$groesse.", '".mysqli_real_escape_string( $connection, $mime_type )."', '".mysqli_real_escape_string( $connection, $ursprungs_dateiname )."', '".$neuer_versionseintrag[ 4 ]."', ".$abl_verfahren.", ".$j_flag.", '".$md5."', '' , '' , '' , '' , '', '' )";
//xlog( 1, $STATEMENT );
//xlog( 1, $ergebnis[ 0 ] );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "update ca_dok_ablage set depot = '".mysqli_real_escape_string( $connection, $kuerzel )."', v_flag = '".$v_flag."', j_flag = '".$j_flag."' where dok_id = ".$dok_id." and mandant_id = ".$ok[ 0 ];
//$STATEMENT = "update ca_dok_ablage set depot = '".mysqli_real_escape_string( $connection, $kuerzel )."', v_flag = '".$v_flag."', j_flag = '".$j_flag."', archivierungsdatum = '".time()."' where dok_id = ".$dok_id." and mandant_id = ".$ok[ 0 ];
//xlog( 5, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] == 0 )
{
$rc = 1;
$meldung = "Die Nutzdatei zu Dokument ".$dok_id." (Version ".$neuer_versionseintrag[ 2 ].$log_erg.") wurde im Depot '".$kuerzel."' abgelegt.";
}
else
{
unlink( $ablagepfad.$dateidok );
$rc = -41;
$meldung = "Die Nutzdatei zu Dokument ".$dok_id." (Version ".$neuer_versionseintrag[ 2 ].$log_erg.") konnte nicht im Depot '".$kuerzel."' abgelegt werden: ".$ergebnis[ 1 ];
}
}
else
{
$rc = -41;
$meldung = "Die Nutzdatei zu Dokument ".$dok_id." konnte nicht im Depot '".$kuerzel."' abgelegt werden: ".$ergebnis[ 1 ];
}
}
// else-Zweig unnötig, da $rc oben bereits gesetzt wird.
}
}
else
{
$rc = -42;
$meldung = "Die Nutzdatei zu Dokument ".$dok_id." konnte nicht im Depot '".$kuerzel."' abgelegt werden, da das Depot nicht offen ist.";
}
}
else
{
$rc = -3;
$meldung = "Der Einlagern dieses Dokuments (ID: ".$dok_id.") in das Depot '".$kuerzel."' würde die maximale Größe des Depots überschreiten.";
}
}
else
{
$rc = -2;
$meldung = $depot[ 1 ];
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.lege_dokument_in_depot_ab: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $neuer_versionseintrag[ 2 ], $dok_id, $kennung );
}
function liefere_dokumentbinary( $mandant_name, $benutzer_anmeldename, $dok_id, $optionen = array() )
{
/*
abl_verfahren = 100 =>
{
if ( $scramble )
{
$dokument_binary = "0000".$dokument_binary;
}
$dateidok = str_pad( $dok_id, 12, "0", STR_PAD_LEFT);
$ebene_1 = substr( $dateidok, 0, 6 );
$ebene_2 = substr( $dateidok, 6, 2 );
$ebene_3 = substr( $dateidok, 8, 4 );
$ablagepfad = $ort.DIRECTORY_SEPARATOR.$ok[ 0 ].DIRECTORY_SEPARATOR.$kuerzel.DIRECTORY_SEPARATOR.$ebene_1.DIRECTORY_SEPARATOR.$ebene_2.DIRECTORY_SEPARATOR;
$ergebnis = file_put_contents( $ablagepfad.$dateidok, $dokument_binary);
}
abl_verfahren = 102 =>
{
if ( $scramble )
{
$dokument_binary = substr( $dokument_binary, 20, 0).substr( $dokument_binary, 0, 20);
}
$dateidok = str_pad( $dok_id, 12, "0", STR_PAD_LEFT);
$ebene_1 = substr( $dateidok, 0, 6 );
$ebene_2 = substr( $dateidok, 6, 2 );
$ebene_3 = substr( $dateidok, 8, 4 );
$ablagepfad = $ort.DIRECTORY_SEPARATOR.$ok[ 0 ].DIRECTORY_SEPARATOR.$kuerzel.DIRECTORY_SEPARATOR.$ebene_1.DIRECTORY_SEPARATOR.$ebene_2.DIRECTORY_SEPARATOR;
$ergebnis = file_put_contents( $ablagepfad.$dateidok, $dokument_binary);
}
*/
$version = $optionen[ "version" ];
$erw_datei_typ = $optionen[ "erw_datei_typ" ];
switch( $erw_datei_typ )
{
case "1":
$erw_datei_typ = "1";
break;
default:
$erw_datei_typ = "0";
break;
}
$ok = existiert_mandant( $mandant_name );
if ( $ok[ 0 ] > 0 )
{
//xlog( 1, "strlen".strlen( $dok_id ));
//xlog( 1, "is_int".is_int( $dok_id ) );
if ( strlen( $dok_id ) > 0 )
{
// Depot feststellen
// Feststellen, ob typ = D oder typ = F
// Scramble feststellen
// Benutzerrechte prüfen
// ggf. Pfad zusammensetzen
// Dokument ausliefern
if ( strlen( $version ) > 0 )
{
$STATEMENT = "select a.depot depot, c.dokument dokument, c.abl_verfahren abl_verfahren, d.ao_typ typ, d.ao_scramble scramble, d.ao_ort ort, a.dokart_kuerzel dokart_kuerzel, c.ursprungs_dateiname ursprungs_dateiname, c.erw erw, c.mime_type mime_type FROM ca_depot d, ca_dok_ablage a, ca_dok_datei c WHERE c.version = ".$version." and c.dok_id = a.dok_id and a.depot = d.ao_kuerzel AND a.dok_id = ".$dok_id." and d.mandant_id = ".$ok[ 0 ];
}
else
{
$STATEMENT = "select a.depot depot, c.dokument dokument, a.d_version d_version, c.abl_verfahren abl_verfahren, d.ao_typ typ, d.ao_scramble scramble, d.ao_ort ort, a.dokart_kuerzel dokart_kuerzel, c.ursprungs_dateiname ursprungs_dateiname, c.erw erw, c.mime_type mime_type FROM ca_depot d, ca_dok_ablage a, ca_dok_datei c WHERE c.version = a.d_version and c.dok_id = a.dok_id and a.depot = d.ao_kuerzel AND a.dok_id = ".$dok_id." and d.mandant_id = ".$ok[ 0 ];
}
//xlog( 1, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] > 0 )
{
$sicherungs_arr = array();
$ziel_arr = array();
//xlog( 5, json_encode( $ergebnis[ 1 ]) );
foreach( $ergebnis[ 1 ] as $treffer )
{
//xlog( 4, json_encode( $treffer ) );
if ( $treffer[ "erw" ] == 0 )
{
$sicherungs_arr = $treffer;
}
if ( $treffer[ "erw" ] == $erw_datei_typ )
{
$ziel_arr = $treffer;
break;
}
}
if ( count( $ziel_arr ) == 0 )
{
$ziel_arr = $sicherungs_arr;
}
//xlog( 4, json_encode( $ziel_arr) );
( $ziel_arr[ "scramble" ] == "ja" ) ? $scramble = true : $scramble = false;
$depot = $ziel_arr[ "depot" ];
$typ = $ziel_arr[ "typ" ];
$ort = $ziel_arr[ "ort" ];
$erw = $ziel_arr[ "erw" ];
if ( $erw == 0 )
{
$erw_datei_typ = "0";
}
//xlog( 1, "Ort ".$ort );
if ( strlen( $version ) > 0 )
{
$d_version = $version;
}
else
{
$d_version = $ziel_arr[ "d_version" ];
}
$dokart_kuerzel = $ziel_arr[ "dokart_kuerzel" ];
$abl_verfahren = $ziel_arr[ "abl_verfahren" ];
$dokument_binary = $ziel_arr[ "dokument" ];
$weitere_infos[ "mime_type" ] = $ziel_arr[ "mime_type" ];
$weitere_infos[ "ursprungs_dateiname" ] = $ziel_arr[ "ursprungs_dateiname" ];
// Check Benutzerrechte
$sysrechte = besitzt_benutzer_systemrecht( $mandant_name, $benutzer_anmeldename, "D_".$dokart_kuerzel."_LESEN" );
if ( $sysrechte[ 0 ] == 1 )
{
if ( $typ == "D" )
{
$rc = 1;
$meldung = "Liefere Dokument-Binary zu Dokument ".$dok_id.".";
}
else
{
switch( $abl_verfahren )
{
case "110":
$pfad = liefere_ablagepfad_zu_dokument( $mandant_name, $dok_id, $depot, $d_version, $erw_datei_typ, $abl_verfahren );
$dokument_binary = file_get_contents( $pfad[ 4 ] );
if ( $scramble )
{
$dokument_binary = str_rot13( $dokument_binary );
$dokument_binary = substr( $dokument_binary, -20, 20).substr( $dokument_binary, 0, -20 );
}
else
{
$dokument_binary = $dokument_binary;
}
//xlog( 1, "Länge Dokument-binary ".strlen( $dokument_binary ) );
break;
}
$rc = 1;
$meldung = "Liefere Dokument-Binary zu Dokument ".$dok_id." (Version ".$d_version.").";
}
}
else
{
$rc = -3;
$meldung = "Der Benutzer '".$benutzer_anmeldename."' besitzt nicht das entsprechende Systemrecht, um sich das Dokument ".$dok_id." anzeigen zu lassen.";
$dokument_binary = file_get_contents( "img/geht_nicht.png" );
$weitere_infos[ "mime_type" ] = "image/png";
$weitere_infos[ "ursprungs_dateiname" ] = "nix_da.png";
}
}
else
{
$rc = -2;
$meldung = "Es ist ein Fehler aufgetreten: ".$ergebnis[ 0 ];
}
}
else
{
$rc = -4;
$meldung = "Es wurde keine gültige Dok-ID angegeben ('".$dok_id."').";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.liefere_dokumentbinary: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $dokument_binary, $weitere_infos );
}
function liefere_ablagepfad_zu_dokument( $mandant_name, $dok_id, $depot, $version = 1, $erw_datei_typ = 0, $ablage_verfahren = 110 )
{
$ok = existiert_mandant( $mandant_name );
//$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
if ( $ok[ 0 ] > 0 )
{
if ( ! is_array( $depot ) )
{
$depot = liefere_depotinformationen( $mandant_name, $depot );
}
if ( $depot[ 0 ] == 1 )
{
$ort = $depot[ 2 ][ "ort" ];
$kuerzel = $depot[ 2 ][ "kuerzel" ];
switch ( $ablage_verfahren )
{
case 110:
$dateidok = str_pad( $dok_id, 12, "0", STR_PAD_LEFT);
//000001000104
$ebene_1 = substr( $dateidok, 0, 6 );
$ebene_2 = substr( $dateidok, 6, 3 );
//$ebene_3 = substr( $dateidok, 8, 4 );
$dateidok = $dateidok.".".$version.".".$erw_datei_typ;
$ablagepfad = $ort.DIRECTORY_SEPARATOR.$ok[ 0 ].DIRECTORY_SEPARATOR.$kuerzel.DIRECTORY_SEPARATOR.$ebene_1.DIRECTORY_SEPARATOR.$ebene_2.DIRECTORY_SEPARATOR;
$vollstaendig = $ablagepfad.$dateidok;
$rc = 0;
$meldung = "Liefere Ablagepfad zu Dokument ".$dok_id.".";
break;
default:
$rc = -3;
$meldung = "Das Ablageverfahren ".$ablage_verfahren." ist nicht bekannt.";
break;
}
}
else
{
$rc = -2;
$meldung = $depot[ 1 ];
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.liefere_ablagepfad_zu_dokument: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $dateidok, $ablagepfad, $vollstaendig );
}
function liefere_dateien_zu_dokument( $mandant_name, $dok_id )
{
$ok = existiert_mandant( $mandant_name );
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
if ( $ok[ 0 ] > 0 )
{
if ( strlen( $dok_id ) > 0 )
{
$dok = liefere_dokumentinformationen( $mandant_name, $dok_id );
$depot = $dok[ 2 ][ "depot" ];
$abl_verfahren = $dok[ 2 ][ "abl_verfahren" ];
$versionen = liefere_versionseintraege( $dok_id );
if ( $versionen[ 0 ] > 0 )
{
foreach ( $versionen[ 2 ] as $version )
{
switch( $version[ "ereignis" ] )
{
case "IMPORT":
case "NEUE_DATEI":
case "PIC_RESIZE":
$ergebnis = liefere_ablagepfad_zu_dokument( $mandant_name, $dok_id, $depot, $version[ "d_version" ], $version[ "erw" ], $abl_verfahren );
$dateien[] = $ergebnis[ 4 ];
break;
}
}
$rc = count( $dateien );
$meldung = "Zum Dokument ".$dok_id." wurden ".$rc." Dateien gefunden.";
}
else
{
$rc = -3;
$meldung = "Zum Dokument ".$dok_id." wurden keine Versionseinträge gefunden oder Fehler: ".$versionen[ 0 ]." / ".$versionen[ 1 ];
}
}
else
{
$rc = -2;
$meldung = "Es wurde keine Dokument-ID angegeben.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.liefere_dateien_zu_dokument: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $dateien );
}
function aktualisiere_dokument_attribute( $mandant_name, $dok_id, $neue_attribute_arr, $mehrfachattribute )
{
$ok = existiert_mandant( $mandant_name );
$connection = mysqli_connect( "localhost", "ca_db", "ca_db", "ca_system" );
if ( $ok[ 0 ] > 0 )
{
// Dokumentart feststellen
// Feststellen, ob sich Attribute geändert haben
// alte Attribute sichern
// alte Attribute aktualisieren
// fertig.
$dok = liefere_dokumentinformationen( $mandant_name, $dok_id );
$dokart = liefere_dokartinformationen( $mandant_name, $dok[ 2 ][ "dokart_kuerzel" ] );
// Dokumentart:
//$dokart_attribs[ $zeile[ "attrib_db_spalte"] ] = array( "attrib_pflicht"=>$pflicht, "attrib_farbe"=>$farbe, "attrib_layout_fett"=>$fett, "attrib_layout_unterstrichen"=>$unterstrichen, "attrib_layout_kursiv"=>$kursiv, "attrib_id"=>$zeile[ "attrib_id"], "dokart_kuerzel"=>$zeile[ "dokart_kuerzel"], "flags"=>$zeile[ "flags"], "hinzugefuegt_am"=>$zeile[ "hinzugefuegt_am"], "mandant_id"=>$zeile[ "mandant_id"], "attrib_beschreibung"=>$zeile[ "attrib_beschreibung"], "attrib_db_spalte"=>$zeile[ "attrib_db_spalte"], "attrib_erstellt_am"=>$zeile[ "attrib_erstellt_am"], "attrib_geaendert_am"=>$zeile[ "attrib_geaendert_am"], "attrib_name"=>$zeile[ "attrib_name"], "attrib_wertemenge"=>$zeile[ "attrib_wertemenge"], "attrib_vorhandene_werte"=>$vorhanden, "attrib_typ"=>$attrib_typ, "attrib_titel"=>$titel, "attrib_pos_in_maske"=>$pos_in_maske );
// Dokument:
// $ergebnis_arr[ $attribut[ "attrib_db_spalte" ] ] = $ergebnis[ 1 ][ 0 ][ $attribut[ "attrib_db_spalte" ] ];
// Neue Attribute:
// $neue_attribute_arr[ "alpha_01" ] = $alpha_01;
// $neue_attribute_arr[ "alpha_02" ] = $alpha_02;
// $neue_attribute_arr[ "alpha_03" ] = $alpha_03;
$aenderung_gefunden = false;
if ( ( is_array( $mehrfachattribute ) ) && ( count( $mehrfachattribute ) > 0 ) )
{
// Bei neuen Mehrfachattributen wird immer aktualisiert
$aenderung_gefunden = true;
}
if ( ! ( $aenderung_gefunden ) )
{
foreach( $dokart[ 2 ][ "attribute" ] as $dokart_attrib )
{
//xlog( 3, "spalte ".$dokart_attrib[ "attrib_db_spalte" ] );
//xlog( 3, "Attribut Dokument: ".$dok[ 2 ][ $dokart_attrib[ "attrib_db_spalte" ] ] );
//xlog( 3, "neues Attribut : ".$neue_attribute_arr[ $dokart_attrib[ "attrib_db_spalte" ] ] );
//xlog( 1, ">".$dok[ 2 ][ $dokart_attrib[ "attrib_db_spalte" ] ]."< >".$neue_attribute_arr[ $dokart_attrib[ "attrib_db_spalte" ] ]."<" );
if ( $dok[ 2 ][ $dokart_attrib[ "attrib_db_spalte" ] ] != $neue_attribute_arr[ $dokart_attrib[ "attrib_db_spalte" ] ] )
{
$aenderung_gefunden = true;
break;
}
}
}
if ( $aenderung_gefunden )
{
$versionseintrag = erzeuge_neuen_versionseintrag( $dok_id, "ATTRIB_UPDATE", "", "+" );
// Attribute sichern
$STATEMENT_I = "insert into ca_index_history ( dok_id, aktualisierungs_zeitpunkt, aktualisierungs_benutzer, version, ";
$VALUES_I = $dok_id.", '".$versionseintrag[ 4 ]."', '".$_SESSION[ "benutzer_anmeldename" ]."', ".$versionseintrag[ 3 ].", ";
$STATEMENT_U = "update ca_index set ";
$mehrfach = array();
foreach( $dokart[ 2 ][ "attribute" ] as $dokart_attrib )
{
if ( ! ( substr( $dokart_attrib[ "attrib_db_spalte" ], 0, 2 ) == "p_" ) )
{
if ( ( $dokart_attrib[ "attrib_titel" ] == true ) && ( strlen( $neue_attribute_arr[ $dokart_attrib[ "attrib_db_spalte" ] ] ) > 0 ) )
{
$titel = $titel.$neue_attribute_arr[ $dokart_attrib[ "attrib_db_spalte" ] ]." | ";
}
$STATEMENT_I = $STATEMENT_I.$dokart_attrib[ "attrib_db_spalte" ].", ";
switch( $dokart_attrib[ "attrib_typ" ] )
{
case "datum":
if ( strlen( $neue_attribute_arr[ $dokart_attrib[ "attrib_db_spalte" ] ] ) == 0 )
{
$datevalue = "null";
$anfuehrung = "";
}
else
{
$datevalue = $neue_attribute_arr[ $dokart_attrib[ "attrib_db_spalte" ] ];
$anfuehrung = "'";
}
$VALUES_I = $VALUES_I.$anfuehrung.datum2mysql( $datevalue ).$anfuehrung.", ";
$STATEMENT_U = $STATEMENT_U.$dokart_attrib[ "attrib_db_spalte" ]." = ".$anfuehrung.datum2mysql( $datevalue ).$anfuehrung.", ";
break;
case "alpha":
case "geld":
case "text":
//case "num":
$VALUES_I = $VALUES_I."'".$neue_attribute_arr[ $dokart_attrib[ "attrib_db_spalte" ] ]."', ";
$STATEMENT_U = $STATEMENT_U.$dokart_attrib[ "attrib_db_spalte" ]." = '".$neue_attribute_arr[ $dokart_attrib[ "attrib_db_spalte" ] ]."', ";
break;
case "num":
$wert = str_replace( ",", ".", $neue_attribute_arr[ $dokart_attrib[ "attrib_db_spalte" ] ] );
if ( strlen( $wert ) == 0 )
{
$wert = 0;
}
$VALUES_I = $VALUES_I.$wert.", ";
$STATEMENT_U = $STATEMENT_U.$dokart_attrib[ "attrib_db_spalte" ]." = ".$wert.", ";
break;
}
}
else
{
$mehrfach[] = $dokart_attrib;
$mehrfach_gefunden = true;
}
}
if ( strlen( $titel ) > 0 )
{
$titel = substr( $titel, 0, -3 );
$titel_lang = "(".$dokart[ 2 ][ "dokart_name" ].") ".$titel;
}
else
{
$titel = ""; //"Dokument-ID ".$dok_id;
$titel_lang = "";
}
$STATEMENT_I = substr( $STATEMENT_I, 0, -2 )." ) values ( ".substr( $VALUES_I, 0, -2 )." )";
$STATEMENT_U = substr( $STATEMENT_U, 0, -2 )." where dok_id = ".$dok_id;
$STATEMENT_A = "update ca_dok_ablage set titel = '".$titel."', titel_lang = '".$titel_lang."' where dok_id = ".$dok_id;
//xlog( 5, $STATEMENT_I );
//xlog( 5, $STATEMENT_U );
xdb( $STATEMENT_I );
xdb( $STATEMENT_U );
xdb( $STATEMENT_A );
if ( $mehrfach_gefunden )
{
// Mehrfachattribute
// $mehrfachattribute hat folgenden Aufbau:
// array( array( p_alpha_01 => "Wert", p_alpha_02 = "Wert", ...), array( p_alpha_01 => "Wert", p_alpha_02 = "Wert"...), array( p_alpha_01 => "Wert", p_alpha_02 => "Wert", ...))
// Nicht ganz einfach, aber was ist schon einfach ???
// Zuerst werden die aktuellen Attribute gelöscht, dann die neuen eingetragen (in ca_posdaten und ca_posdaten_history).
$STATEMENT = "delete from ca_posdaten where dok_id = ".$dok_id;
xdb( $STATEMENT );
//xlog( 4, json_encode( $mehrfach ) ) ;
$pos_ids = array();
$pos_ids_text = "";
foreach( $mehrfachattribute as $attributzeile )
{
$p_felder = "";
$p_werte = "";
if ( count( $attributzeile ) > 0 )
{
foreach( $attributzeile as $attribut => $wert )
{
$p_felder = $p_felder.$attribut.", ";
$attr_typ = substr( $attribut, 2, 4 );
switch ( $attr_typ )
{
case "datu":
//userlog(5, "Datum ".$wert )
$wert_passend_pos = datum2mysql( $wert );
$p_werte = $p_werte."'".mysqli_real_escape_string( $connection, $wert_passend_pos )."', ";
break;
case "geld":
if ( strlen( $wert ) == 0 )
{
$wert = "0";
}
$wert_passend_pos = str_replace( ",", ".", $wert );
$p_werte = $p_werte." ".mysqli_real_escape_string( $connection, $wert_passend_pos ).", ";
break;
case "alph":
$wert_passend_pos = $wert;
$p_werte = $p_werte."'".mysqli_real_escape_string( $connection, $wert_passend_pos )."', ";
break;
case "num_":
if ( strlen( $wert ) == 0 )
{
$wert = "0";
}
$wert_passend_pos = str_replace( ",", ".", $wert );
$p_werte = $p_werte." ".mysqli_real_escape_string( $connection, $wert_passend_pos ).", ";
break;
}
}
$STATEMENT = "insert into ca_posdaten ( dok_id, ".substr( $p_felder, 0, strlen( $p_felder ) - 2 ).") values (".$dok_id.", ".substr( $p_werte, 0, strlen( $p_werte ) - 2 )." );";
//xlog( 5, $STATEMENT );
$ergebnis_3 = xdb( $STATEMENT );
$STATEMENT = "insert into ca_posdaten_history ( aktualisierungs_zeitpunkt, aktualisierungs_benutzer, version, pos_id, dok_id, ".substr( $p_felder, 0, strlen( $p_felder ) - 2 ).") values ( '".$versionseintrag[ 4 ]."', '".$_SESSION[ "benutzer_anmeldename" ]."', ".$versionseintrag[ 3 ].", ".$ergebnis_3[ 0 ].", ".$dok_id.", ".substr( $p_werte, 0, strlen( $p_werte ) - 2 )." );";
//xlog( 5, $STATEMENT );
$ergebnis_4 = xdb( $STATEMENT );
$pos_ids[] = $ergebnis_3[ 0 ];
if ( strlen( $pos_ids_text ) == 0 )
{
$pos_ids_text = "( ".$ergebnis_3[ 0 ];
}
else
{
$pos_ids_text = $pos_ids_text." | ".$ergebnis_3[ 0 ];
}
}
else
{
xlog( 3, "admin.aktualisiere_dokument_attribute: leere Positionszeile ignoriert (Dokument-ID ".$dok_id.").");
}
}
$pos_ids_text = $pos_ids_text." )";
$pos_text = " Erzeugte Positions-IDs (".count($pos_ids)."): ".$pos_ids_text;
}
$rc = 1;
$meldung = "Für das Dokument ".$dok_id." wurde eine neue Attributversion angelegt.".$pos_text;
}
else
{
$rc = -3;
$meldung = "Es wurden keine geänderten Attribute festgestellt.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.aktualisiere_dokument_attribute: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $dokument_binary, $mime_type );
}
function erzeuge_neuen_versionseintrag( $dok_id, $ereignis, $d_version = "", $k_version = "", $info = "" )
{
if ( strlen( $dok_id ) > 0 )
{
if ( strlen( $ereignis ) > 0 )
{
$STATEMENT = "select d_version from ca_dok_history where dok_id = ".$dok_id." and zeitstempel = (select max(zeitstempel) from ca_dok_history where dok_id = ".$dok_id." ) ";
//$STATEMENT = "select d_version, dok_id, kennung from ca_dok_ablage where ".$update;
$ergebnis = xdb( $STATEMENT );
$bekannte_d_version = $ergebnis[ 1 ][ 0 ][ "d_version" ];
if ( strlen( $bekannte_d_version ) == 0 )
{
$bekannte_d_version = 0;
}
$STATEMENT = "select k_version from ca_dok_history where dok_id = ".$dok_id." and zeitstempel = (select max(zeitstempel) from ca_dok_history where dok_id = ".$dok_id." ) ";
$ergebnis = xdb( $STATEMENT );
$bekannte_k_version = $ergebnis[ 1 ][ 0 ][ "k_version" ];
if ( strlen( $bekannte_k_version ) == 0 )
{
$bekannte_k_version = 0;
}
if ( $k_version == "+" )
{
$bekannte_k_version = bcadd( $bekannte_k_version, 1, 0 );
}
if ( $d_version == "+" )
{
$bekannte_d_version = bcadd( $bekannte_d_version, 1, 0 );
}
if ( !( ( $bekannte_k_version == 0 ) || ( $bekannte_d_version == 0 ) ) )
{
switch ( $ereignis )
{
case "PIC_RESIZE":
$erw = 1;
$j_flag_0 = ", j_flag = 0 ";
break;
default:
$erw = 0;
$j_flag_0 = "";
break;
}
$zeitstempel = time();
$STATEMENT = "insert into ca_dok_history ( dok_id, ereignis, info, d_version, k_version, zeitstempel, benutzer_anmeldename, erw ) values ( ".$dok_id.", '".$ereignis."', '".$info."', ".$bekannte_d_version.", ".$bekannte_k_version.", ".$zeitstempel.", '".$_SESSION[ "benutzer_anmeldename" ]."', ".$erw." )";
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "update ca_dok_ablage set d_version = ".$bekannte_d_version.", k_version = ".$bekannte_k_version.$j_flag_0." where dok_id = ".$dok_id;
$ergebnis = xdb( $STATEMENT );
$rc = 0;
$meldung = "Es wurde ein History-Eintrag für Dokument-ID ".$dok_id." erzeugt (Zeitstempel: ".date( "d.m.Y H:i", $zeitstempel )." Uhr).";
}
else
{
$rc = -3;
$meldung = "Eine Version 0 kann nicht erzeugt werden: K|D ".$bekannte_k_version."|".$bekannte_d_version.".";
}
}
else
{
$rc = -2;
$meldung = "Es wurde kein Ereignis angegeben.";
}
}
else
{
$rc = -1;
$meldung = "Es wurde keine Dokument-ID angegeben.";
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.erzeuge_neuen_versionseintrag: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $bekannte_d_version, $bekannte_k_version, $zeitstempel );
}
function liefere_versionseintraege( $dok_id )
{
$ok = existiert_mandant( $_SESSION[ "mandant_name" ] );
if ( $ok[ 0 ] > 0 )
{
if ( strlen( $dok_id ) > 0 )
{
$STATEMENT = "select h.dok_id, h.ereignis, h.info, h.d_version, h.k_version, h.zeitstempel, h.benutzer_anmeldename, a.groesse, a.mime_type, a.erw from ca_dok_history h, ca_dok_datei a where a.dok_id = ".$dok_id." and h.dok_id = a.dok_id and h.d_version = a.version and h.erw = a.erw order by zeitstempel";
//xlog( 1, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] != 0 )
{
$ergebnis_arr = $ergebnis[ 1 ];
$rc = $ergebnis[ 0 ];
$meldung = "Liefere ".$rc." Versionseintraege für Dokument-ID ".$dok_id.".";
}
else
{
$rc = -3;
$meldung = "Zur angegebenen Dokument-ID ".$dok_id." wurde keine Versionen gefunden.";
}
}
else
{
$rc = -2;
$meldung = "Es wurde keine Dokument-ID angegeben.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.liefere_versionseintraege: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $ergebnis_arr );
}
function loesche_dokument( $mandant_name, $dok_id, $hartes_loeschen = false )
{
$ok = existiert_mandant( $mandant_name );
if ( $ok[ 0 ] > 0 )
{
if ( strlen( $dok_id ) > 0 )
{
$dok = liefere_dokumentinformationen( $mandant_name, $dok_id );
$ergebnis = besitzt_benutzer_systemrecht( $mandant_name, $_SESSION[ "benutzer_anmeldename" ], $dok[ 2 ][ "dokart_typ" ]."_".$dok[ 2 ][ "dokart_kuerzel" ]."_LOESCHEN" );
if ( $ergebnis[ 0 ] == 1 )
{
if ( $hartes_loeschen != true )
{
$STATEMENT = "update ca_dok_ablage set status = 'geloescht' where dok_id = ".$dok_id." and mandant_id = ".$ok[ 0 ];
$ergebnis = xdb( $STATEMENT );
$rc = 1;
$meldung = "Das Dokument ".$dok_id." wurde im Mandanten ".$mandant_name." gelöscht.";
}
else
{
$STATEMENT = "delete from ca_dok_history where dok_id = ".$dok_id." and dok_id in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_dok_datei where dok_id = ".$dok_id." and dok_id in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_index where dok_id = ".$dok_id." and dok_id in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_index_history where dok_id = ".$dok_id." and dok_id in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_notiz where element_id = ".$dok_id." and element_typ = 'd'"." and element_id in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_jobs where element = ".$dok_id." and element_typ = 'd'"." and element in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_posdaten where dok_id = ".$dok_id." and dok_id in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_posdaten_history where dok_id = ".$dok_id." and dok_id in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_bezug where ( dok_id_1 = ".$dok_id." or dok_id_2 = ".$dok_id." ) and ( ( dok_id_1 in ( select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ]." ) ) or ( dok_id_2 in ( select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ]." ) ) )";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_wfl_protokoll where dok_id = ".$dok_id." and dok_id in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_favoriten where unter_elem = '".$dok_id."' and unter_elem_typ = 'd' and unter_elem in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_postkorb where dok_id = ".$dok_id." and dok_id in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_dok_ablage where dok_id = ".$dok_id." and mandant_id = ".$ok[ 0 ];
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
// eigentlich muss jetzt noch die Dokumentdatei gelöscht werden.
$rc = 2;
$meldung = "Das Dokument ".$dok_id." wurde im Mandanten ".$mandant_name." gelöscht (the hard way).";
}
}
else
{
$rc = -5;
$meldung = "Es ist ein Fehler aufgetreten oder nicht ausreichende Berechtigungen (".$dok_id."): ".$ergebnis[ 1 ];
}
}
else
{
$rc = -2;
$meldung = "Es wurde keine Dokument-ID angegeben.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.loesche_dokument: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function loesche_dokument_2( $mandant_name, $dok_id, $hartes_loeschen = false )
{
// Diese Funktion soll Dokumente inkl. der dazugehörigen Dateien im Dateibaum löschen
$ok = existiert_mandant( $mandant_name );
if ( $ok[ 0 ] > 0 )
{
if ( strlen( $dok_id ) > 0 )
{
$dok = liefere_dokumentinformationen( $mandant_name, $dok_id );
$ergebnis = besitzt_benutzer_systemrecht( $mandant_name, $_SESSION[ "benutzer_anmeldename" ], $dok[ 2 ][ "dokart_typ" ]."_".$dok[ 2 ][ "dokart_kuerzel" ]."_LOESCHEN" );
if ( $ergebnis[ 0 ] == 1 )
{
if ( $hartes_loeschen != true )
{
$STATEMENT = "update ca_dok_ablage set status = 'geloescht' where dok_id = ".$dok_id." and mandant_id = ".$ok[ 0 ];
$ergebnis = xdb( $STATEMENT );
$rc = 1;
$meldung = "Das Dokument ".$dok_id." wurde im Mandanten ".$mandant_name." gelöscht.";
}
else
{
// Zuerst die Nutzdatei löschen
$ergebnis = liefere_dateien_zu_dokument( $mandant_name, $dok_id );
//xlog( 3, "ergebnis ".json_encode( $ergebnis ) );
if ( $ergebnis[ 0 ] > 0 )
{
$co = 0;
$cu = 0;
foreach( $ergebnis[ 2 ] as $dateipfad )
{
//xlog( 3, "Dateipfad ".$dateipfad );
$dateipfad = realpath( $dateipfad );
$e = unlink( $dateipfad );
if ( $e == false )
{
xlog( 2, "admin.loesche_dokument_2: Die Datei ".$dateipfad." konnte nicht gelöscht werden." );
$co++;
}
else
{
$cu++;
xlog( 3, "admin.loesche_dokument_2: Die Datei ".$dateipfad." wurde gelöscht." );
}
}
if ( $co > 0 )
{
$dat_meldung_2 = $co." Dateien konnten nicht gelöscht werden (siehe Log).";
}
$rc = ergebnis[ 0 ];
$dat_meldung = " Es wurden ".$cu." Dateien gelöscht. ".$dat_meldung_2;
}
else
{
$dat_meldung = " Es wurden keine Nutzdateien zu Dokument ".$dok_id." gefunden.";
}
$STATEMENT = "delete from ca_dok_history where dok_id = ".$dok_id." and dok_id in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_dok_datei where dok_id = ".$dok_id." and dok_id in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_index where dok_id = ".$dok_id." and dok_id in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_index_history where dok_id = ".$dok_id." and dok_id in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_notiz where element_id = ".$dok_id." and element_typ = 'd'"." and element_id in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_jobs where element = ".$dok_id." and element_typ = 'd'"." and element in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_posdaten where dok_id = ".$dok_id." and dok_id in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_posdaten_history where dok_id = ".$dok_id." and dok_id in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_bezug where ( dok_id_1 = ".$dok_id." or dok_id_2 = ".$dok_id." ) and ( ( dok_id_1 in ( select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ]." ) ) or ( dok_id_2 in ( select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ]." ) ) )";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_wfl_protokoll where dok_id = ".$dok_id." and dok_id in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_favoriten where unter_elem = '".$dok_id."' and unter_elem_typ = 'd' and unter_elem in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_postkorb where dok_id = ".$dok_id." and dok_id in (select dok_id from ca_dok_ablage where mandant_id = ".$ok[ 0 ].") ";
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$STATEMENT = "delete from ca_dok_ablage where dok_id = ".$dok_id." and mandant_id = ".$ok[ 0 ];
xlog( 6, $STATEMENT );
$ergebnis = xdb( $STATEMENT );
$rc = 2;
$meldung = "Das Dokument ".$dok_id." wurde im Mandanten ".$mandant_name." gelöscht (the hard way).".$dat_meldung;
}
}
else
{
$rc = -5;
$meldung = "Es ist ein Fehler aufgetreten oder nicht ausreichende Berechtigungen (".$dok_id."): ".$ergebnis[ 1 ];
}
}
else
{
$rc = -2;
$meldung = "Es wurde keine Dokument-ID angegeben.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.loesche_dokument: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function liefere_kenndaten_versionseintrag( $mandant_name, $dok_id, $k_version, $dokart_kuerzel = "" )
{
$ok = existiert_mandant( $mandant_name );
if ( $ok[ 0 ] > 0 )
{
if ( ( strlen( $dok_id ) > 0 ) && ( strlen( $k_version ) > 0 ) )
{
if ( strlen( $dokart_kuerzel ) == 0 )
{
$dokument = liefere_dokumentinformationen( $mandant_name, $dok_id );
$dokart_kuerzel = $dokument[ 2 ][ "dokart_kuerzel" ];
}
$dokart = liefere_dokartinformationen( $mandant_name, $dokart_kuerzel );
$SELECT = "dok_id, aktualisierungs_zeitpunkt, aktualisierungs_benutzer, version, ";
foreach( $dokart[ 2 ][ "attribute" ] as $attribut )
{
if ( substr( $attribut[ "attrib_db_spalte" ], 0, 2 ) != "p_" )
{
$SELECT = $SELECT.$attribut[ "attrib_db_spalte" ].", ";
}
else
{
$POS_SELECT = $POS_SELECT.$attribut[ "attrib_db_spalte" ].", ";
}
}
$SELECT = substr( $SELECT, 0, strlen( $SELECT ) - 2 );
$POS_SELECT = substr( $POS_SELECT, 0, strlen( $POS_SELECT ) - 2 );
if ( strlen( $POS_SELECT ) > 0 )
{
$POS_SELECT = ", ".$POS_SELECT;
}
$STATEMENT = "select ".$SELECT." from ca_index_history where dok_id = ".$dok_id." and version = ".$k_version;
//xlog( 4, $STATEMENT);
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] == 1 )
{
foreach( $ergebnis[ 1 ][ 0 ] as $key => $value )
{
$key_split = explode( "_", $key );
$key_split = mb_strtolower( $key_split[ 0 ] );
switch ( $key_split )
{
case "datum":
$treffer[ $key ] = mysql2datum( $value );
break;
default:
$treffer[ $key ] = $value;
break;
}
}
//xlog( 4, json_encode( $treffer ) );
$STATEMENT = "select pos_id, aktualisierungs_zeitpunkt, aktualisierungs_benutzer, version ".$POS_SELECT." from ca_posdaten_history where dok_id = ".$dok_id." and version = ".$k_version;
xlog( 6, "admin.liefere_kenndaten_versionseintrag: ".$STATEMENT );
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 0 ] > 0 )
{
$i = 0;
foreach( $ergebnis[ 1 ] as $trefferzeile )
{
$i++;
$zeile = array();
foreach( $trefferzeile as $feld=>$wert )
{
//xlog( 4, $i." Feld ".$feld." Wert ".$wert );
$f = explode( "_", $feld );
$f = $f[ 0 ]."_".$f[ 1 ];
switch ( $f )
{
case "p_alpha":
case "p_num":
case "p_geld":
$zeile[ $feld ] = $wert;
break;
case "p_datum":
$zeile[ $feld ] = mysql2datum( $wert );
break;
}
}
$mehrfachattribute[] = $zeile;
}
}
else
{
$mehrfachattribute = array();
}
$rc = 1;
$meldung = "Liefere Kenndaten-Version ".$k_version." zur Dokument-ID ".$dok_id.".";
}
else
{
$rc = -4;
$meldung = "Es ist ein Fehler aufgetreten: RC ".$ergebnis[ 0 ].", Meldung: ".$ergebnis[ 1 ];
}
}
else
{
$rc = -3;
$meldung = "Entweder Dokument-ID >".$dok_id."< oder Kenndaten-Version >".$k_version."< wurden nicht angegeben.";
}
}
else
{
$rc = $ok[ 0 ];
$meldung = $ok[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.liefere_kenndaten_versionseintrag: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $treffer, $dokart[ 2 ], $mehrfachattribute );
}
function exportiere_dokument( $mandant_name, $dok_id, $export_pfad )
{
$ok_1 = existiert_mandant( $mandant_name );
if ( $ok_1[ 0 ] > 0 )
{
if ( strlen( $dok_id ) > 0 )
{
if ( strlen( $export_pfad ) == 0 )
{
$ep = liefere_konfig( $mandant_name, "import_ordner" );
if ( strlen( $ep ) > 0 )
{
$export_pfad = $ep;
xlog( 3, "admin.exportiere_dokument: Import-Parameter >export_pfad< nicht gesetzt, benutze Konfigurationsoption >import_ordner< (Wert: >".$ep."<." );
}
}
if ( strlen( $export_pfad ) > 0 )
{
$ergebnis = liefere_dokumentinformationen( $mandant_name, $dok_id );
if ( $ergebnis[ 0 ] > 0 )
{
$file_text = "";
$file_text = $file_text."dokart = \"".$ergebnis[ 2 ][ "dokart_kuerzel" ]."\"\n";
$file_text = $file_text."mime_type = \"".$ergebnis[ 2 ][ "mime_type" ]."\"\n";
$file_text = $file_text."kennung = \"".$ergebnis[ 2 ][ "kennung" ]."\"\n";
$file_text = $file_text."ursprungs_dateiname = \"".$ergebnis[ 2 ][ "ursprungs_dateiname" ]."\"\n";
foreach( $ergebnis[ 2 ] as $eigenschaft=>$wert )
{
$key = substr( $eigenschaft, 0, 4 );
switch ( $key )
{
case "alph":
case "datu":
case "num_":
case "geld":
$file_text = $file_text.$eigenschaft." = \"".$ergebnis[ 2 ][ $eigenschaft ]."\"\n";
break;
default:
break;
}
}
//xlog( 1, $file_text );
if ( $ergebnis[ 2 ][ "dokart_typ" ] == "D" )
{
$optionen[ "erw_datei_typ" ] = 0;
$dokument = liefere_dokumentbinary( $mandant_name, $_SESSION[ "benutzer_anmeldename" ], $dok_id, $optionen );
$ext = pathinfo( $ergebnis[ 2 ][ "ursprungs_dateiname" ], PATHINFO_EXTENSION );
}
else
{
$dokument = array( "", "", "" );
$ext = "akte";
}
// Dateien schreiben
$dateiname = str_pad( $ok_1[ 0 ], 3, "0", STR_PAD_LEFT )."_".str_pad( $dok_id, 12, "0", STR_PAD_LEFT);
$b = file_put_contents( $export_pfad.DIRECTORY_SEPARATOR.$dateiname.".idx", $file_text );
if ( $b !== false )
{
$f = file_put_contents( $export_pfad.DIRECTORY_SEPARATOR.$dateiname.".".$ext, $dokument[ 2 ] );
if ( $f !== false )
{
$rc = 1;
$meldung = "Das Dokument ".$dok_id." wurde erfolgreich exporiert.";
}
else
{
unlink( $export_pfad.DIRECTORY_SEPARATOR.$dateiname.".idx" );
$rc = -6;
$meldung = "Die Nutzdatei zu Dokument ".$dok_id." konnte nicht geschrieben werden.";
}
}
else
{
$rc = -4;
$meldung = "Die Indexdatei zu Dokument ".$dok_id." konnte nicht geschrieben werden.";
}
}
else
{
$rc = $ergebnis[ 0 ];
$meldung = $ergebnis[ 1 ];
}
}
else
{
$rc = -3;
$meldung = "Es wurde kein Export-Pfad angegeben und <import_ordner> ist nicht gesetzt.";
}
}
else
{
$rc = -2;
$meldung = "Es wurde keine Dokument-ID angegeben.";
}
}
else
{
$rc = $ok_1[ 0 ];
$meldung = $ok_1[ 1 ];
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 4;
}
xlog( $level, "admin.exportiere_dokument: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $ergebnis_arr );
}
function sperre_dokument( $dok_id, $benutzer_anmeldename )
{
if ( strlen( $dok_id ) > 0 )
{
if ( strlen( $benutzer_anmeldename ) > 0 )
{
$STATEMENT = "select sperr_status, sperr_beginn, sperr_benutzer from ca_dok_ablage where dok_id = ".$dok_id;
$ergebnis = xdb( $STATEMENT );
//xlog( 1, json_encode( $ergebnis ) );
if ( strlen( $ergebnis[ 1 ][ 0 ][ "sperr_benutzer" ] ) == 0 )
{
$STATEMENT = "update ca_dok_ablage set sperr_status = '1', sperr_beginn = '".time()."', sperr_benutzer = '".$benutzer_anmeldename."' where dok_id = ".$dok_id;
xdb( $STATEMENT );
$STATEMENT = "select sperr_status, sperr_beginn, sperr_benutzer from ca_dok_ablage where dok_id = ".$dok_id;
$ergebnis = xdb( $STATEMENT );
if ( $ergebnis[ 1 ][ 0 ][ "sperr_benutzer" ] == $benutzer_anmeldename )
{
$rc = 1;
$meldung = "Das Dokument ".$dok_id." wurde vom Benutzer ".$benutzer_anmeldename." gesperrt.";
}
else
{
$rc = -12;
$meldung = "Das Dokument wurde zwischenzeitlich vom Benutzer ".$ergebnis[ 1 ][ 0 ][ "sperr_benutzer" ]." gesperrt.";
}
}
else
{
if ( $ergebnis[ 1 ][ 0 ][ "sperr_benutzer" ] == $benutzer_anmeldename )
{
$rc = 2;
$meldung = "Das Dokument ".$dok_id." wurde bereits vom Benutzer ".$benutzer_anmeldename." gesperrt.";
}
else
{
$rc = -19;
$meldung = "Das Dokument wurde bereits am ".date( "d.m.Y H:i", (integer)$ergebnis[ 1 ][ 0 ][ "sperr_beginn" ] )." Uhr vom Benutzer ".$ergebnis[ 1 ][ 0 ][ "sperr_benutzer" ]." gesperrt.";
}
}
}
else
{
$rc = -1;
$meldung = "Es wurde kein Benutzer-Name angegeben.";
}
}
else
{
$rc = -1;
$meldung = "Es wurde keine Dokument-ID angegeben.";
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.sperre_dokument: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function entsperre_dokument( $dok_id )
{
if ( strlen( $dok_id ) > 0 )
{
$STATEMENT = "update ca_dok_ablage set sperr_status = '0', sperr_beginn = '', sperr_benutzer = '' where dok_id = ".$dok_id;
xdb( $STATEMENT );
$rc = 1;
$meldung = "Das Dokument ".$dok_id." wurde entsperrt.";
}
else
{
$rc = -1;
$meldung = "Es wurde keine Dokument-ID angegeben.";
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.entsperre_dokument: RC ".$rc.": ".$meldung );
return array( $rc, $meldung );
}
function ist_dokument_gesperrt( $dok_id )
{
if ( strlen( $dok_id ) > 0 )
{
$STATEMENT = "select sperr_status, sperr_beginn, sperr_benutzer from ca_dok_ablage where dok_id = ".$dok_id;
$ergebnis = xdb( $STATEMENT );
if ( strlen( $ergebnis[ 1 ][ 0 ][ "sperr_status" ] ) == 0 )
{
$sperr_status = "0";
}
else
{
$sperr_status = $ergebnis[ 1 ][ 0 ][ "sperr_status" ];
}
$ergebnis[ "sperr_status" ] = $sperr_status;
$ergebnis[ "sperr_beginn_ts" ] = $ergebnis[ 1 ][ 0 ][ "sperr_beginn" ];
$ergebnis[ "sperr_beginn" ] = date( "d.m.Y H:i", $ergebnis[ 1 ][ 0 ][ "sperr_beginn" ] )." Uhr";
$ergebnis[ "sperr_benutzer" ] = $ergebnis[ 1 ][ 0 ][ "sperr_benutzer" ];
$rc = 0;
$meldung = "Liefere Informationen zum Sperrstatus des Dokuments ".$dok_id.".";
}
else
{
$rc = -1;
$meldung = "Es wurde keine Dokument-ID angegeben.";
}
if ( $rc < 0 )
{
$level = 2;
}
else
{
$level = 6;
}
xlog( $level, "admin.ist_dokument_gesperrt: RC ".$rc.": ".$meldung );
return array( $rc, $meldung, $ergebnis );
}
function darf_benutzer_dokument_sehen( $mandant_name, $benutzer_anmeldename, $dok_id )
{}
function darf_benutzer_dokumente_sehen( $mandant_name, $benutzer_anmeldename, $dok_ids )
{}
?>