Skip to content

Commit 46b7f13

Browse files
committed
PB-341: Save content as template
- Bug fixes
1 parent 0940893 commit 46b7f13

File tree

16 files changed

+210
-27
lines changed

16 files changed

+210
-27
lines changed

app/code/Magento/PageBuilder/Controller/Adminhtml/Template/Save.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,13 +114,13 @@ public function execute()
114114
return $this->resultFactory->create(ResultFactory::TYPE_JSON)->setData(
115115
[
116116
'status' => 'error',
117-
'message' => $e
117+
'message' => $e->getMessage()
118118
]
119119
);
120120
}
121121

122122
$template = $this->templateFactory->create();
123-
$template->setName($request->getParam(TemplateInterface::KEY_NAME));
123+
$template->setName(trim($request->getParam(TemplateInterface::KEY_NAME)));
124124
$template->setTemplate($request->getParam(TemplateInterface::KEY_TEMPLATE));
125125
if ($request->getParam('createdFor')) {
126126
$template->setCreatedFor($request->getParam('createdFor'));
@@ -206,12 +206,12 @@ private function storePreviewImage(RequestInterface $request) : ?string
206206
{
207207
$mediaDir = $this->filesystem
208208
->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA);
209-
$fileName = str_replace(
209+
$fileName = preg_replace("/[^A-Za-z0-9]/", '', str_replace(
210210
' ',
211211
'-',
212212
strtolower($request->getParam(TemplateInterface::KEY_NAME))
213-
) . uniqid() . '.jpg';
214-
$filePath = 'template-manager' . DIRECTORY_SEPARATOR . $fileName;
213+
)) . uniqid() . '.jpg';
214+
$filePath = '.template-manager' . DIRECTORY_SEPARATOR . $fileName;
215215

216216
// Prepare the image data
217217
$imgData = str_replace(' ', '+', $request->getParam('previewImage'));

app/code/Magento/PageBuilder/Model/Template/Source/TemplateTypes.php

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,6 @@ public function __construct(Config $config)
3535
public function toOptionArray()
3636
{
3737
$templateTypes = $this->config->getConfig()['stage_config']['template_types'];
38-
$options = [
39-
[
40-
'label' => __('Any'),
41-
'value' => '',
42-
]
43-
];
4438
foreach ($templateTypes as $key => $value) {
4539
$options[] = [
4640
'label' => $value,

app/code/Magento/PageBuilder/Model/TemplateRepository.php

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,13 @@
88

99
namespace Magento\PageBuilder\Model;
1010

11-
use Magento\Framework\Api\ExtensibleDataObjectConverter;
11+
use Magento\Framework\Filesystem;
1212
use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface;
1313
use Magento\Framework\Api\SearchCriteriaInterface;
1414
use Magento\Framework\Exception\CouldNotDeleteException;
1515
use Magento\Framework\Exception\CouldNotSaveException;
1616
use Magento\Framework\Exception\NoSuchEntityException;
1717
use Magento\PageBuilder\Api\Data\TemplateInterface;
18-
use Magento\PageBuilder\Api\Data\TemplateSearchResultsInterface;
1918
use Magento\PageBuilder\Api\Data\TemplateSearchResultsInterfaceFactory;
2019
use Magento\PageBuilder\Api\TemplateRepositoryInterface;
2120
use Magento\PageBuilder\Model\ResourceModel\Template as ResourceTemplate;
@@ -51,25 +50,33 @@ class TemplateRepository implements TemplateRepositoryInterface
5150
*/
5251
private $collectionProcessor;
5352

53+
/**
54+
* @var Filesystem
55+
*/
56+
private $filesystem;
57+
5458
/**
5559
* @param ResourceTemplate $resource
5660
* @param TemplateFactory $templateFactory
5761
* @param TemplateCollectionFactory $templateCollectionFactory
5862
* @param TemplateSearchResultsInterfaceFactory $searchResultsFactory
5963
* @param CollectionProcessorInterface $collectionProcessor
64+
* @param Filesystem $filesystem
6065
*/
6166
public function __construct(
6267
ResourceTemplate $resource,
6368
TemplateFactory $templateFactory,
6469
TemplateCollectionFactory $templateCollectionFactory,
6570
TemplateSearchResultsInterfaceFactory $searchResultsFactory,
66-
CollectionProcessorInterface $collectionProcessor
71+
CollectionProcessorInterface $collectionProcessor,
72+
Filesystem $filesystem
6773
) {
6874
$this->resource = $resource;
6975
$this->templateFactory = $templateFactory;
7076
$this->templateCollectionFactory = $templateCollectionFactory;
7177
$this->searchResultsFactory = $searchResultsFactory;
7278
$this->collectionProcessor = $collectionProcessor;
79+
$this->filesystem = $filesystem;
7380
}
7481

7582
/**
@@ -131,10 +138,19 @@ public function getList(SearchCriteriaInterface $criteria)
131138
*/
132139
public function delete(TemplateInterface $template) : bool
133140
{
141+
$mediaDir = $this->filesystem
142+
->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA);
143+
134144
try {
145+
$previewImage = $template->getPreviewImage();
135146
$templateModel = $this->templateFactory->create();
136147
$this->resource->load($templateModel, $template->getTemplateId());
137148
$this->resource->delete($templateModel);
149+
150+
// Remove the preview image from the media directory
151+
if ($mediaDir->isExist($previewImage)) {
152+
$mediaDir->delete($previewImage);
153+
}
138154
} catch (\Exception $exception) {
139155
throw new CouldNotDeleteException(
140156
__('Could not delete the Template: %1', $exception->getMessage())
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace Magento\PageBuilder\Ui\Component\Template;
10+
11+
use Magento\Framework\Api\Filter;
12+
use Magento\Framework\Api\FilterBuilder;
13+
use Magento\Framework\Api\Search\SearchCriteriaBuilder;
14+
use Magento\Framework\App\RequestInterface;
15+
use Magento\Framework\View\Element\UiComponent\DataProvider\Reporting;
16+
17+
/**
18+
* DataProvider for Template Grid.
19+
*/
20+
class DataProvider extends \Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider
21+
{
22+
/**
23+
* @var AddFilterInterface[]
24+
*/
25+
private $additionalFilterPool;
26+
27+
/**
28+
* @param string $name
29+
* @param string $primaryFieldName
30+
* @param string $requestFieldName
31+
* @param Reporting $reporting
32+
* @param SearchCriteriaBuilder $searchCriteriaBuilder
33+
* @param RequestInterface $request
34+
* @param FilterBuilder $filterBuilder
35+
* @param array $meta
36+
* @param array $data
37+
* @param array $additionalFilterPool
38+
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
39+
*/
40+
public function __construct(
41+
$name,
42+
$primaryFieldName,
43+
$requestFieldName,
44+
Reporting $reporting,
45+
SearchCriteriaBuilder $searchCriteriaBuilder,
46+
RequestInterface $request,
47+
FilterBuilder $filterBuilder,
48+
array $meta = [],
49+
array $data = [],
50+
array $additionalFilterPool = []
51+
) {
52+
parent::__construct(
53+
$name,
54+
$primaryFieldName,
55+
$requestFieldName,
56+
$reporting,
57+
$searchCriteriaBuilder,
58+
$request,
59+
$filterBuilder,
60+
$meta,
61+
$data
62+
);
63+
64+
$this->additionalFilterPool = $additionalFilterPool;
65+
}
66+
67+
/**
68+
* @inheritdoc
69+
*/
70+
public function addFilter(Filter $filter)
71+
{
72+
if (!empty($this->additionalFilterPool[$filter->getField()])) {
73+
$this->additionalFilterPool[$filter->getField()]->addFilter($this->searchCriteriaBuilder, $filter);
74+
} else {
75+
parent::addFilter($filter);
76+
}
77+
}
78+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\PageBuilder\Ui\Component\Template;
9+
10+
use Magento\Cms\Ui\Component\AddFilterInterface;
11+
use Magento\Framework\Api\Filter;
12+
use Magento\Framework\Api\FilterBuilder;
13+
use Magento\Framework\Api\Search\SearchCriteriaBuilder;
14+
15+
/**
16+
* Adds fulltext filter for template name.
17+
*/
18+
class FulltextFilter implements AddFilterInterface
19+
{
20+
/**
21+
* @var FilterBuilder
22+
*/
23+
private $filterBuilder;
24+
25+
/**
26+
* @param FilterBuilder $filterBuilder
27+
*/
28+
public function __construct(FilterBuilder $filterBuilder)
29+
{
30+
$this->filterBuilder = $filterBuilder;
31+
}
32+
33+
/**
34+
* @inheritdoc
35+
*/
36+
public function addFilter(SearchCriteriaBuilder $searchCriteriaBuilder, Filter $filter)
37+
{
38+
$nameFilter = $this->filterBuilder->setField('name')
39+
->setValue(sprintf('%%%s%%', $filter->getValue()))
40+
->setConditionType('like')
41+
->create();
42+
$searchCriteriaBuilder->addFilter($nameFilter);
43+
}
44+
}

app/code/Magento/PageBuilder/etc/adminhtml/di.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,7 @@
521521
<item name="root_content_type" xsi:type="string">row</item>
522522
<item name="html_display_content_type" xsi:type="string">html</item>
523523
<item name="template_types" xsi:type="array">
524+
<item name="any" xsi:type="string">Any</item>
524525
<item name="cms_page" xsi:type="string">Page</item>
525526
<item name="catalog_product" xsi:type="string">Product</item>
526527
<item name="catalog_category" xsi:type="string">Category</item>
@@ -596,4 +597,11 @@
596597
<argument name="staticFileSize" xsi:type="number">4194304</argument>
597598
</arguments>
598599
</virtualType>
600+
<type name="Magento\PageBuilder\Ui\Component\Template\DataProvider">
601+
<arguments>
602+
<argument name="additionalFilterPool" xsi:type="array">
603+
<item name="fulltext" xsi:type="object">Magento\PageBuilder\Ui\Component\Template\FulltextFilter</item>
604+
</argument>
605+
</arguments>
606+
</type>
599607
</config>

app/code/Magento/PageBuilder/view/adminhtml/ui_component/pagebuilder_stage_template_grid.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@
3030
<updateUrl path="mui/index/render"/>
3131
</settings>
3232
<aclResource>Magento_Backend::content</aclResource>
33-
<dataProvider class="Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider" name="pagebuilder_stage_template_grid_data_source">
33+
<dataProvider class="Magento\PageBuilder\Ui\Component\Template\DataProvider" name="pagebuilder_stage_template_grid_data_source">
3434
<settings>
3535
<requestFieldName>template_id</requestFieldName>
3636
<primaryFieldName>template_id</primaryFieldName>
3737
</settings>
3838
</dataProvider>
3939
</dataSource>
4040
<listingToolbar name="listing_top">
41-
<filterSearch name="name"/>
41+
<filterSearch name="fulltext"/>
4242
<paging name="listing_paging"/>
4343
<filters name="listing_filters">
4444
<argument name="data" xsi:type="array">

app/code/Magento/PageBuilder/view/adminhtml/ui_component/pagebuilder_template_grid.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@
3030
<updateUrl path="mui/index/render"/>
3131
</settings>
3232
<aclResource>Magento_Backend::content</aclResource>
33-
<dataProvider class="Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider" name="pagebuilder_template_grid_data_source">
33+
<dataProvider class="Magento\PageBuilder\Ui\Component\Template\DataProvider" name="pagebuilder_template_grid_data_source">
3434
<settings>
3535
<requestFieldName>template_id</requestFieldName>
3636
<primaryFieldName>template_id</primaryFieldName>
3737
</settings>
3838
</dataProvider>
3939
</dataSource>
4040
<listingToolbar name="listing_top">
41-
<filterSearch name="name"/>
41+
<filterSearch name="fulltext"/>
4242
<paging name="listing_paging"/>
4343
<filters name="listing_filters">
4444
<argument name="data" xsi:type="array">

app/code/Magento/PageBuilder/view/adminhtml/web/css/source/content-type/map/_default.less

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
.pagebuilder-map {
1111
line-height: 10px;
1212

13-
> div:first-child {
13+
.google-map-auth-failure-placeholder {
1414
height: 300px;
1515
}
1616
}

app/code/Magento/PageBuilder/view/adminhtml/web/js/grid/cells/template-apply.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ define([
3535
var self = this,
3636
superCall = this._super.bind(this);
3737

38+
self.lastSelected(null);
39+
3840
confirm({
3941
title: $t('Apply Template'),
4042
content: $t('Are you sure you want to apply this template? This will overwrite any existing content.'),

0 commit comments

Comments
 (0)