* feat: composer require symfony/mailer * feat: add entities for massive emailing * feat: expose mail API resources * feat: add BatchStatus::SentErrors * fix: show client status after consent command * feat: define shape of audiences criteria * fix: missing map entity provider for mail entities * fix: unsupported array/object conversion of audience criterias * fix: rename MailBatch to MailBroadcast and MailBatchRecipient to MailDispatch * feat: add command to process broadcasts * feat: add lock to broadcast process command * fix: remove dispatchCursor from Broadcast * fix: make broadcasts-process command fast * feat: update mailpit config for local dev * feat: add app:mail:dispatches-process command * feat: it was fun to play with a massive mailing prototype * feat: composer require symfonycasts/reset-password-bundle * feat: make reset-password * fix: bad ALTER on migration down op * feat: add migration for reset password bundle * fix: update forms style * feat: configure mailer address via env var * fix: remove missing asset reference * feat: translate /auth/reset-password * feat: translate email message * fix: calendar minimum optimum deadline not being set when release was given * feat: translate /check-email * feat: translate /reset * fix: rename main SecurityController path to /auth * feat: add known oauth2 clients controllr * fix: deprecated custom responses openapi context definitions * fix: projects not in campaign can still have a calendar * fix: weird af regression out of the blue, fuck software * feat: fuck my life
63 lines
2.4 KiB
Twig
63 lines
2.4 KiB
Twig
{% extends 'base.html.twig' %}
|
|
|
|
{% block title %}
|
|
{{ 'password_reset.request.title' | trans }}
|
|
{% endblock %}
|
|
|
|
{% block body %}
|
|
<div class="mx-auto max-w-360 px-10 mb-20">
|
|
<div class="mx-auto max-w-122 flex flex-col gap-6">
|
|
|
|
{% for flash_error in app.flashes('reset_password_error') %}
|
|
<div class="alert alert-danger" role="alert">
|
|
{{ flash_error }}
|
|
</div>
|
|
{% endfor %}
|
|
|
|
<h1 class="text-2xl font-bold tracking-[0%] text-black mb-8 md:text-3xl md:leading-tight lg:text-[40px] lg:leading-12">
|
|
{{ 'password_reset.request.title' | trans }}
|
|
</h1>
|
|
|
|
{{ form_start(requestForm, {
|
|
attr: {
|
|
class: 'flex flex-col gap-6'
|
|
}
|
|
}) }}
|
|
|
|
<div class="relative">
|
|
{{ form_label(requestForm.email, null, {
|
|
label_attr: {
|
|
class: 'absolute -top-2 left-4 -translate-y-1/2 transform text-sm font-medium text-gray-500 transition-all'
|
|
}
|
|
}) }}
|
|
|
|
{{ form_widget(requestForm.email, {
|
|
attr: {
|
|
class: 'form-control peer border-secondary focus:ring-tertiary w-full rounded-md border bg-white p-4 text-base text-gray-700 placeholder-gray-400 focus:ring-1 focus:outline-none',
|
|
placeholder: 'password_reset.request.email.placeholder' | trans,
|
|
autocomplete: 'email'
|
|
}
|
|
}) }}
|
|
|
|
{{ form_errors(requestForm.email) }}
|
|
</div>
|
|
|
|
<p class="text-content">
|
|
{{ 'password_reset.request.description' | trans }}
|
|
</p>
|
|
|
|
<div class="flex flex-col items-end">
|
|
<button
|
|
class="btn btn-lg btn-primary text-secondary disabled:bg-grey flex items-center justify-center gap-2 font-bold transition hover:cursor-pointer px-8 py-4 rounded-3xl bg-primary w-fit"
|
|
type="submit"
|
|
>
|
|
{{ 'password_reset.request.submit' | trans }}
|
|
</button>
|
|
</div>
|
|
|
|
{{ form_end(requestForm) }}
|
|
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|