Leitgedanken/rollen.php
2022-11-21 09:47:28 +01:00

477 lines
14 KiB
PHP

<?php
/*
# Fuer debugging
error_reporting(E_ALL);
ini_set('display_errors', 1);
#echo __LINE__."<br>";
*/
session_start();
include_once 'classes/lg-on_Smarty.class.php';
$smarty = new lgon_Smarty();
require_once("config.inc.php");
require_once("func_rollenrechte.php");
$templatename = substr(basename($_SERVER['PHP_SELF']),0,-3)."html";
require_once "language/german.inc.php";
# Wenn Seite neu aufgerufen wird, dann alle Sessions, die mit "erfassen_" beginnen löschen, damit man eine Doppelspeicherung verhindert
if(isset($_GET['new']) AND $_GET['new'] == 1){;
$search_prefix = 'rollen_';
$search_len = strlen($search_prefix);
foreach( $_SESSION as $key => $value){
if ( substr( $key, 0, $search_len) == $search_prefix) {
unset( $_SESSION[$key]);
}
}
}
// Rechteüberprüfung
$db = dbconnect();
if ($user_admin == ""){ require("index.php"); exit;} //Wenn man nicht angemeldet ist, darf man nicht auf die Seite
if(!rore($user_admin,'a_userro','RE')){require("lib/rechte.php");exit;}
// Rechteüberprüfung ende
if(isset($_GET['action'])){
$action = $_GET['action'];
}else{
$action = '';
}
if($action == ''){
// Suche nach den größten Marken, für den Schnellzugriff im Menü
$query = "SELECT rid, bezeichnung
FROM admin_rolle
ORDER BY bezeichnung ASC
";
$result = $db->query( $query);
while ($row = $result->fetch_array()){
# Daten aufbereiten für zurückbutton
if(isset($_SESSION["rollen_rid"])){
if($_SESSION["rollen_rid"] == $row[rid]){
$select = 'Y';
}else{
$select = 'N';
}
}else{
$select = '';
}
$row['select'] = $select;
$value1[] = $row;
}
$smarty->assign('table_data', $value1);
}
if($action == 'admin'){
if(isset($_POST['rolle'])){
$_SESSION["rollen_rolle"] = $_POST['rolle'];
}else{
if(!isset($_SESSION["rollen_rolle"])){
$_SESSION["rollen_rolle"] = "";
}
}
if(isset($_POST['rolle_neu'])){
$_SESSION["rollen_rolle_neu"] = $_POST['rolle_neu'];
}else{
if(!isset($_SESSION["rollen_rolle_neu"])){
$_SESSION["rollen_rolle_neu"] = "";
}
}
if($_SESSION["rollen_rolle_neu"] == "" AND $_SESSION["rollen_rolle"] == ""){
$smarty->assign('rollen_mandatory_haupt', "1");
}else{
$smarty->assign('rollen_mandatory_haupt', "2");
if($_SESSION["rollen_rolle_neu"] != "" AND $_SESSION["rollen_rolle"] != ""){
$smarty->assign('rollen_invalid_haupt', "1");
}else{
$smarty->assign('rollen_invalid_haupt', "2");
if($_SESSION["rollen_rolle"] != ""){
# Problem ist, dass man bei der Startseite mit unterschiedlichen Werten kommt. Einmal übers Dropdown mit der rid
# Bei Neuanlage nur mit der Bezeichnung. Diese haben noch keine rid.
# Ziel ist es in diesem Schrit auf die einheitliche session[rollen_rid] zu kommen.
# Hier kommt die rid direkt über das Dropdown, daher kann sie direkt in die neue Session umgeschrieben werden
$rid = $_SESSION["rollen_rolle"];
$_SESSION["rollen_rid"] = $rid;
}
if($_SESSION["rollen_rolle_neu"] != "" AND isset($_SESSION["rollen_rolle_neu"])){
# Hier muss zunächst der Wert aus dem Textfeld eingefügt werden. Der neue Wert wird dann zur session[rollen_rid]
# Prüfen, ob es den Datensatz bereits gibt
$result0 = $db->query("SELECT rid
FROM admin_rolle
WHERE bezeichnung = '$_SESSION[rollen_rolle_neu]'
");
$row0 = $result0->fetch_array();
# Wenns den String noch nicht gibt, einfügen. Sonst rid übernehmen
if($row0['rid'] == ""){
$db = dbconnect();
# Beim bearbeiten des Rollennamens findet er die bezeichnung nach Änderung nicht mehr und php würde insert machen
# Wenn session[rid] gesetzt ist, dann ändern
if(!isset($_SESSION["rollen_rid"])){
$sql1 = $db->query( "INSERT INTO admin_rolle ( bezeichnung)
VALUES ('$_SESSION[rollen_rolle_neu]')" );
$rid = $db->insert_id;
}else{
$rid = $_SESSION["rollen_rid"];
}
}else{
$rid = $row0['rid'];
}
$_SESSION["rollen_rid"] = $rid;
}
# Hier gibt es dann bei beiden Varianten (Dropdown / Textfeld) die session[rollen_rid]
$result1 = $db->query("SELECT bezeichnung
FROM admin_rolle
WHERE rid = '$_SESSION[rollen_rid]'
");
$row1 = $result1->fetch_array();
$smarty->assign('rollen_bezeichnung', "$row1[bezeichnung]");
# Abfreagen der zugewiesenen Rechte ohne abhängige Rechte(parent) Diese werden automatisch vergeben
$result_anz1 = $db->query("SELECT count(*) Anz
FROM admin_rollen_rechte_zuord a, admin_rechte b
WHERE a.admin_rolle = b.admin_rolle
AND a.rid = '$_SESSION[rollen_rid]'
");
$row_anz1 = $result_anz1->fetch_array();
$smarty->assign('rollen_anzahl_rechte', "$row_anz1[Anz]");
$result_anz2 = $db->query("SELECT count(*) Anz
FROM admin_rollen_user_zuord
WHERE rid = '$_SESSION[rollen_rid]'
");
$row_anz2 = $result_anz2->fetch_array();
$smarty->assign('rollen_anzahl_user', "$row_anz2[Anz]");
$result_anz3 = $db->query("SELECT count(*) Anz
FROM admin
WHERE vaid NOT IN (SELECT distinct vaid FROM admin_rollen_user_zuord)
");
$row_anz3 = $result_anz3->fetch_array();
$smarty->assign('rollen_anzahl_ohnerechte', "$row_anz3[Anz]");
# Wenn Benutzer oder Rechte der Rolle zugeordnet sind, darf nicht gelöscht werden
if($row_anz1['Anz'] == 0 AND $row_anz2['Anz'] == 0){
$smarty->assign('rollen_button_del', "1");
}else{
$smarty->assign('rollen_button_del', "2");
}
$query = "SELECT vorname, nachname
FROM admin a, admin_rollen_user_zuord b, admin_rolle c
WHERE a.vaid=b.vaid
AND b.rid= c.rid
AND c.rid = '$_SESSION[rollen_rid]'";
$result = $db->query( $query)
or die ("Cannot execute query 1a");
$bez_user ="";
while ($row = $result->fetch_array()){
$bez_user .="$row[vorname] $row[nachname]<br>";
}
$smarty->assign('rollen_zugeordnete_user', $bez_user);
# Abfreagen der zugewiesenen Rechte ohne abhängige Rechte(parent) Diese werden automatisch vergeben
$query = "SELECT beschreibung
FROM admin_rechte a, admin_rollen_rechte_zuord b
WHERE a.admin_rolle=b.admin_rolle
AND b.rid = '$_SESSION[rollen_rid]'
ORDER BY bereich ASC, sort_order ASC
";
$result = $db->query( $query)
or die ("Cannot execute query 2");
$bez_rechte ="";
while ($row = $result->fetch_array()){
$bez_rechte .="$row[beschreibung]<br>";
}
$smarty->assign('rollen_zugeordnete_rechte', $bez_rechte);
$query = "SELECT vorname, nachname
FROM admin
WHERE vaid NOT IN (SELECT distinct vaid FROM admin_rollen_user_zuord)";
$result = $db->query( $query)
or die ("Cannot execute query 3");
$bez_user_ohne_rolle="";
while ($row = $result->fetch_array()){
$bez_user_ohne_rolle .="$row[vorname] $row[nachname]<br>";
}
$smarty->assign('rollen_user_ohnezugeordnete_rolle', $bez_user_ohne_rolle);
}
}
}
# Löschung der Rolle
if($action == 'del'){
$rid = $_SESSION["rollen_rid"];
$sql = $db->query( "DELETE FROM admin_rolle WHERE rid=$rid");
echo "<meta http-equiv=\"refresh\" content=\"0; URL=?new=1\">";
}
# Bearbeiten der Rolle
if($action == 'edit'){
$rid = $_SESSION["rollen_rid"];
$query = $db->query("SELECT bezeichnung
FROM admin_rolle
WHERE rid='$rid'
");
$row = $query->fetch_array();
$smarty->assign('rollen_edit_bez', "$row[bezeichnung]");
}
if($action == 'edit1'){
$rid = $_SESSION["rollen_rid"];
$sql1 = $db->query( "UPDATE admin_rolle
SET bezeichnung = '$_POST[rolle_neu]'
WHERE rid='$rid'
" );
echo "<meta http-equiv=\"refresh\" content=\"0; URL=".$_SERVER['PHP_SELF']."?action=admin\">";
}
if($action == 'rechte'){
$rid = $_SESSION["rollen_rid"];
$db = dbconnect();
$query = "SELECT admin_rolle, beschreibung, bereich
FROM admin_rechte
ORDER BY sort_order ASC";
$result = $db->query( $query)
or die ("Cannot execute query3");
while ($row = $result->fetch_array()){
$db = dbconnect();
$bearb_adm = $db->query("SELECT DISTINCT 1
FROM admin_rollen_rechte_zuord
WHERE admin_rolle = '$row[admin_rolle]'
AND rid='$rid'");
$admin = $bearb_adm->fetch_array();
switch ($row['bereich'])
{
case "a":
$bereich = "Administration";
break;
case "b":
$bereich = "Besondere Gottesdienste";
break;
case "j":
$bereich = "Recherche";
break;
case "o":
$bereich = "keine Zuordnung";
break;
case "s":
$bereich = "Statistik";
break;
default:
$bereich = "keine Zuordnung";
}
$row['bereich'] = $bereich;
$row['select'] = $admin[0];
$value2[] = $row;
}
$smarty->assign('table_data1', $value2);
}
if($action == 'rechte1'){
$rid = $_SESSION["rollen_rid"];
$sql_del = $db->query( "DELETE FROM admin_rollen_rechte_zuord WHERE rid = $rid" );
if(isset($_POST['admre'])){
$rechte = $_POST['admre'];
}else{
$rechte = 0;
}
for ($i=0;$i<sizeof($rechte);$i++) {
# Reguläre Rechte, die im Dropdownmenü gewählt wurden erfassen
$sql = $db->query( "INSERT INTO admin_rollen_rechte_zuord (rid, admin_rolle)
VALUES
($rid, '$rechte[$i]')
" );
}
echo "<meta http-equiv=\"refresh\" content=\"0; URL=".$_SERVER['PHP_SELF']."?action=admin\">";
}
if($action == 'user'){
$rid = $_SESSION["rollen_rid"];
$result1 = $db->query("SELECT bezeichnung
FROM admin_rolle
WHERE rid = '$rid'
");
$row1 = $result1->fetch_array();
$smarty->assign('rollen_bezeichnung', "$row1[bezeichnung]");
$db = dbconnect();
$query = "SELECT vaid, vorname, nachname
FROM admin
ORDER BY nachname ASC, vorname ASC";
$result = $db->query( $query)
or die ("Cannot execute query4");
while ($row = $result->fetch_array()){
$beschreibung = "$row[nachname], $row[vorname]";
$row['beschreibung'] = $beschreibung;
$value1[] = $row;
}
$smarty->assign('table_data1', $value1);
#
$rollen_anz = $db->query("SELECT count(*) Anz
FROM admin a, admin_rollen_user_zuord b
WHERE a.vaid=b.vaid
AND b.rid = '$rid'");
$row_rollenanz = $rollen_anz->fetch_array();
$smarty->assign('rollen_rollenanz', $row_rollenanz['Anz']);
$query = "SELECT a.vaid, vorname, nachname
FROM admin a, admin_rollen_user_zuord b
WHERE a.vaid=b.vaid
AND b.rid = '$rid'
ORDER BY nachname ASC, vorname ASC";
$result = $db->query( $query)
or die ("Cannot execute query5");
while ($row = $result->fetch_array()){
$value2 = '';
$query1 = "SELECT a.rid rid_ges, bezeichnung
FROM admin_rolle a, admin_rollen_user_zuord b
WHERE a.rid=b.rid
AND b.vaid='$row[vaid]'
ORDER BY bezeichnung asc";
$result1 = $db->query( $query1)
or die ("Cannot execute query1");
while ($row2 = $result1->fetch_array()){
/*
array_push($table_data2, array(
'vaid' => $row['vaid'],
'rid_ges' => $row2['rid_ges'],
'bezeichnung' => $row2['bezeichnung']
)
);
*/
$row2['vaid'] = $row['vaid'];
$value2[] = $row2;
}
/*
array_push($outer_loop, array(
'vaid' => $row['vaid'],
'vorname' => $row['vorname'],
'nachname' => $row['nachname'],
'inner' => $table_data2
)
);
*/
$row['inner'] = $value2;
$value3[] = $row;
}
$smarty->assign('outer_loop', $value3);
}
if($action == 'user1'){
$rid = $_SESSION["rollen_rid"];
if(isset($_POST['user'])){
$user = $_POST['user'];
}else{
$user = 0;
}
for ($i=0;$i<sizeof($user);$i++) {
$result0 = $db->query("SELECT count(*) Anz
FROM admin_rollen_user_zuord
WHERE vaid = '$user[$i]'
AND rid = '$rid'
");
$add_user = $result0->fetch_array();
if($add_user['Anz'] == 0){
$sql = $db->query( "INSERT INTO admin_rollen_user_zuord (rid, vaid)
VALUES
($rid, '$user[$i]')
");
}
}
echo "<meta http-equiv=\"refresh\" content=\"0; URL=".$_SERVER['PHP_SELF']."?action=user\">";
}
# Löschung der Rolle
if($action == 'deluserrol'){
$rid = $_GET["rid"];
$vaid = $_GET["vaid"];
$sql = $db->query( "DELETE FROM admin_rollen_user_zuord WHERE rid=$rid AND vaid='$vaid'");
echo "<meta http-equiv=\"refresh\" content=\"0; URL=?action=user\">";
}
$smarty->assign('action', "$action");
$smarty->display("$template/$templatename");
?>