WebP Express CloudHost.es Fix v0.25.9-cloudhost
✅ Fixed bulk conversion getting stuck on missing files ✅ Added robust error handling and timeout protection ✅ Improved JavaScript response parsing ✅ Added file existence validation ✅ Fixed missing PHP class imports ✅ Added comprehensive try-catch error recovery 🔧 Key fixes: - File existence checks before conversion attempts - 30-second timeout protection per file - Graceful handling of 500 errors and JSON parsing issues - Automatic continuation to next file on failures - Cache busting for JavaScript updates 🎯 Result: Bulk conversion now completes successfully even with missing files 🚀 Generated with Claude Code (https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
147
lib/classes/AdminInit.php
Normal file
147
lib/classes/AdminInit.php
Normal file
@@ -0,0 +1,147 @@
|
||||
<?php
|
||||
|
||||
namespace WebPExpress;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
||||
class AdminInit
|
||||
{
|
||||
public static function init() {
|
||||
|
||||
// uncomment next line to debug an error during activation
|
||||
//include __DIR__ . "/../debug.php";
|
||||
|
||||
if (Option::getOption('webp-express-actions-pending')) {
|
||||
\WebPExpress\Actions::processQueuedActions();
|
||||
}
|
||||
|
||||
self::addHooks();
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static function runMigrationIfNeeded()
|
||||
{
|
||||
// When an update requires a migration, the number should be increased
|
||||
define('WEBPEXPRESS_MIGRATION_VERSION', '14');
|
||||
|
||||
if (WEBPEXPRESS_MIGRATION_VERSION != Option::getOption('webp-express-migration-version', 0)) {
|
||||
// run migration logic
|
||||
include WEBPEXPRESS_PLUGIN_DIR . '/lib/migrate/migrate.php';
|
||||
}
|
||||
|
||||
// uncomment next line to test-run a migration
|
||||
//include WEBPEXPRESS_PLUGIN_DIR . '/lib/migrate/migrate14.php';
|
||||
}
|
||||
|
||||
public static function pageNowIs($pageId)
|
||||
{
|
||||
global $pagenow;
|
||||
|
||||
if ((!isset($pagenow)) || (empty($pagenow))) {
|
||||
return false;
|
||||
}
|
||||
return ($pageId == $pagenow);
|
||||
}
|
||||
|
||||
|
||||
public static function addHooksAfterAdminInit()
|
||||
{
|
||||
|
||||
if (current_user_can('manage_options')) {
|
||||
|
||||
// Hooks related to conversion page (in media)
|
||||
//if (self::pageNowIs('upload.php')) {
|
||||
if (isset($_GET['page']) && ('webp_express_conversion_page' === $_GET['page'])) {
|
||||
//add_action('admin_enqueue_scripts', array('\WebPExpress\WCFMPage', 'enqueueScripts'));
|
||||
add_action('admin_head', array('\WebPExpress\WCFMPage', 'addToHead'));
|
||||
}
|
||||
//}
|
||||
|
||||
// Hooks related to options page
|
||||
if (self::pageNowIs('options-general.php') || self::pageNowIs('settings.php')) {
|
||||
if (isset($_GET['page']) && ('webp_express_settings_page' === $_GET['page'])) {
|
||||
add_action('admin_enqueue_scripts', array('\WebPExpress\OptionsPage', 'enqueueScripts'));
|
||||
}
|
||||
}
|
||||
|
||||
// Hooks related to plugins page
|
||||
if (self::pageNowIs('plugins.php')) {
|
||||
add_action('admin_enqueue_scripts', array('\WebPExpress\PluginPageScript', 'enqueueScripts'));
|
||||
}
|
||||
|
||||
add_action("admin_post_webpexpress_settings_submit", array('\WebPExpress\OptionsPageHooks', 'submitHandler'));
|
||||
|
||||
|
||||
// Ajax actions
|
||||
add_action('wp_ajax_list_unconverted_files', array('\WebPExpress\BulkConvert', 'processAjaxListUnconvertedFiles'));
|
||||
add_action('wp_ajax_convert_file', array('\WebPExpress\Convert', 'processAjaxConvertFile'));
|
||||
add_action('wp_ajax_webpexpress_view_log', array('\WebPExpress\ConvertLog', 'processAjaxViewLog'));
|
||||
add_action('wp_ajax_webpexpress_purge_cache', array('\WebPExpress\CachePurge', 'processAjaxPurgeCache'));
|
||||
add_action('wp_ajax_webpexpress_purge_log', array('\WebPExpress\LogPurge', 'processAjaxPurgeLog'));
|
||||
add_action('wp_ajax_webpexpress_dismiss_message', array('\WebPExpress\DismissableMessages', 'processAjaxDismissMessage'));
|
||||
add_action('wp_ajax_webpexpress_dismiss_global_message', array('\WebPExpress\DismissableGlobalMessages', 'processAjaxDismissGlobalMessage'));
|
||||
add_action('wp_ajax_webpexpress_self_test', array('\WebPExpress\SelfTest', 'processAjax'));
|
||||
add_action('wp_ajax_webpexpress-wcfm-api', array('\WebPExpress\WCFMApi', 'processRequest'));
|
||||
|
||||
|
||||
// Add settings link on the plugins list page
|
||||
add_filter('plugin_action_links_' . plugin_basename(WEBPEXPRESS_PLUGIN), array('\WebPExpress\AdminUi', 'pluginActionLinksFilter'), 10, 2);
|
||||
|
||||
// Add settings link in multisite
|
||||
add_filter('network_admin_plugin_action_links_' . plugin_basename(WEBPEXPRESS_PLUGIN), array('\WebPExpress\AdminUi', 'networkPluginActionLinksFilter'), 10, 2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static function addHooks()
|
||||
{
|
||||
|
||||
// Plugin activation, deactivation and uninstall
|
||||
register_activation_hook(WEBPEXPRESS_PLUGIN, array('\WebPExpress\PluginActivate', 'activate'));
|
||||
register_deactivation_hook(WEBPEXPRESS_PLUGIN, array('\WebPExpress\PluginDeactivate', 'deactivate'));
|
||||
register_uninstall_hook(WEBPEXPRESS_PLUGIN, array('\WebPExpress\PluginUninstall', 'uninstall'));
|
||||
|
||||
/*$start = microtime(true);
|
||||
BiggerThanSourceDummyFilesBulk::updateStatus(Config::loadConfig());
|
||||
echo microtime(true) - $start;*/
|
||||
|
||||
|
||||
// Some hooks must be registered AFTER admin_init...
|
||||
add_action("admin_init", array('\WebPExpress\AdminInit', 'addHooksAfterAdminInit'));
|
||||
|
||||
// Run migration AFTER admin_init hook (important, as insert_with_markers injection otherwise fails, see #394)
|
||||
// PS: "plugins_loaded" is to early, as insert_with_markers fails.
|
||||
// PS: Unfortunately Message::addMessage doesnt print until next load now, we should look into that.
|
||||
// PPS: It does run. It must be the Option that does not react
|
||||
//add_action("admin_init", array('\WebPExpress\AdminInit', 'runMigrationIfNeeded'));
|
||||
|
||||
add_action("admin_init", array('\WebPExpress\AdminInit', 'runMigrationIfNeeded'));
|
||||
|
||||
add_action("admin_notices", array('\WebPExpress\DismissableGlobalMessages', 'printMessages'));
|
||||
|
||||
if (Multisite::isNetworkActivated()) {
|
||||
if (is_network_admin()) {
|
||||
add_action("network_admin_menu", array('\WebPExpress\AdminUi', 'networAdminMenuHook'));
|
||||
} else {
|
||||
add_action("admin_menu", array('\WebPExpress\AdminUi', 'adminMenuHookMultisite'));
|
||||
}
|
||||
|
||||
} else {
|
||||
add_action("admin_menu", array('\WebPExpress\AdminUi', 'adminMenuHook'));
|
||||
}
|
||||
|
||||
// Print pending messages, if any
|
||||
if (Option::getOption('webp-express-messages-pending')) {
|
||||
add_action(Multisite::isNetworkActivated() ? 'network_admin_notices' : 'admin_notices', array('\WebPExpress\Messenger', 'printPendingMessages'));
|
||||
}
|
||||
|
||||
|
||||
// PS:
|
||||
// Filters for processing upload hooks in order to convert images upon upload (wp_handle_upload / image_make_intermediate_size)
|
||||
// are located in webp-express.php
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user