Guest User

Untitled

a guest
Oct 4th, 2022
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.58 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.  
  24. class ics {
  25.     /* Die Funktion besteht darin, alle Inhalte von ics zu erhalten und alle Daten entsprechend den Ereignissen und ihren Abschnitten aufzulösen */
  26.     function getIcsEventsAsArray($file) {
  27.         $icalString = file_get_contents ( $file );
  28.         $icsDates = array ();
  29.         /* Auflösen der ICs-Daten, um Daten als Array entsprechend der Zeichenkette 'BEGIN:' zu erhalten */
  30.         $icsData = explode ( "BEGIN:", $icalString );
  31.         /* Iteration des icsData-Werts, um alle Start- und Enddaten als Unterarray zu erstellen */
  32.         foreach ( $icsData as $key => $value ) {
  33.             $icsDatesMeta [$key] = explode ( "\n", $value );
  34.         }
  35.         /* Itearting Einstieg in den Ics-Meta-Wert */
  36.         foreach ( $icsDatesMeta as $key => $value ) {
  37.             foreach ( $value as $subKey => $subValue ) {
  38.                 /* um ics-Ereignisse in der richtigen Reihenfolge zu erhalten */
  39.                 $icsDates = $this->getICSDates ( $key, $subKey, $subValue, $icsDates );
  40.             }
  41.         }
  42.         return $icsDates;
  43.     }
  44.  
  45.     /* Die Funktion besteht darin, die Elemente zu entfernen, die nicht die richtigen Start-, End- und Zusammenfassungsinformationen haben. */
  46.     function getICSDates($key, $subKey, $subValue, $icsDates) {
  47.         if ($key != 0 && $subKey == 0) {
  48.             $icsDates [$key] ["BEGIN"] = $subValue;
  49.         } else {
  50.             $subValueArr = explode ( ":", $subValue, 2 );
  51.             if (isset ( $subValueArr [1] )) {
  52.                 $icsDates [$key] [$subValueArr [0]] = $subValueArr [1];
  53.             }
  54.         }
  55.         return $icsDates;
  56.     }
  57. }
  58. /*header("Access-Control-Allow-Orgin: *");*/
  59. /* Ersetzen Sie die URL / den Dateipfad durch die .ics-Url */
  60. //$file = "https://irgendEineUrl.com/events/?ical=1";
  61. ini_set('user_agent', 'My-Application/2.5');
  62.  
  63. /* Abrufen von Ereignissen aus der isc-Datei */
  64. $obj = new ics();
  65. $icsEvents = $obj->getIcsEventsAsArray( $file );
  66.  
  67. /* Hier erhalten wir die Zeitzone, um die Ereignisdaten entsprechend dem Standort von GEO zu erhalten */
  68. //date_default_timezone_set('Europe/Vienna');
  69. if(isset($icsEvents [1] ['X-WR-TIMEZONE'])){
  70.     $timeZone = trim ( $icsEvents [1] ['X-WR-TIMEZONE'] );
  71. };
  72. //$timeZone = trim ( $icsEvents [1] ['X-WR-TIMEZONE'] );
  73. unset( $icsEvents [1] );
  74. $html = '<div class="row">';
  75.  
  76. $eventImagePng = null;
  77. $eventLink = null;
  78. $eventName = null;
  79. $eventLink = null;
  80. $eventLocation = null;
  81. $start = null;
  82. $end = null;
  83. $timeZone = null;
  84.  
  85. foreach( $icsEvents as $icsEvent){
  86.         /* Startdatum abfragen */
  87.         if(isset($icsEvent ['DTSTART;VALUE=DATE'])){
  88.            $start = isset( $icsEvent ['DTSTART;VALUE=DATE'] ) ? $icsEvent ['DTSTART;VALUE=DATE'] : $icsEvent ['DTSTART'];
  89.         };
  90.         //$start = isset( $icsEvent ['DTSTART;VALUE=DATE'] ) ? $icsEvent ['DTSTART;VALUE=DATE'] : $icsEvent ['DTSTART'];
  91.         /* Konvertierung in datetime und Anwendung der Zeitzone, um die richtige Datumszeit zu erhalten */
  92.         $startDt = new DateTime ( $start );
  93.         $startDt->setTimeZone ( new DateTimezone ( $timeZone ) );
  94.         $startDate = $startDt->format ( 'd.m.Y' );
  95.        
  96.         /* Enddatum abfragen */
  97.         if(isset($icsEvent ['DTEND;VALUE=DATE'])){
  98.            $end = isset( $icsEvent ['DTEND;VALUE=DATE'] ) ? $icsEvent ['DTEND;VALUE=DATE'] : $icsEvent ['DTEND'];
  99.         };
  100.         //$end = isset( $icsEvent ['DTEND;VALUE=DATE'] ) ? $icsEvent ['DTEND;VALUE=DATE'] : $icsEvent ['DTEND'];
  101.         /* Konvertierung in datetime und Anwendung der Zeitzone, um die richtige Datumszeit zu erhalten */
  102.         $endDt = new DateTime ( $end );
  103.         $endDt->setTimeZone ( new DateTimezone ( $timeZone ) );
  104.         $endDate = $endDt->format ( 'd.m.Y' );
  105.  
  106.         /* Den Namen des Ereignisses ermitteln */
  107.         if(isset($icsEvent['SUMMARY'])){
  108.            $eventName = $icsEvent['SUMMARY'];
  109.         };
  110.         if(isset($icsEvent['URL'])){
  111.            $eventLink = $icsEvent['URL'];
  112.         };
  113.         if(isset($icsEvent['ATTACH;FMTTYPE=image/jpeg'])){
  114.            $eventImageJpg = $icsEvent['ATTACH;FMTTYPE=image/jpeg'];
  115.         };
  116.         if(isset($icsEvent['ATTACH;FMTTYPE=image/png'])){
  117.            $eventImagePng = $icsEvent['ATTACH;FMTTYPE=image/png'];
  118.         };
  119.         if(isset($icsEvent['LOCATION'])){
  120.            $eventLocation = $icsEvent['LOCATION'];
  121.         };
  122.  
  123.         $html .=
  124.          '<div class="col-md-12"><div class="card card mb-4 shadow-sm">
  125.        <img src="' . htmlspecialchars($eventImageJpg ?? $eventImagePng, ENT_COMPAT, 'UTF-8') . '" class="card-img-top" alt="AltText">'
  126.         .
  127.         '<div class="card-body">
  128.        <a href="'.$eventLink.'" target="_blank">
  129.        <h3 class="card-title">'.$eventName.'</h3>
  130.        </a>
  131.        <p class="card-text">Datum: '.$startDate.'&nbsp; - &nbsp'.$endDate.'</p>
  132.        <p>Veranstaltungsort: <a href="'.$eventLink.'" target="_blank">'.$eventLocation.'</a></p>
  133.        </div></div></div>';
  134. }
  135. echo $html.'</div>';
  136.  
  137. ?>
  138.  
  139.   </div>
  140. </main>
  141. </body>
  142.  
  143. </html>
Advertisement
Add Comment
Please, Sign In to add comment