<?php
## INDEX gegen LDAP und DB bei externer Kennung
session_start();

include_once 'classes/TestProjektSmarty.class.php';
#require_once("config.inc.php");
require_once("config/datenbankanbindung.php");     // f&uuml;gt die Datenbankanbindung ein: Sys:\php\includes\kurs\datenbankanbindung.php
$smarty = new Smarty();
$template = "login";
$smarty = new Smarty();
$templatename = substr(basename($_SERVER['PHP_SELF']), 0, -3) . "html";

require_once "language/german.inc.php";


$action = $_GET['action'];
if($action == ''){
  if(isset($_GET['error'])){
  
    $errorno = $_GET['error'];
    
    $smarty->assign('index_error', 1);
    
    if($errorno == 1){
      $smarty->assign('index_error_text', "Es m&uuml;ssen alle Felder ausgef&uuml;llt werden");
    }
    
    # Bei LDAP wird eine Registrierung automatisch durchgeführt
    #if($errorno == 2){
    #  $smarty->assign('index_error_text', "Ber Benutzername ist im System nicht vorhanden");
    #}
    
    if($errorno == 3){
      $smarty->assign('index_error_text', "Ber Benutzername oder das Passwort ist nicht korrekt<br>Stellen Sie sicher, dass Ihr Benutzerkonto in der Hochschule aktiv ist.");
    }
    
    # Daten aufbereiten bei Fehler
    if(isset($_SESSION["global_username"])){
      $smarty->assign('index_user', $_SESSION["global_username"]);
    }
  }
  

}

