Skip to content

Commit 4e59ca6

Browse files
committed
Use "definedlinks" in Redactor
1 parent 4601fe7 commit 4e59ca6

File tree

3 files changed

+58
-11
lines changed

3 files changed

+58
-11
lines changed

src/RedactorConfig.php

+55-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44

55
namespace Bolt\Redactor;
66

7+
use Bolt\Configuration\Config;
8+
use Bolt\Entity\Content;
79
use Bolt\Extension\ExtensionRegistry;
10+
use Bolt\Storage\Query;
811
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
912
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
1013

@@ -19,18 +22,31 @@ class RedactorConfig
1922
/** @var CsrfTokenManagerInterface */
2023
private $csrfTokenManager;
2124

22-
public function __construct(ExtensionRegistry $registry, UrlGeneratorInterface $urlGenerator, CsrfTokenManagerInterface $csrfTokenManager)
23-
{
25+
/** @var Config */
26+
private $boltConfig;
27+
28+
/** @var Query */
29+
private $query;
30+
31+
public function __construct(
32+
ExtensionRegistry $registry,
33+
UrlGeneratorInterface $urlGenerator,
34+
CsrfTokenManagerInterface $csrfTokenManager,
35+
Config $boltConfig,
36+
Query $query
37+
) {
2438
$this->registry = $registry;
2539
$this->urlGenerator = $urlGenerator;
2640
$this->csrfTokenManager = $csrfTokenManager;
41+
$this->boltConfig = $boltConfig;
42+
$this->query = $query;
2743
}
2844

2945
public function getConfig(): array
3046
{
3147
$extension = $this->registry->getExtension(Extension::class);
3248

33-
return array_merge($this->getDefaults(), $extension->getConfig()['default']);
49+
return array_merge($this->getDefaults(), $extension->getConfig()['default'], $this->getLinks());
3450
}
3551

3652
public function getPlugins(): array
@@ -96,4 +112,40 @@ public function getDefaultPlugins()
96112
'widget' => ['widget/widget.min.js'],
97113
];
98114
}
115+
116+
private function getLinks(): array
117+
{
118+
$amount = 100;
119+
$params = [
120+
'status' => 'published',
121+
'returnmultiple' => true,
122+
'order' => '-modifiedAt',
123+
];
124+
$contentTypes = $this->boltConfig->get('contenttypes')->where('viewless', false)->keys()->implode(',');
125+
126+
$records = $this->query->getContentForTwig($contentTypes, $params)->setMaxPerPage($amount);
127+
128+
$links = [
129+
'___' => [
130+
'name' => '(Choose an existing Record)',
131+
'url' => '',
132+
],
133+
];
134+
135+
/** @var Content $record */
136+
foreach ($records as $record) {
137+
$extras = $record->getExtras();
138+
139+
$links[$extras['title']] = [
140+
'name' => sprintf('%s [%s № %s]', $extras['title'], $extras['name'], $record->getId()),
141+
'url' => $extras['link'],
142+
];
143+
}
144+
145+
ksort($links, SORT_STRING | SORT_FLAG_CASE);
146+
147+
return [
148+
'definedlinks' => array_values($links),
149+
];
150+
}
99151
}

src/TwigExtension.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public function redactorSettings(): string
3535
{
3636
$settings = $this->redactorConfig->getConfig();
3737

38-
return Json::json_encode($settings, JSON_HEX_QUOT | JSON_HEX_APOS | JSON_PRETTY_PRINT);
38+
return Json::json_encode($settings, JSON_HEX_QUOT | JSON_HEX_APOS);
3939
}
4040

4141
public function redactorIncludes(): string

templates/injector.html.twig

+2-7
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
1-
{# todo: Use `asset`, but make sure the packages are set on POST, otherwise it'll break
2-
<script src="{{ asset('assets/redactor/redactor.js', 'public') }}"></script>
3-
<link rel="stylesheet" href="{{ asset('assets/redactor/redactor.css', 'public') }}">
4-
--- #}
5-
6-
<script src="/assets/redactor/redactor.min.js"></script>
7-
<link rel="stylesheet" href="/assets/redactor/redactor.min.css">
1+
<script src="{{ asset('assets/redactor/redactor.min.js', 'public') }}"></script>
2+
<link rel="stylesheet" href="{{ asset('assets/redactor/redactor.min.css', 'public') }}">
83
{{ redactor_includes() }}
94
<script>
105

0 commit comments

Comments
 (0)