Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions pyconbalkan/conference/middleware.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
from urllib.parse import urljoin

from django.conf import settings
from django.http import HttpResponseRedirect

from pyconbalkan.conference.models import Conference


class ConferenceSelectionMiddleware:
def __init__(self, get_response):
self.get_response = get_response

def __call__(self, request):
"""
Code to be executed for each request before
the view (and later middleware) are called.
Domain format : 2019.pyconbalkan.com

Every request will have an atribute `conference` in it
`conference` is the conference.models.Conference object for the
respective year fetched from it's domain.
"""

domain = request.META.get('HTTP_HOST', 'localhost')
try:
domain_year = int(domain.split('.')[0])
q = {
"year": domain_year
}
if not request.user.is_superuser:
q['active'] = True

request.conference = Conference.objects.get(**q)
except (Conference.DoesNotExist, ValueError):
request.conference = Conference.objects.filter(active=True).first()

conference_domain = "{}.{}".format(
request.conference.year,
settings.META_SITE_DOMAIN
)

if settings.DEBUG is False and conference_domain != request.META['HTTP_HOST']:
return HttpResponseRedirect(
urljoin(
"{}://{}".format(settings.META_SITE_PROTOCOL, conference_domain
), "/")
)

return self.get_response(request)
9 changes: 0 additions & 9 deletions pyconbalkan/core/context_processors.py

This file was deleted.

2 changes: 1 addition & 1 deletion pyconbalkan/core/templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<!--[if !IE]><!--> <html lang="en"> <!--<![endif]-->
<head {% meta_namespaces %} >
{% include "meta/meta.html" %}
<title>{{ conference.event }} {{ conference.name }} {{ conference.year }}</title>
<title>{{ request.conference.event }} {{ request.conference.name }} {{ request.conference.year }}</title>

<!-- Meta -->
<meta charset="utf-8">
Expand Down
22 changes: 11 additions & 11 deletions pyconbalkan/core/templates/includes/event_sidebar.html
Original file line number Diff line number Diff line change
@@ -1,34 +1,34 @@
{% load static %}

<aside class="event-sidebar">
<a href="/" class="logo" title="{{ conference.event }} {{ conference.name }} - {{ conference.city }} {{ conference.year }}"></a>
<a href="/" class="logo" title="{{ request.conference.event }} {{ request.conference.name }} - {{ request.conference.city }} {{ request.conference.year }}"></a>
<hr class="line">
<h1>#{{ conference.number }}</h1>
<h1>#{{ request.conference.number }}</h1>
<p class="event-sidebar__text">
{{ conference.address }}, {{ conference.city }}
{{ request.conference.address }}, {{ request.conference.city }}
</p>
<p class="event-sidebar__text">
<i class="event-sidebar__icon far fa-calendar-alt"></i>
{{ conference.from_date }} - {{ conference.to_date }}
{{ request.conference.from_date }} - {{ request.conference.to_date }}
</p>
<p class="event-sidebar__text">
<i class="event-sidebar__icon fas fa-users"></i>
{{ conference.max_attendees }} attendees
{{ request.conference.max_attendees }} attendees
</p>
<p class="event-sidebar__text">
<i class="event-sidebar__icon fas fa-globe"></i>
{{ conference.get_type_display }}
{{ request.conference.get_type_display }}
</p>

<div class="event-button__wrapper">
{% if conference.tickets %}
<a class="button button--yellow mb-xs-20" href="{{ conference.tickets }}" target="_blank" role="button">Join Us!</a>
{% if request.conference.tickets %}
<a class="button button--yellow mb-xs-20" href="{{ request.conference.tickets }}" target="_blank" role="button">Join Us!</a>
{% endif %}
</div>
<div class="social__links mb-xs-10">
{% if conference.facebook %}<a href="{{ conference.facebook }}" class="facebook" target="_blank"></a>{% endif %}
{% if conference.instagram %}<a href="{{ conference.instagram }}" class="instagram" target="_blank"></a>{% endif %}
{% if conference.twitter %}<a href="{{ conference.twitter }}" class="twitter" target="_blank"></a>{% endif %}
{% if request.conference.facebook %}<a href="{{ request.conference.facebook }}" class="facebook" target="_blank"></a>{% endif %}
{% if request.conference.instagram %}<a href="{{ request.conference.instagram }}" class="instagram" target="_blank"></a>{% endif %}
{% if request.conference.twitter %}<a href="{{ request.conference.twitter }}" class="twitter" target="_blank"></a>{% endif %}
</div>
<h3 class="supported-by">Supported by</h3>
<a href="https://www.python.org/psf/"><div><img class="psf-logo" src="{% static 'img/pfs-logo.png' %}"></div></a>
Expand Down
2 changes: 1 addition & 1 deletion pyconbalkan/core/templates/includes/header.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
</div>
</li>
<li class="menu__list__item">
{% if conference.timetable_pdf %}
{% if request.conference.timetable_pdf %}
<a class="menu__list__link {% if request.path == '/timetable_pdf' %}active{% endif %}" href="/timetable_pdf" role="button">Timetable</a>
{% else %}
<a class="menu__list__link {% if request.path == '/timetable' %}active{% endif %}" href="{% url 'timetable' %}" role="button">Timetable</a>
Expand Down
5 changes: 2 additions & 3 deletions pyconbalkan/core/views.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
from django.shortcuts import render

