Skip to content

Commit d4f43cc

Browse files
author
roadiz-ci
committed
feat: improve importing embed document using only URL field (#272)
1 parent 74acf6f commit d4f43cc

6 files changed

Lines changed: 67 additions & 33 deletions

File tree

src/Controller/Document/DocumentEmbedController.php

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ final class DocumentEmbedController extends AbstractController
3434
{
3535
public function __construct(
3636
private readonly EmbedFinderFactory $embedFinderFactory,
37-
private readonly array $documentPlatforms,
3837
private readonly LoggerInterface $logger,
3938
private readonly RandomImageFinder $randomImageFinder,
4039
private readonly DocumentFactory $documentFactory,
@@ -59,9 +58,7 @@ public function embedAction(Request $request, ?int $folderId = null): Response
5958
$folder = $this->managerRegistry->getRepository(Folder::class)->find($folderId);
6059
}
6160

62-
$form = $this->createForm(DocumentEmbedType::class, null, [
63-
'document_platforms' => $this->documentPlatforms,
64-
]);
61+
$form = $this->createForm(DocumentEmbedType::class);
6562
$form->handleRequest($request);
6663

6764
if ($form->isSubmitted() && $form->isValid()) {
@@ -170,14 +167,10 @@ private function randomDocument(?int $folderId = null): ?DocumentInterface
170167
*/
171168
private function embedDocument(array $data, ?int $folderId = null): DocumentInterface|array
172169
{
173-
$handlers = $this->documentPlatforms;
174-
175170
if (
176-
isset($data['embedId'])
177-
&& isset($data['embedPlatform'])
178-
&& in_array($data['embedPlatform'], array_keys($handlers))
171+
isset($data['embedUrl'])
179172
) {
180-
$finder = $this->embedFinderFactory->createForPlatform($data['embedPlatform'], $data['embedId']);
173+
$finder = $this->embedFinderFactory->createForUrl($data['embedUrl']);
181174
if (null === $finder) {
182175
throw new \RuntimeException('No embed finder found for platform '.$data['embedPlatform']);
183176
}

src/Form/DocumentEmbedType.php

Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,42 +9,59 @@
99
use Symfony\Component\Form\Extension\Core\Type\TextType;
1010
use Symfony\Component\Form\FormBuilderInterface;
1111
use Symfony\Component\OptionsResolver\OptionsResolver;
12+
use Symfony\Component\Validator\Constraints\NotBlank;
13+
use Symfony\Component\Validator\Constraints\NotNull;
1214

1315
class DocumentEmbedType extends AbstractType
1416
{
1517
#[\Override]
1618
public function buildForm(FormBuilderInterface $builder, array $options): void
1719
{
18-
$services = [];
19-
foreach (array_keys($options['document_platforms']) as $value) {
20-
$value = (string) $value;
21-
$services[ucwords($value)] = $value;
22-
}
20+
if (isset($options['document_platforms'])) {
21+
$services = [];
22+
foreach (array_keys($options['document_platforms']) as $value) {
23+
$value = (string) $value;
24+
$services[ucwords($value)] = $value;
25+
}
2326

24-
$builder
25-
->add('embedId', TextType::class, [
26-
'label' => 'document.embedId',
27-
'required' => true,
28-
])
29-
->add('embedPlatform', ChoiceType::class, [
30-
'label' => 'document.platform',
31-
'required' => true,
32-
'choices' => $services,
33-
'placeholder' => 'document.no_embed_platform',
34-
])
35-
;
36-
if (false === $options['required']) {
37-
$builder->get('embedId')->setRequired(false);
38-
$builder->get('embedPlatform')->setRequired(false);
27+
$builder
28+
->add('embedId', TextType::class, [
29+
'label' => 'document.embedId',
30+
'required' => true,
31+
])
32+
->add('embedPlatform', ChoiceType::class, [
33+
'label' => 'document.platform',
34+
'required' => true,
35+
'choices' => $services,
36+
'placeholder' => 'document.no_embed_platform',
37+
])
38+
;
39+
if (false === $options['required']) {
40+
$builder->get('embedId')->setRequired(false);
41+
$builder->get('embedPlatform')->setRequired(false);
42+
}
43+
} else {
44+
$builder
45+
->add('embedUrl', TextType::class, [
46+
'label' => 'document.embedUrl',
47+
'help' => 'document.embedUrl.help',
48+
'required' => true,
49+
'constraints' => [
50+
new NotNull(),
51+
new NotBlank(),
52+
],
53+
])
54+
;
55+
$builder->get('embedUrl')->setRequired(false);
3956
}
4057
}
4158

4259
#[\Override]
4360
public function configureOptions(OptionsResolver $resolver): void
4461
{
4562
$resolver->setDefault('required', true);
46-
$resolver->setRequired('document_platforms');
47-
$resolver->setAllowedTypes('document_platforms', ['array']);
63+
$resolver->setDefault('document_platforms', null);
64+
$resolver->setAllowedTypes('document_platforms', ['array', 'null']);
4865
}
4966

5067
#[\Override]

templates/documents/preview.html.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
<article class="content content-document-infos">
5454
<div class="content-inner">
5555
<table class="uk-table content-table">
56-
{% if not document.private %}
56+
{% if not document.private and document.filename %}
5757
<tr><th>{% trans %}document.relative_url{% endtrans %}</th><td>{{ document|url(thumbnailFormat) }}</td></tr>
5858
<tr><th>{% trans %}document.absolute_url{% endtrans %}</th><td>{{ document|url(thumbnailFormat|merge({absolute:true})) }}</td></tr>
5959
<tr><th>{% trans %}document.unprocessed_url{% endtrans %}</th><td>{{ document|url({noProcess:true}) }}</td></tr>

translations/rozier/messages.en.xlf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1826,6 +1826,14 @@
18261826
<source>document.embedId</source>
18271827
<target state="final">Media identifier on platform</target>
18281828
</trans-unit>
1829+
<trans-unit xml:space="preserve" id="document.embedUrl" approved="yes">
1830+
<source>document.embedUrl</source>
1831+
<target state="final">Media URL on platform</target>
1832+
</trans-unit>
1833+
<trans-unit xml:space="preserve" id="document.embedUrl.help" approved="yes">
1834+
<source>document.embedUrl.help</source>
1835+
<target state="final">Enter the URL of a media to embed (YouTube, Vimeo, etc.)</target>
1836+
</trans-unit>
18291837
<trans-unit xml:space="preserve" id="%field%.is.reserved.word" approved="yes">
18301838
<source>%field%.is.reserved.word</source>
18311839
<target state="final">“%field%” name is a reserved word, please choose another one.</target>

translations/rozier/messages.es.xlf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1769,6 +1769,14 @@
17691769
<source>document.embedId</source>
17701770
<target state="final">Identificación de plataforma multimedia</target>
17711771
</trans-unit>
1772+
<trans-unit xml:space="preserve" id="document.embedUrl" approved="yes">
1773+
<source>document.embedUrl</source>
1774+
<target state="final">URL del multimedia</target>
1775+
</trans-unit>
1776+
<trans-unit xml:space="preserve" id="document.embedUrl.help" approved="yes">
1777+
<source>document.embedUrl.help</source>
1778+
<target state="final">Introduzca la URL del multimedia para incrustar (YouTube, Vimeo, etc.)</target>
1779+
</trans-unit>
17721780
<trans-unit xml:space="preserve" id="%field%.is.reserved.word" approved="yes">
17731781
<source>%field%.is.reserved.word</source>
17741782
<target state="final">La palabra %field% está reservada, por favor escoger otra.</target>

translations/rozier/messages.fr.xlf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1826,6 +1826,14 @@
18261826
<source>document.embedId</source>
18271827
<target state="final">Identifiant du média</target>
18281828
</trans-unit>
1829+
<trans-unit xml:space="preserve" id="document.embedUrl" approved="yes">
1830+
<source>document.embedUrl</source>
1831+
<target state="final">URL du média</target>
1832+
</trans-unit>
1833+
<trans-unit xml:space="preserve" id="document.embedUrl.help" approved="yes">
1834+
<source>document.embedUrl.help</source>
1835+
<target state="final">Entrez l’URL d’une vidéo à intégrer (YouTube, Vimeo, etc.)</target>
1836+
</trans-unit>
18291837
<trans-unit xml:space="preserve" id="%field%.is.reserved.word" approved="yes">
18301838
<source>%field%.is.reserved.word</source>
18311839
<target state="final">Le nom «%field%» est un mot réservé.</target>

0 commit comments

Comments
 (0)