Skip to content

Commit 6b21045

Browse files
committed
simplify url resolver
1 parent e844ca6 commit 6b21045

File tree

7 files changed

+53
-42
lines changed

7 files changed

+53
-42
lines changed

Model/Document/Filesystem/File.php

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public function __construct(
7272

7373
public function getFileDestPath(DocumentTypeInterface $documentType, string $filePath): string
7474
{
75-
return $this->resolveDestFilePath($documentType, $filePath, $this->resolvePath($documentType, 'file'));
75+
return $this->resolveDestFilePath($documentType, $filePath, $this->resolvePath($documentType));
7676
}
7777

7878
public function getImageDestPath(DocumentTypeInterface $documentType, string $filePath): string
@@ -88,7 +88,8 @@ public function getFilePath(DocumentInterface $document): string
8888

8989
public function getImagePath(DocumentInterface $document): string
9090
{
91-
return $this->filesystem->getDirectoryRead(DirectoryList::MEDIA)->getAbsolutePath($document->getImageFileName());
91+
return $this->filesystem->getDirectoryRead(DirectoryList::MEDIA)
92+
->getAbsolutePath($document->getImageFileName());
9293
}
9394

9495
public function getRelativeFilePath(string $filePath): string
@@ -99,7 +100,7 @@ public function getRelativeFilePath(string $filePath): string
99100
public function lookupFiles(DocumentTypeInterface $documentType, ?int $flags = null): array
100101
{
101102
$sourcePath = rtrim($this->filesystem->getDirectoryRead(DirectoryList::MEDIA)->getAbsolutePath(
102-
$this->resolvePath($documentType, 'file') . ltrim($documentType->getFileSourcePath(), DIRECTORY_SEPARATOR)
103+
$this->resolvePath($documentType) . ltrim($documentType->getFileSourcePath(), DIRECTORY_SEPARATOR)
103104
), DIRECTORY_SEPARATOR);
104105

105106
return Glob::glob(
@@ -129,21 +130,21 @@ public function deleteFile(string $filePath): bool
129130
return false;
130131
}
131132

132-
private function resolvePath(DocumentTypeInterface $documentType, string $fileType): string
133+
private function resolvePath(DocumentTypeInterface $documentType): string
133134
{
134-
return $this->pathResolver->resolvePath($documentType) . DIRECTORY_SEPARATOR . $fileType. DIRECTORY_SEPARATOR;
135+
return $this->pathResolver->resolvePath($documentType);
135136
}
136137

137138
private function resolveFileSubPath(DocumentTypeInterface $documentType, string $fileName): string
138139
{
139140
return implode(
140-
DIRECTORY_SEPARATOR,
141-
array_slice(
142-
(array) mb_str_split(strtolower(preg_replace('/\W+/', '', pathinfo($fileName, PATHINFO_FILENAME)))),
143-
0,
144-
$documentType->getSubPathLength()
145-
)
146-
) . DIRECTORY_SEPARATOR . $fileName;
141+
DIRECTORY_SEPARATOR,
142+
array_slice(
143+
(array) mb_str_split(strtolower(preg_replace('/\W+/', '', pathinfo($fileName, PATHINFO_FILENAME)))),
144+
0,
145+
$documentType->getSubPathLength()
146+
)
147+
) . DIRECTORY_SEPARATOR . $fileName;
147148
}
148149

149150
private function resolveDestFilePath(

Model/Document/Filesystem/PathResolver.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ public function resolvePath(DocumentTypeInterface $documentType): string
3939
{
4040
return $this->sanitizePath(array_reduce(
4141
$this->resolvers,
42-
static function(string $path, PathResolverInterface $pathResolver) use ($documentType): string {
43-
return $path . DIRECTORY_SEPARATOR . $pathResolver->resolvePath($documentType);
42+
static function (string $path, PathResolverInterface $pathResolver) use ($documentType): string {
43+
return $path . $pathResolver->resolvePath($documentType) . DIRECTORY_SEPARATOR;
4444
},
4545
''
4646
));

Model/Document/Filesystem/PathResolver/CodeResolver.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
final class CodeResolver implements PathResolverInterface
1414
{
15-
public const DOCUMENT_PATH = 'document';
15+
public const DOCUMENT_FILE_PATH = 'document/file/';
1616

1717
private $paths;
1818

@@ -24,6 +24,6 @@ public function __construct(
2424

2525
public function resolvePath(DocumentTypeInterface $documentType): string
2626
{
27-
return $this->paths[$documentType->getCode()] ?? self::DOCUMENT_PATH;
27+
return $this->paths[$documentType->getCode()] ?? self::DOCUMENT_FILE_PATH;
2828
}
2929
}

Model/Document/Filesystem/UrlResolver.php

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,37 @@
88
namespace Opengento\Document\Model\Document\Filesystem;
99

1010
use Opengento\Document\Api\Data\DocumentInterface;
11+
use function array_column;
12+
use function array_reduce;
13+
use function usort;
1114

1215
final class UrlResolver implements UrlResolverInterface
1316
{
1417
/**
1518
* @var UrlResolverInterface[]
1619
*/
17-
private $urlResolvers;
20+
private $resolvers;
1821

1922
public function __construct(
20-
array $urlResolvers = []
23+
array $resolvers = []
2124
) {
22-
$this->urlResolvers = $urlResolvers;
25+
usort(
26+
$resolvers,
27+
static function (array $resolverA, array $resolverB): int {
28+
return ($resolverA['sortOrder'] ?? 0) <=> ($resolverB['sortOrder'] ?? 0);
29+
}
30+
);
31+
$this->resolvers = array_column($resolvers, 'resolver');
2332
}
2433

25-
public function getUrl(DocumentInterface $document): ?string
34+
public function getFileUrl(DocumentInterface $document): string
2635
{
27-
$url = null;
28-
foreach ($this->urlResolvers as $urlResolver) {
29-
$url = $url ?: $urlResolver->getUrl($document);
30-
}
31-
32-
return $url;
36+
return array_reduce(
37+
$this->resolvers,
38+
static function (string $url, UrlResolverInterface $urlResolver) use ($document): string {
39+
return $url ?: $urlResolver->getFileUrl($document);
40+
},
41+
''
42+
);
3343
}
3444
}

Model/Document/Filesystem/Url.php renamed to Model/Document/Filesystem/UrlResolver/MediaResolver.php

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,37 +5,27 @@
55
*/
66
declare(strict_types=1);
77

8-
namespace Opengento\Document\Model\Document\Filesystem;
8+
namespace Opengento\Document\Model\Document\Filesystem\UrlResolver;
99

1010
use Opengento\Document\Api\Data\DocumentInterface;
11+
use Opengento\Document\Model\Document\Filesystem\UrlResolverInterface;
1112
use Opengento\Document\Model\File\Url as UrlHelper;
1213

13-
/**
14-
* @api
15-
*/
16-
final class Url
14+
final class MediaResolver implements UrlResolverInterface
1715
{
1816
/**
1917
* @var UrlHelper
2018
*/
2119
private $urlHelper;
2220

23-
/**
24-
* @var UrlResolverInterface
25-
*/
26-
private $urlResolver;
27-
2821
public function __construct(
29-
UrlHelper $urlHelper,
30-
UrlResolverInterface $urlResolver
22+
UrlHelper $urlHelper
3123
) {
3224
$this->urlHelper = $urlHelper;
33-
$this->urlResolver = $urlResolver;
3425
}
3526

3627
public function getFileUrl(DocumentInterface $document): string
3728
{
38-
return $this->urlResolver->getUrl($document)
39-
?: $this->urlHelper->getUrl($document->getFilePath() . '/' . $document->getFileName());
29+
return $this->urlHelper->getUrl($document->getFilePath() . '/' . $document->getFileName());
4030
}
4131
}

Model/Document/Filesystem/UrlResolverInterface.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@
1414
*/
1515
interface UrlResolverInterface
1616
{
17-
public function getUrl(DocumentInterface $document): ?string;
17+
public function getFileUrl(DocumentInterface $document): string;
1818
}

etc/di.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,16 @@
302302
</arguments>
303303
</type>
304304
<preference for="Opengento\Document\Model\Document\Filesystem\UrlResolverInterface" type="Opengento\Document\Model\Document\Filesystem\UrlResolver"/>
305+
<type name="Opengento\Document\Model\Document\Filesystem\UrlResolver">
306+
<arguments>
307+
<argument name="resolvers" xsi:type="array">
308+
<item name="media" xsi:type="array">
309+
<item name="sortOrder" xsi:type="number">100</item>
310+
<item name="resolver" xsi:type="object">Opengento\Document\Model\Document\Filesystem\UrlResolver\MediaResolver</item>
311+
</item>
312+
</argument>
313+
</arguments>
314+
</type>
305315
<!-- UI Components -->
306316
<virtualType name="Opengento\Document\Ui\Component\DataProvider\DocumentType\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
307317
<arguments>

0 commit comments

Comments
 (0)