add cfp opening and closing date
This commit is contained in:
parent
bd8538e7e2
commit
6d5a458b95
|
@ -166,6 +166,7 @@ BOWER_INSTALLED_APPS = (
|
|||
'jquery-ui',
|
||||
'jquery-cookie',
|
||||
'select2',
|
||||
'eonasdan-bootstrap-datetimepicker',
|
||||
)
|
||||
|
||||
LOGIN_REDIRECT_URL = 'home'
|
||||
|
|
|
@ -125,4 +125,4 @@ class TopicForm(forms.ModelForm):
|
|||
return name
|
||||
|
||||
|
||||
ConferenceForm = modelform_factory(Conference, fields=['home'])
|
||||
ConferenceForm = modelform_factory(Conference, fields=['cfp_opening_date', 'cfp_closing_date', 'home'])
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.10.1 on 2016-09-28 18:02
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('proposals', '0012_topic_track'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='conference',
|
||||
name='cfp_closing_date',
|
||||
field=models.DateTimeField(blank=True, default=None, null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='conference',
|
||||
name='cfp_opening_date',
|
||||
field=models.DateTimeField(blank=True, default=None, null=True),
|
||||
),
|
||||
]
|
|
@ -7,6 +7,7 @@ from django.core.validators import MaxValueValidator, MinValueValidator
|
|||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import ugettext
|
||||
from django.utils import timezone
|
||||
|
||||
from autoslug import AutoSlugField
|
||||
|
||||
|
@ -20,6 +21,16 @@ class Conference(models.Model):
|
|||
|
||||
site = models.OneToOneField(Site, on_delete=models.CASCADE)
|
||||
home = models.TextField(blank=True, default="")
|
||||
cfp_opening_date = models.DateTimeField(null=True, blank=True, default=None)
|
||||
cfp_closing_date = models.DateTimeField(null=True, blank=True, default=None)
|
||||
|
||||
def cfp_is_open(self):
|
||||
now = timezone.now()
|
||||
if self.cfp_opening_date and now < self.cfp_opening_date:
|
||||
return False
|
||||
if self.cfp_closing_date and now > self.cfp_closing_date:
|
||||
return False
|
||||
return True
|
||||
|
||||
def __str__(self):
|
||||
return str(self.site)
|
||||
|
|
|
@ -2,39 +2,39 @@
|
|||
|
||||
{% load bootstrap3 staticfiles i18n %}
|
||||
|
||||
{% block talktab %} class="active"{% endblock %}
|
||||
{% block admintab %} class=active{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<h1>{% trans "Conference settings" %}</h1>
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3>{% trans "Home page" %}</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<form method="post" role="form">
|
||||
{% csrf_token %}
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<li class="active"><a href="#editor" role="tab" data-toggle="tab">Editor</a></li>
|
||||
<li><a href="#preview" role="tab" data-toggle="tab">Preview</a></li>
|
||||
<li><a href="https://daringfireball.net/projects/markdown/syntax" target="blank" role="tab">Syntaxe</a></li>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="editor" style="max-height: 220px; margin-bottom: 20px;">
|
||||
<div class="form-group">
|
||||
<textarea style="width: 100%; height: 220px;" id="markdown-content" name="home">{{ conference.home }}</textarea>
|
||||
</div>
|
||||
<div class="panel-heading">
|
||||
<h3>{% trans "Home page" %}</h3>
|
||||
</div>
|
||||
<div class="tab-pane well" id="preview" style="min-height: 220px; magin-bottom: 20px;">
|
||||
<div id="preview-content"></div>
|
||||
<div class="panel-body">
|
||||
<form method="post" role="form">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_field form.cfp_opening_date addon_after='<span class="glyphicon glyphicon-calendar"></span>' %}
|
||||
{% bootstrap_field form.cfp_closing_date addon_after='<span class="glyphicon glyphicon-calendar"></span>' %}
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<li class="active"><a href="#editor" role="tab" data-toggle="tab">Editor</a></li>
|
||||
<li><a href="#preview" role="tab" data-toggle="tab">Preview</a></li>
|
||||
<li><a href="https://daringfireball.net/projects/markdown/syntax" target="blank" role="tab">Syntaxe</a></li>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane active" id="editor" style="max-height: 220px; margin-bottom: 20px;">
|
||||
<div class="form-group">
|
||||
<textarea style="width: 100%; height: 220px;" id="markdown-content" name="home">{{ conference.home }}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane well" id="preview" style="min-height: 220px; magin-bottom: 20px;">
|
||||
<div id="preview-content"></div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-success"><span class="glyphicon glyphicon-pencil"></span> Submit</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-success"><span class="glyphicon glyphicon-pencil"></span> Submit</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
@ -42,6 +42,7 @@
|
|||
{% block css %}
|
||||
{{ block.super }}
|
||||
{{ form.media.css }}
|
||||
<link rel="stylesheet" href="{% static 'eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css' %}" />
|
||||
{% endblock css %}
|
||||
|
||||
{% block js_end %}
|
||||
|
@ -50,6 +51,28 @@
|
|||
<script type="text/javascript">
|
||||
var markdown_preview_url = "{% url 'markdown' %}";
|
||||
</script>
|
||||
<script src="{% static 'moment/min/moment.min.js' %}"></script>
|
||||
<script src="{% static 'eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js' %}"></script>
|
||||
<script src="{% static 'jquery.cookie/jquery.cookie.js' %}"></script>
|
||||
<script src="{% static 'js/markdown-preview.js' %}"></script>
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
$("#id_opening_date").datetimepicker({
|
||||
"format": "YYYY-MM-DD HH:mm",
|
||||
"widgetPositioning": {
|
||||
"horizontal": "right",
|
||||
"vertical": "auto"
|
||||
},
|
||||
"showClear": true
|
||||
});
|
||||
$("#id_closing_date").datetimepicker({
|
||||
"format": "YYYY-MM-DD HH:mm",
|
||||
"widgetPositioning": {
|
||||
"horizontal": "right",
|
||||
"vertical": "auto"
|
||||
},
|
||||
"showClear": true
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{% endblock js_end %}
|
||||
|
|
|
@ -19,6 +19,10 @@
|
|||
{% endif %}
|
||||
|
||||
<br />
|
||||
{% if conf.cfp_is_open %}
|
||||
<a class="btn btn-success" href="{% url 'add-talk' %}">{% trans "Propose a talk" %}</a>
|
||||
{% else %}
|
||||
{% trans "Sorry, the Call for Participation is closed." %}
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -17,7 +17,7 @@ from django.http import HttpResponse
|
|||
from accounts.models import Participation
|
||||
from accounts.mixins import OrgaRequiredMixin, StaffRequiredMixin
|
||||
from accounts.decorators import orga_required, staff_required
|
||||
from accounts.utils import is_staff
|
||||
from accounts.utils import is_staff, is_orga
|
||||
|
||||
from conversations.models import ConversationWithParticipant, ConversationAboutTalk, Message
|
||||
|
||||
|
@ -53,12 +53,14 @@ def conference(request):
|
|||
|
||||
@login_required
|
||||
def participate(request):
|
||||
talks = Talk.objects.filter(site=get_current_site(request))
|
||||
site = get_current_site(request)
|
||||
talks = Talk.objects.filter(site=site)
|
||||
my_talks = talks.filter(speakers=request.user)
|
||||
proposed_talks = talks.exclude(speakers=request.user).filter(proposer=request.user)
|
||||
return render(request, 'proposals/participate.html', {
|
||||
'my_talks': my_talks,
|
||||
'proposed_talks': proposed_talks,
|
||||
'conf': site.conference,
|
||||
})
|
||||
|
||||
@staff_required
|
||||
|
@ -135,18 +137,24 @@ def talk_list(request):
|
|||
|
||||
@login_required
|
||||
def talk_edit(request, talk=None):
|
||||
if talk:
|
||||
talk = get_object_or_404(Talk, slug=talk, site=get_current_site(request))
|
||||
site = get_current_site(request)
|
||||
if talk: # edit existing talk
|
||||
talk = get_object_or_404(Talk, slug=talk, site=site)
|
||||
if not talk.is_editable_by(request.user):
|
||||
raise PermissionDenied()
|
||||
form = TalkForm(request.POST or None, instance=talk, site=get_current_site(request))
|
||||
if not is_staff(request, request.user):
|
||||
form.fields.pop('track')
|
||||
else: # add new talk
|
||||
if not site.conference.cfp_is_open():
|
||||
raise PermissionDenied()
|
||||
form = TalkForm(request.POST or None, instance=talk, site=site)
|
||||
if talk:
|
||||
form.fields['title'].disabled = True
|
||||
form.fields['topics'].disabled = True
|
||||
if not talk.is_editable_by(request.user):
|
||||
form.fields.pop('track')
|
||||
else:
|
||||
form.fields['speakers'].initial = [request.user]
|
||||
if not is_orga(request, request.user):
|
||||
form.fields.pop('track')
|
||||
if request.method == 'POST' and form.is_valid():
|
||||
if hasattr(talk, 'id'):
|
||||
talk = form.save()
|
||||
|
|
Loading…
Reference in New Issue