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 new(request): """Create a new diary entry for today.""" diaries = request.user.diaries.filter(created_day=datetime.date.today()) # If they already have a diary for today, redirect them to edit if diaries: return HttpResponseRedirect(reverse('diary.edit', args=[diaries[0].pk])) if request.method == 'POST': data = request.POST if request.is_ajax(): data = data.copy() data['is_draft'] = True form = DiaryForm(creator=request.user, data=data) 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) # Register user to receive email when a comment is posted. NewCommentEvent.notify(request.user, entry) # Send news feed item to creator's favorites. if 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, 'is_new': True, 'url': reverse('diary.edit', args=[entry.pk]), 'timestamp': entry.updated.strftime("%s")} return JSONResponse(data) return HttpResponseRedirect(reverse('diary.list_all', args=[request.user.username])) else: # request.method == 'GET' form = DiaryForm(creator=request.user) c_year, c_month = clean_diary_date() 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, 'calendar_data': calendar_data} return jingo.render(request, 'diary/new.html', data)
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)
def new(request): """Create a new Lets update.""" form = LetsForm(creator=request.user, data=request.POST) form_valid = form.is_valid() if form_valid: let = form.save() u = request.user let_entries = list(u.lets.all()[:3]) u.lets.invalidate(*let_entries) update_progress(u.profile, action='lets') update_rewards(u, 'lets') process_mojo_action(u, 'lets') if request.is_ajax(): data = {'is_valid': form_valid, 'errors': form.errors, 'msg': 'Saved'} if form_valid: data['user'] = { 'profile_url': reverse('users.profile', args=[request.user.username]), 'picture_url': pp_url(request.user), 'display_name': request.user.first_name, } data['letobj'] = { 'content': "Let's... " + raw_to_plain(let.content), 'category_url': let.get_category_url(), 'category_class': let.get_category_class(), 'category_display': let.get_category_display(), 'category_img': let.get_category_img(large=True), 'js_date': js_datetime(let.created), 'timesince': timesince(let.created), 'delete_url': reverse('lets.delete', args=[let.pk]), } return JSONResponse(data) next_url = reverse('lets.wall', args=[request.user.username]) return HttpResponseRedirect(next_url)