Système de brouillons/publications

This commit is contained in:
champeno 2015-06-22 19:49:12 +02:00
parent 0d043cc28c
commit bdf7702be4
7 changed files with 90 additions and 25 deletions

View file

@ -61,24 +61,6 @@ header ul {
background:#eee;
}
#stage_present {
display:table;
background: #fff;
border-spacing:20px;
width:100%;
}
#stage_misc {
display:table-cell;
min-width:300px;
}
#stage_map {
display:table-cell;
min-width:300px;
}
/* formulaires */
label {
font-weight:bold;
@ -178,4 +160,39 @@ div#candidats li input {
div#candidats #addcandidat {
font-size:20px;
}
/* stages */
#stage_present {
display:table;
background: #fff;
border-spacing:20px;
width:100%;
}
#stage_misc {
display:table-cell;
min-width:300px;
}
#stage_map {
display:table-cell;
min-width:300px;
}
#stage_published.published {
background:#9f9;
}
#stage_published.unpublished {
background:#f99;
}
#stage_published input {
display:inline;
margin:0;
}
#stage_published p {
background:none;
}

View file

@ -0,0 +1,14 @@
{% extends "skeleton.html" %}
{% load staticfiles %}
{% block extra_head %}
<link type="text/css" href="{% static 'index.css' %}" rel="stylesheet" />
{% endblock %}
{% block content %}
<h1>Accès interdit</h1>
{% if unpublished %}<p>Le stage n'est pas encore publié</p>
{% elif notowned %}<p>Ce stage ne vous appartient pas, vous ne pouvez pas le modifier</p>
{% else %}<p>L'accès à ce contenu est interdit</p>
{% endblock %}

View file

@ -6,7 +6,7 @@
<h2>Mes stages</h2>
<ul>
{% for stage in stages %}
<li><a href="{% url 'monstage:stage' stage.id %}">{{ stage.sujet }}</a></li>
<li><a href="{% url 'monstage:stage' stage.id %}">{{ stage.sujet }}</a> <span class="published">{{ stage.published|yesno:"(Publié),(Brouillon)" }}</span></li>
{% endfor %}
<li><a href="{% url 'monstage:stage_add' %}">Ajouter un stage</a></li>
</ul>

View file

@ -2,7 +2,7 @@
{% block content %}
<h1>Modifier son profil</h1>
<p><a href="{% url 'monstage:index' %}">Retour</a></p>
<p><a href="{% url 'monstage:home' %}">Retour</a></p>
<form action="{% url 'monstage:profil_edit' %}" method="post">
{% csrf_token %}
<label for="first_name">Prénom : </label><input type="text" name="first_name" id="first_name" value="{{ user.first_name }}" /> <br/>

View file

@ -25,7 +25,20 @@
{% endblock %}
{% block content %}
<p><a href="{% url 'monstage:index' %}">Retour</a></p>
<p><a href="{% url 'monstage:home' %}">Retour</a></p>
{% if modifiable %}
<form action="{% url 'monstage:stage_publish' stage.id %}" method="post">
{% csrf_token %}
<div id="stage_published" class="{{ published|yesno:'published,unpublished' }}">
<input type="hidden" name="publishit" value="{{ published|yesno:'no,yes' }}" />
{% if published %}
<p>Ce stage est publié et visible des autres utilisateurs <input type="submit" value="Masquer" /></p>
{% else %}
<p>Ce stage est un brouillon invisible des autres utilisateurs <input type="submit" value="Publier" /></p>
{% endif %}
</div>
</form>
{% endif %}
<h1>{{ stage.sujet }}</h1>
<div id="stage_present">
<div id="stage_map"></div>

View file

