-
Notifications
You must be signed in to change notification settings - Fork 0
/
views.py
221 lines (172 loc) · 8.05 KB
/
views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
from django import forms
from django.template.response import TemplateResponse
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User as DJUser
from django.shortcuts import render
from django.shortcuts import redirect
from django.utils import dateformat
from message.models import Message
from message.forms import MessageForm
from sharer.models import Sharer
@login_required(login_url='user.views.login')
def sendmessage(request):
"""
Generates the view for sendmessage.html which displays a form for the User
to send a message to another user. Upon submission, a Message object with
the properties from_user, to_user, and message is created and stored in
the database.
"""
users = Sharer.objects.filter(sharezone=request.user.user.sharezone, _my_subclass='user'). \
exclude(id=request.user.id)
if request.method == 'POST':
form = MessageForm(request.user.user, request.POST)
if form.is_valid():
from_user = request.user.user
to_user = DJUser.objects.get(username=request.POST['to_username']).user
message = form.cleaned_data['message']
msg = Message.objects.create(from_user=from_user, to_user=to_user,
message=message,
sharezone=request.user.user.sharezone)
form = MessageForm(request.user.user)
context = {'success': True, 'form': form, 'users': users}
return render(request, 'message/sendmessage.html', context)
else:
context = {'form': form, 'users': users}
return render(request, 'message/sendmessage.html', context)
form = MessageForm(request.user.user)
context = {'form': form, 'users': users}
return render(request, 'message/sendmessage.html', context)
@login_required(login_url='user.views.login')
def inbox(request):
"""
Generates the view for inbox.html which displays a list of messages received
by the User ordered by timestamp. When the inbox page is rendered, the
message is marked as read.
"""
messages = Message.objects.order_by('from_user', '-timestamp')
msg_dict = {}
for message in messages:
if message.to_user.as_child() == request.user.user.as_child():
message.read = True
message.save()
from_username = message.from_user.name
if from_username in msg_dict:
msg_dict[from_username].append(message)
else:
msg_dict[from_username] = [message]
context = {'msg_dict': msg_dict}
return render(request, 'message/inbox.html', context)
@login_required(login_url='user.views.login')
def reply(request, message_id):
"""
Generates the view for reply.html for users to reply to a received message.
Upon submission of the form on the reply page, the form is validated and
upon success, the reply message is created as a Message object and stored
in the database.
"""
msg = Message.objects.get(pk=message_id)
if request.method == 'POST':
form = MessageForm(request.user.user, request.POST)
if not form['message'].errors:
from_user = request.user.user
to_user = msg.from_user
message = form.cleaned_data['message']
new_msg = Message.objects.create(from_user=from_user, to_user=to_user,
message=message,
sharezone=request.user.user.sharezone)
form = MessageForm(request.user.user)
context = {'success': True, 'form': form, 'message': msg}
return render(request, 'message/reply.html', context)
else:
context = {'form': form, 'message': msg}
return render(request, 'message/reply.html', context)
form = MessageForm(request.user.user)
context = {'message': msg, 'form': form}
return render(request, 'message/reply.html', context)
@login_required(login_url='user.views.login')
def delete(request, message_id):
"""
Generates the view for delete.html which asks to user to confirm the
deletion of a message. If confirmed, the message is deleted and the user
is redirected back to inbox.html without the deleted message. If canceled
the user is redirected back to inbox.html with no changes.
"""
msg = Message.objects.get(pk=message_id)
if 'Confirm' in request.GET:
msg_copy = Message(from_user=msg.from_user, to_user=msg.to_user,
timestamp=msg.timestamp, message=msg.message,
sharezone=request.user.user.sharezone)
msg.delete()
context = {'message': msg_copy, 'confirm': False}
return render(request, 'message/delete.html', context)
elif 'Cancel' in request.GET:
return redirect('/message/inbox')
context = {'message': msg, 'confirm': True}
return render(request, 'message/delete.html', context)
@login_required(login_url='user.views.login')
def history(request):
"""
Generates the view for admins to view a history of all messages sent from
a ToolShare user to another user.
"""
adminof = request.user.admin_of_sharezones.all()
admin_level = len(adminof) > 0
if admin_level:
my_sharezone = request.user.user.sharezone
messages = Message.objects.filter(sharezone=my_sharezone). \
order_by('from_user', '-timestamp')
users = Sharer.objects.filter(sharezone=my_sharezone, _my_subclass='user')
else:
messages = Message.objects.all().order_by('from_user', '-timestamp')
users = Sharer.objects.filter(_my_subclass='user')
msg_dict = {}
if request.method == 'POST':
from_username = request.POST['from']
to_username = request.POST['to']
if from_username == 'Any' and to_username == 'Any':
pass
elif from_username == 'Any':
for msg in messages:
from_username = msg.from_user.name
from_to = (from_username, to_username)
if msg.to_user.name == to_username:
if from_to in msg_dict:
msg_dict[from_to].append(msg)
else:
msg_dict[from_to] = [msg]
context = {'msg_dict': msg_dict, 'users': users,
'selected_to': to_username}
return render(request, 'message/history.html', context)
elif to_username == 'Any':
for msg in messages:
to_username = msg.to_user.name
from_to = (from_username, to_username)
if msg.from_user.name == from_username:
if from_to in msg_dict:
msg_dict[from_to].append(msg)
else:
msg_dict[from_to] = [msg]
context = {'msg_dict': msg_dict, 'users': users,
'selected_from': from_username}
return render(request, 'message/history.html', context)
else:
from_to = (from_username, to_username)
print(from_to)
from_user = DJUser.objects.get(username=from_username)
to_user = DJUser.objects.get(username=to_username)
messages = Message.objects.filter(from_user=from_user, to_user=to_user)
if len(messages) != 0:
msg_dict[from_to] = messages
context = {'msg_dict': msg_dict, 'users': users,
'selected_from': from_username, 'selected_to': to_username}
return render(request, 'message/history.html', context)
for msg in messages:
from_username = msg.from_user.name
to_username = msg.to_user.name
from_to = (from_username, to_username)
if from_to in msg_dict:
msg_dict[from_to].append(msg)
else:
msg_dict[from_to] = [msg]
context = {'msg_dict': msg_dict, 'users': users}
return render(request, 'message/history.html', context)