Пропала поддержка SVG лого в 4.18.1

Поддержка svg логотипов была введена с версии 4.15.1, сейчас же снова идет ошибка при загрузке svg лого:
Ошибка Файлы с расширением .svg не могут быть загружены.
Это баг или целенаправленный откат? Очень мешает, потому что все наши логотипы смотрятся хорошо только в формате SVG
** ОБНОВЛЕНО: Проблема решается в конфиг файле **

@AlexBern Подскажите пожалуйста, решили проблему как?

У меня 4.18.1 стоят логотипы в svg формате, создал новый макет т.к АВ выпустили новые макеты 10ult, так вот, на одном макете стоят svg а в новый макет не могу загрузить, пишет: Ошибка Файлы с расширением .svg не могут быть загружены. :neutral_face:

@ikoshkin @Asya @Tanya о таких вещах следует предупреждать в документации, вы проверили вообще воспроизвели проблему? Уже больше месяца прошло как человек написал пост, тишина…

1 лайк

У меня даже с модулем Add-ons :: Content (galleries, look) :: Logo in SVG от @makeshop.pro не грузится лого в svg, пишет Файлы с расширением .svg не могут быть загружены. @ikoshkin @Asya на 4.17.2 спокойно грузится, а на 4.18.1 не дает.

Видимо надо что-то гадкое написать чтобы отреагировали :face_with_diagonal_mouth:
Или написать на НЕрусскоязычном форуме т.к там @cs-cart_team жжет ответами, а тут нужно вытягивать, заходят все по 4-5 раза в день и хоть бы один ответил! Хочу сказать так я вам мои сладкие Голосовое сообщение :speaking_head: :studio_microphone: 1ч23м59с

1 лайк

Здравствуйте, @AlexBern и @ARTUR

Спасибо за ваше сообщение.

В версии 4.18.1 наши разработчики убрали формат SVG из допустимых форматов для загрузки изображений из соображений безопасности: в файле .svg может быть JavaScript.

К сожалению, информация об этом изменении по ошибке не попала в новость о выпуске версии 4.18.1 и в changelog. Приносим свои извинения за доставленные неудобства.

Если вы хотите и дальше пользоваться форматом SVG, вы можете внести следующие изменения в файл config.php вашей установки:

  1. Убрать строку
    'svg',

из

// List of forbidden file extensions (for uploaded files)$config['forbidden_file_extensions'] = array (    'php',    'php3',    'pl',    'com',    'exe',    'bat',    'cgi',    'htaccess',    'svg',);
  1. Убрать строку
'image/svg+xml',

из

$config['forbidden_mime_types'] = array (    'text/x-php',    'text/x-perl',    'text/x-python',    'text/x-shellscript',    'application/x-executable',    'application/x-ms-dos-executable',    'application/x-cgi',    'application/x-extension-htaccess',    'application/x-msdownload',    'image/svg+xml',);
  1. Добавить строку
'svg',

в

$config['allowed_image_extensions'] = [    'jpg',    'jpeg',    'png',    'gif',    'ico',    'webp',];

Также в файл /app/Tygh/Tools/ImageHelper.php нужно добавить следующий код:

    if ($object_type === 'logos') {
        if (!in_array('svg', $supported_formats)) {
            $supported_formats[] = 'svg';
        }
    } elseif (in_array('svg', $supported_formats)) {
        $supported_formats = array_filter($supported_formats, static function ($supported_format) {
            return $supported_format !== 'svg';
        });
    }

после

public static function getSupportedFormats($object_type = 'all')
{
    $imagine = Tygh::$app['image'];
    $supported_formats = array();

    if ($imagine instanceof \Imagine\Imagick\Imagine) {
        $imagick = new \Imagick();

        $supported_formats = array_uintersect(Registry::get('config.allowed_image_extensions'), $imagick->queryFormats(), 'strcasecmp');
        $supported_formats = array_map('strtolower', $supported_formats);
        $imagick->clear();
        $imagick->destroy();
        unset($imagick);
    } elseif ($imagine instanceof \Imagine\Gd\Imagine) {
        $gd_formats = imagetypes();

        if ($gd_formats & IMG_JPEG) {
            $supported_formats[] = 'jpg';
            $supported_formats[] = 'jpeg';
        }
        if ($gd_formats & IMG_PNG) {
            $supported_formats[] = 'png';
        }
        if ($gd_formats & IMG_GIF) {
            $supported_formats[] = 'gif';
        }
        // phpcs:ignore
        if (defined('IMG_WEBP') && ($gd_formats & IMG_WEBP)) {
            $supported_formats[] = 'webp';
        }
        $supported_formats[] = 'ico';
    }

Чтобы не изменять файлы ядра, вы можете добавить поддержку svg через хук image_helper_get_supported_formats_post .

3 лайка