~widelands-dev/widelands-website/django_staticfiles

« back to all changes in this revision

Viewing changes to wlprofile/views.py

  • Committer: Holger Rapp
  • Date: 2009-02-20 12:25:18 UTC
  • Revision ID: holgerrapp@gmx.net-20090220122518-feaq34ta973snnct
Imported wikiapp into our repository, because we did some local changes (users must be logged in to edit wiki pages)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Create your views here.
2
 
 
3
 
 
4
 
from django.urls import reverse
5
 
from django.contrib.auth.decorators import login_required
6
 
from django.contrib.auth.models import User
7
 
from django.shortcuts import render, redirect
8
 
from django.http import HttpResponseRedirect
9
 
from django.shortcuts import get_object_or_404
10
 
from django.conf import settings
11
 
 
12
 
from forms import EditProfileForm
13
 
 
14
 
 
15
 
@login_required
16
 
def delete_me(request):
17
 
    """Show a page to inform the user what deleting means."""
18
 
 
19
 
    context = {
20
 
        'user': request.user
21
 
    }
22
 
    return render(request, 'wlprofile/delete_me.html',
23
 
                  context)
24
 
 
25
 
 
26
 
@login_required
27
 
def do_delete(request):
28
 
    """Delete user specific data.
29
 
 
30
 
    We can't really delete a user who has posted some valid posts (no spam) because otherwise
31
 
    we have foreign keys constraints in the database. All we can do is to do some cleanup and
32
 
    anonymization.
33
 
    """
34
 
 
35
 
    from django.contrib.auth import logout
36
 
    from wlprofile.models import Profile
37
 
    from notification.models import NoticeSetting
38
 
 
39
 
    user = get_object_or_404(User, username=request.user)
40
 
 
41
 
    # Log the user out. We do this as early as possible but after
42
 
    # we get the User object.
43
 
    logout(request)
44
 
 
45
 
    # Clean possible Playtime availabilities
46
 
    from wlscheduling.models import Availabilities
47
 
    try:
48
 
        events = Availabilities.objects.filter(user=user)
49
 
        for event in events:
50
 
            event.delete()
51
 
    except:
52
 
        pass
53
 
            
54
 
    # Clean the Online gaming password
55
 
    from wlggz.models import GGZAuth
56
 
    try:
57
 
        ggz_user = GGZAuth.objects.get(user=user)
58
 
        ggz_user.delete()
59
 
    except:
60
 
        pass
61
 
 
62
 
    # Clean the profile
63
 
    profile = user.wlprofile
64
 
    upload_to = Profile._meta.get_field('avatar').upload_to
65
 
    
66
 
    if upload_to in profile.avatar.name:
67
 
        # Delete the avatar file
68
 
        profile.avatar.delete()
69
 
    
70
 
    # Delete the profile and recreate it to get a clean profile page
71
 
    # We create a new one to have the anymous.png as avatar
72
 
    profile.delete()
73
 
    profile = Profile(user=user, deleted=True)
74
 
    profile.save()
75
 
 
76
 
    # Deactivate all subscriptions
77
 
    notice_settings = NoticeSetting.objects.filter(user=user)
78
 
    for setting in notice_settings:
79
 
        setting.send = False
80
 
        setting.save()
81
 
 
82
 
    # Put all PMs in the trash of the user. They stay as long in the trash until the sender or recipient
83
 
    # has also put the message in the trash.
84
 
    from django_messages.models import Message
85
 
    from datetime import datetime
86
 
    messages = Message.objects.inbox_for(user)
87
 
    for message in messages:
88
 
        message.recipient_deleted_at = datetime.now()
89
 
        message.save()
90
 
    messages = Message.objects.outbox_for(user)
91
 
    for message in messages:
92
 
        message.sender_deleted_at = datetime.now()
93
 
        message.save()
94
 
 
95
 
    # Do some settings in django.auth.User
96
 
    user.is_active = False
97
 
    user.is_staff = False
98
 
    user.is_superuser = False
99
 
    user.email = settings.DELETED_MAIL_ADDRESS
100
 
    user.save()
101
 
 
102
 
    return redirect('mainpage')
103
 
 
104
 
 
105
 
@login_required
106
 
def view(request, user=None):
107
 
    """View the profile.
108
 
 
109
 
    Note that login is required here to make sure that not all spam post
110
 
    can harvest here
111
 
 
112
 
    """
113
 
    if user is None:
114
 
        profile = request.user.wlprofile
115
 
    else:
116
 
        profile = get_object_or_404(User, username=user).wlprofile
117
 
 
118
 
    template_params = {
119
 
        'profile': profile,
120
 
    }
121
 
 
122
 
    return render(request, 'wlprofile/view_profile.html',
123
 
                              template_params)
124
 
 
125
 
 
126
 
@login_required
127
 
def edit(request):
128
 
    instance = request.user.wlprofile
129
 
 
130
 
    if request.method == 'POST':
131
 
        form = EditProfileForm(request.POST,
132
 
                               instance=instance, files=request.FILES)
133
 
        if form.is_valid():
134
 
            form.save()
135
 
 
136
 
            return HttpResponseRedirect(reverse(view))
137
 
    else:
138
 
        form = EditProfileForm(instance=instance)
139
 
 
140
 
    template_params = {
141
 
        'profile': instance,
142
 
        'profile_form': form,
143
 
    }
144
 
    return render(request, 'wlprofile/edit_profile.html',
145
 
                              template_params)