Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/chomachomachoma/entrydesk/archive/refs/heads/main.zipFrontend Entry Display & User Portal for Gravity Forms.
EntryDesk lifts Gravity Forms entries out of wp-admin and puts them on the
front end: searchable/sortable table and grid views, single-entry
detail pages, and a logged-in user portal where people can see and edit
their own submissions — no custom code required.
Built as a display/query layer on top of the Gravity Forms API (GFAPI), with a
Vue 3 admin view-builder and a React frontend renderer.
Requirements
| WordPress | 6.8+ |
| PHP | 8.3+ |
| Gravity Forms | 2.10+ (active) |
Installation
- Copy the
entrydesk/folder intowp-content/plugins/. - Activate EntryDesk in Plugins. Activation creates the two custom
tables, registers the
entrydesk_manage_viewscapability, and flushes rewrite rules for single-entry URLs. - Go to Forms ▸ EntryDesk Views to build your first view.
The plugin ships with its built JS bundles committed under assets/dist/, so it
installs and runs as a plain WordPress plugin with no build step.
Shortcodes
| Shortcode | Purpose |
|---|---|
[entrydesk_view id="N"] |
Render view N (table or grid) with search / filter / sort / pagination. |
[entrydesk_portal] |
Show the logged-in user's own entries with edit links. |
Single-entry pages
Every entry gets a pretty URL:
/entrydesk-entry/{entry_id}
served via template_include (theme-overridable at
your-theme/entrydesk/single-entry.php). Access is permission-checked — public
views expose their entries publicly; otherwise the viewer must own the entry or
hold entrydesk_manage_views.
REST API — namespace entrydesk/v1
| Method | Route | Permission |
|---|---|---|
GET |
/views/{id} |
Public for public views, else cap/role gated. |
GET |
/views/{id}/entries |
Same as above. Supports search, filter, orderby, order, page, per_page. |
POST |
/views |
Requires entrydesk_manage_views. |
GET |
/entries/{id} |
Ownership-gated (owner or entrydesk_manage_views). |
POST |
/entries/{id} |
Ownership-gated — portal edit. |
Writes require a valid X-WP-Nonce (wp_rest). A parallel
wp_ajax(_nopriv_)entrydesk_query endpoint provides a no-JS/legacy fallback for
the query surface.
Capabilities
entrydesk_manage_views — granted to administrator on activation and mapped
through manage_options so any admin passes.
Architecture
Browser ─shortcode page→ SSR skeleton (ViewRenderer, PHP)
│ mounts React app
│ fetch /wp-json/entrydesk/v1/views/{id}/entries?…
▼
React renderer ◀─JSON─ RestController → EntryQuery → index table (fast path)
└→ GFAPI::get_entries (source of truth)
Admin: Forms ▸ EntryDesk Views → Vue builder → REST → ViewRepository → gf_entrydesk_views
GF submit/update/status → EntryIndex sync → gf_entrydesk_view_entries (search index)
- Views are a CPT (
entrydesk_view) + a config row (gf_entrydesk_views). - The index table is a read accelerator;
GFAPIis the source of truth. If the index is missing/stale,EntryQueryfalls back toGFAPI::get_entries(). Rebuild it withwp entrydesk reindexor the admin "Rebuild index" button.
Custom tables
{prefix}gf_entrydesk_views— view configurations (JSONconfig).{prefix}gf_entrydesk_view_entries— flattened search index keyed by(form_id, entry_id), FULLTEXT onsearch_text(degrades toLIKE).
Development
Source lives in assets/src/ (Vue admin, React frontend). The committed bundles
in assets/dist/ are what actually load; a Vite config is provided for
rebuilding.
composer install # fetches the Freemius licensing SDK into vendor/
npm ci && npm run build # rebuild assets/dist from assets/src
bash tests/lint.sh # php -l over src/ + templates/
bash tests/smoke-activate.sh
vendor/ is git-ignored and rebuilt by the release workflow; a fallback
autoloader still resolves EntryDesk's own classes if vendor/ is absent, so the
plugin loads for local development without the Freemius licensing layer.
Uninstall
Deleting the plugin drops both tables, deletes the options, removes the
capability, and deletes all entrydesk_view CPT posts. Because EntryDesk is
distributed through Freemius (which owns the uninstall event and rejects plugins
that ship uninstall.php), this cleanup runs from the Freemius after_uninstall
hook — entrydesk_fs_uninstall_cleanup() in entrydesk.php.
Distribution (Freemius)
EntryDesk is distributed via Freemius as a freemium
product (free base + a paid Pro plan), configured in ent_fs() in
entrydesk.php (product 34118). A GitHub Release
(.github/workflows/deploy-freemius.yml) builds a production zip and uploads it
as a pending release; promote it to released in the Freemius dashboard. The
workflow needs three repo secrets: FREEMIUS_PUBLIC_KEY, FREEMIUS_DEV_ID,
FREEMIUS_SECRET_KEY.
License
GPL-2.0-or-later.
Releases
1 release.
These releases are tags only. The author does not attach a packaged zip, so there are no download counts to report.