deputat/rollen.php
2023-04-25 13:25:59 +02:00

458 lines
14 KiB
PHP
Executable File

<?php
/*
# Fuer debugging
error_reporting(E_ALL);
ini_set('display_errors', 1);
#echo __LINE__."<br>";
*/
session_start();
include_once 'classes/TestProjektSmarty.class.php';
require_once("config.inc.php");
$templatename = substr(basename($_SERVER['PHP_SELF']), 0, -3) . "html";
$smarty = new Smarty();
require_once "language/german.inc.php";
require_once("func_rollenrechte.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
if (!rore($uid, '3', 'RE')) {echo "Keine Rechte";exit;}
// Rechteüberprüfung ende
if (isset($_GET['action'])) {
$action = $_GET['action'];
} else {
$action = '';
}
if ($action == '') {
if ($_GET['error'] == 1) {
$smarty->assign('rollen_pflichtfelder', "1");
$smarty->assign('rollen_error_text', "Es ist zu einem Fehler gekommen. Bitte f&uuml;llen Sie eines der Felder aus.");
}
if ($_GET['error'] == 2) {
$smarty->assign('rollen_pflichtfelder', "1");
$smarty->assign('rollen_error_text', "Bitte wählen Sie nur eine Option aus.");
}
$query = "SELECT roid, bezeichnung
FROM dep_rolle
ORDER BY bezeichnung ASC
";
$result = $db->query($query);
while ($row = $result->fetch_array()) {
# Daten aufbereiten für zurückbutton
if (isset($_SESSION["rollen_roid"])) {
if ($_SESSION["rollen_roid"] == $row[roid]) {
$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"] == "") {
$fehler = 1;
echo "<meta http-equiv=\"refresh\" content=\"0; URL=" . $_SERVER['PHP_SELF'] . "?error=$fehler\">";
}
if ($_SESSION["rollen_rolle_neu"] != "" AND $_SESSION["rollen_rolle"] != "") {
$fehler = 2;
echo "<meta http-equiv=\"refresh\" content=\"0; URL=" . $_SERVER['PHP_SELF'] . "?error=$fehler\">";
}
if ($_SESSION["rollen_rolle"] != "") {
# Problem ist, dass man bei der Startseite mit unterschiedlichen Werten kommt. Einmal übers Dropdown mit der roid
# Bei Neuanlage nur mit der Bezeichnung. Diese haben noch keine roid.
# Ziel ist es in diesem Schrit auf die einheitliche session[rollen_roid] zu kommen.
# Hier kommt die roid direkt über das Dropdown, daher kann sie direkt in die neue Session umgeschrieben werden
$roid = $_SESSION["rollen_rolle"];
$_SESSION["rollen_roid"] = $roid;
}
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_roid]
# Prüfen, ob es den Datensatz bereits gibt
$result0 = $db->query("SELECT roid
FROM dep_rolle
WHERE bezeichnung = '$_SESSION[rollen_rolle_neu]'
");
$row0 = $result0->fetch_array();
# Wenns den String noch nicht gibt, einfügen. Sonst roid übernehmen
if ($row0['roid'] == "") {
#$db = dbconnect();
# Beim bearbeiten des Rollennamens findet er die bezeichnung nach Änderung nicht mehr und php würde insert machen
# Wenn session[roid] gesetzt ist, dann ändern
if (!isset($_SESSION["rollen_roid"])) {
$sql1 = $db->query("INSERT INTO dep_rolle ( bezeichnung)
VALUES ('$_SESSION[rollen_rolle_neu]')");
$roid = $db->insert_id;
} else {
$roid = $_SESSION["rollen_roid"];
}
} else {
$roid = $row0['roid'];
}
$_SESSION["rollen_roid"] = $roid;
}
# Hier gibt es dann bei beiden Varianten (Dropdown / Textfeld) die session[rollen_roid]
$result1 = $db->query("SELECT bezeichnung
FROM dep_rolle
WHERE roid = '$_SESSION[rollen_roid]'
");
$row1 = $result1->fetch_array();
$smarty->assign('rollen_bezeichnung', "$row1[bezeichnung]");
# Abfragen der zugewiesenen Rechte ohne abhängige Rechte(parent) Diese werden automatisch vergeben
$result_anz1 = $db->query("SELECT count(*) Anz
FROM dep_rollen_rechte_zuord a, dep_rechte b
WHERE a.reid = b.reid
AND a.roid = '$_SESSION[rollen_roid]'
");
$row_anz1 = $result_anz1->fetch_array();
$smarty->assign('rollen_anzahl_rechte', "$row_anz1[Anz]");
$result_anz2 = $db->query("SELECT count(*) Anz
FROM dep_rollen_user_zuord
WHERE roid = '$_SESSION[rollen_roid]'
");
$row_anz2 = $result_anz2->fetch_array();
$smarty->assign('rollen_anzahl_user', "$row_anz2[Anz]");
$result_anz3 = $db->query("SELECT count(*) Anz
FROM dep_user
WHERE imtuid NOT IN (SELECT distinct imtuid FROM dep_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 dep_user a, dep_rollen_user_zuord b, dep_rolle c
WHERE a.imtuid=b.imtuid
AND b.roid= c.roid
AND c.roid = '$_SESSION[rollen_roid]'";
$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 dep_rechte a, dep_rollen_rechte_zuord b
WHERE a.reid=b.reid
AND b.roid = '$_SESSION[rollen_roid]'
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 dep_user
WHERE imtuid NOT IN (SELECT distinct imtuid FROM dep_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') {
$roid = $_SESSION["rollen_roid"];
$sql = $db->query("DELETE FROM dep_rolle WHERE roid=$roid");
echo "<meta http-equiv=\"refresh\" content=\"0; URL=?new=1\">";
}
# Bearbeiten der Rolle
if ($action == 'edit') {
$roid = $_SESSION["rollen_roid"];
$query = $db->query("SELECT bezeichnung
FROM dep_rolle
WHERE roid='$roid'
");
$row = $query->fetch_array();
$smarty->assign('rollen_edit_bez', "$row[bezeichnung]");
}
if ($action == 'edit1') {
$roid = $_SESSION["rollen_roid"];
$sql1 = $db->query("UPDATE dep_rolle
SET bezeichnung = '$_POST[rolle_neu]'
WHERE roid='$roid'
");
echo "<meta http-equiv=\"refresh\" content=\"0; URL=" . $_SERVER['PHP_SELF'] . "?action=admin\">";
}
if ($action == 'rechte') {
$roid = $_SESSION["rollen_roid"];
#$db = dbconnect();
$query = "SELECT reid, beschreibung, bereich
FROM dep_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 dep_rollen_rechte_zuord
WHERE reid = '$row[reid]'
AND roid='$roid'");
$admin = $bearb_adm->fetch_array();
switch ($row['bereich']) {
case "ADA":
$bereich = "Administration";
break;
case "j":
$bereich = "Jahrgangsabh&auml;ngig";
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') {
$roid = $_SESSION["rollen_roid"];
$sql_del = $db->query("DELETE FROM dep_rollen_rechte_zuord WHERE roid = $roid");
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 dep_rollen_rechte_zuord (roid, reid)
VALUES
($roid, '$rechte[$i]')");
}
echo "<meta http-equiv=\"refresh\" content=\"0; URL=" . $_SERVER['PHP_SELF'] . "?action=admin\">";
}
if ($action == 'user') {
$roid = $_SESSION["rollen_roid"];
$result1 = $db->query("SELECT bezeichnung
FROM dep_rolle
WHERE roid = '$roid'
");
$row1 = $result1->fetch_array();
$smarty->assign('rollen_bezeichnung', "$row1[bezeichnung]");
#$db = dbconnect();
$query = "SELECT imtuid, vorname, nachname
FROM dep_user
WHERE imtuid not in (select imtuid from dep_rollen_user_zuord where roid = $roid)
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 dep_user a, dep_rollen_user_zuord b
WHERE a.imtuid=b.imtuid
AND b.roid = '$roid'");
$row_rollenanz = $rollen_anz->fetch_array();
$smarty->assign('rollen_rollenanz', $row_rollenanz['Anz']);
$query = "SELECT a.imtuid, vorname, nachname
FROM dep_user a, dep_rollen_user_zuord b
WHERE a.imtuid=b.imtuid
AND b.roid = '$roid'
ORDER BY nachname ASC, vorname ASC";
$result = $db->query($query) or die("Cannot execute query5");
while ($row = $result->fetch_array()) {
$value2 = '';
$query1 = "SELECT a.roid roid_ges, bezeichnung
FROM dep_rolle a, dep_rollen_user_zuord b
WHERE a.roid=b.roid
AND b.imtuid='$row[imtuid]'
ORDER BY bezeichnung asc";
$result1 = $db->query($query1) or die("Cannot execute query1");
while ($row2 = $result1->fetch_array()) {
/*
array_push($table_data2, array(
'imtuid' => $row['imtuid'],
'roid_ges' => $row2['roid_ges'],
'bezeichnung' => $row2['bezeichnung']
)
);
*/
$row2['imtuid'] = $row['imtuid'];
$value2[] = $row2;
}
/*
array_push($outer_loop, array(
'imtuid' => $row['imtuid'],
'vorname' => $row['vorname'],
'nachname' => $row['nachname'],
'inner' => $table_data2
)
);
*/
$row['inner'] = $value2;
$value3[] = $row;
}
$smarty->assign('outer_loop', $value3);
}
if ($action == 'user1') {
$roid = $_SESSION["rollen_roid"];
if (isset($_POST['user'])) {
$user = $_POST['user'];
} else {
$user = 0;
}
for ($i = 0; $i < sizeof($user); $i++) {
$result0 = $db->query("SELECT count(*) Anz
FROM dep_rollen_user_zuord
WHERE imtuid = '$user[$i]'
AND roid = '$roid'
");
$add_user = $result0->fetch_array();
if ($add_user['Anz'] == 0) {
$sql = $db->query("INSERT INTO dep_rollen_user_zuord (roid, imtuid)
VALUES
($roid, '$user[$i]')
");
}
}
echo "<meta http-equiv=\"refresh\" content=\"0; URL=" . $_SERVER['PHP_SELF'] . "?action=user\">";
}
# Löschung der Rolle
if ($action == 'deluserrol') {
$roid = $_GET["roid"];
$imtuid = $_GET["imtuid"];
$sql = $db->query("DELETE FROM dep_rollen_user_zuord WHERE roid=$roid AND imtuid='$imtuid'");
echo "<meta http-equiv=\"refresh\" content=\"0; URL=?action=user\">";
}
$smarty->assign('action', "$action");
$smarty->display("$template/$templatename");
?>