Tinymce
authormarc.nachin <you@example.commarc.nachin@auf.org>
Fri, 15 Feb 2013 17:32:27 +0000 (18:32 +0100)
committermarc.nachin <you@example.commarc.nachin@auf.org>
Fri, 15 Feb 2013 17:32:27 +0000 (18:32 +0100)
18 files changed:
buildout.cfg
project/article/admin.py
project/newsletter/__init__.py [new file with mode: 0644]
project/newsletter/admin.py [new file with mode: 0644]
project/newsletter/models.py [new file with mode: 0644]
project/newsletter/templates/newsletter/confirmation.html [new file with mode: 0644]
project/newsletter/templates/newsletter/desconfirmation.html [new file with mode: 0644]
project/newsletter/templates/newsletter/desinscription.html [new file with mode: 0644]
project/newsletter/templates/newsletter/erreur-desinscription.html [new file with mode: 0644]
project/newsletter/templates/newsletter/erreur-inscription.html [new file with mode: 0644]
project/newsletter/tests.py [new file with mode: 0644]
project/newsletter/views.py [new file with mode: 0644]
project/settings.py
project/static/img/fichepico.gif [new file with mode: 0644]
project/templates/base.html
project/templates/newsletter/lettre.html [new file with mode: 0644]
project/urls.py
versions.cfg

index c747b77..8614710 100644 (file)
@@ -1,11 +1,10 @@
-
 [buildout]
 extends = versions.cfg
 extensions = buildout-versions
 buildout_versions_file = versions.cfg
 versions = versions
 unzip = true
-parts = django
+parts = filebrowser django
 versions = versions
 
 find-links = http://pypi.auf.org/simple/auf.recipe.django
@@ -17,6 +16,12 @@ eggs =
     django-admin-tools
     django-cms
     django-pagination
+    django-tinymce
+
+[filebrowser]
+recipe = hexagonit.recipe.download
+url=https://github.com/olarcheveque/django-filebrowser-no-grappelli/tarball/master
+strip-top-level-dir = true
 
 [django]  
 recipe = auf.recipe.django 
@@ -24,4 +29,5 @@ wsgi=true
 settings=production 
 project = project
 extra-paths = project
+    parts/filebrowser
 eggs = ${buildout:eggs}
index 3c5153d..7321e0d 100644 (file)
@@ -2,7 +2,7 @@
 from project.article.models import *
 from django.db import models
 from django.contrib import admin
-
+from tinymce.widgets import TinyMCE
 
 class ActualiteAdmin(admin.ModelAdmin):
     prepopulated_fields = {'slug': ['titre']}
