diff --git a/AddOn/Calender_Office365/readme.md b/AddOn/Calender_Office365/readme.md new file mode 100644 index 00000000..e46d3936 --- /dev/null +++ b/AddOn/Calender_Office365/readme.md @@ -0,0 +1,171 @@ + +# 📅 GraphCalendar – Microsoft Graph API PHP Kalender-Client + +Diese PHP-Klasse ermöglicht den Zugriff auf Microsoft Outlook-Kalender über die Microsoft Graph API. Du kannst damit Events erstellen, abrufen, aktualisieren und löschen – auch inklusive Microsoft Teams-Meetings. + +--- + +## ✅ Funktionen + +- 🔐 Authentifizierung über Client-Credentials (Client-ID & Secret) +- 📥 Abrufen aller oder einzelner Kalendereinträge +- ✍️ Erstellen von Terminen (inkl. Teams-Link) +- 🔄 Aktualisieren bestehender Termine +- ❌ Löschen von Terminen + +--- + +## 🔧 Voraussetzungen + +- ✅ PHP ≥ 7.2 +- ✅ cURL-Support in PHP aktiviert +- ✅ Microsoft Azure AD App-Registrierung: + - `Calendars.ReadWrite`, `User.Read` (Application Permissions) + - Admin-Zustimmung erforderlich + - Client-ID, Client-Secret und Tenant-ID + +--- + +## 📦 Installation + +Kein Composer benötigt. Einfach Datei ins Projekt einfügen: + +```php +require_once 'GraphCalendar.php'; +``` + +--- + +## ⚙️ Office 365 Einrichtung (Azure AD) + +### 🛠️ Schritt 1: Im Azure-Portal anmelden + +1. Besuche [https://portal.azure.com](https://portal.azure.com) +2. Melde dich mit einem **Admin-Konto** deiner Organisation an + +--- + +### 🧩 Schritt 2: App-Registrierung erstellen + +1. Navigiere zu: **Azure Active Directory > App-Registrierungen** +2. Klicke auf **+ Neue Registrierung** +3. Eingaben: + - **Name**: `Outlook Kalender PHP` + - **Kontotyp**: Nur Organisation + - **Umleitungs-URI**: leer lassen +4. Klicke auf **Registrieren** + +--- + +### 🔍 Schritt 3: Wichtige Daten kopieren + +| Bezeichnung | Verwendungszweck | +|----------------------------|----------------------------| +| **Client-ID** | → `CLIENT_ID` | +| **Verzeichnis-ID** (Tenant) | → `TENANT_ID` | + +--- + +### 🔐 Schritt 4: Client Secret erstellen + +1. Menü: **Zertifikate & Geheimnisse** +2. Klicke auf **+ Neuer geheimer Schlüssel** +3. Beschreibung z.B. `Standard`, Ablaufzeit wählen +4. Klicke auf **Hinzufügen** +5. Kopiere den generierten **Wert** sofort → `CLIENT_SECRET` + +--- + +### 🛡️ Schritt 5: API-Berechtigungen + +1. Menü: **API-Berechtigungen** +2. Klicke auf **+ Berechtigung hinzufügen** +3. Wähle: + - **Microsoft Graph** + - **Anwendungsberechtigungen** + - Füge hinzu: + - `Calendars.Read` + - `Calendars.ReadWrite` +4. Klicke danach auf **Admin-Zustimmung erteilen** + +--- + +## ⚠️ Office 365 Graph API Limits + +| Limittyp | Beschreibung | +|-------------------------|--------------| +| **Anfragen** | ~10.000/10 Min. pro App/User (danach Fehler 429) | +| **Teilnehmerzahl** | Max. ~500 pro Termin | +| **Beschreibung (Body)** | Max. ~100.000 Zeichen (HTML/Text) | +| **Ort (Location)** | Max. 255 Zeichen | +| **Teams-Meetings** | Nur mit Teams-Lizenz & `OnlineMeetings.ReadWrite` | +| **Paging** | Nur 100 Events pro Anfrage – nutze `@odata.nextLink` | +| **Anhänge** | Max. 150 MB (3MB pro Datei über diese WebAPI) – große Dateien vermeiden | + +--- + +## 🚀 Beispielnutzung + +```php +$calendar = new GraphCalendar( + 'DEINE_CLIENT_ID', + 'DEIN_CLIENT_SECRET', + 'DEIN_TENANT_ID', + 'defaultuser@example.com' // Optional +); + +// Event erstellen +$calendar->createEvent( + 'Team Meeting', + '2025-05-01T10:00:00', + '2025-05-01T11:00:00', + true, + 'Wöchentliches Sync-Meeting', + 'Online', + [ + [ + 'emailAddress' => [ + 'address' => 'gast@example.com', + 'name' => 'Gast Name' + ], + 'type' => 'required' + ] + ] +); + +// Events abrufen +$events = $calendar->getEvents(); + +// Einzelnes Event abrufen +$event = $calendar->getEvents('EVENT_ID'); + +// Event aktualisieren +$calendar->updateEvent('EVENT_ID', 'Neuer Titel', '2025-05-01T12:00:00', '2025-05-01T13:00:00'); + +// Event löschen +$calendar->deleteEvent('EVENT_ID'); +``` + +--- + +## 🧠 Tipps + +- Verwende **gültige Zeitzonenbezeichner** wie `Europe/Berlin`, `UTC`, etc. +- Für **Teams-Meetings** setze `isOnlineMeeting = true` und `onlineMeetingProvider = teamsForBusiness` + +--- + +## 📄 Lizenz + +MIT License – frei für private & kommerzielle Nutzung. Keine Garantie. + +--- + +📅 **Stand:** Mai 2025 +🔗 Weitere Infos: [Microsoft Graph Dokumentation](https://learn.microsoft.com/en-us/graph/) + +--- + +## Online Test / Beispielnutzung + +Dieser Client läuft online als Test in einer Office365 Umgebung. Und ist unter https://sb.zeus.tips/outlook-api/ erreichbar.