Tracking progress
Klub stores progress per user in a configurable field and exposes two endpoints to add or remove progress items. Use this page for course or lesson completion tracking.
Storage
By default progress is stored in the user field defined by UserFieldProgress::$field (default: progress). You can swap the storage handler with bnomei.klub.progress.handler.
site/blueprints/users/member.yml
fields:
progress:
extends: fields/klub/progress
Endpoints
POST /klub/progress/addPOST /klub/progress/remove
Both require CSRF tokens and accept a redirect parameter. The id can be a page UUID, page ID, or any custom key.
You can also send an optional data payload with /klub/progress/add to store extra metadata.
Example
<?php if ($page->hasProgress()): ?>
<form method="post" action="<?= site()->url() ?>/klub/progress/remove">
<input type="hidden" name="id" value="<?= $page->uuid() ?>">
<input type="hidden" name="redirect" value="<?= $page->url() ?>">
<input type="hidden" name="token" value="<?= csrf() ?>">
<button type="submit">Reset progress</button>
</form>
<?php endif ?>
<form method="post" action="<?= site()->url() ?>/klub/progress/add">
<input type="hidden" name="id" value="<?= $page->uuid() ?>">
<input type="hidden" name="redirect" value="<?= $page->url() ?>">
<input type="hidden" name="token" value="<?= csrf() ?>">
<button type="submit">Mark complete</button>
</form>
Querying progress
$page->hasProgress()
$user->hasProgress($page)
klub()->progress()->get($page)