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, }
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
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, }, )
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, }, )