xref: /webtrees/resources/views/modals/create-media-object.phtml (revision 8c13cfdeeced6556327d203bd4b108d511ec09f7)
1<?php
2
3use Fisharebest\Webtrees\Http\RequestHandlers\CreateMediaObjectAction;
4use Fisharebest\Webtrees\I18N;
5use Fisharebest\Webtrees\Tree;
6
7/**
8 * @var string                   $max_upload_size
9 * @var array<int|string,string> $media_types
10 * @var Tree                     $tree
11 * @var array<string>            $unused_files
12 */
13
14?>
15
16<form method="post" action="<?= e(route(CreateMediaObjectAction::class, ['tree' => $tree->name()])) ?>" id="wt-modal-form">
17    <?= csrf_field() ?>
18
19    <?= view('modals/header', ['title' => I18N::translate('Create a media object')]) ?>
20
21    <div class="modal-body">
22        <?= view('modals/media-object-fields', ['max_upload_size' => $max_upload_size, 'media_types' => $media_types, 'unused_files' => $unused_files, 'tree' => $tree]) ?>
23    </div>
24
25    <?= view('modals/footer-save-cancel') ?>
26</form>
27
28<script>
29  // Submit the modal form using AJAX
30  document.getElementById('wt-modal-form').addEventListener('submit', function (event) {
31    event.preventDefault();
32    let form = event.target;
33    let modal_content = document.querySelector('#wt-ajax-modal .modal-content');
34    let select = document.getElementById(modal_content.dataset.wtSelectId);
35
36    $.ajax({
37      url: form.action,
38      type: form.method,
39      data: new FormData(form),
40      async: false,
41      cache: false,
42      contentType: false,
43      processData: false,
44      success: function (data) {
45        if (select) {
46          // If this modal was activated by the "new" button in a select2
47          // edit control, then insert the result and select it.
48          let option = new Option(data.text, data.id, true, true);
49          option.innerHTML = option.innerText;
50
51          $(select)
52            .select2({ escapeMarkup: (x) => x })
53            .empty()
54            .append(option)
55            .trigger('change');
56
57          $('#wt-ajax-modal').modal('hide');
58        } else {
59          modal_content.innerHTML = data.html;
60        }
61      },
62      failure: function (data) {
63        modal_content.innerHTML = data.html;
64      },
65    });
66  });
67</script>
68