# 📅 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.