WP Manifestindependent plugin directory
manifest / multisite / pressbooks-multi-institution

Pressbooks Shared Network WP Registry grade D+. High-severity findings · 3 findingsWP RegistryHigh-severity findings · 3 findingsOpen the reportD+ #7 in Multisite & Networks

Tools for managing Pressbooks networks shared by multiple institutions

★ 0stars
11krelease downloads
≈100active sites
1.10.2latest · 23d ago

Install

Download pressbooks-multi-institution-1.10.2.zip From the 1.10.2 release on GitHub, Sep 30, 2026

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/pressbooks/pressbooks-multi-institution/releases/download/1.10.2/pressbooks-multi-institution-1.10.2.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

Description

Tools for managing Pressbooks networks shared by multiple institutions

Requirements

  • Pressbooks >= 6.16.0
  • PHP >= 8.1

Installation

composer require pressbooks/pressbooks-multi-institution

Or download the latest version from the releases page and unzip into your WordPress plugin directory: https://github.com/pressbooks/pressbooks-multi-institution/releases

Then activate and configure the plugin at the Network level in Pressbooks.

Helpful Commands

composer standards: check PHP coding standards with Laravel Pint \ composer fix: fix PHP coding standards with Laravel Pint \ composer test: run unit tests with PHPUnit \ composer readme: generate a Markdown readme from readme.txt \ npm run dev: build assets for development \ npm run build: build assets for distribution \ wp pb:reset-db-schema: deletes the plugin's data and reset the database schema

Directory Structure

Controllers

Controllers are responsible for handling requests and returning responses. They are located in the src/Controllers directory.

Database

Database migrations are located in the src/Database/Migrations directory.

Views

Composed Views like WP_List_Table are located in the src/Views directory.

Blade templates are located in the resources/views/{namespace} directory.

Models

Models are located in the src/Models directory.

Changelog

Please see the CHANGELOG file for more information.

Releases

Newest 25 of 28 recorded releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
1.10.2 latest
Sep 30, 2026 23d ago
pressbooks-multi-institution-1.10.2.zip
25
Sep 29, 2026 24d ago
pressbooks-multi-institution-1.10.1.zip
24
Jul 23, 2026 3mo ago
pressbooks-multi-institution-1.10.0.zip
97
Jun 1, 2026 4mo ago
pressbooks-multi-institution-1.9.1.zip
146
May 6, 2026 5mo ago
pressbooks-multi-institution-1.9.0.zip
171
Mar 16, 2026 7mo ago
tag only
—
Feb 26, 2026 7mo ago
tag only
—
Feb 9, 2026 8mo ago
pressbooks-multi-institution-1.7.0.zip
262
Jan 20, 2026 9mo ago
pressbooks-multi-institution-1.6.2.zip
277
Dec 2, 2025 10mo ago
pressbooks-multi-institution-1.6.1.zip
326
Dec 2, 2025 10mo ago
tag only
—
Oct 7, 2025 1 year ago
tag only
—
Sep 4, 2025 1 year ago
pressbooks-multi-institution-1.4.3.zip
414
Jul 17, 2025 1 year ago
pressbooks-multi-institution-1.4.2.zip
463
May 29, 2025 1 year ago
pressbooks-multi-institution-1.4.1.zip
512
May 13, 2025 1 year ago
pressbooks-multi-institution-1.4.0.zip
528
Apr 15, 2025 1 year ago
pressbooks-multi-institution-1.3.3.zip
556
Mar 27, 2025 1 year ago
pressbooks-multi-institution-1.3.2.zip
577
Mar 13, 2025 1 year ago
tag only
—
Feb 11, 2025 1 year ago
pressbooks-multi-institution-1.3.0.zip
619
Jan 6, 2025 1 year ago
pressbooks-multi-institution-1.2.0.zip
655
Dec 3, 2024 1 year ago
pressbooks-multi-institution-1.1.0.zip
688
Aug 28, 2024 2 years ago
pressbooks-multi-institution-1.0.5.zip
769
Jul 18, 2024 2 years ago
pressbooks-multi-institution-1.0.4.zip
768
Jul 17, 2024 2 years ago
pressbooks-multi-institution-1.0.3.zip
767
All releases on GitHub →

Active-site estimate ≈100 comes from the median of recent superseded releases. Method.

D+ grade

Security

Pressbooks Shared Network 1.10.2 · audited by WP Registry

High-severity findings.

3 high
Audited release
1.10.2
Findings
3
Worst severity
high
Content hash
d8cf6a52804c1586ecbb0b26…

Findings

  • high Reflected XSS in network-admin Institutions list via 's' parameter

    xss_reflected

    InstitutionsController::index() passes raw $_REQUEST['s'] as params.searchQuery to institutions/index.blade.php, which prints it with the unescaped Blade {!! !!} directive. wp_magic_quotes only backslash-escapes quotes, so payloads such as <img src=x onerror=alert(document.domain)> survive. A super admin who follows a crafted link to network/admin.php?page=pb_multi_institutions&s=... executes attacker script in network admin, allowing creation of super admins or network plugin installation.

    src/Controllers/InstitutionsController.php:41-45

    Recommendation

    Use {{ }} / esc_html() when echoing the search term and sanitize_text_field(wp_unslash($_REQUEST['s'])) at input.

  • high Reflected XSS in network-admin Assign Books page via 's' parameter

    xss_reflected

    AssignBooksController::index() builds params from raw $_REQUEST[$key] (unlike AssignUsersController, which applies sanitize_text_field), and assign/index.blade.php line 24 prints $params['s'] with {!! !!}. A crafted link to network/admin.php?page=pb_assign_books&s=<payload> runs script in a super admin's session.

    src/Controllers/AssignBooksController.php:23-41

    Recommendation

    Escape with {{ }} in the template and sanitize request params (sanitize_text_field(wp_unslash())).

  • high Assign Users bulk action lacks nonce (CSRF) and can remove institutional-manager scoping

    csrf

    AssignUsersController::processBulkActions() acts on $_REQUEST['action'] and $_REQUEST['ID'] without check_admin_referer (the sibling Institutions and Assign Books handlers do verify nonces). Any page a super admin visits can trigger GET network/admin.php?page=pb_assign_users&action=0&ID[]=<user> to delete wp_institutions_users rows, or action=<institution id> to move arbitrary users between institutions. Deleting an institutional manager's row makes get_institution_by_manager() return 0 so PermissionsManager::handlePagesPermissions() no longer restricts that user, who still holds the super admin granted by syncRestrictedUsers().

    src/Controllers/AssignUsersController.php:47-89

    Recommendation

    Add check_admin_referer('bulk-assign-users') (or the table's bulk nonce) and current_user_can('manage_network') before processing; revoke super admin when a manager row is removed.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.