Browse Source

ma-lettre spip3 (presque) tout refondu

svn/root/tags/v3.3.6
erational@erational.org 11 years ago
parent
commit
fe03754ef7
  1. 36
      .gitattributes
  2. 35
      action/supprimer_lettre.php
  3. 42
      base/malettre.php
  4. 134
      formulaires/configurer_malettre.html
  5. 38
      formulaires/editer_malettre.html
  6. 132
      formulaires/editer_malettre.php
  7. 58
      formulaires/envoi_malettre.html
  8. 273
      formulaires/envoi_malettre.php
  9. BIN
      images/banner_newsletter_defaut.png
  10. BIN
      images/malettre-16.png
  11. BIN
      images/malettre-24.png
  12. BIN
      images/malettre-36.png
  13. BIN
      images/malettre-48.png
  14. BIN
      images/malettre.png
  15. 19
      inclure/agenda_lettre.html
  16. 31
      inclure/liste_lettre.html
  17. 96
      lang/malettre_fr.php
  18. 73
      lang/malettre_nl.php
  19. 14
      lang/paquet-malettre_fr.php
  20. 1499
      lib/class.phpmailer.php
  21. 37
      malettre_administrations.php
  22. 17
      malettre_autoriser.php
  23. 25
      malettre_fonctions.php
  24. 25
      paquet.xml
  25. 28
      prive/listes/inc-lister-articlesmalettre.html
  26. 33
      prive/listes/inc-lister-evenementsmalettre.html
  27. 3
      prive/squelettes/contenu/configurer_malettre.html
  28. 10
      prive/squelettes/contenu/malettre.html
  29. 12
      prive/squelettes/contenu/malettre_archive.html
  30. 10
      prive/squelettes/contenu/malettre_envoi.html
  31. 9
      prive/squelettes/navigation/malettre.html
  32. 6
      prive/squelettes/navigation/malettre_archive.html
  33. 6
      prive/squelettes/navigation/malettre_envoi.html
  34. BIN
      prive/themes/spip/images/malettre-16.png
  35. BIN
      prive/themes/spip/images/malettre-24.png
  36. 90
      public/malettre.html
  37. 55
      public/malettre_txt.html

36
.gitattributes vendored

@ -1 +1,37 @@
* text=auto !eol
action/supprimer_lettre.php -text
base/malettre.php -text
formulaires/configurer_malettre.html -text
formulaires/editer_malettre.html -text
formulaires/editer_malettre.php -text
formulaires/envoi_malettre.html -text
formulaires/envoi_malettre.php -text
images/banner_newsletter_defaut.png -text
images/malettre-16.png -text
images/malettre-24.png -text
images/malettre-36.png -text
images/malettre-48.png -text
images/malettre.png -text
inclure/agenda_lettre.html -text
inclure/liste_lettre.html -text
lang/malettre_fr.php -text
lang/malettre_nl.php -text
lang/paquet-malettre_fr.php -text
lib/class.phpmailer.php -text
/malettre_administrations.php -text
/malettre_autoriser.php -text
/malettre_fonctions.php -text
/paquet.xml -text
prive/listes/inc-lister-articlesmalettre.html -text
prive/listes/inc-lister-evenementsmalettre.html -text
prive/squelettes/contenu/configurer_malettre.html -text
prive/squelettes/contenu/malettre.html -text
prive/squelettes/contenu/malettre_archive.html -text
prive/squelettes/contenu/malettre_envoi.html -text
prive/squelettes/navigation/malettre.html -text
prive/squelettes/navigation/malettre_archive.html -text
prive/squelettes/navigation/malettre_envoi.html -text
prive/themes/spip/images/malettre-16.png -text
prive/themes/spip/images/malettre-24.png -text
public/malettre.html -text
public/malettre_txt.html -text

35
action/supprimer_lettre.php

@ -0,0 +1,35 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
function action_supprimer_lettre_dist() {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
if (!preg_match(",^(\d+)$,", $arg, $r)) {
spip_log("action_supprimer_lettre_dist $arg pas compris");
} else {
action_supprimer_lettre_post($r[1]);
}
}
function action_supprimer_lettre_post($id_malettre) {
$id_malettre = intval($id_malettre);
// recuperer les urls pour les effacer
$result = sql_select('*',"spip_meslettres", "id_malettre=" . intval($id_malettre),'','',1);
while ($row = sql_fetch($result)){
$url_html = $row['url_html'];
spip_unlink(_DIR_IMG .$url_html);
$url_txt = $row['url_txt'];
spip_unlink(_DIR_IMG.$url_txt);
}
// effacer base
sql_delete("spip_meslettres", "id_malettre=" . intval($id_malettre));
include_spip('inc/invalideur');
suivre_invalideur("id='id_malettre/$id_malettre'");
}
?>

42
base/malettre.php

@ -0,0 +1,42 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
function malettre_declarer_tables_interfaces($interface){
$interface['table_des_tables']['meslettres']='meslettres';
return $interface;
}
function malettre_declarer_tables_objets_sql($tables){
/* Declaration de la table archive des lettres */
$tables['spip_meslettres'] = array(
/* Declarations principales */
'table_objet' => 'meslettres',
'table_objet_surnoms' => array('meslettres'),
'type' => 'meslettres',
'type_surnoms' => array('meslettres'),
/* La table */
'field'=> array(
"id_malettre" => "bigint(21) NOT NULL",
"titre" => "text NOT NULL",
"lang" => "varchar(255) NOT NULL",
"url_html" => "varchar(255) NULL",
"url_txt" => "varchar(255) NOT NULL",
"date" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"
),
'key' => array(
"PRIMARY KEY" => "id_malettre",
),
'principale' => 'oui'
);
return $tables;
}
?>

134
formulaires/configurer_malettre.html