@ -13,5 +13,6 @@ urlpatterns = patterns('',
url(r'^stage/(?P<stage_id>\d+)/edit/description/$', views.stage_edit_desc, name='stage_edit_desc'),
url(r'^stage/(?P<stage_id>\d+)/edit/lieu/$', views.stage_edit_lieu, name='stage_edit_lieu'),
url(r'^stage/(?P<stage_id>\d+)/edit/avis/$', views.stage_edit_feedback, name='stage_edit_feedback'),
url(r'^stage/(?P<stage_id>\d+)/edit/publish/$', views.stage_publish, name='stage_publish'),
url(r'^recherche/$', views.search, name='search'),
)

View file

@ -19,6 +19,11 @@ def index(request):
stats = { 'num_stages': Stage.objects.count() }
return render(request, 'monstage/index.html', {'stats': stats})
def forbidden(request, type):
context = {}
context[type] = True
return render(request, 'monstage/forbidden.html', context)
@login_required
def home(request):
stages = request.user.profil.stages.all()
@ -53,13 +58,16 @@ def profil_edit(request):
def stage(request, stage_id):
stage = get_object_or_404( Stage, pk = stage_id)
lieux_latlng = []
if not stage.published and not stage.profil_user == request.user.profil:
return forbidden(request, 'unpublished')
for lieu in stage.lieux.all():
# GEOS Format : (longitude, latitude)
lieux_latlng.append("%f, %f" % (lieu.coord.y, lieu.coord.x))
context = {
'stage': stage,
'modifiable': (stage.profil_user == request.user.profil),
'lieux_latlng': lieux_latlng
'lieux_latlng': lieux_latlng,
'published':stage.published,
}
return render(request, 'monstage/stage.html', context)
@ -86,7 +94,7 @@ def stage_add(request):
def stage_edit_desc(request, stage_id):
stage = get_object_or_404( Stage, pk = stage_id)
if stage.profil_user != request.user.profil:
return HttpResponseForbidden("Ce stage ne vous appartient pas")
return forbidden(request, 'notowned')
bullshit = ""
if request.POST:
form = StageForm(request.POST, instance = stage)
@ -150,7 +158,7 @@ def stage_edit_lieu(request, stage_id):
stage = get_object_or_404( Stage, pk = stage_id)
bullshit = ''
if stage.profil_user != request.user.profil:
return HttpResponseForbidden("Ce stage ne vous appartient pas")
return forbidden(request, 'notowned')
if request.POST:
valid = True
prevLieuxStage = [k for k in stage.lieustage_set.all()]
@ -222,7 +230,7 @@ class LieuStageFeedbackForm(forms.ModelForm):
def stage_edit_feedback(request, stage_id):
stage = get_object_or_404( Stage, pk = stage_id)
if stage.profil_user != request.user.profil:
return HttpResponseForbidden("Ce stage ne vous appartient pas")
return forbidden(request, 'notowned')
if request.POST:
form_gen = StageFeedbackForm(request.POST, instance = stage, prefix = 'gen')
forms_lieux = [(LieuStageFeedbackForm(request.POST, instance = lieustage, prefix = lieustage.id), lieustage.lieu) for lieustage in stage.lieustage_set.all()]
@ -240,6 +248,18 @@ def stage_edit_feedback(request, stage_id):
forms_lieux = [(LieuStageFeedbackForm(instance = lieustage, prefix = lieustage.id), lieustage.lieu) for lieustage in stage.lieustage_set.all()]
return render(request, 'monstage/stage_edit_feedback.html', { 'stage': stage, 'form_gen':form_gen, 'forms_lieux':forms_lieux })
def stage_publish(request, stage_id):
stage = get_object_or_404( Stage, pk = stage_id)
if request.POST:
publishit = request.POST.get('publishit', False)
if publishit == "yes":
stage.published = True
stage.save()
elif publishit == "no":
stage.published = False
stage.save()
return HttpResponseRedirect(reverse('monstage:stage', args=(stage_id,)))
def detail(request, question_id):
question = get_object_or_404(Question, pk=question_id)
return render(request, 'monstage/detail.html', {'question': question})