fixes #2411 disable 3xl and 4xl by default

- Add 3XL and 4XL sizes to defaults but keep them disabled by default
- Update admin restore default derivatives resets sizes and clears cache
- Update migration 177 => updates existing installs: set 3XL/4XL as disabled
This commit is contained in:
Linty
2025-09-19 18:49:05 +02:00
parent 8682a9bedc
commit 18bb865a23
5 changed files with 93 additions and 56 deletions
+5 -3
View File
@@ -355,10 +355,12 @@ WHERE param = \''.$row['param'].'\'
// restore default derivatives settings // restore default derivatives settings
if ('sizes' == $page['section'] and isset($_GET['action']) and 'restore_settings' == $_GET['action']) if ('sizes' == $page['section'] and isset($_GET['action']) and 'restore_settings' == $_GET['action'])
{ {
ImageStdParams::set_and_save( ImageStdParams::get_default_sizes() ); ImageStdParams::restore_default();
pwg_query('DELETE FROM '.CONFIG_TABLE.' WHERE param = \'disabled_derivatives\'');
clear_derivative_cache(); clear_derivative_cache();
// reset conf
load_conf_from_db();
$template->assign( $template->assign(
array( array(
'save_success' => l10n('Your configuration settings are saved'), 'save_success' => l10n('Your configuration settings are saved'),
@@ -569,7 +571,7 @@ switch ($page['section'])
// derivatives = multiple size // derivatives = multiple size
$enabled = ImageStdParams::get_defined_type_map(); $enabled = ImageStdParams::get_defined_type_map();
$disabled = @unserialize(@$conf['disabled_derivatives']); $disabled = safe_unserialize(ImageStdParams::get_disabled_type_map());
if ($disabled === false) if ($disabled === false)
{ {
$disabled = array(); $disabled = array();
@@ -134,7 +134,7 @@ if (count($errors) == 0)
ImageStdParams::$quality = intval($_POST['resize_quality']); ImageStdParams::$quality = intval($_POST['resize_quality']);
$enabled = ImageStdParams::get_defined_type_map(); $enabled = ImageStdParams::get_defined_type_map();
$disabled = @unserialize( @$conf['disabled_derivatives'] ); $disabled = safe_unserialize(ImageStdParams::get_disabled_type_map());
if ($disabled === false) if ($disabled === false)
{ {
$disabled = array(); $disabled = array();
@@ -228,16 +228,7 @@ if (count($errors) == 0)
} }
ImageStdParams::set_and_save($enabled_by); ImageStdParams::set_and_save($enabled_by);
if (count($disabled) == 0) ImageStdParams::set_and_save_disabled($disabled);
{
$query='DELETE FROM '.CONFIG_TABLE.' WHERE param = \'disabled_derivatives\'';
pwg_query($query);
}
else
{
conf_update_param('disabled_derivatives', addslashes(serialize($disabled)) );
}
$conf['disabled_derivatives'] = serialize($disabled);
if (count($changed_types)) if (count($changed_types))
{ {
+1 -1
View File
@@ -1105,7 +1105,7 @@ function get_optimal_dimensions_for_representative()
global $conf; global $conf;
$enabled = ImageStdParams::get_defined_type_map(); $enabled = ImageStdParams::get_defined_type_map();
$disabled = @unserialize(@$conf['disabled_derivatives']); $disabled = safe_unserialize(ImageStdParams::get_disabled_type_map());
if ($disabled === false) if ($disabled === false)
{ {
$disabled = array(); $disabled = array();
+74 -1
View File
@@ -57,11 +57,15 @@ final class ImageStdParams
IMG_SQUARE, IMG_THUMB, IMG_XXSMALL, IMG_XSMALL, IMG_SMALL, IMG_SQUARE, IMG_THUMB, IMG_XXSMALL, IMG_XSMALL, IMG_SMALL,
IMG_MEDIUM, IMG_LARGE, IMG_XLARGE, IMG_XXLARGE, IMG_3XLARGE, IMG_4XLARGE IMG_MEDIUM, IMG_LARGE, IMG_XLARGE, IMG_XXLARGE, IMG_3XLARGE, IMG_4XLARGE
); );
/** @var string[] */
private static $disabled_types_by_default = array(IMG_3XLARGE, IMG_4XLARGE);
/** @var DerivativeParams[] */ /** @var DerivativeParams[] */
private static $all_type_map = array(); private static $all_type_map = array();
/** @var DerivativeParams[] */ /** @var DerivativeParams[] */
private static $type_map = array(); private static $type_map = array();
/** @var DerivativeParams[] */ /** @var DerivativeParams[] */
private static $disabled_type_map = array();
/** @var DerivativeParams[] */
private static $undefined_type_map = array(); private static $undefined_type_map = array();
/** @var WatermarkParams */ /** @var WatermarkParams */
private static $watermark; private static $watermark;
@@ -94,6 +98,18 @@ final class ImageStdParams
return self::$type_map; return self::$type_map;
} }
/**
* @return DerivativeParams[]
*/
static function get_disabled_type_map()
{
if (count(self::$disabled_type_map))
{
return self::$disabled_type_map;
}
return conf_get_param('disabled_derivatives', array());
}
/** /**
* @return DerivativeParams[] * @return DerivativeParams[]
*/ */
@@ -161,7 +177,8 @@ final class ImageStdParams
else else
{ {
self::$watermark = new WatermarkParams(); self::$watermark = new WatermarkParams();
self::$type_map = self::get_default_sizes(); self::$type_map = self::get_enabled_default_sizes();
self::$disabled_type_map = self::get_disabled_default_sizes();
self::save(); self::save();
} }
self::build_maps(); self::build_maps();
@@ -199,6 +216,39 @@ final class ImageStdParams
'c' => self::$custom, 'c' => self::$custom,
) ); ) );
conf_update_param('derivatives', addslashes($ser) ); conf_update_param('derivatives', addslashes($ser) );
self::save_disabled();
}
/**
* Saves the disabled configuration in database.
*/
static function save_disabled()
{
if (count(self::$disabled_type_map) > 0)
{
$disabled = addslashes(serialize(self::$disabled_type_map));
conf_update_param('disabled_derivatives', $disabled);
}
else
{
$query='DELETE FROM '.CONFIG_TABLE.' WHERE param = \'disabled_derivatives\'';
pwg_query($query);
}
}
static function set_and_save_disabled($map)
{
self::$disabled_type_map = $map;
self::save_disabled();
}
static function restore_default()
{
self::$type_map = self::get_enabled_default_sizes();
self::$disabled_type_map = self::get_disabled_default_sizes();
self::save();
self::build_maps();
} }
/** /**
@@ -227,6 +277,29 @@ final class ImageStdParams
return $arr; return $arr;
} }
/**
* @return DerivativeParams[]
*/
static function get_enabled_default_sizes()
{
$default_sizes = self::get_default_sizes();
foreach (self::$disabled_types_by_default as $type)
{
unset($default_sizes[$type]);
}
return $default_sizes;
}
/**
* @return DerivativeParams[]
*/
static function get_disabled_default_sizes()
{
$all = self::get_default_sizes();
$disabled_sizes = array_intersect_key($all, array_flip(self::$disabled_types_by_default));
return $disabled_sizes;
}
/** /**
* Compute 'apply_watermark' * Compute 'apply_watermark'
* *
+11 -40
View File
@@ -11,54 +11,25 @@ if (!defined('PHPWG_ROOT_PATH'))
die('Hacking attempt!'); die('Hacking attempt!');
} }
global $conf; $upgrade_description = 'Add 3XL and 4XL sizes (disabled by default)';
load_conf_from_db(); load_conf_from_db();
$upgrade_description = 'Add 3XL and 4XL sizes';
//Get predefined image sizes
$derivatives = unserialize($conf['derivatives']);
//get default sizes from derivative_std_params //get default sizes from derivative_std_params
$default_sizes = ImageStdParams::get_default_sizes(); $default_sizes = ImageStdParams::get_default_sizes();
//Get 3XL and 4XL from default values // set new derivatives to add
$default_derivative_3XL = $default_sizes['3xlarge']; $new_derivatives = array(IMG_3XLARGE, IMG_4XLARGE);
$default_derivative_4XL = $default_sizes['4xlarge'];
//We need to make sure that a user hasn't redefined the XXL size bigger than the default 3XL // get current disabled derivative_std_params
//Get xxl size $disabled_derivatives = safe_unserialize(ImageStdParams::get_disabled_type_map());
$xxl = $derivatives['d']['xxlarge'];
$xxl_height = $xxl->sizing->ideal_size[0];
$xxl_width = $xxl->sizing->ideal_size[1];
//get 3xl size // get the new derivative_std_params and merge with current disabled derivative_std_params
$triple_xl_height = $default_sizes['3xlarge']->sizing->ideal_size[0]; $new_disabled_derivatives = array_intersect_key($default_sizes, array_flip($new_derivatives));
$triple_xl_width = $default_sizes['3xlarge']->sizing->ideal_size[1]; $disabled = array_merge($disabled_derivatives, $new_disabled_derivatives);
//Get 4xl size // set and set new derivative_std_params in disabled list
$quad_xl_height = $default_sizes['3xlarge']->sizing->ideal_size[0]; ImageStdParams::set_and_save_disabled($disabled);
$quad_xl_width = $default_sizes['3xlarge']->sizing->ideal_size[1];
//Set 3XL and 4xl size to be bigger than XXL if needed
if ($triple_xl_height < $xxl_height or $triple_xl_width < $xxl_width)
{
$new_3xl_height = ceil($xxl_height*1.5);
$new_3xl_width = ceil($xxl_width*1.5);
$default_sizes['3xlarge']->sizing->ideal_size[0] = $new_3xl_height;
$default_sizes['3xlarge']->sizing->ideal_size[1] = $new_3xl_width;
$default_sizes['4xlarge']->sizing->ideal_size[0] = ceil($new_3xl_width*1.5);
$default_sizes['4xlarge']->sizing->ideal_size[1] = ceil($new_3xl_width*1.5);
}
//Add new 3xl and 4xl to derivatives sizes config
$derivatives['d'][IMG_3XLARGE] = $default_sizes['3xlarge'];
$derivatives['d'][IMG_4XLARGE] = $default_sizes['4xlarge'];
// Save derivative new settings
ImageStdParams::set_and_save($derivatives['d']);
echo "\n".$upgrade_description."\n"; echo "\n".$upgrade_description."\n";
?> ?>