Projet

Général

Profil

Télécharger (5,45 ko) Statistiques
| Branche: | Tag: | Révision:

root / corbo / views.py @ 78775031

1 e0d858ba Serghei MIHAI
from datetime import datetime
2 78775031 Serghei Mihai
import urllib
3 e0d858ba Serghei MIHAI
4
from django.conf import settings
5 6a3e75ef Serghei Mihai
from django.core import signing
6 953e780e Serghei MIHAI
from django.core.urlresolvers import reverse
7 e0d858ba Serghei MIHAI
from django.views.generic import CreateView, UpdateView, DeleteView, \
8
                                 ListView, TemplateView
9
from django.contrib.syndication.views import Feed
10 78775031 Serghei Mihai
from django.shortcuts import resolve_url
11 e0d858ba Serghei MIHAI
from django.utils.feedgenerator import Atom1Feed
12 953e780e Serghei MIHAI
from django.utils.http import urlencode
13 6a3e75ef Serghei Mihai
from django.http import Http404
14 78775031 Serghei Mihai
from django.contrib.auth import logout as auth_logout
15
from django.contrib.auth import views as auth_views
16
from django.http import HttpResponseRedirect
17 e0d858ba Serghei MIHAI
18
import models
19 cc12ccfe Serghei MIHAI
from .forms import AnnounceForm, CategoryForm
20 e0d858ba Serghei MIHAI
21 78775031 Serghei Mihai
try:
22
    from mellon.utils import get_idps
23
except ImportError:
24
    get_idps = lambda: []
25
26
def login(request, *args, **kwargs):
27
    if any(get_idps()):
28
        if not 'next' in request.GET:
29
            return HttpResponseRedirect(resolve_url('mellon_login'))
30
        return HttpResponseRedirect(resolve_url('mellon_login') + '?next='
31
                                    + urllib.quote(request.GET.get('next')))
32
    return auth_views.login(request, *args, **kwargs)
33
34
def logout(request, next_page=None):
35
    if any(get_idps()):
36
        return HttpResponseRedirect(resolve_url('mellon_logout'))
37
    auth_logout(request)
38
    if next_page is not None:
39
        next_page = resolve_url(next_page)
40
    else:
41
        next_page = '/'
42
    return HttpResponseRedirect(next_page)
43
44
45 e0d858ba Serghei MIHAI
class HomepageView(ListView):
46
    model = models.Announce
47 cc12ccfe Serghei MIHAI
    template_name = 'corbo/homepage.html'
48 e0d858ba Serghei MIHAI
49
homepage = HomepageView.as_view()
50
51
class AnnounceCreateView(CreateView):
52 cc12ccfe Serghei MIHAI
    form_class = AnnounceForm
53
    template_name = 'corbo/announce_form.html'
54 953e780e Serghei MIHAI
55
    def get_success_url(self):
56
        """
57
        redirect to the category page of the new created announce
58
        """
59
        return reverse('manage') + '?' + urlencode({'category': self.object.category.id})
60 e0d858ba Serghei MIHAI
61
add_announce = AnnounceCreateView.as_view()
62
63
class AnnounceEditView(UpdateView):
64
    model = models.Announce
65 b94039e0 Serghei MIHAI
    form_class = AnnounceForm
66 953e780e Serghei MIHAI
67
    def get_success_url(self):
68 1e3b89c6 Serghei MIHAI
        return reverse('manage') + '?' + urlencode({'category': self.object.category.id})
69 e0d858ba Serghei MIHAI
70
edit_announce = AnnounceEditView.as_view()
71
72
class AnnounceDeleteView(DeleteView):
73
    model = models.Announce
74
75 953e780e Serghei MIHAI
    def get_success_url(self):
76
        return self.request.META['HTTP_REFERER'] or \
77
            reverse('manage') + '?' + urlencode({'category': self.object.category.id})
78
79 e0d858ba Serghei MIHAI
delete_announce = AnnounceDeleteView.as_view()
80
81
class CategoryCreateView(CreateView):
82 cc12ccfe Serghei MIHAI
    form_class = CategoryForm
83
    template_name = 'corbo/category_form.html'
84 953e780e Serghei MIHAI
85
    def get_success_url(self):
