Adding new functionality

This commit is contained in:
2025-08-31 06:20:15 -07:00
parent c8c02da433
commit 5b6011bdb8
9 changed files with 1821 additions and 82 deletions

View File

@@ -45,7 +45,9 @@ class TWP_Activator {
'twp_group_members',
'twp_agent_status',
'twp_callbacks',
'twp_call_recordings'
'twp_call_recordings',
'twp_user_extensions',
'twp_queue_assignments'
);
$missing_tables = array();
@@ -104,21 +106,30 @@ class TWP_Activator {
KEY phone_number (phone_number)
) $charset_collate;";
// Call queues table
// Call queues table (enhanced for user-specific queues)
$table_queues = $wpdb->prefix . 'twp_call_queues';
$sql_queues = "CREATE TABLE $table_queues (
id int(11) NOT NULL AUTO_INCREMENT,
queue_name varchar(100) NOT NULL,
queue_type varchar(20) DEFAULT 'general',
user_id bigint(20),
extension varchar(10),
notification_number varchar(20),
agent_group_id int(11),
max_size int(11) DEFAULT 10,
wait_music_url varchar(255),
tts_message text,
timeout_seconds int(11) DEFAULT 300,
voicemail_prompt text,
is_hold_queue tinyint(1) DEFAULT 0,
created_at datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY agent_group_id (agent_group_id),
KEY notification_number (notification_number)
KEY notification_number (notification_number),
KEY user_id (user_id),
KEY extension (extension),
KEY queue_type (queue_type),
UNIQUE KEY user_queue (user_id, queue_type)
) $charset_collate;";
// Queued calls table
@@ -247,12 +258,14 @@ class TWP_Activator {
UNIQUE KEY group_user (group_id, user_id)
) $charset_collate;";
// Agent status table
// Agent status table (enhanced with login tracking)
$table_agent_status = $wpdb->prefix . 'twp_agent_status';
$sql_agent_status = "CREATE TABLE $table_agent_status (
id int(11) NOT NULL AUTO_INCREMENT,
user_id bigint(20) NOT NULL,
status varchar(20) DEFAULT 'offline',
is_logged_in tinyint(1) DEFAULT 0,
logged_in_at datetime,
current_call_sid varchar(100),
last_activity datetime DEFAULT CURRENT_TIMESTAMP,
available_for_queues tinyint(1) DEFAULT 1,
@@ -260,6 +273,38 @@ class TWP_Activator {
UNIQUE KEY user_id (user_id)
) $charset_collate;";
// User extensions table
$table_user_extensions = $wpdb->prefix . 'twp_user_extensions';
$sql_user_extensions = "CREATE TABLE $table_user_extensions (
id int(11) NOT NULL AUTO_INCREMENT,
user_id bigint(20) NOT NULL,
extension varchar(10) NOT NULL,
direct_dial_number varchar(20),
personal_queue_id int(11),
hold_queue_id int(11),
created_at datetime DEFAULT CURRENT_TIMESTAMP,
updated_at datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY user_id (user_id),
UNIQUE KEY extension (extension),
KEY personal_queue_id (personal_queue_id),
KEY hold_queue_id (hold_queue_id)
) $charset_collate;";
// Queue assignments table (many-to-many relationship)
$table_queue_assignments = $wpdb->prefix . 'twp_queue_assignments';
$sql_queue_assignments = "CREATE TABLE $table_queue_assignments (
id int(11) NOT NULL AUTO_INCREMENT,
user_id bigint(20) NOT NULL,
queue_id int(11) NOT NULL,
is_primary tinyint(1) DEFAULT 0,
assigned_at datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY user_queue (user_id, queue_id),
KEY user_id (user_id),
KEY queue_id (queue_id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql_schedules);
dbDelta($sql_queues);
@@ -325,6 +370,8 @@ class TWP_Activator {
dbDelta($sql_agent_status);
dbDelta($sql_callbacks);
dbDelta($sql_recordings);
dbDelta($sql_user_extensions);
dbDelta($sql_queue_assignments);
// Add missing columns for existing installations
self::add_missing_columns();
@@ -336,6 +383,64 @@ class TWP_Activator {
private static function add_missing_columns() {
global $wpdb;
// Add new queue columns for user-specific queues
$table_queues = $wpdb->prefix . 'twp_call_queues';
// Check and add queue_type column
$queue_type_exists = $wpdb->get_results("SHOW COLUMNS FROM $table_queues LIKE 'queue_type'");
if (empty($queue_type_exists)) {
$wpdb->query("ALTER TABLE $table_queues ADD COLUMN queue_type varchar(20) DEFAULT 'general' AFTER queue_name");
$wpdb->query("ALTER TABLE $table_queues ADD INDEX queue_type (queue_type)");
}
// Check and add user_id column
$user_id_exists = $wpdb->get_results("SHOW COLUMNS FROM $table_queues LIKE 'user_id'");
if (empty($user_id_exists)) {
$wpdb->query("ALTER TABLE $table_queues ADD COLUMN user_id bigint(20) AFTER queue_type");
$wpdb->query("ALTER TABLE $table_queues ADD INDEX user_id (user_id)");
}
// Check and add extension column
$extension_exists = $wpdb->get_results("SHOW COLUMNS FROM $table_queues LIKE 'extension'");
if (empty($extension_exists)) {
$wpdb->query("ALTER TABLE $table_queues ADD COLUMN extension varchar(10) AFTER user_id");
$wpdb->query("ALTER TABLE $table_queues ADD INDEX extension (extension)");
}
// Check and add voicemail_prompt column
$voicemail_prompt_exists = $wpdb->get_results("SHOW COLUMNS FROM $table_queues LIKE 'voicemail_prompt'");
if (empty($voicemail_prompt_exists)) {
$wpdb->query("ALTER TABLE $table_queues ADD COLUMN voicemail_prompt text AFTER timeout_seconds");
}
// Check and add is_hold_queue column
$is_hold_queue_exists = $wpdb->get_results("SHOW COLUMNS FROM $table_queues LIKE 'is_hold_queue'");
if (empty($is_hold_queue_exists)) {
$wpdb->query("ALTER TABLE $table_queues ADD COLUMN is_hold_queue tinyint(1) DEFAULT 0 AFTER voicemail_prompt");
}
// Add unique constraint for user queues if it doesn't exist
$unique_constraint_exists = $wpdb->get_results("SHOW INDEX FROM $table_queues WHERE Key_name = 'user_queue'");
if (empty($unique_constraint_exists)) {
// Only add if both columns exist
if (!empty($user_id_exists) || $wpdb->get_results("SHOW COLUMNS FROM $table_queues LIKE 'user_id'")) {
$wpdb->query("ALTER TABLE $table_queues ADD UNIQUE KEY user_queue (user_id, queue_type)");
}
}
// Add login tracking columns to agent_status table
$table_agent_status = $wpdb->prefix . 'twp_agent_status';
$is_logged_in_exists = $wpdb->get_results("SHOW COLUMNS FROM $table_agent_status LIKE 'is_logged_in'");
if (empty($is_logged_in_exists)) {
$wpdb->query("ALTER TABLE $table_agent_status ADD COLUMN is_logged_in tinyint(1) DEFAULT 0 AFTER status");
}
$logged_in_at_exists = $wpdb->get_results("SHOW COLUMNS FROM $table_agent_status LIKE 'logged_in_at'");
if (empty($logged_in_at_exists)) {
$wpdb->query("ALTER TABLE $table_agent_status ADD COLUMN logged_in_at datetime AFTER is_logged_in");
}
$table_schedules = $wpdb->prefix . 'twp_phone_schedules';
// Check if holiday_dates column exists