Example #1
0
def edit(request, diary_id):
    """Edit an existing diary entry.

    Checks and adds errors for setting a non-draft diary to a draft diary.

    """
    entry = get_object_or_404(DiaryEntry, pk=diary_id)
    if entry.creator != request.user:
        raise PermissionDenied
    was_draft = entry.is_draft
    if request.method == 'POST':
        data = request.POST
        if request.is_ajax():
            data = data.copy()
            data['is_draft'] = True
        form = DiaryForm(creator=entry.creator, data=data,
                         instance=entry)
        if form.is_valid():
            entry = form.save()
            u = request.user
            entries = list(u.diaries.get_all(visitor=u, creator=u)[:10])
            u.diaries.invalidate(*entries)
            # Publishing a diary entry. Notify favorites.
            if was_draft and not entry.is_draft:
                process_diary(entry)
                u.profile.update(
                    coins=u.profile.coins +
                        ucs.ACTIONS_COINS['diary']['daily'])
                update_rewards(request.user, 'diary')
                process_mojo_action(request.user, 'diary_entry')
            if request.is_ajax():
                data = {'is_valid': True,
                        'timestamp': entry.updated.strftime("%s")}
                return JSONResponse(data)
            return HttpResponseRedirect(reverse(
                'diary.single', kwargs=get_kwargs_for_diary_id(entry.pk)))
    else:
        form = DiaryForm(creator=entry.creator, instance=entry)
    c_year, c_month = clean_diary_date(entry.created_day.year,
                                       entry.created_day.month)
    entries = request.user.diaries.get_for_month(visitor=request.user,
                                                 creator=request.user,
                                                 year=c_year, month=c_month)
    calendar_data = get_diary_calendar(entries, c_year, c_month)
    data = {'form': form, 'creator': request.user, 'entry': entry,
            'calendar_data': calendar_data}
    return jingo.render(request, 'diary/edit.html', data)
Example #2
0
def delete_comment(request, comment_id):
    """Deletes a comment from a diary.

    Only deletes the comment if the logged in user is the creator of the
    comment or of the diary.

    """
    comment = get_object_or_404(Comment, pk=comment_id)
    entry = comment.diary
    comment_creator = comment.creator
    if comment.creator != request.user and entry.creator != request.user:
        raise PermissionDenied
    comment.delete()
    process_mojo_action_down(comment_creator, 'diary_comment')
    # Does comment_creator have a comment in the diary entry?
    # If not, stop notifying them.
    if not entry.comments.filter(creator=comment_creator).exists():
        NewCommentEvent.stop_notifying(comment_creator, entry)
    return HttpResponseRedirect(reverse(
        'diary.single', kwargs=get_kwargs_for_diary_id(entry.pk)))
Example #3
0
    def test_reply_diary(self):
        url = reverse('diary.reply', args=[self.e.id])
        request = self.factory.post(url, {'text': 'ha' * 10})
        request.user = self.u
        response = views.reply(request, diary_id=self.e.id)
        # Is HttpResponseRedirect called (based on a valid form)?
        eq_(response.status_code, 302)

        # Was the diary comment created?
        url = reverse('diary.single',
                      kwargs=get_kwargs_for_diary_id(self.e.id))
        request = self.factory.get(url)
        request.user = self.u
        response = views.single(request, username=self.u.username,
                                year=self.e.created_day.year,
                                month=self.e.created_day.month,
                                day=self.e.created_day.day)
        eq_(response.status_code, 200)
        # Yes, indeed.
        contains(response.content, 'ha' * 10)