diff --git a/admin/configuration.php b/admin/configuration.php index 32ff2d9b6..4d04f8a98 100644 --- a/admin/configuration.php +++ b/admin/configuration.php @@ -355,10 +355,12 @@ WHERE param = \''.$row['param'].'\' // restore default derivatives settings if ('sizes' == $page['section'] and isset($_GET['action']) and 'restore_settings' == $_GET['action']) { - ImageStdParams::set_and_save( ImageStdParams::get_default_sizes() ); - pwg_query('DELETE FROM '.CONFIG_TABLE.' WHERE param = \'disabled_derivatives\''); + ImageStdParams::restore_default(); clear_derivative_cache(); + // reset conf + load_conf_from_db(); + $template->assign( array( 'save_success' => l10n('Your configuration settings are saved'), @@ -569,7 +571,7 @@ switch ($page['section']) // derivatives = multiple size $enabled = ImageStdParams::get_defined_type_map(); - $disabled = @unserialize(@$conf['disabled_derivatives']); + $disabled = safe_unserialize(ImageStdParams::get_disabled_type_map()); if ($disabled === false) { $disabled = array(); diff --git a/admin/include/configuration_sizes_process.inc.php b/admin/include/configuration_sizes_process.inc.php index f79a7c975..9110c835e 100644 --- a/admin/include/configuration_sizes_process.inc.php +++ b/admin/include/configuration_sizes_process.inc.php @@ -134,7 +134,7 @@ if (count($errors) == 0) ImageStdParams::$quality = intval($_POST['resize_quality']); $enabled = ImageStdParams::get_defined_type_map(); - $disabled = @unserialize( @$conf['disabled_derivatives'] ); + $disabled = safe_unserialize(ImageStdParams::get_disabled_type_map()); if ($disabled === false) { $disabled = array(); @@ -228,16 +228,7 @@ if (count($errors) == 0) } ImageStdParams::set_and_save($enabled_by); - if (count($disabled) == 0) - { - $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); + ImageStdParams::set_and_save_disabled($disabled); if (count($changed_types)) { diff --git a/admin/include/functions_upload.inc.php b/admin/include/functions_upload.inc.php index 1f0fa325b..1ffb18c0a 100644 --- a/admin/include/functions_upload.inc.php +++ b/admin/include/functions_upload.inc.php @@ -1105,7 +1105,7 @@ function get_optimal_dimensions_for_representative() global $conf; $enabled = ImageStdParams::get_defined_type_map(); - $disabled = @unserialize(@$conf['disabled_derivatives']); + $disabled = safe_unserialize(ImageStdParams::get_disabled_type_map()); if ($disabled === false) { $disabled = array(); diff --git a/include/derivative_std_params.inc.php b/include/derivative_std_params.inc.php index b39428940..64bac673a 100644 --- a/include/derivative_std_params.inc.php +++ b/include/derivative_std_params.inc.php @@ -57,11 +57,15 @@ final class ImageStdParams IMG_SQUARE, IMG_THUMB, IMG_XXSMALL, IMG_XSMALL, IMG_SMALL, 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[] */ private static $all_type_map = array(); /** @var DerivativeParams[] */ private static $type_map = array(); /** @var DerivativeParams[] */ + private static $disabled_type_map = array(); + /** @var DerivativeParams[] */ private static $undefined_type_map = array(); /** @var WatermarkParams */ private static $watermark; @@ -94,6 +98,18 @@ final class ImageStdParams 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[] */ @@ -161,7 +177,8 @@ final class ImageStdParams else { 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::build_maps(); @@ -199,6 +216,39 @@ final class ImageStdParams 'c' => self::$custom, ) ); 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 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' * diff --git a/install/db/177-database.php b/install/db/177-database.php index 259c901f2..921d59108 100644 --- a/install/db/177-database.php +++ b/install/db/177-database.php @@ -11,54 +11,25 @@ if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!'); } -global $conf; +$upgrade_description = 'Add 3XL and 4XL sizes (disabled by default)'; + 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 $default_sizes = ImageStdParams::get_default_sizes(); -//Get 3XL and 4XL from default values -$default_derivative_3XL = $default_sizes['3xlarge']; -$default_derivative_4XL = $default_sizes['4xlarge']; +// set new derivatives to add +$new_derivatives = array(IMG_3XLARGE, IMG_4XLARGE); -//We need to make sure that a user hasn't redefined the XXL size bigger than the default 3XL -//Get xxl size -$xxl = $derivatives['d']['xxlarge']; -$xxl_height = $xxl->sizing->ideal_size[0]; -$xxl_width = $xxl->sizing->ideal_size[1]; +// get current disabled derivative_std_params +$disabled_derivatives = safe_unserialize(ImageStdParams::get_disabled_type_map()); -//get 3xl size -$triple_xl_height = $default_sizes['3xlarge']->sizing->ideal_size[0]; -$triple_xl_width = $default_sizes['3xlarge']->sizing->ideal_size[1]; +// get the new derivative_std_params and merge with current disabled derivative_std_params +$new_disabled_derivatives = array_intersect_key($default_sizes, array_flip($new_derivatives)); +$disabled = array_merge($disabled_derivatives, $new_disabled_derivatives); -//Get 4xl size -$quad_xl_height = $default_sizes['3xlarge']->sizing->ideal_size[0]; -$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']); +// set and set new derivative_std_params in disabled list +ImageStdParams::set_and_save_disabled($disabled); echo "\n".$upgrade_description."\n"; ?> \ No newline at end of file