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 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 ) {} ?>