/
githubmirror
/
magento2
Обзор
Документация
Войти
/
githubmirror
/
magento2
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
2.4-develop
lib/internal/Magento/Framework/Parse/Zip.php
152 строки
4 KB
Alexandra Zota
ACP2E-4019: CE copyright updates for 2.4.9-beta1
22 окт 2025, 17:47
22 окт 2025, 17:47
1b769b7
Код
Авторство
О чём код?
<?php /** * Copyright 2014 Adobe * All Rights Reserved. */ /** * Various methods for parsing Zip codes * */ namespace Magento\Framework\Parse; class Zip { /** * Retrieve array of regions characterized by provided params * * @param string $state * @param string $zip * @return string[] */ public static function parseRegions($state, $zip) { return !empty($zip) && $zip != '*' ? self::parseZip($zip) : ($state ? [$state] : ['*']); } /** * Retrieve array of regions characterized by provided zip code * * @param string $zip * @return string[] */ public static function parseZip($zip) { if ($zip === null || strpos($zip, '-') === false) { return [$zip]; } else { return self::zipRangeToZipPattern($zip); } } /** * Convert a Magento zip range to an array of zip patterns * (e.g., 12000-13999 -> [12*, 13*]) * * @param string $zipRange * @return array * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public static function zipRangeToZipPattern($zipRange) { $zipLength = 5; $zipPattern = []; if (!preg_match("/^(.+)-(.+)$/", $zipRange, $zipParts)) { return [$zipRange]; } if ($zipParts[1] == $zipParts[2]) { return [$zipParts[1]]; } if ($zipParts[1] > $zipParts[2]) { list($zipParts[2], $zipParts[1]) = [$zipParts[1], $zipParts[2]]; } $from = str_split($zipParts[1]); $to = str_split($zipParts[2]); $startZip = ''; $diffPosition = null; for ($pos = 0; $pos < $zipLength; $pos++) { if ($from[$pos] == $to[$pos]) { $startZip .= $from[$pos]; } else { $diffPosition = $pos; break; } } /* * calculate zip-patterns */ if (min(array_slice($to, $diffPosition)) == 9 && max(array_slice($from, $diffPosition)) == 0) { // particular case like 11000-11999 -> 11* return [$startZip . '*']; } else { // calculate approximate zip-patterns $start = $from[$diffPosition]; $finish = $to[$diffPosition]; if ($diffPosition < $zipLength - 1) { $start++; $finish--; } $end = $diffPosition < $zipLength - 1 ? '*' : ''; for ($digit = $start; $digit <= $finish; $digit++) { $zipPattern[] = $startZip . $digit . $end; } } if ($diffPosition == $zipLength - 1) { return $zipPattern; } $nextAsteriskFrom = true; $nextAsteriskTo = true; for ($pos = $zipLength - 1; $pos > $diffPosition; $pos--) { // calculate zip-patterns based on $from value if ($from[$pos] == 0 && $nextAsteriskFrom) { $nextAsteriskFrom = true; } else { $subZip = ''; for ($k = $diffPosition; $k < $pos; $k++) { $subZip .= $from[$k]; } $delta = $nextAsteriskFrom ? 0 : 1; $end = $pos < $zipLength - 1 ? '*' : ''; for ($i = $from[$pos] + $delta; $i <= 9; $i++) { $zipPattern[] = $startZip . $subZip . $i . $end; } $nextAsteriskFrom = false; } // calculate zip-patterns based on $to value if ($to[$pos] == 9 && $nextAsteriskTo) { $nextAsteriskTo = true; } else { $subZip = ''; for ($k = $diffPosition; $k < $pos; $k++) { $subZip .= $to[$k]; } $delta = $nextAsteriskTo ? 0 : 1; $end = $pos < $zipLength - 1 ? '*' : ''; for ($i = 0; $i <= $to[$pos] - $delta; $i++) { $zipPattern[] = $startZip . $subZip . $i . $end; } $nextAsteriskTo = false; } } if ($nextAsteriskFrom) { $zipPattern[] = $startZip . $from[$diffPosition] . '*'; } if ($nextAsteriskTo) { $zipPattern[] = $startZip . $to[$diffPosition] . '*'; } return $zipPattern; } }