Title: Capitol GAINS: CreativEngine Congressional Utilities
Author: CreativEngine, Inc.
Published: <strong>6. März 2026</strong>
Last modified: 27. Juli 2026

---

Search plugins

![](https://s.w.org/plugins/geopattern-icon/creativengine-congressional-utilities.
svg)

# Capitol GAINS: CreativEngine Congressional Utilities

 By [CreativEngine, Inc.](https://profiles.wordpress.org/creativenginecorp/)

[Download](https://downloads.wordpress.org/plugin/creativengine-congressional-utilities.1.4.7.zip)

 * [Details](https://de-ch.wordpress.org/plugins/creativengine-congressional-utilities/#description)
 * [Reviews](https://de-ch.wordpress.org/plugins/creativengine-congressional-utilities/#reviews)
 *  [Installation](https://de-ch.wordpress.org/plugins/creativengine-congressional-utilities/#installation)
 * [Development](https://de-ch.wordpress.org/plugins/creativengine-congressional-utilities/#developers)

 [Support](https://wordpress.org/support/plugin/creativengine-congressional-utilities/)

## Description

Capitol GAINS (Government Archives & Information Navigation Suite) is a comprehensive
WordPress plugin that provides a suite of tools for managing congressional operations,
including meetings, participants, members, files, and related data. The plugin integrates
with Advanced Custom Fields (ACF) Pro and Elementor for content management and display.

#### Key Features

 * **Meeting Management**: Create, update, and manage congressional meetings with
   full metadata support
 * **Participant & Member Tracking**: Manage witnesses, nominees, and committee 
   members
 * **File Management**: Upload and organize meeting files with embargo support
 * **REST API**: Complete REST API for external system integration
 * **CSV Import**: Bulk import meetings, panels, panel members, members, participants,
   and files via CSV
 * **Elementor Integration**: Custom widgets for displaying meetings, files, filters,
   and more
 * **Live Meetings**: Support for live streaming and upcoming meeting alerts
 * **Advanced Filtering**: Dynamic filter system with real-time count updates
 * **Preview System**: Generate previews of meetings before publishing

#### Requirements

 * **WordPress:** 6.4.0 or higher
 * **PHP:** 7.4 or higher
 * **ACF Pro:** Required (plugin will show notice if not active)
 * **Elementor:** Optional but recommended for frontend display

#### Custom Post Types

The plugin registers the following custom post types:

 * **Meetings** (`meeting`) – Main meeting post type
 * **Participants** (`meeting_participant`) – Witnesses and nominees
 * **Members** (`meeting_member`) – Committee members
 * **Meeting Files** (`meeting_file`) – Files associated with meetings

#### Taxonomies

 * **Meeting Status** (`meeting_status`)
 * **Meeting Type** (`meeting_type`)
 * **Committee Type** (`committee_type`)
 * **Privacy Type** (`privacy_type`)
 * **Congress** (`congress`)
 * **Subcommittee** (`subcommittee`)
 * **Participant Type** (`participant_type`)

Taxonomies can be enabled/disabled and assigned to different post types via plugin
settings.

#### Database

The plugin uses custom database tables for optimized data storage:

 * `wp_capigacr_meetingmeta` – Meeting metadata
 * `wp_capigacr_participantmeta` – Participant metadata
 * `wp_capigacr_membermeta` – Member metadata
 * `wp_capigacr_filemeta` – File metadata

Database migrations are handled manually via admin UI.

#### API Integration

The plugin provides a comprehensive REST API for external system integration with
endpoints for:

 * Creating and updating meetings
 * Managing files
 * Checking meeting existence
 * Getting live meetings
 * Filter counts
 * Preview generation

Base URL: `/wp-json/meetings/v1/`

#### External Services

This plugin may fetch data from external services in the following scenarios:

 * **File Imports**: When importing files via CSV, the plugin may download files
   from external URLs if specified in the import data. This is user-initiated and
   requires explicit import action.

All external requests use WordPress’s built-in HTTP API with proper SSL verification
and timeouts.

## Installation

 1. Upload the plugin files to `/wp-content/plugins/creativengine-congressional-utilities/`
 2. Activate the plugin through the WordPress admin panel
 3. Ensure ACF Pro is installed and activated
 4. Database tables will be created automatically on activation
 5. Configure settings via the **Meetings** and **CE Utilities** settings sub-menu 
    items in the WordPress admin

## FAQ

### What are the requirements for this plugin?

This plugin requires WordPress 5.0 or higher, PHP 7.4 or higher, and Advanced Custom
Fields Pro. Elementor is optional but recommended for frontend display.

### How do I create a meeting?

Meetings can be created via:
 * WordPress Admin: Create a new Meeting post type *
REST API: Use the `/wp-json/creativengine-meetings/v1/write` endpoint * CSV Import:
Import meetings in bulk via the admin import interface

### How do I use the Elementor widgets?

 1. Edit a page with Elementor
 2. Add widgets from the **CE Utilities** category
 3. Configure widget settings
 4. Publish the page

Available widgets include Meeting Display, Meeting Files, Meeting Info, Live Meetings
Alert, Meeting Filters, Search Button, and more.

### Can I import meetings in bulk?

Yes, the plugin supports CSV imports for meetings, panels, panel members, participants,
members, and files. Access the import interface via **Meetings**  **Import** in 
the WordPress admin.

### What is the REST API base URL?

Frontend endpoints use `/wp-json/creativengine-capitol-gains/v1/`. Proforma/admin
endpoints use `/wp-json/creativengine-meetings/v1/`. See the plugin documentation
for complete API endpoint details.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Capitol GAINS: CreativEngine Congressional Utilities” is open source software. 
The following people have contributed to this plugin.

Contributors

 *   [ CreativEngine, Inc. ](https://profiles.wordpress.org/creativenginecorp/)

[Translate “Capitol GAINS: CreativEngine Congressional Utilities” into your language.](https://translate.wordpress.org/projects/wp-plugins/creativengine-congressional-utilities)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/creativengine-congressional-utilities/),
check out the [SVN repository](https://plugins.svn.wordpress.org/creativengine-congressional-utilities/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/creativengine-congressional-utilities/)
by [RSS](https://plugins.trac.wordpress.org/log/creativengine-congressional-utilities/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.4.7

 * Fix: Congress taxonomy filtering in the Loop Filters widget and the Loop Grid/
   Meetings Table query handlers now compares against the actual registered taxonomy
   slug (e.g. `capigacr_congress`) instead of the hardcoded literal `congress`, 
   and no longer hardcodes an exclusion list for meeting-only taxonomies/post types—
   both bugs silently broke Congress filtering depending on which modules were enabled
   or how the taxonomy slug was configured.

#### 1.4.6

 * Fix: Single Meeting Snapshot (JSON) import no longer creates a `meeting_file`
   record for files attached to panel participants — the meeting-snapshot ingestion
   path had no equivalent of the live API’s separate «Write/Upload File» step, so
   a panel member’s referenced files (visible in the pasted JSON) never got their
   own WordPress file post created. A metadata-only file record is now created for
   each panel-member file reference during import, matching how every other file
   location (meeting files, transcripts, meeting members, nominee panels) already
   behaves.
 * Fix: Amend Export / snapshot import silently dropped the meeting Start Date (
   both the ACF field and the `meeting_start` database column) for meetings with
   a title longer than 255 characters — most commonly nomination hearings that list
   every nominee’s full name and position, but also long Executive Session titles.
   The plugin’s internal `capigacr_meetingmeta.title` column was a `varchar(255)`,
   and the title was written in the same database statement as `meeting_start`; 
   under strict SQL mode (the modern MySQL/MariaDB default), a too-long title caused
   that entire statement — including the start date — to fail, with no error surfaced
   anywhere in the import results. The `title` column is now `TEXT` (matching the
   already-unbounded `agenda` column), removing the failure entirely. Existing sites
   are updated automatically via a database migration on the next admin page load.
 * Fix: Removed the Bootstrap `btn btn-sm btn-primary` (and sibling variant) classes
   from meeting-files and meeting-links card action buttons — buttons now carry 
   only the design-system `Button` class. The now-obsolete «File Button Style» (
   meeting-files) and «Link Button Style» (meeting-links) Elementor controls, and
   all their wiring, were removed.
 * Fix: Taxonomy fields (Congress, Meeting Type, etc.) now display correctly on 
   WordPress-source meeting edit screens — a slug format mismatch in `adjust_field_editability()`
   caused all taxonomy fields to be hidden regardless of the enabled taxonomies 
   setting.
 * Fix: Agenda items card and row layout — content now renders inside `.capigacr-
   widget-card` li elements. The `render_agenda_item` closure was emitting its own`
   <li>` wrapper, which when nested inside the template’s `<li class="capigacr-widget-
   card">` caused browsers to auto-close the outer li, producing empty card wrappers
   followed by bare li elements with the actual content.
 * Feature: Agenda Items widget — consolidated «List Indentation» and «List Numbering
   Styles» Elementor controls into a single «List Style Per Level» repeater. Each
   row now configures both numbering style and indentation for that level, supporting
   unlimited nesting depths.
 * Feature: Legislation widget — same «List Style Per Level» repeater added to match
   the Agenda Items widget. Removes the two static indent controls; indentation 
   now applies to amendments at any depth via inline margin-left, and list-style-
   type is wired to the outer ol.
 * Fix: Coast Guard Lists widget — «Preview» header field now renders HTML content(
   e.g. `<p>` tags) as formatted HTML instead of escaping it to literal text, in
   both card and row layout styles.
 * Fix: Filter Auto-Refresh on the Loop Filters widget is now permanently disabled—
   the toggle control was removed and the availability-computation path (which fired
   uncached /filters/counts REST calls with unbounded WP_Query + per-taxonomy term
   lookups) can no longer be enabled. Resolves site-wide slowdowns caused by frontend
   filter changes.
 * Feature: Button icon style controls (all widgets) and the Meeting Page Defaults
   Card/Row attachment icon sections gain a «Square Icon» toggle that forces the
   icon container to a square aspect ratio (width: 1em; box-sizing: content-box)
   matching its font-size. Opt-in — off by default, no change to existing pages.
 * Fix: Per-widget button label visibility can now override the page-wide default
   in both directions. The on/off «Hide Button Label» toggle is replaced by a three-
   state «Button Label» control (Default / Show Label / Hide Label) in the shared
   button style helper and the Meeting Page Defaults Card/Row attachment sections—
   setting «Show Label» on an individual widget now re-displays its label even when
   labels are hidden page-wide.
 * Fix: Corrected the «Button Label» visibility control (Default/Show/Hide) so Show
   and Hide actually take effect on the frontend — the prior fix used an Elementor
   pattern (condition-gated hidden helper controls) that never emitted CSS. Replaced
   with Elementor’s `selectors_dictionary` mechanism directly on the driver control.
 * Fix: Further corrected the Button Label visibility control’s CSS delivery — the
   prior fix’s selector template was a bare `{{VALUE}}` with no leading CSS property,
   which produced no output; reshaped to lead with `position:` matching the plugin’s
   other working selectors_dictionary controls (e.g. Icon Alignment).
 * Feature: New public REST endpoint `GET /meetings-calendar` returns published 
   meetings as a FullCalendar-shaped events feed (id/title/start/end/url), plus 
   a new Meeting Calendar Elementor widget that renders a self-hosted FullCalendar
   month grid fed by that endpoint — no CDN dependency, clicking an event navigates
   to the meeting page.
 * Fix: Meeting Calendar widget failed to render — the widget’s init script was 
   registered without `elementor-frontend` as a script dependency, and relied solely
   on Elementor’s `frontend/element_ready` hook, which is not reliably dispatched
   at a consistent point relative to widget script execution across Elementor versions/
   setups. The widget now initializes any `.capigacr-meeting-calendar` element already
   in the DOM via a direct scan on page load, with the Elementor hook kept as a 
   best-effort addition so the calendar also initializes correctly if added to the
   page later (editor live preview, popups, AJAX-loaded content).

#### 1.4.5

 * Fix: File embargo URL suppression — PHP now withholds file download URLs from
   HTML during embargo; JS fetches and injects the real URL via a new REST endpoint
   only after the embargo lifts, preventing URL leakage in page source.
 * Feature: New REST endpoint `GET /meeting/{id}/file-url/{file_id}` returns a file’s
   download URL after server-side embargo verification.
 * Fix: `filesEmbargoDateTime` is now sent as UTC ISO 8601 (with `Z` suffix) from
   the embargo-status API, eliminating browser-timezone misinterpretation when the
   visitor’s timezone differs from the WordPress site timezone.
 * Fix: `meeting_start` embargo fallback now correctly treats the stored value as
   UTC rather than source timezone, fixing incorrect embargo lift times when `filesEmbargoDateTime`
   is absent.
 * Fix: Embargo-checker.js now derives server time from the HTTP `Date` response
   header plus half-RTT latency, replacing `current_time`/`current_timestamp` body
   fields that go stale on CDN-cached responses.
 * Fix: `Cache-Control` on the embargo-status endpoint is now conditional — uses`
   api_cache_interval` from Live Video settings when configured, otherwise sends`
   no-store` headers (replaces hardcoded 5-minute cache).
 * Fix: `scheduleEmbargoRecheck` no longer triggers an infinite polling loop when
   the embargo is already lifted — returns early instead of immediately rechecking.
 * Fix: Embargo reveal now clears the inline `style="display:none"` set by PHP block
   templates in addition to removing the CSS class, so elements become visible after
   lift.
 * Fix: Embargo-checker now handles a null or absent `filesEmbargoDateTime` gracefully—
   treats it as immediately lifted and reveals any elements hidden on load.
 * Feature: Embargo-status API URL includes a predictable `_t` cache-bucket parameter
   aligned to the configured CDN interval, matching the live-meetings pattern.
 * Feature: `cacheInterval` and `cacheBucket` are injected into `capigacrEmbargoSettings`
   when a CDN cache interval is configured, enabling JS to compute matching cache-
   bucket values client-side.
 * Feature: ACF taxonomy select field for File Type replaces the default WordPress
   tag meta box on meeting file edit screens with a proper select-style dropdown.
 * Fix: `get_meeting_file_type_label()` now resolves the label via `wp_get_object_terms()`
   when a post ID is provided, giving more reliable results than slug-based term
   lookup.
 * Fix: Files uploaded via REST API are now registered as stubs in `local_overrides.
   files[]` so they appear in the hydrated snapshot on the front-end.
 * Fix: Proforma file type handler now checks `proforma-file-type` parameter before
   falling back to `type`.
 * Feature: Upcoming Hearings Query widget now includes a «No Upcoming» (count=0)
   option.
 * Fix: Embargoed file anchors now render as `role="button" aria-disabled="true"`
   without `href` during embargo; preview-render mode continues to expose the real
   URL.

#### 1.4.4

 * Feature: Single Meeting Snapshot (JSON) import — admins can now paste a full `{"
   meeting":{...}}` export snapshot into a textarea on the Meetings Import page 
   to create or update a meeting and all related participants, panels, and file 
   references in one action, at the same fidelity as the REST API.
 * Fix: `details.amend_type` object values in snapshot format are now correctly 
   normalized to scalar before taxonomy assignment, preventing a fatal `sanitize_title(
   array)` error on real-world snapshot imports.
 * Fix: Agenda Items block template now renders correctly.

#### 1.4.3

 * Fix: Coast Guard Lists widget now renders file links in both card and list layouts—
   files were previously only rendered when a ‚files‘ entry existed in the coast
   guard details repeater, which was never included by default.
 * Feature: Coast Guard Lists widget now has an «Enable File Links» toggle (default
   on) to control file rendering; removed ‚files‘ as a selectable field from the
   coast guard details repeater.
 * Fix: `?search=term` URL param now filters the meeting table correctly regardless
   of whether the Loop Filters widget has a search field configured.
 * Fix: Search Button widget (which appends `_wpnonce` to the URL) no longer returns
   zero results — duplicate title/content WHERE conditions from the native `s=` 
   search are no longer generated.
 * Fix: meetingmeta SQL date filter no longer applies to meetings table queries,
   preventing meetings with a null `meeting_start` from being excluded when a year
   filter is active.
 * Fix: phantom Elementor repeater entries (no `search_field_type`) are no longer
   treated as custom meta fields, allowing the early-return guard to fire correctly
   and preventing over-restrictive WHERE clauses.
 * Fix: Loop Filters form now preserves the active `search` param as a hidden input
   on submission, preventing the search term from being dropped when a filter is
   changed.
 * Fix: filter field options (year, committee, etc.) now show correct available 
   values when a search term is active — phantom field entries in `get_search_config_from_widgets()`
   are normalized to `title` so options sub-queries are not over-restricted.
 * Fix: Meeting Video widget now shows the video player iframe when `archive_stream_enabled`
   is YES — `meeting_id` is resolved via `get_the_ID()` so `get_field()` correctly
   reads the value from the meeting snapshot via `intercept_acf_load`.
 * Fix: `archive_stream_enabled` and `live_stream_enabled` admin saves via API update
   and proforma overwrite paths now write to `local_overrides` so the ACF load path
   sees the admin-set value instead of the snapshot value.

#### 1.4.1

 * Fix: preview pass 2 now works without requiring a proforma API token to be configured—
   internal render nonce is used for access control.
 * Fix: saving an empty permalink slug value now correctly falls back to the built-
   in default slug.

#### 1.4.0

 * Meeting Table Query Controls: added configurable «Query» repeater section to 
   Meeting Table widget with Taxonomy, Date, and Search row types.
 * Fixed taxonomy override: taxonomy rows constrain query results and suppress conflicting
   visitor filters with configurable AND/OR relation.
 * Search button and filter summary integration: search button widget emits loop
   filters nonce; filter summary displays active search term.
 * Participant public key flattening: flatten witness `public` array onto snapshot
   root and promote formatted HTML/text fields.
 * Schema-driven data layer: added Meeting Schema, Schema Traverser, Schema Hydrator,
   and Entity Writer for structured import/retrieval pipelines.
 * Meeting Files Modal: sidebar file management with attach/delete/upload via AJAX
   modal.
 * Granular capabilities: per-CPT capability_type with activation/deactivation role
   management.
 * Configurable permalink slugs: admin UI for customizing CPT and taxonomy URL slugs.
 * Pagination: disabled prev/next buttons at page boundaries with CSS and JS.
 * Archive streams: restored archive_stream_enabled toggle and added frontend iframe
   rendering.
 * Private meetings: conditionally include private post_status for users with read_private_posts
   capability.
 * Post title sync: sync post_title to meetingmeta title column on save.
 * Proforma improvements: gated upgrade behind allow-takeover setting, fixed status
   overwrite bug, added private meeting visibility.
 * File management: fixed file URL to use filesystem filename, added file_status
   tracking for API uploads, added Re-check Meeting Files utility.
 * Import tools: added Bulk Meetingmeta Update import type and Content Record date
   migration tool.
 * Removed featured images from meeting post type supports.
 * Fixed meeting_type fallback and subcommittee/committee_type taxonomy wiring.
 * Fixed Plugin Check errors for WordPress registry submission compliance.

#### 1.3.12

 * Switched to inline nonces throughout plugin, fixed preview API escaping, replaced‚
   ce‘ prefix in JavaScript handles.

#### 1.3.11

 * Fixed nonce validation and unsafe SQL call.

#### 1.3.10

 * Preview access: restrict preview meetings to Proforma auth or users who can edit;
   apply to all meeting queries and global post.

#### 1.3.9

 * Maintenance release.

#### 1.3.8

 * Fixed admin menu: use default menu positions all CPT menus (Meetings, Participants,
   Members) remain visible and avoid overwriting items.
 * Use values for slugs and prefixes from Meeting Settings.
 * Replaced remaining hardcoded taxonomy slugs with configurable slugs (meeting_type,
   meeting_status, privacy_type, subcommittee) in utilities and meetings table widget.
 * Proper nonce validation throughout plugin.

#### 1.3.7

 * Hardened database table rename migrations to prevent data loss when both old 
   and new tables exist.
 * Replaced hardcoded post types/taxonomies with dynamic lookups for configurability.
 * Adjusted /check API to return slugs only, treat trashed meetings as missing, 
   and untrash on republish.
 * Fixed recent meetings query placeholder ordering and a panels template syntax
   error.

#### 1.3.6

 * Addressed WordPress.org plugin review feedback: Ajax URLs from PHP only, external
   services documented in readme, no direct core loading or plugin-directory writes,
   nonces/capability checks and sanitization/escaping across handlers, unique prefixes
   for options/CPTs/taxonomies, prepared SQL, and consistent checkbox/settings persistence(
   e.g. enabled taxonomies, logging, embargo).
 * Log files and congress data now use the uploads directory. CPT/taxonomy slug 
   limits (20/32 chars) enforced in Setup with truncation and shorter defaults where
   needed. Generate Congress Terms uses the congress taxonomy slug from settings.

#### 1.3.5

 * Switched plugin slug/text domain to `creativengine-congressional-utilities` and
   aligned folder/handles for consistent localization.
 * Restored REST API authentication checks and added direct file access guards across
   template files.
 * Improved hardening with additional escaping and nonce validation in admin flows.
 * Standardized prefixed asset handles and refreshed enqueued CSS/JS for admin and
   Elementor widgets.

#### 1.3.4

 * Preview meetings now load members, participants, and files purely from snapshot
   data (no relational lookups) for accurate preview displays.
 * Data store falls back to snapshot files for preview posts and file deletion hooks
   skip previews to avoid removing published assets.
 * Minor stability updates around preview cleanup and file handling.

#### 1.3.3

 * Meeting Video widget: added configurable aspect ratios and consistent styling
   for all message states (upcoming, no live scheduled, no live video).
 * Meeting video messages now allow custom titles/bodies per state with shared styling.
 * Minor documentation updates.

#### 1.3.2

 * Fixed read-only field groups appearing incorrectly when taxonomy dropdowns change
 * Improved AJAX handling for field group loading
 * Added custom sort order for congress taxonomy dropdown (numerical descending)

#### 1.3.1

 * Initial release

## Meta

 *  Version **1.4.7**
 *  Last updated **2 Monaten ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.4.0 or higher **
 *  Tested up to **7.0.7**
 *  PHP version ** 7.4 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/creativengine-congressional-utilities/)
 * Tags
 * [congress](https://de-ch.wordpress.org/plugins/tags/congress/)[government](https://de-ch.wordpress.org/plugins/tags/government/)
   [meetings](https://de-ch.wordpress.org/plugins/tags/meetings/)
 *  [Advanced View](https://de-ch.wordpress.org/plugins/creativengine-congressional-utilities/advanced/)

## Ratings

Es wurden noch keine Rezensionen eingereicht.

[Your review](https://wordpress.org/support/plugin/creativengine-congressional-utilities/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/creativengine-congressional-utilities/reviews/)

## Contributors

 *   [ CreativEngine, Inc. ](https://profiles.wordpress.org/creativenginecorp/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/creativengine-congressional-utilities/)

## Donate

Would you like to support the advancement of this plugin?

 [ Donate to this plugin ](https://creativengine.com)