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:
150
lib/options/enqueue_scripts.php
Normal file
150
lib/options/enqueue_scripts.php
Normal file
@@ -0,0 +1,150 @@
|
||||
<?php
|
||||
|
||||
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
||||
|
||||
use \WebPExpress\Paths;
|
||||
use \WebPExpress\Config;
|
||||
|
||||
// Note: $ver is added to querystring. However, when it is is critical that no-one gets the cached version,
|
||||
// a change of filename is neccessary, as there is a plugin that strips version strings out there...!
|
||||
// If only one file update is critical: change the name of the file
|
||||
// If several files are critical: rename the folder (ie "js2")
|
||||
$ver = '4-cloudhost'; // note: Minimum 1.
|
||||
$jsDir = 'js';
|
||||
|
||||
if (!function_exists('webp_express_add_inline_script')) {
|
||||
function webp_express_add_inline_script($id, $script, $position) {
|
||||
if (function_exists('wp_add_inline_script')) {
|
||||
// wp_add_inline_script is available from Wordpress 4.5
|
||||
wp_add_inline_script($id, $script, $position);
|
||||
} else {
|
||||
echo '<script>' . $script . '</script>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
wp_register_script('sortable', plugins_url($jsDir . '/sortable.min.js', __FILE__), [], '1.9.0');
|
||||
wp_enqueue_script('sortable');
|
||||
|
||||
wp_register_script('daspopup', plugins_url($jsDir . '/das-popup.js', __FILE__), [], $ver);
|
||||
wp_enqueue_script('daspopup');
|
||||
|
||||
wp_register_script('escapehtml', plugins_url($jsDir . '/escapeHTML.js', __FILE__), [], $ver);
|
||||
wp_enqueue_script('escapehtml');
|
||||
|
||||
$config = Config::getConfigForOptionsPage();
|
||||
|
||||
// selftest
|
||||
wp_register_script('webpexpress_selftest', plugins_url($jsDir . '/self-test.js', __FILE__), ['escapehtml'], $ver);
|
||||
wp_enqueue_script('webpexpress_selftest');
|
||||
|
||||
// Add converter, bulk convert and whitelist script, EXCEPT for "no conversion" mode
|
||||
if (!(isset($config['operation-mode']) && ($config['operation-mode'] == 'no-conversion'))) {
|
||||
|
||||
// Remove empty options arrays.
|
||||
// These cause trouble in json because they are encoded as [] rather than {}
|
||||
|
||||
foreach ($config['converters'] as &$converter) {
|
||||
if (isset($converter['options']) && (count(array_keys($converter['options'])) == 0)) {
|
||||
unset($converter['options']);
|
||||
}
|
||||
}
|
||||
|
||||
// Converters
|
||||
// ----------
|
||||
wp_register_script('converters', plugins_url($jsDir . '/converters.js', __FILE__), ['sortable', 'daspopup', 'escapehtml'], $ver);
|
||||
|
||||
// PS: no escaping/sanitizing needed as json_encode always produces something safe
|
||||
webp_express_add_inline_script(
|
||||
'converters',
|
||||
'window.webpExpressPaths = ' . json_encode(Paths::getUrlsAndPathsForTheJavascript()) . ';',
|
||||
'before'
|
||||
);
|
||||
|
||||
// PS: no escaping/sanitizing needed as json_encode always produces something safe
|
||||
webp_express_add_inline_script(
|
||||
'converters',
|
||||
'window.converters = ' . json_encode($config['converters']) . ';',
|
||||
'before'
|
||||
);
|
||||
wp_enqueue_script('converters');
|
||||
|
||||
// Whitelist
|
||||
// ---------
|
||||
wp_register_script('whitelist', plugins_url($jsDir . '/whitelist.js', __FILE__), ['daspopup', 'escapehtml'], $ver);
|
||||
|
||||
// PS: no escaping/sanitizing needed as json_encode always produces something safe
|
||||
webp_express_add_inline_script('whitelist', 'window.whitelist = ' . json_encode($config['web-service']['whitelist']) . ';', 'before');
|
||||
wp_enqueue_script('whitelist');
|
||||
|
||||
// bulk convert
|
||||
wp_register_script('bulkconvert', plugins_url($jsDir . '/bulk-convert.js', __FILE__), ['escapehtml'], $ver);
|
||||
wp_enqueue_script('bulkconvert');
|
||||
|
||||
// test convert
|
||||
wp_register_script('testconvert', plugins_url($jsDir . '/test-convert.js', __FILE__), ['escapehtml'], $ver);
|
||||
$canDisplayWebp = (isset($_SERVER['HTTP_ACCEPT']) && (strpos($_SERVER['HTTP_ACCEPT'], 'image/webp') !== false ));
|
||||
|
||||
/*
|
||||
AlterHTMLHelper::getWebPUrlInImageRoot(
|
||||
Paths::getPluginUrl() . '/webp-express', // source url
|
||||
$baseId,
|
||||
Paths::getPluginUrl(), // base url
|
||||
Paths::getPluginDirAbs() // base dir
|
||||
);
|
||||
|
||||
getRelUrlPath()*/
|
||||
|
||||
webp_express_add_inline_script('testconvert', 'window.canDisplayWebp = ' . ($canDisplayWebp ? 'true' : 'false') . ';', 'before');
|
||||
wp_enqueue_script('testconvert');
|
||||
|
||||
wp_register_script('image-comparison-slider', plugins_url($jsDir . '/image-comparison-slider.js', __FILE__), [], $ver);
|
||||
wp_enqueue_script('image-comparison-slider');
|
||||
|
||||
|
||||
// purge cache
|
||||
wp_register_script('purgecache', plugins_url($jsDir . '/purge-cache.js', __FILE__), [], $ver);
|
||||
wp_enqueue_script('purgecache');
|
||||
|
||||
// purge log
|
||||
wp_register_script('purgelog', plugins_url($jsDir . '/purge-log.js', __FILE__), [], $ver);
|
||||
wp_enqueue_script('purgelog');
|
||||
|
||||
}
|
||||
|
||||
//wp_register_script('api_keys', plugins_url($jsDir . 'api-keys.js', __FILE__), ['daspopup'], '0.7.0-dev8');
|
||||
//wp_enqueue_script('api_keys');
|
||||
|
||||
wp_register_script( 'page', plugins_url($jsDir . '/page.js', __FILE__), [], $ver);
|
||||
|
||||
// TODO: Add all vars needed to this array (whitelist, converters, etc)
|
||||
$javascriptVars = [
|
||||
'ajax-nonces' => [
|
||||
'convert' => wp_create_nonce('webpexpress-ajax-convert-nonce'),
|
||||
'list-unconverted-files' => wp_create_nonce('webpexpress-ajax-list-unconverted-files-nonce'),
|
||||
'purge-cache' => wp_create_nonce('webpexpress-ajax-purge-cache-nonce'),
|
||||
'purge-log' => wp_create_nonce('webpexpress-ajax-purge-log-nonce'),
|
||||
'view-log' => wp_create_nonce('webpexpress-ajax-view-log-nonce'),
|
||||
'self-test' => wp_create_nonce('webpexpress-ajax-self-test-nonce'),
|
||||
],
|
||||
'can-use-doc-root-for-structuring' => Paths::canUseDocRootForRelPaths()
|
||||
];
|
||||
webp_express_add_inline_script(
|
||||
'page',
|
||||
'window.webpExpress = ' . json_encode($javascriptVars, JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK),
|
||||
'before'
|
||||
);
|
||||
wp_enqueue_script('page');
|
||||
|
||||
|
||||
// Register styles
|
||||
wp_register_style('webp-express-options-page-css', plugins_url('css/webp-express-options-page.css', __FILE__), null, $ver);
|
||||
wp_enqueue_style('webp-express-options-page-css');
|
||||
|
||||
wp_register_style('test-convert-css', plugins_url('css/test-convert.css', __FILE__), null, $ver);
|
||||
wp_enqueue_style('test-convert-css');
|
||||
|
||||
wp_register_style('das-popup-css', plugins_url('css/das-popup.css', __FILE__), null, $ver);
|
||||
wp_enqueue_style('das-popup-css');
|
||||
|
||||
add_thickbox();
|
||||
Reference in New Issue
Block a user