示例#1
0
    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)
示例#2
0
    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()
示例#3
0
文件: views.py 项目: neychev/anytask
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")
示例#4
0
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)
示例#5
0
文件: views.py 项目: znick/anytask
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")
示例#6
0
文件: models.py 项目: znick/anytask
    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()
示例#7
0
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)
示例#8
0
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")
示例#9
0
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")
示例#10
0
 def tz(self):
     return timezone_pytz("UTC")
示例#11
0
    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)
示例#12
0
    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)
示例#13
0
文件: tests.py 项目: znick/anytask
    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)
示例#14
0
文件: tests.py 项目: znick/anytask
    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)
示例#15
0
文件: views.py 项目: znick/anytask
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")
示例#16
0
文件: views.py 项目: znick/anytask
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")