code revision
This commit is contained in:
231
includes/class-twp-core.php
Normal file
231
includes/class-twp-core.php
Normal file
@@ -0,0 +1,231 @@
|
||||
<?php
|
||||
/**
|
||||
* Core plugin class
|
||||
*/
|
||||
class TWP_Core {
|
||||
|
||||
protected $loader;
|
||||
protected $plugin_name;
|
||||
protected $version;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->version = TWP_VERSION;
|
||||
$this->plugin_name = 'twilio-wp-plugin';
|
||||
|
||||
$this->load_dependencies();
|
||||
$this->set_locale();
|
||||
$this->define_admin_hooks();
|
||||
$this->define_public_hooks();
|
||||
$this->define_api_hooks();
|
||||
}
|
||||
|
||||
/**
|
||||
* Load required dependencies
|
||||
*/
|
||||
private function load_dependencies() {
|
||||
// Loader class
|
||||
require_once TWP_PLUGIN_DIR . 'includes/class-twp-loader.php';
|
||||
|
||||
// API classes
|
||||
require_once TWP_PLUGIN_DIR . 'includes/class-twp-twilio-api.php';
|
||||
require_once TWP_PLUGIN_DIR . 'includes/class-twp-elevenlabs-api.php';
|
||||
|
||||
// Feature classes
|
||||
require_once TWP_PLUGIN_DIR . 'includes/class-twp-scheduler.php';
|
||||
require_once TWP_PLUGIN_DIR . 'includes/class-twp-call-queue.php';
|
||||
require_once TWP_PLUGIN_DIR . 'includes/class-twp-workflow.php';
|
||||
require_once TWP_PLUGIN_DIR . 'includes/class-twp-webhooks.php';
|
||||
require_once TWP_PLUGIN_DIR . 'includes/class-twp-call-logger.php';
|
||||
require_once TWP_PLUGIN_DIR . 'includes/class-twp-agent-groups.php';
|
||||
require_once TWP_PLUGIN_DIR . 'includes/class-twp-agent-manager.php';
|
||||
require_once TWP_PLUGIN_DIR . 'includes/class-twp-callback-manager.php';
|
||||
|
||||
// Admin classes
|
||||
require_once TWP_PLUGIN_DIR . 'admin/class-twp-admin.php';
|
||||
|
||||
$this->loader = new TWP_Loader();
|
||||
}
|
||||
|
||||
/**
|
||||
* Define locale for internationalization
|
||||
*/
|
||||
private function set_locale() {
|
||||
add_action('plugins_loaded', function() {
|
||||
load_plugin_textdomain(
|
||||
'twilio-wp-plugin',
|
||||
false,
|
||||
dirname(TWP_PLUGIN_BASENAME) . '/languages/'
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Register admin hooks
|
||||
*/
|
||||
private function define_admin_hooks() {
|
||||
$plugin_admin = new TWP_Admin($this->get_plugin_name(), $this->get_version());
|
||||
|
||||
$this->loader->add_action('admin_enqueue_scripts', $plugin_admin, 'enqueue_styles');
|
||||
$this->loader->add_action('admin_enqueue_scripts', $plugin_admin, 'enqueue_scripts');
|
||||
$this->loader->add_action('admin_menu', $plugin_admin, 'add_plugin_admin_menu');
|
||||
$this->loader->add_action('admin_init', $plugin_admin, 'register_settings');
|
||||
$this->loader->add_action('admin_notices', $plugin_admin, 'show_admin_notices');
|
||||
|
||||
// AJAX handlers
|
||||
$this->loader->add_action('wp_ajax_twp_save_schedule', $plugin_admin, 'ajax_save_schedule');
|
||||
$this->loader->add_action('wp_ajax_twp_delete_schedule', $plugin_admin, 'ajax_delete_schedule');
|
||||
$this->loader->add_action('wp_ajax_twp_save_workflow', $plugin_admin, 'ajax_save_workflow');
|
||||
$this->loader->add_action('wp_ajax_twp_get_workflow', $plugin_admin, 'ajax_get_workflow');
|
||||
$this->loader->add_action('wp_ajax_twp_delete_workflow', $plugin_admin, 'ajax_delete_workflow');
|
||||
$this->loader->add_action('wp_ajax_twp_test_call', $plugin_admin, 'ajax_test_call');
|
||||
|
||||
// Phone number management AJAX
|
||||
$this->loader->add_action('wp_ajax_twp_get_phone_numbers', $plugin_admin, 'ajax_get_phone_numbers');
|
||||
$this->loader->add_action('wp_ajax_twp_search_available_numbers', $plugin_admin, 'ajax_search_available_numbers');
|
||||
$this->loader->add_action('wp_ajax_twp_purchase_number', $plugin_admin, 'ajax_purchase_number');
|
||||
$this->loader->add_action('wp_ajax_twp_configure_number', $plugin_admin, 'ajax_configure_number');
|
||||
$this->loader->add_action('wp_ajax_twp_release_number', $plugin_admin, 'ajax_release_number');
|
||||
|
||||
// Queue management AJAX
|
||||
$this->loader->add_action('wp_ajax_twp_get_queue', $plugin_admin, 'ajax_get_queue');
|
||||
$this->loader->add_action('wp_ajax_twp_save_queue', $plugin_admin, 'ajax_save_queue');
|
||||
$this->loader->add_action('wp_ajax_twp_get_queue_details', $plugin_admin, 'ajax_get_queue_details');
|
||||
$this->loader->add_action('wp_ajax_twp_get_all_queues', $plugin_admin, 'ajax_get_all_queues');
|
||||
$this->loader->add_action('wp_ajax_twp_delete_queue', $plugin_admin, 'ajax_delete_queue');
|
||||
$this->loader->add_action('wp_ajax_twp_get_dashboard_stats', $plugin_admin, 'ajax_get_dashboard_stats');
|
||||
|
||||
// Eleven Labs AJAX
|
||||
$this->loader->add_action('wp_ajax_twp_get_elevenlabs_voices', $plugin_admin, 'ajax_get_elevenlabs_voices');
|
||||
$this->loader->add_action('wp_ajax_twp_get_elevenlabs_models', $plugin_admin, 'ajax_get_elevenlabs_models');
|
||||
$this->loader->add_action('wp_ajax_twp_preview_voice', $plugin_admin, 'ajax_preview_voice');
|
||||
|
||||
// Voicemail management AJAX
|
||||
$this->loader->add_action('wp_ajax_twp_get_voicemail', $plugin_admin, 'ajax_get_voicemail');
|
||||
$this->loader->add_action('wp_ajax_twp_delete_voicemail', $plugin_admin, 'ajax_delete_voicemail');
|
||||
$this->loader->add_action('wp_ajax_twp_transcribe_voicemail', $plugin_admin, 'ajax_transcribe_voicemail');
|
||||
|
||||
// Agent group management AJAX
|
||||
$this->loader->add_action('wp_ajax_twp_get_all_groups', $plugin_admin, 'ajax_get_all_groups');
|
||||
$this->loader->add_action('wp_ajax_twp_get_group', $plugin_admin, 'ajax_get_group');
|
||||
$this->loader->add_action('wp_ajax_twp_save_group', $plugin_admin, 'ajax_save_group');
|
||||
$this->loader->add_action('wp_ajax_twp_delete_group', $plugin_admin, 'ajax_delete_group');
|
||||
$this->loader->add_action('wp_ajax_twp_get_group_members', $plugin_admin, 'ajax_get_group_members');
|
||||
$this->loader->add_action('wp_ajax_twp_add_group_member', $plugin_admin, 'ajax_add_group_member');
|
||||
$this->loader->add_action('wp_ajax_twp_remove_group_member', $plugin_admin, 'ajax_remove_group_member');
|
||||
|
||||
// Agent queue management AJAX
|
||||
$this->loader->add_action('wp_ajax_twp_accept_call', $plugin_admin, 'ajax_accept_call');
|
||||
$this->loader->add_action('wp_ajax_twp_get_waiting_calls', $plugin_admin, 'ajax_get_waiting_calls');
|
||||
$this->loader->add_action('wp_ajax_twp_set_agent_status', $plugin_admin, 'ajax_set_agent_status');
|
||||
|
||||
// Callback and outbound call AJAX
|
||||
$this->loader->add_action('wp_ajax_twp_request_callback', $plugin_admin, 'ajax_request_callback');
|
||||
$this->loader->add_action('wp_ajax_twp_initiate_outbound_call', $plugin_admin, 'ajax_initiate_outbound_call');
|
||||
$this->loader->add_action('wp_ajax_twp_initiate_outbound_call_with_from', $plugin_admin, 'ajax_initiate_outbound_call_with_from');
|
||||
$this->loader->add_action('wp_ajax_twp_get_callbacks', $plugin_admin, 'ajax_get_callbacks');
|
||||
}
|
||||
|
||||
/**
|
||||
* Register public hooks
|
||||
*/
|
||||
private function define_public_hooks() {
|
||||
// Webhook endpoints
|
||||
$webhooks = new TWP_Webhooks();
|
||||
$this->loader->add_action('init', $webhooks, 'register_endpoints');
|
||||
|
||||
// Initialize Agent Manager
|
||||
TWP_Agent_Manager::init();
|
||||
|
||||
// Scheduled events
|
||||
$scheduler = new TWP_Scheduler();
|
||||
$this->loader->add_action('twp_check_schedules', $scheduler, 'check_active_schedules');
|
||||
|
||||
$queue = new TWP_Call_Queue();
|
||||
$this->loader->add_action('twp_process_queue', $queue, 'process_waiting_calls');
|
||||
|
||||
// Callback processing
|
||||
$this->loader->add_action('twp_process_callbacks', 'TWP_Callback_Manager', 'process_callbacks');
|
||||
|
||||
// Schedule cron events
|
||||
if (!wp_next_scheduled('twp_check_schedules')) {
|
||||
wp_schedule_event(time(), 'twp_every_minute', 'twp_check_schedules');
|
||||
}
|
||||
|
||||
if (!wp_next_scheduled('twp_process_queue')) {
|
||||
wp_schedule_event(time(), 'twp_every_30_seconds', 'twp_process_queue');
|
||||
}
|
||||
|
||||
if (!wp_next_scheduled('twp_process_callbacks')) {
|
||||
wp_schedule_event(time(), 'twp_every_minute', 'twp_process_callbacks');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register API hooks
|
||||
*/
|
||||
private function define_api_hooks() {
|
||||
// REST API endpoints
|
||||
add_action('rest_api_init', function() {
|
||||
register_rest_route('twilio-wp/v1', '/schedules', array(
|
||||
'methods' => 'GET',
|
||||
'callback' => array('TWP_Scheduler', 'get_schedules'),
|
||||
'permission_callback' => function() {
|
||||
return current_user_can('manage_options');
|
||||
}
|
||||
));
|
||||
|
||||
register_rest_route('twilio-wp/v1', '/workflows', array(
|
||||
'methods' => 'GET',
|
||||
'callback' => array('TWP_Workflow', 'get_workflows'),
|
||||
'permission_callback' => function() {
|
||||
return current_user_can('manage_options');
|
||||
}
|
||||
));
|
||||
|
||||
register_rest_route('twilio-wp/v1', '/queue-status', array(
|
||||
'methods' => 'GET',
|
||||
'callback' => array('TWP_Call_Queue', 'get_queue_status'),
|
||||
'permission_callback' => function() {
|
||||
return current_user_can('manage_options');
|
||||
}
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the loader
|
||||
*/
|
||||
public function run() {
|
||||
// Add custom cron schedules
|
||||
add_filter('cron_schedules', function($schedules) {
|
||||
$schedules['twp_every_minute'] = array(
|
||||
'interval' => 60,
|
||||
'display' => __('Every Minute', 'twilio-wp-plugin')
|
||||
);
|
||||
$schedules['twp_every_30_seconds'] = array(
|
||||
'interval' => 30,
|
||||
'display' => __('Every 30 Seconds', 'twilio-wp-plugin')
|
||||
);
|
||||
return $schedules;
|
||||
});
|
||||
|
||||
$this->loader->run();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get plugin name
|
||||
*/
|
||||
public function get_plugin_name() {
|
||||
return $this->plugin_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get version
|
||||
*/
|
||||
public function get_version() {
|
||||
return $this->version;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user