if($action == 'anmeld'){
  $username=strtolower($_POST["user"]); //remove case sensitivity on the username
  $password=$_POST["password"];
  
  if($_POST["user"] != ""){
    $_SESSION["global_username"]=$username;
  }
  if($username == "" OR $password == ""){
    echo "<meta http-equiv=\"refresh\" content=\"0; URL=".$_SERVER['PHP_SELF']."?error=1\">";
  }else{
  
  $db = dbconnect();
  $query_ldapuser = $db->query("SELECT wert1, wert2 FROM imt_parameter WHERE pid='2'");
  $row_ldapuser = $query_ldapuser->fetch_array();
  


  ################################
  ## Prüfe studnet ob Treffer
  ################################
  # bind wird benötigt, sonst werden die Umlaute bei Namen  nicht richtig angezeigt ?!!?
  
  $ds=@ldap_connect("141.10.144.37", "389");
  ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
  
  $r=@ldap_bind($ds, $row_ldapuser['wert1'], $row_ldapuser['wert2']);
  $_ldap_dn = "ou=ouStudnet,dc=studnet,dc=hs-ludwigsburg,dc=de";
  $sr=@ldap_search($ds, $_ldap_dn, "samaccountname=$username");
  $info = @ldap_get_entries($ds, $sr);
  $anzahl = @ldap_count_entries($ds,$sr);
  $vorname      = $info[0]['givenname'][0];
  $nachname     = $info[0]['sn'][0];
  $mail         = $info[0]['mail'][0];
  $first        = @ldap_first_entry($ds,$sr);
  $distinguishedName  = @ldap_get_dn($ds,$first);
  $result_jg = $db->query("SELECT ag, jahrgang FROM kurs.stud WHERE lower(uid)='$username'");
  $row_jg = $result_jg->fetch_array();
  ################################
  
  
  ### Wenn binden fehlschlägt, also Passwort falsch
  ##!!!!! IM STUDNET MIT DEM USERNAMEN BINDEN, IM HSNET MIT DEM DISTINGUISHEDNAME !!!!!!#################
  #if ($bind = @ldap_bind($ds, $username, $password) AND $anzahl > 0){
  if ($bind = @ldap_bind($ds, $distinguishedName, $password) AND $anzahl > 0){
   # Bind funktioniert
#echo "studnet: Bind funktioniert: $anzahl <br>";
   $login = "0";
   $login_ad = "studnet";
  }else{
   # Bind funktioniert nicht
#echo "studnet: Bind funktioniert nicht: $anzahl <br>";
   $login = "1";
   ldap_close($ds); 
  }
#exit;
  
  ########
  # INFO hsnet: Würde man nur $_ldap_dn = "dc=hsnet,dc=hs-ludwigsburg,dc=de"; angeben ohne OU=OUHochschunetzwerk oä., würde php beim search nichts mehr finden und alle Passwörter akzeptieren
  ########
  
  
  ################################
  ## Prüfe OUHochschulnetzwerk ob Treffer, wenn studnet nicht funktioniert
  ################################
  if($login == "1" and $anzahl == "0"){
  
    $ds=@ldap_connect("141.10.128.30", "389");
    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
    
    # bind wird benötigt, sonst werden die Umlaute bei Namen  nicht richtig angezeigt ?!!?
    $r=@ldap_bind($ds, $row_ldapuser['wert1'], $row_ldapuser['wert2']);
    $_ldap_dn = "ou=OUHochschulnetzwerk,dc=hsnet,dc=hs-ludwigsburg,dc=de";
    $sr=@ldap_search($ds, $_ldap_dn, "samaccountname=$username");
    $info = @ldap_get_entries($ds, $sr);
    $anzahl = @ldap_count_entries($ds,$sr);
    $vorname      = $info[0]['givenname'][0];
    $nachname     = $info[0]['sn'][0];
    $mail         = $info[0]['mail'][0];
    $first        = @ldap_first_entry($ds,$sr);
    $distinguishedName  = @ldap_get_dn($ds,$first);
    ################################

    # Bind geht im hsnet nur über den DN "CN=Schwarz\, Alexander, OU=Externe Benutzer, ou=OUHochschulnetzwerk,dc=hsnet,dc=hs-ludwigsburg,dc=de"
    ##!!!!! IM STUDNET MIT DEM USERNAMEN BINDEN, IM HSNET MIT DEM DISTINGUISHEDNAME !!!!!!#################
    if ($bind = @ldap_bind($ds, $distinguishedName, $password) AND $anzahl > 0){
#echo "hsnet: Bind funktioniert: $anzahl  |$distinguishedName|<br>";
     $login = "0";
     $login_ad = "hsnet";
    }else{
     # Bind funktioniert nicht
     $login= "1";
     ldap_close($ds);
#echo "hsnet: Bind funktioniert nicht: $anzahl <br>";
    }

  }
  

  
  ################################
  ## Prüfe OURechenzentrum ob Treffer, wenn studnet nicht funktioniert
  ################################
  if($login == "1" and $anzahl == 0){
  
    $ds=@ldap_connect("141.10.128.30", "389");
    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
    
    # bind wird benötigt, sonst werden die Umlaute bei Namen  nicht richtig angezeigt ?!!?
    $r=@ldap_bind($ds, $row_ldapuser['wert1'], $row_ldapuser['wert2']);
    $_ldap_dn = "ou=OURechenzentrum,dc=hsnet,dc=hs-ludwigsburg,dc=de";
    $sr=@ldap_search($ds, $_ldap_dn, "samaccountname=$username");
    $info = @ldap_get_entries($ds, $sr);
    $anzahl = @ldap_count_entries($ds,$sr);
    $vorname      = $info[0]['givenname'][0];
    $nachname     = $info[0]['sn'][0];
    $mail         = $info[0]['mail'][0];
    $first        = @ldap_first_entry($ds,$sr);
    $distinguishedName  = @ldap_get_dn($ds,$first);
    ################################

    # Bind geht im hsnet nur über den DN "CN=Schwarz\, Alexander, OU=Externe Benutzer, ou=OUHochschulnetzwerk,dc=hsnet,dc=hs-ludwigsburg,dc=de"
    ##!!!!! IM STUDNET MIT DEM USERNAMEN BINDEN, IM HSNET MIT DEM DISTINGUISHEDNAME !!!!!!#################
    if ($bind = @ldap_bind($ds, $distinguishedName, $password) AND $anzahl > 0){
#echo "RZ: Bind funktioniert: $anzahl <br>";
     $login = "0";
     $login_ad = "hsnet";
    }else{
     # Bind funktioniert nicht
#echo "RZ: Bind funktioniert nicht: $anzahl <br>";
     $login= "1";
     ldap_close($ds);
    }
  }
    
/*
      echo "<br>
          distinguishedName = $distinguishedName<br>
          anzahl_hs $anzahl <br>
          Username $username, $vorname, $nachname, $mail<br>
          account: $username, $password<br>
          login $login<br>
          exit;
*/

  # Prüfen, ob der Benutzer ein Passwort in der Datenbank hat
  $db = dbconnect();
  $result = $db->query("SELECT imtuid, uid, passwort FROM imt_user WHERE lower(uid)='$username'");
  $row = $result->fetch_array();
  
  if($row['passwort'] != '' and $anzahl ==0 and $login==1){
    if(md5($password) == $row['passwort']){
      $login= "0";
      $anzahl = 1;
    }else{
      $login= "1";
      $anzahl= "0";
    }
  }
#  echo "$row[uid] -> $row[passwort]";
#  exit;
  
  // Wenn expiredate überschritten, dann 1
  #$result2 = $db->query("SELECT 1
  #                          FROM imt_user
  #                         WHERE pw_expire < now()
  #                           AND uid = '$row[user]'
  #                      ");
  #$row2 = $result2->fetch_array();
  

 

  # Wenn es den Benutzer nicht gibt, wird bei LDAP automatisch registriert
  #if ($username != strtoupper($row[uid])) {
  #  echo "<meta http-equiv=\"refresh\" content=\"0; URL=".$_SERVER['PHP_SELF']."?error=2\">";
  #}
#echo"
#<hr>
#login -> $login<br>
#anzahl -> $anzahl<br>
#";
#exit;
  // Passwort falsch
  if ($login == "1"){  //Ging in studnet und hsnet der Login schief
    # Cookies werden bereits gesetzt, falls sich jemand ein passwort zusenden lässt.
    #$_SESSION["global_uid"]  = $row[imtuid];
    #$_SESSION["global_username"] = $row[uid];
    ## => Bei LDAP nicht möglich! Nur Fehler ausgeben
    echo "<meta http-equiv=\"refresh\" content=\"0; URL=".$_SERVER['PHP_SELF']."?error=3\">";
  }
  
  if ($login == "0" AND $anzahl > 0){
#  echo "geht -> weiter";
#  exit;
    ## Login hat entweder im studnet oder im hsnet funktioniert.
    ## Prüfen, ob es den Benutzer bereits gibt, sonst Registrierung durchführen
    
    $db = dbconnect();
    $resultanz = $db->query("SELECT count(*) Anz FROM imt_user WHERE lower(uid)='$username'");
    $rowanz = $resultanz->fetch_array();
    
    if($rowanz['Anz'] > 0){
      # Benutzer ist bereits registriert
      $db = dbconnect();
      $datum=date("Y-m-d H:i:s");
      $ip=getenv("REMOTE_ADDR");
      $agent=getenv("HTTP_USER_AGENT");
      $user_admin = $row['imtuid'];
      $_SESSION["global_uid"]  = $user_admin;
      $_SESSION["global_username"] = $row['uid'];
      $result_1 = $db->query("INSERT INTO imt_userlog (Datum, IP, user_agent, imtuid) VALUES ('$datum', '$ip', '$agent', '$user_admin')");
      $sql = $db->query ("UPDATE imt_user SET mail_inaktiv='0000-00-00 00:00:00' WHERE imtuid='$user_admin'");
      $smarty->assign('index_login', "1");
    }else{
#  echo "geht -> Register";
#  exit;
     ## Registrierung durchführen
      $_SESSION["register_vorname"]  = "$vorname";
      $_SESSION["register_nachname"]  = "$nachname";
      $_SESSION["register_mail"]  = "$mail";
       
     
      
      #$smarty->assign('register_ad', "$login_ad");
      
      $_SESSION["register_ad"]  = "$login_ad";
      if($login_ad == "studnet"){
        $_SESSION["register_ag"]  = "$row_jg[ag]";
        $_SESSION["register_jahrgang"]  = "$row_jg[jahrgang]";
      }
      echo "<meta http-equiv=\"refresh\" content=\"0; URL=".$_SERVER['PHP_SELF']."?action=register\">";


     
     
    }
  }
  mysqli_close($db);
      
  }
  
}
if($action == 'register'){

  if(isset($_GET[error])){
  
    $errorno = $_GET['error'];
    $smarty->assign('index_error', 1);
    
    if($errorno == 4){
      # Daten aufbereiten bei Fehler Beziehung zur Hochschule hsnet
      if(isset($_SESSION["register_fakultaet"])){
        $smarty->assign('register_fakultaet', $_SESSION["register_fakultaet"]);
      }
      $smarty->assign('register_error_text', "Es muss das Feld Beziehung zur Hochschule ausgef&uuml;llt werden.");
    }
    
    if($errorno == 5){
      # Daten aufbereiten bei Fehler AG studnet
      if(isset($_SESSION["register_jahrgang"])){
        $smarty->assign('register_jahrgang', $_SESSION["register_jahrgang"]);
      }
      $smarty->assign('register_error_text', "Es muss das Feld AG ausgef&uuml;llt werden.");
    }
    
    if($errorno == 6){
      # Daten aufbereiten bei Fehler Jahrgang hsnet
      if(isset($_SESSION["register_ag"])){
        $smarty->assign('register_ag', $_SESSION["register_ag"]);
      }
      $smarty->assign('register_error_text', "Es muss das Feld Jahrgang ausgef&uuml;llt werden.");
    }    
    

  }
    $db = dbconnect();
    $smarty->assign('register_ag', $_SESSION["register_ag"]);
    $smarty->assign('register_adir', $_SESSION["register_ad"]);
    
    $query = "SELECT distinct jahrgang
                FROM kurs.stud
               WHERE jahrgang <= substr(date_format(now(), '%Y'),3,2)
               ORDER BY jahrgang desc
               LIMIT 4";
    $result = $db->query ($query)
              or die ("Cannot execute query1");

    $table_data = array();
    
    while ($row = $result->fetch_array()){
      if($row['jahrgang'] == $_SESSION["register_jahrgang"]){
        $select = 1;
      }else{
        $select = 0;
      }

      array_push($table_data, array(
       'select' => $select,
       'jahrgang' => $row['jahrgang']
      )
      );
    }
    
    $smarty->assign('table_data', $table_data);
}

