Compare commits

..

No commits in common. "master" and "envoi_separe" have entirely different histories.

18 changed files with 256 additions and 717 deletions

215
README.md
View file

@ -1,41 +1,30 @@
# gamuMail # gamuMail
> formulaire d'envoi de messages configurables > formulaire d'envoi de messages configurables
## Il gere nativement : ## Il gere nativement :
* Pour
- Pour * Cc en meta : **gamumail/mail_cc**
- Cc en meta : **gamumail/mail_cc** * Cci en en meta : **gamumail/mail_cci**
- Cci en en meta : **gamumail/mail_cci** * Sujet
- Cci en globals []: `$GLOBALS['gamuza_mail_cci'] = ['sarl.gamuza@gmail.com'];` * Texte
- Sujet * Les documents attachés au modèle (cf ci-dessous)
- Texte * une liste de pdf (il faut le plugin spipdf)
- Les documents attachés au modèle (cf ci-dessous) ![interface](doc/interface.png "interface")
- une liste de pdf (il faut le plugin spipdf)
![interface](doc/interface.png "interface")
## Il gere des modèles de contenu pour : ## Il gere des modèles de contenu pour :
* Sujet
- Sujet * Texte
- Texte * ID documents joints (spip_documents)
- ID documents joints (spip_documents)
--- ---
* Chaque modèle à un identifiant textuel : **slug** qui doit etre unique. Il ne peut etre créé / 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 se rendre sur la page : `?page=configuration_mails`
- Pour gerer ses modèles, il faut se rendre sur la page : `?page=configuration_mails` ![configuration](doc/configuration.png "Exemple de configuration")
![configuration](doc/configuration.png "Exemple de configuration")
## Personnalisation du formulaire d'envoi ## Personnalisation du formulaire d'envoi
### Dans le html ### Dans le html
On peut ajouter des documents via un fichier du type : **gamumail/SLUG_fichier.html** SLUG doit etre remplacé par le nom du slug du modèle
On peut ajouter des documents via un fichier du type : **gamumail/SLUG_fichier.html** SLUG doit etre remplacé par le nom du slug du modèle
> **/!\ Le name doit etre Tid_doc** > **/!\ Le name doit etre Tid_doc**
> >
> ex de fichier : ex de fichier :
```html ```html
<B_doc> <B_doc>
<h2>Fichiers attachés au séjour</h2> <h2>Fichiers attachés au séjour</h2>
@ -54,28 +43,24 @@ On peut ajouter des documents via un fichier du type : **gamumail/SLUG_fichier.h
</div> </div>
</B_doc> </B_doc>
``` ```
3 branchements possibles : 3 branchements possibles :
* gamumail/SLUG_debutform.html -> au début du form
- gamumail/SLUG_debutform.html -> au début du form * gamumail/SLUG_soustexte.html -> sous le contenu du mail, avant les pièces jointes
- gamumail/SLUG_soustexte.html -> sous le contenu du mail, avant les pièces jointes * gamumail/SLUG_fichiers.html -> à la fin du formulaire
- gamumail/SLUG_fichiers.html -> à la fin du formulaire
### aide à la rédaction du contenu: ### aide à la rédaction du contenu:
- le fichier **gamumail/remplacement_slugs.html** s'affiche en bas de la page de configuration des modèles **inclure/gamumail_config.html** - le fichier **gamumail/remplacement_slugs.html** 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** qui sont : - les génériques fournis par Gamumail par la fonction `inc_gamumail_remplacements_dist()` du fichier `inc/gamumail_remplacements.php` - ceux fournis par les plugins via le pipeline **remplacement_slugs** (cf ci-dessous) et du formulaire d'envoi **formulaires/gamumail.html** : il permet de lister les remplacements effectués pour **tous les modèles** qui sont :
- les génériques fournis par Gamumail par la fonction `inc_gamumail_remplacements_dist()` du fichier `inc/gamumail_remplacements.php`
- ceux fournis par les plugins via le pipeline **remplacement_slugs** (cf ci-dessous)
- pour documenter les remplacements (pied de la page gamumail_config.html), chaque plugin doit renseigner ses remplacements dans l'array global `$GLOBALS['remplacements_gamumail']` - pour documenter les remplacements (pied de la page gamumail_config.html), chaque plugin doit renseigner ses remplacements dans l'array global `$GLOBALS['remplacements_gamumail']`
Exemple dans un fichier `prefixe_fonctions.php` : Exemple dans un fichier `prefixe_fonctions.php` :
```php ```php
$GLOBALS['remplacements_gamumail']['@@num_facture@@'] = 'numéro de la facture'; $GLOBALS['remplacements_gamumail']['@@num_facture@@'] = 'numéro de la facture';
``` ```
- une page de test des slugs est fournie à l'URL **...?page=test_slug&slug=mail_libre&dest=27** - 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 : ### exemple de page d'envoi de mail en choisissant un slug parmi ceux existant :
```html ```html
[(#AUTORISER{modifier,souscripteur,#ENV{id_auteur}}|sinon_interdire_acces)] [(#AUTORISER{modifier,souscripteur,#ENV{id_auteur}}|sinon_interdire_acces)]
@ -91,11 +76,9 @@ $GLOBALS['remplacements_gamumail']['@@num_facture@@'] = 'numéro de la facture';
``` ```
### Dans le php ### Dans le php
#### 1. Appel du formulaire #### 1. Appel du formulaire
> Args du formulaire : > Args du formulaire :
>
```php ```php
/** /**
* formulaire générique pour envoyer des mails avec pieces attachés * formulaire générique pour envoyer des mails avec pieces attachés
@ -116,93 +99,100 @@ $GLOBALS['remplacements_gamumail']['@@num_facture@@'] = 'numéro de la facture';
function formulaires_gamumail_charger_dist($slug, $auteur = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []){ function formulaires_gamumail_charger_dist($slug, $auteur = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []){
} }
``` ```
#### argument $slug "no_gamumail" #### argument $slug "no_gamumail"
Si $slug à pour valeur **no_gamumail** alors l'envoi est annulé Si $slug à pour valeur **no_gamumail** alors l'envoi est annulé
Exemple d'option à insérer dans un select sélecteur de slug : Exemple d'option à insérer dans un select sélecteur de slug :
```html ```html
<option <option value="no_gamumail"[ (#ENV{slug}|=={no_gamumail}|oui) selected="selected"]><:souscriptions:pas_de_mail_auto:></option>
value="no_gamumail"
[
(#ENV{slug}|=""
="{no_gamumail}|oui)"
selected="selected"
]
>
<:souscriptions:pas_de_mail_auto:>
</option>
``` ```
#### argument Tclient #### argument Tclient
l'Argument $Tclient est utilisé pour récupérer des emails dans un ou X autres Objets SPIP l'Argument $Tclient est utilisé pour récupérer des emails dans un ou X autres Objets SPIP
#### argument Tpdf : attacher des PDF avec contenu dynamique #### argument Tpdf : attacher des PDF avec contenu dynamique
- exemple d'appel pour 1 fichier PDF avec son contexte : - exemple d'appel pour 1 fichier PDF avec son contexte :
```html ```html
[(#FORMULAIRE_GAMUMAIL{ #ENV{slug}, #ENV{email}, '', #ARRAY{ fichier,pdf_guide, [(#FORMULAIRE_GAMUMAIL{
nom,Fiche_guide, contexte,#ARRAY{ id_article,#ENV{id_article}, #ENV{slug},
type_guide,#ENV{type_guide,guide} } }, #ENV{redirect}, #ARRAY{ #ENV{email},
id_auteur,#ENV{id_auteur} } })] '',
#ARRAY{
fichier,pdf_guide,
nom,Fiche_guide,
contexte,#ARRAY{
id_article,#ENV{id_article},
type_guide,#ENV{type_guide,guide}
}
},
#ENV{redirect},
#ARRAY{
id_auteur,#ENV{id_auteur}
}
})]
``` ```
le fichier PDF sera généré par SPIPDF avec l'URL suivante : `...spip.php?page=spipdf&spipdf=pdf_guide&id_article=1838&type_guide=guide` le fichier PDF sera généré par SPIPDF avec l'URL suivante : `...spip.php?page=spipdf&spipdf=pdf_guide&id_article=1838&type_guide=guide`
- exemple d'appel pour 2 fichiers PDF générés par le même squelette (pdf_guide.html) mais avec chacun leur contexte : - exemple d'appel pour 2 fichiers PDF générés par le même squelette (pdf_guide.html) mais avec chacun leur contexte :
```html ```html
[(#FORMULAIRE_GAMUMAIL{ #ENV{slug}, #ENV{email}, '', #ARRAY{ 0,#ARRAY{ [(#FORMULAIRE_GAMUMAIL{
fichier,pdf_guide, nom,Fiche_guide, contexte,#ARRAY{ #ENV{slug},
id_article,#ENV{id_article}, type_guide,guide, } }, 1,#ARRAY{ fichier,pdf_guide, #ENV{email},
nom,Fiche_guide_renfort, contexte,#ARRAY{ id_article,#ENV{id_article}, '',
type_guide,guide_renfort, } } }, #ENV{redirect}, #ARRAY{ #ARRAY{
id_auteur,#ENV{id_auteur} } })] 0,#ARRAY{
fichier,pdf_guide,
nom,Fiche_guide,
contexte,#ARRAY{
id_article,#ENV{id_article},
type_guide,guide,
}
},
1,#ARRAY{
fichier,pdf_guide,
nom,Fiche_guide_renfort,
contexte,#ARRAY{
id_article,#ENV{id_article},
type_guide,guide_renfort,
}
}
},
#ENV{redirect},
#ARRAY{
id_auteur,#ENV{id_auteur}
}
})]
``` ```
/!\ en cas de plusieurs PDF : /!\ en cas de plusieurs PDF :
- il faut une *clé unique* pour chaque #ARRAY (0, 1, 2... est une bonne solution)
- il faut une _clé unique_ pour chaque #ARRAY (0, 1, 2... est une bonne solution) - dans l'#ARRAY contexte il faut que le dernier élément soit suivi d'une virgule ou d'une accolade fermante
- dans l'#ARRAY contexte il faut que le dernier élément soit suivi d'une virgule ou d'une accolade fermante
#### 2. surcharges de chaque étape: charger / vérifier / traiter #### 2. surcharges de chaque étape: charger / vérifier / traiter
Pour chaque étape, on peut modifier l'Array de sortie : Pour chaque étape, on peut modifier l'Array de sortie :
* charger -> $valeurs
- charger -> $valeurs * verifier -> $erreurs
- verifier -> $erreurs * traiter -> $corps (array du message envoyé à facteur)
- traiter -> $corps (array du message envoyé à facteur)
Voir **gamumail_fonctions.php** pour les arguments des fonctions de surcharge + exemples 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 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)
La surcharge pour tous les slugs (`gamumail_tous_...`) précède celle spécifique par slug : on peut donc utiliser les 2 successivement. La surcharge pour tous les slugs (`gamumail_tous_...`) précède celle spécifique par slug : on peut donc utiliser les 2 successivement.
Syntaxe : Syntaxe :
* pour charger pour tous les slugs : **gamumail/tous_charger.php** (fonction `gamumail_tous_charger()`)
- pour charger pour tous les slugs : **gamumail/tous_charger.php** (fonction `gamumail_tous_charger()`) * pour charger spécifique d'un slug : **gamumail/NOM_SLUG_charger.php** avec une fonction :
- pour charger spécifique d'un slug : **gamumail/NOM_SLUG_charger.php** avec une fonction :
```php ```php
function gamumail_NOM_SLUG_charger($valeurs, $options = []){ function gamumail_NOM_SLUG_charger($valeurs, $options = []){
return $valeurs; return $valeurs;
} }
``` ```
* pour verifier pour tous les slugs : **gamumail/tous_verifier.php** (fonction `gamumail_tous_verifier()`)
- pour verifier pour tous les slugs : **gamumail/tous_verifier.php** (fonction `gamumail_tous_verifier()`) * pour verifier spécifique d'un slug : **gamumail/NOM_SLUG_verifier.php** avec une fonction :
- pour verifier spécifique d'un slug : **gamumail/NOM_SLUG_verifier.php** avec une fonction :
```php ```php
function gamumail_NOM_SLUG_verifier($erreurs, $options = []){ function gamumail_NOM_SLUG_verifier($erreurs, $options = []){
return $erreurs; return $erreurs;
} }
``` ```
* pour traiter pour tous les slugs : **gamumail/tous_traiter.php** (fonction `gamumail_tous_traiter()`)
- pour traiter pour tous les slugs : **gamumail/tous_traiter.php** (fonction `gamumail_tous_traiter()`) * pour traiter spécifique d'un slug : **gamumail/NOM_SLUG_traiter.php** avec une fonction par ex:
- pour traiter spécifique d'un slug : **gamumail/NOM_SLUG_traiter.php** avec une fonction par ex:
```php ```php
function gamumail_NOM_SLUG_traiter($corps, $options = []){ function gamumail_NOM_SLUG_traiter($corps, $options = []){
if (array_key_exists('id_article', $options)) { if (array_key_exists('id_article', $options)) {
@ -224,11 +214,8 @@ function gamumail_NOM_SLUG_traiter($corps, $options = []){
return $corps; return $corps;
} }
``` ```
#### 3. Pipeline remplacements_slug pour le traitement du contenu des messages #### 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 : Pour les remplacements des @@ et tout autre traitement du texte des mails on utilisera le pipeline **remplacements_slug** qui utilise les arguments suivants :
```php ```php
* @param array $flux données du pipeline : * @param array $flux données du pipeline :
* $flux['data'] = $html * $flux['data'] = $html
@ -263,35 +250,27 @@ Pour les remplacements des @@ et tout autre traitement du texte des mails on uti
} }
``` ```
#### 4. Pipeline post_gamumail_ok #### 4. Pipeline post_gamumail_ok
Ce pipeline est appelé si le retour de l'envoi du gamumail est OK. Il permet, par exemple, à Paybyurl d'aller modifier le champ date_paybyurl_envoye pour que la date d'envoi soit mise à jour. Ce pipeline est appelé si le retour de l'envoi du gamumail est OK. Il permet, par exemple, à Paybyurl d'aller modifier le champ date_paybyurl_envoye pour que la date d'envoi soit mise à jour.
#### 5. Ajouter un header / footer dans le content html #### 5. Ajouter un header / footer dans le content html
on peut définir un header / footer pour les messages : on peut définir un header / footer pour les messages :
* gamumail/html_header.html => header pour tous les mails
- gamumail/html_header.html => header pour tous les mails * gamumail/html_footer.html => footer 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_header.html => pour les mails du modele SLUG * gamumail/SLUG_html_footer.html => pour les mails du modele SLUG
- gamumail/SLUG_html_footer.html => pour les mails du modele SLUG
#### 6. Utiliser l'inclure `<INCLURE{fond=inclure/fermer_modale,env}>` pour fermeture de la modale de gamumail #### 6. Utiliser l'inclure `<INCLURE{fond=inclure/fermer_modale,env}>` pour fermeture de la modale de gamumail
- cet inclure est appelé au début de `formulaire/gamumail.html` : par défaut il est vide - cet inclure est appelé au début de `formulaire/gamumail.html` : par défaut il est vide
- un plugin peut arriver avec son fichier pour le surcharger afin de pouvoir intégrer du JS en fonction du message de retour `message_ok` du traiter de gamumail.php - un plugin peut arriver avec son fichier pour le surcharger afin de pouvoir intégrer du JS en fonction du message de retour `message_ok` du traiter de gamumail.php
- dans `gamumail.php`, la fonction `gamumail_traiter` ajoute en fin du message de retour OK `message_ok` le suffixe `@@gamumail_ok` - dans `gamumail.php`, la fonction `gamumail_traiter` ajoute en fin du message de retour OK `message_ok` le suffixe `@@gamumail_ok`
- il est donc possible de tester la présence de ce suffixe dans `message_ok` pour afficher du JS qui permet de refermer la modale dans laquelle est chargée gamumail - il est donc possible de tester la présence de ce suffixe dans `message_ok` pour afficher du JS qui permet de refermer la modale dans laquelle est chargée gamumail
mais aussi de faire la mise à jour de l'affichage d'un bloc ajax dans la page appelante. mais aussi de faire la mise à jour de l'affichage d'un bloc ajax dans la page appelante.
=> voir le code en commentaire dans le fichier `inclure/fermer_modale` => voir le code en commentaire dans le fichier `inclure/fermer_modale`
## API d'envoi de mails utilisant les slugs ## API d'envoi de mails utilisant les slugs
### fonction envoyer_gamumail() ### fonction envoyer_gamumail()
- exemple d'appel : - exemple d'appel :
```php ```php
$fonction = charger_fonction('envoyer_gamumail','inc'); $fonction = charger_fonction('envoyer_gamumail','inc');
$options = [ $options = [
@ -307,9 +286,7 @@ $options = [
]; ];
$fonction(lire_config('souscriptions/slug_souscription_validation'), $Tdest, $options); $fonction(lire_config('souscriptions/slug_souscription_validation'), $Tdest, $options);
``` ```
- arguments : - arguments :
```php ```php
* @param string $slug * @param string $slug
* @param string|array $destinataires = adresses mails et id_auteur séparées par , ou en array * @param string|array $destinataires = adresses mails et id_auteur séparées par , ou en array
@ -326,27 +303,13 @@ $fonction(lire_config('souscriptions/slug_souscription_validation'), $Tdest, $op
* 'nom' => 'nom_fichier_attache' ] * 'nom' => 'nom_fichier_attache' ]
``` ```
## Slugs et @@ fournis pour surcharges facultatives de SPIP pour permettre l'envoi des mails en Gamumail plutôt que via notification
### slug `valider_inscription` :
- message pour la validation de l'adresse mail lors de la création d'un compte avec le form `inscription`
- à activer via une surcharge de `action_inscrire_auteur_dist()` : cf plugin **sq_collecte/sq_collecte_fonctions.php**
- pour intégrer la définition du mot de passe dès l'inscription (sans le plugin inscription_motdepasse) + d'autres contrôles de l'inscription :
- pour la saisie surcharge du HTML du form d'inscription : cf plugin **sq_collecte/formulaires/inscription.html**
- pour les contrôles il faut surcharger `formulaires_inscription_verifier_dist()` : cf plugin **sq_collecte/sq_collecte_fonctions.php**
### slug `pass_oubli`
- message pour le reset du mot de passe
- à activer via une surcharge de `formulaires_oubli_traiter_dist()`: cf plugin **rocb/rocb_options.php**
## Outrepasser l'erreur de certificat auto-signé lors de devs en https local ## Outrepasser l'erreur de certificat auto-signé lors de devs en https local
=> dans le mes_options.php du site mettre : => dans le mes_options.php du site mettre :
```php ```
define('_DEBUG_AUTORISER', true); define('_DEBUG_AUTORISER', true);
``` ```
ce qui permet d'activer les options de curl pour ne pas vérifier le certificat dans *charger_pdf.php* :
ce qui permet d'activer les options de curl pour ne pas vérifier le certificat dans _charger_pdf.php_ : ```
```php
// pour une connexion https locale avec certificat auto-signé // pour une connexion https locale avec certificat auto-signé
if (defined('_DEBUG_AUTORISER')) { if (defined('_DEBUG_AUTORISER')) {
curl_setopt($CurlConnect, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($CurlConnect, CURLOPT_SSL_VERIFYHOST, false);

View file

@ -1,8 +1,6 @@
<?php <?php
if (!defined('_ECRIRE_INC_VERSION')) return; if (!defined('_ECRIRE_INC_VERSION')) return;
defined('_GAMUMAIL_PREFIX_SLUG') || define('_GAMUMAIL_PREFIX_SLUG', "slug");
/** /**
* créer un slug Gamumail * créer un slug Gamumail
* *
@ -32,8 +30,7 @@ function action_creer_slug_dist($slug = null, $opt = [], $ecraser = false){
]; ];
if ($id_slug = objet_inserer('gamumail', null, $set)) { if ($id_slug = objet_inserer('gamumail', null, $set)) {
$slug = getSlugGamumail($id_slug); $set = ['slug' => 'slug_'.$id_slug];
$set = ['slug' => $slug];
sql_updateq('spip_gamumails', $set, 'id_gamumail = '.$id_slug); sql_updateq('spip_gamumails', $set, 'id_gamumail = '.$id_slug);
} }
} else { } else {
@ -60,16 +57,3 @@ function action_creer_slug_dist($slug = null, $opt = [], $ecraser = false){
include_spip('inc/invalideur'); include_spip('inc/invalideur');
suivre_invalideur("id='id_gamumail/1'"); suivre_invalideur("id='id_gamumail/1'");
} }
function getSlugGamumail(int $id_gamumail, int|null $suffix = 0):string {
$slug = _GAMUMAIL_PREFIX_SLUG .'_'.$id_gamumail;
if ($suffix) {
$slug .= '_'.$suffix;
}
if (sql_countsel('spip_gamumails', ['slug='.sql_quote($slug)])) {
$suffix++;
return getSlugGamumail($id_gamumail, $suffix);
}
return $slug;
}

View file

@ -2,8 +2,5 @@
[(#AUTORISER{configurer,gamumail}|sinon_interdire_acces)] [(#AUTORISER{configurer,gamumail}|sinon_interdire_acces)]
<div class="inner"> <div class="inner">
<div class="mt-3 mb-7"> <INCLURE{fond=inclure/gamumail_config,env}>
<h1 class="mb-3">Configuration de Gamumail</h1>
<INCLURE{fond=inclure/gamumail_config,env}>
</div>
</div> </div>

View file

@ -1,11 +1,11 @@
[(#AUTORISER{webmestre}|sinon_interdire_acces)] [(#AUTORISER{webmestre}|sinon_interdire_acces)]
[(#REM) [(#REM)
squelette pour tester un slug squelette pour tester un slug
@paramètres : @paramètres :
#ENV{slug} = nom du slug #ENV{slug} = nom du slug
#ENV{dest} = string|array destinataire(s) #ENV{dest} = string|array destinataire(s)
@return : le résultat de la fonction envoyer_gamumail() en mode debug @return : le résultat de la fonction envoyer_gamumail() en mode debug
]
[(#ENV{slug}|tester_slug{#ENV{dest}, #ARRAY{id_dossier,#ENV{id_dossier}}})] ]
[(#ENV{slug}|tester_slug{#ENV{dest}})]

View file

@ -242,31 +242,3 @@
.formulaire_gamumail .btn { .formulaire_gamumail .btn {
font-size: 3rem; font-size: 3rem;
} }
.gestion_documents {
display:flex;
flex-direction:column;
gap: 20px;
}
.gestion_documents .colonne_droite {
border-bottom: 1px solid #CECECE;
margin-bottom: 20px;
}
.colonne_droite .dropfile{
display: flex;
gap: 5px;
align-items: center;
}
@media (min-width: 780px) {
.gestion_documents {
flex-direction: row;
}
.colonne_gauche {
width: 50%;
}
.colonne_droite {
width: 50%;
order: 2;
}
}

View file

@ -4,13 +4,9 @@
[(#REM) [(#REM)
inclure vide pour surcharge si besoin de passer du JS en fonction du retour du traiter du form inclure vide pour surcharge si besoin de passer du JS en fonction du retour du traiter du form
(voir inclure/fermer_modale.html pour exemple permettant de fermer une modalbox contenant ce formulaire + README) (voir dans le fichier fermer_modale.html pour exemple permettant de fermer une modalbox contenant ce formulaire + README)
]<INCLURE{fond=inclure/fermer_modale,env}> ]<INCLURE{fond=inclure/fermer_modale,env}>
[(#REM)
récupérer la langue du destinataire dans le paramètre options/lang
] #SET{lang_dest, #ENV{options/lang}|sinon{#CONFIG{langue_site}}}
<div class="formulaire_spip formulaire_#FORM"> <div class="formulaire_spip formulaire_#FORM">
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
@ -21,7 +17,7 @@
#SET{fichier,#SLUG|concat{_debutform}} #SET{fichier,#SLUG|concat{_debutform}}
[(#CHEMIN{gamumail/#GET{fichier}.html}|oui) [(#CHEMIN{gamumail/#GET{fichier}.html}|oui)
<INCLURE{fond=gamumail/#GET{fichier},env,lang=#GET{lang_dest}}> <INCLURE{fond=gamumail/#GET{fichier},env}>
] ]
<div class="editer_groupe"> <div class="editer_groupe">
#SET{name,pour} #SET{name,pour}
@ -45,7 +41,7 @@
<label for="#GET{name}_non">Non</label> <label for="#GET{name}_non">Non</label>
</div> </div>
<div class="choix"> <div class="choix">
<input type="radio" class="radio" name="#GET{name}" value="oui" id="#GET{name}_oui"[ (#ENV{#GET{name}}|oui|?{checked="checked"})] > <input type="radio" class="radio" name="#GET{name}" value="oui" id="#GET{name}_oui"[ (#ENV{#GET{name}}|=={oui}|?{checked="checked"})] >
<label for="#GET{name}_oui">Oui</label> <label for="#GET{name}_oui">Oui</label>
</div> </div>
</div> </div>
@ -93,7 +89,7 @@
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} #SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
#SET{obli,"obligatoire"} #SET{obli,"obligatoire"}
<div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
<label for="#GET{name}"><:gamumail:sujet:></label> <label for="#GET{name}">Sujet</label>
[<span class="erreur_message">(#GET{erreurs})</span>] [<span class="erreur_message">(#GET{erreurs})</span>]
<input required type="text" class="text sujet" name="#GET{name}" id="#GET{name}" value="#ENV{#GET{name}}" > <input required type="text" class="text sujet" name="#GET{name}" id="#GET{name}" value="#ENV{#GET{name}}" >
</div> </div>
@ -104,67 +100,77 @@
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} #SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
#SET{obli,"obligatoire"} #SET{obli,"obligatoire"}
<div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
<label for="#GET{name}"><:gamumail:corps_message:></label> <label for="#GET{name}">Texte</label>
[<span class="erreur_message">(#GET{erreurs})</span>] [<span class="erreur_message">(#GET{erreurs})</span>]
<textarea required class="textarea texte" name="#GET{name}" id="#GET{name}" rows="7">[(#ENV{#GET{name}})]</textarea> <textarea required class="textarea texte" name="#GET{name}" id="#GET{name}" rows="7">[(#ENV{#GET{name}})]</textarea>
</div> </div>
</div> </div>
<div class="gestion_documents"> #SET{fichier,#SLUG|concat{_soustexte}}
<div class="colonne_droite"> [(#CHEMIN{gamumail/#GET{fichier}.html}|oui)
<h2><:gamumail:fichiers_televerser:></h2> <INCLURE{fond=gamumail/#GET{fichier},env}>
<INCLURE{fond=inclure/bigform,env,accept=#LISTE{image/*, application/pdf},suffix_liste_fichiers=gamumail}> ]
</div>
<div class="colonne_gauche">
#SET{fichier,#SLUG|concat{_soustexte}}
[(#CHEMIN{gamumail/#GET{fichier}.html}|oui)
<INCLURE{fond=gamumail/#GET{fichier},env,lang=#GET{lang_dest}}>
]
<INCLURE{fond=gamumail/inc-pdf_envoyes,env}>
#SET{name,docs_spip} #SET{name,Tpdfs_ok}
<div class="documents_attaches"> <B_pdf>
<h2><:gamumail:documents_attaches:></h2> <h2><:gamumail:pdf_envoyes:></h2>
<div class="w500p"> <div class="editer_groupe">
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} #SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
<div class="editer editer_[(#GET{name})][ (#GET{erreurs}|oui)erreur]"> #SET{obli,"obligatoire"}
<div class="choix"> <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
[<span class="erreur_message">(#GET{erreurs})</span>] <BOUCLE_pdf(DATA){source tableau, #ENV{TFichierpdfs}}>
<label for="#GET{name}"><:gamumail:id_docs_attaches:></label> <div class="choix">
<input type="text" class="text" name="#GET{name}" value="[(#ENV{#GET{name}})]" id="#GET{name}" > <input type="checkbox" class="checkbox" name="#GET{name}[]" value="[(#VALEUR|table_valeur{fichier})]_#CLE" id="#GET{name}_#COMPTEUR_BOUCLE" checked="checked" >
</div> [(#SET{url_pdf,[(#URL_PAGE{spipdf}|parametre_url{spipdf,[(#VALEUR|table_valeur{fichier})]})]})]
<B_docs_spip> <BOUCLE_options(DATA){source tableau, #VALEUR|table_valeur{contexte}}>
<div class="details_docs_spip"> [(#SET{url_pdf,[(#GET{url_pdf}|parametre_url{#CLE,#VALEUR})]})]
<ul> </BOUCLE_options>
<BOUCLE_docs_spip(DOCUMENTS){tous}{id_document IN #ENV{#GET{name}}|explode{','}}> <label for="#GET{name}_#COMPTEUR_BOUCLE">[(#VALEUR|table_valeur{nom})] : <a href="#GET{url_pdf}">voir le PDF</a></label>
<li><strong>#ID_DOCUMENT :</strong> #TITRE ([<a class="mediabox" href="#URL_DOCUMENT">(#FICHIER|basename)</a>])</li>
</BOUCLE_docs_spip>
</ul>
</div>
</B_docs_spip>
</div>
</div> </div>
</div> </BOUCLE_pdf>
#SET{fichier,all_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,slug=#SLUG,options=#ENV{options}}>
]
#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>]
<h2><:gamumail:fichiers_annexes:></h2>
<INCLURE{fond=gamumail/#GET{fichier},env,options=#ENV{options}}>
]
</div> </div>
</div> </div>
</B_pdf>
#SET{name,docs_spip}
<h2><:gamumail:documents_attaches:></h2>
<div class="editer_groupe">
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
<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>
<B_docs_spip>
<div class="details_docs_spip">
<ul>
<BOUCLE_docs_spip(DOCUMENTS){id_document IN #ENV{#GET{name}}|explode{','}}>
<li><strong>#ID_DOCUMENT :</strong> #TITRE ([<a class="mediabox" href="#URL_DOCUMENT">(#FICHIER|basename)</a>])</li>
</BOUCLE_docs_spip>
</ul>
</div>
</B_docs_spip>
</div>
</div>
</B_doc>
<hr> #SET{fichier,all_fichiers}
<div class="boutons text-center"> [(#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,slug=#SLUG,options=#ENV{options}}>
]
#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>]
<h2><:gamumail:fichiers_annexes:></h2>
<INCLURE{fond=gamumail/#GET{fichier},env,options=#ENV{options}}>
]
<div class="boutons">
<button type="submit" class="btn"><:gamumail:envoyer:></button> <button type="submit" class="btn"><:gamumail:envoyer:></button>
</div> </div>
</div></form> </div></form>

View file

@ -13,8 +13,7 @@ include_spip('inc/filtres');
* de la forme []['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email', 'copie' => 'cc|cci'] ou ['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email'] * de la forme []['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email', 'copie' => 'cc|cci'] ou ['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email']
* le paramètre 'copie' est facultatif : cc ou cci pour mettre un destinataire en copie, '' par défaut = destinataire principal * le paramètre 'copie' est facultatif : cc ou cci pour mettre un destinataire en copie, '' par défaut = destinataire principal
* @param array $Tpdf = un ou plusieurs fichiers PDF générés par spiPDF (le contexte permet la personnalisation du contenu) * @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, 'lang' => 'en']] ou ['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3, 'lang' => 'en']] * []['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]] ou ['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]]
* NB: si besoin que le PDF généré soit dans une langue précise, il faut passer la passer en paramètre "lang" dans le contexte
* @param string $redirect * @param string $redirect
* @param array $options = un gros fourre-tout sous forme d'un array * @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 * utilisé en particulier par les inclure HTML de gamumail/#SLUG_soustexte et gamumail/#SLUG_fichiers
@ -27,7 +26,6 @@ function formulaires_gamumail_charger_dist($slug, $destinataires = 0, $Tclient =
$Tcc = lire_config('gamumail/mail_cc') !== '' ? explode(',', lire_config('gamumail/mail_cc', '')) : []; $Tcc = lire_config('gamumail/mail_cc') !== '' ? explode(',', lire_config('gamumail/mail_cc', '')) : [];
$Tcci = lire_config('gamumail/mail_cci') !== '' ? explode(',', lire_config('gamumail/mail_cci', '')) : []; $Tcci = lire_config('gamumail/mail_cci') !== '' ? explode(',', lire_config('gamumail/mail_cci', '')) : [];
$Trepondre_a = lire_config('gamumail/mail_repondre_a') !== '' ? explode(',', lire_config('gamumail/mail_repondre_a', '')) : []; $Trepondre_a = lire_config('gamumail/mail_repondre_a') !== '' ? explode(',', lire_config('gamumail/mail_repondre_a', '')) : [];
if (!empty($destinataires) and !is_array($destinataires)) { if (!empty($destinataires) and !is_array($destinataires)) {
@ -76,31 +74,11 @@ function formulaires_gamumail_charger_dist($slug, $destinataires = 0, $Tclient =
} }
} }
$TFichierPdf = pipeline('gamumail_filtrer_tPDF', [ $gamuMail = sql_fetsel('sujet, texte, id_docs', 'spip_gamumails', 'slug='.sql_quote($slug));
'args' => [
'TFichierPdf' => $TFichierPdf
],
'data' => $TFichierPdf
]
);
$gamuMail = [];
if (!empty($slug)) {
$gamuMail = sql_fetsel('sujet, texte, id_docs', 'spip_gamumails', 'slug='.sql_quote($slug));
}
$texte = $gamuMail['texte'] ?? '';
$sujet = $gamuMail['sujet'] ?? '';
// faire les remplacement <multi> selon la langue du destinataire (passée en $options[lang])
if (!empty($options['lang']) && in_array($options['lang'], liste_options_langues('var_lang'))) {
$texte = extraire_multi($texte, $options['lang']);
$sujet = extraire_multi($sujet, $options['lang']);
}
$valeurs = array( $valeurs = array(
"slug" => $slug, "slug" => $slug,
'sujet' => $sujet, 'sujet' => $gamuMail['sujet'] ?? '',
'texte' => $texte, 'texte' => $gamuMail['texte'] ?? '',
'pour' => implode(',', $Tmails), 'pour' => implode(',', $Tmails),
'cc' => implode(',', $Tcc), 'cc' => implode(',', $Tcc),
'cci' => implode(',', $Tcci), 'cci' => implode(',', $Tcci),
@ -121,17 +99,13 @@ function formulaires_gamumail_charger_dist($slug, $destinataires = 0, $Tclient =
$valeurs = $f($valeurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect); $valeurs = $f($valeurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);
} }
$rep = session_get('id_auteur') . '_' . session_get('login');
supprimer_repertoire(_DIR_TMP . 'bigupload/final/'.$rep);
$valeurs['_bigup_rechercher_fichiers'] = true;
return $valeurs; return $valeurs;
} }
function formulaires_gamumail_verifier_dist($slug, $destinataires = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []) :Array{ function formulaires_gamumail_verifier_dist($slug, $destinataires = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []) :Array{
$erreurs = array(); $erreurs = array();
//champs obligatoire //champs obligatoire
foreach (array('pour', 'sujet', 'texte') as $obligatoire) { foreach (array ('pour', 'sujet', 'texte') as $obligatoire) {
if (!_request($obligatoire)) $erreurs[$obligatoire] = 'Ce champs est obligatoire'; if (!_request($obligatoire)) $erreurs[$obligatoire] = 'Ce champs est obligatoire';
} }
@ -210,21 +184,6 @@ function formulaires_gamumail_verifier_dist($slug, $destinataires = 0, $Tclient
$erreurs = $f($erreurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect); $erreurs = $f($erreurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);
} }
/*
* Verification des fichiers téléversés
*/
defined('_IMG_MAX_WIDTH') || define('_IMG_MAX_WIDTH', 2048);
$options = [
'mime' => 'tout_mime',
'dimension_max' => [
'largeur' => 10000,
'hauteur' => 10000,
]
];
$bigform = charger_fonction('bigform_verifier','inc');
$bigform($options,$erreurs);
return $erreurs; return $erreurs;
} }
@ -261,22 +220,12 @@ function formulaires_gamumail_traiter_dist($slug, $destinataires = 0, $Tclient =
} }
} }
/*
* on recupère d'éventuels fichiers téléversés
*/
include_spip('inc/joindre_document');
set_request('joindre_upload','ok');
$Tfiles = joindre_trouver_fichier_envoye();
if (!is_array($Tfiles)) {
$Tfiles = [];
}
if (empty($envoi_separe)) { if (empty($envoi_separe)) {
gamuSend($slug, $options, $destinataires, $Tclient, $Tpdf, $Tfiles, $redirect, $retour); gamuSend($slug, $options, $destinataires, $Tclient, $Tpdf, $redirect, $retour);
} else { } else {
$ok = true; $ok = true;
foreach ($destinataires as $d) { foreach ($destinataires as $d) {
$r = gamuSend($slug, $options, [$d], $Tclient, $Tpdf, $Tfiles, $redirect); $r = gamuSend($slug, $options, [$d], $Tclient, $Tpdf, $redirect);
if (!$r) { if (!$r) {
$ok = false; $ok = false;
} }
@ -301,16 +250,14 @@ function formulaires_gamumail_traiter_dist($slug, $destinataires = 0, $Tclient =
} }
function gamuSend($slug, $options, $destinataires, $Tclient, $Tpdf, $Tfiles, $redirect, &$retour = []) { function gamuSend($slug, $options, $destinataires, $Tclient, $Tpdf, $redirect, &$retour = []) {
$cc = _request('cc') ?? ''; $cc = _request('cc');
$cci = _request('cci') ?? ''; $cci = _request('cci');
$repondre_a = _request('repondre_a') ?? ''; $repondre_a = _request('repondre_a');
$cc = explode(',', $cc); $cc = explode(',', $cc);
$cci = explode(',', $cci); $cci = explode(',', $cci);
$Tcci_gamuza = $GLOBALS['gamuza_mail_cci'] ?? [];
$cci = array_merge($cci, $Tcci_gamuza);
$repondre_a = explode(',', $repondre_a); $repondre_a = explode(',', $repondre_a);
$sujet = _request('sujet'); $sujet = _request('sujet');
@ -356,9 +303,7 @@ function gamuSend($slug, $options, $destinataires, $Tclient, $Tpdf, $Tfiles, $re
'chemin' => $destination, 'chemin' => $destination,
'nom' => $nom_fichier, 'nom' => $nom_fichier,
'encodage' => 'base64', 'encodage' => 'base64',
'mime' => $type_mime, 'mime' => $type_mime
'quoi' => 'docs_spip',
'qui' => $id_document
]; ];
} }
} }
@ -379,33 +324,10 @@ function gamuSend($slug, $options, $destinataires, $Tclient, $Tpdf, $Tfiles, $re
'chemin' => $destination, 'chemin' => $destination,
'nom' => $nom_fichier, 'nom' => $nom_fichier,
'encodage' => 'base64', 'encodage' => 'base64',
'mime' => $type_mime, 'mime' => $type_mime
'quoi' => 'docs_spip',
'qui' => $id_doc
]; ];
} }
} }
// les documents par tFiles (téléversés)
$tFilename = [];
if (!empty($Tfiles)) {
include_spip('inc/documents');
$rep = sous_repertoire(_DIR_CACHE . 'bigform');
foreach ($Tfiles as $fichier) {
$filename = $rep . $fichier['name'];
$tFilename[] = $filename;
deplacer_fichier_upload($fichier['tmp_name'], $filename);
$pieces_jointes[] = [
'chemin' => $filename,
'nom' => $fichier['name'],
'encodage' => 'base64',
'mime' => $fichier['type'],
'quoi' => 'televerser',
'qui' => $fichier['name']
];
}
}
// les pdfs générés en fonction du contexte // les pdfs générés en fonction du contexte
$Tpdf_del = []; $Tpdf_del = [];
if (!empty($Tpdfs_ok) and is_array($Tpdfs_ok)) { if (!empty($Tpdfs_ok) and is_array($Tpdfs_ok)) {
@ -437,21 +359,17 @@ function gamuSend($slug, $options, $destinataires, $Tclient, $Tpdf, $Tfiles, $re
], 'data' => $c ], 'data' => $c
]); ]);
$pdf = $recup_pdf($fichier, $c, $args); $pdf = $recup_pdf($fichier, $c);
if (!empty($pdf)) { $nom_fichier = $nom.'.pdf';
$nom_fichier = $nom.'.pdf'; $destination = _DIR_TMP.basename($nom_fichier);
$destination = _DIR_TMP.basename($nom_fichier); $Tpdf_del[] = $destination;
$Tpdf_del[] = $destination; file_put_contents($destination,$pdf);
file_put_contents($destination,$pdf); $pieces_jointes[] = [
$pieces_jointes[] = [ 'chemin' => $destination,
'chemin' => $destination, 'nom' => $nom_fichier,
'nom' => $nom_fichier, 'encodage' => 'base64',
'encodage' => 'base64', 'mime' => 'application/pdf'
'mime' => 'application/pdf', ];
'quoi' => 'pdf_genere',
'qui' => $fichier
];
}
} }
} }
@ -484,7 +402,7 @@ function gamuSend($slug, $options, $destinataires, $Tclient, $Tpdf, $Tfiles, $re
} }
$html = $html_header . $html . $html_footer; $html = $html_header . $html . $html_footer;
// pipeline pour les traitements du contenu des slugs spécifiques de chaque plugin // pipeline pour les traitement du contenu des slugs spécifiques de chaque plugin
$html = pipeline('remplacements_slug', array( $html = pipeline('remplacements_slug', array(
'args' => $args, 'args' => $args,
'data' => $html 'data' => $html
@ -500,13 +418,13 @@ function gamuSend($slug, $options, $destinataires, $Tclient, $Tpdf, $Tfiles, $re
'texte' => $texte, 'texte' => $texte,
'cc' => $cc, 'cc' => $cc,
'cci' => $cci, 'cci' => $cci,
'bcc' => $cci,
'pieces_jointes' => $pieces_jointes 'pieces_jointes' => $pieces_jointes
]; ];
if ($repondre_a) { if ($repondre_a) {
$corps['repondre_a'] = $repondre_a; $corps['repondre_a'] = $repondre_a;
} }
// surcharges de traiter : d'abord les surcharges pour tous les slugs (tous_traiter.php) puis les spécifiques par slug (nom_slug_traiter.php) // surcharges de traiter : d'abord les surcharges pour tous les slugs (tous_traiter.php) puis les spécifiques par slug (nom_slug_traiter.php)
if ($f = charger_fonction('traiter', 'gamumail', true)) { if ($f = charger_fonction('traiter', 'gamumail', true)) {
$corps = $f($corps, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect); $corps = $f($corps, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);
@ -523,32 +441,12 @@ function gamuSend($slug, $options, $destinataires, $Tclient, $Tpdf, $Tfiles, $re
]); ]);
$sujet = $remplacement_generiques($args, $sujet); $sujet = $remplacement_generiques($args, $sujet);
// extraire les multi une fois les remplacements faits
$lang = $options['lang'] ?? lire_config('langue_site');
$sujet = extraire_multi($sujet, $lang);
$corps['html'] = extraire_multi($corps['html'], $lang);
$corps['texte'] = extraire_multi($corps['texte'], $lang);
$args['corps'] = $corps; $args['corps'] = $corps;
$args['sujet'] = $sujet; $args['sujet'] = $sujet;
// envoyer ! // envoyer !
$envoyer_mail = charger_fonction('envoyer_mail', 'inc/'); $envoyer_mail = charger_fonction('envoyer_mail', 'inc/');
//var_dump($destinataires);
//var_dump($corps);
$ok = $envoyer_mail($destinataires, $sujet, $corps); $ok = $envoyer_mail($destinataires, $sujet, $corps);
/*
* on vide les fichiers temp televerses par bigup
*/
if (count($tFilename)) {
foreach ($tFilename as $file) {
if (file_exists($file)) {
unlink($file);
}
}
}
if (!$ok) { if (!$ok) {
spip_log("Erreur d'envoi du mail : ","gamumail"); spip_log("Erreur d'envoi du mail : ","gamumail");
spip_log($corps,"gamumail"); spip_log($corps,"gamumail");

View file

@ -1,26 +0,0 @@
#SET{name,Tpdfs_ok}
<div class="pdf_envoyes">
<B_pdf>
<h2><:gamumail:pdf_envoyes:></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_pdf(DATA){source tableau, #ENV{TFichierpdfs}}>
<div class="choix">
<input type="checkbox" class="checkbox" name="#GET{name}[]" value="[(#VALEUR|table_valeur{fichier})]_#CLE" id="#GET{name}_#COMPTEUR_BOUCLE" checked="checked" >
[(#SET{url_pdf, #URL_PAGE{spipdf}
|parametre_url{spipdf, #VALEUR|table_valeur{fichier}}
|parametre_url{lang, #GET{lang_dest}}
})]
<BOUCLE_options(DATA){source tableau, #VALEUR|table_valeur{contexte}}>
[(#SET{url_pdf,[(#GET{url_pdf}|parametre_url{#CLE,#VALEUR})]})]
</BOUCLE_options>
<label for="#GET{name}_#COMPTEUR_BOUCLE">[(#VALEUR|table_valeur{nom}|html_entity_decode)] : <a href="#GET{url_pdf}">voir le PDF</a></label>
</div>
</BOUCLE_pdf>
</div>
</div>
</B_pdf>
</div>

View file

@ -28,7 +28,7 @@ function gamumail_upgrade($nom_meta_base_version, $version_cible) {
$maj['create'] = array( $maj['create'] = array(
array('maj_tables', array('spip_gamumails')), array('maj_tables', array('spip_gamumails')),
array('creer_compte_curl', 'creer_slugs'), array('creer_compte_curl')
); );
$maj['1.0.2'] = array(array('maj_tables', array('spip_gamumails'))); $maj['1.0.2'] = array(array('maj_tables', array('spip_gamumails')));
$maj['1.0.5'] = array(array('creer_compte_curl')); $maj['1.0.5'] = array(array('creer_compte_curl'));
@ -37,54 +37,14 @@ function gamumail_upgrade($nom_meta_base_version, $version_cible) {
$maj['1.0.12'] = array(array('creer_compte_curl')); $maj['1.0.12'] = array(array('creer_compte_curl'));
$maj['1.0.14'] = array(array('maj_tables', array('spip_gamumails'))); $maj['1.0.14'] = array(array('maj_tables', array('spip_gamumails')));
$maj['1.0.16'] = array(array('maj_tables', array('spip_gamumails'))); $maj['1.0.16'] = array(array('maj_tables', array('spip_gamumails')));
$maj['1.0.17'] = array(array('creer_slugs'));
include_spip('base/upgrade'); include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj); maj_plugin($nom_meta_base_version, $version_cible, $maj);
} }
// créer les slugs fournis avec Gamumail
function creer_slugs() {
if (!sql_countsel('spip_gamumails', 'slug="valider_inscription"')) {
$set = [
'slug' => 'valider_inscription',
'titre' => 'Message de création de compte : validation de l\'adresse mail',
'sujet' => '[@@nom_site@@] Création de votre compte',
'texte' => 'Bonjour @@nom@@,
Vous venez de créer votre compte sur @@url_site@@ avec l\'identifiant de connexion @@mail_compte@@.
[Merci de cliquer sur ce lien pour le confirmer et vous connecter->@@url_token@@].
Envoyé par @@nom_site@@ (@@url_site@@)',
'statut' => 'publie',
'public' => 'non',
'rang' => '999'
];
sql_insertq('spip_gamumails', $set);
}
if (!sql_countsel('spip_gamumails', 'slug="pass_oubli"')) {
$set = [
'slug' => 'pass_oubli',
'titre' => 'Message de reset du mot de passe',
'sujet' => '[@@nom_site@@] récupération de votre mot de passe',
'texte' => 'Pour récupérer votre accès @@nom_site@@ (@@url_site@@), merci de suivre ce lien :
@@url_spip_pass@@
Vous pourrez alors saisir un nouveau mot de passe et vous connecter au site
Envoyé par @@nom_site@@ (@@url_site@@)',
'statut' => 'publie',
'public' => 'non',
'rang' => '999'
];
sql_insertq('spip_gamumails', $set);
}
}
function creer_compte_curl(){ function creer_compte_curl(){
if (sql_countsel('spip_auteurs', 'nom="curl_login"')){ if (sql_countsel('nom', 'spip_auteurs', 'nom="curl_login"')){
return; return;
} }
$mdp = uniqid(uniqid(),1); $mdp = uniqid(uniqid(),1);

View file

@ -31,9 +31,5 @@ $GLOBALS['remplacements_gamumail'] = [
'@@nom@@' => _T('gamumail:nom'), '@@nom@@' => _T('gamumail:nom'),
'@@prenom@@' => _T('gamumail:prenom_sinon_nom'), '@@prenom@@' => _T('gamumail:prenom_sinon_nom'),
'@@url_site@@' => _T('gamumail:url_site'), '@@url_site@@' => _T('gamumail:url_site'),
'@@nom_site@@' => _T('gamumail:nom_site'),
'@@url_raz_passe@@' => _T('gamumail:url_raz_passe'), '@@url_raz_passe@@' => _T('gamumail:url_raz_passe'),
'@@url_spip_pass@@' => _T('gamumail:url_spip_pass'),
'@@date_maintenant@@' => _T('gamumail:date_maintenant'),
'@@date_heure_maintenant' => _T('gamumail:date_heure_maintenant'),
]; ];

View file

@ -3,7 +3,29 @@ if (!defined('_ECRIRE_INC_VERSION')){
return; return;
} }
function inc_charger_pdf_dist($fichier_pdf, $contexte = [], $args = []){ function inc_charger_pdf_dist($fichier_pdf, $contexte = []){
$f = charger_fonction('generer_pdf','gamu');
return $f($fichier_pdf, $contexte); $login = lire_config('curl_login');
$password = lire_config('curl_mdp');
$contexte['spipdf'] = $contexte['spipdf'] ?? $fichier_pdf ;
$url = generer_url_public('spipdf', $contexte, true, false);
$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);
curl_setopt($CurlConnect, CURLOPT_USERPWD, $login.':'.$password);
$retour = curl_exec($CurlConnect);
if( ! $retour = curl_exec($CurlConnect)) {
trigger_error(curl_error($CurlConnect));
}
curl_close($CurlConnect);
return $retour;
} }

View file

@ -14,7 +14,7 @@ if (!defined('_ECRIRE_INC_VERSION')){
* $options['cci' => true] pour passer les destinataires en cci si il y en a plus qu'un * $options['cci' => true] pour passer les destinataires en cci si il y en a plus qu'un
* $options['dest_cci' => 'toto@truc.tld'] le destinataire (to) si $options['cci'] === true * $options['dest_cci' => 'toto@truc.tld'] le destinataire (to) si $options['cci'] === true
* (sinon c'est le compte expéditeur du site) * (sinon c'est le compte expéditeur du site)
* $options['pdfs' => [ 0 => [...], 1 => [...] ] array des fichiers PDF générés à attacher dont les éléments peuvent être : * $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 nom de squelette PDF
* - soit un array avec 3 éléments (seul le 1er est obligatoire): * - soit un array avec 3 éléments (seul le 1er est obligatoire):
* [ 'fichier' => 'squelette_PDF', * [ 'fichier' => 'squelette_PDF',
@ -32,7 +32,7 @@ if (!defined('_ECRIRE_INC_VERSION')){
* *
*/ */
function inc_envoyer_gamumail($slug, $destinataires, $options = [], $Tid_doc_piece_jointe = []) { function inc_envoyer_gamumail($slug, $destinataires, $options = [], $Tid_doc_piece_jointe = []) {
//var_dump($options) ;die; //var_dump($options) ;
//var_dump($destinataires); //var_dump($destinataires);
include_spip('inc/texte'); include_spip('inc/texte');
@ -53,28 +53,16 @@ function inc_envoyer_gamumail($slug, $destinataires, $options = [], $Tid_doc_pie
return $retour; return $retour;
} }
// langue (par défaut langue du site) // contenus du slug
$lang = !empty($options['lang']) ? $options['lang'] : lire_config('langue_site', 'fr'); $res = sql_fetsel('*', 'spip_gamumails', 'slug = "'.$slug.'"');
$id_docs = ''; if ($res) {
if ($slug === 'no_slug' && array_key_exists('message', $options)) { $sujet = $res['sujet'];
$html = $options['message']; $html = propre($res['texte']);
if (array_key_exists('sujet', $options)) { $id_docs = $res['id_docs'];
$sujet = $options['sujet']; }
} else { else {
$sujet = array_shift($html); $retour['message_erreur'] = _T("gamumail:pas_de_slug");
} return $retour;
} else {
// contenus du slug
$res = sql_fetsel('*', 'spip_gamumails', 'slug = "'.$slug.'"');
if ($res) {
$sujet = extraire_multi($res['sujet'], $lang);
$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 // destinataires (id_auteur ou mails) => $pour[] est un array avec les adresses mails valides
@ -96,10 +84,8 @@ function inc_envoyer_gamumail($slug, $destinataires, $options = [], $Tid_doc_pie
$non_vide = function ($elem) { $non_vide = function ($elem) {
return ($elem != NULL AND $elem != ''); return ($elem != NULL AND $elem != '');
}; };
$cc = array_filter(explode(',', (lire_config('gamumail/mail_cc') ?? '')), $non_vide); $cc = array_filter(explode(',', lire_config('gamumail/mail_cc')), $non_vide);
$cci = array_filter(explode(',', (lire_config('gamumail/mail_cci') ?? '')), $non_vide); $cci = array_filter(explode(',', lire_config('gamumail/mail_cci')), $non_vide);
$Tcci_gamuza = $GLOBALS['gamuza_mail_cci'] ?? [];
$cci = array_merge($cci, $Tcci_gamuza);
// si on a plusieurs destinataires et $options['cci' => true] les passer en cci et mettre le compte expéditeur du site en to // 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']) { if (count($pour) > 1 AND isset($options['cci']) AND $options['cci']) {
@ -196,20 +182,20 @@ function inc_envoyer_gamumail($slug, $destinataires, $options = [], $Tid_doc_pie
$nom = array_key_exists('nom', $pdf) ? $pdf['nom'] : $pdf; $nom = array_key_exists('nom', $pdf) ? $pdf['nom'] : $pdf;
} }
else break; 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'
];
} }
$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'
];
} }
} }
@ -233,14 +219,15 @@ function inc_envoyer_gamumail($slug, $destinataires, $options = [], $Tid_doc_pie
$args = $options; $args = $options;
$args['slug'] = $slug; $args['slug'] = $slug;
$args['destinataires'] = $pour; $args['destinataires'] = $pour;
//var_dump($args) ;
$html = pipeline('remplacements_slug', [ $html = pipeline('remplacements_slug', array(
'args' => $args, 'args' => $args,
'data' => $html 'data' => $html
]); ));
$sujet = pipeline('remplacements_slug',[ $sujet = pipeline('remplacements_slug',[
'args' => $args, 'args' => $args,
'data' => $sujet 'data' => $sujet
]); ]);
// traitement des remplacements génériques fournis par Gamumail // traitement des remplacements génériques fournis par Gamumail
@ -248,10 +235,6 @@ function inc_envoyer_gamumail($slug, $destinataires, $options = [], $Tid_doc_pie
$html = $remplacement_generiques($args, $html); $html = $remplacement_generiques($args, $html);
$sujet = $remplacement_generiques($args, $sujet); $sujet = $remplacement_generiques($args, $sujet);
// traduction des <multi> intégrés par les remplacements
$html = extraire_multi($html, $lang);
$sujet = extraire_multi($sujet, $lang);
include_spip('facteur_fonctions'); include_spip('facteur_fonctions');
$texte = facteur_mail_html2text($html); $texte = facteur_mail_html2text($html);
$corps = [ $corps = [
@ -282,11 +265,12 @@ function inc_envoyer_gamumail($slug, $destinataires, $options = [], $Tid_doc_pie
echo '<br>$corps : '; echo '<br>$corps : ';
var_dump($corps); var_dump($corps);
$ok = true; $ok = true;
//exit; exit;
} else { }
else {
// pour ne pas avoir de warning de la fonction envoyer_mail() on doit lui passer un paramètre $from et un $header // pour ne pas avoir de warning de la fonction envoyer_mail() on doit lui passer un paramètre $from et un $header
$from = ''; $from = '';
$header = $options['header'] ?? ''; $header = '';
$envoyer_mail = charger_fonction('envoyer_mail', 'inc/'); $envoyer_mail = charger_fonction('envoyer_mail', 'inc/');
$ok = $envoyer_mail($pour, $sujet, $corps, $from, $header); $ok = $envoyer_mail($pour, $sujet, $corps, $from, $header);
} }

View file

@ -13,40 +13,6 @@ if (!defined('_ECRIRE_INC_VERSION')) {
* *
**/ **/
function inc_gamumail_remplacements_dist($args, $html) { function inc_gamumail_remplacements_dist($args, $html) {
$slug = $args['slug'];
/**
* @@url_spip_pass@@
* ATTENTION, il ne faut passer QUE si @@url_spip_pass@@ est présent, car la fonction
* auteur_attribuer_jeton ne peut etre appeler qu'une fois, du mois, il faut utilser le jeton de son dernier appel.
**/
if (strpos($html, '@@url_spip_pass@@') !== false) {
$url_spip_pass = '';
if (!empty($args['destinataires'][0])) {
$id_auteur = (int) sql_getfetsel('id_auteur', 'spip_auteurs', 'email='.sql_quote($args['destinataires'][0]));
include_spip('action/inscrire_auteur');
$cookie = auteur_attribuer_jeton($id_auteur);
$url_spip_pass = url_absolue(
generer_url_public('spip_pass', "p=$cookie"),
$GLOBALS['meta']['adresse_site'] . '/'
);
}
$html = gamumail_remplacer_modele('url_spip_pass', $url_spip_pass, $html);
}
/**
* @@url_token@@ pour le mail de validation de création de compte (slug valider_inscription) + @@mail_compte@@
* en SPIP 4.2+ on DOIT récupérer l'URL de validation générée par action_inscrire_auteur()
**/
if ($slug === 'valider_inscription'
&& ($id_auteur = $args['options']['id_auteur'])
&& ($url_confirm = $args['options']['url_confirm'])
) {
$auteur = sql_fetsel('email', 'spip_auteurs', 'id_auteur='.intval($id_auteur));
$html = str_replace('@@url_token@@', $url_confirm, $html);
$html = str_replace('@@mail_compte@@', $auteur['email'], $html);
}
/** /**
* @@nom@@ => $nom ou un espace pour vider le champ @@nom@@ * @@nom@@ => $nom ou un espace pour vider le champ @@nom@@
**/ **/
@ -70,24 +36,12 @@ function inc_gamumail_remplacements_dist($args, $html) {
$url_site = lire_config('adresse_site'); $url_site = lire_config('adresse_site');
$html = gamumail_remplacer_modele('url_site', $url_site, $html); $html = gamumail_remplacer_modele('url_site', $url_site, $html);
/**
* @@nom_site@@ => nom du site
**/
$nom_site = lire_config('nom_site');
$html = gamumail_remplacer_modele('nom_site', $nom_site, $html);
/** /**
* @@url_raz_passe@@ => URL de la page de récupération de mot de passe * @@url_raz_passe@@ => URL de la page de récupération de mot de passe
**/ **/
$url_raz_passe = url_absolue(generer_url_public('spip_pass')); $url_raz_passe = url_absolue(generer_url_public('spip_pass'));
$html = gamumail_remplacer_modele('url_raz_passe', $url_raz_passe, $html); $html = gamumail_remplacer_modele('url_raz_passe', $url_raz_passe, $html);
/**
* @@date_maintenant@@ => date actuelle, au format jj/mm/aaaa
* @@date_heure_maintenant@@ => date + heure actuelle, au format jj/mm/aaaa HH:mm:ss
**/
$html = gamumail_remplacer_modele('date_maintenant', date('d/m/Y'), $html);
$html = gamumail_remplacer_modele('date_heure_maintenant', date('d/m/Y H:i:s'), $html);
return $html; return $html;
} }

View file

@ -80,7 +80,7 @@
<div class="une_conf"> <div class="une_conf">
<small class="name_config">gamumail/mail_cc</small> <small class="name_config">gamumail/mail_cc</small>
<h4><:gamumail:email_en_cc:></h4> <h4><:gamumail:email_en_cc:></h4>
<div class="#EDIT{meta-gamumail/mail_cc} inbl w600p nomulti">[(#CONFIG{gamumail/mail_cc}|sinon{<i><:gamumail:dbe_clic_editer:></i>})]</div> <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:>.</p> <p class="explication"><:gamumail:plusieurs_mails_separer_virgule:>.</p>
</div> </div>
</div> </div>
@ -88,7 +88,7 @@
<div class="une_conf"> <div class="une_conf">
<small class="name_config">gamumail/mail_cci</small> <small class="name_config">gamumail/mail_cci</small>
<h4><:gamumail:email_en_cci:></h4> <h4><:gamumail:email_en_cci:></h4>
<div class="#EDIT{meta-gamumail/mail_cci} inbl w600p nomulti">[(#CONFIG{gamumail/mail_cci}|sinon{<i><:gamumail:dbe_clic_editer:></i>})]</div> <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:>.</p> <p class="explication"><:gamumail:plusieurs_mails_separer_virgule:>.</p>
</div> </div>
@ -114,7 +114,7 @@
<div class="objet--slug"> <div class="objet--slug">
<strong><:gamumail:slug:>: </strong> <strong><:gamumail:slug:>: </strong>
[(#AUTORISER{modifier_nom_slug, gamumail, #ID_GAMUMAIL}|?{ [(#AUTORISER{modifier_nom_slug, gamumail, #ID_GAMUMAIL}|?{
<span class="[(#EDIT{nom_slug})] nomulti">[(#SLUG|sinon{<:gamumail:dbe_clic_editer:>})]</span> <span class="[(#EDIT{nom_slug})]">[(#SLUG|sinon{<:gamumail:dbe_clic_editer:>})]</span>
, ,
<span class="">[(#SLUG)]</span> <span class="">[(#SLUG)]</span>
})] })]
@ -131,17 +131,14 @@
</div> </div>
<div class="objet--mail"> <div class="objet--mail">
<span><strong><:gamumail:documents_attaches:> :</strong> <em class="explication"><:gamumail:liste_id_separes:> , </em></span> <span><strong><:gamumail:documents_attaches:> :</strong> <em class="explication"><:gamumail:liste_id_separes:> , </em></span>
<div class="texte #EDIT{id_docs} nomulti"> <div class="texte #EDIT{id_docs}">
[(#ID_DOCS|sinon{<:gamumail:dbe_clic_editer:>})] [(#ID_DOCS|sinon{<:gamumail:dbe_clic_editer:>})]
</div> </div>
<B_docs_spip> <B_docs_spip>
<div class="details_docs_spip"> <div class="details_docs_spip">
<ul> <ul>
<BOUCLE_docs_spip(DOCUMENTS){id_document IN #ID_DOCS|explode{','}}{tous}> <BOUCLE_docs_spip(DOCUMENTS){id_document IN #ID_DOCS|explode{','}}{tous}>
<li><strong>#ID_DOCUMENT :</strong> #TITRE <li><strong>#ID_DOCUMENT :</strong> #TITRE ([<a class="mediabox" href="#URL_DOCUMENT">(#FICHIER|basename)</a>])</li>
([<a class="mediabox" href="#URL_DOCUMENT" title="Voir le document">(#FICHIER|basename)</a>)]
[ / <a href="(#URL_ECRIRE{document_edit}|parametre_url{id_document,#ID_DOCUMENT})"><i class="fa fa-edit"></i> Gérer le document</a>]
</li>
</BOUCLE_docs_spip> </BOUCLE_docs_spip>
</ul> </ul>
</div> </div>

View file

@ -1,48 +0,0 @@
<style type="text/css" media="screen">
.fichier .description {
display: flex;
flex-direction: row;
/* margin-bottom: 6px; */
}
.fichier .description:hover {
background-color:rgba(177, 187, 196,0.5);
}
.fichier .previsualisation {
margin: 5px;
}
.html_titre {
display: none!important;
}
</style>
[(#REM)
surcharge du fichier de bigform :
- inclure/inc-bigup_liste_fichiers.html
]
<B_fichiers>
<div class='bigup_fichiers fichiers_[(#ENV{nom}|concat{#ENV{multiple}|=={oui}|?{\[\]}}|bigup_nom2classe)]'>
<BOUCLE_fichiers(DATA){source tableau, #FICHIERS|bigup_lister_fichiers{#ENV{nom},#ENV{multiple}}}>
<div class='fichier'>
<div class="description">
[(#VALEUR{bigup/vignette/data}|oui)
<div class="previsualisation #VALEUR{bigup/extension}" title="[(#NAME|attribut_html)] ([(#SIZE|taille_en_octets)])">
<span style="background-image:url([(#VALEUR{bigup/vignette/data})]);"></span>
</div>]
[(#VALEUR{bigup/vignette/data}|non)
<div class="vignette_extension #VALEUR{bigup/extension}" title="[(#TYPE|attribut_html)]"><span></span></div>]
<div class='infos'>
<span class='name'><strong>#NAME</strong></span>
<span class='size'>[(#SIZE|taille_en_octets)]</span>
</div>
<div class='actions'>
<button class='btn' type='submit'
name='bigup_enlever_fichier' value="#VALEUR{bigup/identifiant}"
onclick="jQuery(this).parents('form').find('input,textarea,select').filter('[required]').prop('required', false); return true;">
<:bigup:bouton_enlever:>
</button>
</div>
</div>
</div>
</BOUCLE_fichiers>
</div>
</B_fichiers>

View file

@ -1,112 +0,0 @@
<?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(
// 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',
'corps_message' => 'Text',
// 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.',
'date_maintenant' => 'Current date (in dd/mm/yyyy format)',
'date_heure_maintenant' => 'Date + current time (in dd/mm/yyyy HH:mm:ss format)',
//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
'fichiers_annexes' => 'Fichiers annexes',
// I
'icone_creer_gamumail' => 'Créer un gamumail',
'icone_modifier_gamumail' => 'Modifier ce gamumail',
'info_1_gamumail' => 'Un gamumail',
'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',
// N
'nom' => 'Prénom Nom du destinataire (ou Nom si pas de champ "prenom")',
// 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.',
'pdf_envoyes' => 'Fichiers PDF générés',
'prenom_sinon_nom' => 'Prénom du destinataire (ou Nom si pas de champ "prenom")',
// 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',
'sujet' => 'Subject',
'switch_modele_public' => 'Modifier la visibilité publique du modèle',
// T
'texte_ajouter_gamumail' => 'Ajouter un gamumail',
'texte_changer_statut_gamumail' => 'Ce gamumail est :',
'texte_creer_associer_gamumail' => 'Créer et associer un gamumail',
'texte_definir_comme_traduction_gamumail' => 'Ce gamumail est une traduction du gamumail numéro :',
'titre_gamumail' => 'Gamumail',
'titre_gamumails' => 'Gamumails',
'titre_gamumails_rubrique' => 'Gamumails de la rubrique',
'titre_langue_gamumail' => 'Langue de ce gamumail',
'titre_logo_gamumail' => 'Logo de ce gamumail',
'titre_objets_lies_gamumail' => 'Liés à ce gamumail',
// U
'url_site' => 'URL du site',
'url_raz_passe' => 'URL de la page de récupération de mot de passe',
'url_spip_pass' => 'URL of the link to reset the account password <small>(only to be used in the password reset slug!)</small>',
// V
'visibilite_public' => 'Disponible dans la liste des modèles',
);

View file

@ -21,14 +21,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'choix_slug' => 'Choix du modèle', 'choix_slug' => 'Choix du modèle',
'contenu_mail' => 'Contenu du mail', 'contenu_mail' => 'Contenu du mail',
'creer_modele' => 'Créer un modèle de mail', 'creer_modele' => 'Créer un modèle de mail',
'corps_message' => 'Texte',
// D // D
'documents_attaches' => 'Documents attachés', 'documents_attaches' => 'Documents attachés',
'dbe_clic_editer' => 'Double clic pour éditer', 'dbe_clic_editer' => 'Double clic pour éditer',
'dbe_clic_editer_champs' => 'Double clic pour éditer les champs des modèles.', 'dbe_clic_editer_champs' => 'Double clic pour éditer les champs des modèles.',
'date_maintenant' => 'Date actuelle (au format jj/mm/aaaa)',
'date_heure_maintenant' => 'Date + heure actuelle (au format jj/mm/aaaa HH:mm:ss)',
//EE //EE
'envoyer' => 'Envoyer', 'envoyer' => 'Envoyer',
@ -41,7 +38,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
// F // F
'fichiers_annexes' => 'Fichiers annexes', 'fichiers_annexes' => 'Fichiers annexes',
'fichiers_televerser' => 'Fichiers téléversés',
// I // I
'icone_creer_gamumail' => 'Créer un gamumail', 'icone_creer_gamumail' => 'Créer un gamumail',
@ -88,7 +84,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'selectionnez_modele' => 'Sélectionnez un modèle...', 'selectionnez_modele' => 'Sélectionnez un modèle...',
'supprimer_modele' => 'Supprimer le modèle', 'supprimer_modele' => 'Supprimer le modèle',
'slug' => 'Slug', 'slug' => 'Slug',
'sujet' => 'Sujet',
'switch_modele_public' => 'Modifier la visibilité publique du modèle', 'switch_modele_public' => 'Modifier la visibilité publique du modèle',
// T // T
@ -106,7 +101,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
// U // U
'url_site' => 'URL du site', 'url_site' => 'URL du site',
'url_raz_passe' => 'URL de la page de récupération de mot de passe', 'url_raz_passe' => 'URL de la page de récupération de mot de passe',
'url_spip_pass' => 'URL du lien pour réinitialiser le mot de passe du compte <small>(à n\'utiliser que dans le slug de reset de passe !)</small>',
// V // V
'visibilite_public' => 'Disponible dans la liste des modèles', 'visibilite_public' => 'Disponible dans la liste des modèles',

View file

@ -1,12 +1,12 @@
<paquet <paquet
prefix="gamumail" prefix="gamumail"
categorie="communication" categorie="communication"
version="1.4.6" version="1.2.0"
etat="dev" etat="dev"
compatibilite="[3.2.0;4.*]" compatibilite="[3.2.0;4.1.*]"
logo="prive/themes/spip/images/gamumail-64.png" logo="prive/themes/spip/images/gamumail-64.png"
documentation="" documentation=""
schema="1.0.17" schema="1.0.16"
> >
<nom>GamuMail</nom> <nom>GamuMail</nom>
@ -15,15 +15,13 @@
<licence>GNU/GPL</licence> <licence>GNU/GPL</licence>
<necessite nom="bigform" compatibilite="[1.2.3;[" /> <necessite nom="bigform" compatibilite="[1.0.0;[" />
<necessite nom="crayons" compatibilite="[2.0.10;[" /> <necessite nom="crayons" compatibilite="[2.0.10;[" />
<necessite nom="facteur" compatibilite="[4.0.0;[" /> <necessite nom="facteur" compatibilite="[4.0.0;[" />
<necessite nom="gamufonctions" compatibilite="[1.3.4;[" />
<pipeline nom="remplacements_slug" action='' /> <pipeline nom="remplacements_slug" action='' />
<pipeline nom="post_gamumail_ok" action='' /> <pipeline nom="post_gamumail_ok" action='' />
<pipeline nom="tpdf_charger_contexte" action='' /> <pipeline nom="tpdf_charger_contexte" action='' />
<pipeline nom="gamumail_filtrer_tPDF" action='' />
<pipeline nom="autoriser" inclure="gamumail_autorisations.php" /> <pipeline nom="autoriser" inclure="gamumail_autorisations.php" />