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
.contrib
.auth
import logout
20 from django
.template
import RequestContext
21 from mygpo
.api
.models
import Podcast
, Subscription
, SubscriptionMeta
22 from mygpo
.web
.models
import SecurityToken
23 from mygpo
.web
.forms
import UserAccountForm
24 from django
.forms
import ValidationError
25 from django
.utils
.translation
import ugettext
as _
26 from mygpo
.decorators
import manual_gc
, allowed_methods
27 from django
.contrib
.auth
.decorators
import login_required
28 from django
.contrib
.sites
.models
import Site
33 @allowed_methods(['GET', 'POST'])
38 if request
.method
== 'GET':
40 form
= UserAccountForm({
41 'email': request
.user
.email
,
42 'public': request
.user
.get_profile().public_profile
45 return render_to_response('account.html', {
47 }, context_instance
=RequestContext(request
))
50 form
= UserAccountForm(request
.POST
)
52 if not form
.is_valid():
53 raise ValueError(_('Oops! Something went wrong. Please double-check the data you entered.'))
55 if form
.cleaned_data
['password_current']:
56 if not request
.user
.check_password(form
.cleaned_data
['password_current']):
57 raise ValueError('Current password is incorrect')
59 request
.user
.set_password(form
.cleaned_data
['password1'])
61 request
.user
.email
= form
.cleaned_data
['email']
63 request
.user
.get_profile().save()
71 except ValidationError
, e
:
75 return render_to_response('account.html', {
78 'error_message': error_message
79 }, context_instance
=RequestContext(request
))
84 @allowed_methods(['GET', 'POST'])
85 def delete_account(request
):
87 if request
.method
== 'GET':
88 return render_to_response('delete_account.html', context_instance
=RequestContext(request
))
90 profile
= request
.user
.get_profile()
91 profile
.deleted
= True
94 request
.user
.is_active
= False
97 return render_to_response('delete_account.html', {
99 }, context_instance
=RequestContext(request
))
104 @allowed_methods(['GET'])
105 def privacy(request
):
107 if 'private_subscriptions' in request
.GET
:
108 request
.user
.get_profile().settings
['public_profile'] = False
109 request
.user
.get_profile().save()
111 elif 'public_subscriptions' in request
.GET
:
112 request
.user
.get_profile().settings
['public_profile'] = True
113 request
.user
.get_profile().save()
115 if 'exclude' in request
.GET
:
116 id = request
.GET
['exclude']
118 podcast
= Podcast
.objects
.get(pk
=id)
119 sm
, c
= SubscriptionMeta
.objects
.get_or_create(user
=request
.user
, podcast
=podcast
, defaults
={'public': False})
122 sm
.settings
['public_subscription'] = False
125 except Podcast
.DoesNotExist
:
128 if 'include' in request
.GET
:
129 id = request
.GET
['include']
131 podcast
= Podcast
.objects
.get(pk
=id)
132 sm
, c
= SubscriptionMeta
.objects
.get_or_create(user
=request
.user
, podcast
=podcast
, defaults
={'public': True})
135 sm
.settings
['public_subscription'] = True
138 except Podcast
.DoesNotExist
:
141 subscriptions
= [s
for s
in Subscription
.objects
.filter(user
=request
.user
)]
142 included_subscriptions
= set([s
.podcast
for s
in subscriptions
if s
.get_meta().public
])
143 excluded_subscriptions
= set([s
.podcast
for s
in subscriptions
if not s
.get_meta().public
])
145 return render_to_response('privacy.html', {
146 'public_subscriptions': request
.user
.get_profile().public_profile
,
147 'included_subscriptions': included_subscriptions
,
148 'excluded_subscriptions': excluded_subscriptions
,
149 }, context_instance
=RequestContext(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
:
163 elif 'private_subscriptions' in request
.GET
:
167 return render_to_response('share.html', {
169 'token': token
.token
,
170 }, context_instance
=RequestContext(request
))