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