Exemple #1
0
def action_detail(request, action_slug):
    """Detail page for an action"""
    action = get_object_or_404(Action, slug=action_slug)
    nav_selected = "group_actions" if action.is_group_project else "solo_actions"
    default_vars = _default_action_vars(action, request.user)
    default_vars.update(_build_action_form_vars(action, request.user))

    try:
        translated_action = TranslatedAction.objects.get(action=action, 
                                                         language=request.LANGUAGE_CODE)
    except TranslatedAction.DoesNotExist:
        translated_action = action

    group_link_forms = []
    action_commit_form = None
    if action.is_group_project and not request.user.is_anonymous():
        for group in Group.objects.filter(users=request.user).order_by("name"):
            form = GroupActionCommitForm(user=request.user, action=action,
                                         group=group)
            try:
                progress = GroupActionProgress.objects.get(
                    action=action, 
                    group=group)
                days_till_commitment = 0
                if progress.date_committed:
                    days_till_commitment = (progress.date_committed -
                                            datetime.date.today())
                    days_till_commitment = (days_till_commitment.days
                                            if days_till_commitment.days > 0
                                            else 0)
                form.progress = progress
                form.days_till_commitment = days_till_commitment
            except GroupActionProgress.DoesNotExist:
                form.progress = None
            group_link_forms.append(form)
    else:
        action_commit_form = ActionCommitForm(user=request.user, action=action)

    group_link_form = ActionGroupLinkForm(request.user, instance=action)

    if request.method == "POST":
        group_link_form = ActionGroupLinkForm(request.user, instance=action, data=request.POST)
        if group_link_form.is_valid():
            action = group_link_form.save()
            messages.success(request, _("Thanks for taking on this project with your group."))
            return redirect("action_detail", action_slug=action.slug)

    default_vars.update(locals())
    return render_to_response("actions/action_detail.html", default_vars, RequestContext(request))
Exemple #2
0
def action_undo(request, action_slug):
    action = get_object_or_404(Action, slug=action_slug)
    if request.method == "GET":
        return redirect("action_detail", action_slug=action.slug)

    success = False
    if action.is_group_project:
        form = GroupActionCommitForm(user=request.user, action=action, data=request.POST, mark_undone=True)
        if form.is_valid() and action.undo_for_group(form.group_obj):
            success = True
    else:
        if action.undo_for_user(request.user):
            success = True

    if success:
        messages.success(request, _("No worries. We've updated the record. "
                                    "Let us know when you're finished with "
                                    "this action."))
        messages.add_message(request, GA_TRACK_PAGEVIEW, '/actions/undo')
        messages.add_message(request, GA_TRACK_PAGEVIEW, '/actions/undo/%s' % action_slug)
    return redirect("action_detail", action_slug=action.slug)
Exemple #3
0
def action_cancel(request, action_slug):
    action = get_object_or_404(Action, slug=action_slug)
    success = False
    if request.method == "POST":
        if action.is_group_project:
            form = GroupActionCommitForm(user=request.user, action=action, data=request.POST, mark_cancelled=True)
            
            if form.is_valid() and action.cancel_for_group(form.group_obj):
                success = True
        else:
            if action.cancel_for_user(request.user):
                success = True

        if success:
            messages.success(request, _("We cancelled your commitment. If "
                                        "you're having trouble completing an "
                                        "action, try asking a question. "
                                        "Other members will be happy to help!"))
            messages.add_message(request, GA_TRACK_PAGEVIEW, '/actions/cancel')
            messages.add_message(request, GA_TRACK_PAGEVIEW, '/actions/cancel/%s' % action_slug)
        return redirect("action_detail", action_slug=action.slug)
    return render_to_response("actions/action_cancel.html", locals(), RequestContext(request))
Exemple #4
0
def action_commit(request, action_slug):
    action = get_object_or_404(Action, slug=action_slug)
    if request.method == "GET":
        return redirect("action_detail", action_slug=action.slug)
    if action.is_group_project:
        action_commit_form = GroupActionCommitForm(user=request.user, action=action, data=request.POST)
    else:
        action_commit_form = ActionCommitForm(user=request.user, action=action, data=request.POST)
    # TODO: There is weirdness here if you have already completed the action and try to commit again. 
    # This can happen when you are logged out, commit to an action you've already completes, are asked to log in, and are directed back to the action detail page.
    if action_commit_form.is_valid():
        uap, record = action_commit_form.save()
        if record:
            record_created.send(sender=None, request=request, record=record)
        messages.success(request, _("Thanks for making a commitment."))
        messages.add_message(request, GA_TRACK_PAGEVIEW, '/actions/commit')
        messages.add_message(request, GA_TRACK_PAGEVIEW, '/actions/commit/%s' % action_slug)
        return redirect("action_detail", action_slug=action.slug)

    default_vars = _default_action_vars(action, request.user)
    default_vars.update(locals())
    return render_to_response("actions/action_detail.html", default_vars, RequestContext(request))
Exemple #5
0
def action_complete(request, action_slug):
    """invoked when a user marks an action as completed"""
    action = get_object_or_404(Action, slug=action_slug)
    if request.method == "GET":
        return redirect("action_detail", action_slug=action.slug)
    if action.is_group_project:
        action_commit_form = GroupActionCommitForm(user=request.user, 
                                                   action=action,
                                                   mark_completed=True,
                                                   data=request.POST)
        if action_commit_form.is_valid():
            uap, record = action_commit_form.save()
        else:
            return redirect("action_detail", action_slug=action.slug)
    else:
        uap, record = action.complete_for_user(request.user)

    if record:
        record_created.send(sender=None, request=request, record=record)
    messages.success(request, _("Nice work! We've updated your profile, "
                                "so all your friends can see your progress "))
    messages.add_message(request, GA_TRACK_PAGEVIEW, '/actions/complete')
    messages.add_message(request, GA_TRACK_PAGEVIEW, '/actions/complete/%s' % action_slug)
    return redirect("action_detail", action_slug=action.slug)