urlpatterns = [
url(r'^members/$', views.members_list_view, name='members-list-view'),
url(r'^members/new/$', views.member_new, name='member-new'),
+ url(r'^members/vcard/$', views.members_vcard, name='members-vcard'),
url(r'^members/(?P<pk>\d+)/$', views.member_view, name='member-view'),
url(r'^members/(?P<pk>\d+)/edit/$', views.member_edit, name='member-edit'),
url(r'^members/(?P<pk>\d+)/emissions/$', views.member_emissions, name='member-emissions'),
from django.contrib.auth.decorators import login_required
from django.contrib.admin.views.decorators import staff_member_required
from django.db.models import Q
-from django.http import HttpResponseRedirect
+from django.http import HttpResponse, HttpResponseRedirect
from django.views.generic.base import TemplateView, RedirectView
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, FormView, UpdateView
from django.core.urlresolvers import reverse_lazy
from django.core.exceptions import PermissionDenied
+import vobject
from .models import User
from .forms import MemberEditForm, MemberCreateForm, MemberEmissionForm
members_list_view = login_required(MembersListView.as_view())
+class MembersVCardView(MembersListView):
+ def get_queryset(self):
+ qs = super().get_queryset()
+ if not self.request.user.is_staff:
+ qs = qs.filter(share_contact_details=True)
+ qs = qs.exclude(email='')
+ return qs
+
+ def render_to_response(self, context, **response_kwargs):
+ members = []
+ for member in self.get_queryset():
+ card = vobject.vCard()
+ card.add('n')
+ card.n.value = vobject.vcard.Name(family=member.last_name, given=member.first_name)
+ card.add('fn')
+ card.fn.value = str(member)
+ card.add('email')
+ card.email.value = member.email
+ card.email.type_param = 'INTERNET'
+ card.add('note')
+ note_parts = []
+ if member.is_ca():
+ note_parts.append('CA')
+ if member.is_cp():
+ note_parts.append('CP')
+ note_parts.extend([str(x) for x in member.active_emissions()])
+ card.note.value = ', '.join(note_parts)
+ if member.phone:
+ card.add('tel')
+ card.tel.value = member.phone
+ card.tel.type_param = 'HOME'
+ if member.mobile:
+ card.add('tel')
+ card.tel.value = member.mobile
+ card.tel.type_param = 'CELL'
+ members.append(card.serialize())
+ content = ''.join(members)
+ return HttpResponse(content, content_type='text/vcard')
+
+
+members_vcard = login_required(MembersVCardView.as_view())
+
+
class MemberView(DetailView):
model = User