Merge lp:~dholbach/serious-donut/add-translations-dashboard into lp:serious-donut

Proposed by Daniel Holbach
Status: Needs review
Proposed branch: lp:~dholbach/serious-donut/add-translations-dashboard
Merge into: lp:serious-donut
Diff against target: 183 lines (+95/-7)
5 files modified
README.local.md (+1/-1)
community/requirements.txt (+5/-5)
community/urls.py (+6/-0)
community/views.py (+45/-1)
templates/translations_dashboard.html (+38/-0)
To merge this branch: bzr merge lp:~dholbach/serious-donut/add-translations-dashboard
Reviewer Review Type Date Requested Status
Registry Administrators Pending
Review via email: mp+294731@code.launchpad.net
To post a comment you must log in.
46. By Daniel Holbach

uncommit local DATABASE change

Unmerged revisions

46. By Daniel Holbach

uncommit local DATABASE change

45. By Daniel Holbach

steal translations dashboard from dev portal

44. By Daniel Holbach

update components

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'README.local.md'
2--- README.local.md 2016-04-29 09:39:19 +0000
3+++ README.local.md 2016-05-15 14:35:51 +0000
4@@ -5,7 +5,7 @@
5
6 virtualenv env
7 ./env/bin/pip install -r community/requirements.txt
8-./env/bin/python manage.py syncdb
9+./env/bin/python manage.py migrate
10 ./env/bin/python manage.py initdb
11 ./env/bin/python manage.py collectstatic
12 ./env/bin/python manage.py runserver
13
14=== modified file 'community/requirements.txt'
15--- community/requirements.txt 2016-04-29 09:54:53 +0000
16+++ community/requirements.txt 2016-05-15 14:35:51 +0000
17@@ -1,6 +1,6 @@
18 aldryn-newsblog==1.2.1
19 argparse==1.2.1
20-Django==1.8.12
21+Django==1.8.13
22 django-classy-tags==0.7.2
23 django-cms==3.2.5
24 djangocms-admin-style==1.1.1
25@@ -9,22 +9,22 @@
26 djangocms-flash==0.3.0
27 djangocms-googlemap==0.4.0
28 djangocms-inherit==0.1.1
29-djangocms-installer==0.8.7
30+djangocms-installer==0.8.8
31 djangocms-link==1.7.2
32 djangocms-picture==1.0.0
33 djangocms-style==1.7.0
34 djangocms-teaser==0.2.0
35 djangocms-text-ckeditor==2.9.3
36 djangocms-video==1.0.0
37-django-mptt==0.8.3
38+django-mptt==0.8.4
39 django-openid-auth==0.7
40 django-reversion==1.10.2
41 django-sekizai==0.9.0
42 Django-Select2==5.8.4
43-django-treebeard==4.0
44+django-treebeard==4.0.1
45 dj-database-url==0.4.1
46 dj-static==0.0.6
47-html5lib==0.999999
48+html5lib==0.9999999
49 Pillow==3.2.0
50 python-openid==2.2.5
51 pytz==2016.4
52
53=== modified file 'community/urls.py'
54--- community/urls.py 2016-04-29 09:39:19 +0000
55+++ community/urls.py 2016-05-15 14:35:51 +0000
56@@ -32,6 +32,12 @@
57 url(r'^', include('cms.urls')),
58 )
59
60+urlpatterns += patterns('community.views',
61+ url(r'^translations-dashboard/$', 'translations_dashboard',
62+ name='translations_dashboard'),
63+)
64+
65+
66 # + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
67
68 # This is only needed when using runserver.
69
70=== modified file 'community/views.py'
71--- community/views.py 2015-07-31 23:49:24 +0000
72+++ community/views.py 2016-05-15 14:35:51 +0000
73@@ -6,10 +6,16 @@
74 from django.conf import settings
75 from django.contrib.auth import logout
76 from django.utils.translation import ugettext_lazy as _
77+from django.views.decorators.cache import never_cache
78 from django.db.models import Q
79
80 from django_openid_auth.signals import openid_login_complete
81
82+from cms.models import CMSPlugin
83+import datetime
84+import pytz
85+
86+
87 try:
88 from django_openid_auth.exceptions import (
89 MissingPhysicalMultiFactor,
90@@ -44,7 +50,7 @@
91 except:
92 request.user.is_staff = False
93 request.user.save()
94-
95+
96 def listen_for_login():
97 openid_login_complete.connect(promote_staff)
98
99@@ -85,3 +91,41 @@
100 'query': query,
101 }
102 return TemplateResponse(request, 'search_results.html', RequestContext(request, context))
103+
104+
105+def get_pages():
106+ dashboard_data = []
107+ known_paths = []
108+ for plugin_change in CMSPlugin.objects.filter(
109+ plugin_type__regex='TextPlugin|RawHtmlPlugin').order_by(
110+ '-changed_date'):
111+ date = plugin_change.changed_date
112+ lang = plugin_change.language.replace('-', '_')
113+ page = plugin_change.placeholder.page
114+ if not page or page.publisher_is_draft:
115+ continue
116+ path = page.get_path()
117+ if path not in known_paths:
118+ known_paths.append(path)
119+ dashboard_data.append({'path': path})
120+ for p in dashboard_data:
121+ if p['path'] == path:
122+ p['title'] = page.get_title()
123+ if p.get(lang):
124+ if date > p[lang]:
125+ p[lang] = date
126+ else:
127+ p[lang] = date
128+ # When an english page is missing, we still need a time to sort pages
129+ notime = datetime.datetime(1, 1, 1, tzinfo=pytz.timezone('UTC'))
130+ dashboard_data = list(reversed(sorted(
131+ dashboard_data, key=lambda k: k.get('en', notime))))
132+ return dashboard_data
133+
134+
135+@never_cache
136+def translations_dashboard(request):
137+ return render_to_response(
138+ 'translations_dashboard.html',
139+ {'cms_pages': get_pages()},
140+ context_instance=RequestContext(request))
141
142=== added file 'templates/translations_dashboard.html'
143--- templates/translations_dashboard.html 1970-01-01 00:00:00 +0000
144+++ templates/translations_dashboard.html 2016-05-15 14:35:51 +0000
145@@ -0,0 +1,38 @@
146+{% extends "base.html" %}
147+{% load i18n static %}
148+
149+{% block content %}
150+<div class="row">
151+ <h2>{% trans "Translations dashboard" %}</h2>
152+ <p>{% trans "A simple dashboard to keep track of updates between languages." %}</p>
153+ <table>
154+ <thead>
155+ <tr>
156+ <th>{% trans "Page" %}</th>
157+ <th>{% trans "English" %}</th>
158+ <th>{% trans "Simplified Chinese" %}</th>
159+ </tr>
160+ </thead>
161+ <tbody
162+ {% for page in cms_pages %}
163+ <tr>
164+
165+ <td style="text-align:left;width:40%;"><a href="/{{ page.path }}">{{ page.title }}</a></td>
166+ <td style="text-align:left;">{{ page.en }}</td>
167+ {% if page.zh_cn > page.en %}
168+ <td style="text-align:left;background-color:#60ab5d;color:#fff;">
169+ {% else %}
170+ <td style="text-align:left;background-color:#f95e5d;color:#fff;">
171+ {% endif %}
172+ {% if page.zh_cn %}
173+ {{ page.zh_cn }}
174+ {% else %}
175+ <span style="color:lightgrey">{% trans "Not available" %}</span>
176+ {% endif %}
177+ </td>
178+ </tr>
179+ {% endfor %}
180+ </tbody>
181+ </table>
182+</div>
183+{% endblock content %}

Subscribers

People subscribed via source and target branches