<?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");
?>