Guest User

Untitled

a guest
Oct 5th, 2022
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.87 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3.  
  4. <head>
  5.   <title>PHP-Script zum auslesen einer ICS Datei</title>
  6.  
  7.   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8.   <meta name="viewport" content="width=device-width,initial-scale=1">
  9.   <meta charset="UTF-8">
  10.   <meta name="robots" content="index, follow" />
  11.  
  12.   <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
  13.  
  14. </head>
  15.  
  16. <body>
  17.   <main role="main">
  18.  
  19.   <div class="container">
  20.  
  21. <?php
  22. /*error_reporting(E_ALL);*/
  23. error_reporting(-1);  
  24. ini_set('display_errors', TRUE);  
  25. $loc_de = setlocale(LC_ALL, 'de_DE@euro', 'de_DE',  'de', 'ge');
  26. date_default_timezone_set('Europe/Berlin');
  27.  
  28. class ics {
  29.     /* Die Funktion besteht darin, alle Inhalte von ics zu erhalten und alle Daten entsprechend den Ereignissen und ihren Abschnitten aufzulösen */
  30.     function getIcsEventsAsArray($file) {
  31.         $icalString = file_get_contents ( $file );
  32.         $icsDates = array ();
  33.         /* Auflösen der ICs-Daten, um Daten als Array entsprechend der Zeichenkette 'BEGIN:' zu erhalten */
  34.         $icsData = explode ( "BEGIN:", $icalString );
  35.         /* Iteration des icsData-Werts, um alle Start- und Enddaten als Unterarray zu erstellen */
  36.         foreach ( $icsData as $key => $value ) {
  37.             $icsDatesMeta [$key] = explode ( "\n", $value );
  38.         }
  39.         /* Itearting Einstieg in den Ics-Meta-Wert */
  40.         foreach ( $icsDatesMeta as $key => $value ) {
  41.             foreach ( $value as $subKey => $subValue ) {
  42.                 /* um ics-Ereignisse in der richtigen Reihenfolge zu erhalten */
  43.                 $icsDates = $this->getICSDates ( $key, $subKey, $subValue, $icsDates );
  44.             }
  45.         }
  46.         return $icsDates;
  47.     }
  48.  
  49.     /* Die Funktion besteht darin, die Elemente zu entfernen, die nicht die richtigen Start-, End- und Zusammenfassungsinformationen haben. */
  50.     function getICSDates($key, $subKey, $subValue, $icsDates) {
  51.         if ($key != 0 && $subKey == 0) {
  52.             $icsDates [$key] ["BEGIN"] = $subValue;
  53.         } else {
  54.             $subValueArr = explode ( ":", $subValue, 2 );
  55.             if (isset ( $subValueArr [1] )) {
  56.                 $icsDates [$key] [$subValueArr [0]] = $subValueArr [1];
  57.             }
  58.         }
  59.         return $icsDates;
  60.     }
  61. }
  62. /*header("Access-Control-Allow-Orgin: *");*/
  63. /* Ersetzen Sie die URL / den Dateipfad durch die .ics-Url */
  64. $file = "https://IregenEineUrl.com/events/?ical=1";
  65. ini_set('user_agent', 'My-Application/2.5');
  66.  
  67. /* Abrufen von Ereignissen aus der isc-Datei */
  68. $obj = new ics();
  69. $icsEvents = $obj->getIcsEventsAsArray( $file );
  70.  
  71. /* Hier erhalten wir die Zeitzone, um die Ereignisdaten entsprechend dem Standort von GEO zu erhalten */
  72. //date_default_timezone_set('Europe/Vienna');
  73. if(isset($icsEvents [1] ['DTSTART;TZID=UTC:19970902T090000'])){
  74.     $timeZone = trim ( $icsEvents [1] ['DTSTART;TZID=UTC:19970902T090000'] );
  75. };
  76. //$timeZone = trim ( $icsEvents [1] ['X-WR-TIMEZONE'] );
  77. unset( $icsEvents [1] );
  78. $html = '<div class="row">';
  79.  
  80. $eventImagePng = null;
  81. $eventLink = null;
  82. $eventName = null;
  83. $eventLink = null;
  84. $eventLocation = null;
  85. $start = null;
  86. $end = null;
  87. //$timeZone = null;
  88.  
  89. foreach( $icsEvents as $icsEvent){
  90.  
  91.     /* Startdatum abfragen */
  92.     if(isset($icsEvent ['DTSTART;VALUE=DATE'])){
  93.         $start = isset( $icsEvent ['DTSTART;VALUE=DATE'] ) ? $icsEvent ['DTSTART;VALUE=DATE'] : $icsEvent ['DTSTART'];
  94.     };
  95.     //$start = isset( $icsEvent ['DTSTART;VALUE=DATE'] ) ? $icsEvent ['DTSTART;VALUE=DATE'] : $icsEvent ['DTSTART'];
  96.     /* Konvertierung in datetime und Anwendung der Zeitzone, um die richtige Datumszeit zu erhalten */
  97.     $startDt = new DateTime ( $start );
  98.     //$startDt->setTimeZone ( new DateTimezone ( $timeZone ) );
  99.     $startDate = $startDt->format ( 'd.m.Y' );
  100.    
  101.     /* Enddatum abfragen */
  102.     if(isset($icsEvent ['DTEND;VALUE=DATE'])){
  103.         $end = isset( $icsEvent ['DTEND;VALUE=DATE'] ) ? $icsEvent ['DTEND;VALUE=DATE'] : $icsEvent ['DTEND'];
  104.     };
  105.     //$end = isset( $icsEvent ['DTEND;VALUE=DATE'] ) ? $icsEvent ['DTEND;VALUE=DATE'] : $icsEvent ['DTEND'];
  106.     /* Konvertierung in datetime und Anwendung der Zeitzone, um die richtige Datumszeit zu erhalten */
  107.     $endDt = new DateTime ( $end );
  108.     //$endDt->setTimeZone ( new DateTimezone ( $timeZone ) );
  109.     $endDate = $endDt->format ( 'd.m.Y' );
  110.  
  111.     /* Den Namen des Ereignisses ermitteln */
  112.     if(isset($icsEvent['SUMMARY'])){
  113.         $eventName = $icsEvent['SUMMARY'];
  114.     };
  115.     if(isset($icsEvent['URL'])){
  116.         $eventLink = $icsEvent['URL'];
  117.     };
  118.     if(isset($icsEvent['ATTACH;FMTTYPE=image/jpeg'])){
  119.         $eventImageJpg = $icsEvent['ATTACH;FMTTYPE=image/jpeg'];
  120.     };
  121.     if(isset($icsEvent['ATTACH;FMTTYPE=image/png'])){
  122.         $eventImagePng = $icsEvent['ATTACH;FMTTYPE=image/png'];
  123.     };
  124.     if(isset($icsEvent['LOCATION'])){
  125.         $eventLocation = $icsEvent['LOCATION'];
  126.     };
  127.  
  128.     $html .=
  129.     '<div class="col-md-12"><div class="card card mb-4 shadow-sm">
  130.    <img src="' . htmlspecialchars($eventImageJpg ?? $eventImagePng, ENT_COMPAT, 'UTF-8') . '" class="card-img-top" alt="' . $icsEvent ['BEGIN'] .'">'
  131.     .
  132.     '<div class="card-body">
  133.    <a href="'.htmlspecialchars($eventLink, ENT_COMPAT, 'UTF-8').'" target="_blank">
  134.    <h3 class="card-title">'.htmlspecialchars($eventName, ENT_COMPAT, 'UTF-8').'</h3>
  135.    </a>
  136.    <p class="card-text">Datum: '.htmlspecialchars($startDate, ENT_COMPAT, 'UTF-8').'&nbsp; - &nbsp'.htmlspecialchars($endDate, ENT_COMPAT, 'UTF-8').'</p>
  137.    <p>Veranstaltungsort: <a href="'.htmlspecialchars($eventLink, ENT_COMPAT, 'UTF-8').'" target="_blank">'.htmlspecialchars($eventLocation, ENT_COMPAT, 'UTF-8').'</a></p>
  138.    </div></div></div>';
  139. }
  140. echo $html.'</div>';
  141.  
  142. ?>
  143.  
  144.   </div>
  145. </main>
  146. </body>
  147.  
  148. </html>
Advertisement
Add Comment
Please, Sign In to add comment