from pyconbalkan.conference.models import Conference, CountDown, MissionStatement
from pyconbalkan.conference.models import CountDown, MissionStatement
from pyconbalkan.speaker.models import Speaker
from pyconbalkan.sponsors.models import Sponsor, SponsorshipLevel


def home(request):
conference = Conference.objects.filter(active=True)
count_down = CountDown.objects.filter(active=True)
keynotes = Speaker.objects.filter(active=True, keynote=True).order_by('full_name')

Expand All @@ -27,6 +26,6 @@ def home(request):
'partners': partners,
'count_down': count_down.first() if count_down else None,
'mission_statement': mission_statement.first() if mission_statement else None,
'meta': conference.first().as_meta(),
'meta': request.conference.as_meta(),
}
return render(request, 'home.html', context)
2 changes: 0 additions & 2 deletions pyconbalkan/news/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@
from meta.views import Meta
from rest_framework import viewsets

from pyconbalkan.conference.models import Conference
from pyconbalkan.news.models import Post
from pyconbalkan.news.serializers import PostSerializer
from pyconbalkan.organizers.models import Volunteer


class PostViewSet(viewsets.ModelViewSet):
Expand Down
1 change: 0 additions & 1 deletion pyconbalkan/organizers/views.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from django.shortcuts import render, get_object_or_404
from rest_framework import viewsets

from pyconbalkan.conference.models import Conference
from pyconbalkan.organizers.forms import VolunteerCreateForm
from pyconbalkan.organizers.models import Volunteer
from pyconbalkan.organizers.serializers import VolunteerSerializer
Expand Down
4 changes: 3 additions & 1 deletion pyconbalkan/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,16 @@
]

MIDDLEWARE = [
# Django middlewares
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
# Custom middlewares
'pyconbalkan.conference.middleware.ConferenceSelectionMiddleware',
]

ROOT_URLCONF = 'pyconbalkan.urls'
Expand All @@ -89,7 +92,6 @@
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'pyconbalkan.core.context_processors.conference',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
Expand Down
4 changes: 2 additions & 2 deletions pyconbalkan/sponsors/templates/sponsoring.html
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ <h2 class="success-message">
</div>

<h2 class="centered">
{% if conference.sponsor_email %}
For more information, contact us by email {{ conference.sponsor_email }}
{% if request.conference.sponsor_email %}
For more information, contact us by email {{ request.conference.sponsor_email }}
{% endif %}
</h2>

Expand Down
6 changes: 2 additions & 4 deletions pyconbalkan/timetable/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
from django.shortcuts import render, redirect
from rest_framework import viewsets

from pyconbalkan.conference.models import Conference
from pyconbalkan.timetable.models import Room, Slot, Timetable
from pyconbalkan.timetable.serializers import TimetableSerializer

Expand All @@ -13,9 +12,8 @@ class TimetableViewSet(viewsets.ModelViewSet):


def timetable_pdf_view(request):
conference = Conference.objects.filter(active=True)
if conference and conference.first().timetable_pdf:
return redirect(conference.first().timetable_pdf.url)
if request.conference and request.conference.timetable_pdf:
return redirect(request.conference.timetable_pdf.url)
return redirect('/')


Expand Down
11 changes: 4 additions & 7 deletions pyconbalkan/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@
from django.contrib import admin
from django.urls import path
from django.views.generic import TemplateView
from django.views.static import serve

from markdownx import urls as markdownx

from pyconbalkan.about.api_urls import router as about
from pyconbalkan.about.views import about_view
from pyconbalkan.cfp.api_urls import router as cfp
Expand All @@ -15,21 +14,19 @@
from pyconbalkan.contact.api_urls import router as contact
from pyconbalkan.contact.views import contact_view
from pyconbalkan.core import routers, views
from pyconbalkan.faq.api_urls import router as faq
from pyconbalkan.faq.views import faq_view
from pyconbalkan.info.views import info_view
from pyconbalkan.news.api_urls import router as news
from pyconbalkan.news.views import *
from pyconbalkan.organizers.api_urls import router as organizers
from pyconbalkan.organizers.views import (organizer_view, organizers_list,
volunteers_createview)
from pyconbalkan.settings import PDF_ROOT
from pyconbalkan.speaker.api_urls import router as speaker
from pyconbalkan.speaker.views import *
from pyconbalkan.sponsors.api_urls import router as sponsors

from pyconbalkan.timetable.views import timetable_view, timetable_pdf_view
from pyconbalkan.faq.views import faq_view
from pyconbalkan.faq.api_urls import router as faq
from pyconbalkan.sponsors.views import sponsor_view, sponsoring_view, sponsors_view
from pyconbalkan.timetable.views import timetable_view, timetable_pdf_view

router = routers.DefaultRouter()
router.extend(conference)
Expand Down