]> git.ipfire.org Git - people/shoehn/ipfire.org.git/commitdiff
planet: Add yearly summary.
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 4 May 2013 09:38:57 +0000 (11:38 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 4 May 2013 09:38:57 +0000 (11:38 +0200)
12 files changed:
Makefile
static/css/style.css
templates/modules/planet-entry.html
templates/planet/index.html
templates/planet/year.html [new file with mode: 0644]
translations/de_DE/LC_MESSAGES/webapp.po
translations/webapp.pot
webapp/__init__.py
webapp/backend/accounts.py
webapp/backend/planet.py
webapp/handlers_base.py
webapp/handlers_planet.py

index 1002c1ea8e349b382285c1e65c9bd9f98907f393..89e9928d54f6085a908885d2a7a26823be763bbd 100644 (file)
--- 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)
index 70e35493a859c82a17d2def2ecbec71406211325..943ce7a806d9b6c761544598c44771d054eef72b 100644 (file)
@@ -372,3 +372,11 @@ section > ul li {
                padding-bottom: 20px;
        }
 }
+
+.planet-table td.date {
+       width: 10em;
+}
+
+.planet-table td.author {
+       width: 10em;
+}
index d71d7ee786bdb3628996a1f9dc858c975f68b02c..9377fcab2b2baf83a40e0d5d30a21098945b4b8d 100644 (file)
@@ -1,6 +1,6 @@
 {% if show_avatar %}
        <a class="pull-right" href="/user/{{ entry.author.uid }}">
-               <img class="img-rounded img-padding" src="{{ entry.author.gravatar_icon(96) }}" alt="{{ entry.author.cn }}" />
+               <img class="img-rounded img-padding" src="{{ entry.author.gravatar_icon(128) }}" alt="{{ entry.author.cn }}" />
        </a>
 {% end %}
 
index 30994132c0c00cb7043933a08357adcb81f3d3cc..4c7382a18111aff5c546dcd60cf0078bc3db3b12 100644 (file)
@@ -3,21 +3,34 @@
 {% block title %}{{ _("IPFire Planet") }}{% end block %}
 
 {% block body %}
-       <div class="ac">
-               <p class="lead">
-                       The <strong>IPFire Planet</strong> 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.
-               </p>
+       <p class="lead ac">
+               The <strong>IPFire Planet</strong> 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.
+       </p>
+       <br>
 
-               <br>
+       <div class="row">
+               <div class="span4 offset4">
+                       <form class="form-inline" action="/search" method="GET">
+                               <div class="input-append">
+                                       <input type="text" class="input-medium" name="q" placeholder="{{ _("Search") }}">
+                                       <button type="submit" class="btn"><i class="icon-search"></i></button>
+                               </div>
 
-               <form action="/search" method="GET">
-                       <div class="input-append">
-                               <input type="text" class="input-medium" name="q" placeholder="{{ _("Search") }}">
-                               <button type="submit" class="btn"><i class="icon-search"></i></button>
-                       </div>
-               </form>
+                               <div class="btn-group">
+                                       <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
+                                               {{ _("All posts from") }}
+                                               <span class="caret"></span>
+                                       </a>
+                                       <ul class="dropdown-menu">
+                                               {% for y in years %}
+                                                       <li><a href="/year/{{ y }}">{{ y }}</a></li>
+                                               {% end %}
+                                       </ul>
+                               </div>
+                       </form>
+               </div>
        </div>
 
        <hr class="separator">
                {% module PlanetEntry(entry) %}
        {% end %}
 
-       <div class="row">
-               <div class="span9">
-                       <ul class="pager">
-                               <li class="previous">
-                                       <a href="?offset={{ offset }}">&larr; {{ _("Older posts") }}</a>
-                               </li>
-                               {% if offset - limit %}
-                                       <li class="next">
-                                               <a href="?offset={{ offset - (2 * limit) }}">{{ _("Newer posts") }} &rarr;</a>
-                                       </li>
-                               {% end %}
-                       </ul>
-               </div>
-       </div>
+       <ul class="pager">
+               <li class="previous">
+                       <a href="?offset={{ offset }}">&larr; {{ _("Older posts") }}</a>
+               </li>
+               {% if offset - limit %}
+                       <li class="next">
+                               <a href="?offset={{ offset - (2 * limit) }}">{{ _("Newer posts") }} &rarr;</a>
+                       </li>
+               {% end %}
+       </ul>
 {% end block %}
diff --git a/templates/planet/year.html b/templates/planet/year.html
new file mode 100644 (file)
index 0000000..a2b9a6b
--- /dev/null
@@ -0,0 +1,29 @@
+{% extends "base.html" %}
+
+{% block title %}{{ _("IPFire Planet") }}{% end block %}
+
+{% block subtitle %}
+       {{ _("Year %s") % year }}</p>
+{% end block %}
+
+{% block body %}
+       {% for month, entries in months %}
+               <h3>{{ format_month_name(month) }}</h3>
+
+               <table class="table planet-table">
+                       {% for entry in entries %}
+                               <tr>
+                                       <td class="date">
+                                               {{ locale.format_date(entry.published, shorter=True) }}
+                                       </td>
+                                       <td class="title">
+                                               <a href="/post/{{ entry.slug }}">{{ entry.title }}</a>
+                                       </td>
+                                       <td class="author">
+                                               <a href="/user/{{ entry.author.uid }}">{{ entry.author.cn }}</a>
+                                       </td>
+                               </tr>
+                       {% end %}
+               </table>
+       {% end %}
+{% end block %}
index 4ca6861c8baf72a209683749b6de7ffdfc1f0f03..12872980a3db585d3fcf932aa3333cf105490721 100644 (file)
@@ -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 <michael.tremer@ipfire.org>\n"
 "Language-Team: LANGUAGE <LL@li.org>\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"
 
index 4305df6cff6b400c73ba7c37268a94bd1cb1048e..98246f51d7511ff99b5aa9d6acbff10f26d1566a 100644 (file)
@@ -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 <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\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 ""
index 95c034d783819f81c189588b7a679cbb84884c96..bae754765f2adeff24e0ac2e48800fd113bb2099 100644 (file)
@@ -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
index 54b8f325ada7f8cbda51f7e1ca9392e60a86390d..9be734e98a61e2e3ecd9f3ba46e18efc940ccd01 100644 (file)
@@ -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"
index 62b8bf0ca4fd05b613e141a9a1d7347044c8393f..7f6a988ca310f86cf26d211b394788fe785f3413 100644 (file)
@@ -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] + "..."
index 2dce5836d6bff3feca35dcdbe7b9b377624be79a..893ad1c29c04c7d0b1cd325855033c3f58a7fe9b 100644 (file)
@@ -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):
index 0821c8c74d31ab17126fa19c9311f05f98358e4f..be85fc36dad4e1da4f8a6c8086bd63417b9278fc 100644 (file)
@@ -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)