Skip to content

Commit 5c4a007

Browse files
committed
fix glob & add document import overview
1 parent bec3e45 commit 5c4a007

File tree

14 files changed

+453
-35
lines changed

14 files changed

+453
-35
lines changed

Controller/Adminhtml/Import/Index.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
/**
3+
* Copyright © OpenGento, All rights reserved.
4+
* See LICENSE bundled with this library for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Opengento\Document\Controller\Adminhtml\Import;
9+
10+
use Magento\Backend\App\Action;
11+
use Magento\Backend\Model\View\Result\Page;
12+
use Magento\Framework\Controller\ResultFactory;
13+
use Magento\Framework\Phrase;
14+
15+
class Index extends Action
16+
{
17+
public const ADMIN_RESOURCE = 'Opengento_Document::document_import_view';
18+
19+
public function execute()
20+
{
21+
/** @var Page $page */
22+
$page = $this->resultFactory->create(ResultFactory::TYPE_PAGE);
23+
$page->getConfig()->getTitle()->set(new Phrase('Documents Import'));
24+
25+
return $page;
26+
}
27+
}

Model/Document/Helper/File.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
use function strtolower;
2727
use function trim;
2828
use const DIRECTORY_SEPARATOR;
29-
use const GLOB_BRACE;
3029
use const PATHINFO_FILENAME;
3130

3231
/**
@@ -99,7 +98,7 @@ public function lookupFiles(DocumentTypeInterface $documentType, ?int $flags = n
9998

10099
return Glob::glob(
101100
$sourcePath . DIRECTORY_SEPARATOR . ltrim($documentType->getFilePattern(), DIRECTORY_SEPARATOR),
102-
$flags | GLOB_BRACE
101+
$flags + Glob::GLOB_BRACE
103102
);
104103
}
105104

Model/Document/Import.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
namespace Opengento\Document\Model\Document;
99

1010
use Exception;
11+
use Magento\Framework\Filesystem\Glob;
1112
use Magento\Framework\Phrase;
1213
use Opengento\Document\Api\Data\DocumentInterface;
1314
use Opengento\Document\Api\Data\DocumentTypeInterface;
@@ -16,7 +17,6 @@
1617
use Opengento\Document\Model\Document\Operation\CreateFromFileInterface;
1718
use Psr\Log\LoggerInterface;
1819
use function count;
19-
use const GLOB_NOSORT;
2020

2121
final class Import implements ImportInterface
2222
{
@@ -62,7 +62,7 @@ public function __construct(
6262
public function execute(DocumentTypeInterface $documentType): ImportResultsInterface
6363
{
6464
$results = ['errors' => [], 'success' => []];
65-
$files = $this->fileHelper->lookupFiles($documentType, GLOB_NOSORT);
65+
$files = $this->fileHelper->lookupFiles($documentType, Glob::GLOB_NOSORT);
6666

6767
$this->updateStatusStart(count($files));
6868

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
/**
3+
* Copyright © OpenGento, All rights reserved.
4+
* See LICENSE bundled with this library for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Opengento\Document\Model\DocumentType\SearchCriteria\CollectionProcessor;
9+
10+
use Magento\Framework\Api\Filter;
11+
use Magento\Framework\Api\SearchCriteria\CollectionProcessor\FilterProcessor\CustomFilterInterface;
12+
use Magento\Framework\Data\Collection\AbstractDb;
13+
use Opengento\Document\Model\ResourceModel\DocumentType\Collection;
14+
15+
final class FilesCountFilter implements CustomFilterInterface
16+
{
17+
public function apply(Filter $filter, AbstractDb $collection): bool
18+
{
19+
/** @var Collection $collection */
20+
$collection->addFilesCountFilter($filter->getField(), [$filter->getConditionType() => $filter->getValue()]);
21+
22+
return true;
23+
}
24+
}

Model/ResourceModel/Document/Collection.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,9 @@ public function addVisibilityFilter(array $condition): self
4141

4242
return $this;
4343
}
44+
45+
public function toOptionArray(): array
46+
{
47+
return $this->_toOptionArray('entity_id');
48+
}
4449
}

Model/ResourceModel/DocumentType/Collection.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,27 @@ protected function _construct(): void
2222
$this->_init(DocumentType::class, DocumentTypeDb::class);
2323
}
2424

