From cc3b928d36094c985f87f6d7d2f5ddbc91c251a7 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 4 May 2013 11:38:57 +0200 Subject: [PATCH] planet: Add yearly summary. --- Makefile | 2 +- static/css/style.css | 8 + templates/modules/planet-entry.html | 2 +- templates/planet/index.html | 63 ++-- templates/planet/year.html | 29 ++ translations/de_DE/LC_MESSAGES/webapp.po | 377 ++++++++++++----------- translations/webapp.pot | 364 +++++++++++----------- webapp/__init__.py | 34 ++ webapp/backend/accounts.py | 2 +- webapp/backend/planet.py | 20 ++ webapp/handlers_base.py | 5 +- webapp/handlers_planet.py | 20 +- 12 files changed, 548 insertions(+), 378 deletions(-) create mode 100644 templates/planet/year.html diff --git a/Makefile b/Makefile index 1002c1ea..89e9928d 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ PO_PATH = translations POTFILE = $(PO_PATH)/webapp.pot POFILES = $(wildcard $(PO_PATH)/*/LC_MESSAGES/*.po) -ALL_FILES = $(shell find . /usr/lib*/python*/site-packages/tornado -name "*.py" -or -name "*.html") +ALL_FILES = $(shell find webapp templates /usr/lib*/python*/site-packages/tornado -name "*.py" -or -name "*.html") .PHONY: pot pot: $(POTFILE) diff --git a/static/css/style.css b/static/css/style.css index 70e35493..943ce7a8 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -372,3 +372,11 @@ section > ul li { padding-bottom: 20px; } } + +.planet-table td.date { + width: 10em; +} + +.planet-table td.author { + width: 10em; +} diff --git a/templates/modules/planet-entry.html b/templates/modules/planet-entry.html index d71d7ee7..9377fcab 100644 --- a/templates/modules/planet-entry.html +++ b/templates/modules/planet-entry.html @@ -1,6 +1,6 @@ {% if show_avatar %} - {{ entry.author.cn }} + {{ entry.author.cn }} {% end %} diff --git a/templates/planet/index.html b/templates/planet/index.html index 30994132..4c7382a1 100644 --- a/templates/planet/index.html +++ b/templates/planet/index.html @@ -3,21 +3,34 @@ {% block title %}{{ _("IPFire Planet") }}{% end block %} {% block body %} -
-

- The IPFire Planet is a place for the people - who are involved in the project to tell the community about - new progress in the development or make some minor announcements. -

+

+ The IPFire Planet is a place for the people + who are involved in the project to tell the community about + new progress in the development or make some minor announcements. +

+
-
+
+
+
+
+ + +
- -
- - -
-
+
+ + {{ _("All posts from") }} + + + +
+ +

@@ -26,18 +39,14 @@ {% module PlanetEntry(entry) %} {% end %} -
-
- -
-
+ {% end block %} diff --git a/templates/planet/year.html b/templates/planet/year.html new file mode 100644 index 00000000..a2b9a6b4 --- /dev/null +++ b/templates/planet/year.html @@ -0,0 +1,29 @@ +{% extends "base.html" %} + +{% block title %}{{ _("IPFire Planet") }}{% end block %} + +{% block subtitle %} + {{ _("Year %s") % year }}

+{% end block %} + +{% block body %} + {% for month, entries in months %} +

{{ format_month_name(month) }}

+ + + {% for entry in entries %} + + + + + + {% end %} +
+ {{ locale.format_date(entry.published, shorter=True) }} + + {{ entry.title }} + + {{ entry.author.cn }} +
+ {% end %} +{% end block %} diff --git a/translations/de_DE/LC_MESSAGES/webapp.po b/translations/de_DE/LC_MESSAGES/webapp.po index 4ca6861c..12872980 100644 --- a/translations/de_DE/LC_MESSAGES/webapp.po +++ b/translations/de_DE/LC_MESSAGES/webapp.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-19 12:41+0100\n" +"POT-Creation-Date: 2013-05-04 11:38+0200\n" "PO-Revision-Date: 2013-02-19 12:38+0100\n" "Last-Translator: Michael Tremer \n" "Language-Team: LANGUAGE \n" @@ -17,6 +17,172 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +#: webapp/handlers_news.py:43 webapp/ui_modules.py:76 +msgid "Unknown author" +msgstr "Unbekannter Autor" + +#: webapp/__init__.py:278 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:225 +msgid "January" +msgstr "Januar" + +#: webapp/__init__.py:280 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:225 +msgid "February" +msgstr "Februar" + +#: webapp/__init__.py:282 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:225 +msgid "March" +msgstr "März" + +#: webapp/__init__.py:284 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:225 +msgid "April" +msgstr "April" + +#: webapp/__init__.py:286 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:226 +msgid "May" +msgstr "Mai" + +#: webapp/__init__.py:288 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:226 +msgid "June" +msgstr "Juni" + +#: webapp/__init__.py:290 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:226 +msgid "July" +msgstr "Juli" + +#: webapp/__init__.py:292 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:226 +msgid "August" +msgstr "August" + +#: webapp/__init__.py:294 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:227 +msgid "September" +msgstr "September" + +#: webapp/__init__.py:296 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:227 +msgid "October" +msgstr "Oktober" + +#: webapp/__init__.py:298 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:227 +msgid "November" +msgstr "November" + +#: webapp/__init__.py:300 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:227 +msgid "December" +msgstr "Dezember" + +#: webapp/ui_modules.py:239 +#, python-format +msgid "%s to %s" +msgstr "%s nach %s" + +#: webapp/backend/wishlist.py:153 +msgid "Checkout this crowdfunding wish from #ipfire:" +msgstr "" + +#: webapp/backend/releases.py:96 +msgid "Image for the armv5tel architecture" +msgstr "Image für die armv5tel-Architektur" + +#: webapp/backend/releases.py:97 +msgid "armv5tel image for boards with serial console" +msgstr "armv5tel-Image für Boards mit serieller Konsole" + +#: webapp/backend/releases.py:98 +msgid "Installable CD image" +msgstr "Bootbares CD-Image" + +#: webapp/backend/releases.py:99 +msgid "Torrent file" +msgstr "Torrentdatei" + +#: webapp/backend/releases.py:100 +msgid "Flash image" +msgstr "Flash-Image" + +#: webapp/backend/releases.py:101 +msgid "Alix image" +msgstr "Alix-Image" + +#: webapp/backend/releases.py:102 +msgid "USB FDD Image" +msgstr "USB-FDD-Image" + +#: webapp/backend/releases.py:103 +msgid "USB HDD Image" +msgstr "USB-HDD-Image" + +#: webapp/backend/releases.py:104 +msgid "Pregenerated Xen image" +msgstr "Vorgefertigtes Xen-Image" + +#: webapp/backend/releases.py:110 webapp/backend/releases.py:150 +msgid "Unknown image type" +msgstr "Unbekanntes Imageformat" + +#: webapp/backend/releases.py:136 +msgid "This image runs on many ARM-based boards" +msgstr "Dieses Image läuft auf vielen ARM-basierten Boards" + +#: webapp/backend/releases.py:137 +msgid "This image runs on ARM boards with a serial console" +msgstr "Dieses Image läuft auf ARM-Boards mit serieller Konsole" + +#: webapp/backend/releases.py:138 +msgid "Use this image to burn a CD and install IPFire from it." +msgstr "" +"Nutze dieses Image um eine CD zu erstellen und IPFire von dieser zu " +"installieren." + +#: webapp/backend/releases.py:139 +msgid "Download the CD image from the torrent network." +msgstr "CD-Image mit aus dem Torrentnetzwerk laden" + +#: webapp/backend/releases.py:140 +msgid "An image that is meant to run on embedded devices." +msgstr "Ein Image, das für eingebettete Systeme optimiert ist." + +#: webapp/backend/releases.py:141 +msgid "Flash image where a serial console is enabled by default." +msgstr "Image, bei welchem die serielle Konsole eingeschaltet ist." + +#: webapp/backend/releases.py:142 +msgid "Install IPFire from a floppy-formated USB key." +msgstr "IPFire von einem Floppy-formatiertem USB-Stick installieren." + +#: webapp/backend/releases.py:143 +msgid "If the floppy image doesn't work, use this image instead." +msgstr "Wenn das Floppy-Image nicht funktioniert, dieses verwenden." + +#: webapp/backend/releases.py:144 +msgid "A ready-to-run image for Xen." +msgstr "Ein fertiges Image für Xen." + +#: webapp/backend/iuse.py:165 +#, python-format +msgid "Mem: %s" +msgstr "RAM: %s" + +#: webapp/backend/iuse.py:168 +#, python-format +msgid "Disk: %s" +msgstr "HDD: %s" + +#: webapp/backend/iuse.py:180 +#, python-format +msgid "Networks: %s" +msgstr "Netzwerke: %s" + #: templates/wishlist/wish.html:3 msgid "Wish" msgstr "Wunsch" @@ -104,7 +270,7 @@ msgstr "Crowdfunding für das IPFire-Projekt" #: templates/wishlist/donate.html:13 templates/wishlist/donate.html:23 #: templates/wishlist/terms.html:3 templates/wishlist/terms.html:7 -#: templates/base.html:78 www/templates/base.html:81 +#: templates/base.html:78 msgid "Terms & Conditions" msgstr "Allgemeine Bedingungen" @@ -783,7 +949,8 @@ msgstr "Was gibt es neues im IPFire Projekt?" msgid "Stay up to date" msgstr "Informiere dich" -#: templates/news.html:61 templates/planet/user.html:3 +#: templates/news.html:61 templates/planet/year.html:3 +#: templates/planet/user.html:3 templates/planet/search.html:3 #: templates/planet/base.html:6 templates/planet/index.html:3 #: templates/planet/posting.html:3 msgid "IPFire Planet" @@ -893,11 +1060,16 @@ msgstr "IPFire herunterladen" msgid "Account Administrator" msgstr "Accountadministrator" -#: templates/planet/user.html:22 templates/planet/index.html:30 +#: templates/planet/year.html:6 +#, python-format +msgid "Year %s" +msgstr "" + +#: templates/planet/user.html:22 templates/planet/index.html:44 msgid "Older posts" msgstr "Ältere Beiträge" -#: templates/planet/user.html:26 templates/planet/index.html:34 +#: templates/planet/user.html:26 templates/planet/index.html:48 msgid "Newer posts" msgstr "Neuere Beiträge" @@ -912,10 +1084,24 @@ msgstr "%s hat bisher noch keine Beiträge verfasst." msgid "Mail" msgstr "Mail" -#: templates/planet/base.html:7 +#: templates/planet/search.html:6 +#, python-format +msgid "Search results for '%s'" +msgstr "" + +#: templates/planet/search.html:16 +#, python-format +msgid "No results found for '%s'" +msgstr "" + +#: templates/planet/base.html:9 msgid "The official blog of the IPFire team" msgstr "Das offizielle Blog des IPFire-Team" +#: templates/planet/index.html:23 +msgid "All posts from" +msgstr "" + #: templates/planet/posting.html:18 templates/modules/planet-entry.html:14 msgid "Posted by" msgstr "Erstellt von" @@ -924,7 +1110,7 @@ msgstr "Erstellt von" msgid "on" msgstr "am" -#: templates/base.html:4 www/templates/base.html:4 +#: templates/base.html:4 msgid "No title given" msgstr "Kein Titel" @@ -933,7 +1119,7 @@ msgid "IPFire is free software" msgstr "IPFire ist freie Software" #: templates/base.html:69 templates/static/press.html:3 -#: templates/static/press.html:7 www/templates/base.html:76 +#: templates/static/press.html:7 msgid "Press" msgstr "Presse" @@ -1376,172 +1562,6 @@ msgstr "Nahgelegene Mirrorserver" msgid "Worldwide mirror servers" msgstr "Weltweite Mirrorserver" -#: webapp/handlers_news.py:43 webapp/ui_modules.py:76 -msgid "Unknown author" -msgstr "Unbekannter Autor" - -#: webapp/ui_modules.py:239 -#, python-format -msgid "%s to %s" -msgstr "%s nach %s" - -#: webapp/backend/wishlist.py:153 -msgid "Checkout this crowdfunding wish from #ipfire:" -msgstr "" - -#: webapp/backend/releases.py:96 -msgid "Image for the armv5tel architecture" -msgstr "Image für die armv5tel-Architektur" - -#: webapp/backend/releases.py:97 -msgid "armv5tel image for boards with serial console" -msgstr "armv5tel-Image für Boards mit serieller Konsole" - -#: webapp/backend/releases.py:98 -msgid "Installable CD image" -msgstr "Bootbares CD-Image" - -#: webapp/backend/releases.py:99 -msgid "Torrent file" -msgstr "Torrentdatei" - -#: webapp/backend/releases.py:100 -msgid "Flash image" -msgstr "Flash-Image" - -#: webapp/backend/releases.py:101 -msgid "Alix image" -msgstr "Alix-Image" - -#: webapp/backend/releases.py:102 -msgid "USB FDD Image" -msgstr "USB-FDD-Image" - -#: webapp/backend/releases.py:103 -msgid "USB HDD Image" -msgstr "USB-HDD-Image" - -#: webapp/backend/releases.py:104 -msgid "Pregenerated Xen image" -msgstr "Vorgefertigtes Xen-Image" - -#: webapp/backend/releases.py:110 webapp/backend/releases.py:150 -msgid "Unknown image type" -msgstr "Unbekanntes Imageformat" - -#: webapp/backend/releases.py:136 -msgid "This image runs on many ARM-based boards" -msgstr "Dieses Image läuft auf vielen ARM-basierten Boards" - -#: webapp/backend/releases.py:137 -msgid "This image runs on ARM boards with a serial console" -msgstr "Dieses Image läuft auf ARM-Boards mit serieller Konsole" - -#: webapp/backend/releases.py:138 -msgid "Use this image to burn a CD and install IPFire from it." -msgstr "" -"Nutze dieses Image um eine CD zu erstellen und IPFire von dieser zu " -"installieren." - -#: webapp/backend/releases.py:139 -msgid "Download the CD image from the torrent network." -msgstr "CD-Image mit aus dem Torrentnetzwerk laden" - -#: webapp/backend/releases.py:140 -msgid "An image that is meant to run on embedded devices." -msgstr "Ein Image, das für eingebettete Systeme optimiert ist." - -#: webapp/backend/releases.py:141 -msgid "Flash image where a serial console is enabled by default." -msgstr "Image, bei welchem die serielle Konsole eingeschaltet ist." - -#: webapp/backend/releases.py:142 -msgid "Install IPFire from a floppy-formated USB key." -msgstr "IPFire von einem Floppy-formatiertem USB-Stick installieren." - -#: webapp/backend/releases.py:143 -msgid "If the floppy image doesn't work, use this image instead." -msgstr "Wenn das Floppy-Image nicht funktioniert, dieses verwenden." - -#: webapp/backend/releases.py:144 -msgid "A ready-to-run image for Xen." -msgstr "Ein fertiges Image für Xen." - -#: webapp/backend/iuse.py:165 -#, python-format -msgid "Mem: %s" -msgstr "RAM: %s" - -#: webapp/backend/iuse.py:168 -#, python-format -msgid "Disk: %s" -msgstr "HDD: %s" - -#: webapp/backend/iuse.py:180 -#, python-format -msgid "Networks: %s" -msgstr "Netzwerke: %s" - -#: www/templates/nopaste-index.html:3 www/templates/nopaste-index.html:6 -msgid "IPFire nopaste service" -msgstr "IPFire nopaste Service" - -#: www/templates/nopaste-index.html:14 -msgid "Subject" -msgstr "Betreff" - -#: www/templates/base.html:78 -msgid "imprint" -msgstr "Impressum" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:225 -msgid "January" -msgstr "Januar" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:225 -msgid "February" -msgstr "Februar" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:225 -msgid "March" -msgstr "März" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:225 -msgid "April" -msgstr "April" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:226 -msgid "May" -msgstr "Mai" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:226 -msgid "June" -msgstr "Juni" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:226 -msgid "July" -msgstr "Juli" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:226 -msgid "August" -msgstr "August" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:227 -msgid "September" -msgstr "September" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:227 -msgid "October" -msgstr "Oktober" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:227 -msgid "November" -msgstr "November" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:227 -msgid "December" -msgstr "Dezember" - #: /usr/lib/python2.7/site-packages/tornado/locale.py:229 msgid "Monday" msgstr "Montag" @@ -1646,6 +1666,15 @@ msgstr "%(weekday)s, %(day)s. %(month_name)s" msgid "%(commas)s and %(last)s" msgstr "%(commas)s und %(last)s" +#~ msgid "IPFire nopaste service" +#~ msgstr "IPFire nopaste Service" + +#~ msgid "Subject" +#~ msgstr "Betreff" + +#~ msgid "imprint" +#~ msgstr "Impressum" + #~ msgid "Profile lookup" #~ msgstr "Profilsuche" diff --git a/translations/webapp.pot b/translations/webapp.pot index 4305df6c..98246f51 100644 --- a/translations/webapp.pot +++ b/translations/webapp.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-19 12:41+0100\n" +"POT-Creation-Date: 2013-05-04 11:38+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,6 +18,170 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" +#: webapp/handlers_news.py:43 webapp/ui_modules.py:76 +msgid "Unknown author" +msgstr "" + +#: webapp/__init__.py:278 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:225 +msgid "January" +msgstr "" + +#: webapp/__init__.py:280 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:225 +msgid "February" +msgstr "" + +#: webapp/__init__.py:282 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:225 +msgid "March" +msgstr "" + +#: webapp/__init__.py:284 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:225 +msgid "April" +msgstr "" + +#: webapp/__init__.py:286 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:226 +msgid "May" +msgstr "" + +#: webapp/__init__.py:288 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:226 +msgid "June" +msgstr "" + +#: webapp/__init__.py:290 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:226 +msgid "July" +msgstr "" + +#: webapp/__init__.py:292 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:226 +msgid "August" +msgstr "" + +#: webapp/__init__.py:294 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:227 +msgid "September" +msgstr "" + +#: webapp/__init__.py:296 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:227 +msgid "October" +msgstr "" + +#: webapp/__init__.py:298 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:227 +msgid "November" +msgstr "" + +#: webapp/__init__.py:300 +#: /usr/lib/python2.7/site-packages/tornado/locale.py:227 +msgid "December" +msgstr "" + +#: webapp/ui_modules.py:239 +#, python-format +msgid "%s to %s" +msgstr "" + +#: webapp/backend/wishlist.py:153 +msgid "Checkout this crowdfunding wish from #ipfire:" +msgstr "" + +#: webapp/backend/releases.py:96 +msgid "Image for the armv5tel architecture" +msgstr "" + +#: webapp/backend/releases.py:97 +msgid "armv5tel image for boards with serial console" +msgstr "" + +#: webapp/backend/releases.py:98 +msgid "Installable CD image" +msgstr "" + +#: webapp/backend/releases.py:99 +msgid "Torrent file" +msgstr "" + +#: webapp/backend/releases.py:100 +msgid "Flash image" +msgstr "" + +#: webapp/backend/releases.py:101 +msgid "Alix image" +msgstr "" + +#: webapp/backend/releases.py:102 +msgid "USB FDD Image" +msgstr "" + +#: webapp/backend/releases.py:103 +msgid "USB HDD Image" +msgstr "" + +#: webapp/backend/releases.py:104 +msgid "Pregenerated Xen image" +msgstr "" + +#: webapp/backend/releases.py:110 webapp/backend/releases.py:150 +msgid "Unknown image type" +msgstr "" + +#: webapp/backend/releases.py:136 +msgid "This image runs on many ARM-based boards" +msgstr "" + +#: webapp/backend/releases.py:137 +msgid "This image runs on ARM boards with a serial console" +msgstr "" + +#: webapp/backend/releases.py:138 +msgid "Use this image to burn a CD and install IPFire from it." +msgstr "" + +#: webapp/backend/releases.py:139 +msgid "Download the CD image from the torrent network." +msgstr "" + +#: webapp/backend/releases.py:140 +msgid "An image that is meant to run on embedded devices." +msgstr "" + +#: webapp/backend/releases.py:141 +msgid "Flash image where a serial console is enabled by default." +msgstr "" + +#: webapp/backend/releases.py:142 +msgid "Install IPFire from a floppy-formated USB key." +msgstr "" + +#: webapp/backend/releases.py:143 +msgid "If the floppy image doesn't work, use this image instead." +msgstr "" + +#: webapp/backend/releases.py:144 +msgid "A ready-to-run image for Xen." +msgstr "" + +#: webapp/backend/iuse.py:165 +#, python-format +msgid "Mem: %s" +msgstr "" + +#: webapp/backend/iuse.py:168 +#, python-format +msgid "Disk: %s" +msgstr "" + +#: webapp/backend/iuse.py:180 +#, python-format +msgid "Networks: %s" +msgstr "" + #: templates/wishlist/wish.html:3 msgid "Wish" msgstr "" @@ -104,7 +268,7 @@ msgstr "" #: templates/wishlist/donate.html:13 templates/wishlist/donate.html:23 #: templates/wishlist/terms.html:3 templates/wishlist/terms.html:7 -#: templates/base.html:78 www/templates/base.html:81 +#: templates/base.html:78 msgid "Terms & Conditions" msgstr "" @@ -774,7 +938,8 @@ msgstr "" msgid "Stay up to date" msgstr "" -#: templates/news.html:61 templates/planet/user.html:3 +#: templates/news.html:61 templates/planet/year.html:3 +#: templates/planet/user.html:3 templates/planet/search.html:3 #: templates/planet/base.html:6 templates/planet/index.html:3 #: templates/planet/posting.html:3 msgid "IPFire Planet" @@ -884,11 +1049,16 @@ msgstr "" msgid "Account Administrator" msgstr "" -#: templates/planet/user.html:22 templates/planet/index.html:30 +#: templates/planet/year.html:6 +#, python-format +msgid "Year %s" +msgstr "" + +#: templates/planet/user.html:22 templates/planet/index.html:44 msgid "Older posts" msgstr "" -#: templates/planet/user.html:26 templates/planet/index.html:34 +#: templates/planet/user.html:26 templates/planet/index.html:48 msgid "Newer posts" msgstr "" @@ -903,10 +1073,24 @@ msgstr "" msgid "Mail" msgstr "" -#: templates/planet/base.html:7 +#: templates/planet/search.html:6 +#, python-format +msgid "Search results for '%s'" +msgstr "" + +#: templates/planet/search.html:16 +#, python-format +msgid "No results found for '%s'" +msgstr "" + +#: templates/planet/base.html:9 msgid "The official blog of the IPFire team" msgstr "" +#: templates/planet/index.html:23 +msgid "All posts from" +msgstr "" + #: templates/planet/posting.html:18 templates/modules/planet-entry.html:14 msgid "Posted by" msgstr "" @@ -915,7 +1099,7 @@ msgstr "" msgid "on" msgstr "" -#: templates/base.html:4 www/templates/base.html:4 +#: templates/base.html:4 msgid "No title given" msgstr "" @@ -924,7 +1108,7 @@ msgid "IPFire is free software" msgstr "" #: templates/base.html:69 templates/static/press.html:3 -#: templates/static/press.html:7 www/templates/base.html:76 +#: templates/static/press.html:7 msgid "Press" msgstr "" @@ -1367,170 +1551,6 @@ msgstr "" msgid "Worldwide mirror servers" msgstr "" -#: webapp/handlers_news.py:43 webapp/ui_modules.py:76 -msgid "Unknown author" -msgstr "" - -#: webapp/ui_modules.py:239 -#, python-format -msgid "%s to %s" -msgstr "" - -#: webapp/backend/wishlist.py:153 -msgid "Checkout this crowdfunding wish from #ipfire:" -msgstr "" - -#: webapp/backend/releases.py:96 -msgid "Image for the armv5tel architecture" -msgstr "" - -#: webapp/backend/releases.py:97 -msgid "armv5tel image for boards with serial console" -msgstr "" - -#: webapp/backend/releases.py:98 -msgid "Installable CD image" -msgstr "" - -#: webapp/backend/releases.py:99 -msgid "Torrent file" -msgstr "" - -#: webapp/backend/releases.py:100 -msgid "Flash image" -msgstr "" - -#: webapp/backend/releases.py:101 -msgid "Alix image" -msgstr "" - -#: webapp/backend/releases.py:102 -msgid "USB FDD Image" -msgstr "" - -#: webapp/backend/releases.py:103 -msgid "USB HDD Image" -msgstr "" - -#: webapp/backend/releases.py:104 -msgid "Pregenerated Xen image" -msgstr "" - -#: webapp/backend/releases.py:110 webapp/backend/releases.py:150 -msgid "Unknown image type" -msgstr "" - -#: webapp/backend/releases.py:136 -msgid "This image runs on many ARM-based boards" -msgstr "" - -#: webapp/backend/releases.py:137 -msgid "This image runs on ARM boards with a serial console" -msgstr "" - -#: webapp/backend/releases.py:138 -msgid "Use this image to burn a CD and install IPFire from it." -msgstr "" - -#: webapp/backend/releases.py:139 -msgid "Download the CD image from the torrent network." -msgstr "" - -#: webapp/backend/releases.py:140 -msgid "An image that is meant to run on embedded devices." -msgstr "" - -#: webapp/backend/releases.py:141 -msgid "Flash image where a serial console is enabled by default." -msgstr "" - -#: webapp/backend/releases.py:142 -msgid "Install IPFire from a floppy-formated USB key." -msgstr "" - -#: webapp/backend/releases.py:143 -msgid "If the floppy image doesn't work, use this image instead." -msgstr "" - -#: webapp/backend/releases.py:144 -msgid "A ready-to-run image for Xen." -msgstr "" - -#: webapp/backend/iuse.py:165 -#, python-format -msgid "Mem: %s" -msgstr "" - -#: webapp/backend/iuse.py:168 -#, python-format -msgid "Disk: %s" -msgstr "" - -#: webapp/backend/iuse.py:180 -#, python-format -msgid "Networks: %s" -msgstr "" - -#: www/templates/nopaste-index.html:3 www/templates/nopaste-index.html:6 -msgid "IPFire nopaste service" -msgstr "" - -#: www/templates/nopaste-index.html:14 -msgid "Subject" -msgstr "" - -#: www/templates/base.html:78 -msgid "imprint" -msgstr "" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:225 -msgid "January" -msgstr "" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:225 -msgid "February" -msgstr "" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:225 -msgid "March" -msgstr "" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:225 -msgid "April" -msgstr "" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:226 -msgid "May" -msgstr "" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:226 -msgid "June" -msgstr "" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:226 -msgid "July" -msgstr "" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:226 -msgid "August" -msgstr "" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:227 -msgid "September" -msgstr "" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:227 -msgid "October" -msgstr "" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:227 -msgid "November" -msgstr "" - -#: /usr/lib/python2.7/site-packages/tornado/locale.py:227 -msgid "December" -msgstr "" - #: /usr/lib/python2.7/site-packages/tornado/locale.py:229 msgid "Monday" msgstr "" diff --git a/webapp/__init__.py b/webapp/__init__.py index 95c034d7..bae75476 100644 --- a/webapp/__init__.py +++ b/webapp/__init__.py @@ -28,6 +28,9 @@ class Application(tornado.web.Application): gzip = True, login_url = "/login", template_path = os.path.join(BASEDIR, "templates"), + ui_methods = { + "format_month_name" : self.format_month_name, + }, ui_modules = { "Advertisement" : AdvertisementModule, "DonationBox" : DonationBoxModule, @@ -123,6 +126,7 @@ class Application(tornado.web.Application): (r"/post/([A-Za-z0-9_-]+)", PlanetPostingHandler), (r"/user/([a-z0-9_-]+)", PlanetUserHandler), (r"/search", PlanetSearchHandler), + (r"/year/(\d+)", PlanetYearHandler), # RSS (r"/rss", RSSPlanetAllHandler), @@ -266,3 +270,33 @@ class Application(tornado.web.Application): def reload(self): logging.debug("Caught reload signal") + + def format_month_name(self, handler, month): + _ = handler.locale.translate + + if month == 1: + return _("January") + elif month == 2: + return _("February") + elif month == 3: + return _("March") + elif month == 4: + return _("April") + elif month == 5: + return _("May") + elif month == 6: + return _("June") + elif month == 7: + return _("July") + elif month == 8: + return _("August") + elif month == 9: + return _("September") + elif month == 10: + return _("October") + elif month == 11: + return _("November") + elif month == 12: + return _("December") + + return month diff --git a/webapp/backend/accounts.py b/webapp/backend/accounts.py index 54b8f325..9be734e9 100644 --- a/webapp/backend/accounts.py +++ b/webapp/backend/accounts.py @@ -160,7 +160,7 @@ class Account(object): name = name.replace("ü", "ue") for mail in self.mail: - if mail.startswith(name + "@"): + if mail.startswith("%s@ipfire.org" % name): return mail raise Exception, "Cannot figure out email address" diff --git a/webapp/backend/planet.py b/webapp/backend/planet.py index 62b8bf0c..7f6a988c 100644 --- a/webapp/backend/planet.py +++ b/webapp/backend/planet.py @@ -44,6 +44,14 @@ class PlanetEntry(object): def published(self): return self.__entry.published + @property + def year(self): + return self.published.year + + @property + def month(self): + return self.published.month + @property def updated(self): return self.__entry.updated @@ -84,6 +92,12 @@ class Planet(object): return sorted(authors) + def get_years(self): + res = self.db.query("SELECT DISTINCT YEAR(published) AS year \ + FROM planet ORDER BY year DESC") + + return [row.year for row in res] + def get_entry_by_slug(self, slug): entry = self.db.get("SELECT * FROM planet WHERE slug = %s", slug) if entry: @@ -128,6 +142,12 @@ class Planet(object): return [PlanetEntry(e) for e in entries] + def get_entries_by_year(self, year): + entries = self.db.query("SELECT * FROM planet \ + WHERE YEAR(published) = %s ORDER BY published DESC", year) + + return [PlanetEntry(e) for e in entries] + def render(self, text, limit=0): if limit and len(text) >= limit: text = text[:limit] + "..." diff --git a/webapp/handlers_base.py b/webapp/handlers_base.py index 2dce5836..893ad1c2 100644 --- a/webapp/handlers_base.py +++ b/webapp/handlers_base.py @@ -3,6 +3,7 @@ from __future__ import division import httplib +import datetime import time import tornado.locale import tornado.web @@ -60,12 +61,14 @@ class BaseHandler(tornado.web.RequestHandler): @property def render_args(self): + today = datetime.date.today() + return { "format_size" : format_size, "hostname" : self.request.host, "lang" : self.locale.code[:2], "rss_url" : self.rss_url, - "year" : time.strftime("%Y"), + "year" : today.year, } def render(self, *args, **_kwargs): diff --git a/webapp/handlers_planet.py b/webapp/handlers_planet.py index 0821c8c7..be85fc36 100644 --- a/webapp/handlers_planet.py +++ b/webapp/handlers_planet.py @@ -26,8 +26,9 @@ class PlanetMainHandler(PlanetBaseHandler): limit = int(self.get_argument("limit", 4)) entries = self.planet.get_entries(offset=offset, limit=limit) + years = self.planet.get_years() - self.render("planet/index.html", entries=entries, + self.render("planet/index.html", entries=entries, years=years, offset=offset + limit, limit=limit) @@ -68,3 +69,20 @@ class PlanetSearchHandler(PlanetBaseHandler): entries = [] self.render("planet/search.html", entries=entries, query=query) + + +class PlanetYearHandler(PlanetBaseHandler): + def get(self, year): + entries = self.planet.get_entries_by_year(year) + + months = {} + for entry in entries: + try: + months[entry.month].append(entry) + except KeyError: + months[entry.month] = [entry] + + months = months.items() + months.sort(reverse=True) + + self.render("planet/year.html", months=months, year=year) -- 2.47.2