Commit 604d557d authored by KR Moorhouse's avatar KR Moorhouse Committed by GitHub

Merge pull request #3591 from wpninjas/anonymize-data

Anonymize data
parents ee2d6021 76ec27f7
/**
* When we init a save action, listen for form changes
*
* @package Ninja Forms builder
* @subpackage Main App
* @copyright (c) 2017 WP Ninjas
* @since 3.1.7
*/
define( [], function( settingCollection ) {
var controller = Marionette.Object.extend( {
initialize: function() {
this.listenTo( nfRadio.channel( 'actions-save' ), 'init:actionModel', this.initSave );
},
/**
* Set listeners up to listen for add/delete fields for Save action
*/
initSave: function( actionModel ) {
this.model = actionModel;
/*
* When we init a save action model, register a listener for new
* fields
*/
this.listenTo( Backbone.Radio.channel( 'fields' ), 'add:field',
this.checkFieldAdded );
/*
* When we init a save action model, register a listener for deleted
* fields
*/
this.listenTo( Backbone.Radio.channel( 'fields' ), 'delete:field',
this.checkFieldDeleted );
},
/**
* When a save action is init'd, check to see if a new field added
* is an email and decide if it needs to be the 'submitter_email'
* for privacy regulation functionality
*
* @param {backbone.model} actionModel
* @return {void}
*/
checkFieldAdded: function( newFieldModel ) {
if( 'email' == newFieldModel.get( 'type' ) ) {
var submitter_email = this.model.get('submitter_email');
if( '' === submitter_email ) {
this.model.set( 'submitter_email', newFieldModel.get( 'key' ) );
}
}
},
/**
* When a save action is init'd, check to see if a field that has been
* deleted is an email and rearrance the submitter email setting
* for privacy regulation functionality
*
* @param {backbone.model} actionModel
* @return {void}
*/
checkFieldDeleted: function( fieldModel ) {
var submitter_email = this.model.get( 'submitter_email' );
if( submitter_email == fieldModel.get( 'key' ) ) {
this.model.set( 'submitter_email', '' );
}
},
});
return controller;
} );
\ No newline at end of file
......@@ -101,6 +101,7 @@ define(
'controllers/actions/collectPaymentCalculations',
'controllers/actions/collectPaymentFixed',
'controllers/actions/collectPayment',
'controllers/actions/save',
/*
* TODO: Settings domain controllers
......@@ -205,6 +206,7 @@ define(
ActionCollectPaymentCalculations,
ActionCollectPaymentFixed,
ActionCollectPayment,
ActionSave,
/*
* TODO: Settings domain controllers
......@@ -298,6 +300,7 @@ define(
new ActionDeleteFieldListener();
new ActionCollectPaymentCalculations();
new ActionCollectPayment();
new ActionSave();
new ActionTypes();
new ActionData();
new ActionSettings();
......
......@@ -302,6 +302,59 @@ define( ['views/app/drawer/mergeTagsContent', 'views/app/drawer/settingError'],
return helpTextWrapper.innerHTML;
},
/*
* Render a select element with only the email fields on the
* form
*/
renderEmailFieldOptions: function() {
var fields = nfRadio.channel( 'fields' ).request( 'get:collection' );
initialOption = document.createElement( 'option' );
initialOption.value = '';
initialOption.label = '--';
initialOption.innerHTML = '--';
var select_value = '';
var select = document.createElement( 'select' );
select.classList.add( 'setting' );
select.setAttribute( 'data-id', 'my_seledt' );
select.appendChild( initialOption );
var index = 0;
var that = this;
fields.each( function( field ) {
// Check for the field type in our lookup array and...
if( 'email' != field.get( 'type' ) ) {
// Return if the type is in our lookup array.
return '';
}
var option = document.createElement( 'option' );
option.value = field.get( 'key' );
option.innerHTML = field.get( 'label' );
option.label = field.get( 'label' );
if( that.value === field.get( 'key' ) ) {
option.setAttribute( 'selected', 'selected' );
}
select.appendChild( option );
index = index + 1;
});
label = document.createElement( 'label' );
label.classList.add( 'nf-select' );
label.appendChild( select );
// Select Lists need an empty '<div></div>' for styling purposes.
emptyContainer = document.createElement( 'div' );
label.appendChild( emptyContainer );
// The template requires a string.
return label.innerHTML;
},
renderMergeTags: function() {
if ( this.use_merge_tags && ! this.hide_merge_tags ) {
return '<span class="dashicons dashicons-list-view merge-tags"></span>';
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
File mode changed from 100755 to 100644
File mode changed from 100644 to 100755
......@@ -29,6 +29,7 @@ abstract class NF_Abstracts_UserInfo extends NF_Fields_Textbox
'help',
'description',
'custom_name_attribute',
'personally_identifiable',
'disable_browser_autocomplete' )
);
......
......@@ -81,6 +81,12 @@ final class NF_Actions_DeleteDataRequest extends NF_Abstracts_Action
*/
if( ! $request_id instanceof WP_Error ) {
// send the request if it's not an error.
// to anonymize or not to anonymize, that is the question
add_post_meta( $request_id,
'nf_anonymize_data',
$action_settings[ 'anonymize' ] );
wp_send_user_request( $request_id );
}
......
This diff is collapsed.
......@@ -21,4 +21,11 @@ return apply_filters( 'ninja_forms_action_deletedatarequest_settings', array(
'width' => 'one-half',
'use_merge_tags' => true,
),
'anonymize' => array(
'name' => 'anonymize',
'type' => 'toggle',
'group' => 'advanced',
'label' => __( 'Anonymize Data', 'ninja-forms' ),
'width' => 'full',
),
) );
\ No newline at end of file
......@@ -5,6 +5,16 @@ return apply_filters( 'ninja_forms_action_email_settings', array(
/*
* To
*/
'submitter_email' => array(
'name' => 'submitter_email',
'type' => 'email-select',
'options' => array(),
'group' => 'primary',
'label' => __( 'Designated Submitter\'s Email Address', 'ninja-forms' ),
'value' => '',
'help' => __( 'The email address used in this field will be allowed to '
. 'make data export and delete requests on behalf of their form submission.', 'ninja-forms' ),
),
'fields_save_toggle' => array(
'name' => 'fields-save-toggle',
......
......@@ -653,6 +653,16 @@ return apply_filters( 'ninja_forms_field_settings', array(
'help' => __( 'This column in the submissions table will sort by number.', 'ninja-forms' ),
),
'personally_identifiable' => array(
'name' => 'personally_identifiable',
'type' => 'toggle',
'group' => 'advanced',
'label' => __( 'This Field Is Personally Identifiable Data', 'ninja-forms' ),
'width' => 'full',
'value' => '',
'help' => __( 'This option helps with privacy regulation compliance', 'ninja-forms' ),
),
/*
|--------------------------------------------------------------------------
| Display Settings
......
......@@ -25,5 +25,6 @@ class NF_Fields_Address extends NF_Fields_Textbox
$this->_nicename = __( 'Address', 'ninja-forms' );
$this->_settings[ 'custom_name_attribute' ][ 'value' ] = 'address';
$this->_settings[ 'personally_identifiable' ][ 'value' ] = '1';
}
}
......@@ -23,5 +23,6 @@ class NF_Fields_Address2 extends NF_Fields_Textbox
$this->_nicename = __( 'Address 2', 'ninja-forms' );
$this->_settings[ 'custom_name_attribute' ][ 'value' ] = 'address';
$this->_settings[ 'personally_identifiable' ][ 'value' ] = '1';
}
}
......@@ -19,7 +19,7 @@ class NF_Fields_Email extends NF_Abstracts_UserInfo
protected $_test_value = 'foo@bar.dev';
protected $_settings_all_fields = array( 'custom_name_attribute' );
protected $_settings_all_fields = array( 'custom_name_attribute', 'personally_identifiable' );
public function __construct()
{
......@@ -28,6 +28,7 @@ class NF_Fields_Email extends NF_Abstracts_UserInfo
$this->_nicename = __( 'Email', 'ninja-forms' );
$this->_settings[ 'custom_name_attribute' ][ 'value' ] = 'email';
$this->_settings[ 'personally_identifiable' ][ 'value' ] = '1';
}
......
......@@ -25,6 +25,7 @@ class NF_Fields_FirstName extends NF_Abstracts_UserInfo
$this->_nicename = __( 'First Name', 'ninja-forms' );
$this->_settings[ 'custom_name_attribute' ][ 'value' ] = 'fname';
$this->_settings[ 'personally_identifiable' ][ 'value' ] = '1';
}
public function filter_default_value( $default_value, $field_class, $settings )
......
......@@ -25,6 +25,7 @@ class NF_Fields_LastName extends NF_Abstracts_UserInfo
$this->_nicename = __( 'Last Name', 'ninja-forms' );
$this->_settings[ 'custom_name_attribute' ][ 'value' ] = 'lname';
$this->_settings[ 'personally_identifiable' ][ 'value' ] = '1';
}
public function filter_default_value( $default_value, $field_class, $settings )
......
......@@ -24,5 +24,6 @@ class NF_Fields_Phone extends NF_Fields_Textbox
$this->_nicename = __( 'Phone', 'ninja-forms' );
$this->_settings[ 'custom_name_attribute' ][ 'value' ] = 'phone';
$this->_settings[ 'personally_identifiable' ][ 'value' ] = '1';
}
}
......@@ -19,7 +19,13 @@ class NF_Fields_Textbox extends NF_Abstracts_Input
protected $_test_value = 'Lorem ipsum';
protected $_settings = array( 'disable_browser_autocomplete', 'mask', 'custom_mask', 'custom_name_attribute' );
protected $_settings = array(
'disable_browser_autocomplete',
'mask',
'custom_mask',
'custom_name_attribute',
'personally_identifiable'
);
public function __construct()
{
......
......@@ -501,6 +501,13 @@ Label Three, value-three, 3
</label>
</script>
<script id="tmpl-nf-edit-setting-email-select" type="text/template">
<label for="{{{ data.name }}}" class="nf-select">{{{ data.label }}} {{{ data.renderTooltip() }}}
{{{ data.renderEmailFieldOptions() }}}
<div></div>
</label>
</script>
<script id="tmpl-nf-edit-setting-field-select" type="text/template">
<label for="{{{ data.name }}}" class="nf-select">{{{ data.label }}} {{{ data.renderTooltip() }}}
<select id="{{{ data.name }}}" class="setting">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment