From a0d8f26277a3ae0a770ca033539b6c1405a27c74 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Thu, 12 Jan 2017 17:18:48 +0100 Subject: [PATCH 1/2] New widget to display current features to sponsor. WIP --- .../templates/core/_current_features.html | 19 +++++++++++++++++++ modoboa/core/views/dashboard.py | 18 +++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 modoboa/core/templates/core/_current_features.html diff --git a/modoboa/core/templates/core/_current_features.html b/modoboa/core/templates/core/_current_features.html new file mode 100644 index 000000000..06935b933 --- /dev/null +++ b/modoboa/core/templates/core/_current_features.html @@ -0,0 +1,19 @@ +{% load i18n %} + + +
+
+

{% trans "Features looking for sponsoring" %}

+
+
+ {% for feature in features %} +

{{ feature.name }}

+ {% trans "Current:" %} {{ feature.current }} + {% trans "Goal:" %} {{ feature.goal }} +

{{ feature.description }}

+ {% trans "More" %} + {% empty %} +
{% trans "FIXME" %}
+ {% endfor %} +
+
diff --git a/modoboa/core/views/dashboard.py b/modoboa/core/views/dashboard.py index 2ed925deb..25613dc91 100644 --- a/modoboa/core/views/dashboard.py +++ b/modoboa/core/views/dashboard.py @@ -2,6 +2,7 @@ from dateutil import parser import feedparser +import requests from django.views import generic @@ -9,6 +10,8 @@ from django.contrib.auth import mixins as auth_mixins from .. import signals +MODOBOA_WEBSITE_URL = "https://modoboa.org/" + class DashboardView(auth_mixins.AccessMixin, generic.TemplateView): """Dashboard view.""" @@ -32,14 +35,26 @@ class DashboardView(auth_mixins.AccessMixin, generic.TemplateView): lang = "fr" else: lang = "en" + context.update({"selection": "dashboard"}) + posts = feedparser.parse( - "https://modoboa.org/{}/weblog/feeds/".format(lang)) + "{}{}/weblog/feeds/".format(MODOBOA_WEBSITE_URL, lang)) entries = [] for entry in posts["entries"][:5]: entry["published"] = parser.parse(entry["published"]) entries.append(entry) context["widgets"]["left"].append("core/_latest_news_widget.html") context.update({"news": entries}) + + url = "{}{}/projects/?featured=true".format( + MODOBOA_WEBSITE_URL, lang) + response = requests.get(url) + features = [] + if response.status_code == 200: + features = response.json() + context["widgets"]["left"].append("core/_current_features.html") + context.update({"features": features}) + # Extra widgets result = signals.extra_admin_dashboard_widgets.send( sender=self.__class__, user=self.request.user) @@ -49,4 +64,5 @@ class DashboardView(auth_mixins.AccessMixin, generic.TemplateView): widget["template"]) # FIXME: can raise conflicts... context.update(widget["context"]) + return context From 336f5ddb54eb66bc0d88a9c3f04417f98d511d6c Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Fri, 10 Mar 2017 09:56:31 +0100 Subject: [PATCH 2/2] New widget to display current features. see #1070 --- modoboa/admin/handlers.py | 2 +- .../templates/core/_current_features.html | 21 ++++++++++++------- modoboa/core/templatetags/core_tags.py | 12 ++++++++++- modoboa/core/views/dashboard.py | 5 ++--- modoboa/static/css/custom.css | 5 +++++ 5 files changed, 33 insertions(+), 12 deletions(-) diff --git a/modoboa/admin/handlers.py b/modoboa/admin/handlers.py index 14d8dd860..e297fd3b4 100644 --- a/modoboa/admin/handlers.py +++ b/modoboa/admin/handlers.py @@ -320,7 +320,7 @@ def add_widgets_to_admin_dashboard(sender, user, **kwargs): "domains": models.Domain.objects.get_for_admin(user)} template = "admin/_per_domain_statistics_widget.html" return [{ - "column": "right", + "column": "left", "template": template, "context": context }] diff --git a/modoboa/core/templates/core/_current_features.html b/modoboa/core/templates/core/_current_features.html index 06935b933..94d99c362 100644 --- a/modoboa/core/templates/core/_current_features.html +++ b/modoboa/core/templates/core/_current_features.html @@ -1,4 +1,4 @@ -{% load i18n %} +{% load core_tags i18n %}
@@ -7,13 +7,20 @@
{% for feature in features %} -

{{ feature.name }}

- {% trans "Current:" %} {{ feature.current }} - {% trans "Goal:" %} {{ feature.goal }} -

{{ feature.description }}

- {% trans "More" %} +

{{ feature.name }} + + + {{ feature.current|currencyfmt }} / {{ feature.goal|currencyfmt }} + +

+

{{ feature.slogan|safe }}

+ + {% if not forloop.last %}
{% endif %} {% empty %} -
{% trans "FIXME" %}
+
{% trans "Nothing to sponsor yet." %}
{% endfor %}
diff --git a/modoboa/core/templatetags/core_tags.py b/modoboa/core/templatetags/core_tags.py index 454054498..6d3518728 100644 --- a/modoboa/core/templatetags/core_tags.py +++ b/modoboa/core/templatetags/core_tags.py @@ -1,3 +1,4 @@ +# coding: utf-8 """Custom tags for Core application.""" import os @@ -10,7 +11,7 @@ from django.core.urlresolvers import reverse from django.template.loader import render_to_string from django.utils import timezone from django.utils.safestring import mark_safe -from django.utils.translation import ugettext as _ +from django.utils.translation import get_language, ugettext as _ from django.contrib.sessions.models import Session @@ -255,3 +256,12 @@ def display_messages(msgs): }); """ % (level, text, timeout)) + + +@register.filter +def currencyfmt(amount): + """Simple temp. filter to replace babel.""" + lang = get_language() + if lang == "fr": + return u"{} €".format(amount) + return u"€{}".format(amount) diff --git a/modoboa/core/views/dashboard.py b/modoboa/core/views/dashboard.py index 25613dc91..71ef3e159 100644 --- a/modoboa/core/views/dashboard.py +++ b/modoboa/core/views/dashboard.py @@ -46,13 +46,12 @@ class DashboardView(auth_mixins.AccessMixin, generic.TemplateView): context["widgets"]["left"].append("core/_latest_news_widget.html") context.update({"news": entries}) - url = "{}{}/projects/?featured=true".format( + url = "{}{}/api/projects/?featured=true".format( MODOBOA_WEBSITE_URL, lang) response = requests.get(url) - features = [] if response.status_code == 200: features = response.json() - context["widgets"]["left"].append("core/_current_features.html") + context["widgets"]["right"].append("core/_current_features.html") context.update({"features": features}) # Extra widgets diff --git a/modoboa/static/css/custom.css b/modoboa/static/css/custom.css index 74b304542..85ebdd027 100644 --- a/modoboa/static/css/custom.css +++ b/modoboa/static/css/custom.css @@ -284,4 +284,9 @@ html body div.navbar div.container-fluid div#navigate-navbar-collapse.collapse u /* Wizard */ #wizard .carousel-inner { overflow: visible; +} + +/* Dashboard */ +.slogan { + padding-top: 15px; } \ No newline at end of file