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 delete(request, diary_id): """Deletes a diary, only if logged in user is the creator.""" entry = get_object_or_404(DiaryEntry, pk=diary_id) if entry.creator != request.user: raise PermissionDenied for pic in entry.pictures.all(): pic.image.delete() pic.thumbnail.delete() entry.delete() request.user.profile.update( coins=request.user.profile.coins - ucs.ACTIONS_COINS['diary']['daily']) update_rewards(request.user, 'diary') process_mojo_action_down(request.user, 'diary_entry') url = reverse('diary.list_all', args=[request.user.username]) if request.is_ajax(): return JSONResponse({'is_valid': True, 'success': ENTRY_DELETED, 'url': url}) return HttpResponseRedirect(url)
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)
def delete(request, lets_id): """Delete a Lets object, only if logged in user is the creator.""" lets = get_object_or_404(Lets, pk=lets_id) if lets.creator != request.user: raise PermissionDenied lets.delete() # Coins profile = request.user.profile user_key = Lets.u_cache_key(request.user) lets_key = cache.get(user_key) if lets_key: if lets_key > 0: # No 250 - cache.decr(user_key) if lets_key <= 0: # Yes 250 - profile.update(coins=profile.coins - ucs.ACTIONS_COINS['lets']['daily']) cache.delete(user_key) else: # yes 250 - profile.update(coins=profile.coins - ucs.ACTIONS_COINS['lets']['daily']) update_progress(profile, action='lets') update_rewards(request.user, 'lets') process_mojo_action_down(request.user, 'lets') # TODO: return progress_data with ajax request. Modify js on lets side to # update profile completion widget next_url = reverse('lets.wall', args=[request.user.username]) if request.is_ajax(): return JSONResponse({'is_valid': True, 'msg': 'Deleted'}) return HttpResponseRedirect(next_url)