]> git.ipfire.org Git - ipfire.org.git/commitdiff
donate: Add thank you and error page next
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 2 Nov 2018 20:07:22 +0000 (20:07 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 2 Nov 2018 20:07:22 +0000 (20:07 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Makefile.am
src/templates/donate/donate.html [moved from src/templates/donate.html with 99% similarity]
src/templates/donate/error.html [new file with mode: 0644]
src/templates/donate/thank-you.html [new file with mode: 0644]
src/templates/error.html
src/web/__init__.py
src/web/donate.py [new file with mode: 0644]
src/web/handlers.py

index 33ea58ae689649f63434f713c83a08003d770894..6867394d74e91cb811b6f345f617dea282cf29c6 100644 (file)
@@ -78,6 +78,7 @@ web_PYTHON = \
        src/web/base.py \
        src/web/blog.py \
        src/web/boot.py \
+       src/web/donate.py \
        src/web/download.py \
        src/web/fireinfo.py \
        src/web/handlers.py \
@@ -97,7 +98,6 @@ webdir = $(backenddir)/web
 
 templates_DATA = \
        src/templates/base.html \
-       src/templates/donate.html \
        src/templates/error.html \
        src/templates/index.html
 
@@ -132,6 +132,13 @@ templates_blog_modules_DATA = \
 
 templates_blog_modulesdir = $(templates_blogdir)/modules
 
+templates_donate_DATA = \
+       src/templates/donate/donate.html \
+       src/templates/donate/error.html \
+       src/templates/donate/thank-you.html
+
+templates_donatedir = $(templatesdir)/donate
+
 templates_download_DATA = \
        src/templates/download/release.html
 
similarity index 99%
rename from src/templates/donate.html
rename to src/templates/donate/donate.html
index ffae8b0b9a1e5b35de38286ffc72e664306f1c82..d0271b2e50b3fd37f930a50a352649e20f09ae96 100644 (file)
@@ -1,4 +1,4 @@
-{% extends "base.html" %}
+{% extends "../base.html" %}
 
 {% block title %}{{ _("Donate") }}{% end block %}
 
diff --git a/src/templates/donate/error.html b/src/templates/donate/error.html
new file mode 100644 (file)
index 0000000..f9eb4a3
--- /dev/null
@@ -0,0 +1,12 @@
+{% extends "../error.html" %}
+
+{% block title %}{{ _("Oops!") }}{% end block %}
+
+{% block message %}{{ _("Error") }}{% end block %}
+
+{% block main %}
+       <p>
+               {{ _("Unfortunately we were not able to process your donation.") }}
+               {{ _("Please try again later.") }}
+       </p>
+{% end block %}
diff --git a/src/templates/donate/thank-you.html b/src/templates/donate/thank-you.html
new file mode 100644 (file)
index 0000000..2b6d9a3
--- /dev/null
@@ -0,0 +1,19 @@
+{% extends "../base.html" %}
+
+{% block title %}{{ _("Thank You!") }}{% end block %}
+
+{% block container %}
+       <section>
+               <div class="container">
+                       <div class="row">
+                               <div class="col col-lg-6">
+                                       <h1 class="display-2">{{ _("Thank You") }}</h1>
+
+                                       <p>
+                                               {{ _("Thank you very much for your donation to the IPFire Project.") }}
+                                       </p>
+                               </div>
+                       </div>
+               </div>
+       </section>
+{% end block %}
index 970257706cf896902722ff7aba00a826ace39238..02cc4fa19851bc67e8ce9cd11c7beeddc9332f18 100644 (file)
@@ -6,8 +6,10 @@
        <div class="container">
                <div class="row justify-content-center mt-5">
                        <div class="col col-md-5">
-                               <h5 class="mb-0">{{ _("Error %s") % status_code }}</h5>
+                               <h5 class="mb-0">{% block message %}{{ _("Error %s") % status_code }}{% end block %}</h5>
                                <h1>{{ _("oops, something went wrong") }}</h1>
+
+                               {% block main %}{% end block %}
                        </div>
                </div>
        </div>
index 75021c9f8f8231a71ba9b5c649cd0c113359314a..b1aa738676a5ce9d829dc25f3a1afecf5d0d90b0 100644 (file)
@@ -17,6 +17,7 @@ from .handlers import *
 from . import auth
 from . import blog
 from . import boot
+from . import donate
 from . import download
 from . import fireinfo
 from . import iuse
@@ -114,7 +115,9 @@ class Application(tornado.web.Application):
                        (r"/download/([0-9a-z\-\.]+)", download.ReleaseHandler),
 
                        # Donate
-                       (r"/donate", DonateHandler),
+                       (r"/donate", donate.DonateHandler),
+                       (r"/donate/thank-you", donate.ThankYouHandler),
+                       (r"/donate/error", donate.ErrorHandler),
                        (r"/donation", tornado.web.RedirectHandler, { "url" : "/donate" }),
 
                        # Newsletter
diff --git a/src/web/donate.py b/src/web/donate.py
new file mode 100644 (file)
index 0000000..98c426a
--- /dev/null
@@ -0,0 +1,97 @@
+#!/usr/bin/python3
+
+import iso3166
+import tornado.gen
+import tornado.web
+
+from . import base
+
+class DonateHandler(base.BaseHandler):
+       def get(self):
+               location = self.get_remote_location()
+
+               if location:
+                       country = location.country
+               else:
+                       country = None
+
+               # Get defaults
+               amount    = self.get_argument_int("amount", None)
+               currency  = self.get_argument("currency", None)
+               frequency = self.get_argument("frequency", None)
+
+               # Set default currency
+               if not currency in ("EUR", "USD"):
+                       currency = "EUR"
+
+                       # Default to USD for the US only
+                       if country == "US":
+                               currency = "USD"
+
+               # Set default frequency
+               if not frequency in ("one-time", "monthly"):
+                       frequency = "one-time"
+
+               self.render("donate.html", countries=iso3166.countries,
+                       country=country, amount=amount, currency=currency, frequency=frequency)
+
+       @tornado.gen.coroutine
+       def post(self):
+               amount    = self.get_argument("amount")
+               currency  = self.get_argument("currency", "EUR")
+               frequency = self.get_argument("frequency")
+
+               # Get form inputs
+               args = {
+                       "amount"       : amount,
+                       "currency"     : currency,
+
+                       # Is this a recurring donation?
+                       "recurring"    : frequency == "monthly",
+
+                       # Address
+                       "email"        : self.get_argument("email"),
+                       "title"        : self.get_argument("title"),
+                       "first_name"   : self.get_argument("first_name"),
+                       "last_name"    : self.get_argument("last_name"),
+                       "company_name" : self.get_argument("company_name", None),
+                       "street1"      : self.get_argument("street1"),
+                       "street2"      : self.get_argument("street2", None),
+                       "post_code"    : self.get_argument("post_code"),
+                       "city"         : self.get_argument("city"),
+                       "state"        : self.get_argument("state", None),
+                       "country_code" : self.get_argument("country_code"),
+               }
+
+               # Add URLs to redirect the user back
+               args.update({
+                       "success_url"  : "https://%s/donate/thank-you" % self.request.host,
+                       "error_url"    : "https://%s/donate/error" % self.request.host,
+                       "back_url"     : "https://%s/donate?amount=%s&currency=%s&frequency=%s" %
+                               (self.request.host, amount, currency, frequency),
+               })
+
+               # Send request to Zeiterfassung
+               try:
+                       response = yield self.backend.zeiterfassung.send_request(
+                               "/api/v1/donations/create/ipfire-project", **args)
+
+               except Exception:
+                       raise # XXX handle any problems when Zeiterfassung is unreachable
+
+               # Redirect the user to the payment page
+               redirect_url = response.get("redirect_url")
+               if not redirect_url:
+                       raise tornado.web.HTTPError(500, "Did not receive a redirect URL")
+
+               self.redirect(redirect_url)
+
+
+class ThankYouHandler(base.BaseHandler):
+    def get(self):
+        self.render("donate/thank-you.html")
+
+
+class ErrorHandler(base.BaseHandler):
+    def get(self):
+        self.render("donate/error.html")
index 4aa204c5f64c7a6bfdd99798049060fc89cdf121..364f3ed6374c11e0663613cdf625e0ec1b18a904 100644 (file)
@@ -1,9 +1,4 @@
-#!/usr/bin/python
-
-import iso3166
-import tornado.gen
-import tornado.httputil
-import tornado.web
+#!/usr/bin/python3
 
 from . import base
 
@@ -50,87 +45,6 @@ class PlanetUserHandler(base.BaseHandler):
                self.redirect("https://blog.ipfire.org/authors/%s" % user, permanent=True)
 
 
-class DonateHandler(base.BaseHandler):
-       def get(self):
-               location = self.get_remote_location()
-
-               if location:
-                       country = location.country
-               else:
-                       country = None
-
-               # Get defaults
-               amount    = self.get_argument_int("amount", None)
-               currency  = self.get_argument("currency", None)
-               frequency = self.get_argument("frequency", None)
-
-               # Set default currency
-               if not currency in ("EUR", "USD"):
-                       currency = "EUR"
-
-                       # Default to USD for the US only
-                       if country == "US":
-                               currency = "USD"
-
-               # Set default frequency
-               if not frequency in ("one-time", "monthly"):
-                       frequency = "one-time"
-
-               self.render("donate.html", countries=iso3166.countries,
-                       country=country, amount=amount, currency=currency, frequency=frequency)
-
-       @tornado.gen.coroutine
-       def post(self):
-               amount    = self.get_argument("amount")
-               currency  = self.get_argument("currency", "EUR")
-               frequency = self.get_argument("frequency")
-
-               # Get form inputs
-               args = {
-                       "amount"       : amount,
-                       "currency"     : currency,
-
-                       # Is this a recurring donation?
-                       "recurring"    : frequency == "monthly",
-
-                       # Address
-                       "email"        : self.get_argument("email"),
-                       "title"        : self.get_argument("title"),
-                       "first_name"   : self.get_argument("first_name"),
-                       "last_name"    : self.get_argument("last_name"),
-                       "company_name" : self.get_argument("company_name", None),
-                       "street1"      : self.get_argument("street1"),
-                       "street2"      : self.get_argument("street2", None),
-                       "post_code"    : self.get_argument("post_code"),
-                       "city"         : self.get_argument("city"),
-                       "state"        : self.get_argument("state", None),
-                       "country_code" : self.get_argument("country_code"),
-               }
-
-               # Add URLs to redirect the user back
-               args.update({
-                       "success_url"  : "https://%s/donate/thank-you" % self.request.host,
-                       "error_url"    : "https://%s/donate/error" % self.request.host,
-                       "back_url"     : "https://%s/donate?amount=%s&currency=%s&frequency=%s" %
-                               (self.request.host, amount, currency, frequency),
-               })
-
-               # Send request to Zeiterfassung
-               try:
-                       response = yield self.backend.zeiterfassung.send_request(
-                               "/api/v1/donations/create/ipfire-project", **args)
-
-               except Exception:
-                       raise # XXX handle any problems when Zeiterfassung is unreachable
-
-               # Redirect the user to the payment page
-               redirect_url = response.get("redirect_url")
-               if not redirect_url:
-                       raise tornado.web.HTTPError(500, "Did not receive a redirect URL")
-
-               self.redirect(redirect_url)
-
-
 class StaticHandler(base.BaseHandler):
        def initialize(self, template):
                self._template = template