PHPackages                             teltek/pumukit-blackboard-bundle - 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. [API Development](/categories/api)
4. /
5. teltek/pumukit-blackboard-bundle

ActiveSymfony-bundle[API Development](/categories/api)

teltek/pumukit-blackboard-bundle
================================

PuMuKIT blackboard import API

1.0.7(2w ago)01.4k↓70.2%[1 PRs](https://github.com/teltek/PumukitBlackboardBundle/pulls)proprietaryPHPPHP ^8.2CI passing

Since Dec 19Pushed 6d ago4 watchersCompare

[ Source](https://github.com/teltek/PumukitBlackboardBundle)[ Packagist](https://packagist.org/packages/teltek/pumukit-blackboard-bundle)[ Docs](https://github.com/teltek/PumukitBlackboardBundle.git)[ RSS](/packages/teltek-pumukit-blackboard-bundle/feed)WikiDiscussions master Synced 3d ago

READMEChangelogDependencies (12)Versions (12)Used By (0)

BlackboardBundle
================

[](#blackboardbundle)

This bundle downloads recordings saved on Blackboard Collaborate from Blackboard Learn and imports them into PuMuKIT.

Configuration
-------------

[](#configuration)

Add the following to your PuMuKIT configuration:

```
pumukit_blackboard:
    learn_host: https://{blackboard_learn_domain}
    learn_key: {blackboard_api_learn_key}
    learn_secret: {blackboard_api_learn_secret}
    collaborate_host: https://{blackboard_collaborate_domain}
    collaborate_key: {blackboard_building_block_collaborate_key}
    collaborate_secret: {blackboard_building_block_collaborate_secret}
```

How it works
------------

[](#how-it-works)

The import process is split into three independent commands. Each command only does one job, stores its state in MongoDB and can be safely re-run at any time.

```
┌─────────────────────────────┐
│  sync-courses               │  Fetches course catalogue from Learn
│  Status: pending_recordings │  and upserts it in MongoDB.
└────────────┬────────────────┘
             │
             ▼
┌─────────────────────────────┐
│  sync-recordings --limit N  │  For each pending course, fetches
│  Status: pending_import     │  recordings from Collaborate and
│          done               │  saves them in PuMuKIT.
│          error              │
└────────────┬────────────────┘
             │
             ▼
┌─────────────────────────────┐
│  import:recordings          │  Downloads and ingests each
│  imported: true             │  recording into PuMuKIT.
└─────────────────────────────┘

```

### Course statuses (BlackboardCourse document)

[](#course-statuses-blackboardcourse-document)

ValueConstantMeaning`0``STATUS_PENDING_RECORDINGS`Course is queued to have its recordings fetched`1``STATUS_PENDING_IMPORT`Recordings found and saved, waiting to be imported`2``STATUS_DONE`No recordings found (or all processed)`3``STATUS_ERROR`An error occurred; check `errorMessage` fieldCommands
--------

[](#commands)

### Step 1 — Sync courses

[](#step-1--sync-courses)

```
php bin/console pumukit:blackboard:sync-courses
```

Fetches the full course catalogue from Blackboard Learn (sorted by `modified` descending) and persists it in MongoDB. Safe to re-run: new courses are inserted as `pending_recordings`; existing ones update their metadata without losing their current status, except `done` courses which are re-queued to check for new recordings.

---

### Step 2 — Sync recordings

[](#step-2--sync-recordings)

```
php bin/console pumukit:blackboard:sync-recordings [--limit=N]
```

Processes courses in `pending_recordings` status. For each course it queries Blackboard Collaborate, saves the found recordings in PuMuKIT and transitions the course to `pending_import` (recordings found) or `done` (no recordings). If a request fails the course is marked as `error` and the next one is processed.

OptionDefaultDescription`--limit``50`Maximum number of courses to process per run---

### Step 3 — Import recordings

[](#step-3--import-recordings)

```
php bin/console pumukit:blackboard:import:recordings [--fallback-full-download]
```

Downloads and ingests into PuMuKIT all recordings with `imported=false`. Requires the recording to have at least one owner with a matching PuMuKIT user account.

OptionDescription`--fallback-full-download`If streaming download fails, retry loading the full file into memory---

Recommended cron schedule
-------------------------

[](#recommended-cron-schedule)

```
# Step 1 — Refresh course catalogue once a day (off-peak hours)
0 2 * * * php /var/www/pumukit/bin/console pumukit:blackboard:sync-courses >> /var/log/pumukit/blackboard-courses.log 2>&1

# Step 2 — Process recordings in batches every hour
0 * * * * php /var/www/pumukit/bin/console pumukit:blackboard:sync-recordings --limit=100 >> /var/log/pumukit/blackboard-recordings.log 2>&1

# Step 3 — Import into PuMuKIT every 30 minutes
*/30 * * * * php /var/www/pumukit/bin/console pumukit:blackboard:import:recordings >> /var/log/pumukit/blackboard-import.log 2>&1
```

> **Note:** Adjust `--limit` in Step 2 based on the Blackboard Collaborate API rate limits of your institution. Start conservatively (50–100) and increase if no blocking occurs.

###  Health Score

49

—

FairBetter than 94% of packages

Maintenance98

Actively maintained with recent releases

Popularity18

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 93.3% 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.

###  Release Activity

Cadence

Every ~60 days

Recently: every ~15 days

Total

10

Last Release

19d ago

Major Versions

1.0.1 → 2.0.x-dev2026-02-18

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/11873240?v=4)[Pablo Ogando Ferreira](/maintainers/Yurujai)[@Yurujai](https://github.com/Yurujai)

---

Top Contributors

[![Yurujai](https://avatars.githubusercontent.com/u/11873240?v=4)](https://github.com/Yurujai "Yurujai (28 commits)")[![albacodina](https://avatars.githubusercontent.com/u/48245111?v=4)](https://github.com/albacodina "albacodina (2 commits)")

---

Tags

apisymfonybundlepumukit

### Embed Badge

![Health badge](/badges/teltek-pumukit-blackboard-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/teltek-pumukit-blackboard-bundle/health.svg)](https://phpackages.com/packages/teltek-pumukit-blackboard-bundle)
```

###  Alternatives

[mtarld/api-platform-ms-bundle

API Platform Microservice Bundle

7124.5k](/packages/mtarld-api-platform-ms-bundle)

PHPackages © 2026

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