response ) && $this->response ) {
$response = array_merge( $this->response, $response );
}
return apply_filters( 'wpcf7r_manipulate_cf7_response_object', $response, $this );
}
/**
* Add plugin support to browsers that don't support ajax.
*
* @param [object] $wpcf7 - contact form 7 form object.
* @return void
*/
public function non_ajax_redirection( $wpcf7 ) {
if ( ! WPCF7_Submission::is_restful() ) {
$submission = WPCF7_Submission::get_instance();
$wpcf7_form = get_cf7r_form( $wpcf7, $submission );
if ( 'mail_sent' === $wpcf7_form->get_submission_status() ) {
$results = $this->handle_valid_actions( $wpcf7 );
if ( $results ) {
foreach ( $results as $result_type => $result_actions ) {
if ( ( 'FireScript' === $result_type || 'firescript' === strtolower( $result_type ) ) && $result_action ) {
$this->scripts = $result_actions;
add_action( 'wp_head', array( $this, 'add_header_script' ) );
}
foreach ( $result_actions as $result_action ) {
if ( 'redirect' === $result_type ) {
$this->redirect_url = $result_action['redirect_url'];
if ( 'new_tab' === $result_action['type'] ) {
add_action( 'wp_head', array( $this, 'open_new_tab' ), 9999 );
} else {
// Do this last.
add_action( 'wp_head', array( $this, 'redirect' ), 9999 );
}
}
}
}
}
}
}
}
/**
* Print header scripts for non ajax submits
*/
public function add_header_script() {
if ( isset( $this->scripts ) && $this->scripts ) {
foreach ( $this->scripts as $script ) {
echo '';
}
}
}
/**
* Redirect support for non ajax browsers
*/
public function redirect() {
// Allow other plugins to manipulate the redirect url settings.
$redirect_url = apply_filters( 'wpcf7_redirect_url', $this->redirect_url );
echo "";
}
/**
* Open new tab on non ajax submits
*/
public function open_new_tab() {
// Allow other plugins to manipulate the redirect url settings.
$redirect_url = apply_filters( 'wpcf7_redirect_url', $this->redirect_url );
echo "";
}
/**
* This function is fired before send email
*
* @param [object] $wpcf7 - cf7 form object.
* @return mixed - redirect response
*/
public function handle_valid_actions( $wpcf7 ) {
$submission = WPCF7_Submission::get_instance();
$wpcf7_form = get_cf7r_form( $wpcf7, $submission );
if ( $submission && $wpcf7_form->has_actions() ) {
// Get the submitted data.
$this->posted_data = $submission->get_posted_data();
// Process all relevant actions.
$this->response = $wpcf7_form->process_actions();
// Skip default contact form 7 email.
if ( isset( $this->response['send_mail'] ) && $this->response['send_mail'] ) {
add_filter(
'wpcf7_skip_mail',
function() {
return true;
}
);
}
$this->save_lead_actions( $this->response );
$wpcf7_form->maybe_perform_pre_result_action();
return $this->response;
}
}
/**
* Save lead actions
*
* @param [array] $actions_results - save actions on the lead record.
* @return void
*/
public function save_lead_actions( $actions_results ) {
foreach ( $actions_results as $action_type => $actions_result ) {
WPCF7R_Leads_Manager::save_action( WPCF7R_Action::get_lead_id(), $action_type, $actions_result );
}
}
/**
* Early hook to catch cf7 submissions before they are processed
*
* @param [object] $cf7 - contact form 7 form object.
* @return void
*/
public function after_cf7_object_created( $cf7 ) {
if ( WPCF7_Submission::is_restful() || isset( $_POST['_wpcf7'] ) ) {
// Get an instance of contact form 7 redirection post.
$wpcf7_form = get_cf7r_form( $cf7 );
// Check if the form has validation actions.
$actions = $wpcf7_form->get_active_actions();
if ( $actions ) {
foreach ( $actions as $action ) {
$results = $action->process_pre_submit_actions();
// Saved reference for the items removed from the $_POST data.
if ( isset( $results['removed_params'] ) && $results['removed_params'] ) {
$wpcf7_form->set_removed_posted_data( $results['removed_params'] );
}
}
}
}
}
/**
* Handle validation actions
*
* @param [object] $wpcf_validation_obj - validation object.
* @param [array] $tags - contact form 7 tags array.
* @return object - $new_validation_obj - the updated validation object.
*/
public function handle_validation_actions( $wpcf_validation_obj, $tags ) {
// store refrence to the form tags status.
$wpcf_validation_obj->tags = $tags;
// get an instance of the form submission.
$submission = WPCF7_Submission::get_instance();
if ( ! $submission ) {
return $wpcf_validation_obj;
}
// Get an instance of the contact form 7 form.
$cf7_form = $submission->get_contact_form();
// Get an instance of contact form 7 redirection post.
$wpcf7_form = get_cf7r_form( $cf7_form, $submission, $wpcf_validation_obj );
$new_validation_obj = $wpcf_validation_obj;
// Check if the form has validation actions.
if ( $submission && $wpcf7_form->has_actions() ) {
// process all actions.
$invalid_tags = $wpcf7_form->process_validation_actions();
if ( $invalid_tags ) {
$new_validation_obj = new WPCF7_Validation();
// Invalidate all invalid tags.
foreach ( reset( $invalid_tags ) as $custom_error_action_results ) {
if ( isset( $custom_error_action_results['invalid_tags'] ) && $custom_error_action_results['invalid_tags'] ) {
foreach ( $custom_error_action_results['invalid_tags'] as $wp_error ) {
$error = $wp_error->get_error_message();
$new_validation_obj->invalidate( $error['tag'], $error['error_message'] );
}
}
// invalidate default tag errors.
foreach ( $tags as $tag ) {
if ( ! $custom_error_action_results['ignored_tags'] || ! in_array( $tag->name, $custom_error_action_results['ignored_tags'], true ) ) {
$result = apply_filters( "wpcf7_validate_{$tag->type}", $new_validation_obj, $tag );
}
}
}
}
}
return $new_validation_obj;
}
}