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:
204
lib/migrate/migrate1.php
Normal file
204
lib/migrate/migrate1.php
Normal file
@@ -0,0 +1,204 @@
|
||||
<?php
|
||||
|
||||
namespace WebPExpress;
|
||||
|
||||
use \WebPExpress\Config;
|
||||
use \WebPExpress\HTAccess;
|
||||
use \WebPExpress\Messenger;
|
||||
use \WebPExpress\Option;
|
||||
use \WebPExpress\Paths;
|
||||
|
||||
// On successful migration:
|
||||
// Option::updateOption('webp-express-migration-version', '1', true);
|
||||
|
||||
function webp_express_migrate1_createFolders()
|
||||
{
|
||||
if (!Paths::createContentDirIfMissing()) {
|
||||
Messenger::printMessage(
|
||||
'error',
|
||||
'For migration to 0.5.0, WebP Express needs to create a directory "webp-express" under your wp-content folder, but does not have permission to do so.<br>' .
|
||||
'Please create the folder manually, or change the file permissions of your wp-content folder.'
|
||||
);
|
||||
return false;
|
||||
} else {
|
||||
if (!Paths::createConfigDirIfMissing()) {
|
||||
Messenger::printMessage(
|
||||
'error',
|
||||
'For migration to 0.5.0, WebP Express needs to create a directory "webp-express/config" under your wp-content folder, but does not have permission to do so.<br>' .
|
||||
'Please create the folder manually, or change the file permissions.'
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
if (!Paths::createCacheDirIfMissing()) {
|
||||
Messenger::printMessage(
|
||||
'error',
|
||||
'For migration to 0.5.0, WebP Express needs to create a directory "webp-express/webp-images" under your wp-content folder, but does not have permission to do so.<br>' .
|
||||
'Please create the folder manually, or change the file permissions.'
|
||||
);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function webp_express_migrate1_createDummyConfigFiles()
|
||||
{
|
||||
// TODO...
|
||||
return true;
|
||||
}
|
||||
|
||||
function webpexpress_migrate1_migrateOptions()
|
||||
{
|
||||
$converters = json_decode(Option::getOption('webp_express_converters', '[]'), true);
|
||||
foreach ($converters as &$converter) {
|
||||
unset ($converter['id']);
|
||||
}
|
||||
|
||||
$options = [
|
||||
'image-types' => intval(Option::getOption('webp_express_image_types_to_convert', 1)),
|
||||
'max-quality' => intval(Option::getOption('webp_express_max_quality', 80)),
|
||||
'fail' => Option::getOption('webp_express_failure_response', 'original'),
|
||||
'converters' => $converters,
|
||||
'forward-query-string' => true
|
||||
];
|
||||
if ($options['max-quality'] == 0) {
|
||||
$options['max-quality'] = 80;
|
||||
if ($options['image-types'] == 0) {
|
||||
$options['image-types'] = 1;
|
||||
}
|
||||
}
|
||||
if ($options['converters'] == null) {
|
||||
$options['converters'] = [];
|
||||
}
|
||||
|
||||
// TODO: Save
|
||||
//Messenger::addMessage('info', 'Options: <pre>' . print_r($options, true) . '</pre>');
|
||||
// $htaccessExists = Config::doesHTAccessExists();
|
||||
|
||||
$config = $options;
|
||||
|
||||
//$htaccessExists = Config::doesHTAccessExists();
|
||||
//$rules = HTAccess::generateHTAccessRulesFromConfigObj($config);
|
||||
|
||||
if (Config::saveConfigurationFile($config)) {
|
||||
$options = Config::generateWodOptionsFromConfigObj($config);
|
||||
if (Config::saveWodOptionsFile($options)) {
|
||||
|
||||
Messenger::addMessage(
|
||||
'success',
|
||||
'WebP Express has successfully migrated its configuration to 0.5.0'
|
||||
);
|
||||
|
||||
//Config::saveConfigurationAndHTAccessFilesWithMessages($config, 'migrate');
|
||||
//$rulesResult = HTAccess::saveRules($config); // Commented out because rules are going to be saved in migrate12
|
||||
/*
|
||||
'mainResult' // 'index', 'wp-content' or 'failed'
|
||||
'minRequired' // 'index' or 'wp-content'
|
||||
'pluginToo' // 'yes', 'no' or 'depends'
|
||||
'pluginFailed' // true if failed to write to plugin folder (it only tries that, if pluginToo == 'yes')
|
||||
'pluginFailedBadly' // true if plugin failed AND it seems we have rewrite rules there
|
||||
'overidingRulesInWpContentWarning' // true if main result is 'index' but we cannot remove those in wp-content
|
||||
'rules' // the rules that were generated
|
||||
*/
|
||||
/*
|
||||
$mainResult = $rulesResult['mainResult'];
|
||||
$rules = $rulesResult['rules'];
|
||||
|
||||
if ($mainResult != 'failed') {
|
||||
Messenger::addMessage(
|
||||
'success',
|
||||
'WebP Express has successfully migrated its configuration and updated the rewrite rules to 0.5.0'
|
||||
);
|
||||
} else {
|
||||
Messenger::addMessage(
|
||||
'warning',
|
||||
'WebP Express has successfully migrated its configuration.' .
|
||||
'However, WebP Express could not update the rewrite rules<br>' .
|
||||
'You need to change some permissions. Head to the ' .
|
||||
'<a href="' . Paths::getSettingsUrl() . '">settings page</a> ' .
|
||||
'and try to save the settings there (it will provide more information about the problem)'
|
||||
);
|
||||
}
|
||||
*/
|
||||
} else {
|
||||
Messenger::addMessage(
|
||||
'error',
|
||||
'For migration to 0.5.0, WebP Express failed saving options file. ' .
|
||||
'You must grant us write access to your wp-config folder.<br>' .
|
||||
'Tried to save to: "' . Paths::getWodOptionsFileName() . '"' .
|
||||
'Fix the file permissions and reload<br>'
|
||||
);
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
Messenger::addMessage(
|
||||
'error',
|
||||
'For migration to 0.5.0, WebP Express failed saving configuration file.<br>' .
|
||||
'You must grant us write access to your wp-config folder.<br>' .
|
||||
'Tried to save to: "' . Paths::getConfigFileName() . '"' .
|
||||
'Fix the file permissions and reload<br>'
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
||||
//saveConfigurationFile
|
||||
//return $options;
|
||||
return true;
|
||||
}
|
||||
|
||||
function webpexpress_migrate1_deleteOldOptions() {
|
||||
$optionsToDelete = [
|
||||
'webp_express_max_quality',
|
||||
'webp_express_image_types_to_convert',
|
||||
'webp_express_failure_response',
|
||||
'webp_express_converters',
|
||||
'webp-express-inserted-rules-ok',
|
||||
'webp-express-configured',
|
||||
'webp-express-pending-messages',
|
||||
'webp-express-just-activated',
|
||||
'webp-express-message-pending',
|
||||
'webp-express-failed-inserting-rules',
|
||||
'webp-express-deactivate',
|
||||
'webp_express_fail_action',
|
||||
'webp_express_method',
|
||||
'webp_express_quality'
|
||||
|
||||
];
|
||||
foreach ($optionsToDelete as $i => $optionName) {
|
||||
Option::deleteOption($optionName);
|
||||
}
|
||||
}
|
||||
|
||||
/* helper. Remove dir recursively. No warnings - fails silently */
|
||||
function webpexpress_migrate1_rrmdir($dir) {
|
||||
if (@is_dir($dir)) {
|
||||
$objects = @scandir($dir);
|
||||
foreach ($objects as $object) {
|
||||
if ($object != "." && $object != "..") {
|
||||
if (@is_dir($dir."/".$object))
|
||||
webpexpress_migrate1_rrmdir($dir."/".$object);
|
||||
else
|
||||
@unlink($dir."/".$object);
|
||||
}
|
||||
}
|
||||
@rmdir($dir);
|
||||
}
|
||||
}
|
||||
|
||||
function webpexpress_migrate1_deleteOldWebPImages() {
|
||||
$upload_dir = wp_upload_dir();
|
||||
$destinationRoot = trailingslashit($upload_dir['basedir']) . 'webp-express';
|
||||
webpexpress_migrate1_rrmdir($destinationRoot);
|
||||
}
|
||||
|
||||
if (webp_express_migrate1_createFolders()) {
|
||||
if (webp_express_migrate1_createDummyConfigFiles()) {
|
||||
if (webpexpress_migrate1_migrateOptions()) {
|
||||
webpexpress_migrate1_deleteOldOptions();
|
||||
webpexpress_migrate1_deleteOldWebPImages();
|
||||
Option::updateOption('webp-express-migration-version', '1');
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user