]> git.0d.be Git - panikdb.git/commitdiff
add form for the logo vote
authorFrédéric Péters <fpeters@0d.be>
Tue, 29 Mar 2016 12:45:56 +0000 (14:45 +0200)
committerFrédéric Péters <fpeters@0d.be>
Tue, 29 Mar 2016 12:45:56 +0000 (14:45 +0200)
panikdb/poll/__init__.py [new file with mode: 0644]
panikdb/poll/migrations/0001_initial.py [new file with mode: 0644]
panikdb/poll/migrations/__init__.py [new file with mode: 0644]
panikdb/poll/models.py [new file with mode: 0644]
panikdb/poll/views.py [new file with mode: 0644]
panikdb/settings.py
panikdb/static/css/style.css
panikdb/templates/home.html
panikdb/templates/vote.html [new file with mode: 0644]
panikdb/urls.py
panikdb/views.py

diff --git a/panikdb/poll/__init__.py b/panikdb/poll/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/panikdb/poll/migrations/0001_initial.py b/panikdb/poll/migrations/0001_initial.py
new file mode 100644 (file)
index 0000000..647736b
--- /dev/null
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+from django.conf import settings
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Vote',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('choice', models.CharField(max_length=10, verbose_name='Choice')),
+                ('comment', models.TextField(verbose_name='Comment')),
+                ('creation_timestamp', models.DateTimeField(auto_now_add=True)),
+                ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
+            ],
+            options={
+            },
+            bases=(models.Model,),
+        ),
+    ]
diff --git a/panikdb/poll/migrations/__init__.py b/panikdb/poll/migrations/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/panikdb/poll/models.py b/panikdb/poll/models.py
new file mode 100644 (file)
index 0000000..b57efb9
--- /dev/null
@@ -0,0 +1,9 @@
+from django.conf import settings
+from django.utils.translation import ugettext_lazy as _
+from django.db import models
+
+class Vote(models.Model):
+    user = models.ForeignKey(settings.AUTH_USER_MODEL)
+    choice = models.CharField(_('Choice'), max_length=10)
+    comment = models.TextField(_('Comment'))
+    creation_timestamp = models.DateTimeField(auto_now_add=True)
diff --git a/panikdb/poll/views.py b/panikdb/poll/views.py
new file mode 100644 (file)
index 0000000..303df13
--- /dev/null
@@ -0,0 +1,32 @@
+from django.contrib.auth.decorators import login_required
+from django.shortcuts import redirect
+from django.views.generic.base import TemplateView
+from django.contrib import messages
+
+from .models import Vote
+
+class VoteView(TemplateView):
+    template_name = 'vote.html'
+
+    def dispatch(self, request, *args, **kwargs):
+        try:
+            vote = Vote.objects.get(user=request.user)
+            messages.error(request, 'Non !')
+            return redirect('home')
+        except Vote.DoesNotExist:
+            pass
+        return super(VoteView, self).dispatch(request, *args, **kwargs)
+
+    def post(self, request):
+        choice = request.POST['choice']
+        comment = request.POST['comment']
+
+        vote = Vote(
+                user=request.user,
+                choice=request.POST['choice'],
+                comment=request.POST['comment'])
+        vote.save()
+        messages.success(request, 'Merci !')
+        return redirect('home')
+
+vote = login_required(VoteView.as_view())
index f848967708dc8ec4df8a713306690b5f47abadae..bff83db75b2ffde56b8011b623213cad6959f7dc 100644 (file)
@@ -138,6 +138,7 @@ INSTALLED_APPS = (
     'panikdb.aa',
     'panikdb.customtags',
     'panikdb.stats',
+    'panikdb.poll',
     'gadjo',
     'combo.data',
     'combo.manager',
index 8a4bfba7df06681afcc2a079958b895050e25f26..1e83ba47cb099a66078d2d1499f78c31718a6e30 100644 (file)
@@ -670,3 +670,46 @@ div.nonstop-stats h3 span {
 div#content div#available-cells ul {
        padding: 0;
 }
+
+div.poll {
+       border-radius: 10px;
+       margin: 0 auto;
+       text-align: center;
+       max-width: 30em;
+       background: #FF7600;
+       border: 1px solid red;
+}
+
+div.poll a {
+       display: inline-block;
+       width: 100%;
+       padding: 3em;
+       color: white;
+       font-weight: bold;
+}
+
+form.poll img {
+       margin-left: 1em;
+       margin-right: 4em;
+}
+
+form.poll p {
+       margin-top: 1em;
+}
+
+form.poll textarea {
+       width: 100%;
+       max-width: 40em;
+       height: 10em;
+}
+
+form.poll div.buttons {
+       margin-top: 1em;
+}
+
+form.poll div.error {
+       padding: 1ex;
+       max-width: 40em;
+       margin: 2em;
+       border: 2px solid red;
+}
index 883646b8f8fb4c48d8d63f38464abd43afbbe4d6..8c2c12ba0b2090cc0f45f02dea0f79dd272f4902 100644 (file)
 {% endblock %}
 
 {% block content %}
+
+{% if display_poll_button %}
+<div class="poll">
+       <a href="{% url 'vote' %}">Sondage Logo !</a>
+</div>
+{% endif %}
+
 <h2>Émissions</h2>
 
 {% for emission in emissions %}
diff --git a/panikdb/templates/vote.html b/panikdb/templates/vote.html
new file mode 100644 (file)
index 0000000..8e0936e
--- /dev/null
@@ -0,0 +1,79 @@
+{% extends "base.html" %}
+
+{% block content %}
+
+<h2>Bienvenue sur le sondage Logo de Radio Panik !</h2>
+
+<p>
+Ci-dessous, vous trouverez les deux propositions de logos préparées par
+notre graphiste embauché et validés par le Groupe LOGO.
+</p>
+
+<p>
+Votez pour l'un de ces logos !
+</p>
+
+<p>
+Vous avez aussi la possibilité de faire un commentaire pour justifier votre
+choix ou suggérer une amélioration au logo qui a votre faveur (en effet, un
+dernier travail avec le graphiste est prévu pour peaufiner le logo
+démocratiquement choisi).
+</p>
+
+<p>
+Vous pouvez également vous abstenir, c'est-à-dire que vous ne vous prononcez
+pas pour l'un des logos proposés mais vous devez alors justifier votre
+abstention en complétant la case « commentaire ».
+</p>
+
+<p>
+Vous n'avez qu¹une seule voix par identifiant, tout vote est définitif et
+vous devez voter avant le <strong>LUNDI 18 AVRIL 2016</strong>.
+</p>
+
+<p>
+Merci pour votre participation !
+</p>
+
+<hr/>
+
+<form method="post" class="poll">
+
+ <div class="error" style="display: none;">
+        Oups ! Vous n'avez sélectionné aucun logo proposé ! Veuillez en
+        choisir un.  Vous pouvez aussi vous abstenir et ne choisir aucun
+        des deux logos proposés mais dans ce cas, vous devez justifier
+        votre abstention en utilisant la case « COMMENTAIRES ».
+ </div>
+
+{% csrf_token %}
+<div class="choices">
+<label><input type="radio" name="choice" value="1"><img src="/static/ckeditor/ckeditor/plugins/image/images/noimage.png" width="320" height="240" alt="logo 1"/></input></label>
+<label><input type="radio" name="choice" value="2"><img src="/static/ckeditor/ckeditor/plugins/image/images/noimage.png" width="320" height="240" alt="logo 2"/></input></label>
+<label><input type="radio" name="choice" value="3">Abstention</input></label>
+</div>
+
+<p>
+  Commentaire :
+</p>
+<textarea name="comment">
+</textarea>
+
+<div class="buttons">
+<button>Enregistrer mon vote</button>
+</div>
+</form>
+
+<script>
+$('form').on('submit', function() {
+  var comment = $('textarea').val();
+  var choice = $('input[name=choice]:checked').val();
+  if (choice === undefined || (choice == "3" && comment.length < 10)) {
+    $('div.error').show();
+    return false;
+  }
+});
+</script>
+
+{% endblock %}
+
index 4a19f9d3136ebe5d8cdd12f556d1a8df0c46a041..15c61fabbca28d4c39e333c16dc88fc8555dd7a1 100644 (file)
@@ -69,6 +69,8 @@ urlpatterns = patterns('',
     url(r'^combok/soundfiles/', 'panikombo.views.soundfiles'),
     url(r'^combok/episodes/', 'panikombo.views.episodes'),
 
+    url(r'^vote/', 'panikdb.poll.views.vote', name='vote'),
+
     url(r'^admin/', include(admin.site.urls)),
 )
 
index b7b57ec05e372c624f959293a00b350b8588628f..4662c10e280d754787fb69807653d2d05fefdadc 100644 (file)
@@ -17,11 +17,17 @@ from combo.data.models import Page
 import emissions.views
 import newsletter.views
 
+from .poll.models import Vote
+
 class Home(TemplateView):
     template_name = 'home.html'
 
     def get_context_data(self, **kwargs):
         context = super(Home, self).get_context_data(**kwargs)
+        try:
+            vote = Vote.objects.get(user=self.request.user)
+        except Vote.DoesNotExist:
+            context['display_poll_button'] = True
         context['emissions'] = self.request.user.emissions.all().order_by('title')
         context['news_categories'] = self.request.user.news_categories.all().order_by('title')
         if self.request.user.has_perm('emissions.add_focus'):