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})
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)
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)