Ejemplo n.º 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)
Ejemplo n.º 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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 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)