Merge lp:~daker/loco-team-portal/fix.lc-bugs into lp:loco-team-portal

Proposed by Adnane Belmadiaf
Status: Merged
Approved by: Adnane Belmadiaf
Approved revision: 612
Merged at revision: 612
Proposed branch: lp:~daker/loco-team-portal/fix.lc-bugs
Merge into: lp:loco-team-portal
Diff against target: 562 lines (+331/-53)
11 files modified
loco_directory/common/views.py (+0/-6)
loco_directory/media/css/styles.css (+19/-3)
loco_directory/teams/forms.py (+10/-0)
loco_directory/teams/management/commands/lcupdate.py (+41/-0)
loco_directory/teams/management/commands/lpupdate.py (+12/-1)
loco_directory/teams/models.py (+1/-1)
loco_directory/teams/urls.py (+0/-1)
loco_directory/teams/views.py (+61/-6)
loco_directory/templates/lc_edit.html (+37/-0)
loco_directory/templates/loco_council.html (+148/-34)
loco_directory/urls.py (+2/-1)
To merge this branch: bzr merge lp:~daker/loco-team-portal/fix.lc-bugs
Reviewer Review Type Date Requested Status
LoCo Team Portal Developers Pending
Review via email: mp+148896@code.launchpad.net

Commit message

Added the ability to add LC feed on LTP
Added the ability to add LC meetings on LTP
Added LC members on LTP

Description of the change

To post a comment you must log in.
612. By Adnane Belmadiaf