if($action == 'register2'){
  $art = $_GET['art'];

  $username = $_SESSION["global_username"];
  $vorname = $_SESSION["register_vorname"];
  $nachname = $_SESSION["register_nachname"];
  $mail = $_SESSION["register_mail"];
  
  if($art == 'hsnet'){
    $register_beziehung = $_POST['register_beziehung'];

      if ($register_beziehung == ""){  //Fehler, falls Pflichtfeld Beziehung zur Hochschule nicht gefüllt wurde
        echo "<meta http-equiv=\"refresh\" content=\"0; URL=".$_SERVER['PHP_SELF']."?action=register&error=4\">";
        $_SESSION["register_fakultaet"] = $_POST['register_fakultaet'];
        exit;
      }
  
    $register_fakultaet = $_POST['register_fakultaet'];
    $db = dbconnect();
    $datum=date("Y-m-d H:i:s");
    $result_1 = $db->query("INSERT INTO imt_user (vorname, nachname, mail, beziehung, fakultaet, uid, aktiv, erstell_dat) 
                             VALUES ('$vorname', '$nachname', '$mail', '$register_beziehung', '$register_fakultaet', '$username', 1, '$datum')");

  }
  
  if($art == 'studnet'){
    $ag = $_POST['ag'];
    $jahrgang = $_POST['jahrgang'];
    
    if ($ag == ""){  //Fehler, falls Pflichtfeld Beziehung zur Hochschule nicht gefüllt wurde
      echo "<meta http-equiv=\"refresh\" content=\"0; URL=".$_SERVER['PHP_SELF']."?action=register&error=5\">";
      $_SESSION["register_jahrgang"] = $jahrgang;
      exit;
    }
    
    if ($jahrgang == ""){  //Fehler, falls Pflichtfeld Beziehung zur Hochschule nicht gefüllt wurde
      echo "<meta http-equiv=\"refresh\" content=\"0; URL=".$_SERVER['PHP_SELF']."?action=register&error=6\">";
      $_SESSION["register_ag"] = $ag;
      exit;
    }
    
    $db = dbconnect();
    $datum=date("Y-m-d H:i:s");
    $result_1 = $db->query("INSERT INTO imt_user (vorname, nachname, mail, beziehung, ag, jahrgang, uid, aktiv, erstell_dat) 
                             VALUES ('$vorname', '$nachname', '$mail', 'S', '$ag', '$jahrgang', '$username', 1, '$datum')");
  }
  
  $db = dbconnect();
  $result_jg = $db->query("SELECT ag, jahrgang FROM kurs.stud WHERE lower(uid)='$username'");
  $row_jg = $result_jg->fetch_array();
  
  $result = $db->query("SELECT imtuid FROM imt_user WHERE lower(uid)='$username'");
  $row = $result->fetch_array();
  
  $datum=date("Y-m-d H:i:s");
  $ip=getenv("REMOTE_ADDR");
  $agent=getenv("HTTP_USER_AGENT");
  $user_admin = $row['imtuid'];
  $_SESSION["global_uid"]  = $user_admin;
  $_SESSION["global_username"] = $row['uid'];
  $result_1 = $db->query("INSERT INTO imt_userlog (Datum, IP, user_agent, imtuid) VALUES ('$datum', '$ip', '$agent', '$user_admin')");
  $sql = $db->query ("UPDATE imt_user SET mail_inaktiv='0000-00-00 00:00:00' WHERE imtuid='$user_admin'");
  $smarty->assign('index_login', "1");
}

$smarty->assign('action', "$action");
$smarty->display("$template/$templatename");
?>
