示例#1
0
def upload_pic(request, entry_id=None):
    """Attaches picture to the given diary entry.

    Defaults to today if no entry provided.
    Creates a new entry if one does not already exist.

    """
    entry_created = False
    if entry_id:
        try:
            entry = DiaryEntry.objects.get(pk=entry_id)
        except DiaryEntry.DoesNotExist:
            return JSResponse({'is_valid': False,
                               'errors': {'__all__': [MSG_NO_ENTRY]}},
                              status=404)
    else:
        try:
            entry = DiaryEntry.uncached.get(created_day=datetime.date.today(),
                                            creator=request.user)
        except DiaryEntry.DoesNotExist:
            entry = DiaryEntry.objects.create(
                creator=request.user, is_draft=True)
            entry_created = True

    if entry.creator != request.user:
        return JSResponse({'is_valid': False,
                           'errors': {'__all__': [MSG_PIC_PERM]}},
                          status=403)

    form = ImageForm(request.POST, request.FILES)
    if not form.is_valid():
        return JSResponse({'is_valid': False,
                           'errors': {'__all__': [MSG_INVALID_PIC]}},
                          status=404)

    # Check the number of pictures for this entry is not too high.
    if entry.pictures.count() >= settings.DIARY_PICS_PER_ENTRY:
        return JSResponse({'is_valid': False,
                           'errors': {'__all__': [MSG_PIC_LIMIT]}},
                          status=400)

    up_file = request.FILES['image']
    diary_pic = create_diary_pic(up_file, entry)
    all_pics = entry.pictures.all()
    entry.pictures.invalidate(*list(all_pics))
    invalidate_count(all_pics)

    delete_url = reverse('diary.delete_pic', args=[diary_pic.id])
    data = ({'name': up_file.name, 'url': diary_pic.image.url,
             'width': settings.DIARY_THUMBNAIL_SIZE[0],
             'height': settings.DIARY_THUMBNAIL_SIZE[1],
             'entry_id': diary_pic.entry.pk, 'delete_url': delete_url,
             'thumbnail_url': diary_pic.image.url,
             'url': diary_pic.image.url})
    if entry_created:
        data['entry_edit_url'] = reverse('diary.edit', args=[entry.pk])
    return JSResponse({'is_valid': True, 'success': MSG_PIC_SUCCESS,
                       'picture': data})
示例#2
0
def like_lets(request, lets_id):
    lets = get_object_or_404(Lets, pk=lets_id)

    if lets.creator == request.user:
        raise PermissionDenied

    # If already liked, just redirect back to profile.
    my_vote = lets.let_votes_received.filter(creator=request.user)
    if not my_vote:
        my_vote = LetsVote.objects.create(creator=request.user, lets_obj=lets)
        invalidate_count(lets.let_votes_received.all())
        lets.let_votes_received.invalidate(my_vote)
        process_simple_action(lets.creator, request.user, 'lets_like')

    if request.is_ajax():
        return JSONResponse({'is_valid': True})
    next_url = get_next_url(request)
    return HttpResponseRedirect(next_url)
示例#3
0
def reply(request, diary_id):
    """Adds a comment to a diary entry where pk=diary_id."""
    entry = get_object_or_404(DiaryEntry, pk=diary_id)
    if entry.creator != request.user and (entry.is_private or entry.is_draft):
        raise PermissionDenied

    form = CommentForm(creator=request.user, diary=entry,
                       data=request.POST)
    if form.is_valid():
        comment = form.save()
        if len(comment.text) >= MIN_COMMENT_LENGTH_MOJO:
            process_mojo_action(request.user, 'diary_comment')
        invalidate_count(entry.comments.all())
        NewCommentEvent.notify(request.user, entry)
        # Send notifications to diary comment watchers.
        NewCommentEvent(comment).fire(exclude=request.user)
        return HttpResponseRedirect(entry.get_absolute_url())

    return single(request, username=entry.creator.username,
                  year=entry.created_day.year, month=entry.created_day.month,
                  day=entry.created_day.day, comment_form=form)