def comic_site(request):
    """ Find out in which comic site this request is loaded. If you cannot
    figure it out. Use main project. 
    
    """
    try:
        resolution = resolve(request.path)
    except Http404 as e:
        # fail silently beacuse any exeception here will cause a 500 server error
        # on page. Let views show errors but not the context processor
        resolution = resolve("/")
    if "challenge_short_name" in resolution.kwargs:
        sitename = resolution.kwargs["challenge_short_name"]
    else:
        sitename = settings.MAIN_PROJECT_NAME
    try:
        [site, pages, metafooterpages] = site_get_standard_vars(sitename)
    except Challenge.DoesNotExist:
        # Don't crash the system here, if a site cannot be found it will crash
        # in a more appropriate location
        return {}

    return {
        "site": site,
        "user_is_participant": site.is_participant(request.user),
        "pages": pages,
        "metafooterpages": metafooterpages,
        "main_challenge_name": settings.MAIN_PROJECT_NAME,
    }
예제 #2
0
def page(request, challenge_short_name, page_title):
    """ show a single page on a site """
    [site, pages,
     metafooterpages] = site_get_standard_vars(challenge_short_name)
    currentpage = getRenderedPageIfAllowed(page_title, request, site)
    response = render(request, 'page.html', {'currentpage': currentpage})
    # TODO: THis has code smell. If page has to be checked like this, is it
    # ok to use a page object for error messages?
    if hasattr(currentpage, "is_error_page"):
        if currentpage.is_error_page:
            response.status_code = 403
    return response
예제 #3
0
def insertedpage(request, challenge_short_name, page_title, dropboxpath):
    """ show contents of a file from the local dropbox folder for this project

    """
    (mimetype, encoding) = mimetypes.guess_type(dropboxpath)
    if mimetype is None:
        mimetype = (
            "NoneType"
        )  # make the next statement not crash on non-existant mimetype
    if mimetype.startswith("image"):
        return inserted_file(request, challenge_short_name, dropboxpath)

    if mimetype == "application/pdf" or mimetype == "application/zip":
        return inserted_file(request, challenge_short_name, dropboxpath)

    [site, pages,
     metafooterpages] = site_get_standard_vars(challenge_short_name)
    p = get_object_or_404(Page,
                          challenge__short_name=site.short_name,
                          title=page_title)
    baselink = reverse(
        "pages:detail",
        kwargs={
            "challenge_short_name": p.challenge.short_name,
            "page_title": p.title,
        },
    )
    msg = ('<div class="breadcrumbtrail"> Displaying \'' + dropboxpath +
           "' from local dropboxfolder, originally linked from\
           page <a href=\"" + baselink + '">' + p.title + "</a> </div>")
    p.html = "{% insert_file " + dropboxpath + " %} <br/><br/>" + msg
    currentpage = getRenderedPageIfAllowed(p, request, site)
    return render(
        request,
        "dropboxpage.html",
        {
            "site": site,
            "currentpage": currentpage,
            "pages": pages,
            "metafooterpages": metafooterpages,
        },
    )
예제 #4
0
def upload_handler(request, challenge_short_name):
    """
    Upload a file to the given comicsite, display files previously uploaded
    """
    view_url = reverse('uploads:create',
                       kwargs={'challenge_short_name': challenge_short_name})
    if request.method == 'POST':
        # set values excluded from form here to make the model validate
        site = getSite(challenge_short_name)
        uploadedFile = UploadModel(
            challenge=site,
            permission_lvl=UploadModel.ADMIN_ONLY,
            user=request.user,
        )
        # ADMIN_ONLY
        form = UserUploadForm(request.POST,
                              request.FILES,
                              instance=uploadedFile)
        if form.is_valid():
            form.save()
            filename = ntpath.basename(form.instance.file.file.name)
            messages.success(
                request,
                (f"File '{filename}' sucessfully uploaded. "
                 f"An email has been sent to this projects organizers."),
            )
            send_file_uploaded_notification_email(
                uploader=request.user,
                filename=filename,
                challenge=site,
                site=get_current_site(request),
            )
            return HttpResponseRedirect(view_url)

        else:
            # continue to showing errors
            pass
    else:
        form = UserUploadForm()
    [site, pages,
     metafooterpages] = site_get_standard_vars(challenge_short_name)
    if not (site.is_admin(request.user) or site.is_participant(request.user)):
        p = Page(challenge=site, title="files")
        currentpage = permissionMessage(request, site, p)
        response = render(
            request,
            'page.html',
            {
                'site': site,
                'currentpage': currentpage,
                "pages": pages,
                "metafooterpages": metafooterpages,
            },
        )
        response.status_code = 403
        return response

    return render(
        request,
        'uploads/comicupload.html',
        {
            'form': form,
            'upload_url': view_url,
            'site': site,
            'pages': pages,
            'metafooterpages': metafooterpages,
        },
    )