Add SDK persistence and configurable edge location
All checks were successful
Create Release / build (push) Successful in 4s
All checks were successful
Create Release / build (push) Successful in 4s
- Add external SDK installation (wp-content/twilio-sdk/) that survives WordPress plugin updates - Add install-twilio-sdk-external.sh script for external SDK setup - Update SDK loading to check external location first, internal fallback - Add post-update detection hook to warn if SDK was deleted - Add configurable Twilio Edge Location setting (default: roaming) - Fix US calls failing due to hardcoded Sydney edge location Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -20,6 +20,8 @@ define('TWP_DB_VERSION', '1.6.2'); // Track database version separately
|
||||
define('TWP_PLUGIN_DIR', plugin_dir_path(__FILE__));
|
||||
define('TWP_PLUGIN_URL', plugin_dir_url(__FILE__));
|
||||
define('TWP_PLUGIN_BASENAME', plugin_basename(__FILE__));
|
||||
// External SDK location - survives plugin updates (wp-content/twilio-sdk/)
|
||||
define('TWP_EXTERNAL_SDK_DIR', dirname(dirname(TWP_PLUGIN_DIR)) . '/twilio-sdk/');
|
||||
|
||||
/**
|
||||
* Plugin activation hook
|
||||
@@ -31,17 +33,27 @@ function twp_activate() {
|
||||
|
||||
/**
|
||||
* Check if Twilio SDK is installed and show admin notice if not
|
||||
* Checks external location first (survives plugin updates), then internal fallback
|
||||
*/
|
||||
function twp_check_sdk_installation() {
|
||||
$autoloader_path = TWP_PLUGIN_DIR . 'vendor/autoload.php';
|
||||
$sdk_installed = false;
|
||||
|
||||
if (file_exists($autoloader_path)) {
|
||||
// Try to load autoloader and check for classes
|
||||
require_once $autoloader_path;
|
||||
|
||||
// Priority 1: Check external SDK location (survives plugin updates)
|
||||
$external_autoloader = TWP_EXTERNAL_SDK_DIR . 'autoload.php';
|
||||
if (file_exists($external_autoloader)) {
|
||||
require_once $external_autoloader;
|
||||
$sdk_installed = class_exists('Twilio\Rest\Client');
|
||||
}
|
||||
|
||||
|
||||
// Priority 2: Fall back to internal vendor directory
|
||||
if (!$sdk_installed) {
|
||||
$internal_autoloader = TWP_PLUGIN_DIR . 'vendor/autoload.php';
|
||||
if (file_exists($internal_autoloader)) {
|
||||
require_once $internal_autoloader;
|
||||
$sdk_installed = class_exists('Twilio\Rest\Client');
|
||||
}
|
||||
}
|
||||
|
||||
if (!$sdk_installed) {
|
||||
add_action('admin_notices', 'twp_sdk_missing_notice');
|
||||
}
|
||||
@@ -55,10 +67,12 @@ function twp_sdk_missing_notice() {
|
||||
<div class="notice notice-error is-dismissible">
|
||||
<h3>Twilio WordPress Plugin - SDK Required</h3>
|
||||
<p><strong>The Twilio PHP SDK is required for this plugin to work.</strong></p>
|
||||
<p>To install the SDK, run this command in your plugin directory:</p>
|
||||
<p><strong>Recommended:</strong> Install SDK to external location (survives plugin updates):</p>
|
||||
<code>chmod +x install-twilio-sdk-external.sh && ./install-twilio-sdk-external.sh</code>
|
||||
<p style="margin-top: 10px;"><strong>Alternative:</strong> Install SDK inside plugin folder:</p>
|
||||
<code>chmod +x install-twilio-sdk.sh && ./install-twilio-sdk.sh</code>
|
||||
<p>Or install via Composer: <code>composer install</code></p>
|
||||
<p><em>Plugin path: <?php echo TWP_PLUGIN_DIR; ?></em></p>
|
||||
<p style="margin-top: 10px;"><em>Plugin path: <?php echo esc_html(TWP_PLUGIN_DIR); ?></em></p>
|
||||
<p><em>External SDK path: <?php echo esc_html(TWP_EXTERNAL_SDK_DIR); ?></em></p>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
@@ -126,6 +140,52 @@ function twp_deactivate() {
|
||||
register_activation_hook(__FILE__, 'twp_activate');
|
||||
register_deactivation_hook(__FILE__, 'twp_deactivate');
|
||||
|
||||
/**
|
||||
* Check SDK status after plugin updates
|
||||
* Shows warning if SDK was deleted during update and external SDK not available
|
||||
*/
|
||||
function twp_check_sdk_after_update($upgrader_object, $options) {
|
||||
// Only run for plugin updates
|
||||
if ($options['action'] !== 'update' || $options['type'] !== 'plugin') {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if this plugin was updated
|
||||
$updated_plugins = isset($options['plugins']) ? $options['plugins'] : array();
|
||||
if (!in_array(TWP_PLUGIN_BASENAME, $updated_plugins)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if SDK is available
|
||||
$external_sdk = file_exists(TWP_EXTERNAL_SDK_DIR . 'autoload.php');
|
||||
$internal_sdk = file_exists(TWP_PLUGIN_DIR . 'vendor/autoload.php');
|
||||
|
||||
if (!$external_sdk && !$internal_sdk) {
|
||||
// Set a transient to show warning on next admin page load
|
||||
set_transient('twp_sdk_update_warning', true, 60 * 5);
|
||||
}
|
||||
}
|
||||
add_action('upgrader_process_complete', 'twp_check_sdk_after_update', 10, 2);
|
||||
|
||||
/**
|
||||
* Show SDK update warning
|
||||
*/
|
||||
function twp_show_sdk_update_warning() {
|
||||
if (get_transient('twp_sdk_update_warning')) {
|
||||
delete_transient('twp_sdk_update_warning');
|
||||
?>
|
||||
<div class="notice notice-warning is-dismissible">
|
||||
<h3>Twilio WordPress Plugin - SDK Reinstall Required</h3>
|
||||
<p><strong>The plugin was updated and the Twilio SDK needs to be reinstalled.</strong></p>
|
||||
<p>To prevent this in the future, install the SDK to the external location:</p>
|
||||
<code>cd <?php echo esc_html(TWP_PLUGIN_DIR); ?> && ./install-twilio-sdk-external.sh</code>
|
||||
<p style="margin-top: 10px;">The external SDK at <code><?php echo esc_html(TWP_EXTERNAL_SDK_DIR); ?></code> survives plugin updates.</p>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
add_action('admin_notices', 'twp_show_sdk_update_warning');
|
||||
|
||||
/**
|
||||
* Core plugin class
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user