38217-vm/wp-content/plugins/fusion-builder/inc/class-fusion-form-db-forms.php
2026-02-05 17:08:59 +03:00

344 lines
7.9 KiB
PHP

<?php
/**
* Forms Handler.
*
* @package fusion-builder
* @since 3.1
*/
/**
* Form Submission.
*
* @since 3.1
*/
class Fusion_Form_DB_Forms extends Fusion_Form_DB_Items {
/**
* The table name.
*
* @access protected
* @since 3.1
* @var string
*/
protected $table_name = 'fusion_forms';
/**
* Insert form to database.
*
* @since 3.1
* @access public
* @param array $args The arguments.
* @return integer|boolean The last insert id or false if query failed.
*/
public function insert( $args ) {
// Make sure $args['form_id'] is a number.
$sanitized_form_id = $args['form_id'] ? absint( $args['form_id'] ) : false;
if ( $args['form_id'] ) {
// Check if the form id already exists.
$is_id = $this->get_form_table_id( $sanitized_form_id );
}
return ( $is_id ) ? $is_id : parent::insert( $args );
}
/**
* Get the table id of the form id.
*
* @param int $form_id The form _id.
* @return int|false False if no table id could be found, id otherwise.
*/
public function get_form_table_id( $form_id ) {
global $wpdb;
$db = new Fusion_Form_DB();
$table_id = (int) $db->get_var( $wpdb->prepare( "SELECT `id` FROM `{$wpdb->prefix}{$this->table_name}` WHERE form_id = %d", $form_id ) ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
return $table_id ? $table_id : false;
}
/**
* Get forms.
*
* @param array $args An array of arguments for the query.
* @return array An array of forms.
*/
public function get_formatted( $args = [] ) {
global $wpdb;
$results = $this->get( $args );
// Format the results.
$forms = [];
foreach ( $results as $form_object ) {
// Deleted form's data is not removed from form tables, so we filter out deleted form posts here.
if ( ! empty( $wpdb->get_results( "SELECT ID from $wpdb->posts WHERE ID = $form_object->form_id AND post_type = 'fusion_form'" ) ) ) { // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL
$forms[ $form_object->id ] = [
'form_id' => $form_object->form_id,
'views' => $form_object->views,
];
}
}
return $forms;
}
/**
* Insert form field to database.
*
* @since 3.1
* @access public
* @param string $form_id Form ID.
* @param string $field_name Form field name.
* @param string $field_label Form field label.
* @return integer|boolean The last insert id or false if query failed.
*/
public function insert_form_field( $form_id, $field_name, $field_label ) {
global $wpdb;
$db = new Fusion_Form_DB();
$sanitized_form_id = absint( $form_id );
$sanitized_field_name = sanitize_key( $field_name );
$sanitized_field_label = wp_strip_all_tags( $field_label );
$fusion_fields = new Fusion_Form_DB_Fields();
// Check if the field name for the same form is already exists.
$is_id = $db->get_var(
$wpdb->prepare(
"SELECT `id` FROM `{$wpdb->prefix}fusion_form_fields` WHERE form_id = %d AND field_name = %s",
$sanitized_form_id,
$sanitized_field_name
)
);
if ( ! $is_id ) {
// Insert form field into database.
return $fusion_fields->insert(
[
'form_id' => $sanitized_form_id,
'field_name' => $sanitized_field_name,
'field_label' => $sanitized_field_label,
]
);
}
// Update field label and field name to latest one.
$fusion_fields->update(
[
'field_name' => $sanitized_field_name,
'field_label' => $sanitized_field_label,
],
[ 'id' => $is_id ],
[ '%s' ],
[ '%s' ]
);
return $is_id;
}
/**
* Get form fields for the form id given.
*
* @since 3.1
* @access public
* @param int $form_id Form ID to get fields for.
* @return array
*/
public function get_form_fields( $form_id ) {
$fields = new Fusion_Form_DB_Fields();
return $fields->get_form_fields( $form_id );
}
/**
* Reset views for the form id(s) given.
*
* @since 3.1
* @access public
* @param array $form_ids Form ID(s).
* @return void
*/
public function reset_views( $form_ids ) {
global $wpdb;
$db = new Fusion_Form_DB();
$form_ids = (array) $form_ids;
foreach ( $form_ids as $id ) {
// Clear form views from forms table.
$db->query( $wpdb->prepare( "UPDATE {$wpdb->prefix}fusion_forms SET views = 0 WHERE `id` = %d", $id ) );
}
}
/**
* Reset views for the form id(s) given.
*
* @since 3.1
* @access public
* @param array $form_ids Form ID(s).
* @return void
*/
public function reset_submissions_count( $form_ids ) {
global $wpdb;
$db = new Fusion_Form_DB();
$form_ids = (array) $form_ids;
foreach ( $form_ids as $id ) {
// Clear form submissions_count from forms table.
$db->query( $wpdb->prepare( "UPDATE {$wpdb->prefix}fusion_forms SET submissions_count = 0 WHERE `id` = %d", $id ) );
}
}
/**
* Clear form entries for the form id given.
*
* @since 3.1
* @access public
* @param array $form_ids Form ID.
* @return void
*/
public function clear_form_entries( $form_ids ) {
$fields = new Fusion_Form_DB_Fields();
$submissions = new Fusion_Form_DB_Submissions();
$entries = new Fusion_Form_DB_Entries();
$form_ids = (array) $form_ids;
// Reset views.
$this->reset_views( $form_ids );
// Reset submissions count.
$this->reset_submissions_count( $form_ids );
// Delete form entries from form fields table.
$fields->delete( $form_ids, 'form_id' );
// Delete form submission entries.
$entries->delete( $form_ids, 'form_id' );
// Delete form submissions.
$submissions->delete( $form_ids, 'form_id' );
}
/**
* Delete form entries for the form post id given.
*
* @since 3.1
* @access public
* @param array $form_id Form ID.
* @return void
*/
public function delete_form_by_post_id( $form_id ) {
// Get form id for selected form.
$forms = $this->get(
[
'where' => [ 'form_id' => $form_id ],
]
);
if ( $forms ) {
foreach ( $forms as $form ) {
$this->delete( $form->id );
}
}
}
/**
* Delete form entries for the form id given.
*
* @since 3.1
* @access public
* @param array $ids Form ID(s).
* @param string $id_column The column our $ids are referring to.
* @return void
*/
public function delete( $ids, $id_column = 'id' ) {
$ids = (array) $ids;
// Delete the form post.
foreach ( $ids as $id ) {
$forms = $this->get( [ 'where' => [ $id_column => $id ] ] );
foreach ( $forms as $form ) {
wp_delete_post( $form->form_id, true );
}
}
// Delete forms from forms table.
parent::delete( $ids );
// Delete form entries from all tables.
$this->clear_form_entries( $ids );
}
/**
* Increment views count for the form id given.
*
* @since 3.1
* @access public
* @param string $form_id Form ID to update views.
* @return bool
*/
public function increment_views( $form_id ) {
global $wpdb;
$db = new Fusion_Form_DB();
// Update the entry.
return $db->query(
$wpdb->prepare(
"UPDATE {$wpdb->prefix}fusion_forms SET views = views + 1 WHERE form_id = %d",
absint( $form_id )
)
);
}
/**
* Increment submissions count for the form id given.
*
* @since 3.1
* @access public
* @param string $form_id Form ID to update submissions_count.
* @return bool
*/
public function increment_submissions_count( $form_id ) {
global $wpdb;
$db = new Fusion_Form_DB();
// Update the entry.
return $db->query(
$wpdb->prepare(
"UPDATE `{$wpdb->prefix}fusion_forms` SET `submissions_count` = `submissions_count` + 1 WHERE `id` = %d",
absint( $form_id )
)
);
}
/**
* Decrease submissions count for the form id given.
*
* @since 3.1
* @access public
* @param string $form_id Form ID to update submissions_count.
* @return bool
*/
public function decrease_submissions_count( $form_id ) {
global $wpdb;
$db = new Fusion_Form_DB();
// Update the entry.
return $db->query(
$wpdb->prepare(
"UPDATE {$wpdb->prefix}fusion_forms SET submissions_count = submissions_count - 1 WHERE id = %d",
absint( $form_id )
)
);
}
}