Merge branch 'master' of https://git.gamuza.fr/spip/gamumail
This commit is contained in:
commit
2a99d36d52
30 changed files with 1142 additions and 192 deletions
110
README.md
110
README.md
|
@ -1,5 +1,5 @@
|
|||
# gamuMail
|
||||
> P.O.C pour généraliser un formulaire d'envoi de message
|
||||
> formulaire d'envoi de messages configurables
|
||||
## Il gere nativement :
|
||||
* Pour
|
||||
* Cc en meta : **gamumail/mail_cc**
|
||||
|
@ -13,9 +13,9 @@
|
|||
## Il gere des modèles de contenu pour :
|
||||
* Sujet
|
||||
* Texte
|
||||
* ID documents joints (spip_documents)
|
||||
---
|
||||
|
||||
* Chaque modèle à un identifiant textuel : **slug** qui doit etre unique. Il ne peut etre creer / modifié QUE par les webmestres
|
||||
* Chaque modèle à un identifiant textuel : **slug** qui doit etre unique. Il ne peut etre créé / modifié QUE par les webmestres
|
||||
* Pour gerer ses modèles, il faut inclure dans une page :
|
||||
```html
|
||||
<INCLURE{fond=inclure/gamumail_config,env}>
|
||||
|
@ -48,8 +48,29 @@ ex de fichier :
|
|||
* gamumail/SLUG_soustexte.html -> sous le contenu du mail, avant les pièces jointes
|
||||
* gamumail/SLUG_fichier.html -> à la fin du formulaire
|
||||
|
||||
### aide à la rédaction du contenu:
|
||||
- le fichier **gamumail/remplacement_slugs.html** (surchargeable donc) s'affiche en bas de la page de configuration des modèles **inclure/gamumail_config.html**
|
||||
et du formulaire d'envoi **formulaires/gamumail.html** : il permet de lister les remplacements effectués pour **tous les modèles**
|
||||
(= ceux fournis par le pipeline **remplacement_slugs**, cf ci-dessous)
|
||||
- une page de test des slugs est fournie à l'URL **...?page=test_slug&slug=mail_libre&dest=27**
|
||||
|
||||
### exemple de page d'envoi de mail en choisissant un slug parmi ceux existant :
|
||||
```html
|
||||
[(#AUTORISER{modifier,souscripteur,#ENV{id_auteur}}|sinon_interdire_acces)]
|
||||
|
||||
<BOUCLE_dest(AUTEURS){id_auteur=#ENV{dest}}{tout}>
|
||||
<div class="inner">
|
||||
<div class="ajax mbl">
|
||||
<h1>Envoyer un mail à [(#PRENOM|ucfirst) ][(#NOM|ucfirst)]</h1>
|
||||
|
||||
<INCLURE{fond=inclure/envoyer_gamumail, env, id_destinataire=#ID_AUTEUR}>
|
||||
</div>
|
||||
</div>
|
||||
</BOUCLE_dest>
|
||||
```
|
||||
|
||||
### Dans le php
|
||||
#### 1. Appel du formualire
|
||||
#### 1. Appel du formulaire
|
||||
> Args du formulaire :
|
||||
>
|
||||
```php
|
||||
|
@ -57,15 +78,16 @@ ex de fichier :
|
|||
* formulaire générique pour envoyer des mails avec pieces attachés
|
||||
*
|
||||
* @param string $slug modele du mail a charger
|
||||
* @param int|string $auteur id_auteur ou email du destinataire
|
||||
* @param array $Tclient []['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email']
|
||||
* ou
|
||||
* ['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email']
|
||||
* @param array $Tpdf []['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]]
|
||||
* ou
|
||||
* ['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]]
|
||||
* @param string $destinataires = adresses mails et id_auteurs séparées par , ou en array
|
||||
* si un des destinataire est au format numérique, on considère que c'est un id_auteur et on va choper son mail dans spip_auteurs
|
||||
* @param array $Tclient = un ou plusieurs mails de destinataires sortis d'une table objet spécifique
|
||||
* de la forme []['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email'] ou ['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email']
|
||||
* @param array $Tpdf = un ou plusieurs fichiers PDF générés par spiPDF (le contexte permet la personnalisation du contenu)
|
||||
* []['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]] ou ['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]]
|
||||
* @param string $redirect
|
||||
* @param array $options
|
||||
* @param array $options = un gros fourre-tout sous forme d'un array
|
||||
* utilisé en particulier par les inclure HTML de gamumail/#SLUG_soustexte et gamumail/#SLUG_fichiers
|
||||
*
|
||||
* @return array $valeurs
|
||||
*/
|
||||
function formulaires_gamumail_charger_dist($slug, $auteur = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []){
|
||||
|
@ -78,6 +100,8 @@ Pour chaque étape, on peut modifier l'Array de sortie :
|
|||
* charger -> $valeurs
|
||||
* verifier -> $erreurs
|
||||
* traiter -> $corps (array du message envoyé à facteur)
|
||||
|
||||
Voir **gamumail_fonctions.php** pour les arguments des fonctions de surcharge + exemples
|
||||
|
||||
Pour cela, il faut creer une fonction du type (qui utilise les memes arg que les fonctions CVT + premier arg l'Array que l'on veut modifier):
|
||||
* pour charger : **gamumail/charger.php** pour tous les formulaires ou
|
||||
|
@ -94,7 +118,6 @@ function gamumail_SLUG_verifier($erreurs, $options = []){
|
|||
return $erreurs;
|
||||
}
|
||||
```
|
||||
* pour traiter : **gamumail/traiter.php** pour tous les formulaires ou
|
||||
* pour traiter : **gamumail/SLUG_traiter.php** avec une fonction ex:
|
||||
```php
|
||||
function gamumail_contrat_resa_traiter($corps, $options = []){
|
||||
|
@ -117,11 +140,70 @@ function gamumail_contrat_resa_traiter($corps, $options = []){
|
|||
return $corps;
|
||||
}
|
||||
```
|
||||
#### 3. Pipeline remplacements_slug pour le traitement du contenu des messages
|
||||
Pour les remplacements des @@ et tout autre traitement du texte des mails on utilisera le pipeline **remplacements_slug** qui utilise les arguments suivants :
|
||||
```php
|
||||
* @param array $flux données du pipeline :
|
||||
* $flux['data'] = $html
|
||||
* $flux['args']['slug'] = $slug
|
||||
* $flux['args']['destinataires'] = $destinataires
|
||||
* $flux['args']['options'] = $options
|
||||
* @return array $flux données du pipeline
|
||||
```
|
||||
|
||||
#### 3. Ajouter un header / footer dans notre content html
|
||||
#### 4. Ajouter un header / footer dans le content html
|
||||
on peut définir un header / footer pour les messages :
|
||||
* gamumail/html_header.html => header pour tous les mails
|
||||
* gamumail/html_footer.html => footer pour tous les mails
|
||||
* gamumail/SLUG_html_header.html => pour les mails du modele SLUG
|
||||
* gamumail/SLUG_html_footer.html => pour les mails du modele SLUG
|
||||
|
||||
|
||||
## API d'envoi de mails utilisant les slugs
|
||||
### fonction envoyer_gamumail()
|
||||
- exemple d'appel :
|
||||
```php
|
||||
$fonction = charger_fonction('envoyer_gamumail','inc');
|
||||
$options = [
|
||||
'debug' => false,
|
||||
'args' => ['nb_parts' => intval(_request('nombre'))],
|
||||
'pdfs' => [
|
||||
[
|
||||
'fichier' => 'pdf_attestation_souscription',
|
||||
'nom' => 'attestation_souscription_'.$id_souscription,
|
||||
'contexte' => ['id_souscription' => $id_souscription]
|
||||
],
|
||||
],
|
||||
];
|
||||
$fonction(lire_config('souscriptions/slug_souscription_validation'), $Tdest, $options);
|
||||
```
|
||||
- arguments :
|
||||
```php
|
||||
* @param string $slug
|
||||
* @param string|array $destinataires = adresses mails et id_auteur séparées par , ou en array
|
||||
* si un des destinataire est au format numérique, on considère que c'est un id_auteur et on va choper son mail dans spip_auteurs
|
||||
* @param array $options :
|
||||
* $options['debug' => true] pour afficher le $corps final sans envoyer le mail
|
||||
* $options['cci' => true] pour passer tous les destinataires en cci si il y en a plus qu'un
|
||||
* $options['args' => ['param_1' => 'valeur_1, 'param_2' => 'valeur_2', ...]]
|
||||
* $options['pdfs' => [...]] array des fichiers PDF générés à attacher dont les éléments peuvent être :
|
||||
* - soit un nom de squelette PDF
|
||||
* - soit un array avec 3 éléments (seul le 1er est obligatoire):
|
||||
* [ 'fichier' => 'squelette_PDF',
|
||||
* 'contexte' => ['parametre_url_1' => 'valeur_1', 'parametre_url_2' => 'valeur_2', ...]
|
||||
* 'nom' => 'nom_fichier_attache' ]
|
||||
```
|
||||
|
||||
## Outrepasser l'erreur de certificat auto-signé lors de devs en https local
|
||||
=> dans le mes_options.php du site mettre :
|
||||
```
|
||||
define('_DEBUG_AUTORISER', true);
|
||||
```
|
||||
ce qui permet d'activer les options de curl pour ne pas vérifier le certificat dans *charger_pdf.php* :
|
||||
```
|
||||
// pour une connexion https locale avec certificat auto-signé
|
||||
if (defined('_DEBUG_AUTORISER')) {
|
||||
curl_setopt($CurlConnect, CURLOPT_SSL_VERIFYHOST, false);
|
||||
curl_setopt($CurlConnect, CURLOPT_SSL_VERIFYPEER, false);
|
||||
}
|
||||
```
|
||||
|
|
39
action/creer_slug.php
Normal file
39
action/creer_slug.php
Normal file
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||
|
||||
/**
|
||||
* créer un slug Gamumail
|
||||
*
|
||||
* @plugin GamuMail
|
||||
*
|
||||
* @copyright 2020
|
||||
* @author cy_altern
|
||||
* @licence GNU/GPL
|
||||
*
|
||||
**/
|
||||
|
||||
include_spip('inc/editer');
|
||||
include_spip('action/editer_objet');
|
||||
include_spip('inc/autoriser');
|
||||
|
||||
function action_creer_slug_dist(){
|
||||
include_spip('inc/autoriser');
|
||||
if (!autoriser('creer','gamumail')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$set = [
|
||||
'slug' => '',
|
||||
'titre' => 'Le titre du modèle',
|
||||
'sujet' => 'Le sujet du mail',
|
||||
'texte' => 'Le texte du mail',
|
||||
'statut' => 'publie',
|
||||
];
|
||||
if ($id_slug = objet_inserer('gamumail', null, $set)) {
|
||||
sql_updateq('spip_gamumails', ['slug' => 'slug_'.$id_slug], 'id_gamumail = '.$id_slug);
|
||||
}
|
||||
|
||||
// Cache
|
||||
include_spip('inc/invalideur');
|
||||
suivre_invalideur("id='id_gamumail/$id_gamumail'");
|
||||
}
|
|
@ -6,17 +6,13 @@ function action_gamuform_add_pdf_dist(){
|
|||
return false;
|
||||
|
||||
include_spip('inc/autoriser');
|
||||
if (! autoriser("etre","connecte")) {
|
||||
if (!autoriser('modifier','gamumail')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$securiser_action = charger_fonction('securiser_action', 'inc');
|
||||
$arg = $securiser_action();
|
||||
$id_gamumail = $arg;
|
||||
include_spip('inc/autoriser');
|
||||
if (! autoriser("webmestre")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (intval($id_gamumail)) {
|
||||
sql_insertq('spip_gamumail_pdfs',['id_gamumail' => intval($id_gamumail)]);
|
||||
|
|
33
action/supprimer_slug.php
Normal file
33
action/supprimer_slug.php
Normal file
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||
|
||||
/**
|
||||
* supprimer un slug Gamumail
|
||||
*
|
||||
* @plugin GamuMail
|
||||
*
|
||||
* @copyright 2020
|
||||
* @author cy_altern
|
||||
* @licence GNU/GPL
|
||||
*
|
||||
**/
|
||||
|
||||
include_spip('inc/autoriser');
|
||||
|
||||
function action_supprimer_slug_dist(){
|
||||
include_spip('inc/autoriser');
|
||||
if (!autoriser('supprimer','gamumail')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$securiser_action = charger_fonction('securiser_action', 'inc');
|
||||
$arg = $securiser_action();
|
||||
$id_gamumail = intval($arg);
|
||||
if ($id_gamumail) {
|
||||
sql_delete('spip_gamumails','id_gamumail ='.$id_gamumail);
|
||||
}
|
||||
|
||||
// Cache
|
||||
include_spip('inc/invalideur');
|
||||
suivre_invalideur("id='id_gamumail/$id_gamumail'");
|
||||
}
|
35
action/switcher_slug_public.php
Normal file
35
action/switcher_slug_public.php
Normal file
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||
|
||||
/**
|
||||
* modifier la visibilité publique d'un slug Gamumail
|
||||
*
|
||||
* @plugin GamuMail
|
||||
*
|
||||
* @copyright 2020
|
||||
* @author cy_altern
|
||||
* @licence GNU/GPL
|
||||
*
|
||||
**/
|
||||
|
||||
include_spip('inc/autoriser');
|
||||
|
||||
function action_switcher_slug_public_dist(){
|
||||
include_spip('inc/autoriser');
|
||||
if (!autoriser('modifier','gamumail')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$securiser_action = charger_fonction('securiser_action', 'inc');
|
||||
$arg = $securiser_action();
|
||||
$id_gamumail = intval($arg);
|
||||
if ($id_gamumail) {
|
||||
$public = sql_getfetsel('public', 'spip_gamumails', 'id_gamumail ='.$id_gamumail);
|
||||
$set = $public == 'oui' ? ['public' => "non"] : ['public' => "oui"];
|
||||
sql_updateq('spip_gamumails', $set, 'id_gamumail ='.$id_gamumail);
|
||||
}
|
||||
|
||||
// Cache
|
||||
include_spip('inc/invalideur');
|
||||
suivre_invalideur("id='id_gamumail/$id_gamumail'");
|
||||
}
|
|
@ -52,7 +52,9 @@ function gamumail_declarer_tables_objets_sql($tables) {
|
|||
'titre' => 'varchar(255) NOT NULL DEFAULT ""',
|
||||
'sujet' => 'varchar(255) NOT NULL DEFAULT ""',
|
||||
'texte' => 'text NOT NULL DEFAULT ""',
|
||||
'id_docs' => 'text NOT NULL DEFAULT ""',
|
||||
'statut' => 'varchar(20) DEFAULT "0" NOT NULL',
|
||||
'public' => 'varchar(20) DEFAULT "oui" NOT NULL',
|
||||
'maj' => 'TIMESTAMP'
|
||||
),
|
||||
'key' => array(
|
||||
|
|
2
content/configuration_mails.html
Normal file
2
content/configuration_mails.html
Normal file
|
@ -0,0 +1,2 @@
|
|||
[(#AUTORISER{webmestre}|sinon_interdire_acces)]
|
||||
<INCLURE{fond=inclure/gamumail_config}{env}>
|
11
content/test_slug.html
Normal file
11
content/test_slug.html
Normal file
|
@ -0,0 +1,11 @@
|
|||
[(#AUTORISER{webmestre}|sinon_interdire_acces)]
|
||||
[(#REM)
|
||||
squelette pour tester un slug
|
||||
@paramètres :
|
||||
#ENV{slug} = nom du slug
|
||||
#ENV{dest} = string|array destinataire(s)
|
||||
|
||||
@return : le résultat de la fonction envoyer_gamumail() en mode debug
|
||||
|
||||
]
|
||||
[(#ENV{slug}|tester_slug{#ENV{dest}})]
|
20
controleurs/gamumail_nom_slug.html
Normal file
20
controleurs/gamumail_nom_slug.html
Normal file
|
@ -0,0 +1,20 @@
|
|||
#CACHE{0}
|
||||
|
||||
<BOUCLE_toto(GAMUMAILS){id_gamumail}>
|
||||
<fieldset>
|
||||
<div>
|
||||
<label for="slug">Identifiant du modèle (slug)<br><small>chiffres, lettres, _ (pas d'espaces)</small> </label>
|
||||
<input type="text" value="#SLUG" name="#ENV{name_slug}" id="slug" required pattern="[a-zA-Z0-9_]{6,40}" />
|
||||
</div>
|
||||
</fieldset>
|
||||
</BOUCLE_toto>
|
||||
<script type="text/javascript">
|
||||
jQuery(function() {
|
||||
$('#slug').on('keyup', function() {
|
||||
var reg = new RegExp('[^a-zA-Z0-9_]', 'g');
|
||||
var rep = $(this).val().replace(reg, '');
|
||||
$(this).val(rep);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</B_toto>
|
|
@ -1,4 +1,4 @@
|
|||
/* surrounding tag container */
|
||||
/* les styles de tag-editor */
|
||||
.tag-editor {
|
||||
list-style-type: none;
|
||||
padding: 0 5px 0 0;
|
||||
|
@ -59,7 +59,6 @@
|
|||
.tag-editor ::-ms-clear {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* tag style */
|
||||
.tag-editor .tag-editor-tag {
|
||||
/*padding-left: 5px; color: #46799b; background: #e0eaf1; white-space: nowrap;*/
|
||||
|
@ -72,7 +71,6 @@
|
|||
cursor: pointer;
|
||||
border-radius: 4px 0 0 4px;
|
||||
}
|
||||
|
||||
/* delete icon */
|
||||
/*.tag-editor .tag-editor-delete { background: #e0eaf1; cursor: pointer; border-radius: 0 2px 2px 0; padding-left: 3px; padding-right: 4px; }*/
|
||||
.tag-editor .tag-editor-delete {
|
||||
|
@ -101,7 +99,6 @@
|
|||
visibility: hidden;
|
||||
cursor: text;
|
||||
}
|
||||
|
||||
.tag-editor .tag-editor-tag.active {
|
||||
background: none !important;
|
||||
}
|
||||
|
@ -150,6 +147,7 @@
|
|||
display: none;
|
||||
}
|
||||
|
||||
/* les styles de gamumails */
|
||||
.formulaire_gamumail {
|
||||
padding-top: 0;
|
||||
}
|
||||
|
@ -162,17 +160,38 @@
|
|||
.editer_pour label {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
.editer_cc {
|
||||
display: flex;
|
||||
}
|
||||
.editer_cc label {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
.editer_cci {
|
||||
display: flex;
|
||||
}
|
||||
.editer_cci label {
|
||||
width: 50px;
|
||||
}
|
||||
.reponse_formulaire {
|
||||
padding: 1rem;
|
||||
margin-bottom: 2rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
.reponse_formulaire_erreur, .editer .erreur_message {
|
||||
background-color: #f7d1d1;
|
||||
border: solid 2px #f00;
|
||||
display: block;
|
||||
}
|
||||
.reponse_formulaire_ok {
|
||||
background-color: #c4ecd6;
|
||||
border: solid 2px #080;
|
||||
}
|
||||
.remplacements_slugs {
|
||||
margin-top: 3rem;
|
||||
}
|
||||
.formulaire_gamumail .boutons {
|
||||
margin-top: 3rem;
|
||||
}
|
||||
.formulaire_gamumail .btn {
|
||||
font-size: 3rem;
|
||||
}
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 142 KiB |
|
@ -1,11 +1,10 @@
|
|||
#CACHE{0}
|
||||
|
||||
<link rel="stylesheet" href="[(#CHEMIN{css/gamumail.css}|timestamp)]" type="text/css" media="screen" charset="utf-8">
|
||||
<link rel="stylesheet" href="[(#CHEMIN{css/gamumail.css}|timestamp)]" type="text/css" media="screen" charset="utf-8" />
|
||||
|
||||
<div class="formulaire_spip formgtulaire_#FORM">
|
||||
|
||||
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
|
||||
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
|
||||
<div class="formulaire_spip formulaire_#FORM">
|
||||
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
|
||||
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
|
||||
|
||||
<form name="formulaire_#FORM" action="#ENV{action}" method="post"><div>
|
||||
#ACTION_FORMULAIRE{#ENV{action}}
|
||||
|
@ -77,7 +76,7 @@
|
|||
|
||||
#SET{name,Tpdfs_ok}
|
||||
<B_pdf>
|
||||
<h2>Fichiers PDF envoyés</h2>
|
||||
<h2><:gamumail:pdf_envoyes:></h2>
|
||||
<div class="editer_groupe">
|
||||
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
|
||||
#SET{obli,"obligatoire"}
|
||||
|
@ -85,59 +84,58 @@
|
|||
<BOUCLE_pdf(DATA){source tableau, #ENV{TFichierpdfs}}>
|
||||
<div class="choix">
|
||||
<input type="checkbox" class="checkbox" name="#GET{name}[]" value="#VALEUR" id="#GET{name}_#COMPTEUR_BOUCLE" checked="checked" >
|
||||
<label for="#GET{name}_#COMPTEUR_BOUCLE">#VALEUR</label>
|
||||
[(#SET{url_pdf,[(#URL_PAGE{spipdf}|parametre_url{spipdf,#VALEUR})]})]
|
||||
<BOUCLE_options(DATA){source tableau, #ENV{options}}>
|
||||
[(#SET{url_pdf,[(#GET{url_pdf}|parametre_url{#CLE,#VALEUR})]})]
|
||||
</BOUCLE_options>
|
||||
<label for="#GET{name}_#COMPTEUR_BOUCLE">#VALEUR : <a href="#GET{url_pdf}">voir le PDF</a></label>
|
||||
</div>
|
||||
</BOUCLE_pdf>
|
||||
</div>
|
||||
</div>
|
||||
</B_pdf>
|
||||
|
||||
#SET{id_gamumail,0}
|
||||
#SET{name,Tid_doc}
|
||||
<BOUCLE_slug(GAMUMAILS){slug}{tout}> #SET{id_gamumail,#ID_GAMUMAIL} </BOUCLE_slug>
|
||||
<B_doc>
|
||||
<h2>Autres Fichiers attachés</h2>
|
||||
#SET{name,docs_spip}
|
||||
<h2><:gamumail:documents_attaches:></h2>
|
||||
<div class="editer_groupe">
|
||||
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
|
||||
#SET{obli,"obligatoire"}
|
||||
<div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
|
||||
<BOUCLE_doc(DOCUMENTS){id_gamumail=#GET{id_gamumail}}>
|
||||
<div class="choix">
|
||||
<input type="checkbox" class="checkbox" name="#GET{name}[]" value="#ID_DOCUMENT" id="#GET{name}_#ID_DOCUMENT" checked="checked" >
|
||||
<label for="#GET{name}_#ID_DOCUMENT">[(#TITRE|sinon{#FICHIER|basename})]</label>
|
||||
</div>
|
||||
</BOUCLE_doc>
|
||||
<div class="editer editer_[(#GET{name})][ (#GET{erreurs}|oui)erreur]">
|
||||
<div class="choix">
|
||||
[<span class="erreur_message">(#GET{erreurs})</span>]
|
||||
<label for="#GET{name}"><:gamumail:id_docs_attaches:></label>
|
||||
<input type="text" class="text" name="#GET{name}" value="[(#ENV{#GET{name}})]" id="#GET{name}" >
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</B_doc>
|
||||
|
||||
#SET{fichier,#SLUG|concat{_fichiers}}
|
||||
[(#CHEMIN{gamumail/#GET{fichier}.html}|oui)
|
||||
#SET{erreurs,#ENV**{erreurs}|table_valeur{Tid_doc}}
|
||||
[<span class="erreur_message">(#GET{erreurs})</span>]
|
||||
<INCLURE{fond=gamumail/#GET{fichier},env}>
|
||||
]
|
||||
|
||||
|
||||
<div class="boutons">
|
||||
<button type="submit" class="btn"><:gamumail:envoyer:></button>
|
||||
</div>
|
||||
</div></form>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="[(#CHEMIN{js/jquery.tag-editor.min.js}|timestamp)]" type="text/javascript"></script>
|
||||
<script src="[(#CHEMIN{js/jquery.caret.min.js}|timestamp)]" type="text/javascript"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
jQuery(function() {
|
||||
gamumail();
|
||||
//onAjaxLoad(gamumail);
|
||||
|
||||
function gamumail(){
|
||||
$(".tagEditor").tagEditor({
|
||||
delimiter: ',; '
|
||||
});
|
||||
var navigateur = navigator.platform.toUpperCase().slice(0, 3);
|
||||
if (navigateur !== "MAC") {
|
||||
$(".tagEditor").tagEditor({
|
||||
delimiter: ',; '
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
|
|
|
@ -1,28 +1,38 @@
|
|||
<?php
|
||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||
|
||||
|
||||
include_spip('inc/filtres');
|
||||
|
||||
/**
|
||||
* formulaire générique pour envoyer des mails avec pieces attachés
|
||||
*
|
||||
* @param string $slug modele du mail a charger
|
||||
* @param int|string $auteur id_auteur ou email du destinataire
|
||||
* @param array $Tclient []['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email'] ou ['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email']
|
||||
* @param array $Tpdf []['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]] ou ['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]]
|
||||
* @param string $destinataires = adresses mails et id_auteurs séparées par , ou en array
|
||||
* si un des destinataire est au format numérique, on considère que c'est un id_auteur et on va choper son mail dans spip_auteurs
|
||||
* @param array $Tclient = un ou plusieurs mails de destinataires sortis d'une table objet spécifique
|
||||
* de la forme []['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email'] ou ['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email']
|
||||
* @param array $Tpdf = un ou plusieurs fichiers PDF générés par spiPDF (le contexte permet la personnalisation du contenu)
|
||||
* []['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]] ou ['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]]
|
||||
* @param string $redirect
|
||||
* @param array $options
|
||||
* @param array $options = un gros fourre-tout sous forme d'un array
|
||||
* utilisé en particulier par les inclure HTML de gamumail/#SLUG_soustexte et gamumail/#SLUG_fichiers
|
||||
*
|
||||
* @return array $valeurs
|
||||
*
|
||||
*/
|
||||
function formulaires_gamumail_charger_dist($slug, $auteur = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []){
|
||||
|
||||
function formulaires_gamumail_charger_dist($slug, $destinataires = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []){
|
||||
$Tmails = [];
|
||||
if (intval($auteur)) {
|
||||
$Tmails[] = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.intval($auteur));
|
||||
} elseif (is_string($auteur)) {
|
||||
if (email_valide($auteur)) {
|
||||
$Tmails[] = $auteur;
|
||||
if (!is_array($destinataires)) {
|
||||
$destinataires = explode(',', $destinataires);
|
||||
}
|
||||
foreach ($destinataires as $dest) {
|
||||
if (is_numeric($dest)) {
|
||||
if ($mail = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.$dest)) {
|
||||
$Tmails[] = $mail;
|
||||
}
|
||||
}
|
||||
elseif (email_valide($dest)) {
|
||||
$Tmails[] = $dest;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -50,7 +60,7 @@ function formulaires_gamumail_charger_dist($slug, $auteur = 0, $Tclient = [], $T
|
|||
}
|
||||
}
|
||||
|
||||
$gamuMail = sql_fetsel('sujet, texte', 'spip_gamumails', 'slug='.sql_quote($slug));
|
||||
$gamuMail = sql_fetsel('sujet, texte, id_docs', 'spip_gamumails', 'slug='.sql_quote($slug));
|
||||
$valeurs = array(
|
||||
"slug" => $slug,
|
||||
'sujet' => $gamuMail['sujet'],
|
||||
|
@ -60,71 +70,148 @@ function formulaires_gamumail_charger_dist($slug, $auteur = 0, $Tclient = [], $T
|
|||
'cci' => lire_config('gamumail/mail_cci'),
|
||||
'TFichierpdfs' => $TFichierPdf,
|
||||
'Tpdfs_ok' => [],
|
||||
'Tid_doc' => [],
|
||||
'docs_spip' => $gamuMail['id_docs'],
|
||||
'Tid_fichiers' => [],
|
||||
'options' => $options
|
||||
);
|
||||
|
||||
// surcharges charger
|
||||
if ($f = charger_fonction('charger', 'gamumail', true)) {
|
||||
$valeurs = $f($valeurs, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect);
|
||||
$valeurs = $f($valeurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);
|
||||
}
|
||||
if ($f = charger_fonction($slug . '_charger', 'gamumail', true)) {
|
||||
$valeurs = $f($valeurs, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect);
|
||||
$valeurs = $f($valeurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);
|
||||
}
|
||||
|
||||
return $valeurs;
|
||||
}
|
||||
|
||||
function formulaires_gamumail_verifier_dist($slug, $auteur = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []) :Array{
|
||||
|
||||
function formulaires_gamumail_verifier_dist($slug, $destinataires = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []) :Array{
|
||||
$erreurs = array();
|
||||
//champs obligatoire
|
||||
foreach (array ('pour', 'sujet', 'texte') as $obligatoire) {
|
||||
if (!_request($obligatoire)) $erreurs[$obligatoire] = 'Ce champs est obligatoire';
|
||||
}
|
||||
|
||||
// le slug est il OK ?
|
||||
if (preg_match('/[^a-zA-Z0-9_\-]/', $slug)) {
|
||||
$erreurs['message_erreur'] = _T("gamumail:erreur_format_slug");
|
||||
}
|
||||
$res = sql_fetsel('slug', 'spip_gamumails', 'slug = "'.$slug.'"');
|
||||
if (!$res) {
|
||||
$erreurs['message_erreur'] = _T("gamumail:pas_de_slug");
|
||||
}
|
||||
|
||||
// vérif des destinataires
|
||||
$Tid_erreur = $Tmails_erreur = [];
|
||||
$pour = explode(',', _request('pour'));
|
||||
foreach ($pour as $dest) {
|
||||
if (is_numeric($dest)) {
|
||||
if (!$mail = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.$dest)) {
|
||||
$Tid_erreur[] = $dest;
|
||||
}
|
||||
}
|
||||
elseif (!email_valide($dest)) {
|
||||
$Tmails_erreur[] = $dest;
|
||||
}
|
||||
}
|
||||
if (count($Tid_erreur)) {
|
||||
$erreurs['pour'] = _T("gamumail:id_destinataires_sans_mails", ['ids_erreur' => join(', ', $Tid_erreur)]).' ';
|
||||
}
|
||||
if (count($Tmails_erreur)) {
|
||||
$erreurs['pour'] .= _T("gamumail:mails_destinataires_en_erreur", ['mails_erreur' => join(', ', $Tmails_erreur)]);
|
||||
}
|
||||
|
||||
// les id_document attachés sont-ils OK ?
|
||||
$docs_spip = [];
|
||||
if (_request('docs_spip') != '') {
|
||||
$docs_spip = explode(',', _request('docs_spip'));
|
||||
}
|
||||
if (is_array($docs_spip) and count($docs_spip)) {
|
||||
$docs_spip_erreurs = [];
|
||||
foreach($docs_spip as $id_doc) {
|
||||
if (intval($id_doc) != $id_doc
|
||||
OR !sql_getfetsel('id_document', 'spip_documents', 'id_document='.$id_doc)) {
|
||||
$docs_spip_erreurs[] = $id_doc;
|
||||
}
|
||||
}
|
||||
if (count($docs_spip_erreurs)) {
|
||||
$erreurs['docs_spip'] = _T("gamumail:id_docs_en_erreur", ['id_docs_erreurs' => join(', ', $docs_spip_erreurs)]);
|
||||
}
|
||||
}
|
||||
|
||||
// les fichiers envoyés par un éventuel inclure gamumail/#SLUG_fichiers.html sont ils OK ?
|
||||
$Tid_doc = [];
|
||||
$Tid_doc = _request('Tid_doc');
|
||||
if (is_array($Tid_doc) and count($Tid_doc)) {
|
||||
$Tid_doc_erreurs = [];
|
||||
foreach($Tid_doc as $id_doc) {
|
||||
if (intval($id_doc) != $id_doc
|
||||
OR !sql_getfetsel('id_document', 'spip_documents', 'id_document='.$id_doc)) {
|
||||
$Tid_doc_erreurs[] = $id_doc;
|
||||
}
|
||||
}
|
||||
if (count($Tid_doc_erreurs)) {
|
||||
$erreurs['Tid_doc'] = _T("gamumail:id_docs_en_erreur", ['id_docs_erreurs' => join(', ', $Tid_doc_erreurs)]);
|
||||
}
|
||||
}
|
||||
|
||||
// surcharges verifier
|
||||
if ($f = charger_fonction('verifier', 'gamumail', true)) {
|
||||
$erreurs = $f($erreurs, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect);
|
||||
$erreurs = $f($erreurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);
|
||||
}
|
||||
if ($f = charger_fonction($slug . '_verifier', 'gamumail', true)) {
|
||||
$erreurs = $f($erreurs, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect);
|
||||
$erreurs = $f($erreurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);
|
||||
}
|
||||
|
||||
return $erreurs;
|
||||
}
|
||||
|
||||
function formulaires_gamumail_traiter_dist($slug, $auteur = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []) :Array{
|
||||
|
||||
function formulaires_gamumail_traiter_dist($slug, $destinataires = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []) :Array{
|
||||
include_spip('inc/texte');
|
||||
include_spip('classes/facteur');
|
||||
|
||||
$retour = array();
|
||||
|
||||
$pour = _request('pour');
|
||||
$cc = _request('cc');
|
||||
$cci = _request('cci');
|
||||
$sujet = _request('sujet');
|
||||
$html = propre(_request('texte'));
|
||||
$Tid_doc = _request('Tid_doc');
|
||||
$Tpdfs_ok = _request('Tpdfs_ok');
|
||||
$texte = facteur_mail_html2text($html);
|
||||
$pour = _request('pour');
|
||||
$cc = _request('cc');
|
||||
$cci = _request('cci');
|
||||
$sujet = _request('sujet');
|
||||
$html = propre(_request('texte'));
|
||||
$docs_spip = _request('docs_spip');
|
||||
$Tpdfs_ok = _request('Tpdfs_ok');
|
||||
$Tid_doc = _request('Tid_doc');
|
||||
$texte = facteur_mail_html2text($html);
|
||||
|
||||
$pour = explode(',', $pour);
|
||||
$cc = explode(',', $cc);
|
||||
$cci = explode(',', $cci);
|
||||
|
||||
$destinataires = [];
|
||||
foreach ($pour as $dest) {
|
||||
if (is_numeric($dest)) {
|
||||
if ($mail = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.$dest)) {
|
||||
$destinataires[] = $mail;
|
||||
}
|
||||
}
|
||||
elseif (email_valide($dest)) {
|
||||
$destinataires[] = $dest;
|
||||
}
|
||||
}
|
||||
|
||||
$pieces_jointes = [];
|
||||
|
||||
if ($f = charger_fonction('traiter_av_pdf', 'gamumail', true)) {
|
||||
$options = $f($options, $auteur, $Tclient, $Tpdf);
|
||||
$options = $f($options, $destinataires, $Tclient, $Tpdf);
|
||||
}
|
||||
if ($f = charger_fonction($slug . '_traiter_av_pdf', 'gamumail', true)) {
|
||||
$options = $f($options, $auteur, $Tclient, $Tpdf);
|
||||
$options = $f($options, $destinataires, $Tclient, $Tpdf);
|
||||
}
|
||||
|
||||
// les documents joints
|
||||
if (!empty($Tid_doc)) {
|
||||
foreach ($Tid_doc as $id_document) {
|
||||
// les documents par id_document
|
||||
$docs_spip = ($docs_spip != '' ? explode(',', $docs_spip) : []);
|
||||
if (!empty($docs_spip)) {
|
||||
foreach ($docs_spip as $id_document) {
|
||||
$Tdocument = sql_fetsel('titre,fichier,extension','spip_documents','id_document='.intval($id_document));
|
||||
$destination = _DIR_IMG.$Tdocument['fichier'];
|
||||
$extension = $Tdocument['extension'];
|
||||
|
@ -143,6 +230,27 @@ function formulaires_gamumail_traiter_dist($slug, $auteur = 0, $Tclient = [], $T
|
|||
}
|
||||
}
|
||||
|
||||
// les documents par Tid_doc envoyés depuis inclure gamumail/#SLUG_fichiers.html
|
||||
if (!empty($Tid_doc)) {
|
||||
foreach ($Tid_doc as $id_doc) {
|
||||
$Tdocs = sql_fetsel('titre,fichier,extension','spip_documents','id_document='.intval($id_doc));
|
||||
$destination = _DIR_IMG.$Tdocs['fichier'];
|
||||
$extension = $Tdocs['extension'];
|
||||
if ($Tdocs['titre']) {
|
||||
$nom_fichier = $Tdocs['titre'] .".".$extension;
|
||||
} else {
|
||||
$nom_fichier = basename($Tdocs['fichier']);
|
||||
}
|
||||
$type_mime = bigup_get_mime_type_extension($extension);
|
||||
$pieces_jointes[] = [
|
||||
'chemin' => $destination,
|
||||
'nom' => $nom_fichier,
|
||||
'encodage' => 'base64',
|
||||
'mime' => $type_mime
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// les pdfs
|
||||
$Tpdf_dell = [];
|
||||
if (!empty($Tpdfs_ok) and is_array($Tpdfs_ok)) {
|
||||
|
@ -174,22 +282,30 @@ function formulaires_gamumail_traiter_dist($slug, $auteur = 0, $Tclient = [], $T
|
|||
}
|
||||
|
||||
$html_header = '';
|
||||
|
||||
if(find_in_path('gamumail/html_header.html')){
|
||||
$html_header = recuperer_fond('gamumail/html_header', $options);
|
||||
} elseif (find_in_path($slug . '_html_header.html')) {
|
||||
if (find_in_path('gamumail/'.$slug .'_html_header.html')) {
|
||||
$html_header = recuperer_fond('gamumail/'.$slug . '_html_header', $options);
|
||||
}
|
||||
elseif(find_in_path('gamumail/html_header.html')) {
|
||||
$html_header = recuperer_fond('gamumail/html_header', $options);
|
||||
}
|
||||
|
||||
$html_footer = '';
|
||||
if(find_in_path('gamumail/html_footer.html')){
|
||||
$html_footer = recuperer_fond('gamumail/html_footer', $options);
|
||||
}elseif (find_in_path($slug . '_html_footer.html')) {
|
||||
if (find_in_path('gamumail/'.$slug . '_html_footer.html')) {
|
||||
$html_footer = recuperer_fond('gamumail/'.$slug . '_html_footer', $options);
|
||||
}
|
||||
|
||||
elseif (find_in_path('gamumail/html_footer.html')) {
|
||||
$html_footer = recuperer_fond('gamumail/html_footer', $options);
|
||||
}
|
||||
$html = $html_header . $html . $html_footer;
|
||||
|
||||
// pipeline pour les traitement du contenu des slugs spécifiques de chaque plugin
|
||||
$args = $options;
|
||||
$args['slug'] = $slug;
|
||||
$args['destinataires'] = $destinataires;
|
||||
$html = pipeline('remplacements_slug', array(
|
||||
'args' => $args,
|
||||
'data' => $html
|
||||
));
|
||||
$texte = facteur_mail_html2text($html);
|
||||
$corps = [
|
||||
'html' => $html,
|
||||
'texte' => $texte,
|
||||
|
@ -198,20 +314,25 @@ function formulaires_gamumail_traiter_dist($slug, $auteur = 0, $Tclient = [], $T
|
|||
'pieces_jointes' => $pieces_jointes
|
||||
];
|
||||
|
||||
/*
|
||||
if ($f = charger_fonction('traiter', 'gamumail', true)) {
|
||||
$corps = $f($corps, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect);
|
||||
$corps = $f($corps, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);
|
||||
}
|
||||
*/
|
||||
// appel d'une éventuelle fonction de traitement du contenu spécifique du slug
|
||||
if ($f = charger_fonction($slug . '_traiter', 'gamumail', true)) {
|
||||
$corps = $f($corps, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect);
|
||||
$corps = $f($corps, $options, $slug, $destinataires);
|
||||
}
|
||||
|
||||
$envoyer_mail = charger_fonction('envoyer_mail', 'inc/');
|
||||
$ok = $envoyer_mail($pour, $sujet, $corps);
|
||||
$ok = $envoyer_mail($destinataires, $sujet, $corps);
|
||||
|
||||
if (!$ok) {
|
||||
spip_log("Erreur d'envoi du mail : ","roc_mail");
|
||||
spip_log($corps,"roc");
|
||||
spip_log("Erreur d'envoi du mail : ","gamumail");
|
||||
spip_log($corps,"gamumail");
|
||||
$retour['message_erreur'] = _T("gamumail:erreur_envoi_mail");
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
$retour['message_ok'] = _T('gamumail:mail_envoye');
|
||||
}
|
||||
|
||||
|
@ -222,15 +343,9 @@ function formulaires_gamumail_traiter_dist($slug, $auteur = 0, $Tclient = [], $T
|
|||
}
|
||||
}
|
||||
|
||||
if ($redirect) {
|
||||
if ($redirect AND $redirect != '') {
|
||||
$retour['redirect'] = $redirect;
|
||||
}
|
||||
|
||||
return $retour;
|
||||
}
|
||||
|
||||
function gamumail_supprimer_si_vide($v){
|
||||
if (!empty($v)) {
|
||||
return $v;
|
||||
}
|
||||
}
|
||||
|
|
3
gamumail/html_footer.html
Normal file
3
gamumail/html_footer.html
Normal file
|
@ -0,0 +1,3 @@
|
|||
</div>
|
||||
</body>
|
||||
</html>
|
12
gamumail/html_header.html
Normal file
12
gamumail/html_header.html
Normal file
|
@ -0,0 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>#NOM_SITE_SPIP</title>
|
||||
</head>
|
||||
<body style="background-color:rgb(255, 255, 255)">
|
||||
<div class="mail">
|
||||
[<img src="(#LOGO_SITE_SPIP|image_reduire{200}|extraire_attribut{src}|url_absolue)" >]
|
||||
<br>
|
||||
<br>
|
12
gamumail/remplacements_slugs.html
Normal file
12
gamumail/remplacements_slugs.html
Normal file
|
@ -0,0 +1,12 @@
|
|||
[(#REM)
|
||||
la liste des remplacements joués dans tous les slugs GamuMail (à surcharger par site)
|
||||
inclure pour la page de configuration des mails
|
||||
|
||||
]
|
||||
<div class="remplacements_slugs">
|
||||
<h3 class="spip"><:gamumail:remplacements_disponibles:></h3>
|
||||
<ul class="">
|
||||
<li><strong>@@exemple_chaine@@</strong> : remplacement de la chaine</li>
|
||||
</ul>
|
||||
<em><:gamumail:avertissement_remplacements:></em>
|
||||
</div>
|
|
@ -26,32 +26,40 @@ if (!defined('_ECRIRE_INC_VERSION')) {
|
|||
function gamumail_upgrade($nom_meta_base_version, $version_cible) {
|
||||
$maj = array();
|
||||
|
||||
$maj['create'] = array(array('maj_tables', array('spip_gamumails')));
|
||||
$maj['create'] = array(
|
||||
array('maj_tables', array('spip_gamumails')),
|
||||
array('creer_compte_curl')
|
||||
);
|
||||
$maj['1.0.2'] = array(array('maj_tables', array('spip_gamumails')));
|
||||
$maj['1.0.5'] = array(array('creer_compte_curl'));
|
||||
|
||||
function creer_compte_curl(){
|
||||
$mdp = uniqid(uniqid(),1);
|
||||
$set = [
|
||||
'nom' => 'curl_login',
|
||||
'login' => hash('md5', 'curl_login'.time()),
|
||||
'pass' => hash('sha256', $mdp),
|
||||
'statut' => '1comite'
|
||||
];
|
||||
|
||||
include_spip('action/editer_auteur');
|
||||
$id_auteur = auteur_inserer(null, $set);
|
||||
if ($id_auteur) {
|
||||
include_spip('inc/config');
|
||||
ecrire_config('curl_login', $set['login']);
|
||||
ecrire_config('curl_mdp', $mdp);
|
||||
}
|
||||
}
|
||||
$maj['1.0.6'] = array(array('maj_tables', array('spip_gamumails')));
|
||||
$maj['1.0.11'] = array( array('maj_tables', array('spip_gamumails')));
|
||||
$maj['1.0.12'] = array(array('creer_compte_curl'));
|
||||
$maj['1.0.13'] = array(array('maj_tables', array('spip_gamumails')));
|
||||
|
||||
include_spip('base/upgrade');
|
||||
maj_plugin($nom_meta_base_version, $version_cible, $maj);
|
||||
}
|
||||
|
||||
function creer_compte_curl(){
|
||||
if (sql_countsel('nom', 'spip_auteurs', 'nom="curl_login"')){
|
||||
return;
|
||||
}
|
||||
$mdp = uniqid(uniqid(),1);
|
||||
$set = [
|
||||
'nom' => 'curl_login',
|
||||
'login' => hash('md5', 'curl_login'.time()),
|
||||
'pass' => hash('sha256', $mdp),
|
||||
'statut' => '1comite'
|
||||
];
|
||||
|
||||
$id_auteur = sql_insertq('spip_auteurs', $set);
|
||||
if ($id_auteur) {
|
||||
include_spip('inc/config');
|
||||
ecrire_config('curl_login', $set['login']);
|
||||
ecrire_config('curl_mdp', $mdp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction de désinstallation du plugin GamuMail.
|
||||
|
|
|
@ -24,11 +24,8 @@ function gamumail_autoriser() {
|
|||
// -----------------
|
||||
// Objet gamumails
|
||||
|
||||
|
||||
|
||||
|
||||
function autoriser_gamumail_creer_dist($faire, $type, $id, $qui, $opt) {
|
||||
return in_array($qui['statut'], array('0minirezo', '1comite'));
|
||||
return $qui['statut'] == '0minirezo' and !$qui['restreint'];
|
||||
}
|
||||
|
||||
function autoriser_gamumail_voir_dist($faire, $type, $id, $qui, $opt) {
|
||||
|
@ -36,7 +33,7 @@ function autoriser_gamumail_voir_dist($faire, $type, $id, $qui, $opt) {
|
|||
}
|
||||
|
||||
function autoriser_gamumail_modifier_dist($faire, $type, $id, $qui, $opt) {
|
||||
return in_array($qui['statut'], array('0minirezo', '1comite'));
|
||||
return $qui['statut'] == '0minirezo' and !$qui['restreint'];
|
||||
}
|
||||
|
||||
function autoriser_gamumail_supprimer_dist($faire, $type, $id, $qui, $opt) {
|
||||
|
@ -46,3 +43,11 @@ function autoriser_gamumail_supprimer_dist($faire, $type, $id, $qui, $opt) {
|
|||
function autoriser_gamumail_configurer_dist($faire, $type, $id, $qui, $opt) {
|
||||
return autoriser('webmestre');
|
||||
}
|
||||
/**
|
||||
* Autorisation de modifier le nom d'un slug
|
||||
* uniquement les webmestres avec un mail en @gamuza.fr
|
||||
**/
|
||||
function autoriser_gamumail_modifier_nom_slug_dist($faire, $type, $id, $qui, $opt) {
|
||||
return $qui['webmestre'] === "oui"
|
||||
and strpos($qui['email'], 'gamuza.fr') !== false;
|
||||
}
|
||||
|
|
|
@ -16,3 +16,86 @@ if (!defined('_ECRIRE_INC_VERSION')) {
|
|||
function gamumail_TabClient($objet, $id_objet, $champ){
|
||||
return compact('objet', 'id_objet', 'champ');
|
||||
}
|
||||
|
||||
function gamumail_supprimer_si_vide($v){
|
||||
if (!empty($v)) {
|
||||
return $v;
|
||||
}
|
||||
}
|
||||
|
||||
function tester_slug($slug, $destinataires,$options=[]) {
|
||||
$f = charger_fonction('envoyer_gamumail', 'inc');
|
||||
$options['debug'] = true;
|
||||
return $f($slug, $destinataires, $options);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* modèles pour surcharge des fonctions du CVT gamumail
|
||||
* chacune de ces fonctions a un équivalent spécifique pour chaque slug
|
||||
* avec un nom de la forme gamumail_$slug_charger(), gamumail_$slug_verifier()...
|
||||
**/
|
||||
|
||||
/**
|
||||
* fonction appelée en fin de gamumail_charger_dist()
|
||||
*
|
||||
* @return $valeurs = array(
|
||||
* "slug" => $slug,
|
||||
* 'sujet' => $gamuMail['sujet'],
|
||||
* 'texte' => $gamuMail['texte'],
|
||||
* 'pour' => implode(',', $Tmails),
|
||||
* 'cc' => lire_config('gamumail/mail_cc'),
|
||||
* 'cci' => lire_config('gamumail/mail_cci'),
|
||||
* 'TFichierpdfs' => $TFichierPdf,
|
||||
* 'Tpdfs_ok' => [],
|
||||
* 'Tid_doc' => [],
|
||||
* 'options' => $options
|
||||
* );
|
||||
*
|
||||
**/
|
||||
function gamumail_charger_dist($valeurs, $options, $slug, $destinataires='', $Tclient=[], $Tpdf=[], $redirect='') {
|
||||
|
||||
return $valeurs;
|
||||
}
|
||||
|
||||
/**
|
||||
* fonction appelée en fin de gamumail_verifier_dist()
|
||||
*
|
||||
* @return array $erreurs
|
||||
*
|
||||
**/
|
||||
function gamumail_verifier_dist($erreurs, $options, $slug, $destinataires='', $Tclient=[], $Tpdf=[], $redirect='') {
|
||||
|
||||
return $erreurs;
|
||||
}
|
||||
|
||||
/**
|
||||
* fonctions appelée en fin de gamumail_traiter_dist()
|
||||
*
|
||||
* @param array $corps[] => cf return
|
||||
* @param string $slug modele du mail a charger
|
||||
* @param string $destinataires = adresses mails et id_auteurs séparées par ,
|
||||
* @param array $options
|
||||
*
|
||||
* @return array $corps
|
||||
* $corps = [
|
||||
* 'html' => $html,
|
||||
* 'texte' => $texte,
|
||||
* 'cc' => $cc,
|
||||
* 'cci' => $cci,
|
||||
* 'pieces_jointes' => $pieces_jointes
|
||||
* ];
|
||||
*
|
||||
**/
|
||||
function gamumail_traiter_dist($corps, $options, $slug, $destinataires='') {
|
||||
|
||||
$html = $corps['html'];
|
||||
$html = str_replace('@@truc_a_remplacer@@', 'le machin qui remplace', $html);
|
||||
include_spip('classes/facteur');
|
||||
$texte = facteur_mail_html2text($html);
|
||||
$corps['html'] = $html;
|
||||
$corps['texte'] = $texte;
|
||||
|
||||
return $corps;
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,21 @@ if (!defined('_ECRIRE_INC_VERSION')) {
|
|||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* pipeline pour faire les remplacements des @@ dans le contenu du slug envoyé dans $flux
|
||||
*
|
||||
* @param array $flux données du pipeline :
|
||||
* $flux['data'] = $html
|
||||
* $flux['args']['slug'] = $slug
|
||||
* $flux['args']['destinataires'] = $destinataires
|
||||
* $flux['args']['options'] = $options
|
||||
* @return array $flux données du pipeline
|
||||
*
|
||||
**/
|
||||
function gamumail_remplacements_slug($flux) {
|
||||
|
||||
return $flux;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -26,9 +40,11 @@ if (!defined('_ECRIRE_INC_VERSION')) {
|
|||
* @param array $flux Données du pipeline
|
||||
* @return array Données du pipeline
|
||||
*/
|
||||
/*
|
||||
function gamumail_optimiser_base_disparus($flux) {
|
||||
|
||||
sql_delete('spip_gamumails', "statut='poubelle' AND maj < " . $flux['args']['date']);
|
||||
|
||||
return $flux;
|
||||
}
|
||||
*/
|
||||
|
|
|
@ -3,22 +3,30 @@ if (!defined('_ECRIRE_INC_VERSION')){
|
|||
return;
|
||||
}
|
||||
|
||||
|
||||
function inc_charger_pdf_dist($fichier_pdf, $contexte = []){
|
||||
$login = lire_config('curl_login');
|
||||
$password = lire_config('curl_mdp');
|
||||
$url = $GLOBALS['meta']['adresse_site'].'/spip.php?page=spipdf&spipdf='.$fichier_pdf;
|
||||
if (is_array($contexte) and count($contexte)) {
|
||||
foreach ($contexte as $champ => $val) {
|
||||
if (intval($val)) {
|
||||
/* if (intval($val) === $val) {
|
||||
// if (intval($val)) {
|
||||
$val = intval($val);
|
||||
} else {
|
||||
$val = "$val";
|
||||
}
|
||||
*/
|
||||
$url .= "&$champ=$val";
|
||||
}
|
||||
}
|
||||
|
||||
$CurlConnect = curl_init();
|
||||
|
||||
// pour une connexion https locale avec certificat auto-signé
|
||||
if (defined('_DEBUG_AUTORISER')) {
|
||||
curl_setopt($CurlConnect, CURLOPT_SSL_VERIFYHOST, false);
|
||||
curl_setopt($CurlConnect, CURLOPT_SSL_VERIFYPEER, false);
|
||||
}
|
||||
curl_setopt($CurlConnect, CURLOPT_URL, $url);
|
||||
curl_setopt($CurlConnect, CURLOPT_RETURNTRANSFER, 1 );
|
||||
//curl_setopt($CurlConnect, CURLOPT_POSTFIELDS, $request);
|
||||
|
|
235
inc/envoyer_gamumail.php
Normal file
235
inc/envoyer_gamumail.php
Normal file
|
@ -0,0 +1,235 @@
|
|||
<?php
|
||||
if (!defined('_ECRIRE_INC_VERSION')){
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* fonction pour préparer et envoyer un mail basé sur un slug gamumail
|
||||
*
|
||||
* @param string $slug
|
||||
* @param string|array $destinataires = adresses mails et id_auteur séparées par , ou en array
|
||||
* si un des destinataire est au format numérique, on considère que c'est un id_auteur et on va choper son mail dans spip_auteurs
|
||||
* @param array $options :
|
||||
* $options['debug' => true] pour afficher le $corps final sans envoyer le mail
|
||||
* $options['cci' => true] pour passer les destinataires en cci si il y en a plus qu'un
|
||||
* $options['pdfs' => [...]] array des fichiers PDF générés à attacher dont les éléments peuvent être :
|
||||
* - soit un nom de squelette PDF
|
||||
* - soit un array avec 3 éléments (seul le 1er est obligatoire):
|
||||
* [ 'fichier' => 'squelette_PDF',
|
||||
* 'contexte' => ['parametre_url_1' => 'valeur_1', 'parametre_url_2' => 'valeur_2', ...]
|
||||
* 'nom' => 'nom_fichier_attache' ]
|
||||
* $options['args' => ['param_1' => 'valeur_1, 'param_2' => 'valeur_2', ...]]
|
||||
*
|
||||
**/
|
||||
function inc_envoyer_gamumail($slug, $destinataires, $options = []) {
|
||||
include_spip('inc/texte');
|
||||
include_spip('classes/facteur');
|
||||
|
||||
$retour = array();
|
||||
|
||||
// sécu
|
||||
if (preg_match('/[^a-zA-Z0-9_\-]/', $slug)) {
|
||||
$retour['message_erreur'] = _T("gamumail:erreur_format_slug");
|
||||
return $retour;
|
||||
}
|
||||
|
||||
// contenus du slug
|
||||
$res = sql_fetsel('*', 'spip_gamumails', 'slug = "'.$slug.'"');
|
||||
if ($res) {
|
||||
$sujet = $res['sujet'];
|
||||
$html = propre($res['texte']);
|
||||
$id_docs = $res['id_docs'];
|
||||
}
|
||||
else {
|
||||
$retour['message_erreur'] = _T("gamumail:pas_de_slug");
|
||||
return $retour;
|
||||
}
|
||||
|
||||
// destinataires (id_auteur ou mails) => $pour[] est un array avec les adresses mails valides
|
||||
if (!is_array($destinataires)) {
|
||||
$destinataires = explode(',', $destinataires);
|
||||
}
|
||||
$pour = array();
|
||||
foreach ($destinataires as $dest) {
|
||||
if (is_numeric($dest)) {
|
||||
if ($mail = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.$dest)) {
|
||||
$pour[] = $mail;
|
||||
}
|
||||
}
|
||||
elseif (email_valide($dest)) {
|
||||
$pour[] = $dest;
|
||||
}
|
||||
}
|
||||
|
||||
$non_vide = function ($elem) {
|
||||
return ($elem != NULL AND $elem != '');
|
||||
};
|
||||
$cc = array_filter(explode(',', lire_config('gamumail/mail_cc')), $non_vide);
|
||||
$cci = array_filter(explode(',', lire_config('gamumail/mail_cci')), $non_vide);
|
||||
|
||||
// si on a plusieurs destinataires et $options['cci' => true] les passer en cci et mettre le compte expéditeur du site en to
|
||||
if (count($pour) > 1 AND isset($options['cci']) AND $options['cci']) {
|
||||
$cci = array_unique(array_merge($cci, $pour));
|
||||
$pour = [lire_config('facteur/adresse_envoi_email',lire_config('email_webmaster'))];
|
||||
}
|
||||
|
||||
// documents joints
|
||||
$pieces_jointes = [];
|
||||
|
||||
// filtrage des id_docs attachés au slug (ici on ne veut que des id_docs valides)
|
||||
$Tid_doc = [];
|
||||
$id_docs = array_filter(explode(',', $id_docs), 'is_numeric');
|
||||
foreach ($id_docs as $doc) {
|
||||
if ($res = sql_getfetsel('id_document', 'spip_documents', 'id_document='.$doc)) {
|
||||
$Tid_doc[] = $doc;
|
||||
}
|
||||
}
|
||||
// récup des paramètres des docs à attacher
|
||||
if (!empty($Tid_doc)) {
|
||||
foreach ($Tid_doc as $id_document) {
|
||||
$Tdocument = sql_fetsel('titre,fichier,extension','spip_documents','id_document='.intval($id_document));
|
||||
$destination = _DIR_IMG.$Tdocument['fichier'];
|
||||
$extension = $Tdocument['extension'];
|
||||
if ($Tdocument['titre']) {
|
||||
$nom_fichier = $Tdocument['titre'] .".".$extension;
|
||||
}
|
||||
else {
|
||||
$nom_fichier = basename($Tdocument['fichier']);
|
||||
}
|
||||
$type_mime = bigup_get_mime_type_extension($extension);
|
||||
$pieces_jointes[] = [
|
||||
'chemin' => $destination,
|
||||
'nom' => $nom_fichier,
|
||||
'encodage' => 'base64',
|
||||
'mime' => $type_mime
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// les pdfs
|
||||
$Tpdf_dell = [];
|
||||
if (isset($options['pdfs'])) {
|
||||
$Tpdfs = $options['pdfs'];
|
||||
if (!is_array($Tpdfs)) {
|
||||
$Tpdfs = explode(',', $Tpdfs);
|
||||
}
|
||||
$Tpdfs = array_filter($Tpdfs, function($p) {
|
||||
return $p != '';
|
||||
});
|
||||
// approximation pour passage dans les fonctions traiter_av_pdf() :
|
||||
// si plusieurs destinataires dans $pour[], on utilise le premier comme 2ème arg ($auteur)
|
||||
if ($f = charger_fonction('traiter_av_pdf', 'gamumail', true)) {
|
||||
$options = $f($options, $pour[0], [], $Tpdfs);
|
||||
}
|
||||
if ($f = charger_fonction($slug . '_traiter_av_pdf', 'gamumail', true)) {
|
||||
$options = $f($options, $pour[0], [], $Tpdfs);
|
||||
}
|
||||
|
||||
if (!empty($Tpdfs) and is_array($Tpdfs)) {
|
||||
foreach ($Tpdfs as $pdf) {
|
||||
if (!is_array($pdf)) {
|
||||
$sq_pdf = $pdf;
|
||||
$contexte = [];
|
||||
$nom = $pdf;
|
||||
}
|
||||
elseif (array_key_exists('fichier', $pdf)) {
|
||||
$sq_pdf = $pdf['fichier'];
|
||||
$contexte = array_key_exists('contexte', $pdf) ? $pdf['contexte'] : [];
|
||||
$nom = array_key_exists('nom', $pdf) ? $pdf['nom'] : $pdf;
|
||||
}
|
||||
else break;
|
||||
}
|
||||
|
||||
$recup_pdf = charger_fonction('charger_pdf','inc');
|
||||
$pdf = $recup_pdf($sq_pdf, $contexte);
|
||||
$nom_fichier = $nom.'.pdf';
|
||||
$destination = _DIR_TMP.basename($nom_fichier);
|
||||
$Tpdf_dell[] = $destination;
|
||||
file_put_contents($destination,$pdf);
|
||||
$pieces_jointes[] = [
|
||||
'chemin' => $destination,
|
||||
'nom' => $nom_fichier,
|
||||
'encodage' => 'base64',
|
||||
'mime' => 'application/pdf'
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
$html_header = '';
|
||||
if (find_in_path('gamumail/'.$slug .'_html_header.html')) {
|
||||
$html_header = recuperer_fond('gamumail/'.$slug . '_html_header', $options);
|
||||
}
|
||||
elseif(find_in_path('gamumail/html_header.html')) {
|
||||
$html_header = recuperer_fond('gamumail/html_header', $options);
|
||||
}
|
||||
$html_footer = '';
|
||||
if (find_in_path('gamumail/'.$slug . '_html_footer.html')) {
|
||||
$html_footer = recuperer_fond('gamumail/'.$slug . '_html_footer', $options);
|
||||
}
|
||||
elseif (find_in_path('gamumail/html_footer.html')) {
|
||||
$html_footer = recuperer_fond('gamumail/html_footer', $options);
|
||||
}
|
||||
$html = $html_header . $html . $html_footer;
|
||||
|
||||
// pipeline pour les traitement du contenu des slugs spécifiques de chaque plugins
|
||||
$args = $options;
|
||||
$args['slug'] = $slug;
|
||||
$args['destinataires'] = $pour;
|
||||
$html = pipeline('remplacements_slug', array(
|
||||
'args' => $args,
|
||||
'data' => $html
|
||||
));
|
||||
$texte = facteur_mail_html2text($html);
|
||||
|
||||
$corps = [
|
||||
'html' => $html,
|
||||
'texte' => $texte,
|
||||
'cc' => $cc,
|
||||
'cci' => $cci,
|
||||
'pieces_jointes' => $pieces_jointes
|
||||
];
|
||||
/*
|
||||
if ($f = charger_fonction('traiter', 'gamumail', true)) {
|
||||
$corps = $f($corps, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect);
|
||||
}
|
||||
*/
|
||||
// appel d'une éventuelle fonction de traitement du contenu spécifique du slug
|
||||
if ($f = charger_fonction($slug . '_traiter', 'gamumail', true)) {
|
||||
$corps = $f($corps, $options, $slug, $pour);
|
||||
}
|
||||
|
||||
// si debug on affiche sans envoyer le mail
|
||||
if (isset($options['debug']) AND $options['debug']) {
|
||||
echo '<br>slug : '.$slug;
|
||||
echo '<br>$options :';
|
||||
var_dump($options);
|
||||
echo '<br>$pour : ';
|
||||
var_dump($pour);
|
||||
echo '<br>$sujet : '.$sujet;
|
||||
echo '<br>$corps : ';
|
||||
var_dump($corps);
|
||||
$ok = true;
|
||||
}
|
||||
else {
|
||||
$envoyer_mail = charger_fonction('envoyer_mail', 'inc/');
|
||||
$ok = $envoyer_mail($pour, $sujet, $corps);
|
||||
}
|
||||
|
||||
if (!$ok) {
|
||||
spip_log("Erreur d'envoi du mail : ","gamumail");
|
||||
spip_log($corps,"gamumail");
|
||||
$retour['message_erreur'] = _T("gamumail:erreur_envoi_mail");
|
||||
}
|
||||
else {
|
||||
$retour['message_ok'] = _T('gamumail:mail_envoye');
|
||||
}
|
||||
|
||||
// on supprime les pdfs temporaires
|
||||
if (count($Tpdf_dell)) {
|
||||
foreach ($Tpdf_dell as $pdf) {
|
||||
unlink($pdf);
|
||||
}
|
||||
}
|
||||
|
||||
return $retour;
|
||||
}
|
53
inclure/envoyer_gamumail.html
Normal file
53
inclure/envoyer_gamumail.html
Normal file
|
@ -0,0 +1,53 @@
|
|||
[(#REM)
|
||||
page d'envoi d'un gamumail
|
||||
|
||||
]
|
||||
<style type="text/css" media="screen">
|
||||
.bloc_slug {
|
||||
margin-top: 3rem;
|
||||
}
|
||||
.markItUp .markItUpHeader ul a em {
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
}
|
||||
#bloc_slug .formulaire_spip textarea.markItUpEditor {
|
||||
width: 100%;
|
||||
}
|
||||
#bloc_slug .sujet {
|
||||
width: calc(100% - 50px);
|
||||
}
|
||||
#bloc_slug .editer_groupe {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
</style>
|
||||
<div class="envoi_gamumail">
|
||||
<B_slugs>
|
||||
<div class="bloc_choix_slug">
|
||||
<h3><:gamumail:choix_slug:></h3>
|
||||
<select id="choix_slug" name="choix_slug">
|
||||
<option value=""[ (#ENV{slug}|non) selected]><:gamumail:choisissez_un_modele:></option>
|
||||
<BOUCLE_slugs(GAMUMAILS){statut=publie}{par titre}{public!=non}>
|
||||
<option value="#SLUG"[ (#SLUG|=={#ENV{slug}}|oui) selected]>#TITRE</option>
|
||||
</BOUCLE_slugs>
|
||||
</select>
|
||||
</div>
|
||||
</B_slugs>
|
||||
<div class="bloc_slug" id="bloc_slug">
|
||||
<INCLURE{fond=inclure/vue_slug, env, ajax=vue_slug}>
|
||||
</div>
|
||||
<INCLURE{fond=gamumail/remplacements_slugs}>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
jQuery(function() {
|
||||
$('#choix_slug').on('change', function() {
|
||||
var choix_slug = $(this).val();
|
||||
ajaxReload('vue_slug', {
|
||||
args:{
|
||||
slug : choix_slug,
|
||||
dest : "#ENV{dest}"
|
||||
}
|
||||
//, callback: function(){}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
|
@ -1,16 +1,18 @@
|
|||
[(#AUTORISER{modifier,gamumail}|sinon_interdire_acces)]
|
||||
|
||||
<style type="text/css" media="screen">
|
||||
.configuration_mails .objet--mail span {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
}
|
||||
.objet--mail {
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
.well {
|
||||
background-color: #cecece;
|
||||
margin: 10px auto;
|
||||
padding: 10px;
|
||||
border-radius: 4px;
|
||||
.crayon {
|
||||
background-color: #fff;
|
||||
}
|
||||
}
|
||||
.un-pdf {
|
||||
border: 1px solid black;
|
||||
|
@ -21,72 +23,147 @@
|
|||
display: inline-block;
|
||||
width: 180px;
|
||||
}
|
||||
span.crayon, div.crayon {
|
||||
background-color: #fff;
|
||||
padding: .5rem;
|
||||
}
|
||||
.well h4.crayon {
|
||||
background-color: #cecece;
|
||||
}
|
||||
.wp600 {
|
||||
width: 600px;
|
||||
}
|
||||
.btn_supprimer {
|
||||
float: right;
|
||||
}
|
||||
.btn_editer {
|
||||
float: right;
|
||||
margin-right: 2rem;
|
||||
}
|
||||
.btn {
|
||||
display: inline-block;
|
||||
padding: 1rem 1.5rem;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
transition: 0.25s;
|
||||
transition-property: box-shadow, background-color, color, border;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
white-space: nowrap;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
background-color: #e7e9ed;
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
line-height: 1;
|
||||
}
|
||||
.markItUp .markItUpHeader ul a em {
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
}
|
||||
span > em {
|
||||
font-size: 85%;
|
||||
}
|
||||
.remplacements_slugs {
|
||||
margin-top: 4rem;
|
||||
}
|
||||
</style>
|
||||
<div class="inner configuration_mails">
|
||||
<h1 class="txtcenter">Configuration des mails</h1>
|
||||
<div class="configuration_generale">
|
||||
|
||||
<div class="well">
|
||||
<div class="une_conf">
|
||||
<h4>Emails en copie "cc" des différents messages
|
||||
<span class="#EDIT{meta-gamumail/mail_cc} inbl w600p">[(#CONFIG{gamumail/mail_cc}|sinon{cliquer})]</span>
|
||||
</h4>
|
||||
<p class="explication">Si plusieurs emails, les séparer par une virgule</p>
|
||||
<h4><:gamumail:email_en_cc:></h4>
|
||||
<div class="#EDIT{meta-gamumail/mail_cc} inbl w600p">[(#CONFIG{gamumail/mail_cc}|sinon{<i><:gamumail:dbe_clic_editer:></i>})]</div>
|
||||
<p class="explication"><:gamumail:plusieurs_mails_separer_virgule:> <:gamumail:dbe_clic_editer:>.</p>
|
||||
</div>
|
||||
<div class="une_conf">
|
||||
<h4>Emails en copie cachée "cci" des différents messages
|
||||
<span class="#EDIT{meta-gamumail/mail_cci} inbl w600p">[(#CONFIG{gamumail/mail_cci}|sinon{cliquer})]</span>
|
||||
</h4>
|
||||
<p class="explication">Si plusieurs emails, les séparer par une virgule</p>
|
||||
<h4><:gamumail:email_en_cci:></h4>
|
||||
<div class="#EDIT{meta-gamumail/mail_cci} inbl w600p">[(#CONFIG{gamumail/mail_cci}|sinon{<i><:gamumail:dbe_clic_editer:></i>})]</div>
|
||||
<p class="explication"><:gamumail:plusieurs_mails_separer_virgule:> <:gamumail:dbe_clic_editer:>.</p>
|
||||
</div>
|
||||
<strong class="explication"><:gamumail:dbe_clic_editer_champs:></strong>
|
||||
</div>
|
||||
|
||||
<BOUCLE_message(GAMUMAILS)>
|
||||
<div class="well">
|
||||
<div class="une_conf">
|
||||
<h4 class="toggle cursor"
|
||||
data-id="#SLUG">
|
||||
<i class="fa fa-envelope mrs"></i>
|
||||
[(#TITRE)]
|
||||
<i class="fa fa-caret-down"></i>
|
||||
</h4>
|
||||
<BOUCLE_message(GAMUMAILS)>
|
||||
<div class="well">
|
||||
<div class="une_conf">
|
||||
[(#AUTORISER{supprimer,gamumail}|oui)
|
||||
<a class="btn btn_supprimer" title="<:gamumail:supprimer_modele:>" href="[(#URL_ACTION_AUTEUR{supprimer_slug,#ID_GAMUMAIL,#SELF})]"><i class="fa fa-trash"></i></a>
|
||||
]
|
||||
<span class="btn btn_editer" title="<:gamumail:editer_titre:>" onClick="$('#h4_#SLUG em.crayon-crayon').trigger('click');"><i class="fa fa-edit"></i></span>
|
||||
<h4 class="toggle cursor #EDIT{titre}"
|
||||
id="h4_#SLUG"
|
||||
data-id="#SLUG">
|
||||
<i class="fa fa-envelope mrs"></i>
|
||||
[(#TITRE)]
|
||||
<i class="fa fa-caret-down"></i>
|
||||
</h4>
|
||||
|
||||
<div id="#SLUG" class="js-hidden">
|
||||
[(#AUTORISER{webmestre}|oui)
|
||||
<div class="objet--slyg">
|
||||
<strong>Slug : </strong>
|
||||
<span class="#EDIT{slug}">[(#SLUG|sinon{cliquez})]</span>
|
||||
</div>
|
||||
]
|
||||
<div class="objet--mail">
|
||||
<strong>Objet : </strong>
|
||||
<span class="#EDIT{sujet}">[(#SUJET|sinon{cliquez})]</span>
|
||||
</div>
|
||||
<strong>Message : </strong>
|
||||
<div class="texte #EDIT{texte}">[(#TEXTE|sinon{cliquez})]</div>
|
||||
[(#REM)
|
||||
Pour l'instant, inutile
|
||||
<div class="pdfs">
|
||||
<INCLURE{fond=inclure/gamumail_pdfs,env,id_gamumail, ajax}>
|
||||
</div>
|
||||
]
|
||||
[(#ENV{ajouter_doc}|oui)
|
||||
<div class="ajax">
|
||||
#FORMULAIRE_BIGFORM{gamumail, #ID_GAMUMAIL}
|
||||
</div>
|
||||
]
|
||||
<div id="#SLUG" class="js-hidden">
|
||||
<div class="objet--slug">
|
||||
<strong><:gamumail:slug:>: </strong>
|
||||
[(#AUTORISER{modifier_nom_slug,gamumail}|?{
|
||||
<span class="[(#EDIT{nom_slug})]">[(#SLUG|sinon{<:gamumail:dbe_clic_editer:>})]</span>
|
||||
,
|
||||
<span class="">[(#SLUG)]</span>
|
||||
})]
|
||||
</div>
|
||||
<div class="objet--mail">
|
||||
<strong><:gamumail:objet:>: </strong>
|
||||
<span class="#EDIT{sujet}">[(#SUJET|sinon{<:gamumail:dbe_clic_editer:>})]</span>
|
||||
</div>
|
||||
<div class="objet--mail">
|
||||
<strong><:gamumail:message:>: </strong>
|
||||
<div class="texte #EDIT{texte}">
|
||||
[(#TEXTE|sinon{<:gamumail:dbe_clic_editer:>})]
|
||||
</div>
|
||||
</div>
|
||||
<div class="objet--mail">
|
||||
<span><strong><:gamumail:documents_attaches:> :</strong> <em class="explication"><:gamumail:liste_id_separes:> , </em></span>
|
||||
<div class="texte #EDIT{id_docs}">
|
||||
[(#ID_DOCS|sinon{<:gamumail:dbe_clic_editer:>})]
|
||||
</div>
|
||||
</div>
|
||||
<div class="objet--mail">
|
||||
<span><strong><:gamumail:visibilite_public:>:</strong> <em class="explication"><:gamumail:explication_mail_auto_uniquement:></em></span>
|
||||
[(#PUBLIC|=={oui}|oui)
|
||||
<strong><i class="fa fa-eye"></i> <:gamumail:modele_visible:> => </strong>
|
||||
<a class="btn btn_public ajax" title="<:gamumail:modele_masquer:>" href="[(#URL_ACTION_AUTEUR{switcher_slug_public,#ID_GAMUMAIL,#SELF})]">
|
||||
<:gamumail:modele_masquer:> <i class="fa fa-eye-slash"></i>
|
||||
</a>
|
||||
][(#PUBLIC|=={oui}|non)
|
||||
<strong><i class="fa fa-eye-slash"></i> <:gamumail:modele_non_visible:> => </strong>
|
||||
<a class="btn btn_public ajax" title="<:gamumail:modele_afficher:>" href="[(#URL_ACTION_AUTEUR{switcher_slug_public,#ID_GAMUMAIL,#SELF})]">
|
||||
<:gamumail:modele_afficher:> <i class="fa fa-eye"></i>
|
||||
</a>
|
||||
]
|
||||
</div>
|
||||
|
||||
[(#REM)
|
||||
Pour l'instant, inutile
|
||||
<div class="pdfs">
|
||||
<INCLURE{fond=inclure/gamumail_pdfs,env,id_gamumail, ajax}>
|
||||
</div>
|
||||
]
|
||||
[(#ENV{ajouter_doc}|oui)
|
||||
<div class="ajax">
|
||||
#FORMULAIRE_BIGFORM{gamumail, #ID_GAMUMAIL}
|
||||
</div>
|
||||
]
|
||||
</div>
|
||||
</div>
|
||||
</BOUCLE_message>
|
||||
</BOUCLE_messages>
|
||||
|
||||
|
||||
</div>
|
||||
</BOUCLE_message>
|
||||
[(#AUTORISER{creer,gamumail}|oui)
|
||||
<a class="btn" title="<:gamumail:creer_modele:>" href="[(#URL_ACTION_AUTEUR{creer_slug,null,#SELF})]"><i class="fa fa-envelope"></i> Nouveau modèle</a>
|
||||
]
|
||||
|
||||
</div>
|
||||
|
||||
<INCLURE{fond=gamumail/remplacements_slugs}>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
jQuery(function() {
|
||||
configuration_mails();
|
||||
|
||||
|
@ -98,5 +175,4 @@
|
|||
});
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
]
|
||||
|
||||
<div class="pdfs">
|
||||
[(#AUTORISER{webmestre}|oui)
|
||||
[(#AUTORISER{modifier,gamumail}|oui)
|
||||
<a class="btn ajax nohistory nocache" href="[(#URL_ACTION_AUTEUR{gamuform_add_pdf,#ENV{id_gamumail},#SELF})]">
|
||||
+ pdf
|
||||
</a>
|
||||
|
|
11
inclure/vue_slug.html
Normal file
11
inclure/vue_slug.html
Normal file
|
@ -0,0 +1,11 @@
|
|||
<h3 id="titre_slug"><:gamumail:contenu_mail:></h3>
|
||||
<div class="bloc_contenu_slug ajax">
|
||||
[(#FORMULAIRE_GAMUMAIL{
|
||||
#ENV{slug},
|
||||
#ENV{dest},
|
||||
#ENV{client},
|
||||
#ENV{Tpdf},
|
||||
#ENV{redirect},
|
||||
#ARRAY{}
|
||||
})]
|
||||
</div>
|
|
@ -10,16 +10,34 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
|
|||
|
||||
// A
|
||||
'ajouter_lien_gamumail' => 'Ajouter ce gamumail',
|
||||
'avertissement_remplacements' => 'NB: attention! tous les autres remplacements sont spécifiques de leur modèle et ne peuvent êtres utilisés dans un autre modèle',
|
||||
'autres_fichiers_attaches' => 'Autres Fichiers attachés',
|
||||
|
||||
// C
|
||||
'champ_slug_label' => 'Slug',
|
||||
'champ_sujet_label' => 'Sujet',
|
||||
'champ_texte_label' => 'Texte',
|
||||
'confirmer_supprimer_gamumail' => 'Confirmez-vous la suppression de cet gamumail ?',
|
||||
'choix_slug' => 'Choix du modèle',
|
||||
'contenu_mail' => 'Contenu du mail',
|
||||
'creer_modele' => 'Créer un modèle de mail',
|
||||
|
||||
// D
|
||||
'documents_attaches' => 'Documents attachés',
|
||||
'dbe_clic_editer' => 'Double clic pour éditer',
|
||||
'dbe_clic_editer_champs' => 'Double clic pour éditer les champs des modèles.',
|
||||
|
||||
//EE
|
||||
'envoyer' => 'Envoyer',
|
||||
"erreur_envoi_mail" => "Erreur dans l'envoi de votre mail",
|
||||
'erreur_format_slug' => 'Le slug est un identifiant qui ne peut contenir que des chiffres, lettres et _ ou -',
|
||||
'email_en_cc' => 'Emails en copie "cc" des différents messages',
|
||||
'email_en_cci' => 'Emails en copie cachée "cci" des différents messages',
|
||||
'editer_titre' => 'Editer le titre',
|
||||
'explication_mail_auto_uniquement' => 'permet de ne pas afficher les modèles utilisés uniquement en envoi automatique',
|
||||
|
||||
// F
|
||||
'pdf_envoyes' => 'Fichiers PDF envoyés',
|
||||
|
||||
// I
|
||||
'icone_creer_gamumail' => 'Créer un gamumail',
|
||||
|
@ -28,16 +46,40 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
|
|||
'info_aucun_gamumail' => 'Aucun gamumail',
|
||||
'info_gamumails_auteur' => 'Les gamumails de cet auteur',
|
||||
'info_nb_gamumails' => '@nb@ gamumails',
|
||||
'id_destinataires_sans_mails' => 'Les id_auteur @ids_erreur@ n\'ont pas d\'adresse mail',
|
||||
'id_docs_attaches' => 'ID documents séparés par une virgule',
|
||||
'id_docs_en_erreur' => 'Documents en erreur : @id_docs_erreurs@',
|
||||
|
||||
// L
|
||||
'liste_id_separes' => 'liste d\'id_document séparés par une virgule',
|
||||
|
||||
//MM
|
||||
"mail_envoye" => "Votre message a bien été envoyé",
|
||||
'mails_destinataires_en_erreur' => 'Les destinataires @mails_erreur@ ne sont pas des adresses mails valides',
|
||||
'message' => 'Message',
|
||||
'modele_visible' => 'Modèle disponible',
|
||||
'modele_non_visible' => 'Modèle non disponible',
|
||||
'modele_masquer' => 'Masquer le modèle',
|
||||
'modele_afficher' => 'Afficher le modèle',
|
||||
|
||||
// O
|
||||
'objet' => 'Objet',
|
||||
|
||||
// P
|
||||
'pas_de_slug' => 'Pas de slug avec cet identifiant',
|
||||
'plusieurs_mails_separer_virgule' => 'Si plusieurs emails, les séparer par une virgule.',
|
||||
|
||||
// R
|
||||
'retirer_lien_gamumail' => 'Retirer ce gamumail',
|
||||
'retirer_tous_liens_gamumails' => 'Retirer tous les gamumails',
|
||||
'remplacements_disponibles' => 'Remplacements automatiques disponibles :',
|
||||
|
||||
// S
|
||||
'supprimer_gamumail' => 'Supprimer cet gamumail',
|
||||
'selectionnez_modele' => 'Sélectionnez un modèle...',
|
||||
'supprimer_modele' => 'Supprimer le modèle',
|
||||
'slug' => 'Slug',
|
||||
'switch_modele_public' => 'Modifier la visibilité publique du modèle',
|
||||
|
||||
// T
|
||||
'texte_ajouter_gamumail' => 'Ajouter un gamumail',
|
||||
|
@ -50,4 +92,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
|
|||
'titre_langue_gamumail' => 'Langue de ce gamumail',
|
||||
'titre_logo_gamumail' => 'Logo de ce gamumail',
|
||||
'titre_objets_lies_gamumail' => 'Liés à ce gamumail',
|
||||
|
||||
// V
|
||||
'visibilite_public' => 'Disponible dans la liste des modèles',
|
||||
);
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
<paquet
|
||||
prefix="gamumail"
|
||||
categorie="communication"
|
||||
version="1.0.6"
|
||||
version="1.0.17"
|
||||
etat="dev"
|
||||
compatibilite="[3.3.0-dev;3.3.*]"
|
||||
compatibilite="[3.2.0;3.3.*]"
|
||||
logo="prive/themes/spip/images/gamumail-64.png"
|
||||
documentation=""
|
||||
schema="1.0.5"
|
||||
schema="1.0.13"
|
||||
>
|
||||
|
||||
<nom>GamuMail</nom>
|
||||
|
@ -19,6 +19,7 @@
|
|||
<necessite nom="crayons" compatibilite="[2.0.10;[" />
|
||||
<necessite nom="facteur" compatibilite="[4.0.0;[" />
|
||||
|
||||
<pipeline nom="remplacements_slug" action='' />
|
||||
|
||||
<pipeline nom="autoriser" inclure="gamumail_autorisations.php" />
|
||||
|
||||
|
|
27
saisies/selecteur_slug.html
Normal file
27
saisies/selecteur_slug.html
Normal file
|
@ -0,0 +1,27 @@
|
|||
#CACHE{0}
|
||||
[(#REM)
|
||||
une saisie pour choisir un slug parmi ceux ayant statut publie
|
||||
paramètres :
|
||||
#ENV{nom} = le name du select (par défaut = slug)
|
||||
#ENV{slug} = le slug sélectionné
|
||||
#ENV{label}
|
||||
#ENV{explication}
|
||||
|
||||
exemple d'appel :
|
||||
[(#SAISIE{selecteur_slug,
|
||||
slug=slug_truc,
|
||||
nom=choix_slug,
|
||||
label=Choisissez un slug,
|
||||
explication=Le modèle de mail automatique pour...
|
||||
})]
|
||||
|
||||
]<B_slugs>
|
||||
<select name="#ENV{nom,slug}" id="#ENV{nom,slug}">
|
||||
<option value=""[ (#ENV{slug}|non) selected="selected"]><:gamumail:selectionnez_modele:></option>
|
||||
<BOUCLE_slugs(GAMUMAILS){statut=publie}>
|
||||
<option value="#SLUG"[ (#ENV{slug}|=={#SLUG}|oui) selected="selected"]>#TITRE</option>
|
||||
</BOUCLE_slugs>
|
||||
</select>
|
||||
</B_slugs>
|
||||
<:gamumail:aucun_slug_disponible:>
|
||||
<//B_slugs>
|
3
vues/gamumail_nom_slug.html
Normal file
3
vues/gamumail_nom_slug.html
Normal file
|
@ -0,0 +1,3 @@
|
|||
<BOUCLE_toto(GAMUMAILS){id_gamumail}>
|
||||
#SLUG
|
||||
</BOUCLE_toto>
|
Loading…
Add table
Reference in a new issue