mise-en-production
authorPatrick Hetu <patrick.hetu@auf.org>
Wed, 9 Sep 2015 19:36:26 +0000 (15:36 -0400)
committerPatrick Hetu <patrick.hetu@auf.org>
Wed, 9 Sep 2015 19:36:26 +0000 (15:36 -0400)
project/framonde/admin.py
project/framonde/models.py
project/framonde/search_indexes.py
project/framonde/static/img/derniernumero.png [new file with mode: 0644]
project/framonde/static/style.css
project/framonde/templatetags/__init__.py [new file with mode: 0644]
project/framonde/templatetags/auf.py [new file with mode: 0644]
project/framonde/urls.py
project/framonde/views.py

index 0cdbbd9..26832b5 100644 (file)
@@ -1,8 +1,7 @@
 # coding: utf8
-from project.framonde.models import *
+from .models import *
 from django.db import models
 from django.contrib import admin
-from tinymce.widgets import TinyMCE
 
 
 class CommunicationAdmin(admin.ModelAdmin):
@@ -24,10 +23,6 @@ class CommunicationAdmin(admin.ModelAdmin):
           'classes': ['wide']}),
     ]
 
-    formfield_overrides = {
-        models.TextField: {'widget': TinyMCE(attrs={'cols': 60, 'rows': 24}, )},
-    }
-
     def show_image2(self, obj):
         if obj.image:
             return "<img src='../../../media/%s' style='height:40px;'>" % obj.image
@@ -66,10 +61,6 @@ class ContributionAdmin(admin.ModelAdmin):
           'classes': ['wide']}),
     ]
 
-    formfield_overrides = {
-        models.TextField: {'widget': TinyMCE(attrs={'cols': 60, 'rows': 24}, )},
-    }
-
     def show_image2(self, obj):
         if obj.image:
             return "<img src='../../../media/%s' style='height:40px;'>" % obj.image
@@ -108,10 +99,6 @@ class OffresAdmin(admin.ModelAdmin):
           'classes': ['wide']}),
     ]
 
-    formfield_overrides = {
-        models.TextField: {'widget': TinyMCE(attrs={'cols': 60, 'rows': 24}, )},
-    }
-
     def show_image2(self, obj):
         if obj.image:
             return "<img src='../../../media/%s' style='height:40px;'>" % obj.image
@@ -152,10 +139,6 @@ class ArchiveAdmin(admin.ModelAdmin):
         ('Texte', {'fields': ['texte'], 'classes': ['wide']}),
     ]
 
-    formfield_overrides = {
-        models.TextField: {'widget': TinyMCE(attrs={'cols': 60, 'rows': 24}, )},
-    }
-
     list_display = ('status', 'numero', 'titre', 'date_pub')
     list_display_links = ('status', 'numero', 'titre',)
     search_fields = ['titre']
index 61b89f9..4a3579a 100755 (executable)
@@ -2,14 +2,18 @@
 from django import forms
 from django.db import models
 
+from tinymce.models import HTMLField
 
