feat: Standalone subscription form look/feel/functionality pass
The standalone form used for newsletter subscription is used as a fallback page to display when an error occurs in the process of a user attempting another newsletter operation - requesting or confirming a subscription, or modifying an existing subscription - and so is useful even given that newsletter.torproject.org is, itself, also a simple newsletter signup form.
This MR fully implements that standalone form, including both front-end
and back-end validation. Upon successful submission of valid user
data, civi.repository.newsletter_signup()
is called with the
appropriate user data.
In particular:
- The subscription logic inside the SubscriptionForm class has been moved to the form view, where it can be invoked upon successful form validation.
- Said form view now additionally has logic for handling unsuccessful form validation, and for properly displaying form errors on a per-field basis as is done on the donation form.
- An additional view has been added, with its own route at
/subscription-requested/
, to be displayed when a user successfully submits the standalone subscription form. - The standalone subscription form has been redesigned to match the Bootstrap5-powered donation form layout, and to use Django's CSRF token for security. Form field error handling has been implemented both on the front and the back end.