PauseReasons
\Benecaster\Membership\PauseReasons
Encodes the sentinel values written to benecaster_subscriptions.paused_reason when this plugin pauses billing on a built-in-membership subscription it created. Read it as the money-side twin of RevocationReasons, which does the same job on the access side.
paused_reason is not merely a cohort tag — it is the only local record that a subscription is paused at all. Stripe leaves subscription.status as active while pause_collection is set, and benecaster_subscriptions has no other column that would show it. Anything asking “is this subscriber currently being billed?” must read paused_reason and never status. A report, export or add-on that trusts status will count paused subscribers as paying ones.
The tag is what makes the reversal safe. Recovery resumes exactly the subscriptions carrying a sentinel, so a podcaster who paused or cancelled something themselves in the Stripe dashboard finds their decision intact afterwards.
Constants
| Name | Value | Description |
|---|---|---|
GRACE_TIMEOUT |
'grace_timeout' |
The licence's payment-failure grace window expired and the site entered hard cutoff; feeds went dark in the same pass, so collection stopped with them. Shares its string value with RevocationReasons::GRACE_TIMEOUT deliberately — the two cohorts are the same event seen from the access side and the money side, and pairing them by value makes that legible at a glance in the database. |
Notes
There is deliberately no recoverable() split here, unlike RevocationReasons. The asymmetry is the design rather than an omission: a pause this plugin did not perform is never tagged, so the resume path has nothing to classify — **the presence of a tag is the permission to resume.**
Do not reuse this sentinel for a different cohort. paused_reason is load-bearing for the recovery sweep in the same way revocation_reason is for the token restore path: tagging an unrelated pause with GRACE_TIMEOUT means licence recovery will resume it, silently overriding a decision this plugin did not make. This is not a general-purpose extension point. An add-on that pauses subscriptions for its own reasons should record that in its own storage.