Jetonomy 1.9.0 - Sell access to a space with a membership plan, and connect the mobile app
Sell access to a space with a membership plan, and connect the mobile app. Closes a permissions issue where an access rule could grant more than it said.
This tag was rebuilt on 2026-08-02 to include two fixes and an access-rule index found while building the Learnomy course-discussion integration. The earlier 1.9.0 build was downloaded once, internally, and never distributed; the attached zip is the rebuilt one.
- New - Gate a space on a membership plan, and people holding that plan get in automatically. Access starts when the plan becomes active and ends when it lapses, with nothing to sync by hand.
- New - A visitor who cannot enter a paid space is told which plan includes it and given a link to buy it, instead of a generic "this space is private".
- New - Connect the mobile app to your account: approve the connection once in the browser and the app gets its own access key for that account, visible and revocable any time from your profile.
- New - Keyboard shortcuts l (upvote the focused post) and r (reply to it), which the FAQ has always documented.
- Improve - The buy link on a gated space works with Paid Memberships Pro, MemberPress, WooCommerce Memberships, Restrict Content Pro, LearnDash, Tutor LMS, LifterLMS, Sensei, MasterStudy and Learnomy, sending people to the right plan or course. Levels that are granted rather than sold, such as a WordPress role or a CRM tag, state the requirement without a link.
- Improve - The Access Rules screen explains what each access level unlocks, and reads your rule back in plain English as you build it.
- Improve - An access rule now uses a single Access level rather than two settings that could contradict each other, and defaults to Participate.
- Improve - Warn on the Access Rules screen when a rule cannot restrict anything, because the space is public or anyone can join it.
- Improve - Admin screens are usable down to 320px, and touch targets meet 44px on phones and tablets.
- Improve - Dropdown menus in wp-admin match the rest of the interface instead of using the operating system's own styling, where the browser supports it.
- Improve - Every message the plugin shows can be translated, including sign-in, sign-up and password-reset feedback, and admin list statuses.
- Fix - Search-as-you-type returns results again, and clicking one opens that topic.
- Fix - Pressing Enter on a keyboard-focused row opens it.
- Fix - The emoji picker can be opened from the composer toolbar.
- Fix - Paragraph spacing is kept on topics and replies written in the composer.
- Fix - The Conversations screen explains that messaging is dormant when another plugin handles direct messages, instead of showing a permissions error.
- Fix - Closing the email preview with Escape returns focus to the button that opened it.
- Fix - Activity Log and Revisions rows identify themselves on a phone rather than showing only a date or a type.
- Fix - Roadmap columns no longer use the same colour for Planned and In Progress.
- Fix - The "Read the full guide" link on the Users screen resolves.
- Fix - Filled buttons rendered black text on ordinary brand colours, so New Topic, New Post and Join read wrong on a plain blue. The auto-contrast threshold moved to 0.7, and white now stays on every normal brand blue, green, purple and red.
- Fix - Actions in a space header could not share a row with the owner's Edit space button, so each one dropped onto a line of its own. The header is a wrapping row now, centred on mobile.
- Security - An access rule could grant more than it advertised: a rule set to "Read" could record people as space admins, and running Sync Members then gave them moderation powers, including deleting other people's posts. The role a rule assigns is now capped by what the rule allows, and a membership rule can never make somebody a moderator. Rules already saved on your site are covered; no action is needed.
- Dev - New filters: jetonomy_compose_label (the create verb per space type) and jetonomy_membership_upgrade_url (where a plan is bought). Membership adapters may implement get_level_url() to link a plan directly.
- Dev - New filters for app connection: jetonomy_app_connect_schemes (which app URL schemes may receive a credential) and jetonomy_app_connect_bridge (which plugin owns the connect screen when several are installed). Add a scheme only for an app you ship, never a wildcard.
- Dev - New AccessRule::spaces_for_level() answers which spaces a membership level opens, replacing thirteen hand-written copies of the same query living inside individual adapters.
- Dev - New AccessRule::member_spaces_for_level_prefix() lists the gated spaces one member can reach, for products that want to surface them in their own account area.
- Dev - New space_permalink() builds a space URL, so an integration in another plugin stops composing the path by hand.
- Dev - New index rule_lookup (rule_type, rule_value) on jt_access_rules, because both lookups above were full table scans and now run on page views rather than only during provisioning. Schema milestone 1.9.1 covers sites already on 1.9.0; fresh installs get the index from CREATE TABLE.
- Compat - Removed a finfo_close() call that PHP 8.4 deprecates, so upload checks no longer emit a notice on 8.4.
Verified with a full browser smoke in both free-only and free+Pro scope: zero failures, zero new debug-log entries, 838 unit tests green.
Pro lockstep release: https://github.com/vapvarun/jetonomy-pro/releases/tag/v1.9.0
Full changelog: https://wbcomdesigns.com/release-notes/jetonomy/