I’m messing around with a reservation system that meshes with the Events Calendar Pro calendar system we use. We’re not trying to get people to pay for anything and we have a few other simple things that we want to do that makes a lot of the paid plugins for reservations messy.
One of the things I wanted to make possible was for people to click on a link to delete their reservation for an event. We’re not talking nuclear secrets or money here so I think this will be reasonably safe.
Create a password type of thing
Let’s generate a random code using WP’s built in function wp_generate_password. I set this one to be 20 characters long and to have no fancy stuff that might mess up the URL.
//create code for deletion to put in gravity form function dlinq_registration_deleter( $value, $lead, $field, $form){ return wp_generate_password(20,false,false); }
Write that password to the form
So now that I have that function, I can use the gform_save_field action to trigger it. By appending _5_11, I’m specifying that this only happens with the form with ID 5 and on the field with ID 11.
Not bad for a few lines of code.
add_action( 'gform_save_field_value_5_11', 'dlinq_registration_deleter', 10, 4 );
Send it in the email
Since Gravity Forms lets us send emails with form variables, I can create the link pretty easily.
The shortcode below gets us the URL from the event where the registration occurred and merges in the password/unique string we generated.
{embed_url}?delete={deletecode:11}
Look for deletion requests
Now we need our event pages to look for URL parameters in the URL that say ‘delete’ and have a code match in the Gravity Forms field for the password. isset is a handy PHP function that won’t freak out if the parameter isn’t set. Then we’ve got some code to search for a matching entry in Gravity Forms using GFAPI::get_entries. If it finds a match, it deletes it. It may be that I just flag it as deleted or something less drastic . . . but it works.
function dlinq_check_to_delete(){ if( 'tribe_events' == get_post_type()){ if(isset($_GET["delete"])){ $passcode= $_GET["delete"]; $search_criteria = array( 'status' => 'active', 'field_filters' => array( 'mode' => 'any', array( 'key' => '11', 'value' => $passcode ) ) ); $entry = GFAPI::get_entries(5, $search_criteria); if(sizeof($entry)>0){ $entry_id = $entry[0]['id']; GFAPI::delete_entry( $entry_id );//maybe we don't want to delete this? } } } } add_action('wp_head','dlinq_check_to_delete');