File "abstract-evf-form-migrator.php"
Full Path: /home/rattkxnv/byattorney.com/wp-content/plugins/everest-forms/includes/admin/form-migrator/abstract-evf-form-migrator.php
File size: 9.73 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* EverestForms Form Migrator Class
*
* @package EverestForms\Admin
* @since 2.0.8
*/
defined( 'ABSPATH' ) || exit;
/**
* EVF_Admin_Form_Migrator class.
*/
abstract class EVF_Admin_Form_Migrator {
/**
* Importer name.
*
* @since 2.0.8
*
* @var string
*/
public $name;
/**
* Importer name in slug format.
*
* @since 2.0.8
*
* @var string
*/
public $slug;
/**
* Importer plugin path.
*
* @since 2.0.8
*
* @var string
*/
public $path;
/**
* Primary class constructor.
*
* @since 2.0.8
*/
public function __construct() {
add_action( 'admin_notices', array( $this, 'show_fm_notice' ) );
$this->init();
}
/**
* Undocumented function
*
* @since 2.0.8
*/
abstract public function init();
/**
* Add to list of registered importers.
*
* @since 2.0.8
*
* @param array $importers List of supported importers.
*
* @return array
*/
public function register( $importers = array() ) {
$importers = array(
'name' => $this->name,
'slug' => $this->slug,
'path' => $this->path,
'installed' => $this->is_installed(),
'active' => $this->is_active(),
);
return $importers;
}
/**
* Get all the forms
*
* @return array
*/
abstract protected function get_forms();
/**
* Get the form id
*
* @param int $id Form ID.
*
* @return array|object|bool
*/
abstract protected function get_form( $id );
/**
* If the importer source is available.
*
* @since 2.0.8
*
* @return bool
*/
abstract protected function is_active();
/**
* Check is the plugin installed or not.
*
* @since 2.0.8
*
* @return bool
*/
abstract protected function is_installed();
/**
* Modify the field id for smart tags.
*
* @since 2.0.8
* @param [array] $field The field array.
*/
protected function get_field_id_for_smarttags( $field ) {
$field_id = $field['id'];
$field_label = $field['label'];
if ( 'fullname' !== $field_id && 'email' !== $field_id && 'subject' !== $field_id && 'message' !== $field_id ) {
$field_label = preg_split( '/[\s\-\_]/', $field_label );
foreach ( $field_label as $key => $value ) {
if ( 0 === $key ) {
$field_label[ $key ] = strtolower( $value );
} else {
$field_label[ $key ] = ucfirst( $value );
}
}
$field_label = implode( '', $field_label );
$field_id = $field_label . '_' . $field_id;
} else {
$field_id = $field_id;
}
return $field_id;
}
/**
* Tracks the successful import of a form, allowing future alerts for attempts to
* import a form that has already been imported.
*
* @since 2.0.8
*
* @param int $source_id Imported plugin form ID.
* @param int $evf_forms_id Form ID.
*/
protected function track_import( $source_id, $evf_forms_id ) {
$imported = get_option( 'evf_fm_' . $this->slug . '_imported_form_list', array() );
$imported[ $evf_forms_id ] = $source_id;
update_option( 'evf_fm_' . $this->slug . '_imported_form_list', $imported, false );
}
/**
* Import the new form to the database and return AJAX data.
*
* @since 2.0.8
*
* @param array $form Form to import.
* @param array $unsupported List of unsupported fields.
* @param array $upgrade_plan List of fields, that are supported inside the EVF Forms Pro, but not in Free.
* @param array $upgrade_omit No field alternative in EVF.
*/
protected function import_form( $form, $unsupported = array(), $upgrade_plan = array(), $upgrade_omit = array() ) {
$imported_form_list = get_option( 'evf_fm_' . $this->slug . '_imported_form_list', array() );
if ( empty( $form ) ) {
return false;
}
$form_id = array_search( $form['settings']['imported_from']['form_id'], $imported_form_list );
if ( ! $form_id ) {
$form_id = evf()->form->create( $form['settings']['form_title'] );
if ( empty( $form_id ) || is_wp_error( $form_id ) ) {
wp_send_json_success(
array(
'error' => true,
'name' => sanitize_text_field( $form['settings']['form_title'] ),
'msg' => esc_html__( 'There was an error while creating a new form.', 'everest-forms' ),
)
);
}
}
$form['id'] = $form_id;
$form['field_id'] = count( $form['form_fields'] ) + 1;
// Update the form with all our compiled data.
$form_id = evf()->form->update( $form['id'], $form );
// Updating the post meta to track the migrated forms.
update_post_meta( $form_id, 'evf_fm_imported_from', $form['settings']['imported_from'] );
$form_styles = get_option( 'everest_forms_styles', array() );
$logger = evf_get_logger();
$logger->info(
__( 'Saving form.', 'everest-forms' ),
array( 'source' => 'form-save' )
);
do_action( 'everest_forms_save_form', $form_id, $form, array(), ! empty( $form_styles[ $form_id ] ) );
if ( ! $form_id ) {
$logger->error(
__( 'An error occurred while saving the form.', 'everest-forms' ),
array( 'source' => 'form-save' )
);
wp_send_json_error(
array(
'errorTitle' => esc_html__( 'Form not found', 'everest-forms' ),
'errorMessage' => esc_html__( 'An error occurred while saving the form.', 'everest-forms' ),
)
);
} else {
$logger->info(
__( 'Form Imported successfully.', 'everest-forms' ),
array( 'source' => 'form-save' )
);
}
// Make note that this form has been imported.
$this->track_import( $form['settings']['imported_from']['form_id'], $form_id );
// Build and send final AJAX response!
$final_response = array(
'name' => $form['settings']['form_title'],
'evf_form_id' => $form_id,
'edit' => esc_url_raw( admin_url( 'admin.php?page=evf-builder&tab=fields&form_id=' . $form_id ) ),
'preview' => '',
'unsupported' => $unsupported,
'upgrade_plan' => $upgrade_plan,
'upgrade_omit' => $upgrade_omit,
);
return apply_filters( 'evf_fm_cf7_final_response', $final_response );
}
/**
* Show form migrator notice in admin area of everest form if the plugin found
*
* @since 2.0.8
*
* @return void
*/
public function show_fm_notice() {
$screen = get_current_screen();
$screen_id = $screen ? $screen->id : '';
if ( ! in_array( $screen_id, evf_get_screen_ids(), true ) ) {
return;
}
if ( ! file_exists( trailingslashit( WP_PLUGIN_DIR ) . $this->path ) ) {
return;
}
if ( $this->is_dimissed() || ! current_user_can( 'manage_options' ) ) {
return;
}
?>
<div class="notice notice-info is-dismissible evf-fm-notice">
<p><?php printf( wp_kses_post( 'Hey, it seems that you have <strong>%s</strong> installed. Are you interested in <strong>migrating</strong> your forms to Everest Form?', 'everest-forms' ), wp_kses_post( $this->name ) ); ?></p>
<p>
<a href="<?php printf( esc_url( admin_url( 'admin.php?page=evf-tools&tab=form_migrator' ) ) ); ?>" class="button button-primary evf-fm-<?php echo esc_attr( $this->slug ); ?>" id="evf-fm-<?php echo esc_attr( $this->slug ); ?>"><?php esc_html_e( 'Form Migrator', 'everest-forms' ); ?></a>
<a href="#" class="button evf-fm-dismiss-notice" data-option-id="evf_fm_dismiss_xnotice_<?php echo esc_attr( $this->slug ); ?>" id="evf-fm-dimiss-<?php echo esc_attr( $this->slug ); ?>"><?php esc_html_e( 'No Thanks', 'everest-forms' ); ?></a>
<a href="<?php printf( esc_url( 'https://docs.everestforms.net/' ) ); ?>" target="_blank" class="button evf-fm-<?php echo esc_attr( $this->slug ); ?>" id="evf-fm-dimiss-<?php echo esc_attr( $this->slug ); ?>"><?php esc_html_e( 'For More', 'everest-forms' ); ?></a>
</p>
</div>
<?php
}
/**
* Save the migrated entry.
*
* @since 2.0.8
* @param [array] $entries The entries.
* @param [array] $entry_list The entry list with value.
* @param [array] $form_data The form data list.
*/
protected function save_migrated_entry( $entries, $entry_list = array(), $form_data = array() ) {
global $wpdb;
$result = $wpdb->insert( $wpdb->prefix . 'evf_entries', $entries );
if ( is_wp_error( $result ) || ! $result ) {
return false;
}
$entry_id = $wpdb->insert_id;
// Create meta data.
if ( $entry_id ) {
foreach ( $entry_list as $field ) {
$field = apply_filters( 'everest_forms_entry_save_fields', $field, $form_data, $entry_id );
// Add only whitelisted fields to entry meta.
if ( in_array( $field['type'], array( 'html', 'title' ), true ) ) {
continue;
}
// If empty file is supplied, don't store their data nor send email.
if ( in_array( $field['type'], array( 'image-upload', 'file-upload' ), true ) ) {
// BW compatibility for previous file uploader.
if ( isset( $field['value']['file_url'] ) && '' === $field['value']['file_url'] ) {
continue;
}
}
// If empty label is provided for choice field, don't store their data nor send email.
if ( in_array( $field['type'], array( 'radio', 'payment-multiple' ), true ) ) {
if ( isset( $field['value']['label'] ) && '' === $field['value']['label'] ) {
continue;
}
} elseif ( in_array( $field['type'], array( 'checkbox', 'payment-checkbox' ), true ) ) {
if ( isset( $field['value']['label'] ) && ( empty( $field['value']['label'] ) || '' === current( $field['value']['label'] ) ) ) {
continue;
}
}
if ( isset( $field['meta_key'], $field['value'] ) && '' !== $field['value'] ) {
$entry_metadata = array(
'entry_id' => $entry_id,
'meta_key' => sanitize_key( $field['meta_key'] ),
'meta_value' => maybe_serialize( $field['value'] ), // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value
);
// Insert entry meta.
$wpdb->insert( $wpdb->prefix . 'evf_entrymeta', $entry_metadata );
}
}
}
return $entry_id;
}
/**
* If the prompt is dismissed
*
* @since 2.0.8
*
* @return bool
*/
public function is_dimissed() {
return evf_string_to_bool( get_option( 'evf_fm_dismiss_xnotice_' . $this->slug ) );
}
}