properly mark deleted users (bug 786)
[mygpo.git] / mygpo / web / views / settings.py
blob2f2bd72d300ea486599344d1fe6e9752cda5a0bb
2 # This file is part of my.gpodder.org.
4 # my.gpodder.org is free software: you can redistribute it and/or modify it
5 # under the terms of the GNU Affero General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or (at your
7 # option) any later version.
9 # my.gpodder.org is distributed in the hope that it will be useful, but
10 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
11 # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
12 # License for more details.
14 # You should have received a copy of the GNU Affero General Public License
15 # along with my.gpodder.org. If not, see <http://www.gnu.org/licenses/>.
18 from django.shortcuts import render_to_response
19 from django.http import HttpResponseRedirect
20 from django.contrib.auth import logout
21 from django.template import RequestContext
22 from mygpo.api.models import Podcast, Subscription, SubscriptionMeta
23 from mygpo.web.models import SecurityToken
24 from mygpo.web.forms import UserAccountForm
25 from django.forms import ValidationError
26 from django.utils.translation import ugettext as _
27 from mygpo.api.basic_auth import require_valid_user
28 from django.contrib.auth.decorators import login_required
29 from django.shortcuts import get_object_or_404
30 from django.contrib.sites.models import Site
32 @login_required
33 def account(request):
34 success = False
35 error_message = ''
37 if request.method == 'GET':
39 form = UserAccountForm({
40 'email': request.user.email,
41 'public': request.user.get_profile().public_profile
44 return render_to_response('account.html', {
45 'form': form,
46 }, context_instance=RequestContext(request))
48 try:
49 form = UserAccountForm(request.POST)
51 if not form.is_valid():
52 raise ValueError(_('Oops! Something went wrong. Please double-check the data you entered.'))
54 if form.cleaned_data['password_current']:
55 if not request.user.check_password(form.cleaned_data['password_current']):
56 raise ValueError('Current password is incorrect')
58 request.user.set_password(form.cleaned_data['password1'])
60 request.user.email = form.cleaned_data['email']
61 request.user.save()
62 request.user.get_profile().save()
64 success = True
66 except ValueError, e:
67 success = False
68 error_message = e
70 except ValidationError, e:
71 success = False
72 error_message = e
74 return render_to_response('account.html', {
75 'form': form,
76 'success': success,
77 'error_message': error_message
78 }, context_instance=RequestContext(request))
81 @login_required
82 def delete_account(request):
84 if request.method == 'GET':
85 return render_to_response('delete_account.html', context_instance=RequestContext(request))
87 profile = request.user.get_profile()
88 profile.deleted = True
89 profile.save()
91 request.user.is_active = False
92 request.user.save()
93 logout(request)
94 return render_to_response('delete_account.html', {
95 'success': True
96 }, context_instance=RequestContext(request))
99 @login_required
100 def privacy(request):
102 if request.method == 'GET':
103 form = UserAccountForm({
104 'email': request.user.email,
105 'public': request.user.get_profile().public_profile
108 if 'private_subscriptions' in request.GET:
109 request.user.get_profile().public_profile = False
110 request.user.get_profile().save()
112 elif 'public_subscriptions' in request.GET:
113 request.user.get_profile().public_profile = True
114 request.user.get_profile().save()
116 if 'exclude' in request.GET:
117 id = request.GET['exclude']
118 try:
119 podcast = Podcast.objects.get(pk=id)
120 sm, c = SubscriptionMeta.objects.get_or_create(user=request.user, podcast=podcast, defaults={'public': False})
122 if not c:
123 sm.public=False
124 sm.save()
126 except Podcast.DoesNotExist:
127 pass
129 if 'include' in request.GET:
130 id = request.GET['include']
131 try:
132 podcast = Podcast.objects.get(pk=id)
133 sm, c = SubscriptionMeta.objects.get_or_create(user=request.user, podcast=podcast, defaults={'public': True})
135 if not c:
136 sm.public=True
137 sm.save()
139 except Podcast.DoesNotExist:
140 pass
142 subscriptions = [s for s in Subscription.objects.filter(user=request.user)]
143 included_subscriptions = set([s.podcast for s in subscriptions if s.get_meta().public])
144 excluded_subscriptions = set([s.podcast for s in subscriptions if not s.get_meta().public])
146 return render_to_response('privacy.html', {
147 'public_subscriptions': request.user.get_profile().public_profile,
148 'included_subscriptions': included_subscriptions,
149 'excluded_subscriptions': excluded_subscriptions,
150 }, context_instance=RequestContext(request))
153 @login_required
154 def share(request):
155 site = Site.objects.get_current()
156 token, c = SecurityToken.objects.get_or_create(user=request.user, object='subscriptions', action='r')
159 if 'public_subscriptions' in request.GET:
160 token.token = ''
161 token.save()
163 elif 'private_subscriptions' in request.GET:
164 token.random_token()
165 token.save()
167 return render_to_response('share.html', {
168 'site': site,
169 'token': token.token,
170 }, context_instance=RequestContext(request))