<?php
  $dbhandle = mysqli_connect($dbhost.':'.$dbport,$dbuser,$dbpassword, $dbname) or
      error("Die Verbindung mit dem Datenbankserver ist fehlgeschlagen ($dbhost, $dbuser, $dbpassword): " .  mysqli_error());

#  mysql_select_db($dbname, $dbhandle) or error("Die Verbindung mit der Datenbank $dbname ist fehlgeschlagen: " . mysqli_error());

  // Exportiere Daten als CSV-Datei. Setze Flag auf 1 ("exportiert") 
  function
  exportCSV($gesamtexport=0,$u18=false,$from=false,$end=false,$erstellt=false) {

      global $exportpath;

      $now = time();
      if ($end) {
          $now = $end;
      }
      $year = date('Y',$now);
      $month = date('m',$now);
      $day = date('d',$now);
      $leastbirthday = ($year - 18) . "-" . $month . "-" . $day;
      $mostbirthday = ($year - 5) . "-" . $month . "-" . $day;
      $mydate = date('YmdHi', $now);
      $query = "LOCK TABLES users WRITE, admins READ";
      $result = mysql_query($query) or
          error("Konnte Tabelle users nicht locken: " . mysql_error());
      if ($erstellt) {
          $changefield = 'erstellungsdatum';
      } else {
          $changefield = 'aenderungsdatum';
      }

//      $from = strtotime('2017-08-31 15:57');
 //     $end =$now;

      if ($u18) {
          $query = "SELECT * FROM users WHERE status = 0 
              AND geburtsdatum > '$leastbirthday'
              AND geburtsdatum < '$mostbirthday'
              AND $changefield < $now ORDER BY $changefield ASC";
      } else {
          $query = "SELECT * FROM users WHERE status = 0 
              AND geburtsdatum <= '$leastbirthday'
              AND $changefield < $now ORDER BY $changefield ASC";
      }
      if ($gesamtexport == 1)
      {
          if ($u18) {
              $query = "SELECT * FROM users WHERE 
                  geburtsdatum > '$leastbirthday'
                  $changefield < $now ORDER BY $changefield ASC";
          } else {
              $query = "SELECT * FROM users WHERE 
                  geburtsdatum <= '$leastbirthday'
                  $changefield < $now ORDER BY $changefield ASC";
          }
      }
      if ($from or $end) {
          print "Start: $from\nEnd: $end\nNow: $now\n";
          if ($u18) {
              $query = "SELECT * FROM users WHERE 
                  geburtsdatum > '$leastbirthday'
                  AND $changefield < $end 
                  AND $changefield > $from 
                  ORDER BY $changefield ASC";
          } else {
              $query = "SELECT * FROM users WHERE 
                  geburtsdatum <= '$leastbirthday'
                  AND $changefield < $end 
                  AND $changefield > $from 
                  ORDER BY $changefield ASC";
          }
#          $query = "SELECT * FROM users WHERE 
#              $changefield < $end 
#              AND $changefield > $from 
#              ORDER BY $changefield ASC";
          print $query . "\n";
      }

      print "Query: $query<br/>\n";

      $result = mysql_query($query) or
          error("Konnte csv-Daten nicht aus der Datenbank holen: " . mysql_error());
      $numRows = mysql_num_rows($result);
      if ($u18) {
          $filename = "$exportpath/U18$mydate"."_healthmiles.csv.xls";
      } else {
          $filename = "$exportpath/$mydate"."_healthmiles.csv.xls";
      }
      print "Schreibe in $filename\n";

      $fileout = fopen($filename,"w+") or
         die ("Kann $filename nicht oeffnen.\n");

      $fields = array('anrede','titel','name','vorname','strasse','hausnummer','plz','ort',
                      'email','versnummer','erstellungsdatum','aenderungsdatum','ersteller');
      $first = true;
      $line = '';
      foreach ($fields as $field) {
        if ($first) { $first = false; } else { $line .= ";"; }
        $line .='"' . $field . '"';
      }
      $line .= "\n";
      if (!fputs($fileout, $line, strlen($line))) error("Konnte nicht schreiben");
      fflush($fileout);
      while ($row = mysql_fetch_array($result))
      {
          $first = 1;
          $line = "";
          foreach ($fields as $field)
          {
              $$field = unescape($row[$field]);
              if ($field == 'ersteller') {
                  if ($$field == 0) { $ersteller = "Internet"; } else {
                      $subquery = "SELECT name FROM admins WHERE userId = " . $$field;
                      $subresult = mysql_query($subquery) or
                          error ("Konnte Ersteller nicht aus der Datenbank holen: " . mysql_error() . ", Query: $subquery" . 
                                 "Datenexport abgebrochen. Bitte melden sie sich beim <a href='mailto:$adminEmail'>Administrator</a> ($adminTel).");
                      $myrow = mysql_fetch_array($subresult);
                      $ersteller = $myrow['name'];
                  }
              }
              if ($field == 'erstellungsdatum') { $erstellungsdatum = date('d.m.Y G:i:s', $erstellungsdatum); }
              if ($field == 'aenderungsdatum') { $aenderungsdatum = date('d.m.Y G:i:s', $aenderungsdatum); }
              if ($first == 1) { $first = 0; } else { $line.=";"; }
              $line .=  '"' . $$field . '"';
          }
          $line .= "\n";
          if (!fputs($fileout, $line, strlen($line))) error("Konnte nicht schreiben");
          fflush($fileout);
      }
      fclose($fileout);
      if ($u18) {
          $query = "UPDATE users SET status = 1 WHERE status = 0 
              AND geburtsdatum > '$leastbirthday'
              AND geburtsdatum < '$mostbirthday'
              AND $changefield < $now";
      } else {
          $query = "UPDATE users SET status = 1 WHERE status = 0 
              AND geburtsdatum <= '$leastbirthday'
              AND $changefield < $now";
      }
      if (!($from && $end)) {
          $result = mysql_query($query) or error("Konnte Export-Status nicht setzen " . mysql_error());
      }

      $query = "UNLOCK TABLES";
      $result = mysql_query($query) or
          error("Konnte Tabelle users nicht unlocken: " . mysql_error());
  }

  function exportCSVselected($users, $filesuffix='datenexport')
  {

      global $exportpath;

      $now = time();
      $mydate = date('Y-m-d', $now);
      $filename = "extended/$mydate" . "_$filesuffix.xls";

      $fields = array('anrede','titel','name','vorname','strasse','hausnummer','plz','ort',
                      'email','versnummer','erstellungsdatum','aenderungsdatum','ersteller');
     
      $data = Array();
      /* print data */
      foreach ($users as $myUser)
      {
          $row = Array();
          $user = new user('',$myUser);
          $first = 1;
          $line = "";
          foreach ($fields as $field)
          {
              $$field = $user->$field;
              if ($field == 'ersteller') {
                  if ($$field == 0) { $ersteller = "Internet"; } else {
                      $subquery = "SELECT name FROM admins WHERE userId = " . $$field;
                      $subresult = mysql_query($subquery) or
                          error ("Konnte Ersteller nicht aus der Datenbank holen: " . mysql_error() . ", Query: $subquery");
                      $myrow = mysql_fetch_array($subresult);
                      $ersteller = $myrow['name'];
                  }
              }
              if ($field == 'erstellungsdatum') { $erstellungsdatum = date('d.m.Y G:i:s', $erstellungsdatum); }
              if ($field == 'aenderungsdatum') { $aenderungsdatum = date('d.m.Y G:i:s', $aenderungsdatum); }
              array_push($row, $$field);
          }
          array_push($data, $row);
      }
      $spreadsheet = new Excelexport("$exportpath/" . $filename,$filesuffix,$fields,$data);
      $spreadsheet->create();

      return($filename);

  }

  function exportdoublettes() {
    $doublettes = checkdoublettes();
    $users = array();
    foreach ($doublettes as $row) {
      $userId = $row['userId'];
      array_push($users, $userId);
    } 
    $filename = exportCSVselected($users, 'doubletten');
    return $filename;
  }

  function getLastExport($u18=false)
  {
      $query = "SELECT timestamp FROM userlogs WHERE aktion = 'datenexport" . ($u18?'U18':'') . "' order by timestamp DESC";
      $result = mysql_query($query) or
          error("Konnte csv-Daten nicht aus der Datenbank holen: " . mysql_error());

      $row = mysql_fetch_array($result);
      $lastexport = date('d.m.Y G:i:s', $row['timestamp']);

      return $lastexport;
  }

  function exportCSVU18($gesamtexport=0,$u18=false)
  {

      global $exportpath;

      $now = 1247608800; # 2009-07-15: Stichtag Start U18
      $year = date('Y',$now);
      $month = date('m',$now);
      $day = date('d',$now);
      $leastbirthday = ($year - 18) . "-" . $month . "-" . $day;
      $mostbirthday = ($year - 0) . "-" . $month . "-" . $day;
      $mydate = date('YmdHi', $now);
      $query = "LOCK TABLES users WRITE, admins READ";
      $result = mysql_query($query) or
          error("Konnte Tabelle users nicht locken: " . mysql_error());
      if ($u18) {
          $query = "SELECT * FROM users WHERE  geburtsdatum >= '$leastbirthday' AND status = 1
              AND geburtsdatum < '$mostbirthday' 
              AND aenderungsdatum < $now ORDER BY aenderungsdatum ASC";
      } else {
          $query = "SELECT * FROM users WHERE status = 0 
              AND geburtsdatum <= '$leastbirthday'
              AND aenderungsdatum < $now ORDER BY aenderungsdatum ASC";
      }
      if ($gesamtexport == 1)
      {
          if ($u18) {
              $query = "SELECT * FROM users WHERE 
                  geburtsdatum > '$leastbirthday'
                  aenderungsdatum < $now ORDER BY aenderungsdatum ASC";
          } else {
              $query = "SELECT * FROM users WHERE 
                  geburtsdatum <= '$leastbirthday'
                  aenderungsdatum < $now ORDER BY aenderungsdatum ASC";
          }
      }

      print "Query: $query<br/>\n";
      $result = mysql_query($query) or
          error("Konnte csv-Daten nicht aus der Datenbank holen: " . mysql_error());
      $numRows = mysql_num_rows($result);
      if ($u18) {
          $filename = "$exportpath/U18$mydate"."_healthmiles.csv.xls";
      } else {
          $filename = "$exportpath/$mydate"."_healthmiles.csv.xls";
      }

      $fileout = fopen($filename,"w+") or
         die ("Kann $filename nicht oeffnen.\n");
      print "Filename: $filename<br/>\n";

      $fields = array('anrede','titel','name','vorname','strasse','hausnummer','plz','ort',
                      'email','versnummer','erstellungsdatum','aenderungsdatum','ersteller');
      $first = true;
      $line = '';
      foreach ($fields as $field) {
        if ($first) { $first = false; } else { $line .= ";"; }
        $line .='"' . $field . '"';
      }
      $line .= "\n";
      if (!fputs($fileout, $line, strlen($line))) error("Konnte nicht schreiben");
      fflush($fileout);
      while ($row = mysql_fetch_array($result))
      {
          $first = 1;
          $line = "";
          foreach ($fields as $field)
          {
              $$field = unescape($row[$field]);
              if ($field == 'ersteller') {
                  if ($$field == 0) { $ersteller = "Internet"; } else {
                      $subquery = "SELECT name FROM admins WHERE userId = " . $$field;
                      $subresult = mysql_query($subquery) or
                          error ("Konnte Ersteller nicht aus der Datenbank holen: " . mysql_error() . ", Query: $subquery" . 
                                 "Datenexport abgebrochen. Bitte melden sie sich beim <a href='mailto:$adminEmail'>Administrator</a> ($adminTel).");
                      $myrow = mysql_fetch_array($subresult);
                      $ersteller = $myrow['name'];
                  }
              }
              if ($field == 'erstellungsdatum') { $erstellungsdatum = date('d.m.Y G:i:s', $erstellungsdatum); }
              if ($field == 'aenderungsdatum') { $aenderungsdatum = date('d.m.Y G:i:s', $aenderungsdatum); }
              if ($first == 1) { $first = 0; } else { $line.=";"; }
              $line .=  '"' . $$field . '"';
          }
          $line .= "\n";
          if (!fputs($fileout, $line, strlen($line))) error("Konnte nicht schreiben");
          fflush($fileout);
      }
      fclose($fileout);
      if ($u18) {
          $query = "UPDATE users SET status = 1 WHERE status = 0 
              AND geburtsdatum >= '$leastbirthday'
              AND geburtsdatum < '$mostbirthday' 
              AND aenderungsdatum < $now";
      } else {
          $query = "UPDATE users SET status = 1 WHERE status = 0 
              AND geburtsdatum <= '$leastbirthday'
              AND aenderungsdatum < $now";
      }
      $result = mysql_query($query) or error("Konnte Export-Status nicht setzen " . mysql_error());

      $query = "UNLOCK TABLES";
      $result = mysql_query($query) or
          error("Konnte Tabelle users nicht unlocken: " . mysql_error());
  }


function dbEscapeString($string)
{
    global $dbhandle;
    return mysql_real_escape_string($string);
}

function dbQuery($query)
{

    $result = mysql_query( $query)
            or error('Cannot commit query: ' . $query);
    return $result;
}
function dbNumRows($result)
{
    return mysql_num_rows($result);
}


function dbFetchRow($result)
{
    return mysql_fetch_array($result,MYSQL_ASSOC);
}


function dbError()
{
    return mysql_error();
}


function dbFreeResult($result)
{
    return;
    $response = null;
    if ($result) {
        $response = mysql_free_result($result);
    }
    return $result;
}

