Адаптация существующих модулей и тем под CS-Cart 4.21.2

Изменения в ядре

Изменения в классе TyghHttp

Теперь транспорт явно определяет поддерживаемые схемы URL в Tygh\Http::SUPPORTED_SCHEMES (http, https, ftp, ftps). URL запроса принимается только в том случае, если он использует одну из этих схем и содержит имя хоста; то же правило применяется к URL, на который выполняется перенаправление: если его схема отсутствует в списке поддерживаемых, запрос завершается с ошибкой. Список поддерживаемых схем также передается дескриптору cURL с помощью CURLOPT_PROTOCOLS и CURLOPT_REDIR_PROTOCOLS. Благодаря этому транспорт работает одинаково во всех поддерживаемых версиях libcurl и конфигурациях PHP.

Если ваш модуль передает в Tygh\Http или в функцию, использующую этот класс, URL с другой схемой, используйте вместо этого API соответствующего протокола напрямую.

Состояние ответа (Tygh\Http::getError(), Tygh\Http::getErrorFields(), Tygh\Http::getHeaders(), Tygh\Http::getStatus()) относится к одному запросу. При начале запроса это состояние сбрасывается, поэтому оно всегда содержит информацию о только что выполненном запросе.

Изменения в функции fn_check_user_type()

Ключ `create_vendor_admin key в данных пользователя больше не учитывается при определении типа пользователя.

Чтобы создать администратора продавца, установите ключ реестра runtime.users.allow_vendor_admin_creation перед вызовом fn_update_user()` и явно передайте тип пользователя:

Registry::set('runtime.users.allow_vendor_admin_creation', true);

try {
    list($user_id) = fn_update_user(0, $user_data, $auth, false, $notify);
} finally {
    Registry::del('runtime.users.allow_vendor_admin_creation');
}

Новые функции

  • Tygh\Http::isSupportedUrl($url) - проверяет, поддерживает ли транспорт указанный URL: URL должен использовать поддерживаемую схему и содержать имя хоста.
  • Tygh\Shippings\PickupPoints\Repository::getPickupPointExtraData($provider, $pickup_point_code) - получает дополнительные данные службы для указанного пункта самовывоза.
  • Tygh\Shippings\PickupPoints\Repository::storePickupPoints(array $pickup_points, $cache_key) - сохраняет часть пунктов самовывоза. Состояние синхронизации устанавливается отдельно с помощью setPickupPointSyncState().
  • Tygh\Shippings\PickupPoints\Dto\LookupData\PickupPointsLookupContext::isExtraDataRequired() - проверяет, требуется ли загружать дополнительные данные службы для пунктов самовывоза.
  • Tygh\Shippings\PickupPoints\Dto\LookupData\PickupPointsLookupContext::setExtraDataRequired($is_extra_data_required) - устанавливает, требуется ли загружать дополнительные данные службы для пунктов самовывоза.

Измененные функции

  • fn_get_contents($location, $base_dir = '', $timeout = null) - ресурс по URL загружается только в том случае, если Tygh\Http::isSupportedUrl() определяет URL как поддерживаемый. В противном случае функция возвращает пустую строку. Обычный путь к файлу в файловой системе обрабатывается без изменений. Сигнатура функции не изменилась.
- Tygh\Shippings\PickupPoints\Repository::findPickupPointsByProviderAndCacheKey($provider, $cache_key)
+ Tygh\Shippings\PickupPoints\Repository::findPickupPointsByProviderAndCacheKey($provider, $cache_key, $with_extra_data = true)

Новые настройки

  • $config['tweaks']['yandex_delivery_rate_cache_ttl'] - время в секундах, в течение которого рассчитанный тариф из калькулятора Яндекс Доставки может использоваться повторно, прежде чем калькулятор будет вызван снова. Значение по умолчанию — 600.

Менеджер файлов

Загрузка удаленных файлов ограничена сетевыми протоколами

При загрузке файла по URL используются протоколы http, https, ftp и ftps. Эти ограничения применяются как к самому запросу, так и к перенаправлениям, во всех поддерживаемых версиях libcurl.

  • elFinder::restrictCurlProtocols($curl) - применяет список поддерживаемых протоколов к дескриптору cURL. Используйте этот метод для собственного дескриптора, если он выполняет запросы с перенаправлениями.