teltek/pumukit-teams-bundle
A Symfony bundle for Pumukit that adds Microsoft Teams integration, linking Teams recordings and channels with the video CMS so meeting content can be imported, organized, and published alongside existing multimedia.
Read this first: teltek/pumukit-teams-bundle is a Symfony bundle, not a Laravel package — it ships PHP classes, a DependencyInjection/ folder, and service wiring for PuMuKIT, which is a Symfony application. If you are evaluating this from a Laravel codebase, it will not install or function; there is no adapter, no service provider, and no Laravel contract. The "Laravel developer" framing is a template mismatch — treat this assessment as if you are working inside an existing PuMuKIT deployment.
Minimal steps to first value:
composer.json in your PuMuKIT root for the Symfony version — PuMuKIT has historically tracked Symfony 3.x/4.x, so your PHP constraint (likely 7.x) will gate what this bundle supports.composer require teltek/pumukit-teams-bundle
If Composer resolves a dev branch or a constraint conflict against your PuMuKIT version, stop — you are probably looking at an unmaintained fork point and will need to vendor it manually.app/AppKernel.php (legacy Symfony) or config/bundles.php (Symfony 4+) inside the appropriate environment block.README.md — the only usage doc that exists for a 0-star package.DependencyInjection/Configuration.php — this file is the config schema. Every option the bundle accepts is defined here; the README will be incomplete, this file will not.Command/ — the CLI entry points. This bundle has no meaningful UI surface; everything is driven from console commands, which tells you the intended workflow is cron-driven, not user-facing.Resources/config/services.xml (or services.yaml) — what actually gets wired, and what you can override.The auth model is Microsoft Graph, so start at the Azure portal, not in PHP. Teams recordings are not stored in a Teams-specific store — they land in OneDrive/SharePoint (/users/{id}/drive/items/... or via onlineMeetings/{id}/recordings). You will need an Azure AD app registration with application-level permissions such as OnlineMeetings.Read.All and Files.Read.All, and a client-credentials flow. Whatever config keys the bundle exposes, they will map to tenant_id / client_id / client_secret. If the bundle's Configuration.php only exposes a subset, plan on a small wrapper service rather than forking.
Discovery → download → ingest is the pipeline shape. Expect to write three thin layers around the bundle:
memory_limit and max_execution_time, or stream to disk rather than buffering — Teams recordings are routinely 500MB–2GB.WAITING/PENDING status and let Symfony's async worker pick it up rather than blocking the command.Idempotency is your responsibility. There is no built-in dedupe worth trusting in an unmaintained bundle. Store the Graph item ID (or a hash of the drive item's eTag) against the PuMuKIT multimedia object ID in a small table or in a PuMuKIT metadata field, and check it before every import. Without this, one cron overlap produces duplicate catalogue entries that are painful to merge.
Metadata mapping is the real integration work. Map Graph's recording metadata to PuMuKIT's model deliberately:
createdDateTime → recording date (PuMuKIT sorts and filters on this)people/authors fieldDo this in a dedicated service, not inline in a command, so it can be unit tested and re-run.
Schedule it, don't click it. Wire the command into cron or a Symfony scheduler at a low frequency (hourly is usually sufficient). Each run: discover new recordings since last cursor, check idempotency, enqueue imports. Keep the run short and make it restartable — long-running imports that die halfway leave partial objects.
Token caching matters at volume. Do not authenticate against Azure per file. Acquire one token per run and reuse it; if you import in batches, acquire per batch with an expiry check. Auth round-trips dominate cost on many-small-files workloads.
config/pumukit-teams.php, no facade, no php artisan. If your environment is Laravel, this evaluation ends here — the honest answer is "incompatible," and 0 dependents (see below) confirms nobody has bridged it.src/, and patch it. Budget for that in your estimate — it's not an "install and go" dependency.composer require explodes with constraint conflicts, the bundle targets an older PuMuKIT than yours, and you are looking at a port, not an integration.Retry-After headers explicitly; the bundle almost certainly does not.WAITING-status objects older than a threshold.DependencyInjection/Configuration.php, not the README. Read node names and defaults there before assuming an option name. If a needed Graph setting isn't exposed, the clean extension point is a Symfony service decorator or a compiler pass overriding the bundle's service definition — not editing the vendored bundle, unless you have already accepted the fork.-vvv and confirm config is loaded, (2) hit Graph manually with curl using the same credentials to isolate auth from PHP, (3) log the resolved multimedia-object payload before PuMuKIT ingest to catch mapping errors. Do not start by reading the bundle's internals — start by isolating which of the three pipeline stages (auth / download / ingest) is failing.services.yaml, decorate the importer service if the bundle exposes one, or wrap the console command in your own command that adds idempotency and metadata mapping. Forking the import logic should be a last resort, but for a 0-star bundle it is a realistic one.How can I help you explore Laravel packages today?