62 lines
1.8 KiB
PHP
62 lines
1.8 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
namespace Esun\SeventeenTrack\Block\Order;
|
|
|
|
use Esun\SeventeenTrack\Model\Config;
|
|
use Magento\Framework\Locale\ResolverInterface;
|
|
use Magento\Framework\Registry;
|
|
use Magento\Framework\View\Element\Template;
|
|
use Magento\Sales\Model\Order;
|
|
|
|
class Tracking extends Template
|
|
{
|
|
public function __construct(
|
|
Template\Context $context,
|
|
private readonly Registry $registry,
|
|
private readonly Config $config,
|
|
private readonly ResolverInterface $localeResolver,
|
|
array $data = []
|
|
) {
|
|
parent::__construct($context, $data);
|
|
}
|
|
|
|
public function canDisplay(): bool
|
|
{
|
|
return $this->config->isWidgetEnabled() && $this->getTracks() !== [];
|
|
}
|
|
|
|
public function getTracks(): array
|
|
{
|
|
$order = $this->registry->registry('current_order');
|
|
if (!$order instanceof Order) {
|
|
return [];
|
|
}
|
|
$tracks = [];
|
|
foreach ($order->getShipmentsCollection() as $shipment) {
|
|
foreach ($shipment->getAllTracks() as $track) {
|
|
$number = trim((string)$track->getTrackNumber());
|
|
if ($number !== '') {
|
|
$tracks[$number] = [
|
|
'number' => $number,
|
|
'title' => (string)($track->getTitle() ?: __('Shipment')),
|
|
];
|
|
}
|
|
}
|
|
}
|
|
return array_values($tracks);
|
|
}
|
|
|
|
public function getWidgetHeight(): int
|
|
{
|
|
return $this->config->getWidgetHeight();
|
|
}
|
|
|
|
public function getWidgetLanguage(): string
|
|
{
|
|
$locale = str_replace('_', '-', $this->localeResolver->getLocale());
|
|
$map = ['zh-CN' => 'zh-cn', 'zh-HK' => 'zh-hk', 'zh-TW' => 'zh-tw', 'pt-BR' => 'pt'];
|
|
return $map[$locale] ?? strtolower(substr($locale, 0, 2));
|
|
}
|
|
}
|