コード例 #1
0
ファイル: views.py プロジェクト: reallocate/reallocate
def add_opportunity(request, pid=None, sponsorship=False):

    context = {}
    project = get_object_or_404(Project, pk=pid)

    context["project"] = project
    context["opportunities"] = Opportunity.objects.filter(project=pid)

    if request.method == "POST":

        if request.POST.get("name") == "" and request.POST.get("short_desc") == "" and not request.POST.get("add"):
            return HttpResponseRedirect("/project/%s/manage" % project.id)

        opp_form = OpportunityForm(request.POST)
        opp = opp_form.save(commit=False)

        if opp_form.is_valid():

            opp.project = project
            opp.organization = project.organization
            opp.created_by = request.user

            opp.save()

            opp.sites = [settings.SITE_ID]
            opp.save()

            # this has to occur after initial save b/c we use pk id as part of the s3 filepath
            media_file = request.FILES.get("file")
            if media_file:
                opp.media_url = base.send_to_remote_storage(media_file, opp.make_s3_media_url(media_file), "image/png")
                opp.save()

            if request.POST.get("add"):

                return HttpResponseRedirect("/project/%s/opportunity/add" % project.id)

            else:

                return HttpResponseRedirect("/project/%s/manage" % project.id)

        else:

            return HttpResponse("error")

    elif sponsorship:

        project.create_sponsorship()

        return HttpResponseRedirect(request.META.get("HTTP_REFERER", "/"))

    else:

        return render(request, "add_opportunity.html", context)
コード例 #2
0
ファイル: views.py プロジェクト: reallocate/reallocate
def manage_project(request, pid=1):

    project = get_object_or_404(Project, pk=pid)

    if (not request.user.is_authenticated() or project.created_by != request.user) and not request.user.is_staff:
        return HttpResponseRedirect("/")

    opps = Opportunity.objects.filter(project=project)

    context = {}
    context["no_sponsorship"] = False if opps.filter(sponsorship=True) else True
    context["COUNTRIES"] = COUNTRIES

    engagements = OpportunityEngagement.objects.filter(project_id=pid)
    context.update(
        {
            "project": project,
            "opportunities": opps,
            "engagements": engagements,
            "updates": Update.objects.filter(project=project).order_by("-date_created"),
        }
    )

    for u in context["updates"]:

        (u.video, u.text) = base.embed_video(u.text)

    if request.user.is_authenticated():
        context["is_following"] = request.user in project.followed_by.all()

    if request.method == "POST":

        if request.POST.get("type", "") == "opportunity":

            opportunity = get_object_or_404(Opportunity, pk=request.POST["id"])
            opportunity_form = OpportunityForm(request.POST or None, instance=opportunity)
            opportunity = opportunity_form.save(commit=False)

            media_file = request.FILES.get("file")
            if media_file:
                opportunity.media_url = base.send_to_remote_storage(
                    media_file, opportunity.make_s3_media_url(media_file), "image/png"
                )

            if opportunity_form.is_valid():
                opportunity.save()
            else:
                context["error"] = "failed to update opportunity"

        else:

            project_form = ProjectForm(request.POST or None, instance=project)
            original_media_url = project.media_url
            project = project_form.save(commit=False)

            media_file = request.FILES.get("file")

            if media_file:
                project.media_url = base.send_to_remote_storage(
                    media_file, project.make_s3_media_url(media_file), "image/png"
                )
            else:
                project.media_url = original_media_url

            if project_form.is_valid():

                project.save()

            else:

                context["error"] = "failed to update project"

    return render(request, "manage_project.html", context)