Skip to content

Commit 5d3ba5a

Browse files
authored
Merge pull request #8 from Nolwennig-Jeulin/master
quick n' dirty fix to get default store_view in default group
2 parents cf42295 + c895e26 commit 5d3ba5a

File tree

1 file changed

+24
-12
lines changed

1 file changed

+24
-12
lines changed

Plugin/App/Request/StorePathInfoValidator.php

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -92,27 +92,39 @@ private function resolveByLinkUrl(string $uri): string
9292

9393
private function resolveByWebUrl(string $uri): string
9494
{
95-
$matches = [];
95+
$storeMatch = null;
96+
$highestScore = 0;
9697

9798
/** @var Store $store */
9899
foreach ($this->storeRepository->getList() as $store) {
99100
if ($store->getId() && str_starts_with($uri, $store->getBaseUrl(UrlInterface::URL_TYPE_WEB))) {
100101
try {
101-
$website = $store->getWebsite();
102-
if ($website->getIsDefault()) {
103-
if ($store->isDefault()) {
104-
return $store->getCode();
105-
}
106-
$matches[0] = $store->getCode();
107-
} elseif ($store->isDefault()) {
108-
$matches[1] = $store->getCode();
109-
} else {
110-
$matches[2] = $store->getCode();
102+
$score = $this->calculatePreferenceScore($store);
103+
$storeMatch ??= $store->getCode();
104+
if ($highestScore < $score) {
105+
$highestScore = $score;
106+
$storeMatch = $store->getCode();
111107
}
112108
} catch (NoSuchEntityException) {}
113109
}
114110
}
115111

116-
return $matches[0] ?? $matches[1] ?? $matches[2] ?? '';
112+
return $storeMatch ?? '';
113+
}
114+
115+
/**
116+
* @throws NoSuchEntityException
117+
*/
118+
private function calculatePreferenceScore(Store $store): int
119+
{
120+
$website = $store->getWebsite();
121+
// Bonus point for the stores which are part of one of the groups from the default website.
122+
$score = $website->getIsDefault() ? 2 : 0;
123+
// Extra point for the stores which are part of the default group of its website.
124+
$score += (int)$website->getDefaultGroup()->getDefaultStoreId() === (int)$store->getId() ? 1 : 0;
125+
// Extra point is the store is the default one of its group.
126+
$score += $store->isDefault() ? 1 : 0;
127+
128+
return $score;
117129
}
118130
}

0 commit comments

Comments
 (0)