Skip to content

Commit 72768d7

Browse files
[5.x] Fix config through Antlers views (#14328)
Co-authored-by: Duncan McClean <duncan@duncanmcclean.com>
1 parent 3259d65 commit 72768d7

2 files changed

Lines changed: 40 additions & 4 deletions

File tree

src/Fields/Value.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use Statamic\Facades\Compare;
1313
use Statamic\Support\Str;
1414
use Statamic\View\Antlers\Language\Parser\DocumentTransformer;
15+
use Statamic\View\Cascade;
1516
use Traversable;
1617

1718
class Value implements ArrayAccess, IteratorAggregate, JsonSerializable
@@ -159,6 +160,10 @@ public function antlersValue(Parser $parser, $variables)
159160

160161
$value = (new DocumentTransformer())->correct($value);
161162

163+
if (isset($variables['config'])) {
164+
$variables['config'] = Cascade::config();
165+
}
166+
162167
$parsed = $parser->parse($value, $variables);
163168

164169
if (! $parseFromRawString) {

tests/View/Antlers/ViewTest.php

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
use PHPUnit\Framework\Attributes\Test;
77
use Statamic\Facades\Antlers;
88
use Statamic\Facades\Cascade;
9+
use Statamic\Fields\Field;
10+
use Statamic\Fields\Value;
11+
use Statamic\Fieldtypes\Text;
912
use Statamic\View\Events\ViewRendered;
1013
use Statamic\View\View;
1114
use Tests\FakesViews;
@@ -243,15 +246,43 @@ public function view_gets_full_config_but_antlers_parse_gets_allowlisted_config_
243246

244247
$template = 'hello {{ name }} [{{ config:app:name }}] [{{ config:top:secret }}] [{{ config:allowlisted:foo }}]';
245248

246-
$data = ['name' => 'world', Cascade::instance()->toArray()];
249+
$data = ['name' => 'world', Cascade::instance()->hydrate()->toArray()];
250+
251+
$parsed = (string) Antlers::parse($template, $data);
252+
$this->assertStringNotContainsString('123', $parsed, 'Parsed string contains unexpected config value.');
253+
$this->assertSame('hello world [test] [] [bar]', $parsed);
247254

248255
$this->viewShouldReturnRaw('template', $template);
249256
$parsed = (string) View::make('template', $data)->render();
250257
$this->assertStringContainsString('123', $parsed, 'Parsed view is missing config value.');
251258
$this->assertSame('hello world [test] [123] [bar]', $parsed);
259+
}
252260

253-
$parsed = (string) Antlers::parse($template, $data);
254-
$this->assertStringNotContainsString('123', $parsed, 'Parsed string contains unexpected config value.');
255-
$this->assertSame('hello world [test] [] [bar]', $parsed);
261+
#[Test]
262+
public function antlers_fields_gets_allowlisted_config_only_in_view()
263+
{
264+
config([
265+
'app.name' => 'test', // allowed by default
266+
'allowlisted.foo' => 'bar', // allowlisted
267+
'top.secret' => '123',
268+
'statamic.system.view_config_allowlist' => ['@default', 'allowlisted.foo'],
269+
]);
270+
271+
$template = 'hello {{ name }} [{{ config:app:name }}] [{{ config:top:secret }}] [{{ config:allowlisted:foo }}]';
272+
273+
$textFieldtype = new Text();
274+
$field = new Field('text_field', [
275+
'type' => 'text',
276+
'antlers' => true,
277+
]);
278+
$textFieldtype->setField($field);
279+
280+
$value = new Value($template, fieldtype: $textFieldtype);
281+
282+
$data = ['name' => 'world', 'test' => $value];
283+
284+
$this->viewShouldReturnRaw('template', '[view:{{ config:top:secret }}] {{ test }}');
285+
$parsed = (string) View::make('template', $data)->render();
286+
$this->assertSame('[view:123] hello world [test] [] [bar]', $parsed);
256287
}
257288
}

0 commit comments

Comments
 (0)