Skip to content

Instantly share code, notes, and snippets.

@bjornjohansen
Last active June 8, 2021 19:09
Show Gist options
  • Select an option

  • Save bjornjohansen/2f62d8f0b902edc8b8043b7d1f908091 to your computer and use it in GitHub Desktop.

Select an option

Save bjornjohansen/2f62d8f0b902edc8b8043b7d1f908091 to your computer and use it in GitHub Desktop.

Revisions

  1. bjornjohansen revised this gist May 24, 2018. 1 changed file with 4 additions and 4 deletions.
    8 changes: 4 additions & 4 deletions gravityforms-privacyactions.php
    Original file line number Diff line number Diff line change
    @@ -4,7 +4,7 @@
    *
    * @package BJ\GravityForms\PrivacyActions
    * @author bjornjohansen
    * @version 0.1.0
    * @version 0.1.1
    * @license https://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU General Public License version 2 (GPLv2)
    */

    @@ -105,10 +105,10 @@ function bj_gravityforms_exporter( $email_address, $page = 1 ) {
    }

    /**
    * Register the Gravity Forms exporter.
    * Register the Gravity Forms eraser.
    *
    * @param array $exporters Current array of data exporters.
    * @return array The exporters.
    * @param array $erasers Current array of data erasers.
    * @return array The erasers.
    */
    function bj_register_gravityforms_eraser( $erasers ) {
    // Let us stay out of the way if an eraser already exists for Gravity Forms.
  2. bjornjohansen revised this gist May 24, 2018. 1 changed file with 7 additions and 4 deletions.
    11 changes: 7 additions & 4 deletions gravityforms-privacyactions.php
    Original file line number Diff line number Diff line change
    @@ -111,10 +111,13 @@ function bj_gravityforms_exporter( $email_address, $page = 1 ) {
    * @return array The exporters.
    */
    function bj_register_gravityforms_eraser( $erasers ) {
    $erasers['gravityforms'] = [
    'eraser_friendly_name' => __( 'Gravity Forms', 'gravityforms' ),
    'callback' => 'bj_gravityforms_eraser',
    ];
    // Let us stay out of the way if an eraser already exists for Gravity Forms.
    if ( ! array_key_exists( 'gravityforms', $erasers ) && class_exists( 'GFAPI' ) ) {
    $erasers['gravityforms'] = [
    'eraser_friendly_name' => __( 'Gravity Forms', 'gravityforms' ),
    'callback' => 'bj_gravityforms_eraser',
    ];
    }
    return $erasers;
    }

  3. bjornjohansen created this gist May 24, 2018.
    165 changes: 165 additions & 0 deletions gravityforms-privacyactions.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,165 @@
    <?php
    /**
    * Personal data exporter and eraser for Gravity Forms.
    *
    * @package BJ\GravityForms\PrivacyActions
    * @author bjornjohansen
    * @version 0.1.0
    * @license https://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU General Public License version 2 (GPLv2)
    */

    /**
    * Register the Gravity Forms exporter.
    *
    * @param array $exporters Current array of data exporters.
    * @return array The exporters.
    */
    function bj_register_gravityforms_exporter( $exporters ) {
    // Let us stay out of the way if an exporter already exists for Gravity Forms.
    if ( ! array_key_exists( 'gravityforms', $exporters ) && class_exists( 'GFAPI' ) ) {
    $exporters['gravityforms'] = array(
    'exporter_friendly_name' => __( 'Gravity Forms', 'gravityforms' ),
    'callback' => 'bj_gravityforms_exporter',
    );
    }
    return $exporters;
    }
    add_filter( 'wp_privacy_personal_data_exporters', 'bj_register_gravityforms_exporter', 10, 1 );

    /**
    * Personal data exporter for Gravity Forms callback.
    *
    * @param string $email_address The email address to the individual.
    * @param integer $page The exporter page.
    * @return array The return array with the data and the “done” status.
    */
    function bj_gravityforms_exporter( $email_address, $page = 1 ) {

    $export_items = [];

    $forms = GFAPI::get_forms();
    $form = $forms[ $page - 1 ];

    $search_criteria['field_filters'][] = [
    'value' => $email_address,
    ];
    $entries = GFAPI::get_entries( $form['id'], $search_criteria );

    foreach ( $entries as $entry ) {

    $data = [
    [
    'name' => __( 'Form', 'gravityforms' ),
    'value' => esc_html( $form['title'] ),
    ],
    ];

    if ( isset( $entry['source_url'] ) && strlen( $entry['source_url'] ) ) {
    $data[] = [
    'name' => __( 'Embed Url', 'gravityforms' ),
    'value' => esc_url( $entry['source_url'] ),
    ];
    }

    if ( isset( $entry['date_created'] ) && strlen( $entry['date_created'] ) ) {
    $data[] = [
    'name' => __( 'Submitted on', 'gravityforms' ),
    'value' => esc_html( $entry['date_created'] ),
    ];
    }

    if ( isset( $entry['ip'] ) && strlen( $entry['ip'] ) ) {
    $data[] = [
    'name' => __( 'User IP', 'gravityforms' ),
    'value' => esc_html( $entry['ip'] ),
    ];
    }

    if ( isset( $entry['user_agent'] ) && strlen( $entry['user_agent'] ) ) {
    $data[] = [
    'name' => __( 'User Agent', 'gravityforms' ),
    'value' => esc_html( $entry['user_agent'] ),
    ];
    }

    foreach ( $form['fields'] as $field ) {
    $data[] = [
    'name' => $field->label,
    'value' => esc_html( $field->get_value_export( $entry ) ),
    ];
    }

    $export_items[] = [
    'group_id' => 'gravityforms',
    'group_label' => __( 'Forms', 'gravityforms' ),
    'item_id' => 'gravityforms-' . $entry['id'],
    'data' => $data,
    ];

    }

    return [
    'data' => $export_items,
    'done' => count( $forms ) <= $page,
    ];
    }

    /**
    * Register the Gravity Forms exporter.
    *
    * @param array $exporters Current array of data exporters.
    * @return array The exporters.
    */
    function bj_register_gravityforms_eraser( $erasers ) {
    $erasers['gravityforms'] = [
    'eraser_friendly_name' => __( 'Gravity Forms', 'gravityforms' ),
    'callback' => 'bj_gravityforms_eraser',
    ];
    return $erasers;
    }

    add_filter( 'wp_privacy_personal_data_erasers', 'bj_register_gravityforms_eraser', 10, 1 );

    /**
    * Personal data eraser for Gravity Forms callback.
    *
    * @param string $email_address The email address to the individual.
    * @param integer $page The eraser page.
    * @return array The return status array.
    */
    function bj_gravityforms_eraser( $email_address, $page = 1 ) {

    $items_removed = false;
    $items_retained = false;
    $messages = [];

    $forms = GFAPI::get_forms();
    $form = $forms[ $page - 1 ];

    $search_criteria['field_filters'][] = [
    'value' => $email_address,
    ];
    $entries = GFAPI::get_entries( $form['id'], $search_criteria );

    foreach ( $entries as $entry ) {

    $delete_res = GFAPI::delete_entry( $entry['id'] );

    if ( true === $delete_res ) {
    $items_removed = true;
    } elseif ( is_wp_error( $delete_res ) ) {
    $items_retained = true;
    $messages[] = $delete_res->get_error_message();
    } else {
    $items_retained = true;
    }
    }

    return [
    'items_removed' => $items_removed,
    'items_retained' => $items_retained,
    'messages' => $messages,
    'done' => count( $forms ) <= $page,
    ];

    }