PHPackages                             martin3r/platform-meetings - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. martin3r/platform-meetings

ActiveLibrary

martin3r/platform-meetings
==========================

089PHP

Since Mar 22Pushed 2mo agoCompare

[ Source](https://github.com/martin3r-me/platform-meeting)[ Packagist](https://packagist.org/packages/martin3r/platform-meetings)[ RSS](/packages/martin3r-platform-meetings/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

Meetings Modul
==============

[](#meetings-modul)

Modul für Meeting-Verwaltung mit Microsoft 365 Calendar Integration.

Features
--------

[](#features)

- ✅ Meeting-Verwaltung (erstellen, bearbeiten, löschen)
- ✅ Teilnehmer-Verwaltung mit RSVP-Status
- ✅ Agenda mit Kanban Board (analog zum Planner)
- ✅ Serientermine (Recurring Meetings)
- ✅ Microsoft 365 Calendar Integration
- ✅ Bidirektionaler RSVP-Sync (Outlook ↔ App)
- ✅ Webhook-Support für automatische Updates

Installation
------------

[](#installation)

1. Modul in `composer.json` des Hauptprojekts registrieren:

```
{
  "repositories": [
    {
      "type": "path",
      "url": "./platform/modules/meetings"
    }
  ],
  "require": {
    "martin3r/platform-meetings": "*"
  }
}
```

2. `composer update` ausführen
3. Migrationen ausführen:

```
php artisan migrate
```

4. Commands in `app/Console/Kernel.php` registrieren (für Scheduler):

```
protected function schedule(Schedule $schedule)
{
    $schedule->command('meetings:generate-recurring')->daily();
    $schedule->command('meetings:renew-subscriptions')->daily();
}
```

Microsoft 365 Integration
-------------------------

[](#microsoft-365-integration)

### 1. Scopes erweitern

[](#1-scopes-erweitern)

In `platform/core/resources/views/components/teams-sso-script.blade.php`:

```
microsoftTeams.authentication.getAuthToken({
    resources: [
        'https://graph.microsoft.com/User.Read',
        'https://graph.microsoft.com/Calendars.ReadWrite',
        'https://graph.microsoft.com/Calendars.ReadWrite.Shared',
        'https://graph.microsoft.com/OnlineMeetings.ReadWrite' // Optional für Teams-Meetings
    ],
    silent: true
})
```

### 2. Token-Speicherung

[](#2-token-speicherung)

Der `MicrosoftGraphCalendarService` benötigt Access Tokens. Aktuell werden diese aus:

- Request Header `X-Microsoft-Access-Token`
- Session `microsoft_access_token_{user_id}`

**TODO**: Token-Persistierung implementieren:

- Option 1: `user_oauth_tokens` Tabelle
- Option 2: User-Model erweitern mit `microsoft_access_token` (encrypted)
- Option 3: Laravel Socialite Token-Speicherung nutzen

### 3. Webhook-Endpoint konfigurieren

[](#3-webhook-endpoint-konfigurieren)

Der Webhook-Endpoint ist: `/meetings/webhook/microsoft-calendar`

Stelle sicher, dass dieser Endpoint öffentlich erreichbar ist (für Microsoft Graph API).

Verwendung
----------

[](#verwendung)

### Meeting erstellen

[](#meeting-erstellen)

```
use Platform\Meetings\Models\Meeting;
use Platform\Meetings\Models\MeetingParticipant;
use Platform\Meetings\Services\MicrosoftGraphCalendarService;

$meeting = Meeting::create([
    'title' => 'Team Meeting',
    'start_date' => now()->addDay(),
    'end_date' => now()->addDay()->addHour(),
    'location' => 'Konferenzraum A',
]);

// Teilnehmer hinzufügen
MeetingParticipant::create([
    'meeting_id' => $meeting->id,
    'user_id' => $userId,
    'role' => 'attendee',
]);

// Zu Microsoft Calendar syncen
$calendarService = app(MicrosoftGraphCalendarService::class);
$calendarService->createEvent($meeting);
```

### Serientermin erstellen

[](#serientermin-erstellen)

```
use Platform\Meetings\Models\RecurringMeeting;

$recurring = RecurringMeeting::create([
    'title' => 'Wöchentliches Team Meeting',
    'start_time' => '10:00:00',
    'end_time' => '11:00:00',
    'recurrence_type' => 'weekly',
    'recurrence_interval' => 1,
    'next_meeting_date' => now()->next('Monday'),
]);

// Meetings werden automatisch durch Command generiert
```

### RSVP-Status synchronisieren

[](#rsvp-status-synchronisieren)

```
$calendarService = app(MicrosoftGraphCalendarService::class);
$calendarService->syncParticipantResponses($meeting);
```

Commands
--------

[](#commands)

- `meetings:generate-recurring` - Generiert Meetings aus Serienterminen (täglich ausführen)
- `meetings:renew-subscriptions` - Erneuert ablaufende Webhook-Subscriptions (täglich ausführen)

Models
------

[](#models)

- `Meeting` - Haupt-Entity für Meetings
- `MeetingParticipant` - Teilnehmer mit RSVP-Status
- `MeetingAgendaItem` - Agenda-Items für Kanban Board
- `MeetingAgendaSlot` - Spalten für Kanban Board
- `RecurringMeeting` - Serientermine
- `Appointment` - User-spezifische Termine (für Kalender-Sync)
- `MicrosoftCalendarSubscription` - Webhook-Subscriptions

Policies
--------

[](#policies)

- `MeetingPolicy` - Berechtigungen für Meetings
- `AppointmentPolicy` - Berechtigungen für Appointments

TODO / Offene Punkte
--------------------

[](#todo--offene-punkte)

1. **Token-Speicherung**: Access Tokens persistent speichern
2. **Scope-Erweiterung**: Scopes in Teams SSO Script erweitern
3. **Teams-Meetings**: Online-Meeting-Erstellung implementieren
4. **UI-Verbesserungen**:
    - Agenda Item Bearbeitung
    - Teilnehmer-Verwaltung UI
    - Recurring Meeting UI
5. **Error Handling**: Besseres Error Handling für Graph API Calls
6. **Testing**: Unit Tests für Services

Struktur
--------

[](#struktur)

```
meetings/
├── composer.json
├── config/
│   └── meetings.php
├── database/
│   └── migrations/
├── resources/
│   └── views/
│       └── livewire/
├── routes/
│   ├── web.php
│   └── guest.php
└── src/
    ├── Console/
    │   └── Commands/
    ├── Http/
    │   └── Controllers/
    ├── Livewire/
    ├── Models/
    ├── Policies/
    ├── Services/
    └── MeetingsServiceProvider.php

```

###  Health Score

21

—

LowBetter than 19% of packages

Maintenance57

Moderate activity, may be stable

Popularity10

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/624263472b888cbddf2459047c1ab71dafd2a5875da576e3675b9c3584dad922?d=identicon)[martin3r](/maintainers/martin3r)

---

Top Contributors

[![martin3r-me](https://avatars.githubusercontent.com/u/187852765?v=4)](https://github.com/martin3r-me "martin3r-me (2 commits)")

### Embed Badge

![Health badge](/badges/martin3r-platform-meetings/health.svg)

```
[![Health](https://phpackages.com/badges/martin3r-platform-meetings/health.svg)](https://phpackages.com/packages/martin3r-platform-meetings)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