25+
public function addFilesCount(string $alias = 'total_files'): self
26+
{
27+
$this->getSelect()->joinLeft(
28+
['od' => $this->getTable('opengento_document')],
29+
'main_table.entity_id=od.type_id',
30+
''
31+
);
32+
$this->addExpressionFieldToSelect($alias, 'COUNT({{file_id}})', ['file_id' => 'od.entity_id']);
33+
$this->getSelect()->group(['main_table.entity_id']);
34+
35+
return $this;
36+
}
37+
38+
public function addFilesCountFilter(string $alias, array $condition): self
39+
{
40+
$this->addFilesCount($alias);
41+
$this->getSelect()->having($this->_getConditionSql('total_files', $condition));
42+
43+
return $this;
44+
}
45+
2546
public function toOptionArray(): array
2647
{
2748
return $this->_toOptionArray('entity_id');
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
<?php
2+
/**
3+
* Copyright © OpenGento, All rights reserved.
4+
* See LICENSE bundled with this library for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Opengento\Document\Ui\DataProvider\DocumentImport\Listing;
9+
10+
use Magento\Framework\Api\Filter;
11+
use Magento\Framework\Exception\LocalizedException;
12+
use Magento\Ui\DataProvider\AbstractDataProvider;
13+
use Magento\Ui\DataProvider\Modifier\ModifierInterface;
14+
use Magento\Ui\DataProvider\Modifier\PoolInterface;
15+
use Opengento\Document\Model\ResourceModel\DocumentType\CollectionFactory;
16+
use function array_reduce;
17+
18+
final class DataProvider extends AbstractDataProvider
19+
{
20+
/**
21+
* @var PoolInterface
22+
*/
23+
private $pool;
24+
25+
/**
26+
* @var array|null
27+
*/
28+
private $loadedData;
29+
30+
/**
31+
* @var array|null
32+
*/
33+
private $loadedMeta;
34+
35+
public function __construct(
36+
string $name,
37+
string $primaryFieldName,
38+
string $requestFieldName,
39+
CollectionFactory $collectionFactory,
40+
PoolInterface $pool,
41+
array $meta = [],
42+
array $data = []
43+
) {
44+
$this->collection = $collectionFactory->create();
45+
$this->pool = $pool;
46+
parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data);
47+
}
48+
49+
public function addField($field, $alias = null): void
50+
{
51+
if ($field === 'total_files' || $alias === 'total_files') {
52+
$this->collection->addFilesCount($alias ?? $field);
53+
} else {
54+
parent::addField($field, $alias);
55+
}
56+
}
57+
58+
public function addFilter(Filter $filter): void
59+
{
60+
if ($filter->getField() === 'total_files') {
61+
$this->collection->addFilesCountFilter(
62+
$filter->getField(),
63+
[$filter->getConditionType() => $filter->getValue()]
64+
);
65+
} else {
66+
parent::addFilter($filter);
67+
}
68+
}
69+
70+
/**
71+
* @throws LocalizedException
72+
*/
73+
public function getData(): array
74+
{
75+
return $this->loadedData ?? $this->loadedData = array_reduce(
76+
$this->pool->getModifiersInstances(),
77+
static function (array $data, ModifierInterface $modifier): array { return $modifier->modifyData($data); },
78+
parent::getData()
79+
);
80+
}
81+
82+
/**
83+
* @throws LocalizedException
84+
*/
85+
public function getMeta(): array
86+
{
87+
return $this->loadedMeta ?? $this->loadedMeta = array_reduce(
88+
$this->pool->getModifiersInstances(),
89+
static function (array $meta, ModifierInterface $modifier): array { return $modifier->modifyMeta($meta); },
90+
parent::getMeta()
91+
);
92+
}
93+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<?php
2+
/**
3+
* Copyright © OpenGento, All rights reserved.
4+
* See LICENSE bundled with this library for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Opengento\Document\Ui\DataProvider\DocumentImport\Listing\Modifier;
9+
10+
use Magento\Framework\Filesystem\Glob;
11+
use Magento\Ui\DataProvider\Modifier\ModifierInterface;
12+
use Opengento\Document\Api\Data\DocumentTypeInterface;
13+
use Opengento\Document\Api\Data\DocumentTypeInterfaceFactory;
14+
use Opengento\Document\Model\Document\Helper\File as FileHelper;
15+
use function count;
16+
17+
final class PendingFiles implements ModifierInterface
18+
{
19+
/**
20+
* @var FileHelper
21+
*/
22+
private $fileHelper;
23+
24+
/**
25+
* @var DocumentTypeInterfaceFactory
26+
*/
27+
private $docTypeFactory;
28+
29+
public function __construct(
30+
FileHelper $fileHelper,
31+
DocumentTypeInterfaceFactory $docTypeFactory
32+
) {
33+
$this->fileHelper = $fileHelper;
34+
$this->docTypeFactory = $docTypeFactory;
35+
}
36+
37+
public function modifyData(array $data): array
38+
{
39+
if (isset($data['items'])) {
40+
foreach ($data['items'] as $key => $item) {
41+
$data['items'][$key]['total_pending'] = $this->countFiles($item);
42+
}
43+
}
44+
45+
return $data;
46+
}
47+
48+
public function modifyMeta(array $meta): array
49+
{
50+
return $meta;
51+
}
52+
53+
private function countFiles(array $item): int
54+
{
55+
/** @var DocumentTypeInterface $documentType */
56+
$documentType = $this->docTypeFactory->create(['data' => $item]);
57+
58+
return count($this->fileHelper->lookupFiles($documentType, Glob::GLOB_NOSORT));
59+
}
60+
}

