Skip to content

Commit d88ed42

Browse files
committed
Introduced MediaContent and MediaContentApi modules
1 parent 89bc078 commit d88ed42

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1939
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
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\Catalog\Observer\MediaContent;
9+
10+
use Magento\Catalog\Model\Category as CatalogCategory;
11+
use Magento\Framework\Event\Observer;
12+
use Magento\Framework\Event\ObserverInterface;
13+
use Magento\Framework\Model\AbstractModel;
14+
use Magento\MediaContentApi\Api\ModelProcessorInterface;
15+
16+
/**
17+
* Observe the catalog_category_save_after event and run processing relation between category content and media asset.
18+
*/
19+
class Category implements ObserverInterface
20+
{
21+
private const CONTENT_TYPE = 'catalog_category';
22+
23+
/**
24+
* @var ModelProcessorInterface
25+
*/
26+
private $processor;
27+
28+
/**
29+
* @var array
30+
*/
31+
private $fields;
32+
33+
/**
34+
* @param ModelProcessorInterface $processor
35+
* @param array $fields
36+
*/
37+
public function __construct(ModelProcessorInterface $processor, array $fields)
38+
{
39+
$this->processor = $processor;
40+
$this->fields = $fields;
41+
}
42+
43+
/**
44+
* Retrieve the saved category and pass it to the model processor to save content - asset relations
45+
*
46+
* @param Observer $observer
47+
*/
48+
public function execute(Observer $observer): void
49+
{
50+
/** @var CatalogCategory $model */
51+
$model = $observer->getEvent()->getData('category');
52+
if ($model instanceof AbstractModel) {
53+
$this->processor->execute(self::CONTENT_TYPE, $model, $this->fields);
54+
}
55+
}
56+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
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\Catalog\Observer\MediaContent;
9+
10+
use Magento\Catalog\Model\Product as CatalogProduct;
11+
use Magento\Framework\Event\Observer;
12+
use Magento\Framework\Event\ObserverInterface;
13+
use Magento\Framework\Model\AbstractModel;
14+
use Magento\MediaContentApi\Api\ModelProcessorInterface;
15+
16+
/**
17+
* Observe the catalog_product_save_after event and run processing relation between product content and media asset
18+
*/
19+
class Product implements ObserverInterface
20+
{
21+
private const CONTENT_TYPE = 'catalog_product';
22+
23+
/**
24+
* @var ModelProcessorInterface
25+
*/
26+
private $processor;
27+
28+
/**
29+
* @var array
30+
*/
31+
private $fields;
32+
33+
/**
34+
* @param ModelProcessorInterface $processor
35+
* @param array $fields
36+
*/
37+
public function __construct(ModelProcessorInterface $processor, array $fields)
38+
{
39+
$this->processor = $processor;
40+
$this->fields = $fields;
41+
}
42+
43+
/**
44+
* Retrieve the saved product and pass it to the model processor to save content - asset relations
45+
*
46+
* @param Observer $observer
47+
*/
48+
public function execute(Observer $observer): void
49+
{
50+
/** @var CatalogProduct $model */
51+
$model = $observer->getEvent()->getData('product');
52+
if ($model instanceof AbstractModel) {
53+
$this->processor->execute(self::CONTENT_TYPE, $model, $this->fields);
54+
}
55+
}
56+
}

app/code/Magento/Catalog/composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"magento/module-directory": "*",
2121
"magento/module-eav": "*",
2222
"magento/module-indexer": "*",
23+
"magento/module-media-content-api": "*",
2324
"magento/module-media-storage": "*",
2425
"magento/module-msrp": "*",
2526
"magento/module-page-cache": "*",

app/code/Magento/Catalog/etc/di.xml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1333,4 +1333,27 @@
13331333
</argument>
13341334
</arguments>
13351335
</type>
1336+
<type name="Magento\Catalog\Observer\MediaContent\Category">
1337+
<arguments>
1338+
<argument name="fields" xsi:type="array">
1339+
<item name="image" xsi:type="string">image</item>
1340+
<item name="description" xsi:type="string">description</item>
1341+
</argument>
1342+
</arguments>
1343+
</type>
1344+
<type name="Magento\Catalog\Observer\MediaContent\Product">
1345+
<arguments>
1346+
<argument name="fields" xsi:type="array">
1347+
<item name="description" xsi:type="string">description</item>
1348+
<item name="short_description" xsi:type="string">short_description</item>
1349+
</argument>
1350+
</arguments>
1351+
</type>
1352+
<type name="Magento\MediaContentApi\Api\ExtractAssetFromContentInterface">
1353+
<arguments>
1354+
<argument name="searchPatterns" xsi:type="array">
1355+
<item name="catalog_image" xsi:type="string">/^\/?media\/(.*)/</item>
1356+
</argument>
1357+
</arguments>
1358+
</type>
13361359
</config>

app/code/Magento/Catalog/etc/events.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,10 @@
6767
<event name="catalog_category_prepare_save">
6868
<observer name="additional_authorization" instance="Magento\Catalog\Observer\CategoryDesignAuthorization" />
6969
</event>
70+
<event name="catalog_category_save_after">
71+
<observer name="media_content_catalog_category_save_after" instance="Magento\Catalog\Observer\MediaContent\Category" />
72+
</event>
73+
<event name="catalog_product_save_after">
74+
<observer name="media_content_catalog_product_save_after" instance="Magento\Catalog\Observer\MediaContent\Product" />
75+
</event>
7076
</config>
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
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\Cms\Observer\MediaContent;
9+
10+
use Magento\Cms\Block\Block as CmsBlock;
11+
use Magento\Framework\Event\Observer;
12+
use Magento\Framework\Event\ObserverInterface;
13+
use Magento\Framework\Model\AbstractModel;
14+
use Magento\MediaContentApi\Api\ModelProcessorInterface;
15+
16+
/**
17+
* Observe cms_block_save_after event and run processing relation between cms block content and media asset
18+
*/
19+
class Block implements ObserverInterface
20+
{
21+
private const CONTENT_TYPE = 'cms_block';
22+
23+
/**
24+
* @var ModelProcessorInterface
25+
*/
26+
private $processor;
27+
28+
/**
29+
* @var array
30+
*/
31+
private $fields;
32+
33+
/**
34+
* @param ModelProcessorInterface $processor
35+
* @param array $fields
36+
*/
37+
public function __construct(ModelProcessorInterface $processor, array $fields)
38+
{
39+
$this->processor = $processor;
40+
$this->fields = $fields;
41+
}
42+
43+
/**
44+
* Retrieve the saved block and pass it to the model processor to save content - asset relations
45+
*
46+
* @param Observer $observer
47+
*/
48+
public function execute(Observer $observer): void
49+
{
50+
/** @var CmsBlock $model */
51+
$model = $observer->getEvent()->getData('object');
52+
if ($model instanceof AbstractModel) {
53+
$this->processor->execute(self::CONTENT_TYPE, $model, $this->fields);
54+
}
55+
}
56+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
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\Cms\Observer\MediaContent;
9+
10+
use Magento\Cms\Model\Page as CmsPage;
11+
use Magento\Framework\Event\Observer;
12+
use Magento\Framework\Event\ObserverInterface;
13+
use Magento\Framework\Model\AbstractModel;
14+
use Magento\MediaContentApi\Api\ModelProcessorInterface;
15+
16+
/**
17+
* Observe cms_page_save_after event and run processing relation between cms page content and media asset.
18+
*/
19+
class Page implements ObserverInterface
20+
{
21+
private const CONTENT_TYPE = 'cms_page';
22+
23+
/**
24+
* @var ModelProcessorInterface
25+
*/
26+
private $processor;
27+
28+
/**
29+
* @var array
30+
*/
31+
private $fields;
32+
33+
/**
34+
* @param ModelProcessorInterface $processor
35+
* @param array $fields
36+
*/
37+
public function __construct(ModelProcessorInterface $processor, array $fields)
38+
{
39+
$this->processor = $processor;
40+
$this->fields = $fields;
41+
}
42+
43+
/**
44+
* Retrieve the saved page and pass it to the model processor to save content - asset relations
45+
*
46+
* @param Observer $observer
47+
*/
48+
public function execute(Observer $observer): void
49+
{
50+
/** @var CmsPage $model */
51+
$model = $observer->getEvent()->getData('object');
52+
if ($model instanceof AbstractModel) {
53+
$this->processor->execute(self::CONTENT_TYPE, $model, $this->fields);
54+
}
55+
}
56+
}

app/code/Magento/Cms/composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"magento/module-backend": "*",
1111
"magento/module-catalog": "*",
1212
"magento/module-email": "*",
13+
"magento/module-media-content-api": "*",
1314
"magento/module-media-storage": "*",
1415
"magento/module-store": "*",
1516
"magento/module-theme": "*",

app/code/Magento/Cms/etc/di.xml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,4 +243,25 @@
243243
</arguments>
244244
</type>
245245
<preference for="Magento\Cms\Model\Page\CustomLayoutRepositoryInterface" type="Magento\Cms\Model\Page\CustomLayout\CustomLayoutRepository" />
246+
<type name="Magento\Cms\Observer\MediaContent\Block">
247+
<arguments>
248+
<argument name="fields" xsi:type="array">
249+
<item name="content" xsi:type="string">content</item>
250+
</argument>
251+
</arguments>
252+
</type>
253+
<type name="Magento\Cms\Observer\MediaContent\Page">
254+
<arguments>
255+
<argument name="fields" xsi:type="array">
256+
<item name="content" xsi:type="string">content</item>
257+
</argument>
258+
</arguments>
259+
</type>
260+
<type name="Magento\MediaContentApi\Api\ExtractAssetFromContentInterface">
261+
<arguments>
262+
<argument name="searchPatterns" xsi:type="array">
263+
<item name="media_gallery" xsi:type="string">/{{media url="?(.*?)"?}}/</item>
264+
</argument>
265+
</arguments>
266+
</type>
246267
</config>

app/code/Magento/Cms/etc/events.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,10 @@
3939
<event name="cms_page_prepare_save">
4040
<observer name="validate_cms_page" instance="Magento\Cms\Observer\PageValidatorObserver" />
4141
</event>
42+
<event name="cms_page_save_after">
43+
<observer name="media_content_cms_page_save_after" instance="\Magento\Cms\Observer\MediaContent\Page" />
44+
</event>
45+
<event name="cms_block_save_after">
46+
<observer name="media_content_cms_block_save_after" instance="\Magento\Cms\Observer\MediaContent\Block" />
47+
</event>
4248
</config>

0 commit comments

Comments
 (0)