home page + admin
This commit is contained in:
parent
fcbff0e9dd
commit
7c0cc5e5de
|
@ -1,30 +0,0 @@
|
|||
{% extends 'base.html' %}
|
||||
|
||||
{% load bootstrap3 i18n %}
|
||||
|
||||
{% block logintab %} class="active"{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="page-header">
|
||||
<h1>
|
||||
{% trans "Login" %}
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-offset-3 col-md-6">
|
||||
<div class="well">
|
||||
{% include '_form.html' %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-offset-4 col-md-4">
|
||||
{% url 'registration_register' as reg_url %}
|
||||
{% blocktrans %}You do not have an account yet? Please <a href="{{ reg_url }}">register</a>.{% endblocktrans %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -1,21 +0,0 @@
|
|||
{% extends 'base.html' %}
|
||||
|
||||
{% load bootstrap3 i18n %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="page-header">
|
||||
<h1>
|
||||
{% trans "Password Reset" %}
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-offset-4 col-md-4">
|
||||
<div class="well">
|
||||
{% include "_form.html" %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -1,30 +0,0 @@
|
|||
{% extends 'base.html' %}
|
||||
|
||||
{% load bootstrap3 i18n %}
|
||||
|
||||
{% block registrationtab %} class="active"{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="page-header">
|
||||
<h1>
|
||||
{% trans "Registration" %}
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-offset-3 col-md-6">
|
||||
<div class="well">
|
||||
{% include '_form.html' %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-offset-4 col-md-4">
|
||||
{% url 'login' as login_url %}
|
||||
{% blocktrans %}You already have an account? Please <a href="{{ login_url }}">login</a>.{% endblocktrans %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -0,0 +1,38 @@
|
|||
from django.contrib import admin
|
||||
from django.contrib.sites.models import Site
|
||||
from django.contrib.sites.shortcuts import get_current_site
|
||||
|
||||
from ponyconf.admin import SiteAdminMixin
|
||||
from .models import Conference, Participant, Talk, TalkCategory, Track
|
||||
|
||||
|
||||
class ConferenceAdmin(SiteAdminMixin, admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
|
||||
class ParticipantAdmin(SiteAdminMixin, admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
|
||||
class TrackAdmin(SiteAdminMixin, admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
|
||||
class TalkCategoryAdmin(SiteAdminMixin, admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
|
||||
class TalkAdmin(SiteAdminMixin, admin.ModelAdmin):
|
||||
def get_form(self, request, obj=None, **kwargs):
|
||||
form = super().get_form(request, obj, **kwargs)
|
||||
site = get_current_site(request)
|
||||
form.base_fields['speakers'].queryset = Participant.objects.filter(site=site)
|
||||
form.base_fields['track'].queryset = Track.objects.filter(site=site)
|
||||
form.base_fields['category'].queryset = TalkCategory.objects.filter(site=site)
|
||||
return form
|
||||
|
||||
|
||||
admin.site.register(Conference, ConferenceAdmin)
|
||||
admin.site.register(Participant, ParticipantAdmin)
|
||||
admin.site.register(Talk, TalkAdmin)
|
||||
admin.site.register(TalkCategory, TalkCategoryAdmin)
|
|
@ -12,14 +12,8 @@ from django.utils.translation import ugettext_lazy as _
|
|||
from django.utils.translation import ugettext
|
||||
from django.utils import timezone
|
||||
|
||||
#from autoslug import AutoSlugField
|
||||
#from colorful.fields import RGBColorField
|
||||
|
||||
#from accounts.models import Participation
|
||||
from ponyconf.utils import PonyConfModel, enum_to_choices
|
||||
|
||||
#from .utils import generate_user_uid
|
||||
|
||||
from enum import IntEnum
|
||||
from datetime import timedelta
|
||||
from os.path import join, basename
|
||||
|
@ -37,10 +31,6 @@ from django.utils import timezone
|
|||
from autoslug import AutoSlugField
|
||||
from colorful.fields import RGBColorField
|
||||
|
||||
#from accounts.models import Participation
|
||||
#from ponyconf.utils import PonyConfModel, enum_to_choices
|
||||
#from planning.models import Room
|
||||
|
||||
from .utils import query_sum
|
||||
from .utils import generate_user_uid
|
||||
|
||||
|
@ -57,6 +47,29 @@ from django.utils.translation import ugettext
|
|||
|
||||
|
||||
|
||||
class Conference(models.Model):
|
||||
|
||||
site = models.OneToOneField(Site, on_delete=models.CASCADE)
|
||||
home = models.TextField(blank=True, default="")
|
||||
venue = models.TextField(blank=True, default="")
|
||||
city = models.CharField(max_length=64, blank=True, default="")
|
||||
#subscriptions_open = models.BooleanField(default=False) # workshop subscription
|
||||
|
||||
#def cfp_is_open(self):
|
||||
# events = Event.objects.filter(site=self.site)
|
||||
# return any(map(lambda x: x.is_open(), events))
|
||||
|
||||
#@property
|
||||
#def opened_events(self):
|
||||
# now = timezone.now()
|
||||
# return Event.objects.filter(site=self.site)\
|
||||
# .filter(Q(opening_date__isnull=True) | Q(opening_date__lte=now))\
|
||||
# .filter(Q(closing_date__isnull=True) | Q(closing_date__gte=now))
|
||||
|
||||
def __str__(self):
|
||||
return str(self.site)
|
||||
|
||||
|
||||
class Participant(PonyConfModel):
|
||||
|
||||
#LICENCES = IntEnum('Video licence', 'CC-Zero CC-BY CC-BY-SA CC-BY-ND CC-BY-NC CC-BY-NC-SA CC-BY-NC-ND')
|
||||
|
@ -121,29 +134,6 @@ class Participant(PonyConfModel):
|
|||
# return self.talk_set.exclude(accepted=False)
|
||||
|
||||
|
||||
class Conference(models.Model):
|
||||
|
||||
site = models.OneToOneField(Site, on_delete=models.CASCADE)
|
||||
home = models.TextField(blank=True, default="")
|
||||
venue = models.TextField(blank=True, default="")
|
||||
city = models.CharField(max_length=64, blank=True, default="")
|
||||
#subscriptions_open = models.BooleanField(default=False) # workshop subscription
|
||||
|
||||
#def cfp_is_open(self):
|
||||
# events = Event.objects.filter(site=self.site)
|
||||
# return any(map(lambda x: x.is_open(), events))
|
||||
|
||||
#@property
|
||||
#def opened_events(self):
|
||||
# now = timezone.now()
|
||||
# return Event.objects.filter(site=self.site)\
|
||||
# .filter(Q(opening_date__isnull=True) | Q(opening_date__lte=now))\
|
||||
# .filter(Q(closing_date__isnull=True) | Q(closing_date__gte=now))
|
||||
|
||||
def __str__(self):
|
||||
return str(self.site)
|
||||
|
||||
|
||||
class Track(PonyConfModel):
|
||||
|
||||
site = models.ForeignKey(Site, on_delete=models.CASCADE)
|
||||
|
@ -167,27 +157,6 @@ class Track(PonyConfModel):
|
|||
# return reverse('list-talks') + '?track=%s' % self.slug
|
||||
|
||||
|
||||
#class Topic(PonyConfModel):
|
||||
#
|
||||
# site = models.ForeignKey(Site, on_delete=models.CASCADE)
|
||||
#
|
||||
# name = models.CharField(max_length=128, verbose_name=_('Name'))
|
||||
# slug = AutoSlugField(populate_from='name', unique=True)
|
||||
# description = models.TextField(blank=True, verbose_name=_('Description'))
|
||||
# track = models.ForeignKey(Track, blank=True, null=True, verbose_name=_('Destination track'))
|
||||
#
|
||||
# reviewers = models.ManyToManyField(User, blank=True, verbose_name=_('Reviewers'))
|
||||
#
|
||||
# class Meta:
|
||||
# unique_together = ('site', 'name')
|
||||
#
|
||||
# def __str__(self):
|
||||
# return self.name
|
||||
#
|
||||
# def get_absolute_url(self):
|
||||
# return reverse('list-talks') + '?topic=%s' % self.slug
|
||||
|
||||
|
||||
class TalkCategory(models.Model): # type of talk (conf 30min, 1h, stand, …)
|
||||
|
||||
site = models.ForeignKey(Site, on_delete=models.CASCADE)
|
||||
|
|
|
@ -46,7 +46,7 @@ INSTALLED_APPS = [
|
|||
#'volunteers',
|
||||
|
||||
# external apps
|
||||
#'djangobower',
|
||||
'djangobower',
|
||||
'bootstrap3',
|
||||
#'registration',
|
||||
#'django_select2',
|
||||
|
@ -88,7 +88,7 @@ TEMPLATES = [
|
|||
'django.contrib.messages.context_processors.messages',
|
||||
|
||||
'ponyconf.context_processors.site',
|
||||
'proposals.context_processors.conference',
|
||||
#'proposals.context_processors.conference',
|
||||
],
|
||||
},
|
||||
},
|
||||
|
@ -206,7 +206,7 @@ BOOTSTRAP3 = {
|
|||
SELECT2_JS = 'select2/dist/js/select2.min.js'
|
||||
SELECT2_CSS = 'select2/dist/css/select2.min.css'
|
||||
|
||||
AUTHENTICATION_BACKENDS = ['yeouia.backends.YummyEmailOrUsernameInsensitiveAuth']
|
||||
#AUTHENTICATION_BACKENDS = ['yeouia.backends.YummyEmailOrUsernameInsensitiveAuth']
|
||||
LOGOUT_REDIRECT_URL = 'home'
|
||||
|
||||
# django-registration
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{% extends '_base.html' %}
|
||||
{% load accounts_tags i18n bootstrap3 %}
|
||||
{% load i18n bootstrap3 %}
|
||||
|
||||
{% block body %}
|
||||
|
||||
|
@ -18,22 +18,28 @@
|
|||
<div id="navbar" class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li{% block hometab %}{% endblock %}><a href="{% url 'home' %}"><span class="glyphicon glyphicon-home"></span> {% trans "Home" %}</a></li>
|
||||
{% comment %}
|
||||
{% if request.user.is_authenticated %}
|
||||
<li{% block exhibitortab %}{% endblock %}><a href="{% url 'participate-as-speaker' %}"><span class="glyphicon glyphicon-bullhorn"></span> {% trans "Exhibitor" %}</a></li>
|
||||
<li{% block volunteertab %}{% endblock %}><a href="{% url 'enrole-as-volunteer' %}"><span class="glyphicon glyphicon-thumbs-up"></span> {% trans "Volunteer" %}</a></li>
|
||||
{% endif %}
|
||||
<li{% block wsregtab %}{% endblock %}><a href="{% url 'list-registrable-talks' %}"><span class="glyphicon glyphicon-edit"></span> {% trans "Workshop registration" %}</a></li>
|
||||
{% endcomment %}
|
||||
</ul>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
{% if request.user.is_authenticated %}
|
||||
{% comment %}
|
||||
{% if request|staff %}
|
||||
<li{% block stafftab %}{% endblock %}><a href="{% url 'staff' %}"><span class="glyphicon glyphicon-cog"></span> {% trans "Staff" %}</a></li>
|
||||
{% endif %}
|
||||
<li{% block inboxtab %}{% endblock %}><a href="{% url 'inbox' %}"><span class="glyphicon glyphicon-envelope"></span> Inbox</a></li>
|
||||
<li{% block profiletab %}{% endblock %}><a href="{% url 'profile' %}"><span class="glyphicon glyphicon-user"></span> {% trans "Profile" %}</a></li>
|
||||
{% endcomment %}
|
||||
{% if request.user.is_staff %}
|
||||
<li><a href="{% url 'admin:index' %}"><span class="glyphicon glyphicon-cog"></span> Administration</a></li>
|
||||
{% endif %}
|
||||
<li><a href="{% url 'logout' %}" data-toggle="tooltip" data-placement="bottom" title="Logout"><span class="glyphicon glyphicon-log-out"></span></a></li>
|
||||
{% else %}
|
||||
<li{% block registrationtab %}{% endblock %}><a href="{% url 'registration_register' %}"><span class="glyphicon glyphicon-edit"></span> {% trans "Register" %}</a></li>
|
||||
<li{% block logintab %}{% endblock %}><a href="{% url 'login' %}"><span class="glyphicon glyphicon-log-in"></span> {% trans "Login" %}</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
{% extends 'base.html' %}
|
||||
|
||||
{% load ponyconf_tags i18n %}
|
||||
|
||||
{% block hometab %} class="active"{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% markdown site.conference.home %}
|
||||
|
||||
{% endblock %}
|
|
@ -0,0 +1,30 @@
|
|||
{% extends 'base.html' %}
|
||||
|
||||
{% load bootstrap3 i18n %}
|
||||
|
||||
{% block logintab %} class="active"{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="page-header">
|
||||
<h1>
|
||||
{% trans "Login" %}
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-offset-3 col-md-6">
|
||||
<div class="well">
|
||||
{% bootstrap_form_errors form layout="horizontal" %}
|
||||
<form method="post" class="form-horizontal">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_field form.username layout="horizontal" placeholder="Nom d’utilisateur, e-mail ou numéro d’adhérent" %}
|
||||
{% bootstrap_field form.password layout="horizontal" %}
|
||||
{% buttons layout="horizontal" %}
|
||||
<button type="submit" class="btn btn-primary">Login</button>
|
||||
<a class="btn btn-default" href="{% url 'password_reset' %}">Mot de passe oublié ?</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -0,0 +1,7 @@
|
|||
{% extends 'registration/base.html' %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block content %}
|
||||
<p>Votre mot de passe a été réinitialisé, vous pouvez à présent vous <a href="{% url 'login' %}">connecter</a>.<p/>
|
||||
{% endblock %}
|
|
@ -0,0 +1,22 @@
|
|||
{% extends 'registration/base.html' %}
|
||||
|
||||
{% load bootstrap3 %}
|
||||
|
||||
{% block content %}
|
||||
{% if validlink %}
|
||||
<form method="post" class="form-horizontal">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form layout="horizontal" %}
|
||||
{% buttons layout="horizontal" %}
|
||||
<button type="submit" class="btn btn-primary">Modifier le mot de passe</button>
|
||||
<a class="btn btn-default" href="{% url 'login' %}">Annuler</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
{% else %}
|
||||
<p>Ce lien de réinitialisation de mot de passe est invalide ou expiré.</p>
|
||||
<p>
|
||||
<a class="btn btn-primary" href="{% url 'password_reset' %}">Formulaire de réinitialisation du mot de passe</a>
|
||||
<a class="btn btn-default" href="{% url 'login' %}">Login</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
{% endblock %}
|
|
@ -0,0 +1,9 @@
|
|||
{% extends 'registration/base.html' %}
|
||||
|
||||
{% block content %}
|
||||
<p>
|
||||
Un e-mail contenant un lien vous permettant de réinitialiser votre mot de passe vous a été envoyé.
|
||||
Si vous ne le recevez pas, celui-ci est peut-être arrivé dans votre dossier « spam ».
|
||||
</p>
|
||||
<a class="btn btn-primary" href="{% url 'login' %}">Se connecter</a>
|
||||
{% endblock %}
|
|
@ -0,0 +1,27 @@
|
|||
{% extends 'base.html' %}
|
||||
|
||||
{% load bootstrap3 i18n %}
|
||||
|
||||
{% block content %}
|
||||
<div class="page-header">
|
||||
<h1>
|
||||
{% trans "Login" %}
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-offset-3 col-md-6">
|
||||
<div class="well">
|
||||
<p>Pour réinitialiser votre mot de passe, veuillez saisir votre adresse e-email.</p>
|
||||
<form method="post" class="form-horizontal">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form layout="horizontal" %}
|
||||
{% buttons layout="horizontal" %}
|
||||
<button type="submit" class="btn btn-primary">Réinitialiser le mot de passe</button>
|
||||
<a class="btn btn-default" href="{% url 'login' %}">Se connecter</a>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -0,0 +1,11 @@
|
|||
from django import template
|
||||
|
||||
from ponyconf.utils import markdown_to_html
|
||||
|
||||
|
||||
register = template.Library()
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def markdown(value):
|
||||
return markdown_to_html(value)
|
|
@ -15,16 +15,20 @@ Including another URLconf
|
|||
"""
|
||||
from django.conf.urls import include, url
|
||||
from django.contrib import admin
|
||||
from django.conf.urls.static import static
|
||||
from django.conf import settings
|
||||
#from django.conf.urls.static import static
|
||||
#from django.conf import settings
|
||||
|
||||
from . import views
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^admin/', admin.site.urls),
|
||||
url(r'^accounts/', include('accounts.urls')),
|
||||
url(r'^', views.home, name='home'),
|
||||
url(r'^', include('cfp.urls')),
|
||||
#url(r'', include('proposals.urls')),
|
||||
#url(r'', include('planning.urls')),
|
||||
#url(r'^volunteers/', include('volunteers.urls')),
|
||||
#url(r'^conversations/', include('conversations.urls')),
|
||||
#url(r'^select2/', include('django_select2.urls')),
|
||||
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
||||
]# + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
||||
|
|
|
@ -2,6 +2,9 @@ from django.contrib.sites.shortcuts import get_current_site
|
|||
from django.db import models
|
||||
from django.utils.html import mark_safe
|
||||
|
||||
from markdown import markdown
|
||||
import bleach
|
||||
|
||||
|
||||
def enum_to_choices(enum):
|
||||
return ((item.value, item.name.replace('_', ' ')) for item in list(enum))
|
||||
|
@ -20,3 +23,10 @@ class PonyConfModel(models.Model):
|
|||
|
||||
def get_link(self):
|
||||
return mark_safe('<a href="%s">%s</a>' % (self.get_absolute_url(), self))
|
||||
|
||||
|
||||
def markdown_to_html(md):
|
||||
html = markdown(md)
|
||||
allowed_tags = bleach.ALLOWED_TAGS + ['p', 'pre', 'span' ] + ['h%d' % i for i in range(1, 7) ]
|
||||
html = bleach.clean(html, tags=allowed_tags)
|
||||
return mark_safe(html)
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
from django.shortcuts import render
|
||||
|
||||
|
||||
def home(request):
|
||||
return render(request, 'ponyconf/home.html')
|
|
@ -1,28 +1,11 @@
|
|||
#
|
||||
# This file is autogenerated by pip-compile
|
||||
# To update, run:
|
||||
#
|
||||
# pip-compile --output-file requirements.txt requirements.in
|
||||
#
|
||||
-e git+git://github.com/Nim65s/django-YummyEmailOrUsernameInsensitiveAuth.git#egg=django-yeouia
|
||||
bleach==2.0.0
|
||||
chardet==3.0.4
|
||||
django-appconf==1.0.2 # via django-avatar, django-select2
|
||||
django-autoslug==1.9.3
|
||||
django-avatar==4.0.0
|
||||
django-bootstrap3==8.2.3
|
||||
django-bower==5.2.0
|
||||
django-colorful==1.2
|
||||
django-registration-redux==1.6
|
||||
django-select2==5.10.0
|
||||
django==1.11.3
|
||||
html5lib==0.999999999 # via bleach
|
||||
markdown==2.6.8
|
||||
olefile==0.44 # via pillow
|
||||
pillow==4.2.1 # via django-avatar
|
||||
pytz==2017.2 # via django
|
||||
six==1.10.0 # via bleach, django-bower, html5lib
|
||||
webencodings==0.5.1 # via html5lib
|
||||
django<1.12
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
# setuptools # via html5lib
|
||||
django-autoslug
|
||||
django-bootstrap3
|
||||
django-bower
|
||||
django-select2
|
||||
django-colorful
|
||||
|
||||
markdown
|
||||
bleach
|
||||
chardet
|
||||
|
|
Loading…
Reference in New Issue