Fix edit url

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'loco_directory/common/views.py'
2--- loco_directory/common/views.py 2013-01-14 22:16:07 +0000
3+++ loco_directory/common/views.py 2013-02-17 12:28:20 +0000
4@@ -38,12 +38,6 @@
5 RequestContext(request))
6
7
8-def loco_council(request):
9- context = {}
10- return render_to_response('loco_council.html', context,
11- RequestContext(request))
12-
13-
14 def about(request):
15 context = {}
16 return render_to_response('about.html', context,
17
18=== modified file 'loco_directory/media/css/styles.css'
19--- loco_directory/media/css/styles.css 2012-12-22 23:22:32 +0000
20+++ loco_directory/media/css/styles.css 2013-02-17 12:28:20 +0000
21@@ -1239,7 +1239,7 @@
22 margin-bottom: 0px;
23 }
24
25-.blog-entry-text ol, ul {
26+.blog-entry-text ol, .blog-entry-text ul {
27 text-align:justify;
28 font-size: 13px;
29 line-height: 1.4;
30@@ -1551,7 +1551,6 @@
31 line-height: 15px;
32 }
33
34-
35 .team:after { content: ","; }
36 .link:after { content: ";"; }
37 .calendar:after { content: "N"; }
38@@ -1597,7 +1596,24 @@
39 background: #FFE99A;
40 }
41
42-
43 .copyright {
44 font-size: 0.8em;
45+}
46+
47+#lc {
48+ padding: 15px;
49+ border-top: 1px solid #E6E6E6;
50+}
51+
52+#lc ul {
53+ padding-left: 10px;
54+ margin-bottom: 0;
55+}
56+
57+#lc ul li {
58+ font-size: 1em;
59+}
60+
61+#lc ul li:last-child {
62+ margin-bottom: 0;
63 }
64\ No newline at end of file
65
66=== modified file 'loco_directory/teams/forms.py'
67--- loco_directory/teams/forms.py 2012-12-28 21:03:08 +0000
68+++ loco_directory/teams/forms.py 2013-02-17 12:28:20 +0000
69@@ -24,3 +24,13 @@
70 class Meta(UpdateTeamForm.Meta):
71 model = Team
72 exclude = ('approved', 'expires_date', 'name', 'lp_name', 'admin_profiles', 'owner_profile', 'active', 'mugshot_url')
73+
74+
75+class EditLoCoCouncilForm(UpdateTeamForm, RenderableMixin):
76+ class Meta(UpdateTeamForm.Meta):
77+ model = Team
78+ exclude = ('approved_date', 'approved', 'expires_date', 'name',
79+ 'lp_name', 'contact_profiles', 'admin_profiles',
80+ 'owner_profile', 'active', 'override_name', 'mugshot_url',
81+ 'languages', 'flickr_id', 'picasa_id', 'pixie_id',
82+ 'microbloghashtag', 'countries', 'spr', 'city', 'provides_support')
83
84=== added file 'loco_directory/teams/management/commands/lcupdate.py'
85--- loco_directory/teams/management/commands/lcupdate.py 1970-01-01 00:00:00 +0000
86+++ loco_directory/teams/management/commands/lcupdate.py 2013-02-17 12:28:20 +0000
87@@ -0,0 +1,41 @@
88+# -*- coding: utf-8 -*-
89+#!/usr/bin/python
90+
91+from django.core.management.base import NoArgsCommand
92+from django.contrib.auth.models import Group, User
93+
94+from common import launchpad
95+from userprofiles.models import create_userprofile
96+
97+import sys
98+import logging
99+st_handler = logging.StreamHandler(sys.stderr)
100+formatter = logging.Formatter("[%(asctime)s] - %(levelname)s - %(module)s - %(message)s")
101+st_handler.setFormatter(formatter)
102+
103+log = logging.getLogger(__name__)
104+log.addHandler(st_handler)
105+log.setLevel(logging.DEBUG)
106+
107+
108+class Command(NoArgsCommand):
109+ help = "Pull the LoCo Council members and add them to the DB."
110+
111+ def handle_noargs(self, **options):
112+ lp = launchpad.lp_login()
113+ if not lp:
114+ sys.exit(1)
115+ g = Group.objects.get(name='ubuntu-lococouncil')
116+ users = g.user_set.all()
117+ log.debug("Removing all members.")
118+ for u in users:
119+ g.user_set.remove(u)
120+ lc_members = lp.people["ubuntu-lococouncil"].members
121+ for member in lc_members:
122+ try:
123+ user = User.objects.get(username=member.name)
124+ create_userprofile(sender=User, instance=user, need_update=True)
125+ log.debug("Adding member %s." % user)
126+ g.user_set.add(user)
127+ except User.DoesNotExist:
128+ log.debug("User %s doesn't exist" % member.name)
129
130=== modified file 'loco_directory/teams/management/commands/lpupdate.py'
131--- loco_directory/teams/management/commands/lpupdate.py 2013-02-03 22:47:01 +0000
132+++ loco_directory/teams/management/commands/lpupdate.py 2013-02-17 12:28:20 +0000
133@@ -11,6 +11,15 @@
134 from datetime import datetime
135 import sys
136
137+import logging
138+st_handler = logging.StreamHandler(sys.stderr)
139+formatter = logging.Formatter("[%(asctime)s] - %(levelname)s - %(module)s - %(message)s")
140+st_handler.setFormatter(formatter)
141+
142+log = logging.getLogger(__name__)
143+log.addHandler(st_handler)
144+log.setLevel(logging.DEBUG)
145+
146
147 def create_admin_dict(admins):
148 admin_dict = {}
149@@ -69,7 +78,7 @@
150 lp = launchpad.lp_login()
151 if not lp:
152 sys.exit(1)
153- TEAM_BLACKLIST = (u"ubuntu-lococouncil", u"ubuntu-games-merged")
154+ TEAM_BLACKLIST = (u"ubuntu-games-merged")
155
156 existing_locos = models.Team.objects.all()
157 existing_groups = Group.objects.all()
158@@ -80,12 +89,14 @@
159 team = models.Team(lp_name=l.name, name=l.display_name,
160 owner_profile=create_profile(get_team_owner(l).name))
161 team.save()
162+ log.debug("Created team %s" % team.name)
163 else:
164 team = filter(lambda a: a.lp_name == l.name, existing_locos)[0]
165 team.name = l.display_name
166 team.owner_profile = create_profile(get_team_owner(l).name)
167 if not len(team.contact_profiles.all()):
168 team.contact_profiles.add(team.owner_profile)
169+ log.debug("Updated team %s" % team.name)
170 update_admins(team, l, lp)
171
172 if not existing_groups or l.name not in [g.name for g in existing_groups]:
173
174=== modified file 'loco_directory/teams/models.py'
175--- loco_directory/teams/models.py 2012-12-25 22:00:46 +0000
176+++ loco_directory/teams/models.py 2013-02-17 12:28:20 +0000
177@@ -159,4 +159,4 @@
178
179
180 def teams_without_country():
181- return Team.objects.filter(countries__isnull=True)
182+ return Team.objects.filter(countries__isnull=True).exclude(lp_name="ubuntu-lococouncil")
183
184=== modified file 'loco_directory/teams/urls.py'
185--- loco_directory/teams/urls.py 2012-11-18 22:02:56 +0000
186+++ loco_directory/teams/urls.py 2013-02-17 12:28:20 +0000
187@@ -2,7 +2,6 @@
188
189 urlpatterns = patterns('',
190 url(r'^$', 'teams.views.team_list', name='team-list'),
191- #url(r'^me$', 'teams.views.my_teams', name='my-teams'),
192 url(r'(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/edit$', 'teams.views.team_edit', name='team-edit'),
193 url(r'(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/merge/(?P<other_team_slug>[a-zA-Z0-9\-\.\+?]+)/$', 'teams.views.team_merge', name='team-merge'),
194 url(r'(?P<team_slug>[a-zA-Z0-9\-\.\+?]+)/merge', 'teams.views.select_other_team', name='select-other-team'),
195
196=== modified file 'loco_directory/teams/views.py'
197--- loco_directory/teams/views.py 2013-02-10 14:59:16 +0000
198+++ loco_directory/teams/views.py 2013-02-17 12:28:20 +0000
199@@ -1,19 +1,17 @@
200 # -*- coding: utf-8 -*-
201+from django import http
202 from django.template import RequestContext
203 from django.utils.translation import ugettext
204 from django.core import serializers
205-
206+from django.contrib.auth.models import User
207 from django.shortcuts import render_to_response, redirect, get_object_or_404
208 from django.contrib.auth.decorators import login_required
209-
210-from django import http
211+from django.http import Http404
212
213 from common.utils import simple_iterator
214 from common import launchpad
215-
216 from teams.models import Continent, Team, countries_without_continent, countries_without_continent_have_teams, teams_without_country
217 from teams.utils import merge_teams
218-
219 from events.models import TeamEvent
220 from meetings.models import TeamMeeting
221 from articles.models import Article
222@@ -44,6 +42,57 @@
223 context, RequestContext(request))
224
225
226+def loco_council(request):
227+
228+ team = get_object_or_404(Team, lp_name="ubuntu-lococouncil")
229+ articles = Article.objects.filter(source__team=team)[:5]
230+ is_member = False
231+ is_admin = False
232+ if request.user.is_authenticated():
233+ is_member = launchpad.is_team_member(request.user, team)
234+ is_admin = launchpad.is_admin_or_owner(request.user.username, team) or launchpad.is_user_on_loco_council(request.user)
235+ team_meeting_list = team.teammeeting_set.next_meetings()
236+ members = User.objects.filter(groups__name='ubuntu-lococouncil')
237+ context = {
238+ 'team': team,
239+ 'team_meeting_list': team_meeting_list,
240+ 'articles': articles,
241+ 'members': members,
242+ 'is_member': is_member,
243+ 'is_admin': is_admin,
244+ }
245+ return render_to_response('loco_council.html', context,
246+ RequestContext(request))
247+
248+
249+@login_required
250+def loco_council_edit(request):
251+ team_object = get_object_or_404(Team, lp_name="ubuntu-lococouncil")
252+
253+ #check if user has needed rights
254+ is_on_lc = launchpad.is_user_on_loco_council(request.user)
255+ if not is_on_lc:
256+ request.user.message_set.create(message=ugettext('You are not allowed to make changes to the team details.'))
257+ return redirect('/loco-council/')
258+
259+ if request.method == "POST":
260+ form = forms.EditLoCoCouncilForm(data=request.POST, instance=team_object)
261+
262+ if form.is_valid():
263+ form.save()
264+ request.user.message_set.create(message=ugettext('Thanks, your team\'s details have been saved.'))
265+ return redirect('/loco-council/')
266+ else:
267+ request.user.message_set.create(message=ugettext('Recent changes to your team\'s details could not be saved.'))
268+ else:
269+ form = forms.EditLoCoCouncilForm(instance=team_object)
270+
271+ return render_to_response('lc_edit.html',
272+ {'form': form,
273+ 'team': team_object,
274+ }, RequestContext(request))
275+
276+
277 def as_ical(objects, name):
278 """Return any list events as an ical"""
279 filename = "%s.ics" % name.replace(' ', '-').lower()
280@@ -159,6 +208,8 @@
281
282
283 def team_detail(request, team_slug):
284+ if team_slug == 'ubuntu-lococouncil':
285+ return redirect('/loco-council/')
286 team_object = get_object_or_404(Team, lp_name=team_slug)
287 articles = Article.objects.filter(source__team=team_object)[:5]
288 is_member = False
289@@ -198,7 +249,9 @@
290 def team_merge(request, team_slug, other_team_slug):
291 old_team = get_object_or_404(Team, lp_name=team_slug)
292 new_team = get_object_or_404(Team, lp_name=other_team_slug)
293-
294+ if old_team == 'ubuntu-lococouncil' or new_team == 'ubuntu-lococouncil':
295+ request.user.message_set.create(message=ugettext('You are not allowed to merge this team with another one.'))
296+ return redirect('/')
297 #check if user has needed rights
298 is_admin = launchpad.is_admin_or_owner(request.user.username, old_team) and \
299 launchpad.is_admin_or_owner(request.user.username, new_team)
300@@ -220,6 +273,8 @@
301 @login_required
302 def team_edit(request, team_slug):
303 #get team
304+ if team_slug == 'ubuntu-lococouncil':
305+ raise Http404
306 team_object = get_object_or_404(Team, lp_name=team_slug)
307
308 #check if user has needed rights
309
310=== added file 'loco_directory/templates/lc_edit.html'
311--- loco_directory/templates/lc_edit.html 1970-01-01 00:00:00 +0000
312+++ loco_directory/templates/lc_edit.html 2013-02-17 12:28:20 +0000
313@@ -0,0 +1,37 @@
314+{% extends "base.html" %}
315+{% load i18n %}
316+
317+{% block page_name %}{% blocktrans with team.name as teamname %}Update {{teamname}}{% endblocktrans %}{% endblock %}
318+
319+{% block extrahead %}{{block.super}}
320+{{ form.media }}
321+{% endblock %}
322+
323+{% block sub_nav_links %}
324+ <li><a class="sub-nav-item" href="approved">{% trans "Approved Teams" %}</a></li>
325+ {% if is_admin %}<li><a class="sub-nav-item" href="{% url lc_edit %}" title="{% trans "Edit Details" %}">{% trans "Edit Details" %}</a></li>{% endif %}
326+ {% if is_member %}<li><a class="sub-nav-item" href="{% url team-meeting-new team.lp_name %}" title="{% trans "Add New Meeting" %}">{% trans "Add New Meeting" %}</a></li>{% endif %}
327+{% endblock %}
328+
329+{% block content %}
330+
331+<div class="row">
332+<section class="span-9">
333+ <article id="form">
334+ {% if form.errors %}
335+ <p style="color: red;">
336+ {% trans "Please correct the error" %}{{ form.errors|pluralize }} below.
337+ </p>
338+ {% endif %}
339+
340+ <form action="{{ request.path_info }}" method="POST">{% csrf_token %}
341+ <fieldset>
342+ <h3>{% trans "Update the information below" %}</h3>
343+ {{ form.as_template }}
344+ </fieldset>
345+ <input type="submit" name="submit" value="{% trans "Update Information Now!" %}" class="submit-button" />
346+ </form>
347+ </section>
348+</div>
349+
350+{% endblock %}
351
352=== modified file 'loco_directory/templates/loco_council.html'
353--- loco_directory/templates/loco_council.html 2012-06-04 22:14:50 +0000
354+++ loco_directory/templates/loco_council.html 2013-02-17 12:28:20 +0000
355@@ -1,45 +1,159 @@
356 {% extends "base.html" %}
357-{% load i18n %}
358+{% load i18n teams_tags %}
359
360 {% block page_name %}{% trans "Ubuntu LoCo Council" %}{% endblock %}
361
362 {% block sub_nav_links %}
363 <li><a class="sub-nav-item" href="approved">{% trans "Approved Teams" %}</a></li>
364+ {% if is_admin %}<li><a class="sub-nav-item" href="{% url lc_edit %}" title="{% trans "Edit Details" %}">{% trans "Edit Details" %}</a></li>{% endif %}
365+ {% if is_member %}<li><a class="sub-nav-item" href="{% url team-meeting-new team.lp_name %}" title="{% trans "Add New Meeting" %}">{% trans "Add New Meeting" %}</a></li>{% endif %}
366 {% endblock %}
367
368 {% block content %}
369 <div class="row">
370- <section class="span-12">
371- <h1>{% trans "Ubuntu LoCo Council" %}</h1>
372- <p>
373- {% trans "The Ubuntu LoCo Council is comprised of elected, dedicated members of the Ubuntu Community. They have diverse backgrounds, but have a firm understanding of what makes up successful LoCos. The LoCo Council was set up to govern Ubuntu LoCo teams, and utilizing their past experiences, provide guidance and help when needed to these teams and lead them by example." %}
374- </p>
375- <p>
376- {% trans "The LoCo Council governs the LoCo community, make decisions on resource allocation, deals with conflict resolution and make decisions about where the project should move forward." %}
377- </p>
378- <p>
379- {% trans "The LoCo Council governs the LoCo Community; responsibilities include but are not limited to the following:" %}
380- <ul>
381- <li>{% trans "To provide independent guidance for the LoCo Community." %}</li>
382- <li>{% trans "To maintain quality of governance in the LoCo community." %}</li>
383- <li>{% trans "To assess and re-assess teams for approved state." %}</li>
384- <li>{% trans "To provide input and feedback to other Ubuntu governance boards regarding the needs and achievements of the LoCo community." %}</li>
385- <li>{% trans "To act as an independent, objective, third party to resolve conflict in teams by acting as mediator for a group or individuals." %}</li>
386- <li>{% trans "To govern key LoCo resources such as mailing lists and key web properties. ie. if you log a Request Ticket regarding your LoCo and don't hear anything after 2 weeks contact us." %}</li>
387- <li>{% trans "Influencing and recommending how LoCo resources are allocated." %}</li>
388- <li>{% trans "Influencing the direction and goals of the Ubuntu Project and greater LoCo Team effort." %}</li>
389- <li>{% trans "To motivate and encourage LoCos to be the best they can." %}</li>
390- </ul>
391- </p>
392- <p>
393- {% trans "You can reach the council via email at loco-council at lists.ubuntu.com." %}
394- </p>
395- <p>
396- {% with '<a href="https://wiki.ubuntu.com/LoCoCouncil/Agenda">' as url_lcagenda %}
397- {% with '</a>' as link_end %}
398- {% blocktrans %}The LoCo Council holds regular meetings in #ubuntu-meeting on freenode. To find out when the next meeting is view the {{ url_lcagenda }}Meeting Agenda{{ link_end }} wiki page.{% endblocktrans %}
399- {% endwith %}
400- {% endwith %}
401- </p>
402- </section></div>
403+ <section class="span-9">
404+ <div class="box_content">
405+ <div class="pagelet">
406+ <div id="locobranding">
407+ <img src="{{ MEDIA_URL }}images/cof_orange_hex1.png" alt="{{ team.name }}" title="{{ team.name }}" />
408+ </div>
409+ <div id="loco-name">
410+ <h2>{% trans "Ubuntu LoCo Council" %}</h2>
411+ <div style="display:block;">
412+ <div id="loco-location">
413+ <span title="{% trans "Resources" %}" class="pictogram ml"></span>
414+ <span class="value ellipsis small-ellipsis">
415+ {% if team.web_url %}
416+ <a href="{{ team.web_url }}" title="{% trans "Website" %}" target="_blank">
417+ {% trans "Website" %}
418+ </a>
419+ {% endif %}
420+ {% if team.web_url and team.wiki_url %} / {% endif %}
421+ {% if team.wiki_url %}
422+ <a href="{{ team.wiki_url }}" title="{% trans "Wiki" %}" target="_blank">
423+ {% trans "Wiki" %}
424+ </a>
425+ {% endif %}
426+ </span>
427+ </div>
428+
429+
430+ <div id="loco-support">
431+ <span class="pictogram forums" title="{% trans "Support" %}"></span>
432+ <span class="value ellipsis">
433+ {% if team.ml_url %}
434+ <a href="{{ team.ml_url }}" title="{% trans "Mailing List" %}" target="_blank">
435+ {% trans "Mailing List" %}
436+ </a>
437+ {% endif %} /
438+ {% if team.forum_url %}
439+ <a href="{{ team.forum_url }}" title="{% trans "Forums" %}" target="_blank">
440+ {% trans "Forums" %}
441+ </a>
442+ {% endif %} /
443+ {% if team.irc_chan %}
444+ <a href="http://webchat.freenode.net/?channels={{ team.irc_chan }}&prompt=1&uio=OT10cnVlJjEwPXRydWUmMTE9MjM218&nick={% if user.is_authenticated %}{{ user.username|irc }}{% else %}locodir-user{% endif %}" title="{% trans "IRC" %}" target="_blank">
445+ {% trans "IRC" %}
446+ </a>
447+ {% endif %}
448+ </span>
449+ </div>
450+ </div>
451+ </div>
452+ </div>
453+ <div class="events-meetings-wrapper">
454+ <div style="overflow: auto;">
455+ <h3 class="title">{% trans "Upcoming Meetings" %}</h3>
456+ </div>
457+ {% if team_meeting_list %}
458+ {% for meeting in team_meeting_list %}
459+ <a href="{{ meeting.get_absolute_url }}" title="{% if meeting.venue %}{% else %}{{meeting.date_begin|date:"M d"}}{% endif %}" class="event-meetings">
460+ <span class="title">{{ meeting.name }}</span>
461+ <small>{{ meeting.local_date_begin|date:"l, d N Y" }} {% trans "at " %}{{ meeting.local_date_begin|date:"H:i T" }}</small>
462+ <p>{{ meeting.description }}</p>
463+ </a>
464+ {% endfor %}
465+ {% else %}
466+ <div class="no-results">
467+ {% trans "There are currently no upcoming meetings." %}
468+ </div>
469+ {% endif %}
470+ <div id="lc" style="padding: 15px;">
471+ <p>
472+ {% trans "The Ubuntu LoCo Council is comprised of elected, dedicated members of the Ubuntu Community. They have diverse backgrounds, but have a firm understanding of what makes up successful LoCos. The LoCo Council was set up to govern Ubuntu LoCo teams, and utilizing their past experiences, provide guidance and help when needed to these teams and lead them by example." %}
473+ </p>
474+ <p>
475+ {% trans "The LoCo Council governs the LoCo community, make decisions on resource allocation, deals with conflict resolution and make decisions about where the project should move forward." %}
476+ </p>
477+ <p>
478+ {% trans "The LoCo Council governs the LoCo Community; responsibilities include but are not limited to the following:" %}
479+ <ul>
480+ <li>{% trans "To provide independent guidance for the LoCo Community." %}</li>
481+ <li>{% trans "To maintain quality of governance in the LoCo community." %}</li>
482+ <li>{% trans "To assess and re-assess teams for approved state." %}</li>
483+ <li>{% trans "To provide input and feedback to other Ubuntu governance boards regarding the needs and achievements of the LoCo community." %}</li>
484+ <li>{% trans "To act as an independent, objective, third party to resolve conflict in teams by acting as mediator for a group or individuals." %}</li>
485+ <li>{% trans "To govern key LoCo resources such as mailing lists and key web properties. ie. if you log a Request Ticket regarding your LoCo and don't hear anything after 2 weeks contact us." %}</li>
486+ <li>{% trans "Influencing and recommending how LoCo resources are allocated." %}</li>
487+ <li>{% trans "Influencing the direction and goals of the Ubuntu Project and greater LoCo Team effort." %}</li>
488+ <li>{% trans "To motivate and encourage LoCos to be the best they can." %}</li>
489+ </ul>
490+ </p>
491+ <p>
492+ {% trans "You can reach the council via email at loco-council at lists.ubuntu.com." %}
493+ </p>
494+ <p>
495+ {% with '<a href="https://wiki.ubuntu.com/LoCoCouncil/Agenda">' as url_lcagenda %}
496+ {% with '</a>' as link_end %}
497+ {% blocktrans %}The LoCo Council holds regular meetings in #ubuntu-meeting on freenode. To find out when the next meeting is view the {{ url_lcagenda }}Meeting Agenda{{ link_end }} wiki page.{% endblocktrans %}
498+ {% endwith %}
499+ {% endwith %}
500+ </p>
501+ </div>
502+ </div>
503+
504+ {% if articles %}
505+ <div class="team-planet-wrapper">
506+ <div style="overflow: auto;">
507+ <h3 class="title">{% trans "Planet Feed" %}</h3>
508+ </div>
509+ {% for article in articles %}
510+ <article class="team-blog-entry">
511+ {% if article.source.user %}
512+ <img class="blog-entry-image" src="{{ article.source.user.mugshot }}" />
513+ {% endif %}
514+ <h4 class="blog-entry-title">
515+ <a href="{{ article.get_absolute_url }}" title="{{ article.title }}">{{ article.title }}</a>
516+ </h4>
517+ <div class="blog-entry-author">
518+ {% if article.source.user %}
519+ <a class="user" href="{% url profile-detail article.source.user.user.username %}">{{ article.source.user }}</a>
520+ {% endif %}
521+ </div>
522+ <div class="blog-entry-text">
523+ <p>{{ article.content|safe|striptags|truncatewords_html:100 }}</p>
524+ <p class="more">
525+ <a href="{{ article.get_absolute_url }}" title="{{ article.title }}">{% trans 'Read More' %} ›</a>
526+ </p>
527+ </div>
528+ </article>
529+ {% endfor %}
530+ </div>
531+ {% endif %}
532+ </div>
533+ </section>
534+ <section class="span-3 box_content last">
535+ <div class="sidebar-inner">
536+ <h3 class="title">{% trans "Members" %}</h3>
537+ <div class="team-admins">
538+ {% for member in members %}
539+ <a href="{% url profile-detail member.username %}">
540+ <img src="{% if member.get_profile.mugshot %}{{ member.get_profile.mugshot }}{% else %}{{MEDIA_URL}}img/default-mugshot.png{% endif %}" class="mugshot" height="50" width="50">
541+ <p>{{ member.get_profile.realname }}</p>
542+ </a>
543+ {% endfor %}
544+ </div>
545+ </div>
546+ </section>
547+</div>
548 {% endblock %}
549
550=== modified file 'loco_directory/urls.py'
551--- loco_directory/urls.py 2012-12-26 16:20:13 +0000
552+++ loco_directory/urls.py 2013-02-17 12:28:20 +0000
553@@ -33,7 +33,8 @@
554 url(r'^events/venues/', include('venues.urls')),
555 url(r'^events/', include('events.urls')),
556 url(r'^meetings/', include('meetings.urls')),
557- url(r'^loco-council/$', 'common.views.loco_council', name='loco_council'),
558+ url(r'^loco-council/$', 'teams.views.loco_council', name='loco_council'),
559+ url(r'^loco-council/edit$', 'teams.views.loco_council_edit', name='lc_edit'),
560 url(r'^loco-council/approved$', 'teams.views.reapprovals', name='reapprovals'),
561 url(r'^logout$', 'common.views.site_logout', name='logout'),
562 url(r'^jsi18n', 'django.views.i18n.javascript_catalog', name='jsi18n'),

Subscribers

People subscribed via source and target branches