def test_ajax_get_message_user(self): client = self.client message = Message() message.sender = self.sender message.title = u"title" message.text = u"text" message.save() message.recipients = self.recipients message.recipients_user = self.recipients_user message.recipients_group = self.recipients_group message.recipients_course = self.recipients_course get_data = { u'unread_count': 0, u'msg_id': 1, u'mailbox': 'inbox' } response_data = { 'sender': { 'url': self.sender.get_absolute_url(), 'fullname': u'%s %s' % (self.sender.last_name, self.sender.first_name), 'id': self.sender.id, 'avatar': '' }, 'unread_count': 0, 'text': message.text, 'date': message.create_time.astimezone( timezone_pytz(self.sender.get_profile().time_zone) ).strftime("%d.%m.%y %H:%M:%S"), 'recipients_course': [{ 'url': self.recipients_course[0].get_absolute_url(), 'name': self.recipients_course[0].name, 'id': self.recipients_course[0].id }], 'recipients_group': [{ 'name': self.recipients_group[0].name, 'id': self.recipients_group[0].id }], 'recipients_user': [{ 'url': self.recipients_user[0].get_absolute_url(), 'fullname': u'%s %s' % (self.recipients_user[0].last_name, self.recipients_user[0].first_name), 'id': self.recipients_user[0].id }], 'recipients_status': [] } # login self.assertTrue(client.login(username=self.sender.username, password=self.sender_password)) # get page response = client.get(reverse('mail.views.ajax_get_message'), get_data) self.assertEqual(response.status_code, 200) self.assertEqual(json.loads(response.content), response_data)
def qs(self): issues = super(IssueFilter, self).qs issues_count = len(issues) lang = self.data_full.get('lang', settings.LANGUAGE_CODE) timezone = self.data_full.get('timezone', settings.TIME_ZONE) start = int(self.data_full.get('start', 0)) end = start + int(self.data_full.get('length', 50)) data = [] issues = issues[start:end] for issue in issues: student = issue.student responsible = issue.responsible data.append({ "start": start, "has_issue_access": issue.task.has_issue_access(), "issue_url": issue.get_absolute_url(), "student_url": student.get_absolute_url(), "student_name": u'%s %s' % (student.last_name, student.first_name), "task_title": issue.task.get_title(lang), "update_time": issue.update_time.astimezone( timezone_pytz(timezone)).strftime('%d-%m-%Y %H:%M'), "mark": float(issue.score()), "status_name": issue.status_field.get_name(lang), "status_color": issue.status_field.color, "responsible_url": responsible.get_absolute_url() if responsible else "", "responsible_name": u'%s %s' % (responsible.last_name, responsible.first_name) if responsible else "", "DT_RowId": "row_issue_" + str(issue.id), "DT_RowData": { "id": issue.id }, }) self.response = { 'draw': self.data_full.get('draw', None), 'recordsTotal': issues_count, 'recordsFiltered': issues_count, 'data': data, 'url': "queue?" + self.data_full.get('filter', ''), } return Issue.objects.none()
def set_user_statuses(request, username=None): if request.method == 'GET': return HttpResponseForbidden() user = request.user if not user.is_staff: return HttpResponseForbidden() user_to_show = user if username: user_to_show = get_object_or_404(User, username=username) user_profile = user_to_show.profile is_error = False error = '' try: user_profile.user_status = filter( bool, dict(request.POST).get('status_by_type[]', [])) user_profile.updated_by = user user_profile.save() reversion.set_user(user) reversion.set_comment("Change from user profile") except Exception as e: is_error = True error = unicode(e) user_statuses = list(user_profile.user_status.all().values( "name", "color")) user_profile_log = { 'update_time': user_profile.update_time.astimezone( timezone_pytz(user.profile.time_zone)).strftime("%d-%m-%Y %H:%M"), 'updated_by': user_profile.updated_by.username, 'fullname': user_profile.updated_by.get_full_name() } return HttpResponse(json.dumps({ 'user_statuses': user_statuses, 'user_profile_log': user_profile_log, 'is_error': is_error, 'error': error }), content_type="application/json")
def public(request): # This is public landing page # Measurements are not filtered by user! custom_date = request.GET.get('date', False) date = timezone.localtime(timezone.now()) hour_from = request.GET.get('hour_from', date.hour) hour_to = request.GET.get('hour_to', date.hour + 1) if hour_from or hour_to: try: hour_to = int(hour_to) hour_from = int(hour_from) except Exception as e: hour_from = 0 hour_to = 23 if custom_date: try: date = timezone.datetime.strptime(custom_date, '%d-%b-%Y') date = date.replace(tzinfo=timezone_pytz(settings.TIME_ZONE)) except Exception as e: print e date = timezone.localtime(timezone.now()) ms = Measurement.objects.filter( created_on__date__day=date.day, created_on__date__month=date.month, created_on__hour__range=(hour_from, hour_to), # created_on__minute=15, ) dht22_h = ms.filter(sensor__name='DHT22', sensor__kind__name='humidity') dht22_t = ms.filter(sensor__name='DHT22', sensor__kind__name='temperature') ds18b20 = ms.filter(sensor__name='DS18B20') data = { 'dht22_h': dht22_h, 'dht22_t': dht22_t, 'ds18b20': ds18b20, 'date': date, 'hour_from': hour_from, 'hour_to': hour_to, } return render(request, 'public/public.html', data)
def set_user_statuses(request, username=None): if request.method == 'GET': return HttpResponseForbidden() user = request.user if not user.is_staff: return HttpResponseForbidden() user_to_show = user if username: user_to_show = get_object_or_404(User, username=username) user_profile = user_to_show.get_profile() is_error = False error = '' try: user_profile.user_status = filter(bool, dict(request.POST).get('status_by_type[]', [])) user_profile.updated_by = user user_profile.save() reversion.set_user(user) reversion.set_comment("Change from user profile") except Exception as e: is_error = True error = unicode(e) user_statuses = list(user_profile.user_status.all().values("name", "color")) user_profile_log = { 'update_time': user_profile.update_time.astimezone( timezone_pytz(user.get_profile().time_zone) ).strftime("%d-%m-%Y %H:%M"), 'updated_by': user_profile.updated_by.username, 'fullname': user_profile.updated_by.get_full_name() } return HttpResponse(json.dumps({'user_statuses': user_statuses, 'user_profile_log': user_profile_log, 'is_error': is_error, 'error': error}), content_type="application/json")
def qs(self): issues = super(IssueFilter, self).qs issues_count = len(issues) lang = self.data_full.get('lang', settings.LANGUAGE_CODE) timezone = self.data_full.get('timezone', settings.TIME_ZONE) start = int(self.data_full.get('start', 0)) end = start + int(self.data_full.get('length', 50)) data = [] issues = issues[start:end] for issue in issues: student = issue.student responsible = issue.responsible data.append({ "start": start, "has_issue_access": issue.task.has_issue_access(), "issue_url": issue.get_absolute_url(), "student_url": student.get_absolute_url(), "student_name": u'%s %s' % (student.last_name, student.first_name), "task_title": issue.task.get_title(lang), "update_time": issue.update_time.astimezone(timezone_pytz(timezone)).strftime('%d-%m-%Y %H:%M'), "mark": float(issue.score()), "status_name": issue.status_field.get_name(lang), "status_color": issue.status_field.color, "responsible_url": responsible.get_absolute_url() if responsible else "", "responsible_name": u'%s %s' % (responsible.last_name, responsible.first_name) if responsible else "", "DT_RowId": "row_issue_" + str(issue.id), "DT_RowData": { "id": issue.id }, }) self.response = { 'draw': self.data_full.get('draw', None), 'recordsTotal': issues_count, 'recordsFiltered': issues_count, 'data': data, 'url': "queue?" + self.data_full.get('filter', ''), } return Issue.objects.none()
def public(request): # This is public landing page # Measurements are not filtered by user! custom_date = request.GET.get('date', False) date = timezone.localtime(timezone.now()) hour_from = request.GET.get('hour_from', date.hour - 1) hour_to = request.GET.get('hour_to', date.hour + 1) if hour_from or hour_to: try: hour_to = int(hour_to) hour_from = int(hour_from) except Exception as e: hour_from = 0 hour_to = 23 if custom_date: try: date = timezone.datetime.strptime(custom_date, '%d-%b-%Y') date = date.replace(tzinfo=timezone_pytz(settings.TIME_ZONE)) except Exception as e: print e date = timezone.localtime(timezone.now()) total = Measurement.objects.filter(space__uuid='249343ea').last() total_ms = Measurement.objects.filter(space__uuid='249343ea').count() ms = Measurement.objects.filter( created_on__date__day=date.day, created_on__date__month=date.month, created_on__date__year=date.year, created_on__hour__range=(hour_from, hour_to), # created_on__minute=15, space__uuid='249343ea').order_by('created_on') dht22_h = ms.filter(sensor__name='DHT22', sensor__kind__name='humidity') dht22_t = ms.filter(sensor__name='DHT22', sensor__kind__name='temperature') sys_temp = ms.filter(sensor__id=17) # ds18b20 = ms.filter(sensor__name='DS18B20') bmp280_in = ms.filter(sensor__name='BMP280_T') bmp280 = Measurement.objects.filter( created_on__date__day=date.day, created_on__date__month=date.month, created_on__date__year=date.year, created_on__hour__range=(hour_from, hour_to), # created_on__minute=15, sensor__name='BMP280').order_by('created_on') try: avg = round(bmp280_in.aggregate(Avg('value'))['value__avg'], 2) ds_min = round(bmp280_in.aggregate(Min('value'))['value__min'], 2) ds_max = round(bmp280_in.aggregate(Max('value'))['value__max'], 2) except TypeError: avg = 0 ds_min = 0 ds_max = 0 try: bmp280_avg = round(bmp280.aggregate(Avg('value'))['value__avg'], 2) bmp280_min = round(bmp280.aggregate(Min('value'))['value__min'], 2) bmp280_max = round(bmp280.aggregate(Max('value'))['value__max'], 2) except Exception as e: bmp280_avg = 0 bmp280_min = 0 bmp280_max = 0 data = { 'dht22_h': dht22_h, 'dht22_t': dht22_t, 'sys_temp': sys_temp, # 'ds18b20': ds18b20, 'bmp280': bmp280, 'bmp280_in': bmp280_in, 'bmp280_avg': bmp280_avg, 'bmp280_min': bmp280_min, 'bmp280_max': bmp280_max, 'avg': avg, 'min': ds_min, 'max': ds_max, 'date': date, 'hour_from': hour_from, 'hour_to': hour_to, 'total': total, 'total_ms': total_ms, # 'battery': Measurement.objects.filter(sensor__uuid='f7849fbc').last(), 'wifi': Measurement.objects.filter(sensor__uuid='7a7f970c').last(), } return render(request, 'public/public.html', data)
def ajax_get_mailbox(request): response = dict() user = request.user user_profile = user.profile datatable_data = dict(request.GET) if "draw" not in datatable_data: return HttpResponseForbidden() if "make_read[]" in datatable_data: if datatable_data["make_read[]"][0] == "all": user_profile.unread_messages.clear() user_profile.send_notify_messages.clear() else: user_profile.unread_messages = list( user_profile.unread_messages.exclude( id__in=datatable_data["make_read[]"]).values_list( "id", flat=True)) user_profile.send_notify_messages = list( user_profile.send_notify_messages.exclude( id__in=datatable_data["make_read[]"]).values_list( "id", flat=True)) if "make_unread[]" in datatable_data: user_profile.unread_messages.add(*Message.objects.filter( id__in=datatable_data["make_unread[]"])) if "make_delete[]" in datatable_data: user_profile.deleted_messages.add(*Message.objects.filter( id__in=datatable_data["make_delete[]"])) if "make_undelete[]" in datatable_data: user_profile.deleted_messages = list( user_profile.deleted_messages.exclude( id__in=datatable_data["make_undelete[]"]).values_list( "id", flat=True)) messages = Message.objects.none() messages_deleted = user_profile.deleted_messages.all() type_msg = datatable_data['type'][0] if type_msg == "inbox": messages = Message.objects.filter(recipients=user).exclude( id__in=messages_deleted) elif type_msg == "sent": messages = Message.objects.filter(sender=user).exclude( id__in=messages_deleted) elif type_msg == "trash": messages = messages_deleted data = list() start = int(datatable_data['start'][0]) end = start + int(datatable_data['length'][0]) unread = user_profile.unread_messages.all() for msg in messages[start:end]: data.append({ "0": "", "1": u'%s %s' % (msg.sender.last_name, msg.sender.first_name), "2": msg.title, "3": format_date( msg.create_time.astimezone( timezone_pytz(user_profile.time_zone))), "DT_RowClass": "unread" if msg in unread else "", "DT_RowId": "row_msg_" + type_msg + "_" + str(msg.id), "DT_RowData": { "id": msg.id }, }) response['draw'] = datatable_data['draw'] response['recordsTotal'] = messages.count() response['recordsFiltered'] = messages.count() response['data'] = data response['unread_count'] = user_profile.get_unread_count() response['type'] = type_msg return HttpResponse(json.dumps(response), content_type="application/json")
def ajax_get_message(request): response = dict() user = request.user user_profile = user.profile if "msg_id" not in request.GET: return HttpResponseForbidden() msg_id = int(request.GET["msg_id"]) message = Message.objects.get(id=msg_id) if message.sender != user and user not in message.recipients.all(): return HttpResponseForbidden() unread_count = int(request.GET["unread_count"]) if message in user_profile.unread_messages.all(): message.read_message(user) unread_count -= 1 recipients_user = [] recipients_group = [] recipients_course = [] recipients_status = [] if message.hidden_copy and message.sender != user: recipients_user.append({ "id": user.id, "fullname": u'%s %s' % (user.last_name, user.first_name), "url": user.get_absolute_url() }) else: for recipient in message.recipients_user.all(): recipients_user.append({ "id": recipient.id, "fullname": u'%s %s' % (recipient.last_name, recipient.first_name), "url": recipient.get_absolute_url() }) for group in message.recipients_group.all(): recipients_group.append({"id": group.id, "name": group.name}) for course in message.recipients_course.all(): recipients_course.append({ "id": course.id, "name": course.name, "url": course.get_absolute_url(), }) for status in message.recipients_status.all(): recipients_status.append({"id": status.id, "name": status.name}) if message.sender != user or request.GET["mailbox"] == 'inbox': text = render_mail(message, user) else: text = message.text response['sender'] = { "id": message.sender.id, "fullname": u'%s %s' % (message.sender.last_name, message.sender.first_name), "url": message.sender.get_absolute_url(), "avatar": message.sender.profile.avatar.url if message.sender.profile.avatar else "", } response['recipients_user'] = recipients_user response['recipients_group'] = recipients_group response['recipients_course'] = recipients_course response['recipients_status'] = recipients_status response['date'] = message.create_time.astimezone(timezone_pytz(user_profile.time_zone))\ .strftime("%d.%m.%y %H:%M:%S") response['text'] = text response['unread_count'] = unread_count return HttpResponse(json.dumps(response), content_type="application/json")
def tz(self): return timezone_pytz("UTC")
def test_message_manipulation(self): client = self.client recipient = self.recipients[0] post_data = { u'new_title': u'title', u'new_text': u'text', u'new_recipients_user[]': [self.recipients_user[0].id] } # login self.assertTrue( client.login(username=self.sender.username, password=self.sender_password)) # get page response = client.post(reverse(mail.views.ajax_send_message), post_data) self.assertEqual(response.status_code, 200) self.assertEqual(response.content, 'OK') message = Message.objects.get(id=1) # have unread msg for recipient in message.recipients.all(): self.assertItemsEqual(recipient.profile.unread_messages.all(), [message]) # make read get_data = { u'draw': 1, u'start': 0, u'length': 10, u'make_read[]': [message.id], u'type': u'inbox' } response_data = { u'draw': [u'1'], u'recordsTotal': 1, u'data': [{ u'0': u'', u'1': u'%s %s' % (message.sender.last_name, message.sender.first_name), u'2': message.title, u'3': format_date( message.create_time.astimezone( timezone_pytz(recipient.profile.time_zone))), u'DT_RowClass': u'', u'DT_RowData': { u'id': 1 }, u'DT_RowId': u'row_msg_inbox_' + str(message.id) }], u'recordsFiltered': 1, u'unread_count': 0, u'type': u'inbox' } # login self.assertTrue( client.login( username=recipient.username, password=self.recipients_password[recipient.username])) # get page response = client.get(reverse(mail.views.ajax_get_mailbox), get_data) self.assertEqual(response.status_code, 200) self.assertDictEqual(json.loads(response.content), response_data) # make unread get_data = { u'draw': 1, u'start': 0, u'length': 10, u'make_unread[]': [message.id], u'type': u'inbox' } response_data = { u'draw': [u'1'], u'recordsTotal': 1, u'data': [{ u'0': u'', u'1': u'%s %s' % (message.sender.last_name, message.sender.first_name), u'2': message.title, u'3': format_date( message.create_time.astimezone( timezone_pytz(recipient.profile.time_zone))), u'DT_RowClass': u'unread', u'DT_RowData': { u'id': 1 }, u'DT_RowId': u'row_msg_inbox_' + str(message.id) }], u'recordsFiltered': 1, u'unread_count': 1, u'type': u'inbox' } # get page response = client.get(reverse(mail.views.ajax_get_mailbox), get_data) self.assertEqual(response.status_code, 200) self.assertDictEqual(json.loads(response.content), response_data) # delete get_data = { u'draw': 1, u'start': 0, u'length': 10, u'make_delete[]': [message.id], u'type': u'trash' } response_data = { u'draw': [u'1'], u'recordsTotal': 1, u'data': [{ u'0': u'', u'1': u'%s %s' % (message.sender.last_name, message.sender.first_name), u'2': message.title, u'3': format_date( message.create_time.astimezone( timezone_pytz(recipient.profile.time_zone))), u'DT_RowClass': u'unread', u'DT_RowData': { u'id': 1 }, u'DT_RowId': u'row_msg_trash_' + str(message.id) }], u'recordsFiltered': 1, u'unread_count': 0, u'type': u'trash' } # get page response = client.get(reverse(mail.views.ajax_get_mailbox), get_data) self.assertEqual(response.status_code, 200) self.assertDictEqual(json.loads(response.content), response_data) # check other mailboxes recipient self.check_empty_mailboxes([u"inbox", u"sent"]) # undelete get_data = { u'draw': 1, u'start': 0, u'length': 10, u'make_undelete[]': [message.id], u'type': u'inbox' } response_data = { u'draw': [u'1'], u'recordsTotal': 1, u'data': [{ u'0': u'', u'1': u'%s %s' % (message.sender.last_name, message.sender.first_name), u'2': message.title, u'3': format_date( message.create_time.astimezone( timezone_pytz(recipient.profile.time_zone))), u'DT_RowClass': u'unread', u'DT_RowData': { u'id': 1 }, u'DT_RowId': u'row_msg_inbox_' + str(message.id) }], u'recordsFiltered': 1, u'unread_count': 1, u'type': u'inbox' } # get page response = client.get(reverse(mail.views.ajax_get_mailbox), get_data) self.assertEqual(response.status_code, 200) self.assertDictEqual(json.loads(response.content), response_data) # check other mailboxes recipient self.check_empty_mailboxes([u"sent", u"trash"], 1)
def test_ajax_send_message_user(self): client = self.client post_data = { u'new_title': u'title', u'new_text': u'text', u'new_recipients_course[]': [self.recipients_course[0].id], u'new_recipients_group[]': [self.recipients_group[0].id], u'new_recipients_user[]': [self.recipients_user[0].id] } # login self.assertTrue( client.login(username=self.sender.username, password=self.sender_password)) # get page response = client.post(reverse(mail.views.ajax_send_message), post_data) self.assertEqual(response.status_code, 200) self.assertEqual(response.content, 'OK') # check msg creation messages_count = Message.objects.count() self.assertEqual(messages_count, 1) message = Message.objects.get(id=1) self.assertEqual(message.sender, self.sender) self.assertEqual(message.title, u"title") self.assertEqual(message.text, u"text") self.assertItemsEqual(message.recipients.all(), self.recipients) self.assertItemsEqual(message.recipients_user.all(), self.recipients_user) self.assertItemsEqual(message.recipients_course.all(), self.recipients_course) self.assertItemsEqual(message.recipients_group.all(), self.recipients_group) # check sent sender get_data = {u'draw': 1, u'start': 0, u'length': 10, u'type': u'sent'} response_data = { u'draw': [u'1'], u'recordsTotal': messages_count, u'data': [{ u'0': u'', u'1': u'%s %s' % (message.sender.last_name, message.sender.first_name), u'2': message.title, u'3': format_date( message.create_time.astimezone( timezone_pytz(self.sender.profile.time_zone))), u'DT_RowClass': u'', u'DT_RowData': { u'id': 1 }, u'DT_RowId': u'row_msg_sent_' + str(message.id) }], u'recordsFiltered': messages_count, u'unread_count': 0, u'type': u'sent' } # get page response = client.get(reverse(mail.views.ajax_get_mailbox), get_data) self.assertEqual(response.status_code, 200) self.assertDictEqual(json.loads(response.content), response_data) for recipient in self.recipients: # check inbox get_data = { u'draw': 1, u'start': 0, u'length': 10, u'type': u'inbox' } response_data = { u'draw': [u'1'], u'recordsTotal': messages_count, u'data': [{ u'0': u'', u'1': u'%s %s' % (message.sender.last_name, message.sender.first_name), u'2': message.title, u'3': format_date( message.create_time.astimezone( timezone_pytz(recipient.profile.time_zone))), u'DT_RowClass': u'unread', u'DT_RowData': { u'id': 1 }, u'DT_RowId': u'row_msg_inbox_' + str(message.id) }], u'recordsFiltered': messages_count, u'unread_count': 1, u'type': u'inbox' } # login self.assertTrue( client.login( username=recipient.username, password=self.recipients_password[recipient.username])) # get page response = client.get(reverse(mail.views.ajax_get_mailbox), get_data) self.assertEqual(response.status_code, 200) self.assertDictEqual(json.loads(response.content), response_data) # check other mailboxes recipient self.check_empty_mailboxes([u"sent", u"trash"], 1)
def test_message_manipulation(self): client = self.client recipient = self.recipients[0] post_data = { u'new_title': u'title', u'new_text': u'text', u'new_recipients_user[]': [self.recipients_user[0].id] } # login self.assertTrue(client.login(username=self.sender.username, password=self.sender_password)) # get page response = client.post(reverse('mail.views.ajax_send_message'), post_data) self.assertEqual(response.status_code, 200) self.assertEqual(response.content, 'OK') message = Message.objects.get(id=1) # have unread msg for recipient in message.recipients.all(): self.assertItemsEqual(recipient.get_profile().unread_messages.all(), [message]) # make read get_data = { u'draw': 1, u'start': 0, u'length': 10, u'make_read[]': [message.id], u'type': u'inbox' } response_data = { u'draw': [u'1'], u'recordsTotal': 1, u'data': [{ u'0': u'', u'1': u'%s %s' % (message.sender.last_name, message.sender.first_name), u'2': message.title, u'3': format_date(message.create_time.astimezone(timezone_pytz(recipient.get_profile().time_zone))), u'DT_RowClass': u'', u'DT_RowData': {u'id': 1}, u'DT_RowId': u'row_msg_inbox_' + str(message.id) }], u'recordsFiltered': 1, u'unread_count': 0, u'type': u'inbox' } # login self.assertTrue(client.login(username=recipient.username, password=self.recipients_password[recipient.username])) # get page response = client.get(reverse('mail.views.ajax_get_mailbox'), get_data) self.assertEqual(response.status_code, 200) self.assertDictEqual(json.loads(response.content), response_data) # make unread get_data = { u'draw': 1, u'start': 0, u'length': 10, u'make_unread[]': [message.id], u'type': u'inbox' } response_data = { u'draw': [u'1'], u'recordsTotal': 1, u'data': [{ u'0': u'', u'1': u'%s %s' % (message.sender.last_name, message.sender.first_name), u'2': message.title, u'3': format_date( message.create_time.astimezone(timezone_pytz(recipient.get_profile().time_zone)) ), u'DT_RowClass': u'unread', u'DT_RowData': {u'id': 1}, u'DT_RowId': u'row_msg_inbox_' + str(message.id) }], u'recordsFiltered': 1, u'unread_count': 1, u'type': u'inbox' } # get page response = client.get(reverse('mail.views.ajax_get_mailbox'), get_data) self.assertEqual(response.status_code, 200) self.assertDictEqual(json.loads(response.content), response_data) # delete get_data = { u'draw': 1, u'start': 0, u'length': 10, u'make_delete[]': [message.id], u'type': u'trash' } response_data = { u'draw': [u'1'], u'recordsTotal': 1, u'data': [{ u'0': u'', u'1': u'%s %s' % (message.sender.last_name, message.sender.first_name), u'2': message.title, u'3': format_date( message.create_time.astimezone(timezone_pytz(recipient.get_profile().time_zone)) ), u'DT_RowClass': u'unread', u'DT_RowData': {u'id': 1}, u'DT_RowId': u'row_msg_trash_' + str(message.id) }], u'recordsFiltered': 1, u'unread_count': 0, u'type': u'trash' } # get page response = client.get(reverse('mail.views.ajax_get_mailbox'), get_data) self.assertEqual(response.status_code, 200) self.assertDictEqual(json.loads(response.content), response_data) # check other mailboxes recipient self.check_empty_mailboxes([u"inbox", u"sent"]) # undelete get_data = { u'draw': 1, u'start': 0, u'length': 10, u'make_undelete[]': [message.id], u'type': u'inbox' } response_data = { u'draw': [u'1'], u'recordsTotal': 1, u'data': [{ u'0': u'', u'1': u'%s %s' % (message.sender.last_name, message.sender.first_name), u'2': message.title, u'3': format_date( message.create_time.astimezone(timezone_pytz(recipient.get_profile().time_zone)) ), u'DT_RowClass': u'unread', u'DT_RowData': {u'id': 1}, u'DT_RowId': u'row_msg_inbox_' + str(message.id) }], u'recordsFiltered': 1, u'unread_count': 1, u'type': u'inbox' } # get page response = client.get(reverse('mail.views.ajax_get_mailbox'), get_data) self.assertEqual(response.status_code, 200) self.assertDictEqual(json.loads(response.content), response_data) # check other mailboxes recipient self.check_empty_mailboxes([u"sent", u"trash"], 1)
def test_ajax_send_message_user(self): client = self.client post_data = { u'new_title': u'title', u'new_text': u'text', u'new_recipients_course[]': [self.recipients_course[0].id], u'new_recipients_group[]': [self.recipients_group[0].id], u'new_recipients_user[]': [self.recipients_user[0].id] } # login self.assertTrue(client.login(username=self.sender.username, password=self.sender_password)) # get page response = client.post(reverse('mail.views.ajax_send_message'), post_data) self.assertEqual(response.status_code, 200) self.assertEqual(response.content, 'OK') # check msg creation messages_count = Message.objects.count() self.assertEqual(messages_count, 1) message = Message.objects.get(id=1) self.assertEqual(message.sender, self.sender) self.assertEqual(message.title, u"title") self.assertEqual(message.text, u"text") self.assertItemsEqual(message.recipients.all(), self.recipients) self.assertItemsEqual(message.recipients_user.all(), self.recipients_user) self.assertItemsEqual(message.recipients_course.all(), self.recipients_course) self.assertItemsEqual(message.recipients_group.all(), self.recipients_group) # check sent sender get_data = { u'draw': 1, u'start': 0, u'length': 10, u'type': u'sent' } response_data = { u'draw': [u'1'], u'recordsTotal': messages_count, u'data': [{ u'0': u'', u'1': u'%s %s' % (message.sender.last_name, message.sender.first_name), u'2': message.title, u'3': format_date(message.create_time.astimezone(timezone_pytz(self.sender.get_profile().time_zone))), u'DT_RowClass': u'', u'DT_RowData': {u'id': 1}, u'DT_RowId': u'row_msg_sent_' + str(message.id) }], u'recordsFiltered': messages_count, u'unread_count': 0, u'type': u'sent' } # get page response = client.get(reverse('mail.views.ajax_get_mailbox'), get_data) self.assertEqual(response.status_code, 200) self.assertDictEqual(json.loads(response.content), response_data) for recipient in self.recipients: # check inbox get_data = { u'draw': 1, u'start': 0, u'length': 10, u'type': u'inbox' } response_data = { u'draw': [u'1'], u'recordsTotal': messages_count, u'data': [{ u'0': u'', u'1': u'%s %s' % (message.sender.last_name, message.sender.first_name), u'2': message.title, u'3': format_date( message.create_time.astimezone(timezone_pytz(recipient.get_profile().time_zone)) ), u'DT_RowClass': u'unread', u'DT_RowData': {u'id': 1}, u'DT_RowId': u'row_msg_inbox_' + str(message.id) }], u'recordsFiltered': messages_count, u'unread_count': 1, u'type': u'inbox' } # login self.assertTrue(client.login(username=recipient.username, password=self.recipients_password[recipient.username])) # get page response = client.get(reverse('mail.views.ajax_get_mailbox'), get_data) self.assertEqual(response.status_code, 200) self.assertDictEqual(json.loads(response.content), response_data) # check other mailboxes recipient self.check_empty_mailboxes([u"sent", u"trash"], 1)
def ajax_get_mailbox(request): response = dict() user = request.user user_profile = user.get_profile() datatable_data = dict(request.GET) if "draw" not in datatable_data: return HttpResponseForbidden() if "make_read[]" in datatable_data: if datatable_data["make_read[]"][0] == "all": user_profile.unread_messages.clear() user_profile.send_notify_messages.clear() else: user_profile.unread_messages = list( user_profile.unread_messages .exclude(id__in=datatable_data["make_read[]"]) .values_list("id", flat=True) ) user_profile.send_notify_messages = list( user_profile.send_notify_messages .exclude(id__in=datatable_data["make_read[]"]) .values_list("id", flat=True) ) if "make_unread[]" in datatable_data: user_profile.unread_messages.add(*Message.objects.filter(id__in=datatable_data["make_unread[]"])) if "make_delete[]" in datatable_data: user_profile.deleted_messages.add(*Message.objects.filter(id__in=datatable_data["make_delete[]"])) if "make_undelete[]" in datatable_data: user_profile.deleted_messages = list( user_profile.deleted_messages .exclude(id__in=datatable_data["make_undelete[]"]) .values_list("id", flat=True) ) messages = Message.objects.none() messages_deleted = user_profile.deleted_messages.all() type_msg = datatable_data['type'][0] if type_msg == "inbox": messages = Message.objects.filter(recipients=user).exclude(id__in=messages_deleted) elif type_msg == "sent": messages = Message.objects.filter(sender=user).exclude(id__in=messages_deleted) elif type_msg == "trash": messages = messages_deleted data = list() start = int(datatable_data['start'][0]) end = start + int(datatable_data['length'][0]) unread = user_profile.unread_messages.all() for msg in messages[start:end]: data.append({ "0": "", "1": u'%s %s' % (msg.sender.last_name, msg.sender.first_name), "2": msg.title, "3": format_date(msg.create_time.astimezone(timezone_pytz(user_profile.time_zone))), "DT_RowClass": "unread" if msg in unread else "", "DT_RowId": "row_msg_" + type_msg + "_" + str(msg.id), "DT_RowData": { "id": msg.id }, }) response['draw'] = datatable_data['draw'] response['recordsTotal'] = messages.count() response['recordsFiltered'] = messages.count() response['data'] = data response['unread_count'] = user_profile.get_unread_count() response['type'] = type_msg return HttpResponse(json.dumps(response), content_type="application/json")
def ajax_get_message(request): response = dict() user = request.user user_profile = user.get_profile() if "msg_id" not in request.GET: return HttpResponseForbidden() msg_id = int(request.GET["msg_id"]) message = Message.objects.get(id=msg_id) if message.sender != user and user not in message.recipients.all(): return HttpResponseForbidden() unread_count = int(request.GET["unread_count"]) if message in user_profile.unread_messages.all(): message.read_message(user) unread_count -= 1 recipients_user = [] recipients_group = [] recipients_course = [] recipients_status = [] if message.hidden_copy and message.sender != user: recipients_user.append({ "id": user.id, "fullname": u'%s %s' % (user.last_name, user.first_name), "url": user.get_absolute_url() }) else: for recipient in message.recipients_user.all(): recipients_user.append({ "id": recipient.id, "fullname": u'%s %s' % (recipient.last_name, recipient.first_name), "url": recipient.get_absolute_url() }) for group in message.recipients_group.all(): recipients_group.append({ "id": group.id, "name": group.name }) for course in message.recipients_course.all(): recipients_course.append({ "id": course.id, "name": course.name, "url": course.get_absolute_url(), }) for status in message.recipients_status.all(): recipients_status.append({ "id": status.id, "name": status.name }) if message.sender != user or request.GET["mailbox"] == 'inbox': text = render_mail(message, user) else: text = message.text response['sender'] = { "id": message.sender.id, "fullname": u'%s %s' % (message.sender.last_name, message.sender.first_name), "url": message.sender.get_absolute_url(), "avatar": message.sender.get_profile().avatar.url if message.sender.get_profile().avatar else "", } response['recipients_user'] = recipients_user response['recipients_group'] = recipients_group response['recipients_course'] = recipients_course response['recipients_status'] = recipients_status response['date'] = message.create_time.astimezone(timezone_pytz(user_profile.time_zone))\ .strftime("%d.%m.%y %H:%M:%S") response['text'] = text response['unread_count'] = unread_count return HttpResponse(json.dumps(response), content_type="application/json")