
<?php

require __DIR__ . "/autoload.php";
//require __DIR__ . "/database.php"; wird im $container = new App\Core\Container(); gebildet

// Die Function e($str) wandelt einen string so um, dass zeichen wie ", "", '', >, <; in
// entsprechende &quot, &lt, &gt, ... gewandelt werden. XSS => cross site scripting
function e($str) {
  return (htmlentities($str, ENT_QUOTES, 'UTF-8'));
}
// prüft alle Eingabefelder
function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
// Die Funktion wandelt das amerikanische Datum in eine deutsche um
function date_german($datum) {  // Eingabe: 2013-10-20
list($jahr, $monat, $tag) = explode("-", $datum);
return("$tag.$monat.$jahr"); // Ausgabe: 20.10.2013
}
// die Funktion wandelt ein datum in ein reines Jahr
function jahr($datum) {
  if ($datum != 0) {
    $jahr = date("Y",strtotime($datum));
  } else { $jahr = '????';}
return $jahr;
}
// Geburtstag - Todestag
function date_period($person) {  // Eingabe: 2013-10-20
  list($jahr, $monat, $tag) = explode("-", $person['day_of_birth']);
  $period = ("$tag.$monat.$jahr");
  list($jahr, $monat, $tag) = explode("-", $person['day_of_death']);
  if ($tag != 0) {$period = $period." - "."$tag.$monat.$jahr";}
  $period = "(".$period.")";
  return $period;
}
function periode($person){
  if (($person->day_of_birth)!= 0){
    $birth = DateTime::createFromFormat('Y-m-d', $person->day_of_birth);
    $period = "(".$birth->format('Y')."-";
  } else { $period = "( - ";}
  if ($person->day_of_death >=1){$death = DateTime::createFromFormat('Y-m-d', $person->day_of_death);
    $period = $period.$death->format('Y').")";
  } else { $period = $period." )"; }
  return $period;
}
// Alter der Person
function alter($person) {
  if ($person['day_of_birth'] != 0){    // Geburtstag eingetragen
    $geburtstag = new DateTime($person['day_of_birth']);
    if ($person['day_of_death'] != 0){  // Todestag eingetragen
      $todestag = new DateTime(date($person['day_of_death']));
      $alter = $geburtstag->diff($todestag);
        return $alter->format('%y');    // Alter ausgeben
    } else {
      if ($person['place_of_death'] != ""){ // Ort des Todes
        return $alter = "† ?";                // kein Alter möglich
      } else {
        $heute = new DateTime(date('Y-m-d')); // Alter lebender Person
        $alter = $geburtstag->diff($heute);
        return $alter->format('%y');
      }
    }
  } else {return $alter = "?";}   // kein Geburtstag eingetragen
}

//convert date from yyyy-mm-dd database format to dd MMM yyyy gedcom format
function date_ged($incoming) {
  // define the months
  $months = array ("00" => "00", "01" => "Jan", "02" => "Feb", "03" => "Mrz", "04" => "Apr",
                   "05" => "Mai", "06" => "Jun", "07" => "Jul", "08" => "Aug", "09" => "Sep",
                   "10" => "Okt", "11" => "Nov", "12" => "Dez");
  $work = explode("-", $incoming);
  if ($work[1] == "00" OR $work[2] == "00") {
    $retval = "$work[0]";                       // if  month or day unknown, just return year
  } else {
    $replacemonth = strtr($work[1], $months);   // reformat whole date to dd MMM yyyy
    $retval = "$work[2] $replacemonth $work[0]";
  }
  return $retval;                               // return the string for gedcom DATE
}
// return GET['index'], set SESION['index'], OR return default
function getAndSetSession($index, $session, $default){
  if ((isset($_GET[$index])) || !empty($_GET[$index])){
    $_SESSION[$session] = $_GET[$index];
  } else {
    if (!isset($_SESSION[$session])){
      $_SESSION[$session] = $default;
    }
  }
  return $_SESSION[$session];
}

function getUmlauteArray() {
  return array(
    'Ã¼'=>'ü',
    'Ã¤'=>'ä',
    'Ã¶'=>'ö', 'Ã–'=>'Ö',
    'ÃŸ'=>'ß', 'Ã '=>'à', 'Ã¡'=>'á', 'Ã¢'=>'â', 'Ã£'=>'ã',
    'Ã¹'=>'ù', 'Ãº'=>'ú', 'Ã»'=>'û',
    'Ã™'=>'Ù', 'Ãš'=>'Ú', 'Ã›'=>'Û', 'Ãœ'=>'Ü',
    'Ã²'=>'ò', 'Ã³'=>'ó', 'Ã´'=>'ô',
    'Ã¨'=>'è', 'Ã©'=>'é', 'Ãª'=>'ê', 'Ã«'=>'ë',
    'Ã€'=>'À', 'Ã'=>'Á', 'Ã‚'=>'Â', 'Ãƒ'=>'Ã', 'Ã„'=>'Ä', 'Ã…'=>'Å',
    'Ã‡'=>'Ç', 'Ãˆ'=>'È', 'Ã‰'=>'É', 'ÃŠ'=>'Ê', 'Ã‹'=>'Ë', 'ÃŒ'=>'Ì',
    'Ã'=>'Í', 'ÃŽ'=>'Î', 'Ã'=>'Ï',
    'Ã‘'=>'Ñ',
    'Ã’'=>'Ò', 'Ã“'=>'Ó', 'Ã”'=>'Ô', 'Ã•'=>'Õ', 'Ã˜'=>'Ø',
    'Ã¥'=>'å',
    'Ã¦'=>'æ',
    'Ã§'=>'ç',
    'Ã¬'=>'ì', 'Ã­'=>'í', 'Ã®'=>'î', 'Ã¯'=>'ï',
    'Ã°'=>'ð',
    'Ã±'=>'ñ',
    'Ãµ'=>'õ',
    'Ã¸'=>'ø',
    'Ã½'=>'ý', 'Ã¿'=>'ÿ',
    'â‚¬'=>'€' );
  }

function fixeUmlauteDb() {
  $umlaute = $this->getUmlauteArray();
  foreach ($umlaute as $key => $value){
    $sql = "UPDATE table SET tracks = REPLACE(row, '{$key}', '{$value}') WHERE row LIKE '%{$key}%'";
  }
}
// Container dient zur erzeugung von instances nach festgelegten Bauanleitungen (receipts)
// Hier wird eine neue class gebildet
$container = new App\Core\Container();
//var_dump($container);         // erster Test, ob der code läuft

//$usersRepository = $container->make("usersRepository");
//var_dump($usersRepository);   // zweiter Test, nachdem UsersRepository erzeugt wurde

//var_dump($usersRepository->all());   // dritter Test, alle user auslesen; function aus AbstractRepostory

// nächster Test, finde user "Erik"; function aus init.php
//var_dump($usersRepository->findByUserName("test"));
//die();
?>
