Compare commits

...

3 Commits

5 changed files with 93 additions and 46 deletions
@@ -74,6 +74,10 @@
outline-offset: 3px; outline-offset: 3px;
} }
#eventfilters .widget-select.active::before {
display: none;
}
#eventfilters select:focus-visible { #eventfilters select:focus-visible {
outline: 3px solid currentColor; outline: 3px solid currentColor;
outline-offset: 3px; outline-offset: 3px;
@@ -86,8 +90,9 @@
#eventfilters .eventfilter-clear { #eventfilters .eventfilter-clear {
position: absolute; position: absolute;
top: 50%; top: 50%;
right: .5rem; right: 0;
transform: translateY(-50%); transform: translateY(-50%);
margin: 0;
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@@ -95,7 +100,7 @@
background: transparent; background: transparent;
color: inherit; color: inherit;
cursor: pointer; cursor: pointer;
padding: .125rem; padding: 1em;
line-height: 1; line-height: 1;
} }
@@ -16,30 +16,32 @@
</span> </span>
{% if isEditor %} {% if isEditor %}
<form method="post" style="display:inline;" aria-label="Sichtbarkeit für {{ item.title }} ändern"> <div class="member-events-actions">
<input type="hidden" name="REQUEST_TOKEN" value="{{ requestToken }}"> <form method="post" style="display:inline;" aria-label="Sichtbarkeit für {{ item.title }} ändern">
<input type="hidden" name="action" value="toggle_published"> <input type="hidden" name="REQUEST_TOKEN" value="{{ requestToken }}">
<input type="hidden" name="event_id" value="{{ item.id }}"> <input type="hidden" name="action" value="toggle_published">
<button type="submit" aria-label="{{ item.published ? 'Auf inaktiv setzen' : 'Auf aktiv setzen' }} für {{ item.title }}">{{ item.published ? 'aktiv' : 'inaktiv' }}</button> <input type="hidden" name="event_id" value="{{ item.id }}">
</form> <button type="submit" aria-label="{{ item.published ? 'Auf inaktiv setzen' : 'Auf aktiv setzen' }} für {{ item.title }}">{{ item.published ? 'aktiv' : 'inaktiv' }}</button>
</form>
{% if item.editUrl %} {% if item.editUrl %}
<a href="{{ item.editUrl }}" aria-label="{{ item.title }} bearbeiten">Bearbeiten</a> <a href="{{ item.editUrl }}" aria-label="{{ item.title }} bearbeiten">Bearbeiten</a>
{% endif %} {% endif %}
<form method="post" style="display:inline;" aria-label="{{ item.title }} duplizieren"> <form method="post" style="display:inline;" data-confirm-message="{{ ('Möchten Sie das Event \"' ~ item.title ~ '\" wirklich duplizieren?')|e('html_attr') }}" aria-label="{{ item.title }} duplizieren">
<input type="hidden" name="REQUEST_TOKEN" value="{{ requestToken }}"> <input type="hidden" name="REQUEST_TOKEN" value="{{ requestToken }}">
<input type="hidden" name="action" value="duplicate"> <input type="hidden" name="action" value="duplicate">
<input type="hidden" name="event_id" value="{{ item.id }}"> <input type="hidden" name="event_id" value="{{ item.id }}">
<button type="submit" aria-label="{{ item.title }} duplizieren">Duplizieren</button> <button type="submit" aria-label="{{ item.title }} duplizieren">Duplizieren</button>
</form> </form>
<form method="post" style="display:inline;" onsubmit="return confirm('wirklich löschen?');" aria-label="{{ item.title }} löschen"> <form method="post" style="display:inline;" data-confirm-message="{{ ('Möchten Sie das Event \"' ~ item.title ~ '\" wirklich löschen?')|e('html_attr') }}" aria-label="{{ item.title }} löschen">
<input type="hidden" name="REQUEST_TOKEN" value="{{ requestToken }}"> <input type="hidden" name="REQUEST_TOKEN" value="{{ requestToken }}">
<input type="hidden" name="action" value="delete"> <input type="hidden" name="action" value="delete">
<input type="hidden" name="event_id" value="{{ item.id }}"> <input type="hidden" name="event_id" value="{{ item.id }}">
<button type="submit" aria-label="{{ item.title }} löschen">Löschen</button> <button type="submit" aria-label="{{ item.title }} löschen">Löschen</button>
</form> </form>
</div>
{% endif %} {% endif %}
</li> </li>
{% endfor %} {% endfor %}
@@ -54,6 +56,8 @@
</form> </form>
{% endif %} {% endif %}
<script src="/bundles/mummertmediaeventmanager/assets/member-events-confirm.js?v=20260301a"></script>
<h2>Vergangene Veranstaltungen</h2> <h2>Vergangene Veranstaltungen</h2>
{% if pastEvents is empty %} {% if pastEvents is empty %}
<p>Keine vergangenen Veranstaltungen gefunden.</p> <p>Keine vergangenen Veranstaltungen gefunden.</p>
@@ -69,30 +73,32 @@
</span> </span>
{% if isEditor %} {% if isEditor %}
<form method="post" style="display:inline;" aria-label="Sichtbarkeit für {{ item.title }} ändern"> <div class="member-events-actions">
<input type="hidden" name="REQUEST_TOKEN" value="{{ requestToken }}"> <form method="post" style="display:inline;" aria-label="Sichtbarkeit für {{ item.title }} ändern">
<input type="hidden" name="action" value="toggle_published"> <input type="hidden" name="REQUEST_TOKEN" value="{{ requestToken }}">
<input type="hidden" name="event_id" value="{{ item.id }}"> <input type="hidden" name="action" value="toggle_published">
<button type="submit" aria-label="{{ item.published ? 'Auf inaktiv setzen' : 'Auf aktiv setzen' }} für {{ item.title }}">{{ item.published ? 'aktiv' : 'inaktiv' }}</button> <input type="hidden" name="event_id" value="{{ item.id }}">
</form> <button type="submit" aria-label="{{ item.published ? 'Auf inaktiv setzen' : 'Auf aktiv setzen' }} für {{ item.title }}">{{ item.published ? 'aktiv' : 'inaktiv' }}</button>
</form>
{% if item.editUrl %} {% if item.editUrl %}
<a href="{{ item.editUrl }}" aria-label="{{ item.title }} bearbeiten">Bearbeiten</a> <a href="{{ item.editUrl }}" aria-label="{{ item.title }} bearbeiten">Bearbeiten</a>
{% endif %} {% endif %}
<form method="post" style="display:inline;" aria-label="{{ item.title }} duplizieren"> <form method="post" style="display:inline;" data-confirm-message="{{ ('Möchten Sie das Event \"' ~ item.title ~ '\" wirklich duplizieren?')|e('html_attr') }}" aria-label="{{ item.title }} duplizieren">
<input type="hidden" name="REQUEST_TOKEN" value="{{ requestToken }}"> <input type="hidden" name="REQUEST_TOKEN" value="{{ requestToken }}">
<input type="hidden" name="action" value="duplicate"> <input type="hidden" name="action" value="duplicate">
<input type="hidden" name="event_id" value="{{ item.id }}"> <input type="hidden" name="event_id" value="{{ item.id }}">
<button type="submit" aria-label="{{ item.title }} duplizieren">Duplizieren</button> <button type="submit" aria-label="{{ item.title }} duplizieren">Duplizieren</button>
</form> </form>
<form method="post" style="display:inline;" onsubmit="return confirm('wirklich löschen?');" aria-label="{{ item.title }} löschen"> <form method="post" style="display:inline;" data-confirm-message="{{ ('Möchten Sie das Event \"' ~ item.title ~ '\" wirklich löschen?')|e('html_attr') }}" aria-label="{{ item.title }} löschen">
<input type="hidden" name="REQUEST_TOKEN" value="{{ requestToken }}"> <input type="hidden" name="REQUEST_TOKEN" value="{{ requestToken }}">
<input type="hidden" name="action" value="delete"> <input type="hidden" name="action" value="delete">
<input type="hidden" name="event_id" value="{{ item.id }}"> <input type="hidden" name="event_id" value="{{ item.id }}">
<button type="submit" aria-label="{{ item.title }} löschen">Löschen</button> <button type="submit" aria-label="{{ item.title }} löschen">Löschen</button>
</form> </form>
</div>
{% endif %} {% endif %}
</li> </li>
{% endfor %} {% endfor %}
+28
View File
@@ -0,0 +1,28 @@
(function () {
var decodeHtmlEntities = function (value) {
var textarea = document.createElement('textarea');
textarea.innerHTML = String(value || '');
return textarea.value;
};
var handleSubmit = function (event) {
var target = event.target;
if (!(target instanceof HTMLFormElement)) {
return;
}
var message = decodeHtmlEntities(target.getAttribute('data-confirm-message') || '');
if (!message) {
return;
}
if (!window.confirm(message)) {
event.preventDefault();
}
};
document.addEventListener('submit', handleSubmit, true);
})();
@@ -65,7 +65,14 @@ class MemberEventsController extends AbstractFrontendModuleController
if ('toggle_published' === $action) { if ('toggle_published' === $action) {
$this->eventRepository->togglePublished($eventId); $this->eventRepository->togglePublished($eventId);
} elseif ('duplicate' === $action) { } elseif ('duplicate' === $action) {
$this->eventRepository->duplicate($eventId); $newEventId = $this->eventRepository->duplicate($eventId);
if ($newEventId > 0 && $editPage instanceof PageModel) {
return new RedirectResponse($this->generateContentUrl($editPage, [
'event' => (string) $newEventId,
'ref' => base64_encode($backUrl),
]));
}
} elseif ('delete' === $action) { } elseif ('delete' === $action) {
$this->eventRepository->delete($eventId); $this->eventRepository->delete($eventId);
} }
+2 -1
View File
@@ -84,7 +84,8 @@ class EventRepository
unset($row['id']); unset($row['id']);
if (array_key_exists('title', $row)) { if (array_key_exists('title', $row)) {
$row['title'] = trim((string) $row['title'].' (Kopie)'); $normalizedTitle = html_entity_decode((string) $row['title'], ENT_QUOTES | ENT_HTML5, 'UTF-8');
$row['title'] = trim($normalizedTitle.' (Kopie)');
} }
if (array_key_exists('alias', $row)) { if (array_key_exists('alias', $row)) {