etc/acl.xml

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,19 @@
1111
<resource id="Magento_Backend::admin">
1212
<resource id="Opengento_Document::general" title="Module Document General" translate="title" sortOrder="10">
1313
<resource id="Opengento_Document::settings" title="Document Settings" translate="title" sortOrder="10"/>
14-
<resource id="Opengento_Document::flush_images" title="Document Images" translate="title" sortOrder="10"/>
15-
<resource id="Opengento_Document::document_type" title="Document Type" translate="title" sortOrder="20">
16-
<resource id="Opengento_Document::document_type_save" title="save" translate="title" sortOrder="10"/>
17-
<resource id="Opengento_Document::document_type_delete" title="delete" translate="title" sortOrder="20"/>
18-
<resource id="Opengento_Document::document_type_view" title="view" translate="title" sortOrder="30"/>
14+
<resource id="Opengento_Document::flush_images" title="Document Images" translate="title" sortOrder="20"/>
15+
<resource id="Opengento_Document::document_import" title="Documents Import" translate="title" sortOrder="30">
16+
<resource id="Opengento_Document::document_import_view" title="View" translate="title" sortOrder="10"/>
1917
</resource>
20-
<resource id="Opengento_Document::document" title="Document" translate="title" sortOrder="30">
21-
<resource id="Opengento_Document::document_save" title="save" translate="title" sortOrder="10"/>
22-
<resource id="Opengento_Document::document_delete" title="delete" translate="title" sortOrder="20"/>
23-
<resource id="Opengento_Document::document_view" title="view" translate="title" sortOrder="30"/>
18+
<resource id="Opengento_Document::document_type" title="Document Type" translate="title" sortOrder="40">
19+
<resource id="Opengento_Document::document_type_save" title="Save" translate="title" sortOrder="10"/>
20+
<resource id="Opengento_Document::document_type_delete" title="Delete" translate="title" sortOrder="20"/>
21+
<resource id="Opengento_Document::document_type_view" title="View" translate="title" sortOrder="30"/>
22+
</resource>
23+
<resource id="Opengento_Document::document" title="Document" translate="title" sortOrder="50">
24+
<resource id="Opengento_Document::document_save" title="Save" translate="title" sortOrder="10"/>
25+
<resource id="Opengento_Document::document_delete" title="Delete" translate="title" sortOrder="20"/>
26+
<resource id="Opengento_Document::document_view" title="View" translate="title" sortOrder="30"/>
2427
</resource>
2528
</resource>
2629
</resource>

etc/adminhtml/menu.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@
1010
<add id="Opengento_Document::general" title="Resources" module="Opengento_Document" sortOrder="100" parent="Magento_Backend::content" resource="Opengento_Document::general"/>
1111
<add id="Opengento_Document::document_type" title="Documents Types" module="Opengento_Document" sortOrder="10" parent="Opengento_Document::general" action="document/type/" resource="Opengento_Document::document_type"/>
1212
<add id="Opengento_Document::document" title="Documents" module="Opengento_Document" sortOrder="20" parent="Opengento_Document::general" action="document/index/" resource="Opengento_Document::document"/>
13+
<add id="Opengento_Document::document_import" title="Document Imports" module="Opengento_Document" sortOrder="30" parent="Opengento_Document::general" action="document/import/" resource="Opengento_Document::document_import"/>
1314
</menu>
1415
</config>

0 commit comments

Comments
 (0)