![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-import-export/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\ImportExport\Model; use DateTime; use Magento\Framework\Stdlib\DateTime\TimezoneInterface; /** * Localized filename model */ class LocalizedFileName { /** * date format regex map */ private const DATE_FORMAT_TO_REGEX = [ 'Y' => '\d{4}', 'y' => '\d{2}', 'm' => '\d{2}', 'n' => '\d{1,2}', 'M' => '[A-Z][a-z]{3}', 'F' => '[A-Z][a-z]{2,8}', 'd' => '\d{2}', 'j' => '\d{1,2}', 'D' => '[A-Z][a-z]{2}', 'l' => '[A-Z][a-z]{6,9}', 'u' => '\d{1,6}', 'h' => '\d{2}', 'H' => '\d{2}', 'g' => '\d{1,2}', 'G' => '\d{1,2}', 'i' => '\d{2}', 's' => '\d{2}' ]; /** * @var TimezoneInterface */ private $timezone; /** * @var array */ private $dateFormats; /** * @param TimezoneInterface $timezone * @param array $dateFormats */ public function __construct( TimezoneInterface $timezone, array $dateFormats = [] ) { $this->timezone = $timezone; $this->dateFormats = $dateFormats; } /** * Get file display name * * @param string $filename * @return string */ public function getFileDisplayName(string $filename): string { $displayName = $filename; foreach ($this->dateFormats as $dateFormat) { $utcDate = $this->parseDateFromFilename($filename, $dateFormat); if ($utcDate) { $utcDateString = $utcDate->format($dateFormat); $scopeDate = $this->timezone->scopeDate(null, $utcDate, true); $displayName = str_replace($utcDateString, $scopeDate->format($dateFormat), $filename); break; } } return $displayName; } /** * Parse date from filename * * @param string $filename * @param string $dateFormat * @return DateTime|null */ private function parseDateFromFilename(string $filename, string $dateFormat): ?DateTime { $date = null; $regex = $this->convertDateFormatToRegex($dateFormat); if (preg_match("/$regex/", $filename, $result)) { $date = date_create_from_format($dateFormat, $result[0]); if (!$date || $date->format($dateFormat) !== $result[0]) { $date = null; } } return $date; } /** * Convert date format to regex format * * @param string $dateFormat * @return string */ private function convertDateFormatToRegex(string $dateFormat): string { $regex = ''; $escape = '\\'; $chars = str_split($dateFormat); foreach ($chars as $pos => $char) { $lastChar = $chars[$pos - 1] ?? ''; if ($lastChar !== $escape && isset(self::DATE_FORMAT_TO_REGEX[$char])) { $regex .= self::DATE_FORMAT_TO_REGEX[$char]; } elseif ($char === $escape) { $regex .= $char; } else { $regex .= preg_quote($char); } } return $regex; } }