removeOldEmailSettings(); $form_count = $this->getFormCount(); $forms = $this->getAllForms(); $x = 1; if ( is_array( $forms ) ) { foreach ( $forms as $form ) { $this->args['forms'][$x] = $form['id']; $x++; } } if( empty( $this->total_steps ) || $this->total_steps <= 1 ) { $this->total_steps = $form_count; } } public function _beforeStep( $step ) { // Get a list of forms that we've already converted. $this->completed_forms = get_option( 'nf_convert_notifications_forms', array() ); if ( ! is_array( $this->completed_forms ) ) { $this->completed_forms = array(); } } public function step( $step ) { global $ninja_forms_fields; // Get our form ID $form_id = $this->args['forms'][ $step ]; // Bail if we've already converted the notifications for this form. if ( in_array( $form_id, $this->completed_forms ) ) return false; // Grab our form from the database $form_settings = Ninja_Forms()->form( $form_id )->settings; $fields = Ninja_Forms()->form( $form_id )->fields; $process_fields = array(); foreach( $fields as $field_id => $field ) { $label = strip_tags( nf_get_field_admin_label( $field_id ) ); if ( strlen( $label ) > 30 ) { $tmp_label = substr( $label, 0, 30 ); } else { $tmp_label = $label; } $tmp_array = array( 'value' => $field_id, 'label' => $tmp_label . ' - ID: ' . $field_id ); $admin_label = $label; $label = isset( $field['data']['label'] ) ? $field['data']['label'] : ''; // Check to see if this field is supposed to be "processed" $type = $field['type']; if ( isset ( $ninja_forms_fields[ $type ]['process_field'] ) && $ninja_forms_fields[ $type ]['process_field'] ) { $process_fields[ $field_id ] = array( 'field_id' => $field_id, 'label' => $label, 'admin_label' => $admin_label ); } } // Create a notification for our admin email if ( ( isset ( $form_settings['admin_email_msg'] ) && ! empty ( $form_settings['admin_email_msg'] ) ) || ( isset ( $form_settings['admin_email_fields'] ) && 1 == $form_settings['admin_email_fields'] ) ) { // Create a notification $n_id = nf_insert_notification( $form_id ); // Update our notification type nf_update_object_meta( $n_id, 'type', 'email' ); // Activate our notification Ninja_Forms()->notification( $n_id )->activate(); // Update our notification name Ninja_Forms()->notification( $n_id )->update_setting( 'name', __( 'Admin Email', 'ninja-forms' ) ); $admin_mailto = isset ( $form_settings['admin_mailto'] ) ? $form_settings['admin_mailto'] : array(); // Implode our admin email addresses $to = implode('`', $admin_mailto ); // Update our to setting Ninja_Forms()->notification( $n_id )->update_setting( 'to', $to ); // Update our Format Setting Ninja_Forms()->notification( $n_id )->update_setting( 'email_format', $form_settings['email_type'] ); // Update our attach csv option Ninja_Forms()->notification( $n_id )->update_setting( 'attach_csv', $form_settings['admin_attach_csv'] ); // Update our subject $subject = $this->replace_shortcodes( $form_settings['admin_subject'] ); Ninja_Forms()->notification( $n_id )->update_setting( 'email_subject', $subject ); // Update our From Name if ( isset ( $form_settings['email_from_name'] ) ) { Ninja_Forms()->notification( $n_id )->update_setting( 'from_name', $form_settings['email_from_name'] ); } foreach ( $fields as $field ) { if ( isset ( $field['data']['from_name'] ) && $field['data']['from_name'] == 1 ) { // Update our From Name Ninja_Forms()->notification( $n_id )->update_setting( 'from_name', 'field_' . $field['id'] ); break; } } // Update our From Address Ninja_Forms()->notification( $n_id )->update_setting( 'from_address', $form_settings['email_from'] ); // Get our reply-to address foreach ( $fields as $field ) { if ( isset ( $field['data']['replyto_email'] ) && $field['data']['replyto_email'] == 1 ) { Ninja_Forms()->notification( $n_id )->update_setting( 'reply_to', 'field_' . $field['id'] ); break; } } $email_message = $form_settings['admin_email_msg']; // Check to see if the "include list of fields" checkbox was checked. if ( isset ( $form_settings['admin_email_fields'] ) && $form_settings['admin_email_fields'] == 1 ) { $email_message .= '
[ninja_forms_all_fields]'; } // Update our email message Ninja_Forms()->notification( $n_id )->update_setting( 'email_message', $email_message ); Ninja_Forms()->notification( $n_id )->update_setting( 'admin_email', true ); } // Create a notification for our user email if ( ! empty ( $fields ) ) { $addresses = array(); foreach ( $fields as $field_id => $field ) { if ( isset ( $field['data']['send_email'] ) && $field['data']['send_email'] == 1 ) { // Add this field to our $addresses variable. $addresses[] = 'field_' . $field_id; unset( $field['data']['send_email'] ); unset( $field['data']['replyto_email'] ); unset( $field['data']['from_name'] ); $args = array( 'update_array' => array( 'data' => serialize( $field['data'] ), ), 'where' => array( 'id' => $field_id, ), ); ninja_forms_update_field( $args ); } } if ( ! empty ( $addresses ) ) { // We have a user email, so create a notification $n_id = nf_insert_notification( $form_id ); // Update our notification type nf_update_object_meta( $n_id, 'type', 'email' ); // Activate our notification Ninja_Forms()->notification( $n_id )->activate(); // Update our notification name Ninja_Forms()->notification( $n_id )->update_setting( 'name', __( 'User Email', 'ninja-forms' ) ); // Implode our admin email addresses $n_var = count ( $addresses ) > 1 ? 'bcc' : 'to'; $addresses = implode( '`', $addresses ); Ninja_Forms()->notification( $n_id )->update_setting( $n_var, $addresses ); // Update our Format Setting Ninja_Forms()->notification( $n_id )->update_setting( 'email_format', $form_settings['email_type'] ); // Update our subject $subject = $this->replace_shortcodes( $form_settings['user_subject'] ); Ninja_Forms()->notification( $n_id )->update_setting( 'email_subject', $subject ); // Update our From Name if ( isset ( $form_settings['email_from_name'] ) ) { Ninja_Forms()->notification( $n_id )->update_setting( 'from_name', $form_settings['email_from_name'] ); } // Update our From Address Ninja_Forms()->notification( $n_id )->update_setting( 'from_address', $form_settings['email_from'] ); $email_message = $form_settings['user_email_msg']; // Check to see if the "include list of fields" checkbox was checked. If so, add our table to the end of the email message. if ( isset ( $form_settings['user_email_fields'] ) && $form_settings['user_email_fields'] == 1 ) { $email_message .= '
[ninja_forms_all_fields]'; } // Update our email message Ninja_Forms()->notification( $n_id )->update_setting( 'email_message', $email_message ); Ninja_Forms()->notification( $n_id )->update_setting( 'user_email', true ); } } if ( isset ( $form_settings['success_msg'] ) && ! empty( $form_settings['success_msg'] ) ) { // Create a notification for our success message $n_id = nf_insert_notification( $form_id ); nf_update_object_meta( $n_id, 'name', __( 'Success Message', 'ninja-forms' ) ); nf_update_object_meta( $n_id, 'type', 'success_message' ); nf_update_object_meta( $n_id, 'active', 1 ); nf_update_object_meta( $n_id, 'success_msg', $form_settings['success_msg'] ); } if ( isset ( $form_settings['landing_page'] ) && ! empty( $form_settings['landing_page'] ) ) { // Create a notification for our redirect $n_id = nf_insert_notification( $form_id ); nf_update_object_meta( $n_id, 'name', __( 'Redirect', 'ninja-forms' ) ); nf_update_object_meta( $n_id, 'type', 'redirect' ); nf_update_object_meta( $n_id, 'active', 1 ); nf_update_object_meta( $n_id, 'redirect_url', $form_settings['landing_page'] ); } $completed_forms = get_option( 'nf_convert_notifications_forms' ); if ( ! is_array( $completed_forms ) || empty ( $completed_forms ) ) { $completed_forms = array( $form_id ); } else { $completed_forms[] = $form_id; } update_option( 'nf_convert_notifications_forms', $completed_forms ); // Unset our admin email settings and save the form. if ( isset ( $form_settings['admin_mailto'] ) ) { unset( $form_settings['admin_mailto'] ); unset( $form_settings['admin_attach_csv'] ); unset( $form_settings['admin_subject'] ); unset( $form_settings['admin_email_msg'] ); unset( $form_settings['admin_email_fields'] ); unset( $form_settings['success_msg'] ); unset( $form_settings['user_email_msg'] ); unset( $form_settings['user_subject'] ); unset( $form_settings['landing_page'] ); $args = array( 'update_array' => array( 'data' => serialize( $form_settings ), ), 'where' => array( 'id' => $form_id, ), ); ninja_forms_update_form( $args ); } } public function complete() { update_option( 'nf_convert_notifications_complete', true ); } public function isComplete() { return get_option( 'nf_convert_notifications_complete', false ); } /* * PRIVATE METHODS */ private function removeOldEmailSettings() { nf_change_email_fav(); nf_remove_old_email_settings(); } private function getFormCount() { $forms = Ninja_Forms()->forms()->get_all(); return count( $forms ); } private function getAllForms() { $forms = Ninja_Forms()->forms()->get_all(); $tmp_array = array(); $x = 0; foreach ( $forms as $form_id ) { $tmp_array[ $x ]['id'] = $form_id; $tmp_array[ $x ]['data'] = Ninja_Forms()->form( $form_id )->get_all_settings(); $tmp_array[ $x ]['name'] = Ninja_Forms()->form( $form_id )->get_setting( 'form_title' ); $x++; } return $tmp_array; } private function replace_shortcodes( $text ) { $matches = array(); $pattern = get_shortcode_regex(); preg_match_all('/'.$pattern.'/s', $text, $matches); if ( is_array( $matches ) && ! empty( $matches[2] ) ) { foreach ( $matches[2] as $key => $shortcode ) { if ( $shortcode == 'ninja_forms_field' ) { if ( isset ( $matches[3][ $key ] ) ) { $atts = shortcode_parse_atts( $matches[3][ $key ] ); $id = $atts['id']; $text = str_replace( $matches[0][ $key ], '`field_' . $id . '`', $text ); } } } } return $text; } }