@ -0,0 +1,134 @@
<div class="ajax formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}">
<h3 class="titrem">
[(#CHEMIN{images/malettre-24.png}|image_reduire{24}|inserer_attribut{class,cadre-icone}|inserer_attribut{alt,''})]
<:malettre:config:></h3>
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV**{message_erreur})</p>]
[(#ENV{editable})
<form method='post' action='#ENV{action}'><div>
[(#REM) declarer les hidden qui declencheront le service du formulaire
parametre : url d'action ]
#ACTION_FORMULAIRE{#ENV{action}}
<ul>
[(#REM) ------------------------ EDITO ------------------------ ]
#SET{erreurs,#ENV**{erreurs}|table_valeur{id_article_edito}}
<li class="editer_id_article_edito[ (#GET{erreurs}|oui)erreur]">
<h3 class="legend"><:malettre:edito:></h3>
<label><:malettre:edito_article_numero:></label>
[<span class='erreur_message'>(#GET{erreurs})</span>]
<input type="text" name="id_article_edito" class="text" size="3" id='id_article_edito' value="[(#ENV{id_article_edito}|intval)]" />
[<a href="[(#URL_ECRIRE{article}|parametre_url{id_article,#ENV{id_article_edito}})]">(#INFO_TITRE{article,#ENV{id_article_edito}})</a>]
</li>
[(#REM) ------------------------ CHOIX OBJETS ------------------------ ]
<li><h3 class="legend"><:malettre:choix_objets:></h3></li>
#SET{erreurs,#ENV**{erreurs}|table_valeur{choix_objets}}
<li class="editer_choix_objets[ (#GET{erreurs}|oui)erreur]">
<label><:malettre:choix_objets:></label>
[<span class='erreur_message'>(#GET{erreurs})</span>]
<div class="choix">
<input type="checkbox" name="lister_articles" class="checkbox" value="on" id='lister_articles'[ (#ENV{lister_articles}|oui)checked="checked"] />
<label for='lister_articles'><:malettre:lister_articles:></label>
</div>
[(#PLUGIN{agenda}|oui)
<div class="choix">
<input type="checkbox" name="lister_evenements" class="checkbox" value="on" id='lister_evenements'[ (#ENV{lister_evenements}|oui)checked="checked"] />
<label for='lister_evenements'><:malettre:lister_evenements:></label>
</div>
]
</li>
[(#REM) ------------------------ EXPEDITEURS ------------------------ ]
<li class="fieldset fieldset_expediteurs">
<fieldset>
<h3 class="legend"><:malettre:expediteurs:></h3>
<table>
<tr>
<td></td>
<td><:malettre:nom:></td>
<td><:malettre:email:></td>
</tr>
<tr>
<td><:malettre:adresse{num=1}:></td>
<td><input type="text" name="expediteur_nom1" value="#ENV{expediteur_nom1, pierre dupond}" id="expediteur_nom1" /></td>
<td><input type="text" name="expediteur_email1" value="#ENV{expediteur_email1, p@mondomaine.org}" id="expediteur_email1" /></td>
</tr>
<tr>
<td><:malettre:adresse{num=2}:></td>
<td><input type="text" name="expediteur_nom2" value="#ENV{expediteur_nom2,}" id="expediteur_nom2" /></td>
<td><input type="text" name="expediteur_email2" value="#ENV{expediteur_email2,}" id="expediteur_email2" /></td>
</tr>
<tr>
<td><:malettre:adresse{num=3}:></td>
<td><input type="text" name="expediteur_nom3" value="#ENV{expediteur_nom3,}" id="expediteur_nom3" /></td>
<td><input type="text" name="expediteur_email3" value="#ENV{expediteur_email3,}" id="expediteur_email3" /></td>
</tr>
</table>
</fieldset>
</li>
[(#REM) ------------------------ DESTINATAIRES ------------------------ ]
<li class="fieldset fieldset_destinataires">
<fieldset>
<h3 class="legend">Destinataires</h3>
<table>
<tr>
<td></td>
<td><:malettre:nom:></td>
<td><:malettre:email:></td>
</tr>
<tr>
<td><:malettre:adresse{num=1}:></td>
<td><input type="text" name="adresse_nom1" value="#ENV{adresse_nom1, lettre d'information}" id="adresse_nom1" /></td>
<td><input type="text" name="adresse_email1" value="#ENV{adresse_email1, info@liste.mondomaine.org}" id="adresse_email1" /></td>
</tr>
<tr>
<td><:malettre:adresse{num=2}:></td>
<td><input type="text" name="adresse_nom2" value="#ENV{adresse_nom2,}" id="adresse_nom2" /></td>
<td><input type="text" name="adresse_email2" value="#ENV{adresse_email2,}" id="adresse_email2" /></td>
</tr>
<tr>
<td><:malettre:adresse{num=3}:></td>
<td><input type="text" name="adresse_nom3" value="#ENV{adresse_nom3,}" id="adresse_nom3" /></td>
<td><input type="text" name="adresse_email3" value="#ENV{adresse_email3,}" id="adresse_email3" /></td>
</tr>
<tr>
<td><:malettre:adresse{num=4}:></td>
<td><input type="text" name="adresse_nom4" value="#ENV{adresse_nom4,}" id="adresse_nom4" /></td>
<td><input type="text" name="adresse_email4" value="#ENV{adresse_email4,}" id="adresse_email4" /></td>
</tr>
<tr>
<td><:malettre:adresse{num=5}:></td>
<td><input type="text" name="adresse_nom5" value="#ENV{adresse_nom5,}" id="adresse_nom5" /></td>
<td><input type="text" name="adresse_email5" value="#ENV{adresse_email5,}" id="adresse_email5" /></td>
</tr>
<tr>
<td><:malettre:adresse{num=6}:></td>
<td><input type="text" name="adresse_nom6" value="#ENV{adresse_nom6,}" id="adresse_nom6" /></td>
<td><input type="text" name="adresse_email6" value="#ENV{adresse_email6,}" id="adresse_email6" /></td>
</tr>
<tr>
<td><:malettre:adresse{num=7}:></td>
<td><input type="text" name="adresse_nom7" value="#ENV{adresse_nom7,}" id="adresse_nom7" /></td>
<td><input type="text" name="adresse_email7" value="#ENV{adresse_email7,}" id="adresse_email7" /></td>
</tr>
</table>
</fieldset>
</li>
</ul>
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class='boutons'><span class='image_loading'>&nbsp;</span>
<input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p>
</div></form>
]
</div>

38
formulaires/editer_malettre.html

@ -0,0 +1,38 @@
<div class="formulaire_spip formulaire_malettre">
[<div class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</div>]
[<div class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</div>]
[(#EDITABLE|oui)
<form action="#ENV{action}" method="post"><div>
#ACTION_FORMULAIRE{#ENV{action}}
<ul style="padding:5px;">
<!-- lang -->
[(#SAISIE{hidden,lang_select,valeur_forcee=#LANG})]
<!-- titre -->
[(#SAISIE{input,lettre_title,size=25,maxlength=255,label=<strong><:malettre:compose_sujet:></strong>})]
<!-- edito -->
[(#CONFIG{malettre/id_article_edito}|=={0}|non)
<h5><:malettre:compose_contenu:> - <a href="[(#URL_ECRIRE{article}|parametre_url{id_article,#CONFIG{malettre/id_article_edito}})]"><:malettre:compose_edito:></a></h5>
<div style="background:#eee;padding:10px;margin:0 10px 10px 10px;border:1px solid #999;">
[(#INFO_TEXTE{article,#CONFIG{malettre/id_article_edito}})]
</div>
]
<!-- liste articles -->
[(#CONFIG{malettre/lister_articles}|=={on}|oui)
<INCLURE{fond=prive/listes/inc-lister-articlesmalettre} />]
<!-- liste evt -->
[(#CONFIG{malettre/lister_evenements}|=={on}|oui)
<INCLURE{fond=prive/listes/inc-lister-evenementsmalettre} />]
</ul>
<p class="boutons"><input type="submit" class="submit" value="<:malettre:compose_submit:>" /></p>
</div></form>
]
</div>

132
formulaires/editer_malettre.php

@ -0,0 +1,132 @@
<?php
/**
* Formulaire pour composer la lettre
*/
include_spip('inc/actions');
include_spip('inc/editer');
/**
* Chargement des valeurs par défaut du formulaire
*/
function formulaires_editer_malettre_charger_dist(){
$contexte = array();
return $contexte;
}
/**
* Vérification des valeurs du formulaire
*/
function formulaires_editer_malettre_verifier_dist(){
$erreurs = array();
return $erreurs;
}
/**
* Traitement des valeurs du formulaire
*/
function formulaires_editer_malettre_traiter_dist(){
include_spip("inc/charsets");
include_spip("inc_presentation");
// chemin
$path = _DIR_IMG;
$path_archive = "lettre";
$path_archive_full = $path.$path_archive;
$path_url = lire_meta("adresse_site");
$path_url_archive = $path_url."/IMG";
$p=explode(basename(_DIR_PLUGINS)."/",str_replace('\\','/',realpath(dirname(__file__))));
define('_DIR_PLUGIN_MALETTRE',(_DIR_PLUGINS.end($p)));
$path_plugin = dirname(__file__)."/../";
$errorFlag = false;
// ancien editer_malettre
$lettre_title = trim(strip_tags(_request('lettre_title')));
$lettre_title = str_replace("\"","'", $lettre_title);
$lang = _request('lang_select');
if ($lang=="")
$lang = $GLOBALS['meta']['langue_site'];
// VERSION HTML & TXT
$sourceHTML = "";
$sourceTXT = "";
$selection = ""; // stocke les id des articles retenus separee par une virgule
// radio button
$add = _request('add');
if (is_array($add))
$selection = implode(",", $add);
// csv articles
$art_csv = _request('art_csv');
$csv = explode(",", $art_csv);
if (is_array($csv)) {
foreach ($csv as $value2) {
$selection .= ",".trim($value2);
}
}
// radio button
$addeve = _request('addeve');
if (is_array($addeve))
$selection_eve = implode(",", $addeve);
// csv evenements
$eve_csv = _request('eve_csv');
$csv_eve = explode(",", $eve_csv);
if (is_array($csv_eve)) {
foreach ($csv_eve as $value2) {
$selection_eve .= ",".trim($value2);
}
}
// edito
$id_article_edito = lire_config("malettre/id_article_edito");
// calcul du patron
$flag_preserver = true; // empecher ajout feuille spip_admin.css
$sourceHTML .= malettre_get_contents("malettre",$id_article_edito,$selection,$selection_eve,$lang);
$sourceTXT .= malettre_get_contents("malettre_txt",$id_article_edito,$selection,$selection_eve,$lang);
//$message = "titre: $lettre_title / sel; $selection / sek, $selection_eve / <textarea>$sourceHTML</textarea>";
// ecriture fichier
if ($handle = fopen($path_archive_full."/.malettre.html", w)) {
fwrite($handle, $sourceHTML);
fclose($handle);
if ($handle = fopen($path_archive_full."/.malettre_txt.html", w)) {
fwrite($handle, $sourceTXT);
fclose($handle);
} else {
$errorFlag = true;
$message = _T('malettre:erreur_ecriture')."($path.$path_archive)";
}
} else {
$errorFlag = true;
$message = _T('malettre:erreur_ecriture')."($path.$path_archive)";
}
$redirect = "";
// pas d'erreur, on passe à l'étape suivante: choix destinaires
if (!$errorFlag) {
refuser_traiter_formulaire_ajax();
$redirect = parametre_url(generer_url_ecrire('malettre_envoi'),'lettre_title',$lettre_title );
}
// message
return array(
"editable" => false,
"message_ok" => "$message",
'redirect' => $redirect
);
}
?>

58
formulaires/envoi_malettre.html

@ -0,0 +1,58 @@
<div class="formulaire_spip formulaire_envoi_malettre">
[<div class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</div>]
[<div class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</div>]
[(#EDITABLE|oui)
<form action="#ENV{action}" method="post"><div>
#ACTION_FORMULAIRE{#ENV{action}}
<ul style="padding:5px;">
<!-- lang -->
[(#SAISIE{hidden,lang_select,valeur_forcee=#LANG})]
<!-- titre -->
[(#SAISIE{input,lettre_title,size=25,maxlength=255,label=<strong><:malettre:compose_sujet:></strong>})]
<!-- expediteur -->
#SET{expedi,#ARRAY}
[(#CONFIG{malettre/expediteur_email1}|oui) [(#SET{expedi,#GET{expedi}|array_merge{#ARRAY{i1, #CONFIG{malettre/expediteur_nom1} &nbsp;&lt;#CONFIG{malettre/expediteur_email1}&gt; }}})] ]
[(#CONFIG{malettre/expediteur_email2}|oui) [(#SET{expedi,#GET{expedi}|array_merge{#ARRAY{i2, #CONFIG{malettre/expediteur_nom2} &nbsp;&lt;#CONFIG{malettre/expediteur_email2}&gt; }}})] ]
[(#CONFIG{malettre/expediteur_email3}|oui) [(#SET{expedi,#GET{expedi}|array_merge{#ARRAY{i3', #CONFIG{malettre/expediteur_nom3} &nbsp;&lt;#CONFIG{malettre/expediteur_email3}&gt; }}})] ]
[(#SAISIE{selection,expediteur,cacher_option_intro=oui,label=<strong><:malettre:expediteur:></strong>,datas=#GET{expedi}})]
[(#SAISIE{input,expediteur_more,size=25,maxlength=255,label=<:malettre:autre:><br /><i>(<:malettre:email_seulement:>)</i>})]
<!-- destinataires -->
#SET{desti,#ARRAY}
<!-- FIXME passerelle vers plugin mes abonnes -->
[(#CONFIG{malettre/adresse_email1}|oui) [(#SET{desti,#GET{desti}|array_merge{#ARRAY{i1, #CONFIG{malettre/adresse_nom1} &nbsp;&lt;#CONFIG{malettre/adresse_email1}&gt; }}})] ]
[(#CONFIG{malettre/adresse_email2}|oui) [(#SET{desti,#GET{desti}|array_merge{#ARRAY{i2, #CONFIG{malettre/adresse_nom2} &nbsp;&lt;#CONFIG{malettre/adresse_email2}&gt; }}})] ]
[(#CONFIG{malettre/adresse_email3}|oui) [(#SET{desti,#GET{desti}|array_merge{#ARRAY{i3, #CONFIG{malettre/adresse_nom3} &nbsp;&lt;#CONFIG{malettre/adresse_email3}&gt; }}})] ]
[(#CONFIG{malettre/adresse_email4}|oui) [(#SET{desti,#GET{desti}|array_merge{#ARRAY{i4, #CONFIG{malettre/adresse_nom4} &nbsp;&lt;#CONFIG{malettre/adresse_email4}&gt; }}})] ]
[(#CONFIG{malettre/adresse_email5}|oui) [(#SET{desti,#GET{desti}|array_merge{#ARRAY{i5, #CONFIG{malettre/adresse_nom5} &nbsp;&lt;#CONFIG{malettre/adresse_email5}&gt; }}})] ]
[(#CONFIG{malettre/adresse_email6}|oui) [(#SET{desti,#GET{desti}|array_merge{#ARRAY{i6, #CONFIG{malettre/adresse_nom6} &nbsp;&lt;#CONFIG{malettre/adresse_email6}&gt; }}})] ]
[(#CONFIG{malettre/adresse_email7}|oui) [(#SET{desti,#GET{desti}|array_merge{#ARRAY{i7, #CONFIG{malettre/adresse_nom7} &nbsp;&lt;#CONFIG{malettre/adresse_email7}&gt; }}})] ]
[(#SAISIE{checkbox,desti,label=<strong><:malettre:destinataires:></strong>,datas=#GET{desti}})]
[(#SAISIE{input,desti_more,size=25,maxlength=255,label=<:malettre:autre:><br /><i>(<:malettre:email_seulement:>)</i>})]
</ul>
<p class="boutons"><input type="submit" class="submit" value="<:malettre:lettre_envoyer:>" /></p>
<br />
<h5><:malettre:apercu:></h5>
<iframe height="400" style="overflow:scroll;width:98%;margin-bottom:15px;" src="#CHEMIN{IMG/lettre/.malettre.html}?nocache=#DATE"></iframe>
<h5><:malettre:version_html:></h5>
<textarea cols='70' rows='20'>#ENV{sourcehtml}</textarea>
<h5><:malettre:version_txt:></h5>
<textarea cols='70' rows='20'>#ENV{sourcetxt}</textarea>
</div></form>
]
</div>

273
formulaires/envoi_malettre.php

@ -0,0 +1,273 @@
<?php
/**
* Formulaire pour envoi la lettre (avec ou sa facteur)
*/
include_spip('inc/actions');
include_spip('inc/editer');
include_spip('inc/distant');
/**
* Chargement des valeurs par défaut du formulaire
*/
function formulaires_envoi_malettre_charger_dist(){
if (_request('lettre_title'))
$lettre_title = strip_tags(_request('lettre_title'));
else $lettre_title = "";
$sourcehtml = recuperer_page(lire_meta("adresse_site")."/IMG/lettre/.malettre.html");
$sourcetxt = recuperer_page(lire_meta("adresse_site")."/IMG/lettre/.malettre_txt.html");
$contexte = array(
'lettre_title'=>$lettre_title,
'expediteur' => '',
'expediteur_more' => '',
'desti' => '',
'desti_more' => '',
'sourcehtml'=>$sourcehtml,
'sourcetxt'=>$sourcetxt
);
return $contexte;
}
/**
* Vérification des valeurs du formulaire
*/
function formulaires_envoi_malettre_verifier_dist(){
$erreurs = array();
if (_request('lettre_title')=="")
$erreurs['lettre_title'] = _T("malettre:obligatoire");
if ((_request('expediteur')=="") AND (_request('expediteur_more')==""))
$erreurs['expediteur'] = _T("malettre:obligatoire");
if ((_request('desti')=="") AND (_request('desti_more')==""))
$erreurs['desti'] = _T("malettre:obligatoire");
return $erreurs;
}
/**
* Traitement des valeurs du formulaire
*/
function formulaires_envoi_malettre_traiter_dist(){
include_spip("inc/charsets");
include_spip("inc_presentation");
include_spip('inc/config');
$message = "";
// --------------------------------
// chemin
$path = _DIR_IMG;
$path_archive = "lettre";
$path_archive_full = $path.$path_archive;
$path_url = lire_meta("adresse_site");
$path_url_archive = $path_url."/IMG";
$p=explode(basename(_DIR_PLUGINS)."/",str_replace('\\','/',realpath(dirname(__file__))));
define('_DIR_PLUGIN_MALETTRE',(_DIR_PLUGINS.end($p)));
$path_plugin = dirname(__file__)."/../";
//
// envoi de la lettre
//
// lang
$lang = _request('lang_select');
if ($lang=="")
$lang = $GLOBALS['meta']['langue_site'];
// titre
$lettre_title = trim(strip_tags(_request('lettre_title')));
$lettre_title = str_replace("\"","'", $lettre_title);
if ($lettre_title == "") { // à supprimer ou integrer ou multilingue ?
$months=array(1=>'Janvier', 2=>'Fevrier', 3=>'Mars', 4=>'Avril', 5=>'Mai', 6=>'Juin', 7=>'Juillet', 8=>'Aout', 9=>'Septembre', 10=>'Octobre', 11=>'Novembre', 12=>'Decembre');
$today = getdate(mktime()-(24*3600));
$sujet = "Les nouveautes de ".$months[$today[mon]]." ".date("Y");
} else {
$sujet = $lettre_title;
}
// hash
$lettre_hash = substr(md5(time()),0,5);
$url_lettre_archive_short = "lettre_".date("Ymd")."_".$lettre_hash."_"._request('lang_select').".html";
$url_lettre_archive_txt_short = "lettre_".date("Ymd")."_".$lettre_hash."_"._request('lang_select').".txt";
$url_lettre_archive = "$path_url_archive/$path_archive/$url_lettre_archive_short";
$url_lettre_archive_txt = "$path_url_archive/$path_archive/$url_lettre_archive_txt_short";
// recup contenu HTML
$texte = $path_archive_full."/.malettre.html";
$fr=fopen($texte,"r");
while(!feof($fr)){
$recup = '';
while(!feof($fr))
$recup .= fgets($fr,1024);
}
fclose($fr);
$recup = str_replace("{URL_MALETTRE}",$url_lettre_archive,$recup);
$recup = str_replace("{TITRE_MALETTRE}",$sujet,$recup);
// recup contenu TXT
$texte = $path_archive_full."/.malettre_txt.html";
$fr=fopen($texte,"r");
while(!feof($fr)){
$recup_txt = '';
while(!feof($fr))
$recup_txt .= fgets($fr,1024);
}
fclose($fr);
$recup_txt = str_replace("{URL_MALETTRE}",$url_lettre_archive,$recup_txt);
// recup expediteur
$exp_email = _request('expediteur_more');
if ($exp_email=="") {
$id_expediteur = intval(substr(_request('expediteur'),1));
$exp_name = lire_config("malettre/expediteur_nom$id_expediteur");
$exp_mail = lire_config("malettre/expediteur_email$id_expediteur");
if ($exp_mail=="")
die("expediteur inconnu");
} else {
$exp_name = $exp_mail;
}
// recup destinataire
$destinataire = array();
$desti = _request('desti');
foreach ($desti as $desti_item) { // on lit la config pour retrouver l'email
$id_desti = intval(substr($desti_item,1));
$desti_mail = lire_config("malettre/adresse_email$id_desti");
if ($desti_mail !="")
$destinataire[] = $desti_mail;
}
$desti_more = _request('desti_more');
if ($desti_more!="") $destinataire[] = $desti_more;
/* FIXME:
if (_request('mes_abonnes')=='oui') {
if ($resultats = sql_select('email', 'spip_mesabonnes')) {
while ($res = sql_fetch($resultats))
$desti[] = $res['email'];
}
}
*/
$message = "<h3>"._T('malettre:envoi')." <i style='color:#999;'>$sujet</i></h3>\n";
$message = "<div style='border:1px solid;background:#eee;margin:10px 0;padding:10px;font-family:arial,sans-serif;font-size:0.9em;'>";
// envoi lettre
// a ameliorer grandement flood
// utiliser une methode ajax pour temporiser l'envoi par flot
// ou tout simple deleger a facteur ?
$i = 0;
$j = 0;
if (is_array($destinataire)) {
foreach ($destinataire as $k=>$adresse) { // envoi a tous les destinataires
if (!defined('_DIR_PLUGIN_FACTEUR')){
include_spip("lib/class.phpmailer"); // mettre à jour http://code.google.com/a/apache-extras.org/p/phpmailer/ ou necessite facteur ?
$mail = new PHPMailer();
$mail->From = "$exp_email";
$mail->FromName = "$exp_name";
$mail->AddReplyTo("$exp_email");
$mail->AddAddress($adresse,$adresse);
$i++;
$mail->WordWrap = 50; // set word wrap
$mail->IsHTML(true); // send as HTML
$mail->CharSet = "utf-8";
$mail->Subject = "$lettre_title";
$mail->Body = $recup;
$mail->AltBody = $recup_txt;
$res = $mail->Send();
}
else {
$envoyer_mail = charger_fonction('envoyer_mail','inc');
$corps = array(
"html" => $recup,
"texte" => $recup_txt,
"nom_envoyeur" => $exp_name,
"from" => $exp_email,
"renvoyer_a" => $exp_email
);
$envoyer_mail($adresse,$lettre_title,$corps);
}
if(!$res) {
$message.= "<div style='color:red'><strong>$adresse</strong> - "._T('malettre:erreur_envoi')."</div>";
//$message.= "Mailer Error: " . $mail->ErrorInfo;
$success_flag = false;
$j++;
} else {
$message.= "<div style='color:green'><strong>$adresse</strong> - <span style='color:green'>"._T('malettre:succes_envoi')."</span></div>";
}
echo $msg;
}
} else {
$message.= "<div style='color:red'>"._T('malettre:erreur_no_dest')."</div>";
}
$message.= "</div>";
$message.= "<div> $i / $j </div>";
// archivage de la lettre en dur
// FIXME: utiliser les methodes natives pour ecrire les fichiers
$message.= "<div style=\"margin:15px 0;\">"._T('malettre:archives_placer');
$lettre_archive = "$path_archive_full/lettre_".date("Ymd")."_".$lettre_hash."_"._request('lang_select').".html";
$f_archive=fopen($lettre_archive,"w");
fwrite($f_archive,$recup);
fclose($f_archive);
$message.= " <a href='$url_lettre_archive' target='_blank'>html</a> - ";
$lettre_archive = "$path_archive_full/lettre_".date("Ymd")."_".$lettre_hash."_"._request('lang_select').".txt";
$f_archive=fopen($lettre_archive,"w");
fwrite($f_archive,$recup_txt);
fclose($f_archive);
$message.= "<a href='$url_lettre_archive_txt' target='_blank'>txt</a></div>";
// stockage en base
include_spip('base/abstract_sql');
sql_insertq('spip_meslettres',array(
'titre' => $lettre_title,
'lang' => $lang,
'url_html' => "lettre/$url_lettre_archive_short",
'url_txt' => "lettre/$url_lettre_archive_txt_short",
'date' => date('Y-m-d H:i:s')
));
$message.= "<p><a href='".generer_url_ecrire("malettre_archive")."'>"._T('malettre:archives_gerer')."</a></p>\n";
// --------------------------------
$redirect = "";
// message
return array(
"editable" => false,
"message_ok" => "$message",
'redirect' => $redirect
);
}
?>

BIN
images/banner_newsletter_defaut.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
images/malettre-16.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 716 B

BIN
images/malettre-24.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
images/malettre-36.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
images/malettre-48.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
images/malettre.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 B

19
inclure/agenda_lettre.html

@ -0,0 +1,19 @@
<BOUCLE_vevent(EVENEMENTS spip_articles){id_evenement=#ENV{id,#ENV{id_evenement}}}{tout}>
<BOUCLE_artri(ARTICLES){id_evenement}>[(#SET{lien_article,[(#TITRE)]})][(#SET{txt,[(#TEXTE|couper{120}|Ptobr)]})]</BOUCLE_artri>
<tr><td style="vertical-align:top">
<div style="color:#555; float:left;padding:5px 10px 5px;">
[<a href="[(#URL_ARTICLE|url_absolue)]"><img src="(#LOGO_EVENEMENT|sinon{#LOGO_ARTICLE}|image_reduire{0,110}|image_reduire{110,0}|image_recadre{110,110,top}|sinon{[(#CHEMIN{img/agenda_logo.jpg}|image_reduire{80,80}|image_recadre{100,80,top})]}|extraire_attribut{src}|url_absolue)" alt="" border="0" /></a>]
</div></td><td><div style="color:#555; text-align: justify;padding: 5px 0px 5px;">
<h2 style="margin:0; padding:0; color:#A5B152; font-size:14px">#TITRE</h2>
[<h4 style="margin:0; padding:0;font-size:12px">(#DATE_DEBUT|agenda_affdate_debut_fin{#DATE_FIN,''})</h4>]
<B_mots>
<h4 style="margin:2px 0; padding:0;font-size:12px"><BOUCLE_mots(MOTS){id_evenement}{par num titre,titre}{','}>
#SET{mot,#TITRE}
<a href="[(#URL_MOT|url_absolue)]" style="color:#57B2FF;">#TITRE</a></BOUCLE_mots>
</h4>
</B_mots>
[<div style="color:#666;">(#DESCRIPTIF|sinon{#GET{txt}|liens_absolus|Ptobr})</div>]
<p style="color:#848484; margin:0.2em 0 0">[(#HORAIRE|=={oui}|oui)[(#DATE_DEBUT|affdate{H:i})][-(#DATE_FIN|affdate{H:i})]][(#LIEU|!={#GET{mot}}|oui)[ (#LIEU|Ptobr)][ (#ADRESSE|PtoBR)]][(#INSCRIPTION|oui)[ / ((#PLACES) ]<:agenda:personnes:>)]</p>
[<p style="margin:0.2em 0 0">&Agrave; retrouver dans... <a href="[(#URL_ARTICLE|url_absolue)]" style="color:#57B2FF;">(#GET{lien_article})</a></p>]
</div></td></tr><tr><td colspan="2"><hr style="height:1px;padding:0;border:0;border-top:1px solid #eeeeee;" /></td></tr></BOUCLE_vevent>

31
inclure/liste_lettre.html

@ -0,0 +1,31 @@
[(#REM) archives lettre
]<B_archive>
<table class="spip"><tbody>
<tr>
<th width="15"></th>
<th width="230"><:info_titre:></th>
<th width="40"><:date:></th>
<th width="30"></th>
<th width="30"></th>
<th width="30"></th>
</tr>
<BOUCLE_archive(MESLETTRES){pagination 5}{!par date}>
<tr>
<td width="20">#ID_MALETTRE</td>
<td width="230"><a href='#'[ onclick="malettref.location.href='(#CHEMIN{IMG/#URL_HTML})'"] style='color:green;'>#TITRE</a> - <small>#LANG</small></td>
<td width="40">[(#DATE|affdate_court)]</td>
<td width="30">[<a href="(#CHEMIN{IMG/#URL_HTML})" target="_blank">html</a>]</td>
<td width="30">[<a href="(#CHEMIN{IMG/#URL_TXT})" target="_blank">txt</a>]</td>
<td width="30"><a href='[(#URL_ACTION_AUTEUR{supprimer_lettre,#ID_MALETTRE,#SELF})]' onclick='return confirm("<:malettre:effacer_confirm:>");' style='color:red;'><:malettre:effacer:></a></td>
</tr>
</BOUCLE_archive>
</tbody></table>
<div class="pagination">[(#PAGINATION) - ]#GRAND_TOTAL <:malettre:lettres_dispo:></div>
<iframe width="900" height="500" src='' id='malettref' name='malettref' style="both;border:1px solid #666;position:relative;left:-200px;margin:1em;background:#333;"></iframe>
</B_archive>
<div class="pagination">0 <:malettre:lettres_dispo:></div>
<//B_archive>

96
lang/malettre_fr.php

@ -0,0 +1,96 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
$GLOBALS[$GLOBALS['idx_lang']] = array(
// A
'archives' => 'Archives',
'archives_gerer' => 'G&eacute;rer les archives',
'archives_placer' => 'Lettre plac&eacute;e en archive',
'autre' => 'Autre :',
'apercu' => 'Apercu de la lettre',
'adresse'=> 'Adresse @num@',#NEW
// C
'charger_derniere' => 'Charger la derni&egrave;re lettre',
'config' => 'Configurer ma lettre',
'config_malettre'=>'Choisir l\'&eacute;dito et les adresses emails courantes pour vos envois',
'consulter' => 'Consulter',
'compose_sujet' => 'Sujet du mail',
'compose_non_spip' => 'raccourcis SPIP non support&eacute;s',
'compose_contenu' => 'Texte d\'introduction',
'compose_edito' => '&eacute;diter ce texte',
'compose_cochant' => 'Choisissez les articles que vous voulez publier dans la lettre en les cochant ...',
'compose_cochant_eve' => 'Choisissez les &eacute;v&eacute;nements que vous voulez publier dans la lettre en les cochant ...',
'compose_liste' => 'ET / OU <br />indiquer les num&eacute;ros des articles &agrave; publier s&eacute;par&eacute;s par une virgule',
'compose_liste_eve' => 'ET / OU <br />indiquer les num&eacute;ros des &eacute;v&eacute;nements &agrave; publier s&eacute;par&eacute;s par une virgule',
'compose_submit' => 'Ajouter &agrave; la lettre',
'choix_lang' => 'Composer la lettre en ',
'choix_objets'=>'Les listes d\'objets &agrave; cocher',#NEW
// D
'destinataires' => "Destinataires",
// E
'ecrire_nouvelle' => 'Ecrire une lettre',
'ecrire_nouvelle2' => 'Ecrire une nouvelle lettre',
'edito'=>'Edito', #NEW
'edito_article_numero'=>'Num&eacute;ro de l\'article &eacute;dito<br />(<i>0: pas d\'édito</i>)',#NEW
'erreur_ecriture' => '<strong>erreur:</strong> impossible de cr&eacute;er la lettre au format HTML, v&eacute;rifier le param&egrave;tre chemin d\'acc&egrave;s et les droits en &eacute;criture (chmod 777)',
'erreur_ecriture_stockage' => 'R&eacutepertoire de stockage de la lettre impossible &agrave; cr&eacute;er',
'erreur_envoi' => 'Erreur lors de l\'envoi du mail',
'erreur_no_dest' => 'Erreur: aucun destinataire',
'erreur_lecture' => 'Erreur: impossible de lire le dossier',
'expediteur' => 'Exp&eacute;diteur',
'email'=>'Email',#NEW
'email_seulement' => "email seulement",
'envoi' => 'Envoi',
'effacer' => 'Effacer',
'effacer_confirm' => 'Etes vous sur de vouloir effacer cette lettre ?',
'expediteurs'=>'Exp&eacute;diteurs',#NEW
// I
'info' => 'Créer votre lettre en selectionnant les éléments.',
'info_archive' => 'Visualiser et gérer les lettres envoyées', #NEW
'info_envoi' => 'Prévisualiser votre lettre et envoyer la à ces destinataires', #NEW
// L
'lang_toute' => 'toutes les langues',
'lettres_dispo' => 'lettre(s) disponible(s)',
'lettre_du' => 'lettre du',
'lettre_txt_auto' => 'Ceci est une message automatique - ne pas repondre',
'lettre_txt_titre' => 'LETTRE D\'INFORMATION DE',
'lettre_txt_html_dispo' => 'La version HTML de cette lettre est disponible en ligne: ',
'lettre_txt_unsub' => 'Modifier son abonnement: ',
'lettre_html_unsub' => 'se d&eacute;sinscrire de la lettre',
'lettre_envoyer' => 'Envoyer la lettre', #NEW
'lien' => 'Lien',
'lire_en_ligne' => 'Lire l\'article en ligne',
'lister_articles'=>'Lister les articles',
'lister_evenements'=>'Lister les &eacute;v&eacute;nements',
'lien_documentation' => '<a href="http://www.spip-contrib.net/2803" class="spip_out">Documentation</a>',#NEW
// M
'ma_lettre'=>'Ma lettre',
'ma_lettre_warning' => 'Si vous n\'arrivez pas &agrave; lire correctement cette lettre, allez directement sur',
'mes_abonnes' => 'Mes abonn&eacute;s (@inscrits@ inscrits)',
//N
'nom'=>'Nom',#NEW
// 0
'obligatoire' => 'Champs obligatoire',
// S
'succes_envoi' => 'Lettre bien envoy&eacute;e !',
// V
'version_html' => 'Version HTML',
'version_txt' => 'Version Texte',
'voir' => 'Voir'
);
?>

73
lang/malettre_nl.php

@ -0,0 +1,73 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
$GLOBALS[$GLOBALS['idx_lang']] = array(
// A
'archives' => 'Archieven',
'archives_gerer' => 'Archieven beheren',
'archives_placer' => 'Brief wordt in archief geplaatst',
'autre' => 'Ander :',
'apercu' => 'Kort overzicht',
// C
'charger_derniere' => 'De laatste brief downloaden',
'config' => 'Configureren',
'consulter' => 'Raadplegen',
'compose_sujet' => 'Onderwerp van mail',
'compose_non_spip' => 'SPIP kortere niet gedragen',
'compose_contenu' => 'Inleidingstekst',
'compose_edito' => 'deze tekst uitgeven',
'compose_cochant' => 'Kies de artikelen die u in de brief wil publiceren door aan te duiden ...',
'compose_liste' => 'EN / OF <br />de nummers van de te publiceren artikelen aangeven gescheiden door een komma',
'compose_submit' => 'Aan de brief toevoegen',
'choix_lang' => 'De brief schrijven in ',
// D
'destinataires' => 'Ontvangers',
// E
'ecrire_nouvelle' => 'Een brief schrijven',
'ecrire_nouvelle2' => 'Een nieuwe brief schrijven',
'erreur_ecriture' => '<strong>fout:</strong> onmogelijk om de brief in het formaat HTML te cre·en, de parameter weg van toegang en de rechten in schrift te controleren (chmod 777)',
'erreur_ecriture_stockage' => 'Lijst van opslag van de brief onmogelijk te cre·en',
'erreur_envoi' => 'Fout bij de verzending van mail',
'erreur_no_dest' => 'Fout: geen ontvangers',
'erreur_lecture' => 'De fout: onmogelijk om het dossier te lezen',
'expediteur' => 'Afzender',
'email_seulement' => 'e-mail alleen',
'envoi' => 'Zenden',
'effacer' => 'Uitwissen',
'effacer_confirm' => 'Bent u zeker deze brief uit te willen wissen?',
// I
'info' => 'Deze bladzijde maakt het mogelijk om een brief op maat te cre·en door uw artikelen te kiezen.',
// L
'lang_toute' => 'alle talen',
'lettres_dispo' => 'beschikbare brief / brieven',
'lettre_du' => 'brief van',
'lettre_txt_auto' => 'Dit is een automatisch bericht - niet beantwoorden',
'lettre_txt_titre' => 'INFORMATIEBRIEF VAN',
'lettre_txt_html_dispo' => 'De versie HTML van deze brief is on-line beschikbaar: ',
'lettre_txt_unsub' => 'abonnement wijzigen: ',
'lettre_html_unsub' => 'zich voor de brief uitschrijven',
// M
'ma_lettre'=>'Mijn brief',
'ma_lettre_warning' => 'Als u er niet in slaagt deze brief juist te lezen, ga meteen naar',
// S
'succes_envoi' => 'de brief is goed vertsuurd',
// V
'version_html' => 'HTML Versie',
'version_txt' => 'Tekst versie',
'voir' => 'zien'
);
?>

14
lang/paquet-malettre_fr.php

@ -0,0 +1,14 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// P
'malettre_description' => 'Créer le contenu d\'une newsletter en s&#233;lectionnant manuellement édito, articles, événements
pour l\'envoyer ensuite à un gestionnaire de listes de type SYMPA, Mailman, ... ',
'malettre_slogan' => 'Compose une lettre d\'information sur mesure'
);
?>

1499
lib/class.phpmailer.php

File diff suppressed because it is too large Load Diff

37
malettre_administrations.php

@ -0,0 +1,37 @@
<?php
// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) return;
/**
* Installation/maj des tables gis
*
* @param string $nom_meta_base_version
* @param string $version_cible
*/
function malettre_upgrade($nom_meta_base_version, $version_cible){
$maj = array();
// Première installation
$maj['create'] = array(
array('maj_tables', array('spip_meslettres')),
array('malettre_creer_repertoire_documents')
);
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
function malettre_vider_tables() {
sql_drop_table("spip_meslettres");
effacer_meta('malettre_base_version');
}
function malettre_creer_repertoire_documents() {
include_spip('inc/getdocument');
creer_repertoire_documents('lettre');
}
?>

17
malettre_autoriser.php

@ -0,0 +1,17 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
// fonction pour le pipeline, n'a rien a effectuer
function malettre_autoriser(){}
// declarations d'autorisations
function autoriser_malettre_bouton_dist($faire, $type, $id, $qui, $opt) {
return autoriser('voir', 'malettre', $id, $qui, $opt);
}
function autoriser_malettre_voir_dist($faire, $type, $id, $qui, $opt) {
return (in_array($qui['statut'],array('0minirezo'))); // pour l'instant uniquement les admins
}
?>

25
malettre_fonctions.php

@ -0,0 +1,25 @@
<?php
//
// recuperer la page lettre avec le contexte
//
function malettre_get_contents($patron,$id_edito=0,$selection,$selection_eve,$lang) {
$date = date('Y-m-d');
$texte_patron = recuperer_fond(
"public/$patron",
array(
'date' => $date,
'id_edito'=>$id_edito,
'selection'=>$selection,
'selection_eve'=>$selection_eve,
'lang'=>$lang
)
);
return $texte_patron;
}
?>

25
paquet.xml

@ -0,0 +1,25 @@
<paquet
prefix="malettre"
categorie="communication"
version="3.0.0"
schema="1.0.0"
etat="test"
compatibilite="[3.0.0-dev;3.0.*]"
logo="images/malettre.png"
documentation="http://www.spip-contrib.net/Plugin-Ma-lettre"
>
<nom>Ma lettre</nom>
<!-- Compose sur mesure une lettre d'information -->
<auteur lien="http://www.erational.org">erational</auteur>
<copyright>2012</copyright>
<licence>GPL v3</licence>
<necessite nom="saisies" compatibilite="[1.19.0;]" />
<pipeline nom="declarer_tables_interfaces" inclure="base/malettre.php" />
<pipeline nom="declarer_tables_objets_sql" inclure="base/malettre.php" />
<pipeline nom="autoriser" inclure="malettre_autoriser.php" />
<menu nom="malettre" titre="malettre:ma_lettre" parent="menu_edition" icone="images/malettre-16.png" />
</paquet>

28
prive/listes/inc-lister-articlesmalettre.html

@ -0,0 +1,28 @@
<h5><:malettre:compose_cochant:></h5>
<B_liste>
<table class="spip" width="100%" border="0">
<tbody>
<BOUCLE_liste(ARTICLES)
{id_groupe ?}
{id_auteur ?}
{id_rubrique ?}
{id_mot ?}
{pagination 20}
{recherche ?}
{!par id_article}
>
<tr width="100%">
<td bgcolor="[(#COMPTEUR_BOUCLE|alterner{#fff,#eee})]"><a href="?exec=articles&amp;id_article=#ID_ARTICLE">n&#176;#ID_ARTICLE - #TITRE</a></td>
<td bgcolor="[(#COMPTEUR_BOUCLE|alterner{#fff,#eee})]" align="center"><input type="checkbox" value="#ID_ARTICLE" name="add[]">
</td></tr>
</BOUCLE_liste>
<!--<tr><td colspan="2"> FIXME l'ajax re-init tout le formulaire
<p class="pagination">#PAGINATION</p>
</td><tr>-->
<tr><td colspan="2">
<p><:malettre:compose_liste:>
<textarea name="art_csv" id="art_csv" cols="50" rows="5"></textarea>
</p>
</td></tr>
</tbody>
</table> </B_liste>

33
prive/listes/inc-lister-evenementsmalettre.html

@ -0,0 +1,33 @@
<B_liste>
<h5><:malettre:compose_cochant_eve:></h5>
<table class="spip" width="100%" border="0">
<tbody>
<BOUCLE_liste(EVENEMENTS)
{id_auteur ?}
{id_rubrique ?}
{id_mot ?}
{pagination 15}
{recherche ?}
{!par id_evenement}
{statut=publie}
>
<tr width="100%">
<td bgcolor="[(#COMPTEUR_BOUCLE|alterner{#fff,#eee})]"><a href="?exec=evenements_edit&id_evenement=#ID_EVENEMENT">n&#176;#ID_EVENEMENT - #TITRE </a>[- <small>(#DESCRIPTIF|couper{30,...})</small>]</td>
<td bgcolor="[(#COMPTEUR_BOUCLE|alterner{#fff,#eee})]" align="center"><input type="checkbox" value="#ID_EVENEMENT" name="addeve[]">
</td></tr>
</BOUCLE_liste>
<!--<tr><td colspan="2">
<p class="pagination">#PAGINATION</p>
</td><tr> -->
<tr><td colspan="2">
<p><:malettre:compose_liste_eve:>
<textarea name="eve_csv" id="eve_csv" cols="50" rows="5"></textarea>
</p>
</td></tr>
</tbody>
</table>
</B_liste>

3
prive/squelettes/contenu/configurer_malettre.html

@ -0,0 +1,3 @@
<div class="ajax">
#FORMULAIRE_CONFIGURER_MALETTRE
</div>

10
prive/squelettes/contenu/malettre.html

@ -0,0 +1,10 @@
[(#REM)
page composer lettre
]
[(#AUTORISER{voir, malettre})
<div class='ajax'>
#FORMULAIRE_EDITER_MALETTRE
</div>
]

12
prive/squelettes/contenu/malettre_archive.html

@ -0,0 +1,12 @@
[(#REM)
page archive lettre
]
[(#AUTORISER{voir, malettre})
<h1 class="grostitre"><:malettre:archives:></h1>
<div class='ajax'>
<INCLURE{fond=inclure/liste_lettre,env,ajax} />
</div>
]

10
prive/squelettes/contenu/malettre_envoi.html

@ -0,0 +1,10 @@
[(#REM)
page envoi lettre
]
[(#AUTORISER{voir, malettre})
<div class='ajax'>
#FORMULAIRE_ENVOI_MALETTRE
</div>
]

9
prive/squelettes/navigation/malettre.html

@ -0,0 +1,9 @@
[(#BOITE_OUVRIR{[(#CHEMIN_IMAGE{malettre-24.png}|balise_img{'',cadre-icone})],'simple'})]
<p><:malettre:info:></p>
<ul>
<!--<li><a href="#URL_ECRIRE{malettre}"><:malettre:ecrire_nouvelle:></a></li>-->
<li><a href="#URL_ECRIRE{malettre_envoi}"><:malettre:charger_derniere:></a></li>
<li><a href="#URL_ECRIRE{malettre_archive}"><:malettre:archives_gerer:></a></li>
<li><a href="#URL_ECRIRE{configurer_malettre}"><:malettre:config:></a></li>
</ul>
#BOITE_FERMER

6
prive/squelettes/navigation/malettre_archive.html

@ -0,0 +1,6 @@
[(#BOITE_OUVRIR{[(#CHEMIN_IMAGE{malettre-24.png}|balise_img{'',cadre-icone})],'simple'})]
<p><:malettre:info_archive:></p>
<ul>
<li><a href="#URL_ECRIRE{malettre}"><:malettre:ecrire_nouvelle:></a></li>
</ul>
#BOITE_FERMER

6
prive/squelettes/navigation/malettre_envoi.html

@ -0,0 +1,6 @@
[(#BOITE_OUVRIR{[(#CHEMIN_IMAGE{malettre-24.png}|balise_img{'',cadre-icone})],'simple'})]
<p><:malettre:info_envoi:></p>
<ul>
<li><a href="#URL_ECRIRE{malettre}"><:malettre:ecrire_nouvelle:></a></li>
</ul>
#BOITE_FERMER

BIN
prive/themes/spip/images/malettre-16.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 520 B

BIN
prive/themes/spip/images/malettre-24.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

90
public/malettre.html

@ -0,0 +1,90 @@
[(#REM)
squelette de la newsletter au format HTML
ce squelette pour etre surcharge pour s'adapter à vos besoins
parametre:
- date
- id_edito: id de l'article edito
- selection: id des articles selectionnes (separe par une virgule)
le code HTML est archaique pour assurer l'affichage dans les webmails et logiciels emails
]#CACHE{0}
#HTTP_HEADER{Content-Type: text/html}[(#REM)pour supprimer les boutons admin]
<!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" dir="ltr" lang="#LANG">
<head>
<title>#NOM_SITE_SPIP</title>
<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET" />
<style type="text/css">a {color:#57B2FF;}</style>
</head>
<body style="margin:0;padding:0;">
<table width="100%" bgcolor="#FFFFFF" border="0" style="margin:0;padding:0;">
<tr>
<td>&nbsp;</td>
<td width="650">
<!-- contenu -->
<div style="margin:1em 0;">
<div style="float:right;width:120px;padding:10px;margin:20px 0 0 0;background:#4CBDC1;font-family:Arial;font-size:1em;color:#FFFFFF;font-weight:bold;">[(#DATE|affdate_mois_annee)]</div>
<a href="#URL_SITE_SPIP"><img src="[(#CHEMIN{images/banner_newsletter_defaut.png}|url_absolue)]" alt="" border="0" /></a>
</div>
[(#REM) edito]
<BOUCLE_edito(ARTICLES){id_article=#ENV{id_edito}}>
<div style="text-align:justify;margin-bottom:0.4em;padding:5px 10px 10px 10px;background:#fafafa;">
[<div style="float:right;padding:10px 0 2px 15px;"><img src="(#LOGO_ARTICLE|image_reduire{0,110}|image_reduire{110,0}|extraire_attribut{src}|url_absolue)" alt="" border="0" /></div>]
<h2 style="margin:0;padding:0;font-size:1em"><a href="[(#URL_ARTICLE|url_absolue))]" style="font-family:Arial;color:#A5B152;padding-left:0px;text-decoration:none;">#TITRE</a></h2>
[<div style="font-family:Arial;font-size:0.8em;color:#848484;">(#TEXTE|image_reduire{600}|liens_absolus)</div>]
</div>
</BOUCLE_edito>
<div style="clear:both;"></div>
[(#REM) selection d'articles]
#SET{selection,#ENV**{selection}|explode{","}}
<BOUCLE_selection_bonux(POUR){tableau #GET{selection}}><BOUCLE_artx(ARTICLES){id_article=#VALEUR}>
<div style="clear:both;border-top:1px solid #ededed;"></div>
<div style="text-align:justify;margin-bottom:0.4em;padding:5px 10px 10px 10px;">
[<div style="float:right;padding:10px 0 2px 15px;"><img src="(#LOGO_ARTICLE|image_reduire{0,110}|image_reduire{110,0}|extraire_attribut{src}|url_absolue)" alt="" border="0" /></div>]
<h2 style="margin:0;padding:0;font-size:1em"><a href="[(#URL_ARTICLE|url_absolue))]" style="font-family:Arial;color:#A5B152;padding-left:0px;text-decoration:none;">#TITRE</a></h2>
[<div style="font-family:Arial;font-size:0.8em;color:#848484;">(#INTRODUCTION)</div><br />]
<a href="[(#URL_ARTICLE|url_absolue))]" style="color:#57B2FF;font-family:Arial;font-size:0.8em;"><:lire_en_ligne:></a>
</div>
</BOUCLE_artx></BOUCLE_selection_bonux>
<div style="clear:both;"></div>
[(#REM) selection d'evenements)]
#SET{selection_eve,#ENV**{selection_eve}|explode{","}}
<B_eveselection_bonux>
<h3 style="font-family:Arial;font-size:1.2em;color:#666;"><:agenda:agenda:></h3>
<table width="600" bgcolor="#FFFFFF" border="0" style="font: 12px Arial, Helvetica, sans-serif;margin:0.4em 0;padding:0;">
<BOUCLE_eveselection_bonux(POUR){tableau #GET{selection_eve}}><BOUCLE_eveartx(EVENEMENTS){id_evenement=#VALEUR}>
#INCLURE{fond=inclure/agenda_lettre,id_evenement}
</BOUCLE_eveartx></BOUCLE_eveselection_bonux>
</table>
</B_eveselection_bonux>
<!-- pied -->
<div style="width:700px;padding:5px;background:#F0EEE1;font-family:Arial;font-size:0.8em;color:#333333;">
<strong>#NOM_SITE_SPIP</strong><br />
[(#DESCRIPTIF_SITE_SPIP)]
<a href="#URL_SITE_SPIP" style="color:#000000;">#URL_SITE_SPIP</a>
</div>
<!-- #pied -->
<!-- #contenu -->
</td>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>

55
public/malettre_txt.html

@ -0,0 +1,55 @@
[(#REM)
squelette de la newsletter au format texte
parametre:
- date
- id_edito: id de l'article edito
- selection: id des articles selectionnes (separe par une virgule)
]#CACHE{0}
#HTTP_HEADER{Content-Type: text/plain;}[(#REM)pour supprimer les boutons admin ]
Ceci est une message automatique - ne pas repondre
--------------------------------------------------------------------
LETTRE D'INFORMATION #NOM_SITE_SPIP
--------------------------------------------------------------------
<B_edito>
*********************************
EDITO
*********************************
<BOUCLE_edito(ARTICLES){id_article=#ENV{id_edito}}>
[(#TITRE|textebrut)]
-------------------------------------------------
[(#TEXTE|liens_absolus|couper{300}|PtoBR|textebrut)]
#URL_SITE_SPIP/[(#URL_ARTICLE|substr{3})]
</BOUCLE_edito>
#SET{selection,#ENV**{selection}|explode{","}}
<BOUCLE_selection_bonux(POUR){tableau #GET{selection}}><BOUCLE_artx(ARTICLES){id_article=#VALEUR}>
[(#TITRE|textebrut)]
-------------------------------------------------
[(#INTRODUCTION|liens_absolus|couper{300}|PtoBR|textebrut)]
[(#URL_ARTICLE|url_absolue)]
</BOUCLE_artx></BOUCLE_selection_bonux>
#SET{selection_eve,#ENV**{selection_eve}|explode{","}}
<B_eveselection_bonux>
*********************************
<:agenda:agenda:>
<BOUCLE_eveselection_bonux(POUR){tableau #GET{selection_eve}}><BOUCLE_eveartx(EVENEMENTS){id_evenement=#VALEUR}>
[(#TITRE|textebrut)]
-------------------------------------------------
[(#DATE_DEBUT|agenda_affdate_debut_fin{#DATE_FIN,''})]
[(#DESCRIPTIF|liens_absolus|couper{300}|PtoBR|textebrut)]
[(#URL_EVENEMENT|url_absolue)]
</BOUCLE_eveartx></BOUCLE_eveselection_bonux>
--
#NOM_SITE_SPIP
#URL_SITE_SPIP