WP Manifestindependent plugin directory
manifest / forms / rs-gf-entry-archives

RS Entry Archives for Gravity Forms WP Registry grade C-. High-severity findings · 1 findingWP RegistryHigh-severity findings · 1 findingOpen the reportC-

[WordPress Plugin] Adds the ability to move Gravity Form entries to an archive, hiding those entries from the regular view.

★ 1stars
27release downloads
≈10active sites
v1.4.3latest · 2 years ago

Install

Download RS-GF-Entry-Archives.zip From the v1.4.3 release on GitHub, Jul 11, 2024

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

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/radgh/rs-gf-entry-archives/releases/download/v1.4.3/RS-GF-Entry-Archives.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

RS Entry Archives for Gravity Forms (WordPress Plugin)

This plugin adds the ability to archive Gravity Forms entries, which are hidden from the default entry view.

Description

This plugin allows you to mark entries as archived, similar to how you would mark them as read or unread. Archived entries only show under the Entries list when you select the "Archived" filter.

Here you can see the archive functionality from the Entry list screen:

  1. Screenshot showing the Archive link in the row actions below the first column.
  2. Screenshot the message confirming the entry was archived.
  3. Screenshot showing the updated post count for each filter, the newly archived entry changed the archived entry count from 7 to 8.

Screenshots

On the entry list screen, a filter for "Archived" will appear allowing you to view the archived entries. Screenshot showing the default filters, as well as the "Archived" filter with 41 entries in this example.

On the entry list, an "Archive" or "Unarchive" link will appear next to the "Spam" or "Trash" links. Screenshot showing the Archive link in the row actions below the first column.

When exporting entries, you can use conditional logic to get only archived or unarchived entries, or both. Screenshot of conditional logic fields from the export screen. The "Archive Status" field is selected.

A message appears to indicate when an entry has been archived. Screenshot the message confirming the entry was archived.

Changelog

1.4.3

  • Added the filter rs_entry_archives/show_archived_entries, if set to true, the entries displayed on the current page will show archived entries instead of active ones.

1.4.2

  • Moved separator before archive link

1.4.1

  • Added Git Updater support
  • Updated Readme

1.2.0

  • Added to GitHub

1.1.0

  • First release

Releases

3 releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
v1.4.3 latest
Jul 11, 2024 2 years ago
RS-GF-Entry-Archives.zip
12
Jul 2, 2024 2 years ago
RS-GF-Entry-Archives.zip
8
May 9, 2024 2 years ago
RS-GF-Entry-Archives.zip
7

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

C- grade

Security

RS Entry Archives for Gravity Forms 1.4.3 · audited by WP Registry

High-severity findings.

1 high
Audited release
1.4.3
Findings
1
Worst severity
high
Content hash
b9a1a3adce1d1d682e9517ab…

Findings

  • high Unauthenticated Gravity Forms entry archive/unarchive via admin_init

    missing_auth

    RS_Entry_Archives_Form hooks handle_archive_action to both admin_init and wp_ajax_rsea_archive. The handler reads $_GET['rsea_archive'] and $_GET['rsea_entry_id'] (cast to int), then calls archive_entry() or unarchive_entry() with no is_user_logged_in, current_user_can, or nonce check. archive_entry() is GFAPI::update_entry_property($id, 'status', 'archived'); unarchive_entry() always writes status 'active', so a request with rsea_archive=0 also restores spam and trash entries. GFAPI::update_entry_property() has no capability gate (only a submissions-block check, then $wpdb->update) and fires gform_update_status, which Gravity Forms feed add-ons use to re-process feeds on spam→active and which can create a WordPress post from the entry. admin_init runs on wp-admin/admin-ajax.php and wp-admin/admin-post.php before any authentication, so an unauthenticated GET such as /wp-admin/admin-ajax.php?action=heartbeat&rsea_archive=1&rsea_entry_id=1 (or rsea_archive=0) is sufficient; DOING_AJAX then causes wp_send_json_success and exit. A nonce named rsea-nonce is localized into admin JS but never attached to the GET and never verified. Logged-in Subscribers can hit the same path via wp_ajax_rsea_archive or any wp-admin page. Impact is integrity of every Gravity Forms entry (hide submissions from the default Active list, or un-spam/un-trash and potentially trigger feeds/post-creation), not RCE or a frontend XSS sink.

    classes/form.php:17-18,148-170,643-657

    Recommendation

    Remove the admin_init hook; keep a single wp_ajax_rsea_archive (and a matching admin-post handler only if a non-AJAX GET is still required). In the handler, require a logged-in user, verify the rsea-nonce that is already localized (check_ajax_referer / wp_verify_nonce), and require Gravity Forms' entry-edit capability (e.g. GFCommon::current_user_can_any('gravityforms_edit_entries') plus GFAPI::get_entry() success). Refuse to unarchive unless the current status is archived; never force-set spam/trash to active. Send the nonce from admin-general.js with the AJAX GET/POST. Prefer wp_nonce_url() on the row-action links if a non-AJAX fallback remains.

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.