Files

132 lines
4.0 KiB
PHP

<?php
/**
* Database Migration Class
*
* Handles creation and management of database tables for forms and responses.
*
* @package PCFormBuilder
*/
class PC_DB_Migration {
private static $charset_collate = '';
public static function activate() {
self::set_charset();
self::create_forms_table();
self::create_fields_table();
self::create_responses_table();
self::create_response_data_table();
update_option( 'pcfb_version', PCFB_VERSION );
}
public static function deactivate() {
// Cleanup if needed
}
private static function set_charset() {
global $wpdb;
self::$charset_collate = $wpdb->get_charset_collate();
}
private static function create_forms_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'pcfb_forms';
$sql = "CREATE TABLE {$table_name} (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
description text NOT NULL,
settings longtext NOT NULL,
status varchar(20) DEFAULT 'active' NOT NULL,
created_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (id)
) " . self::$charset_collate . ";";
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
dbDelta( $sql );
}
private static function create_fields_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'pcfb_fields';
$sql = "CREATE TABLE {$table_name} (
id mediumint(9) NOT NULL AUTO_INCREMENT,
form_id mediumint(9) NOT NULL,
field_type varchar(50) NOT NULL,
field_label varchar(255) NOT NULL,
field_name varchar(255) NOT NULL,
placeholder varchar(255) DEFAULT '',
options longtext DEFAULT NULL,
validation_rules longtext DEFAULT NULL,
sort_order mediumint(9) DEFAULT 0 NOT NULL,
created_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (id),
KEY form_id (form_id)
) " . self::$charset_collate . ";";
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
dbDelta( $sql );
}
private static function create_responses_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'pcfb_responses';
$sql = "CREATE TABLE {$table_name} (
id mediumint(9) NOT NULL AUTO_INCREMENT,
form_id mediumint(9) NOT NULL,
user_ip varchar(100) DEFAULT '',
user_agent text DEFAULT '',
status varchar(20) DEFAULT 'new' NOT NULL,
created_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (id),
KEY form_id (form_id)
) " . self::$charset_collate . ";";
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
dbDelta( $sql );
}
private static function create_response_data_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'pcfb_response_data';
$sql = "CREATE TABLE {$table_name} (
id mediumint(9) NOT NULL AUTO_INCREMENT,
response_id mediumint(9) NOT NULL,
field_id mediumint(9) NOT NULL,
field_value longtext NOT NULL,
created_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (id),
KEY response_id (response_id),
KEY field_id (field_id)
) " . self::$charset_collate . ";";
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
dbDelta( $sql );
}
public static function drop_tables() {
global $wpdb;
$tables = array(
$wpdb->prefix . 'pcfb_response_data',
$wpdb->prefix . 'pcfb_responses',
$wpdb->prefix . 'pcfb_fields',
$wpdb->prefix . 'pcfb_forms',
);
foreach ( $tables as $table ) {
$wpdb->query( "DROP TABLE IF EXISTS {$table}" );
}
}
}