86
        return reverse('manage')
87 cc12ccfe Serghei MIHAI
88
    def form_valid(self, form):
89
        form.save()
90
        return super(CategoryCreateView, self).form_valid(form)
91 e0d858ba Serghei MIHAI
92
add_category = CategoryCreateView.as_view()
93
94
class CategoryEditView(UpdateView):
95 b94039e0 Serghei MIHAI
    form_class = CategoryForm
96 e0d858ba Serghei MIHAI
    model = models.Category
97 953e780e Serghei MIHAI
98
    def get_success_url(self):
99
        return self.request.META['HTTP_REFERER'] or \
100
            reverse('manage') + '?' + urlencode({'category': self.object.id})
101 e0d858ba Serghei MIHAI
102
edit_category = CategoryEditView.as_view()
103
104 5e599191 Serghei Mihai
class CategoryDeleteView(DeleteView):
105 e0d858ba Serghei MIHAI
    model = models.Category
106
107 953e780e Serghei MIHAI
    def get_success_url(self):
108
        return reverse('manage')
109 e0d858ba Serghei MIHAI
110 5e599191 Serghei Mihai
delete_category = CategoryDeleteView.as_view()
111
112 e0d858ba Serghei MIHAI
113 6a3e75ef Serghei Mihai
class UnsubscribeView(DeleteView):
114
    model = models.Subscription
115
116
    def get_object(self, queryset=None):
117
        data = signing.loads(self.kwargs['unsubscription_token'])
118
        try:
119
            return models.Subscription.objects.get(category__pk=data['category'],
120
                                identifier=data['identifier'])
121
        except models.Subscription.DoesNotExist:
122
            raise Http404
123
124
    def get_success_url(self):
125
        return reverse('unsubscription_done')
126
127
unsubscribe = UnsubscribeView.as_view()
128
129
130
class UnsubscriptionDoneView(TemplateView):
131
    template_name='corbo/unsubscription_done.html'
132
133
unsubscription_done = UnsubscriptionDoneView.as_view()
134
135
136 953e780e Serghei MIHAI
class ManageView(ListView):
137 e0d858ba Serghei MIHAI
    paginate_by = settings.ANNOUNCES_PER_PAGE
138 cc12ccfe Serghei MIHAI
    template_name = 'corbo/manage.html'
139 e0d858ba Serghei MIHAI
    model = models.Announce
140
141 13492ce1 Serghei MIHAI
    def get_queryset(self):
142
        queryset = super(ManageView, self).get_queryset()
143
        if self.request.GET.get('category'):
144
            queryset = queryset.filter(category__id=self.request.GET['category'])
145
        return queryset
146
147 e0d858ba Serghei MIHAI
    def get_context_data(self, **kwargs):
148
        context = super(ManageView, self).get_context_data(**kwargs)
149
        context['categories'] = models.Category.objects.all().order_by('-ctime')
150 13492ce1 Serghei MIHAI
        if self.request.GET.get('category'):
151
            try:
152
                context['category_id'] = int(self.request.GET['category'])
153
            except:
154
                pass
155 e0d858ba Serghei MIHAI
        return context
156
157
manage = ManageView.as_view()
158
159 6d73b9d8 Serghei MIHAI
class AtomView(Feed):
160 e0d858ba Serghei MIHAI
    title = settings.RSS_TITLE
161
    description = settings.RSS_DESCRIPTION
162
    link = settings.RSS_LINK
163
    feed_item_link_template = settings.RSS_LINK_TEMPLATE
164
    feed_type = Atom1Feed
165
166
    def __init__(self, **kwargs):
167
        self.__dict__.update(kwargs)
168
169
    def items(self):
170
        return models.Announce.objects.exclude(expiration_time__lt=datetime.now()).order_by('-publication_time')
171
172
    def item_title(self, item):
173
        return item.title
174
175
    def item_description(self, item):
176
        return item.text
177
178
    def item_link(self, item):
179
        return self.feed_item_link_template.format(item.pk)
180
181
    def item_pubdate(self, item):
182 0296e370 Serghei Mihai
        return item.publication_time or item.mtime
183 e0d858ba Serghei MIHAI
184 6d73b9d8 Serghei MIHAI
atom = AtomView()