@@ -10,6 +10,10 @@ class ActualiteAdmin(admin.ModelAdmin):
         ('Article', {'fields': ['status', 'date_pub', 'titre', 'slug', 'image', 'texte'], '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
@@ -28,6 +32,10 @@ class PublicationAdmin(admin.ModelAdmin):
         ('Article', {'fields': ['status', 'date_pub', 'titre', 'slug', 'image', 'texte'], '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
diff --git a/project/newsletter/__init__.py b/project/newsletter/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/project/newsletter/admin.py b/project/newsletter/admin.py
new file mode 100644 (file)
index 0000000..3dc70c7
--- /dev/null
@@ -0,0 +1,88 @@
+# coding: utf8
+from project.newsletter.models import Newsletter, Abonne
+from django.contrib import admin
+from django import forms
+from django.db import models
+from django.shortcuts import render_to_response, get_object_or_404, get_list_or_404
+from django.template import Context, RequestContext
+from django.http import HttpResponseRedirect 
+from django.shortcuts import redirect
+from django.http import HttpResponse
+from django.core.mail import send_mail
+
+class NewsletterAdmin(admin.ModelAdmin):
+
+    actions = ['envoyer_newsletter']
+    
+    class EnvoiForm(forms.Form):
+        envoi = forms.CharField(widget=forms.MultipleHiddenInput) 
+        
+    def envoyer_newsletter(self, request, queryset):
+    
+        abonnes = Abonne.objects.all()
+        form = None     
+        
+        if 'cancel' in request.POST:
+            form = self.EnvoiForm(request.POST)
+            self.message_user(request, 'BLAVLALALDADLA')
+            return
+
+        if not form:
+            self.message_user(request, 'PAS DE FORM')
+            
+        return render_to_response('admin/send_mail.html', {'newsletter': queryset, 'form': form, 'abonnes_list': abonnes, 'path':request.get_full_path()}, context_instance = RequestContext(request))
+        
+    envoyer_newsletter.short_description = "Envoyer la lettre a votre liste de diffusion"
+    
+    fieldsets = [
+        ('Informations', {'fields': ['status','numero','style','date']}),
+        ('Choix des articles', {'fields': ['actualite', 'publication'], 'classes': ['wide']}),
+        ('Liens de la colonne de gauche', {'fields': ['lien', 'lien2', 'lienFace'], 'classes': ['wide']}),
+        ('Information du footer', {'fields': ['footer', 'abonne'], 'classes': ['wide']}),
+    ]
+        
+    def show_nom(self, obj):
+      return "<strong>Lettre d'information N %s</strong>" % obj.numero
+    show_nom.allow_tags = True
+    show_nom.short_description = 'Titre'
+    
+    def preview(self, obj):
+      return "<a href='/lettre-information/%s' target='_blank'><img src='/static/img/html.png' height='16'> Visualiser</a>" % obj.id
+    preview.allow_tags = True
+    preview.short_description = 'Visualiser'
+        
+    list_display = ('show_nom','status','date','preview')
+    list_display_links = ('status', 'show_nom')
+    search_fields = ['numero']
+    
+
+class AbonneAdmin(admin.ModelAdmin):
+    
+    
+    actions = ['changestat']
+
+    def changestat(self, request, queryset):
+        valide = queryset.update(valide=1)
+        if valide == 1:
+            message_bit = "1 abonné a été validé"
+        else:
+            message_bit = "%s abonnés ont été validés" % valide
+        self.message_user(request, "%s avec succès" % message_bit)
+    changestat.short_description = "Valider le status"
+        
+    def show_nom(self, obj):
+      return "<strong>Lettre d'information N %s</strong>" % obj.numero
+    show_nom.allow_tags = True
+    show_nom.short_description = 'Titre'
+    
+    def preview(self, obj):
+      return "<strong>Visualiser</strong>"
+    preview.allow_tags = True
+    preview.short_description = 'Visualiser'
+        
+    list_display = ('adresse','date', 'valide')
+    search_fields = ['adresse']
+    
+
+admin.site.register(Newsletter, NewsletterAdmin)
+admin.site.register(Abonne, AbonneAdmin)
\ No newline at end of file
diff --git a/project/newsletter/models.py b/project/newsletter/models.py
new file mode 100644 (file)
index 0000000..566f3ab
--- /dev/null
@@ -0,0 +1,48 @@
+# coding: utf8
+from django.db import models
+from project.article.models import *
+from django import forms
+
+# Create your models here.
+
+class Newsletter(models.Model):
+    status = models.CharField(max_length=1, default='3', null=False, blank=False, choices=(('1', 'En cours de redaction'), ('2', 'Propose a la publication'), ('3', 'Publie en Ligne'), ('4', 'A supprimer')))
+    numero = models.IntegerField(max_length=11,default=0)
+    date = models.DateField()
+    style = models.CharField(max_length=1, default='1', null=False, blank=False, choices=(('1', 'Blanc'), ('2', 'Vert')))
+    publication = models.ManyToManyField(Publication, related_name='+', verbose_name='Publication', blank=True, null=True)
+    actualite = models.ManyToManyField(Actualite, verbose_name='Actualités')
+    lien = models.EmailField(max_length=200, default='webmestre@ifgu.org')
+    lien2 = models.URLField(max_length=250, default='http://www.ifgu.org')
+    lienFace = models.URLField(max_length=250, default='http://www.facebook.com/aufinternational')
+    abonne = models.IntegerField(max_length=11,default='1000')
+    footer = models.TextField(default='Lettre electronique est une publication realisee par l\'Institut de la Francophonie pour la Gouvernance universitaire.')
+    
+class Abonne(models.Model):
+    adresse = models.EmailField("", max_length=75)
+    date = models.DateField(auto_now_add=True)
+    valide = models.BooleanField()
+    
+class AbonneForm(forms.ModelForm):
+    class Meta:
+        model = Abonne
+        fields = ('adresse',)
+        
+    def clean(self):
+        cleaned_data = self.cleaned_data
+
+        if Abonne.objects.filter(adresse=cleaned_data.get("adresse")):
+            raise forms.ValidationError("Vous êtes déja inscrit à la lettre d\'information")
+
+        return cleaned_data
+        
+class DesinscireForm(forms.Form):
+    adresse = forms.EmailField(label="", max_length=75)
+    
+    def clean(self):
+        cleaned_data = self.cleaned_data
+
+        if not Abonne.objects.filter(adresse=cleaned_data.get("adresse")):
+            raise forms.ValidationError("Vous êtes pas inscrit à la lettre d\'information")
+
+        return cleaned_data
\ No newline at end of file
diff --git a/project/newsletter/templates/newsletter/confirmation.html b/project/newsletter/templates/newsletter/confirmation.html
new file mode 100644 (file)
index 0000000..1bf6f93
--- /dev/null
@@ -0,0 +1,20 @@
+{% extends "base.html" %}
+{% load i18n cms_tags %}
+
+{% block Contenu %}
+<div class="text">
+    <h1>Inscription à la lettre d'information</h1>
+    <p>Votre demande d'inscription a été traitée. Vous recevrez un courriel de confirmation sous peu.</p>
+    <p>Vous pouvez découvrir les dernières lettres éléctroniques:</p>
+    <div id="tabemploye">
+    <table>
+    <tr style="background:#2E3A45 !important; font-weight: bold;"><td style="color: #fff !important;">Numéro</td><td style="color: #fff !important;">Date</td><td style="color: #fff !important;">Visualiser</td></tr>
+    {% if list_news %}
+        {% for news in list_news %}
+            <tr><td>Lettre éléctronqiue Numéro {{news.numero}}</td><td>{{news.date}}</td><td align="center"><a href="/lettre-information/{{news.id}}" target="_blank"><img src="{{STATIC_URL}}img/fichepico.gif" style="margin:0; padding:0; border:0; background:none" /></a></td></tr>
+        {% endfor %}
+    {% endif %}
+    </table>
+    </div>
+</div>
+{% endblock %}
diff --git a/project/newsletter/templates/newsletter/desconfirmation.html b/project/newsletter/templates/newsletter/desconfirmation.html
new file mode 100644 (file)
index 0000000..bc96055
--- /dev/null
@@ -0,0 +1,9 @@
+{% extends "base.html" %}
+{% load i18n cms_tags %}
+
+{% block Contenu %}
+<div class="text">
+    <h1>Désinscription à la lettre d'information</h1>
+    <p>Votre demande de désinscription a été traitée.<br /> Vous recevrez un courriel de confirmation sous peu.</p>
+</div>
+{% endblock %}
diff --git a/project/newsletter/templates/newsletter/desinscription.html b/project/newsletter/templates/newsletter/desinscription.html
new file mode 100644 (file)
index 0000000..37ab37a
--- /dev/null
@@ -0,0 +1,14 @@
+{% extends "base.html" %}
+{% load i18n cms_tags %}
+
+{% block Contenu %}
+
+<div class="text">
+    <h1>Désinscription à la lettre d'information éléctronique</h1>
+    <p>Pour vous désinscrire voud devez renseigner votre adresse éléctronique:</p>
+    <form method='post' name="news" action='/lettre-information-desinscription-confirme/'>{% csrf_token %}
+        {{ desabonne_form }}
+        <input type='submit' class="BtInscription" Value='Désinscription'>
+    </form>
+</div>
+{% endblock %}
diff --git a/project/newsletter/templates/newsletter/erreur-desinscription.html b/project/newsletter/templates/newsletter/erreur-desinscription.html
new file mode 100644 (file)
index 0000000..90be2b7
--- /dev/null
@@ -0,0 +1,15 @@
+{% extends "base.html" %}
+{% load i18n cms_tags %}
+
+{% block Contenu %}
+
+<div class="text">
+    <h1>Erreur lors de la désinscription</h1>
+    <p>L'erreur suivante n'a pas permise la désinscription à la lettre éléctronique de l'Agence universitaire de la Francophonie:</p>
+    <form method='post' name="news" action='/lettre-information-desinscription-confirme/'>{% csrf_token %}
+        {{ desabonne_form }}
+        <input type='submit' class="BtInscription" Value='Désinscription'>
+    </form>
+</div>
+
+{% endblock %}
diff --git a/project/newsletter/templates/newsletter/erreur-inscription.html b/project/newsletter/templates/newsletter/erreur-inscription.html
new file mode 100644 (file)
index 0000000..7508595
--- /dev/null
@@ -0,0 +1,15 @@
+{% extends "base.html" %}
+{% load i18n cms_tags %}
+
+{% block Contenu %}
+
+<div class="text">
+    <h1>Erreur lors de l'inscription</h1>
+    <p>L'erreur suivant n'a pas permis l'inscription à  la lettre éléctronique de l'Agence universitaire de la Francophonie:</p>
+    <form method='post' name="news" action='/lettre-information/'>{% csrf_token %}
+        {{ abonne_form }}
+        <input type='submit' class="BtInscription" Value='Inscription'>
+    </form>
+</div>
+
+{% endblock %}
diff --git a/project/newsletter/tests.py b/project/newsletter/tests.py
new file mode 100644 (file)
index 0000000..2247054
--- /dev/null
@@ -0,0 +1,23 @@
+"""
+This file demonstrates two different styles of tests (one doctest and one
+unittest). These will both pass when you run "manage.py test".
+
+Replace these with more appropriate tests for your application.
+"""
+
+from django.test import TestCase
+
+class SimpleTest(TestCase):
+    def test_basic_addition(self):
+        """
+        Tests that 1 + 1 always equals 2.
+        """
+        self.failUnlessEqual(1 + 1, 2)
+
+__test__ = {"doctest": """
+Another way to test that 1 + 1 is equal to 2.
+
+>>> 1 + 1 == 2
+True
+"""}
+
diff --git a/project/newsletter/views.py b/project/newsletter/views.py
new file mode 100644 (file)
index 0000000..4f761b8
--- /dev/null
@@ -0,0 +1,65 @@
+# coding: utf8
+import datetime
+
+from django.core.mail import EmailMultiAlternatives
+from django.core.paginator import Paginator, EmptyPage, InvalidPage
+from django.conf import settings
+from django.shortcuts import render_to_response, get_object_or_404, get_list_or_404
+from django.template import Context, RequestContext
+from django.shortcuts import redirect
+from django.http import HttpResponse
+from django.http import HttpResponseRedirect
+
+from newsletter.models import Newsletter, Abonne, AbonneForm, DesinscireForm
+
+from django.core.mail import send_mail
+
+
+def newsletter(request, id):
+    newsletter = Newsletter.objects.get(id=id)
+    list_publi = newsletter.publication.all()[:6]
+    list_actualite = newsletter.actualite.all()[:6]
+    return render_to_response('newsletter/lettre.html', {'newsletter': newsletter, 'list_actualite': list_actualite, 'list_publi': list_publi}, context_instance = RequestContext(request))
+
+    
+def newsletter_inscription(request):
+    if request.method == 'POST':                                                                                                                                                  
+        form = AbonneForm(request.POST)                                                                                                                                    
+        if form.is_valid():
+            a = Abonne(adresse = form.cleaned_data['adresse'])
+            a.save()
+            text_content = 'Votre abonnement à la lettre éléctronique de l\'AUF a été validé.'
+            html_content = '<p>Bonjour,</p><p>Votre inscription à la lettre éléctronique de l\'AUF a bien été validée. Vous recevrez prochainement les dernières informations de l\'AUF dans votre boite de courriers éléctroniques.</p><p>Merci</p>' 
+            msg = EmailMultiAlternatives('Inscription à la lettre éléctronique de l\'AUF', text_content, 'ne-pas-repondre@auf.org', [form.cleaned_data['adresse']])
+            msg.attach_alternative(html_content, "text/html")
+            msg.send()
+            return HttpResponseRedirect('/lettre-information-confirmation/')                                                                                                                                            
+    else:
+        form = AbonneForm()                                                                                                                                                                       
+
+    return render_to_response('newsletter/erreur-inscription.html', {'page_title': 'Inscription','abonne_form': form}, context_instance = RequestContext(request))
+    
+def newsletter_confirmation(request):
+    list_news = Newsletter.objects.filter(status='3').order_by('-date')[:20] 
+    return render_to_response('newsletter/confirmation.html', {'page_title': 'Confirmation inscription', 'list_news': list_news}, context_instance = RequestContext(request))
+
+#desinscription
+
+def newsletter_desincription(request):
+    return render_to_response('newsletter/desinscription.html', {'page_title': 'Désinscription','desabonne_form': DesinscireForm()}, context_instance = RequestContext(request))
+    
+def newsletter_desincription_confirme(request):
+    if request.method == 'POST':
+        form = DesinscireForm(request.POST)
+        if form.is_valid():
+            a = Abonne.objects.get(adresse=form.cleaned_data['adresse']).delete()
+            send_mail('Désinscription à la lettre éléctronique de l\'AUF', 'Votre abonnement à la lettre éléctronique de l\'AUF a été résilié.', 'webmestre@auf.org',[form.cleaned_data['adresse']])
+            return HttpResponseRedirect('/lettre-information-desconfirmation/')
+    else:
+        form = DesinscireForm()
+        
+    return render_to_response('newsletter/erreur-desinscription.html', {'page_title': 'Désinscription','desabonne_form': form}, context_instance = RequestContext(request))
+    
+    
+def newsletter_desconfirmation(request):
+    return render_to_response('newsletter/desconfirmation.html', {'page_title': 'Confirmation désinscription'}, context_instance = RequestContext(request))
\ No newline at end of file
index 7f3865c..74f1844 100644 (file)
@@ -6,6 +6,12 @@ from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as \
         DEFAULT_TEMPLATE_CONTEXT_PROCESSORS
 
 # Rapports d'erreurs
+# Host for sending e-mail.
+EMAIL_HOST = 'smtp-sortant.ca.auf.org'
+EMAIL_PORT = 587
+EMAIL_HOST_USER = 'marc.nachin@auf.org'
+EMAIL_HOST_PASSWORD = 'coucou26'
+EMAIL_USE_TLS = True
 SERVER_EMAIL = 'ne-pas-repondre@auf.org'
 EMAIL_SUBJECT_PREFIX = '[IFGU - %s] ' % socket.gethostname()
 ADMINS = (
@@ -37,6 +43,7 @@ STATICFILES_DIRS = (
 ROOT_URLCONF = 'project.urls'
 
 INSTALLED_APPS = (
+    'filebrowser',
     'admin_tools',
     'admin_tools.theming',
     'admin_tools.menu',
@@ -51,6 +58,7 @@ INSTALLED_APPS = (
     'south',
     'diaporama',
     'article',
+    'newsletter',
 
     # django-cms
     'cms',
@@ -59,6 +67,7 @@ INSTALLED_APPS = (
     'south',
     'sekizai',
     'pagination',
+    'tinymce',
 
     # django-cms plugins
     'cms.plugins.text',
@@ -101,3 +110,17 @@ CMS_TEMPLATES = (
 )
 
 from conf import *
+
+TINYMCE_DEFAULT_CONFIG = {
+    'theme': "advanced",
+    'theme_advanced_buttons1' : "formatselect,|,bold,italic,underline,|,bullist,numlist,|,undo,redo,|,link,unlink,image,|,backcolor,|removeformat,visualaid,code,",
+    'theme_advanced_buttons2' : "",
+    'theme_advanced_buttons3' : "",
+    'theme_advanced_statusbar_location' : "bottom",
+    'theme_advanced_toolbar_align' : "left",
+    'width' : "800",
+    'height' : "200",
+    'theme_advanced_resizing' : "true",
+    'custom_undo_redo_levels': 10,
+    'theme_advanced_toolbar_location' : 'top',
+}
diff --git a/project/static/img/fichepico.gif b/project/static/img/fichepico.gif
new file mode 100644 (file)
index 0000000..4be84b1
Binary files /dev/null and b/project/static/img/fichepico.gif differ
index b92de9b..88e8835 100644 (file)
                <div id="header_content">
                <div id="logo"><img src="{{ STATIC_URL }}img/logo.png"></div>
             <div id="header_droit">
-               <p><a href="{% page_url "accueil" %}">Accueil</a>-<a href="{% page_url "partenaires" %}">Partenaires</a>-<a href="#">Flux RSS</a>-<a href="{% page_url "plan-du-site" %}" style="margin-right:0">Plan du site</a></p>
+               <p><a href="{% page_url "accueil" %}">Accueil</a>-<a href="/mentions-legales/">Mentions légales</a>-<a href="/flux/actualite/">Flux RSS</a>-<a href="{% page_url "plan-du-site" %}" style="margin-right:0">Plan du site</a></p>
                 <div id="search">
                         <form action="/recherche/" method="get">
                         <input type="text" class="searchbox" name="s" value="Rechercher..." onFocus="value=''" />
                         <input type="submit" class="searchbox_submit" value="" />
                         </form>
                        </div>
-                <div id="rss"><a href="flux/actualite/"><img src="{{ STATIC_URL }}img/rss.png"></a></div>
+                <div id="rss"><a href="/flux/actualite/"><img src="{{ STATIC_URL }}img/rss.png"></a></div>
             </div>
         </div>
         
         <div class="boiteAutre">
                 <p class="lettre">Inscrivez-vous à notre Bulletin d’information</p>
              <div id="search2">
-                        <form action="/recherche/" method="get">
+                        <form action="/lettre-information/" method="get">
                         <input type="text" class="searchbox2" name="s" value="Votre adresse éléctronique..." onFocus="value=''" />
                         <input type="submit" class="searchbox_submit2" value="" />
                         </form>
  <footer>
  
        <div id="footer_content">
-               <p><a href="#">Accueil</a><span>-</span><a href="{% page_url "partenaires" %}">Partenaires</a><span>-</span><a href="#">Flux RSS</a><span>-</span><a href="{% page_url "partenaires" %}">Plan du site</a></p>
-            <p>© 2010 Institut Panafricain de Gouvernance Universitaire</p>
+               <p><a href="#">Accueil</a><span>-</span><a href="/mentions-legales/">Mentions légales</a><span>-</span><a href="/flux/actualite/">Flux RSS</a><span>-</span><a href="{% page_url "plan-du-site" %}">Plan du site</a></p>
+            <p>© 2013, Institut de la Francophonie pour la Gouvernance universitaire</p>
     </div>
        
  </footer>   
diff --git a/project/templates/newsletter/lettre.html b/project/templates/newsletter/lettre.html
new file mode 100644 (file)
index 0000000..c8a9c9a
--- /dev/null
@@ -0,0 +1,257 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>IFGU - Lettre d'information N°{{ newsletter.numero}} - {{ newsletter.date }}</title>
+<!--[if gte mso 9]>
+<style type="text/css">
+.body{background: #353732 url('http://www.auf.org/static/lettre/images/body-bg.jpg');}      
+.case {background:none;}
+</style>
+<![endif]-->
+</head>
+
+<body marginheight="0" class="body" topmargin="0" marginwidth="0" style="padding: 0; font-family: Arial, Helvetica, sans-serif; margin: 0; background: #fefefe url('http://www.auf.org/static/lettre/images/body-bg.jpg') repeat;" leftmargin="0">
+
+{% if newsletter.style == '1' %}
+<style>
+h1 {color: #2a80b3 !important; font-size: 26px; text-shadow: 1px 1px 1px #fff; /*font-family: Georgia, 'Times New Roman', Times, serif;*/ margin: 12px 0px 4px 0px; padding: 0;}
+h2 {padding: 0; font-size: 21px; color: #6f6f6f !important; margin: 17px 20px 25px 20px; text-shadow: 1px 1px 1px #fff}
+h3 {font-size: 13px; font-family: Arial, Helvetica, sans-serif; color: #6f6f6f !important; margin: 0 0 10px; padding: 0; text-shadow: 1px 1px 1px #fff; text-transform: uppercase}
+h4 {font-size: 16px; font-family: Arial, Helvetica, sans-serif; color: #449BCF !important; margin: 0 0 10px; padding: 0; text-shadow: 1px 1px 1px #fff;}
+h5 {font-size: 16px; font-family: Arial, Helvetica, sans-serif; color: #2a80b3 !important; margin: 0px; padding: 0; text-shadow: 1px 1px 1px #fff;}
+h6 {font-size: 15px; font-weight: 100; font-family: Arial, Helvetica, sans-serif; color: #6f6f6f !important; margin: 0 0 6px; line-height: 18px; padding: 0; font-family: Georgia, 'Times New Roman', Times, serif; text-shadow: 1px 1px 1px #fff;}
+h6 a{color: #449bcf; text-decoration: none}
+a{color: #2A80B3;}
+.content p {font-size: 12px; line-height: 18px; color: #6F6F6F; font-family: Arial, Helvetica, sans-serif; padding: 0; margin: 0px; text-shadow: 1px 1px 1px #fff;}
+.content ul, .content ol{margin:0 0 0 30px; padding:0;}
+.content ul li, .content ol li{font-size: 13px; color: #686f64; font-family: Arial, Helvetica, sans-serif; padding: 0; margin: 0 0 10px 0;}
+.content a:hover {color: #67a7cd !important;}
+.button a {color: #fff !important; text-decoration: none !important;}
+.button a:hover {color: #eee !important; text-decoration: none !important;}
+.footer p {color: #6f6f6f; font-size: 11px; font-family: Arial, Helvetica, sans-serif; margin: 0; padding: 0; }
+.link a{ text-decoration:none; color: #2a80b3; font-size: 12px; line-height: 14px; font-weight: bold; margin-top: 4px; text-shadow: 1px 1px 1px #fff;}
+</style>
+{% endif %}
+
+{% if newsletter.style == '2' %}
+<style>
+h1 {color: #547159 !important; font-size: 26px; text-shadow: 1px 1px 1px #fff; /*font-family: Georgia, 'Times New Roman', Times, serif;*/ margin: 0; padding: 0;}
+h2 {padding: 0; font-size: 26px; color: #fff !important; margin: 16px 20px 25px 20px; text-shadow: 1px 1px 1px #888}
+h3 {font-size: 13px; font-family: Arial, Helvetica, sans-serif; color: #fff !important; margin: 0 0 10px; padding: 0; text-shadow: 1px 1px 1px #888; text-transform: uppercase}
+h4 {font-size: 16px; font-family: Arial, Helvetica, sans-serif; color: #99a874 !important; margin: 0 0 10px; padding: 0; text-shadow: 1px 1px 1px #fff;}
+h5 {font-size: 16px; font-family: Arial, Helvetica, sans-serif; color: #516d56 !important; margin: 0px; padding: 0; text-shadow: 1px 1px 1px #fff;}
+h6 {font-size: 15px; font-weight: 100; font-family: Arial, Helvetica, sans-serif; color: #9faf78 !important; margin: 0 0 6px; line-height: 18px; padding: 0; font-family: Georgia, 'Times New Roman', Times, serif; text-shadow: 1px 1px 1px #fff;}
+h6 a{color: #99a874; text-decoration: none}
+a{color: #dee7c6;}
+.content p {font-size: 12px; line-height: 18px; color: #686f64; font-family: Arial, Helvetica, sans-serif; padding: 0; margin: 0px; text-shadow: 1px 1px 1px #fff;}
+.content ul, .content ol{margin:0 0 0 30px; padding:0;}
+.content ul li, .content ol li{font-size: 13px; color: #686f64; font-family: Arial, Helvetica, sans-serif; padding: 0; margin: 0 0 10px 0;}
+.content a:hover {color: #9faf78 !important;}
+.button a {color: #7d8a5a !important; text-decoration: none !important;}
+.button a:hover {color: #9faf78 !important; text-decoration: none !important;}
+.footer p {color: #fff; font-size: 11px; font-family: Arial, Helvetica, sans-serif; margin: 0; padding: 0; }
+.link a{ text-decoration:none; color: #7d8a5a; font-size: 12px; line-height: 14px; font-weight: bold; margin-top: 4px; text-shadow: 1px 1px 1px #fff;}
+</style>
+{% endif %}
+
+<!--100% body table-->
+<table width="100%" border="0" cellspacing="0" cellpadding="0">
+  <tr>
+    <td class="case" background="http://www.auf.org/static/lettre/images/body-bg.jpg" style="background: #fefefe url(http://www.auf.org/static/lettre/images/body-bg.jpg) repeat;"><!--[if gte mso 9]>
+<td style="background: none;">
+<![endif]--> 
+
+      
+      <table id="top" width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
+        <tr>
+          <td><table width="680" border="0" align="center" cellpadding="0" cellspacing="0">
+              <tr>
+                <td height="40" style="background-image: http://www.auf.org/static/lettre/images/box-bg{{newsletter.style}}.jpg); background-repeat: repeat;" background="http://www.auf.org/static/lettre/images/box-bg{{newsletter.style}}.jpg" valign="middle" align="center"><p style="font-size: 11px;  color: {% if newsletter.style == '2' %}#fff{% endif %}{% if newsletter.style == '1' %}#6F6F6F{% endif %}; font-family: Arial, Helvetica, sans-serif; margin: 0; padding: 0;">Problème de lecture? Elle est également disponible ici : <a href="http://ifgu.auf.org/lettre-information/{{ newsletter.id}}/">http://ifgu.auf.org/lettre-information/{{ newsletter.id}}/</a></p></td>
+              </tr>
+            </table></td>
+        </tr>
+      </table>
+
+      <!--masthead-->
+      
+      <table bgcolor="#fefefe" width="680" border="0" align="center" cellpadding="0" cellspacing="0" height="127"  style="border-bottom: 1px solid {% if newsletter.style == '1' %}#f3f3f3{% endif %}{% if newsletter.style == '2' %}#fff{% endif %}; height: 127px;">
+        <tr>
+          <td valign="top" border="0" width="212"  height="127" cellpadding="0" cellspacing="0"><img src="http://ifgu.auf.org/static/img/logo.png" height="100" style="margin:13px 0px 0px 20px"/></td>
+          <td style="background-image: url(http://www.auf.org/static/lettre/images/masthead{{newsletter.style}}.jpg); background-repeat: no-repeat; padding: 22px 20px 20px 20px;" background="http://www.auf.org/static/lettre/images/masthead{{newsletter.style}}.jpg" valign="top"  height="85" width="428">
+               <h1>Lettre d'information N°{{ newsletter.numero}}</h1>         
+            <h4>{{ newsletter.date }}</h4>
+          </td>
+        </tr>
+      </table>
+      <!--/masthead--> 
+      <!--content section-->
+      
+      <table class="content" style="background: url(http://www.auf.org/static/lettre/images/content-bg{{newsletter.style}}.jpg) repeat #e5e7e2; border-bottom: 1px solid #fff;" bgcolor="#e5e7e2" background="http://www.auf.org/static/lettre/images/content-bg{{newsletter.style}}.jpg" width="680" border="0" align="center" cellpadding="0" cellspacing="0">
+        <tr>
+          <td style="background: url(http://www.auf.org/static/lettre/images/content-bg-2{{newsletter.style}}.jpg) repeat #d9dcd7" background="http://www.auf.org/static/lettre/images/content-bg-2{{newsletter.style}}.jpg" bgcolor="#d9dcd7" width="212" valign="top">
+          
+          <table width="172" border="0" cellspacing="0" cellpadding="0" style="margin: 20px 20px 0px 20px;">
+               <tr><td><h3><singleline label="Title">PUBLICATIONS</singleline></h3></td></tr>
+         </table>
+         
+         {% for item in list_publi %}
+         
+         <table bgcolor="#e5e7e2" background="http://www.auf.org/static/lettre/images/content-bg-2{{newsletter.style}}.jpg" width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
+              <tr>
+                <td valign="middle" align="center" height="11"><img src="http://www.auf.org/static/lettre/images/line_3{{newsletter.style}}.png" height="11" style="margin: 0; padding: 0; font-family: Arial, Helvetica, sans-serif;" width="172" /></td>
+              </tr>
+         </table>
+         
+         <table width="172" border="0" cellspacing="0" cellpadding="0" style="margin-top: 13px; margin-right:20px; margin-bottom: 4px; margin-left:20px;">
+               <tr>
+               <td class="link">
+                  <a href="http://ifgu.auf.org{{ item.get_absolute_url }}" target="_blank">Date limite: {{ item.date_fin }}</a>
+                  <multiline label="Description"><p style="padding: 0; font-size: 12px; font-family: Arial, Helvetica, sans-serif; color: #686f64; margin-top: 6px; margin-right:0px; margin-bottom: 6px; margin-left: 0px;">{{ item.titre }}</p></multiline>
+                </td>
+            </tr>
+          </table>
+         {% endfor %}
+          
+          <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
+             <tr>
+                <td height="10" style="border-bottom: 1px solid #fff;">&nbsp;</td>
+             </tr>
+          </table>
+          
+          <table width="172" border="0" cellspacing="0" cellpadding="0"  style="margin-top: 22px; margin-right:20px; margin-bottom: 0px; margin-left:20px;">
+               <tr>
+               <td>
+                  <p style="height: 24px; line-height: 24px; background: url(http://www.auf.org/static/img/face2.png) left no-repeat; padding-left: 29px"><a href="{{ newsletter.lienFace }}" target="_blank" style="color:#6F6F6F; text-decoration: none">Suivez-nous sur Facebook</a>
+                  </td>
+            </tr>
+          </table>
+          
+          <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
+             <tr>
+                <td height="10" style="border-bottom: 1px solid #fff;">&nbsp;</td>
+             </tr>
+          </table>
+          
+          <table width="172" border="0" cellspacing="0" cellpadding="0"  style="margin-top: 20px; margin-right:20px; margin-bottom: 5px; margin-left:20px;">
+               <tr>
+               <td><h3>Réagir</h3>
+                  <p>Si vous souhaitez réagir par rapport au contenu ou à la forme de cette lettre d'information :</p>
+                  
+                  <!--button-->
+                  <table width="100" border="0" cellspacing="0" cellpadding="5" style="margin-top: 15px;">
+                    <tr>
+                      <td class="button" height="25" style="border-radius: 12px; padding: 0; -webkit-border-radius: 12px; font-size: 13px; font-family: Arial, Helvetica, sans-serif; color: #ffffff; -khtml-border-radius: 12px; margin: 0; text-align: center; -moz-border-radius: 12px;" bgcolor="{% if newsletter.style == '1' %}#61a7d1{% endif %}{% if newsletter.style == '2' %}#f2f3f1{% endif %}"><unsubscribe style="padding: 0; font-weight: bold; font-family: Arial, Helvetica, sans-serif; color: #9faf78; text-decoration: none; margin: 0;"><a href="mailto:{{ newsletter.lien }}">Cliquez ici</a></unsubscribe></td>
+                    </tr>
+                  </table>
+                  <!--/button-->
+                  </td>
+            </tr>
+          </table>
+          
+          <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
+             <tr>
+                <td height="10" style="border-bottom: 1px solid #fff;">&nbsp;</td>
+             </tr>
+          </table>
+          
+          <table width="172" border="0" cellspacing="0" cellpadding="0"  style="margin-top: 20px; margin-right:20px; margin-bottom: 5px; margin-left:20px;">
+               <tr>
+               <td><h3>Se désabonner</h3>
+                  <p>Pour se désabonner de cette lettre d'information:</p>
+                  
+                  <!--button-->
+                  <table width="100" border="0" cellspacing="0" cellpadding="5" style="margin-top: 15px;">
+                    <tr>
+                      <td class="button" height="25" style="border-radius: 12px; padding: 0; -webkit-border-radius: 12px; font-size: 13px; font-family: Arial, Helvetica, sans-serif; color: #ffffff; -khtml-border-radius: 12px; margin: 0; text-align: center; -moz-border-radius: 12px;" bgcolor="{% if newsletter.style == '1' %}#61a7d1{% endif %}{% if newsletter.style == '2' %}#f2f3f1{% endif %}"><unsubscribe style="padding: 0; font-weight: bold; font-family: Arial, Helvetica, sans-serif; color: #9faf78; text-decoration: none; margin: 0;"><a href="http://ifgu.auf.org/lettre-information-desinscription/" target="_blank">Cliquez ici</a>
+                    </tr>
+                  </table>
+                  <!--/button-->
+                  </td>
+            </tr>
+          </table>
+          
+          <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
+             <tr>
+                <td height="10" style="border-bottom: 1px solid #fff;">&nbsp;</td>
+             </tr>
+          </table>
+          
+          <table width="172" border="0" cellspacing="0" cellpadding="0"  style="margin: 20px;">
+               <tr>
+               <td><h3>IFGU</h3>
+                  <p>Diffusée à {{ newsletter.abonne }} abonnés</p>
+                  
+                  <!--button-->
+                  <table width="100" border="0" cellspacing="0" cellpadding="5" style="margin-top: 15px;">
+                    <tr>
+                      <td class="button" height="25" style="border-radius: 12px; padding: 0; -webkit-border-radius: 12px; font-size: 13px; font-family: Arial, Helvetica, sans-serif; color: #ffffff; -khtml-border-radius: 12px; margin: 0; text-align: center; -moz-border-radius: 12px;" bgcolor="{% if newsletter.style == '1' %}#61a7d1{% endif %}{% if newsletter.style == '2' %}#f2f3f1{% endif %}"><unsubscribe style="padding: 0; font-weight: bold; font-family: Arial, Helvetica, sans-serif; color: #9faf78; text-decoration: none; margin: 0;"><a href="{{ newsletter.lien2 }}" target="_blank">Site Internet</a></unsubscribe></td>
+                    </tr>
+                  </table>
+                  <!--/button-->
+                  </td>
+            </tr>
+          </table>
+          
+          <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
+             <tr>
+                <td height="20">&nbsp;</td>
+             </tr>
+          </table>
+          
+          </td>
+          <td width="468" valign="top">
+          <h2>ACTUALITÉS</h2>
+          
+          {% for item in list_actualite %}
+          
+               <table border="0" width="428" style="margin-top: 0px; margin-right:20px; margin-bottom: 0px; margin-left:20px;" cellpadding="0" cellspacing="0">
+               <tr>
+                       <td rowspan="2" width="158" valign="top"><a href="http://ifgu.auf.org{{ item.get_absolute_url }}" target="_blank">{% if item.image %}<img src="http://www.auf.org/media/{{ item.image }}" height="118" title="{{ item.titre }}" alt="{{ item.titre }}" style="margin: 0px; border: solid 5px {% if newsletter.style == '2' %}#d7dbd4{% endif %}{% if newsletter.style == '1' %}#f0f1f3{% endif %}; background: #FFF;" width="130" editable="true" label="Image" />{% else%}<img src="http://ifgu.auf.org/static/img/logo.png" height="118" title="{{ item.titre }}" alt="{{ item.titre }}" style="margin: 0px; border: solid 5px {% if newsletter.style == '2' %}#d7dbd4{% endif %}{% if newsletter.style == '1' %}#f0f1f3{% endif %}; background: #FFF;" width="130" editable="true" label="Image" />{% endif %}</a></td>
+                    <td width="270" valign="top">
+                    <h6>
+                               <singleline label="Title"><a href="http://ifgu.auf.org{{ item.get_absolute_url }}" target="_blank">{{ item.titre }}</a></singleline>
+                       </h6>
+                    </td>
+                </tr>
+                <tr>
+                    <td valign="top"><multiline label="Description"><p>{% if item.resume %}{{ item.resume|striptags|safe|truncatewords_html:30 }}{% else%}{{ item.texte|striptags|safe|truncatewords_html:30 }}{% endif %}</p></multiline></td>
+                 </tr>   
+            </table>
+            
+            <table bgcolor="#e5e7e2" background="http://www.auf.org/static/lettre/images/content-bg{{newsletter.style}}.jpg" width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
+              <tr>
+                <td valign="middle" align="center" height="50"><img src="http://www.auf.org/static/lettre/images/line_{{newsletter.style}}.gif" height="11" style="margin: 0; padding: 0; font-family: Arial, Helvetica, sans-serif;" width="428" /></td>
+              </tr>
+            </table>
+            
+            {% endfor %}
+            
+         
+         </td>
+        </tr>
+      </table>
+      
+      <!--/content section--> 
+      <!--footer-->
+      
+      <table class="footer" style="background-image: url(http://www.auf.org/static/lettre/images/box-bg{{newsletter.style}}.jpg); background-repeat: repeat;" background="http://www.auf.org/static/lettre/images/box-bg{{newsletter.style}}.jpg" width="680" border="0" align="center" cellpadding="20" cellspacing="0">
+        <tr>
+          <td class="footer" valign="top"><multiline label="Description"><p>{{ newsletter.footer }}</p><p><br>Reproduction autorisée avec mention de la source et de l’adresse URL.</p></td>
+        </tr>
+      </table>
+      <!--footer--> 
+      <!--break-->
+      
+      <table width="680" border="0" align="center" cellpadding="0" cellspacing="0">
+        <tr>
+          <td height="25">&nbsp;</td>
+        </tr>
+      </table>
+      <!--/break--></td>
+  </tr>
+</table>
+<!--/100% body table-->
+</body>
+</html>
\ No newline at end of file
index 606a566..81e2787 100644 (file)
@@ -15,16 +15,27 @@ handler500 # Pyflakes
 urlpatterns = patterns(
     '',
     # admin
-    url(r'^admin_tools/', include('admin_tools.urls')),
+    (r'^admin/filebrowser/', include('filebrowser.urls')),
     (r'^admin/', include(admin.site.urls)),
+    url(r'^admin_tools/', include('admin_tools.urls')),
 )
 
 #rss Marc
-
 flux = {
     'actualite': DerniereActualites,
 }
 
+#newsletter
+#Lien pour Newsletter
+urlpatterns += patterns ('project.newsletter.views',
+    (r'^lettre-information/(?P<id>[-\w]+)/$', 'newsletter'),
+    (r'^lettre-information/$', 'newsletter_inscription'),
+    (r'^lettre-information-confirmation/$', 'newsletter_confirmation'),
+    (r'^lettre-information-desinscription/$', 'newsletter_desincription'),
+    (r'^lettre-information-desinscription-confirme/$', 'newsletter_desincription_confirme'),
+    (r'^lettre-information-desconfirmation/$', 'newsletter_desconfirmation'),
+)
+
 urlpatterns += patterns('',
 (r'^flux/(?P<url>.*)/$', 'django.contrib.syndication.views.feed',
     {'feed_dict': flux}),)
@@ -34,6 +45,7 @@ urlpatterns += patterns('article.views',
     (r'^actualites/$', 'actualite'),
     (r'^actualites/(?P<slug>[-\w]+)/$', 'actualite_detail'),
     (r'^plan-du-site/$', 'plan_du_site'),
+    (r'^tinymce/', include('tinymce.urls')),
 )
 
 if settings.DEBUG:
index a3388ca..d96fc0b 100644 (file)
@@ -34,3 +34,13 @@ distribute = 0.6.28
 
 # Added by Buildout Versions at 2012-10-04 14:50:11.877439
 django-pagination = 1.0.7
+
+# Added by Buildout Versions at 2013-02-01 14:13:14.461378
+django-tinymce = 1.5.1b4
+hexagonit.recipe.download = 1.6
+
+# Required by:
+# auf.recipe.django==2.0
+# zc.buildout==1.5.2
+# zc.recipe.egg==1.3.2
+setuptools = 0.6c12dev-r88846