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