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 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)
Example #3
0
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)
Example #4
0
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)
Example #5
0
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)