Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen


<?PHP

if (!isset($argv[0])) {
if (strpos($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST']) === false ) {
 print '<div><center><h1>Es liegt keine Berechtigung vor!</h1></center></div>'; exit; }
}

/*
 * Outlook CSV-Export für Event-Kalender - csv_outlook_export.php (utf-8)
 * © RaHa

 * Teile des Scripts ggf. übernommen aus - https://werner-zenk.de

 * !!!!!!!!!!     
 * Speichern im Ordner ../tools!     
 * !!!!!!!!!!     

  Dieses Script wird in der Hoffnung verteilt, dass es nützlich sein wird, aber ohne irgendeine Garantie;
  ohne auch nur die implizierte Gewährleistung der Marktgängigkeit oder Eignung für einen bestimmten Zweck.
  Weitere Informationen finden Sie in der GNU General Public License.
  Siehe Datei: license.txt - http://www.gnu.org/licenses/gpl.html

  Sie können diese Datei unter den Bedingungen der GNU General Public License frei verwenden und weiter verbreiten.

 *
 * Sie können Änderungen vornehmen oder individuell anpassen.
 * Achtung: Fehlerhafte Angaben können Probleme verursachen!
 * Testen Sie einzelne Änderungen immer gleich bevor weitere vorgenommen werden.
 *
 
 *
 * Die erste Zeile der CSV-Datei enthält die Feldnamen, die Reihenfolge entspricht dem normalen Standardexport
 * von Outlook!
 *
 
 * URL-Aufrufe:
 * https://event-kalender.checkip.net/tools/csv_outlook_export.php
 * https://event-kalender.checkip.net/tools/csv_outlook_export.php?ErinnerungEIN
 * https://event-kalender.checkip.net/tools/csv_outlook_export.php?ErinnerungEIN=1T (X Tage)
 * https://event-kalender.checkip.net/tools/csv_outlook_export.php?ErinnerungEIN=1S (X Stunden)
 * https://event-kalender.checkip.net/tools/csv_outlook_export.php?ErinnerungEIN=1M (X Minuten)
 * zusätzliche Parameter:
 * &Suche=Feldname:Wert exportiert nur die Daten, die der Suche entsprechen 
 * &AlleIN hängt alle nicht übernommenen Felder mit Bezeichnung und Wert an die Beschreibung an
 * &Print gibt die Daten zusätzlich auf dem Bildschirm aus 
 * z.B.: https://event-kalender.checkip.net/tools/csv_outlook_export.php?ErinnerungEIN=15M$AlleIN&Print

 * Script-Aufrufe:
 * zusätzliche Parameter:
 * AlleIN hängt alle nicht übernommenen Felder mit Bezeichnung und Wert an die Beschreibung an
 * Feldname:Wert exportiert nur die Daten, die der Suche entsprechen 
 * /var/www/vhosts/event-kalender.checkip.net/tools/csv_outlook_export.php 1T
 * /var/www/vhosts/event-kalender.checkip.net/tools/csv_outlook_export.php 1S
 * /var/www/vhosts/event-kalender.checkip.net/tools/csv_outlook_export.php 1M
 * /var/www/vhosts/event-kalender.checkip.net/tools/csv_outlook_export.php 1T JA
 * /var/www/vhosts/event-kalender.checkip.net/tools/csv_outlook_export.php 1T NEIN
 * /var/www/vhosts/event-kalender.checkip.net/tools/csv_outlook_export.php 1T JA Feldname:Wert
 * /var/www/vhosts/event-kalender.checkip.net/tools/csv_outlook_export.php 1T NEIN Feldname:Wert
 * Reihenfolge Argumente beachten: Erinnerung Leerzeichen AlleIN 

*/

function returnto() {
     global $eol;
     if (!isset($argv[0])) {
     print $eol.$eol.'<center><h2><a href="'.$_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'].'" target="_self">Zurück zum Event-Kalender</a></h2></center>'.$eol.$eol;
     }     
     exit;
}


// Pruefung ob Aufruf von zulaessiger IP/DYNDNS erfolgt
// ggf. Zeilen auskommentieren!
/*
if (!isset($argv[0])) {
     $dynsallow['1']="remote-xxx.dyndns.checkip.net";
     $dynsallow['2']="mobile-xxx.dyndns.checkip.net";
     
     $i = 0;
     $doaction=false;     
     foreach ($dynsallow as $dynallow) {
          $i++;
          $ipremote=$_SERVER["REMOTE_ADDR"];
          $hostip=gethostbyname($dynallow);
          if ($ipremote==$hostip) { $doaction=true; }
     }
     if ($doaction === false) { returnto(); }
}
*/

// Sicherung der Kalender-Datenbank nach Outlook

session_start();

$eol = "<br>";
// Erinnerung ein?
$erinnerungEIN="NEIN";
$erinnerungTime=86400;
// Parameter via URL-Aufruf
if (isset($_REQUEST['ErinnerungEIN'])) { $erinnerungEIN="JA"; $erinnerungTime=$_REQUEST['ErinnerungEIN']; }
// Parameter via Scriptaufruf
// Achtung: bei Scriptaufruf via cron befindet man sich im Hauptroot. Der Ort muss in chdir ergänzt/geändert werden! 
if (isset($argv[0])) { 
     if (isset($_SERVER['SCRIPT_FILENAME'])) { $chdir = str_replace("/csv_outlook_export.php", "", $_SERVER['SCRIPT_FILENAME']); } else { $chdir = "";}
     if (isset($argv[1])) { $erinnerungEIN="JA"; $erinnerungTime=$argv[1]; } if ($chdir !== "") { chdir($chdir); }
     $eol = chr(10);
}

$erinnerungValue=str_replace("T", "", $erinnerungTime, $count);
if ($count>0) {$erinnerungTime = 86400*intval($erinnerungValue);}
$erinnerungValue=str_replace("S", "", $erinnerungTime, $count); 
if ($count>0) {$erinnerungTime = 3600*intval($erinnerungValue);}
$erinnerungValue=str_replace("M", "", $erinnerungTime, $count);
if ($count>0) {$erinnerungTime = 60*intval($erinnerungValue);}

// Suche
unset($Suche);
// Parameter via URL-Aufruf
if (isset($_REQUEST['Suche'])) { $Suche = explode(":", $_REQUEST['Suche']); }
// Parameter via Scriptaufruf
if (isset($argv[3])) { $Suche = explode(":", $_REQUEST['Suche']); }

// Felder, die nicht übernommen werden können an Beschreibung anhängen
$AlleIN="NEIN";
// Parameter via URL-Aufruf
if (isset($_REQUEST['AlleIN'])) { $AlleIN="JA"; }
// Parameter via Scriptaufruf
if (isset($argv[2])) { $AlleIN=$argv[2]; }

// Ausgabe auf Bildschirm
$Print="NEIN";
// Parameter via URL-Aufruf
if (isset($_REQUEST['Print'])) { $Print="JA"; }
 
$DB_WORK_DIR = str_replace('tools', 'export/', getcwd());
$DB_HOME_DIR = str_replace('tools', '', getcwd());

if (is_file($DB_HOME_DIR."/verbindung.php")) {
     if (is_file($DB_HOME_DIR."/dbinfo.inc.php")) {
          require_once $DB_HOME_DIR."/dbinfo.inc.php";
     } else {
          require_once $DB_HOME_DIR."/verbindung.php";
     }
} else { print "Fehler include verbindung.php".$eol; returnto(); }

$DB_WORK_FILE = 'outlook_zu.csv';
$DB_WORK_CSV_FILE = $DB_WORK_DIR.$DB_WORK_FILE;

if (!is_dir($DB_WORK_DIR)) { mkdir($DB_WORK_DIR, 0700); }

if (isset($Suche)) {
      $sql="SELECT * FROM `" . $TABLE_PREFIX . "_kalender` WHERE `".$Suche[0]."` = '".$Suche[1]."' ORDER BY `start`";
} else {
     $sql="SELECT * FROM `" . $TABLE_PREFIX . "_kalender` ORDER BY `start`";
}     

$statement = $db->prepare($sql);
if(!$statement->execute()) { 
     print $eol.$eol;
     print "SQL Error".$eol;
        print $statement->queryString.$eol;
        print $statement->errorInfo()[2];
     returnto();
}

$events= $statement->fetchall();
$csv = "";

if (count($events)>0) {

     $csv = '"Betreff","Beginnt am","Beginnt um","Endet am","Endet um","Ganztägiges Ereignis","Erinnerung Ein/Aus","Erinnerung am","Erinnerung um","Beschreibung","Kategorien","Adresse","Priorität","Privat"'.chr(10);

     foreach ($events AS $event) {

          sscanf($event["start"], "%4s-%2s-%2s %2s:%2s:%2s", $dbJahr, $dbMonat, $dbTag, $dbStunde, $dbMinute, $dbSekunde);
          sscanf($event["ende"], "%4s-%2s-%2s %2s:%2s:%2s", $dbJahr2, $dbMonat2, $dbTag2, $dbStunde2, $dbMinute2, $dbSekunde2);

          $erinnerung_datecreate = date_create($dbJahr.'-'.$dbMonat.'-'.$dbTag.' '.$dbStunde.':'.$dbMinute.':'.$dbSekunde);
            $erinnerung_timestamp = date_timestamp_get($erinnerung_datecreate)-$erinnerungTime;
          $erinnerung = date("Y-m-d H:i:s", $erinnerung_timestamp);
          sscanf($erinnerung, "%4s-%2s-%2s %2s:%2s:%2s", $dbJahrE, $dbMonatE, $dbTagE, $dbStundeE, $dbMinuteE, $dbSekundeE);
     
          if ($event["volltag"] == 1) {
               $volltag_datecreate = date_create($dbJahr2.'-'.$dbMonat2.'-'.$dbTag2.' '.$dbStunde2.':'.$dbMinute2.':'.$dbSekunde2);
                 $volltag_timestamp = date_timestamp_get($volltag_datecreate)+86400;
               $volltag = date("Y-m-d H:i:s", $volltag_timestamp);
               sscanf($volltag, "%4s-%2s-%2s %2s:%2s:%2s", $dbJahr2, $dbMonat2, $dbTag2, $dbStunde2, $dbMinute2, $dbSekunde2);
          }

          $csv .= '"'.$event["event"].'","'.$dbTag.".".$dbMonat.".".$dbJahr.'","'.$dbStunde.":".$dbMinute.":".$dbSekunde.'","'.$dbTag2.".".$dbMonat2.".".$dbJahr2.'","'.$dbStunde2.":".$dbMinute2.":".$dbSekunde2.'"';
     
         if ($event["volltag"] == 1 ) { $csv .= ',"EIN"'; } else { $csv .= ',"AUS"'; }
    
         if ($erinnerungEIN =="JA") { $csv .= ',"EIN"'; } else { $csv .= ',"AUS"'; }
    
         $csv .= ',"'.$dbTagE.".".$dbMonatE.".".$dbJahrE.'","'.$dbStundeE.":".$dbMinuteE.":".$dbSekundeE.'"';
 
          if ($AlleIN == "JA") {
              $beschreibung = "";
              foreach ($event AS $nichtIN => $nichtIN_key) {
                    if ($nichtIN == "start" OR $nichtIN == "ende" OR $nichtIN == "event" OR $nichtIN == "volltag" OR $nichtIN == "beschreibung" OR $nichtIN == "kategorie" OR $nichtIN == "adresse" OR $nichtIN == "privat") { continue; }         
                    if (intval($nichtIN == 0)) {
                         $beschreibung .= chr(10).$nichtIN.' = '.$nichtIN_key;
                    }     
              }
                  $csv .= ',"'.str_replace('"', '""', $event["beschreibung"].chr(10).chr(10).'---'.chr(10).$beschreibung).'"';
          } else {
              $csv .= ',"'.str_replace('"', '""', $event["beschreibung"]).'"';
         }
    
         $csv .= ',"'.$event["kategorie"].'","'.$event["adresse"].'","Normal"';
    
         if ($event["privat"] == 1 ) { $csv .= ',"Privat"'; } else { $csv .= ',"AUS"'; }

         $csv .= chr(10);
     }

     if ($Print == "JA") { print str_replace(chr(10), "<br>", $csv).$eol.$eol."---END---"; }

     if (!file_put_contents($DB_WORK_CSV_FILE, $csv)) {
           print 'Fehler beim Schreiben in die Datei: '.$DB_WORK_CSV_FILE.$eol;
     }
     print $eol.'Datei '.$DB_WORK_CSV_FILE.' wurde gespeichert.'.$eol;
}
if ($csv == "") { print $eol.'Nichts gespeichert.'.$eol; }

returnto();

?>


Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen


<?PHP

if (!isset($argv[0])) {
if (strpos($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST']) === false ) {
 print '<div><center><h1>Es liegt keine Berechtigung vor!</h1></center></div>'; exit; }
}

/*
 * Outlook CSV-Import in den Event-Kalender - csv_outlook_import.php (utf-8)
 * © RaHa

 * Teile des Scripts ggf. übernommen aus - https://werner-zenk.de

 * !!!!!!!!!!     
 * Speichern im Ordner ../tools!     
 * !!!!!!!!!!     

  Dieses Script wird in der Hoffnung verteilt, dass es nützlich sein wird, aber ohne irgendeine Garantie;
  ohne auch nur die implizierte Gewährleistung der Marktgängigkeit oder Eignung für einen bestimmten Zweck.
  Weitere Informationen finden Sie in der GNU General Public License.
  Siehe Datei: license.txt - http://www.gnu.org/licenses/gpl.html

  Sie können diese Datei unter den Bedingungen der GNU General Public License frei verwenden und weiter verbreiten.

 *
 * Sie können Änderungen vornehmen oder individuell anpassen.
 * Achtung: Fehlerhafte Angaben können Probleme verursachen!
 * Testen Sie einzelne Änderungen immer gleich bevor weitere vorgenommen werden.
 *

 *
 * Die erste Zeile der CSV-Datei muss die Feldnamen enthalten. Die Reihenfolge der Feldnamen muss dem normalen
 * Standardexport von Outlook entsprechen (keine Verschiebung oder Umbenennung)!
 *
  
 * URL-Aufrufe:
 * https://event-kalender.checkip.net/tools/csv_outlook_import.php
 * zusätzliche Parameter:
 * &AlleIN hängt alle nicht übernommenen Felder mit Bezeichnung und Wert an die Beschreibung an
 * &Dateiname der zu importiereten Datei
 * &Print gibt die Daten zusätzlich auf dem Bildschirm aus 
 * z.B.: https://event-kalender.checkip.net/tools/csv_outlook_import.php?AlleIN&Dateiname=xxxx&Print

 * Script-Aufrufe:
 * /var/www/vhosts/event-kalender.checkip.net/tools/csv_outlook_import.php JA
 * /var/www/vhosts/event-kalender.checkip.net/tools/csv_outlook_import.php NEIN
 * /var/www/vhosts/event-kalender.checkip.net/tools/csv_utlook_import.php JA Dateiname
 * /var/www/vhosts/event-kalender.checkip.net/tools/csv_outlook_import.php NEIN Dateiname
 * Reihenfolge Argumente beachten: JA/NEIN für AlleIN Leerzeichen Dateiname 

*/

function returnto() {
     global $eol;
     if (!isset($argv[0])) {
     print $eol.$eol.'<center><h2><a href="'.$_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'].'" target="_self">Zurück zum Event-Kalender</a></h2></center>'.$eol.$eol;
     }     
     exit;
}

// Pruefung ob Aufruf von zulaessiger IP/DYNDNS erfolgt
// ggf. Zeilen auskommentieren!
/*
if (!isset($argv[0])) {
     $dynsallow['1']="remote-xxx.dyndns.checkip.net";
     $dynsallow['2']="mobile-xxx.dyndns.checkip.net";
     
     $i = 0;
     $doaction=false;     
     foreach ($dynsallow as $dynallow) {
          $i++;
          $ipremote=$_SERVER["REMOTE_ADDR"];
          $hostip=gethostbyname($dynallow);
          if ($ipremote==$hostip) { $doaction=true; }
     }
     if ($doaction === false) { returnto(); }
}
*/

// Einfügen der Outlook-Kalenderdaten in den Event-Kalender

session_start();

$eol = "<br>";
// Felder, die nicht übernommen werden können an Beschreibung anhängen
$AlleIN="NEIN";
// Parameter via URL-Aufruf
if (isset($_REQUEST['AlleIN'])) { $AlleIN="JA"; }
// Parameter via Scriptaufruf
// Achtung: bei Scriptaufruf via cron befindet man sich im Hauptroot. Der Ort muss in chdir ergänzt/geändert werden! 
if (isset($argv[0])) { 
     if (isset($_SERVER['SCRIPT_FILENAME'])) { $chdir = str_replace("/csv_outlook_import.php", "", $_SERVER['SCRIPT_FILENAME']); } else { $chdir = "";}
     if (isset($argv[1])) { $AlleIN=$argv[1]; } if ($chdir !== "") { chdir($chdir); }
     $eol = chr(10);
}

// Dateiname
$Dateiname="";
// Parameter via URL-Aufruf
if (isset($_REQUEST['Dateiname'])) { $Dateiname = $_REQUEST['Dateiname']; }
// Parameter via Scriptaufruf
if (isset($argv[2])) { $Dateiname = $argv[2]; }


// Ausgabe auf Bildschirm
$Print="NEIN";
// Parameter via URL-Aufruf
if (isset($_REQUEST['Print'])) { $Print="JA"; }

$DB_WORK_DIR = str_replace('tools', 'export/', getcwd());
$DB_HOME_DIR = str_replace('tools', '', getcwd());

if (is_file($DB_HOME_DIR."/verbindung.php")) {
     require_once $DB_HOME_DIR."/verbindung.php";
} else { print "Fehler include verbindung.php".$eol; returnto(); }


if ($Dateiname !== "") { $DB_WORK_FILE = $Dateiname; if ($Print == "JA") { print "Dateiname: ".$Dateiname.$eol.$eol; }
} else { $DB_WORK_FILE = 'outlook_von.csv'; }

$DB_WORK_CSV_FILE = $DB_WORK_DIR.$DB_WORK_FILE;

$ok = 0;
$setFeldbezeichner="NEIN";
$gruppe = date("YmdHis") . mt_rand(100, 999);

if (($handle = fopen($DB_WORK_CSV_FILE, "r")) !== FALSE) {
     while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
          // holen wir die Feldbezeichner
          if ($setFeldbezeichner == "NEIN") { $Feldbezeichner = $data; $setFeldbezeichner = "JA"; if ($Print == "JA") { print_r($Feldbezeichner); print $eol.$eol; } continue; }     
          
          // jetzt die Daten
          
          $csvStart = explode(".",$data[1]);     
          $csvEnde = explode(".",$data[3]);     
          
          $start = $csvStart[2].'-'.substr("00".$csvStart[1], -2).'-'.substr("00".$csvStart[0], -2).' '.$data[2];
          $ende = $csvEnde[2].'-'.substr("00".$csvEnde[1], -2).'-'.substr("00".$csvEnde[0], -2).' '.$data[4];

          if ($data[5] == "Ein") { $volltag=1; } else { $volltag = 0; }

          if ($data[17] !== "Normal") { $prioritaet = intval($data[17]); } else { $prioritaet=0; }

          if ($data[18] !== "Aus") { $privat=1; } else { $privat = 0; }

          $data_kategorien_beschreibung = "";
          $insertinto_kategorie = "";
          if ($data[15] !== "") {
              $data[15] = str_replace(";", ",", $data[15]);
               $data_kategorien = explode(",", $data[15]);
               $kategorietest_break = "";
               foreach ($KATEGORIEN AS $kategorietest => $kategorie_value ) {
                     foreach($data_kategorien AS $data_kategorie => $data_value) {
                          if (strtolower($kategorie_value) == strtolower($data_value)) {
                               $insertinto_kategorie = $kategorie_value; $kategorietest_break ="JA"; break;
                          }
                     if ($kategorietest_break == "JA") { break; }     
                    }
                }
               $data_kategorien_beschreibung = "#".str_replace($insertinto_kategorie, "", $data[15]);
               $data_kategorien_beschreibung = str_replace(["#,", ",,", "#"], ["", ",",""], $data_kategorien_beschreibung);
                      
          } else {$insertinto_kategorie = "";}

          if ($AlleIN == "JA") {
               $beschreibung = "";
               if ($data_kategorien_beschreibung !== "") { $beschreibung .= "weitere Kategorien: ".$data_kategorien_beschreibung.chr(10); }
               if ($data[6] !== "") { $beschreibung .= $Feldbezeichner[6]." = ".$data[6].chr(10); }
               if ($data[7] !== "") { $beschreibung .= $Feldbezeichner[7]." = ".$data[7].chr(10); }
               if ($data[8] !== "") { $beschreibung .= $Feldbezeichner[8]." = ".$data[8].chr(10); }
               if ($data[9] !== "") { $beschreibung .= $Feldbezeichner[9]." = ".$data[9].chr(10); }
               if ($data[10] !== "") { $beschreibung .= $Feldbezeichner[10]." = ".$data[10].chr(10); }
               if ($data[11] !== "") { $beschreibung .= $Feldbezeichner[11]." = ".$data[11].chr(10); }
               if ($data[12] !== "") { $beschreibung .= $Feldbezeichner[12]." = ".$data[12].chr(10); }
               if ($data[13] !== "") { $beschreibung .= $Feldbezeichner[13]." = ".$data[13].chr(10); }
               if ($data[19] !== "") { $beschreibung .= $Feldbezeichner[19]." = ".$data[19].chr(10); }
               if ($data[20] !== "") { $beschreibung .= $Feldbezeichner[20]." = ".$data[20].chr(10); }
               if ($data[21] !== "") { $beschreibung .= $Feldbezeichner[21]." = ".$data[21].chr(10); }
               $beschreibung = str_replace('""', '"', $data[14].chr(10).chr(10).'---'.chr(10).$beschreibung);
               
          } else { $beschreibung = str_replace('""', '"', $data[14]); }
          
          $sqlerror = false;

          if ($Print == "JA") {
               print "Start: ".$start.$eol;
               print "Ende: ".$ende.$eol;
               print "Volltag: ".$volltag.$eol;
               print "Name: ".$NAME.$eol;
               print "Event: ".$data[0].$eol;
               print "Beschreibung: ".$beschreibung.$eol;
               print "Adresse: ".$data[16].$eol;
               print "Priorität: ".$prioritaet.$eol;
               print "Privat: ".$privat.$eol;
               print "Kategorie: ".$insertinto_kategorie.$eol;
               print "Gruppe: ".$gruppe.$eol;
               print $eol.$eol."###---####".$eol.$eol;
               
               //print_r($data);
          }

        $insertinto = "INSERT INTO `" . $TABLE_PREFIX . "_kalender` (start, ende, volltag, name, event, beschreibung, adresse, prioritaet, privat, kategorie, gruppe) ";
        $insertinto .= "VALUES ('". $start . "', '" . $ende . "', '" . $volltag . "', '" . $NAME . "', '" . $data[0] . "', '" . $beschreibung . "', '" . $data[16] . "', '" . $prioritaet . "', '" . $privat . "', '" . $insertinto_kategorie . "', '" . $gruppe . "')";

        if ($db->exec($insertinto)) { $ok++; } else { $sqlerror = true; $ok = 0; break; }

     }
    if ($ok > 0) { print $eol.'Die Daten aus '.$DB_WORK_FILE.' wurden in den Event-Kalender importiert.'; }
    if ($sqlerror) { print $eol.'SQL-Fehler bei Datenimport!'.$eol;  }
    
} else {
print $eol.'Fehler beim Öffnen der Datei '.$DB_WORK_FILE.$eol;
}

returnto();

?>