Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thefrosty/31c07ddf2e52532e48e7 to your computer and use it in GitHub Desktop.
Save thefrosty/31c07ddf2e52532e48e7 to your computer and use it in GitHub Desktop.
/**
* Validate a Gravity Forms license submission against EDD remote validation
*
* In Gravity Forms, for the text field you want to use as the license key entry,
* go to Advanced tab, check the "Allow field to be populated dynamically" checkbox,
* then enter the value as `edd-{download_id}`, where {download_id} is the, you guessed
* it, EDD Download ID.
*
* @param array $is_valid_and_form_array Gravity Forms passes an array with two keys: `is_valid` (boolean) and `form` (Gravity Forms form array)
* @return array Same format as incoming.
* @ref https://gist.github.com/zackkatz/f881fd7e221ca3dd6eec
*/
function extendd_validate_edd_license( $is_valid_and_form_array ) {
extract( $is_valid_and_form_array );
$edd_software_licensing = class_exists( 'EDD_Software_Licensing' ) ? edd_software_licensing() : false;
foreach ( $form['fields'] as &$field ) {
if ( strpos( $field['cssClass'], 'edd-license' ) !== false && $field['id'] == 6 ) {
$download_title = esc_attr( $_POST['input_4'] );
$download = get_page_by_title( $download_title, null, $post_type = 'download' );
$download_id = $download->ID;
// Get the submitted value from the posted data
$license = esc_attr( $_POST['input_' . $field['id'] ] );
if ( empty( $license ) && !empty( $field['isRequired'] ) ) {
$field['validation_message'] = __( 'Your license key is required.' );
break;
}
// Lets make sure the license key is part of the download selected
if ( $edd_software_licensing ) {
$temp_download_id = $edd_software_licensing->get_download_by_license( $license );
$key_matches_plugin = $edd_software_licensing->check_item_name( $temp_download_id, $download_title );
if ( !$key_matches_plugin ) {
$is_valid = false;
$field['failed_validation'] = true;
$field['validation_message'] = sprintf( 'Invalid license key for selected plugin "%s".', $download_title );
break;
}
}
// data to send in our API request
$api_params = array(
'edd_action' => 'check_license',
'license' => $license,
'item_name' => urlencode( $download_title ),
);
// Call the custom API.
$response = wp_remote_get( add_query_arg( $api_params, 'https://extendd.com' ), array( 'timeout' => 25, 'sslverify' => false ) );
// make sure the response came back okay
if ( is_wp_error( $response ) ) {
continue;
}
$license_data = json_decode( wp_remote_retrieve_body( $response ) );
// Invalid response
if ( !is_object( $license_data ) ) {
continue;
}
// The license data
switch( $license_data->license ) {
// Licenses are invalid if they're invalid or expired.
case 'invalid':
$is_valid = false;
$field['failed_validation'] = true;
$field['validation_message'] = __( 'The license you entered is invalid.' );
break;
case 'expired':
$is_valid = false;
$field['failed_validation'] = true;
$field['validation_message'] = sprintf( 'The license you entered expired on %s. Please <a href="%s">login</a> and <a href="%s">renew your license</a> for continued updates and support.',
date( 'F j, Y', strtotime( $license_data->expires ) ),
esc_url( site_url( '/my-account/' ) ),
esc_url( add_query_arg( array( 'edd_license_key' => $license, 'download_id' => $download_id ), site_url( '/checkout/' ) ) )
);
break;
}
}
}
return array( "is_valid" => $is_valid, "form" => $form );
}
add_filter( 'gform_validation', 'extendd_validate_edd_license' );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment