Skip to content

Commit 8f3dd40

Browse files
author
Valeriy Nayda
committed
GraphQL-128: Extend GraphQL store config implementation
1 parent da5a9ed commit 8f3dd40

File tree

15 files changed

+166
-27
lines changed

15 files changed

+166
-27
lines changed

app/code/Magento/CmsGraphQl/composer.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
"magento/module-cms": "*",
99
"magento/module-widget": "*"
1010
},
11+
"suggest": {
12+
"magento/module-graph-ql": "*",
13+
"magento/module-store-graph-ql": "*"
14+
},
1115
"license": [
1216
"OSL-3.0",
1317
"AFL-3.0"
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
9+
<type name="Magento\StoreGraphQl\Model\Resolver\Store\StoreConfigDataProvider">
10+
<arguments>
11+
<argument name="extendedConfigData" xsi:type="array">
12+
<item name="front" xsi:type="string">web/default/front</item>
13+
<item name="cms_home_page" xsi:type="string">web/default/cms_home_page</item>
14+
<item name="no_route" xsi:type="string">web/default/no_route</item>
15+
<item name="cms_no_route" xsi:type="string">web/default/cms_no_route</item>
16+
<item name="cms_no_cookies" xsi:type="string">web/default/cms_no_cookies</item>
17+
<item name="show_cms_breadcrumbs" xsi:type="string">web/default/show_cms_breadcrumbs</item>
18+
</argument>
19+
</arguments>
20+
</type>
21+
</config>

app/code/Magento/CmsGraphQl/etc/schema.graphqls

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
# Copyright © Magento, Inc. All rights reserved.
22
# See COPYING.txt for license details.
3+
type StoreConfig @doc(description: "The type contains information about a store config") {
4+
front : String @doc(description: "Default Web URL")
5+
cms_home_page : String @doc(description: "CMS Home Page")
6+
no_route : String @doc(description: "Default No-route URL")
7+
cms_no_route : String @doc(description: "CMS No Route Page")
8+
cms_no_cookies : String @doc(description: "CMS No Cookies Page")
9+
show_cms_breadcrumbs : Int @doc(description: "Show Breadcrumbs for CMS Pages")
10+
}
11+
312

413
type Query {
514
cmsPage (

app/code/Magento/StoreGraphQl/Model/Resolver/Store/StoreConfigDataProvider.php

Lines changed: 57 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77

88
namespace Magento\StoreGraphQl\Model\Resolver\Store;
99

10-
use Magento\Store\Api\Data\StoreConfigInterface;
10+
use Magento\Framework\App\Config\ScopeConfigInterface;
1111
use Magento\Store\Api\StoreConfigManagerInterface;
12-
use Magento\Store\Api\StoreRepositoryInterface;
13-
use Magento\Store\Api\StoreResolverInterface;
12+
use Magento\Store\Model\ScopeInterface;
13+
use Magento\Store\Model\StoreManagerInterface;
1414

1515
/**
1616
* StoreConfig field data provider, used for GraphQL request processing.
@@ -23,39 +23,60 @@ class StoreConfigDataProvider
2323
private $storeConfigManager;
2424

2525
/**
26-
* @var StoreResolverInterface
26+
* @var StoreManagerInterface
2727
*/
28-
private $storeResolver;
28+
private $storeManager;
2929

3030
/**
31-
* @var StoreRepositoryInterface
31+
* @var ScopeConfigInterface
3232
*/
33-
private $storeRepository;
33+
private $scopeConfig;
34+
35+
/**
36+
* @var array
37+
*/
38+
private $extendedConfigData;
3439

3540
/**
3641
* @param StoreConfigManagerInterface $storeConfigManager
37-
* @param StoreResolverInterface $storeResolver
38-
* @param StoreRepositoryInterface $storeRepository
42+
* @param StoreManagerInterface $storeManager
43+
* @param ScopeConfigInterface $scopeConfig
44+
* @param array $extendedConfigData
3945
*/
4046
public function __construct(
4147
StoreConfigManagerInterface $storeConfigManager,
42-
StoreResolverInterface $storeResolver,
43-
StoreRepositoryInterface $storeRepository
48+
StoreManagerInterface $storeManager,
49+
ScopeConfigInterface $scopeConfig,
50+
array $extendedConfigData = []
4451
) {
4552
$this->storeConfigManager = $storeConfigManager;
46-
$this->storeResolver = $storeResolver;
47-
$this->storeRepository = $storeRepository;
53+
$this->storeManager = $storeManager;
54+
$this->scopeConfig = $scopeConfig;
55+
$this->extendedConfigData = $extendedConfigData;
56+
}
57+
58+
/**
59+
* Get store config data
60+
*
61+
* @return array
62+
*/
63+
public function getStoreConfigData(): array
64+
{
65+
$storeConfigData = array_merge(
66+
$this->getBaseConfigData(),
67+
$this->getExtendedConfigData()
68+
);
69+
return $storeConfigData;
4870
}
4971

5072
/**
51-
* Get store config for current store
73+
* Get base config data
5274
*
5375
* @return array
5476
*/
55-
public function getStoreConfig() : array
77+
private function getBaseConfigData() : array
5678
{
57-
$storeId = $this->storeResolver->getCurrentStoreId();
58-
$store = $this->storeRepository->getById($storeId);
79+
$store = $this->storeManager->getStore();
5980
$storeConfig = current($this->storeConfigManager->getStoreConfigs([$store->getCode()]));
6081

6182
$storeConfigData = [
@@ -78,4 +99,23 @@ public function getStoreConfig() : array
7899
];
79100
return $storeConfigData;
80101
}
102+
103+
/**
104+
* Get extended config data
105+
*
106+
* @return array
107+
*/
108+
private function getExtendedConfigData()
109+
{
110+
$store = $this->storeManager->getStore();
111+
$extendedConfigData = [];
112+
foreach ($this->extendedConfigData as $key => $path) {
113+
$extendedConfigData[$key] = $this->scopeConfig->getValue(
114+
$path,
115+
ScopeInterface::SCOPE_STORE,
116+
$store->getId()
117+
);
118+
}
119+
return $extendedConfigData;
120+
}
81121
}

app/code/Magento/StoreGraphQl/Model/Resolver/StoreConfigResolver.php

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ class StoreConfigResolver implements ResolverInterface
2323
private $storeConfigDataProvider;
2424

2525
/**
26-
* @param StoreConfigDataProvider $storeConfigDataProvider
26+
* @param StoreConfigDataProvider $storeConfigsDataProvider
2727
*/
2828
public function __construct(
29-
StoreConfigDataProvider $storeConfigDataProvider
29+
StoreConfigDataProvider $storeConfigsDataProvider
3030
) {
31-
$this->storeConfigDataProvider = $storeConfigDataProvider;
31+
$this->storeConfigDataProvider = $storeConfigsDataProvider;
3232
}
3333

3434
/**
@@ -41,8 +41,6 @@ public function resolve(
4141
array $value = null,
4242
array $args = null
4343
) {
44-
45-
$storeConfigData = $this->storeConfigDataProvider->getStoreConfig();
46-
return $storeConfigData;
44+
return $this->storeConfigDataProvider->getStoreConfigData();
4745
}
4846
}

app/code/Magento/StoreGraphQl/composer.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
"magento/module-store": "*"
99
},
1010
"suggest": {
11-
"magento/module-graph-ql": "*",
12-
"magento/module-catalog-graph-ql": "*"
11+
"magento/module-graph-ql": "*"
1312
},
1413
"license": [
1514
"OSL-3.0",
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# ThemeGraphQlhQl
2+
3+
**ThemeGraphQlhQl** provides type information for the GraphQl module
4+
to generate theme fields information endpoints.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"name": "magento/module-theme-graph-ql",
3+
"description": "N/A",
4+
"type": "magento2-module",
5+
"require": {
6+
"php": "~7.1.3||~7.2.0",
7+
"magento/framework": "*"
8+
},
9+
"suggest": {
10+
"magento/module-store-graph-ql": "*"
11+
},
12+
"license": [
13+
"OSL-3.0",
14+
"AFL-3.0"
15+
],
16+
"autoload": {
17+
"files": [
18+
"registration.php"
19+
],
20+
"psr-4": {
21+
"Magento\\ThemeGraphQl\\": ""
22+
}
23+
}
24+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
9+
<module name="Magento_ThemeGraphQl"/>
10+
</config>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Copyright © Magento, Inc. All rights reserved.
2+
# See COPYING.txt for license details.
3+
type StoreConfig @doc(description: "The type contains information about a store config") {
4+
head_shortcut_icon : String @doc(description: "Favicon Icon")
5+
default_title : String @doc(description: "Default Page Title")
6+
title_prefix : String @doc(description: "Page Title Prefix")
7+
title_suffix : String @doc(description: "Page Title Suffix")
8+
default_description : String @doc(description: "Default Meta Description")
9+
default_keywords : String @doc(description: "Default Meta Keywords")
10+
head_includes : String @doc(description: "Scripts and Style Sheets")
11+
demonotice : Int @doc(description: "Display Demo Store Notice")
12+
header_logo_src : String @doc(description: "Logo Image")
13+
logo_width : Int @doc(description: "Logo Attribute Width")
14+
logo_height : Int @doc(description: "Logo Attribute Height")
15+
welcome : String @doc(description: "Welcome Text")
16+
logo_alt : String @doc(description: "Logo Image Alt")
17+
absolute_footer : String @doc(description: "Footer Miscellaneous HTML")
18+
copyright : String @doc(description: "Copyright")
19+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
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+
use Magento\Framework\Component\ComponentRegistrar;
9+
10+
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Magento_ThemeGraphQl', __DIR__);

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@
221221
"magento/module-tax": "*",
222222
"magento/module-tax-import-export": "*",
223223
"magento/module-theme": "*",
224+
"magento/module-theme-graph-ql": "*",
224225
"magento/module-translation": "*",
225226
"magento/module-ui": "*",
226227
"magento/module-ups": "*",

composer.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dev/tests/api-functional/testsuite/Magento/GraphQl/CatalogInventory/ProductOnlyXLeftInStockTest.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ class ProductOnlyXLeftInStockTest extends GraphQlAbstract
1616
*/
1717
public function testQueryProductOnlyXLeftInStockDisabled()
1818
{
19-
$this->cleanCache();
2019
$productSku = 'simple';
2120

2221
$query = <<<QUERY

dev/tests/api-functional/testsuite/Magento/GraphQl/Store/StoreConfigResolverTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class StoreConfigResolverTest extends GraphQlAbstract
2525

2626
protected function setUp()
2727
{
28+
$this->markTestIncomplete('https://github.com/magento/graphql-ce/issues/167');
2829
$this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
2930
}
3031

0 commit comments

Comments
 (0)