-class Communication(models.Model):
+
+class Framonde(models.Model):
     region = models.CharField(
-        max_length=1,
+        max_length=2,
         null=False,
         default='3',
         blank=False,
         choices=(
+            ('0',
+             'Internationale'),
             ('1',
              'Afrique Centrale et des Grands-Lacs'),
             ('2',
@@ -18,17 +22,17 @@ class Communication(models.Model):
              'Amériques'),
             ('4',
              'Asie-Pacifique'),
-            ('3',
+            ('5',
              'Caraïbe'),
-            ('4',
+            ('6',
              'Europe centrale et orientale'),
-            ('3',
+            ('7',
              'Moyen-Orient'),
-            ('4',
+            ('8',
              'Océan Indien'),
-            ('3',
+            ('9',
              'Maghreb'),
-            ('4',
+            ('10',
              'Europe de l\'Ouest')))
     status = models.CharField(
         max_length=1,
@@ -45,152 +49,37 @@ class Communication(models.Model):
             ('4',
              'A supprimer')))
     titre = models.CharField(max_length=200)
-    sous_titre = models.CharField(max_length=300, null=True, blank=True,)
-    lieu = models.CharField(max_length=300)
+    sous_titre = models.CharField(max_length=300, null=True, blank=True)
+    lieu = models.CharField(max_length=300, null=True, blank=True)
     slug = models.SlugField(unique=True)
-    texte = models.TextField()
+    texte = HTMLField()
     image = models.ImageField(null=True, blank=True, upload_to='communication')
     date_pub = models.DateField('date de publication')
-    date_limite = models.DateField('date limite')
-    date_event = models.DateField('date de l\'événement')
+    date_limite = models.DateField('date limite', null=True, blank=True)
+    date_event = models.CharField(max_length=300, null=True, blank=True)
     date_mod = models.DateTimeField(
         'date de derniere modification',
         auto_now_add=True)
 
     class Meta:
         ordering = ('-date_pub',)
+        abstract = True
 
     def __unicode__(self):
         return self.titre
 
+
+class Communication(Framonde):
     def get_absolute_url(self):
         return "/appels-communications/%s/" % self.slug
 
 
-class Contribution(models.Model):
-    region = models.CharField(
-        max_length=1,
-        null=False,
-        default='3',
-        blank=False,
-        choices=(
-            ('1',
-             'Afrique Centrale et des Grands-Lacs'),
-            ('2',
-             'Afrique de l\'ouest'),
-            ('3',
-             'Amériques'),
-            ('4',
-             'Asie-Pacifique'),
-            ('3',
-             'Caraïbe'),
-            ('4',
-             'Europe centrale et orientale'),
-            ('3',
-             'Moyen-Orient'),
-            ('4',
-             'Océan Indien'),
-            ('3',
-             'Maghreb'),
-            ('4',
-             'Europe de l\'Ouest')))
-    status = models.CharField(
-        max_length=1,
-        null=False,
-        default='3',
-        blank=False,
-        choices=(
-            ('1',
-             'En cours de redaction'),
-            ('2',
-             'Propose a la publication'),
-            ('3',
-             'Publie en Ligne'),
-            ('4',
-             'A supprimer')))
-    titre = models.CharField(max_length=200)
-    sous_titre = models.CharField(max_length=300, null=True, blank=True,)
-    lieu = models.CharField(max_length=300)
-    slug = models.SlugField(unique=True)
-    texte = models.TextField()
-    image = models.ImageField(null=True, blank=True, upload_to='contribution')
-    date_pub = models.DateField('date de publication')
-    date_limite = models.DateField('date limite')
-    date_event = models.DateField('date de l\'événement')
-    date_mod = models.DateTimeField(
-        'date de derniere modification',
-        auto_now_add=True)
-
-    class Meta:
-        ordering = ('-date_pub',)
-
-    def __unicode__(self):
-        return self.titre
-
+class Contribution(Framonde):
     def get_absolute_url(self):
         return "/appels-contributions/%s/" % self.slug
 
 
-class Offre(models.Model):
-    region = models.CharField(
-        max_length=1,
-        null=False,
-        default='3',
-        blank=False,
-        choices=(
-            ('1',
-             'Afrique Centrale et des Grands-Lacs'),
-            ('2',
-             'Afrique de l\'ouest'),
-            ('3',
-             'Amériques'),
-            ('4',
-             'Asie-Pacifique'),
-            ('3',
-             'Caraïbe'),
-            ('4',
-             'Europe centrale et orientale'),
-            ('3',
-             'Moyen-Orient'),
-            ('4',
-             'Océan Indien'),
-            ('3',
-             'Maghreb'),
-            ('4',
-             'Europe de l\'Ouest')))
-    status = models.CharField(
-        max_length=1,
-        null=False,
-        default='3',
-        blank=False,
-        choices=(
-            ('1',
-             'En cours de redaction'),
-            ('2',
-             'Propose a la publication'),
-            ('3',
-             'Publie en Ligne'),
-            ('4',
-             'A supprimer')))
-    titre = models.CharField(max_length=200)
-    sous_titre = models.CharField(max_length=300, null=True, blank=True,)
-    lieu = models.CharField(max_length=300)
-    slug = models.SlugField(unique=True)
-    texte = models.TextField()
-    image = models.ImageField(null=True, blank=True, upload_to='offres')
-    date_pub = models.DateField('date de publication')
-    date_limite = models.DateField('date limite', blank=True, upload_to='offres')
-    date_event = models.DateField('date de l\'événement')
-    date_mod = models.DateTimeField(
-        'date de derniere modification',
-        auto_now_add=True)
-
-    class Meta:
-        ordering = ('-date_pub',)
-
-    def __unicode__(self):
-        return self.titre
-
+class Offre(Framonde):
     def get_absolute_url(self):
         return "/appels-offres/%s/" % self.slug
 
@@ -212,7 +101,7 @@ class Archive(models.Model):
              'A supprimer')))
     numero = models.IntegerField(null=False, unique=True)
     titre = models.CharField(max_length=200)
-    texte = models.TextField()
+    texte = HTMLField()
     fichier = models.FileField(upload_to='archives')
     date_pub = models.DateField('date de publication')
     date_mod = models.DateTimeField(
index c05c4f0..32cc34b 100644 (file)
@@ -6,68 +6,73 @@ from haystack import indexes
 
 from .models import Communication, Contribution, Offre
 
+REGIONS = {
+    '0': 'Internationale',
+    '1': 'Afrique Centrale et des Grands-Lacs',
+    '2': 'Afrique de l\'ouest',
+    '3': 'Amériques',
+    '4': 'Asie-Pacifique',
+    '5': 'Caraïbe',
+    '6': 'Europe centrale et orientale',
+    '7': 'Moyen-Orient',
+    '8': 'Océan Indien',
+    '9': 'Maghreb',
+    '10': 'Europe de l\'Ouest'
+}
+
 
 class AufIndex(indexes.SearchIndex):
-    text = indexes.NgramField(model_attr='texte', document=True, use_template=True)
-    title = indexes.NgramField(model_attr='titre')
-    annee = indexes.FacetField(stored=True, null=True)
-    regions = indexes.FacetMultiValueField(null=True, stored=True)
-    section = indexes.FacetField(stored=True, null=True)
-    date_pub = indexes.DateField(model_attr='date_pub', null=True)
+    text = indexes.NgramField(document=True, use_template=True)
+    title = indexes.NgramField(model_attr='titre', stored=True)
+    region = indexes.FacetField(stored=True)
+    section = indexes.FacetField(stored=True)
+#    annee_evenement = indexes.FacetField(stored=True)
+    annee_limite = indexes.FacetField(stored=True)
+    date_pub = indexes.DateField(model_attr='date_pub')
 
-#    def prepare_regions(self, obj):
-#        try:
-#            return [b.nom for b in obj.bureau.all()]
-#        except ObjectDoesNotExist as e:
-#            print(e)
-#            return [u'Non précisé']
+    def prepare_region(self, obj):
+        return REGIONS[obj.region]
 
-    def prepare_annee(self, obj):
-        if obj.date_pub is not None:
-            return str(obj.date_pub.year)
+#    def prepare_annee_evenement(self, obj):
+#        if obj.date_event is not None:
+#            return str(obj.date_event.year)
 
+    def prepare_annee_limite(self, obj):
+        if obj.date_limite is not None:
+            return str(obj.date_limite.year)
 
-class CommunicationIndex(AufIndex, indexes.Indexable):
 
-    def get_model(self):
-        return Communication
+class CommunicationIndex(AufIndex, indexes.Indexable):
 
     def prepare_section(self, obj):
         return u"Communication"
 
-    def prepare_date_pub(self, obj):
-        return obj.date_pub.date()
+    def get_model(self):
+        return Communication
 
     def index_queryset(self, using=None):
-        """Used when the entire index for model is updated."""
-        return Communication.objects.filter(status=3)
+        return Communication.objects.filter(status=3).order_by('-date_pub')
 
 
 class ContributionIndex(AufIndex, indexes.Indexable):
 
-    def get_model(self):
-        return Contribution
-
     def prepare_section(self, obj):
         return u"Contribution"
 
-    def prepare_date_pub(self, obj):
-        return obj.date_pub.date()
+    def get_model(self):
+        return Contribution
 
     def index_queryset(self, using=None):
-        return Contribution.objects.filter(status=3)
+        return Contribution.objects.filter(status=3).order_by('-date_pub')
 
 
 class OffreIndex(AufIndex, indexes.Indexable):
 
-    def get_model(self):
-        return Offre
-
     def prepare_section(self, obj):
         return u"Offre"
 
-    def prepare_date_pub(self, obj):
-        return obj.date_pub.date()
+    def get_model(self):
+        return Offre
 
     def index_queryset(self, using=None):
-        return Offre.objects.filter(status=3)
+        return Offre.objects.filter(status=3).order_by('-date_pub')
diff --git a/project/framonde/static/img/derniernumero.png b/project/framonde/static/img/derniernumero.png
new file mode 100644 (file)
index 0000000..38d69ee
Binary files /dev/null and b/project/framonde/static/img/derniernumero.png differ
index a2f3cb9..ac05c6e 100755 (executable)
@@ -201,3 +201,27 @@ margin-left: 20px;
 text-decoration: none;
 color: #3a3a3a;
 }
+
+.col_8 form {
+    padding-left:20px;
+    padding-bottom:10px;
+    border:1px solid silver;
+    
+}
+
+input#id_courriel, input#id_sujet, textarea#id_message {
+width: 430px;
+display: table;
+}
+
+form input[type="submit"] {
+    color:white;
+    text-decoration:none;
+    text-shadow:none;
+}
+
+form input[type="submit"]:hover {
+    color:black;
+    text-decoration:none;
+    text-shadow:none;
+}
diff --git a/project/framonde/templatetags/__init__.py b/project/framonde/templatetags/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/project/framonde/templatetags/auf.py b/project/framonde/templatetags/auf.py
new file mode 100644 (file)
index 0000000..11b26d4
--- /dev/null
@@ -0,0 +1,48 @@
+# encoding: utf-8
+
+from django.utils.http import urlunquote, urlquote
+from django.utils.encoding import smart_text
+from django import template
+
+register = template.Library()
+
+
+@register.simple_tag(takes_context=True, name="show_facet")
+def do_show_facet(context, facet_name):
+    html = ""
+    if not 'fields' in context['facets']:
+        facets = []
+    else:
+        facets = context['facets']['fields'][facet_name]
+    selected_facets = context['form']['selected_facets'].value()
+    if not selected_facets:
+        selected_facets = []
+
+    path = context['request'].get_full_path()
+
+    for f in facets:
+        long_facet_name = "__".join([facet_name, urlquote(f[0])])
+
+        if urlunquote(long_facet_name) in selected_facets:
+            html += "<dd><a href='%s'><input onclick='window.location=\"%s\"; return true;'type='checkbox' checked='checked'/> %s</a> (%s)</dd>" % (path.replace(
+                "&selected_facets=" + long_facet_name,
+                "").replace(
+                "?selected_facets=" + long_facet_name,
+                "?"),
+                path.replace(
+                "&selected_facets=" + long_facet_name,
+                "").replace(
+                "?selected_facets=" + long_facet_name,
+                "?"),
+                smart_text(
+                    f[0]),
+                f[1])
+        else:
+            if path.endswith('/'):
+                html += "<dd><a href='%s?selected_facets=%s'><input onclick='window.location=\"%s?selected_facets=%s\"; return true;'type='checkbox' />%s</a> (%s)</dd>" % (
+                    path, long_facet_name, path, long_facet_name, smart_text(f[0]), f[1])
+            else:
+                html += "<dd><a href='%s&selected_facets=%s'><input onclick='window.location=\"%s&selected_facets=%s\"; return true;'type='checkbox' /> %s</a> (%s)</dd>" % (
+                    path, long_facet_name, path, long_facet_name, smart_text(f[0]), f[1])
+    return html
+
index 2471ef2..87cc3b7 100644 (file)
@@ -1,9 +1,9 @@
 # -*- encoding: utf-8 -*-
 from django.conf import settings
-from django.conf.urls.defaults import patterns, url
+from django.conf.urls import patterns, url
 from django.views.generic import TemplateView
 
-urlpatterns = patterns('framonde.views',
+urlpatterns = patterns('project.framonde.views',
     (r'^$', 'accueil'),
     url(r'^appels-communications/$', 'Comm'),
     url(r'^appels-contributions/$', 'Contri'),
index d5e7f57..d194779 100755 (executable)
@@ -14,10 +14,10 @@ from .models import *
 
 def accueil(request):
     comm_list = Communication.objects.filter(
-        status=3).order_by('-date_pub')[:2]
+        status=3).order_by('date_limite')[:2]
     contri_list = Contribution.objects.filter(
-        status=3).order_by('-date_pub')[:2]
-    offre_list = Offre.objects.filter(status=3).order_by('-date_pub')[:2]
+        status=3).order_by('date_limite')[:2]
+    offre_list = Offre.objects.filter(status=3).order_by('date_limite')[:2]
     return render_to_response('accueil.html', {'comm_list': comm_list, 'contri_list': contri_list,
                                                'offre_list': offre_list, 'page_title': 'Accueil'}, context_instance=RequestContext(request))
 
@@ -25,19 +25,19 @@ def accueil(request):
 
 
 def Comm(request):
-    comm_list = Communication.objects.filter(status=3).order_by('-date_pub')
+    comm_list = Communication.objects.filter(status=3).order_by('date_limite')
     return render_to_response('pageCom.html', {
                               'comm_list': comm_list, 'page_title': 'Appel à communication'}, context_instance=RequestContext(request))
 
 
 def Contri(request):
-    contri_list = Contribution.objects.filter(status=3).order_by('-date_pub')
+    contri_list = Contribution.objects.filter(status=3).order_by('date_limite')
     return render_to_response('pageContri.html', {
                               'contri_list': contri_list, 'page_title': 'Appel à contribution'}, context_instance=RequestContext(request))
 
 
 def Offres(request):
-    offre_list = Offre.objects.filter(status=3).order_by('-date_pub')
+    offre_list = Offre.objects.filter(status=3).order_by('date_limite')
     return render_to_response('pageAppel.html', {
                               'offre_list': offre_list, 'page_title': 'Appel d\'offres'}, context_instance=RequestContext(request))