requires_scripts( $form, $is_ajax ) ) { $min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG || isset( $_GET['gform_debug'] ) ? '' : '.min'; wp_register_script( 'abnlookup-script', plugins_url( "/js/abnlookup-script{$min}.js", __FILE__ ), array( 'jquery' ) ); // Localize the script with new data $this->localize_scripts( $form, $is_ajax ); } if ( $this->requires_styles( $form, $is_ajax ) ) { $min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG || isset( $_GET['gform_debug'] ) ? '' : '.min'; wp_enqueue_style( 'abnlookup-style', plugins_url( "/css/abnlookup-style{$min}.css", __FILE__ ) ); } } // END datepicker_js public function requires_scripts( $form, $is_ajax ) { if ( is_admin() && defined( 'DOING_AJAX' ) && DOING_AJAX && ! GFCommon::is_form_editor() && is_array( $form ) ) { foreach ( $form['fields'] as $field ) { $field_type = $field->type; if ( 'text' == $field_type && array_key_exists( 'enable_abnlookup', $field ) && true == $field['enable_abnlookup'] ) { return true; } elseif ( 'text' == $field_type && array_key_exists( 'abnlookup_results_enable', $field ) && '' !== $field['abnlookup_results_enable'] && array_key_exists( 'abnlookup_results', $field) && '' !== $field['abnlookup_results'] ) { return true; } elseif ( 'radio' == $field_type && array_key_exists( 'abnlookup_enable_gst', $field ) && '' !== $field['abnlookup_enable_gst'] ) { return true; } } } return false; } // END requires_scripts public function requires_styles( $form, $is_ajax ) { $abnlookup_options = ITSG_GF_AbnLookup::get_options(); if ( is_admin() && defined( 'DOING_AJAX' ) && DOING_AJAX && ! GFCommon::is_form_editor() && is_array( $form ) ) { foreach ( $form['fields'] as $field ) { if ( ITSG_GF_AbnLookup_Fields::is_abnlookup_field( $field ) ) { if ( true == $abnlookup_options['includecss'] ) { return true; } } } } return false; } // END requires_scripts function localize_scripts( $form, $is_ajax ) { // Localize the script with new data $abnlookup_options = ITSG_GF_AbnLookup::get_options(); $abnlookup_fields = array(); if ( is_array( $form['fields'] ) ) { foreach ( $form['fields'] as $field ) { $is_abnlookup_field = ITSG_GF_AbnLookup_Fields::is_abnlookup_field( $field ); if ( 'abn' == $is_abnlookup_field ) { $field_id = $field['id']; $field_validate_abnlookup = $field->field_validate_abnlookup; $abnlookup_fields[ $field_id ]['validate'] = $field_validate_abnlookup; } } } $settings_array = array( 'form_id' => $form['id'], 'abnlookup_fields' => $abnlookup_fields, 'ajax_url' => admin_url( 'admin-ajax.php' ), 'validation_message_loading' => strip_tags( $abnlookup_options['validation_message_loading'], '' ), 'validation_message_not_valid' => strip_tags( $abnlookup_options['validation_message_not_valid'], '' ), 'validation_message_error_communicating' => strip_tags( $abnlookup_options['validation_message_error_communicating'], '' ), 'validation_message_11_char' => strip_tags($abnlookup_options['validation_message_11_char'], '' ), 'text_checking' => esc_js( __( 'Checking', 'abn-lookup-for-gravity-forms') ), 'text_check_abn' => esc_js( __( 'Check ABN', 'abn-lookup-for-gravity-forms') ), ); wp_localize_script( 'abnlookup-script', 'gf_abnlookup_settings', $settings_array ); // Enqueued script with localized data. wp_enqueue_script( 'abnlookup-script' ); } // END localize_scripts /** * END: patch to allow JS and CSS to load when loading forms through wp-ajax requests * */ /* * This is where server side checks of the fields are performed. * - checks for any ABN Lookup linked fields and sets their values * - ensures 'fake' values are not passed by users on the client side */ function check_field_values( $form ) { if ( is_array( $form ) || is_object( $form ) ) { // first we need to get the ABN number for the applicable GST field and get the ABN results foreach( $form['fields'] as &$field ) { if ( 'abn' == self::is_abnlookup_field( $field ) ) { $value = rgpost( "input_{$field['id']}" ); $is_hidden = RGFormsModel::is_field_hidden( $form, $field, array() ); $numbersOnly = preg_replace( "/[^0-9]/","",$value ); $abn_details = ITSG_GF_AbnLookup::do_abnlookup( $numbersOnly ); $field_values[$field['id']] = $abn_details; $field_hidden[$field['id']] = $is_hidden; } } // now we check for linked fields and set their post value foreach( $form['fields'] as &$field ) { $value = rgpost( "input_{$field['id']}" ); if ( 'abnlookup_entity_gst' == self::is_abnlookup_field( $field ) ) { $keys = array_keys( $field_values ); foreach( $keys as $key ) { if ( $key == $field['field_link_abnlookup'] ) { $abn_details = $field_values[ $key ]; if ( $field_hidden[$key] ) { $_POST["input_{$field['id']}"] = ''; } elseif ( isset( $abn_details->businessEntity ) ) { $registered_gst = isset( $abn_details->businessEntity->goodsAndServicesTax ) ? ( '0001-01-01' == $abn_details->businessEntity->goodsAndServicesTax->effectiveTo ) : false; $text_yes = __( 'Yes', 'abn-lookup-for-gravity-forms' ); $text_no = __( 'No', 'abn-lookup-for-gravity-forms' ); $value_yes = sanitize_text_field( apply_filters( 'itsg_gf_abnlookup_gst_value_yes', $text_yes, $form['id'] ) ); $value_no = sanitize_text_field( apply_filters( 'itsg_gf_abnlookup_gst_value_no', $text_no, $form['id'] ) ); if ( $registered_gst ) { $_POST["input_{$field['id']}"] = $value_yes; } else { $_POST["input_{$field['id']}"] = $value_no; } } else { $_POST["input_{$field['id']}"] = ''; } } } } elseif ( 'abnlookup_entity_type' == self::is_abnlookup_field( $field ) ) { $keys = array_keys( $field_values ); foreach( $keys as $key ) { if ( $key == $field['field_link_abnlookup'] ) { $abn_details = $field_values[$key]; if ( $field_hidden[$key] ) { $_POST["input_{$field['id']}"] = ''; } elseif ( isset($abn_details->businessEntity ) ) { $entityType = isset( $abn_details->businessEntity->entityType->entityDescription ) ? $abn_details->businessEntity->entityType->entityDescription : ''; $_POST["input_{$field['id']}"] = $entityType; } } } } elseif ( 'abnlookup_entity_name' == self::is_abnlookup_field( $field ) ) { $keys = array_keys( $field_values ); foreach( $keys as $key ) { if ( $key == $field['field_link_abnlookup'] ) { $abn_details = $field_values[$key]; if ( $field_hidden[$key] ) { $_POST["input_{$field['id']}"] = ''; } elseif ( isset( $abn_details->businessEntity ) ) { $entityTypeCode = $abn_details->businessEntity->entityType->entityTypeCode; if ( 'IND' == $entityTypeCode ) { $familyName = is_string( $abn_details->businessEntity->legalName->familyName ) ? $abn_details->businessEntity->legalName->familyName : ''; $givenName = is_string( $abn_details->businessEntity->legalName->givenName ) ? $abn_details->businessEntity->legalName->givenName : ''; $otherGivenName = is_string( $abn_details->businessEntity->legalName->otherGivenName ) ? $abn_details->businessEntity->legalName->otherGivenName : ''; $entityName = $familyName . ", " . $givenName . " " . $otherGivenName; } else { $entityName = $abn_details->businessEntity->mainName->organisationName; } $_POST["input_{$field['id']}"] = $entityName; } } } } elseif ( 'abnlookup_entity_status' == self::is_abnlookup_field( $field ) ) { $keys = array_keys( $field_values ); foreach( $keys as $key ) { if ( $key == $field['field_link_abnlookup'] ) { $abn_details = $field_values[$key]; if ( $field_hidden[$key] ) { $_POST["input_{$field['id']}"] = ''; } elseif ( isset($abn_details->businessEntity ) ) { $entityStatus = isset($abn_details->businessEntity->entityStatus->entityStatusCode) ? $abn_details->businessEntity->entityStatus->entityStatusCode : ''; $_POST["input_{$field['id']}"] = $entityStatus; } } } } elseif ( 'abnlookup_entity_postcode' == self::is_abnlookup_field( $field ) ) { $keys = array_keys( $field_values ); foreach( $keys as $key ) { if ( $key == $field['field_link_abnlookup'] ) { $abn_details = $field_values[$key]; if ( $field_hidden[$key] ) { $_POST["input_{$field['id']}"] = ''; } elseif ( isset($abn_details->businessEntity ) ) { $entityPostcode = isset( $abn_details->businessEntity->mainBusinessPhysicalAddress->postcode ) ? $abn_details->businessEntity->mainBusinessPhysicalAddress->postcode : ''; $_POST["input_{$field['id']}"] = $entityPostcode; } } } } elseif ( 'abnlookup_entity_state' == self::is_abnlookup_field( $field ) ) { $keys = array_keys( $field_values ); foreach( $keys as $key ) { if ( $key == $field['field_link_abnlookup'] ) { $abn_details = $field_values[$key]; if ( $field_hidden[$key] ) { $_POST["input_{$field['id']}"] = ''; } elseif ( isset($abn_details->businessEntity ) ) { $entityStatecode = isset( $abn_details->businessEntity->mainBusinessPhysicalAddress->stateCode ) ? $abn_details->businessEntity->mainBusinessPhysicalAddress->stateCode : ''; $_POST["input_{$field['id']}"] = $entityStatecode; } } } } elseif ( 'abnlookup_gst_effective_from' == self::is_abnlookup_field( $field ) ) { $keys = array_keys( $field_values ); foreach( $keys as $key ) { if ( $key == $field['field_link_abnlookup'] ) { $abn_details = $field_values[$key]; if ( $field_hidden[$key] ) { $_POST["input_{$field['id']}"] = ''; } elseif ( isset($abn_details->businessEntity ) ) { $entityGSTEffectiveFrom = isset( $abn_details->businessEntity->goodsAndServicesTax->effectiveFrom ) ? $abn_details->businessEntity->goodsAndServicesTax->effectiveFrom : ''; if ( '' !== $entityGSTEffectiveFrom && '0001-01-01' !== $entityGSTEffectiveFrom ) { // format the date $field_date_format = $field->dateFormat; switch ( $field_date_format ) { case 'dmy': $date_format = 'd/m/Y'; break; case 'dmy_dash': $date_format = 'd-m-Y'; break; case 'dmy_dot': $date_format = 'd.m.Y'; break; case 'ymd_slash': $date_format = 'Y/m/d'; break; case 'ymd_dash': $date_format = 'Y-m-d'; break; case 'ymd_dot': $date_format = 'Y.m.d'; break; default: $date_format = 'm/d/Y'; } $formatted_date = date( $date_format, strtotime( $entityGSTEffectiveFrom ) ); $_POST["input_{$field['id']}"] = $formatted_date; } } } } } elseif ( 'abnlookup_entity_effective_from' == self::is_abnlookup_field( $field ) ) { $keys = array_keys( $field_values ); foreach( $keys as $key ) { if ( $key == $field['field_link_abnlookup'] ) { $abn_details = $field_values[$key]; if ( $field_hidden[$key] ) { $_POST["input_{$field['id']}"] = ''; } elseif ( isset($abn_details->businessEntity ) ) { $entityEffectiveFrom = isset( $abn_details->businessEntity->entityStatus->effectiveFrom ) ? $abn_details->businessEntity->entityStatus->effectiveFrom : ''; if ( '' !== $entityEffectiveFrom && '0001-01-01' !== $entityEffectiveFrom ) { // format the date $field_date_format = $field->dateFormat; switch ( $field_date_format ) { case 'dmy': $date_format = 'd/m/Y'; break; case 'dmy_dash': $date_format = 'd-m-Y'; break; case 'dmy_dot': $date_format = 'd.m.Y'; break; case 'ymd_slash': $date_format = 'Y/m/d'; break; case 'ymd_dash': $date_format = 'Y-m-d'; break; case 'ymd_dot': $date_format = 'Y.m.d'; break; default: $date_format = 'm/d/Y'; } } $formatted_date = date( $date_format, strtotime( $entityEffectiveFrom ) ); $_POST["input_{$field['id']}"] = $formatted_date; } } } } } } return $form; } // END check_field_values /* * Handles custom validation for ABN Lookup and linked fields */ function validate_abnlookup_fields( $validation_result ) { $abnlookup_options = ITSG_GF_AbnLookup::get_options(); $form = $validation_result['form']; $current_page = rgpost( 'gform_source_page_number_' . $form['id'] ) ? rgpost( 'gform_source_page_number_' . $form['id'] ) : 1; if ( is_array( $form ) ) { foreach( $form['fields'] as &$field ) { $field_page = $field->pageNumber; $is_hidden = RGFormsModel::is_field_hidden( $form, $field, array() ); if ( $field_page != $current_page || $is_hidden ) { continue; } if ( 'abn' == self::is_abnlookup_field( $field ) && 'none' !== $field->field_validate_abnlookup ) { $value = rgpost( "input_{$field['id']}" ); $numbersOnly = preg_replace( "/[^0-9]/", "", $value ); $abn_details = ITSG_GF_AbnLookup::do_abnlookup( $numbersOnly ); $registered_gst = isset( $abn_details->businessEntity->goodsAndServicesTax ) ? ( '0001-01-01' == $abn_details->businessEntity->goodsAndServicesTax->effectiveTo ) : false; $entityStatus = isset( $abn_details->businessEntity->entityStatus->entityStatusCode ) ? $abn_details->businessEntity->entityStatus->entityStatusCode : false; if ( '' == $value && $field['isRequired'] ) { $validation_result['is_valid'] = false; // set the form validation to false $field->failed_validation = true; } elseif ( ! empty( $value ) && ( ! $abn_details || isset( $abn_details->exception ) ) ) { $validation_result['is_valid'] = false; // set the form validation to false $field->failed_validation = true; if ( 11 == strlen( $numbersOnly ) ) { $field->validation_message = $abnlookup_options['validation_message_not_valid']; } else { $field->validation_message = $abnlookup_options['validation_message_11_char']; } } elseif ( 'activeabn' == $field['field_validate_abnlookup'] && 'Active' !== $entityStatus ) { $validation_result['is_valid'] = false; // set the form validation to false $field->failed_validation = true; $field->validation_message = $abnlookup_options['validation_message_activeabn']; } elseif ( 'reggst' == $field['field_validate_abnlookup'] && !$registered_gst ) { $validation_result['is_valid'] = false; // set the form validation to false $field->failed_validation = true; $field->validation_message = $abnlookup_options['validation_message_reggst']; } elseif ( 'notreggst' == $field['field_validate_abnlookup'] && $registered_gst ) { $validation_result['is_valid'] = false; // set the form validation to false $field->failed_validation = true; $field->validation_message = $abnlookup_options['validation_message_notreggst']; } } } } //Assign modified $form object back to the validation result $validation_result['form'] = $form; return $validation_result; } // END validate_abnlookup_fields /* * Customise ABN lookup fields * - forces 'GST' field to be 'Yes' and 'No' options */ function customise_abnlookup_fields( $form ) { if ( is_array( $form ) || is_object( $form ) ) { foreach( $form['fields'] as &$field ) { if ( 'abnlookup_entity_gst' == self::is_abnlookup_field( $field ) ) { // Force GST field 'Yes' and 'No' options $text_yes = __( 'Yes', 'abn-lookup-for-gravity-forms' ); $text_no = __( 'No', 'abn-lookup-for-gravity-forms' ); $value_yes = apply_filters( 'itsg_gf_abnlookup_gst_value_yes', $text_yes, $form['id'] ); $value_no = apply_filters( 'itsg_gf_abnlookup_gst_value_no', $text_no, $form['id'] ); $field->choices = array ( array( 'text' => $text_yes, 'value' => $value_yes ), array( 'text' => $text_no, 'value' => $value_no ) ); } elseif ( 'abnlookup_gst_effective_from' == self::is_abnlookup_field( $field ) ) { // ensure is datepicker $field->dateType = 'datepicker'; } elseif ( 'abnlookup_entity_effective_from' == self::is_abnlookup_field( $field ) ) { // ensure is datepicker $field->dateType = 'datepicker'; } } } return $form; } // END customise_abnlookup_fields /* * Customise ABN lookup fields * - in the form editor, display GST field as 'Yes' and 'No' options * - in front end forms add the response HTML below ABN Lookup fields */ function change_abnlookup_fields( $content, $field, $value, $lead_id, $form_id ) { if ( 'gf_entries' != rgget( 'page' ) ) { if ( GFCommon::is_form_editor() ) { if ('abnlookup_entity_gst' == self::is_abnlookup_field( $field ) ) { $override_input_value = '
'; $content = preg_replace( "~
.*<\/div>~", $override_input_value, $content ); } return $content; } elseif ( 'abn' == self::is_abnlookup_field( $field ) ) { $entityStatus = ''; $abn_details_message = ''; $numbersOnly = preg_replace( "/[^0-9]/","", $value ); if ( 11 == strlen( $numbersOnly ) ) { $abn_details = ITSG_GF_AbnLookup::do_abnlookup( $numbersOnly ); if ( isset( $abn_details->businessEntity ) ) { $entityTypeCode = $abn_details->businessEntity->entityType->entityTypeCode; $entityStatus = $abn_details->businessEntity->entityStatus->entityStatusCode; if ( 'IND' == $entityTypeCode ) { $familyName = is_string( $abn_details->businessEntity->legalName->familyName ) ? $abn_details->businessEntity->legalName->familyName : ''; $givenName = is_string( $abn_details->businessEntity->legalName->givenName ) ? $abn_details->businessEntity->legalName->givenName : ''; $otherGivenName = is_string( $abn_details->businessEntity->legalName->otherGivenName ) ? $abn_details->businessEntity->legalName->otherGivenName : ''; $entityName = $familyName . ", " . $givenName . " " . $otherGivenName; } else { $entityName = $abn_details->businessEntity->mainName->organisationName; } $abn_details_message = $entityStatus .' - '.$entityName; } } $content = preg_replace( "/\/>/", "/>", $content, 1 ); $content .= ""; } elseif ( 'abnlookup_gst_effective_from' == self::is_abnlookup_field( $field ) || 'abnlookup_entity_effective_from' == self::is_abnlookup_field( $field ) ) { // remove datepicker $content = str_replace( 'datepicker', '', $content); } } return $content; } // END change_abnlookup_fields /* * Applies CSS classes to ABN Lookup fields */ public function abnlookup_css_class( $classes, $field, $form ) { if ( 'abn' == self::is_abnlookup_field( $field ) ) { $classes .= " gform_abnlookup_field gform_abnlookup_field_" . $field->id; } else { $field_link_abnlookup = ( int ) ! empty( $field->field_link_abnlookup ) ? $field->field_link_abnlookup : $this->get_first_abnlookup_field( $form ); if ( 'abnlookup_entity_gst' == self::is_abnlookup_field( $field ) ) { $classes .= " gform_abnlookup_entity_gst_field_" . $field_link_abnlookup; } elseif ( 'abnlookup_entity_type' == self::is_abnlookup_field( $field ) ) { $classes .= " gform_abnlookup_entity_type_field_" . $field_link_abnlookup; } elseif ( 'abnlookup_entity_status' == self::is_abnlookup_field( $field ) ) { $classes .= " gform_abnlookup_entity_status_field_" . $field_link_abnlookup; } elseif ( 'abnlookup_entity_name' == self::is_abnlookup_field( $field ) ) { $classes .= " gform_abnlookup_entity_name_field_" . $field_link_abnlookup; } elseif ( 'abnlookup_entity_postcode' == self::is_abnlookup_field( $field ) ) { $classes .= " gform_abnlookup_entity_postcode_field_" . $field_link_abnlookup; } elseif ( 'abnlookup_entity_state' == self::is_abnlookup_field( $field ) ) { $classes .= " gform_abnlookup_entity_state_field_" . $field_link_abnlookup; } elseif ( 'abnlookup_gst_effective_from' == self::is_abnlookup_field( $field ) ) { $classes .= " gform_abnlookup_gst_effective_from_field_" . $field_link_abnlookup; } elseif ( 'abnlookup_entity_effective_from' == self::is_abnlookup_field( $field ) ) { $classes .= " gform_abnlookup_entity_effective_from_field_" . $field_link_abnlookup; } } return $classes; } // END abnlookup_css_class function get_first_abnlookup_field( $form ) { foreach ( $form['fields'] as $field ) { $field_type = $field->type; if ( 'abn' == self::is_abnlookup_field( $field ) ) { return $field->id; } } return; } /* * Field options for the form editor */ public static function abnlookup_field_settings( $position, $form_id ) { if ( 25 == $position ) { ?>









  • ".__( "Enable ABN Lookup", "abn-lookup-for-gravity-forms" )."".__( "Check this box to integrate this field with the Australian Government's ABN Lookup tool.", "abn-lookup-for-gravity-forms" ); $tooltips["form_field_validate_abnlookup"] = "
    ".__( "ABN Lookup Field Validation", "abn-lookup-for-gravity-forms" )."
    ".__( "Choose the level of validation required for the ABN Lookup field.", "abn-lookup-for-gravity-forms" ); $tooltips["form_field_enable_abnlookup_gst"] = "
    ".__( "Enable ABN Lookup GST", "abn-lookup-for-gravity-forms" )."
    ".__( "Check this box to link the field with an ABN Lookup field.", "abn-lookup-for-gravity-forms" ); $tooltips["form_field_link_abnlookup"] = "
    ".__( "Link ABN Lookup field", "abn-lookup-for-gravity-forms" )."
    ".__( "Select the ABN Lookup field to link to.", "abn-lookup-for-gravity-forms" ); $tooltips["form_field_enable_abnlookup_entity_results"] = "
    ".__( "ABN Lookup results field", "abn-lookup-for-gravity-forms" )."
    ".__( "Check this box to link the field with an ABN Lookup field.", "abn-lookup-for-gravity-forms" ); return $tooltips; } // END field_tooltips /* * Checks if field is abnlook up and returns type */ public static function is_abnlookup_field( $field ) { $field_type = $field->type; if ( 'text' == $field_type && array_key_exists( 'enable_abnlookup', $field) && true == $field['enable_abnlookup'] ) { return 'abn'; } elseif ( 'text' == $field_type && array_key_exists( 'abnlookup_results_enable', $field) && '' !== $field['abnlookup_results_enable'] && array_key_exists( 'abnlookup_results', $field) && '' !== $field['abnlookup_results'] ) { return $field['abnlookup_results']; } elseif ( 'radio' == $field_type && array_key_exists( 'abnlookup_enable_gst', $field) && '' !== $field['abnlookup_enable_gst'] ) { return 'abnlookup_entity_gst'; } elseif ( 'date' == $field_type && array_key_exists( 'abnlookup_results_enable', $field) && '' !== $field['abnlookup_results_enable'] && array_key_exists( 'abnlookup_results', $field) && '' !== $field['abnlookup_results'] ) { return $field['abnlookup_results']; } return false; } // END is_abnlookup_field } $ITSG_GF_AbnLookup_Fields = new ITSG_GF_AbnLookup_Fields(); }