Compare commits
2 commits
Author | SHA1 | Date | |
---|---|---|---|
|
141aa1ae4f | ||
|
41fb092c06 |
37 changed files with 409 additions and 2370 deletions
332
README.md
332
README.md
|
@ -1,41 +1,33 @@
|
||||||
# gamuMail
|
# gamuMail
|
||||||
|
> P.O.C pour généraliser un formulaire d'envoi de message
|
||||||
> 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)
|

|
||||||
- une liste de pdf (il faut le plugin spipdf)
|
|
||||||

|
|
||||||
|
|
||||||
## 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)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- 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 creer / 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 inclure dans une page :
|
||||||

|
```html
|
||||||
|
<INCLURE{fond=inclure/gamumail_config,env}>
|
||||||
|
```
|
||||||
|

|
||||||
|
|
||||||
## 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>
|
||||||
|
@ -44,167 +36,68 @@ On peut ajouter des documents via un fichier du type : **gamumail/SLUG_fichier.h
|
||||||
<BOUCLE_doc(DOCUMENTS){id_article=#ENV{options/id_article}}{extension=pdf}>
|
<BOUCLE_doc(DOCUMENTS){id_article=#ENV{options/id_article}}{extension=pdf}>
|
||||||
<div class="choix">
|
<div class="choix">
|
||||||
<input type="checkbox" class="checkbox" name="Tid_doc[]" value="#ID_DOCUMENT" id="Tid_doc_#ID_DOCUMENT" checked="checked" >
|
<input type="checkbox" class="checkbox" name="Tid_doc[]" value="#ID_DOCUMENT" id="Tid_doc_#ID_DOCUMENT" checked="checked" >
|
||||||
<label for="Tid_doc_#ID_DOCUMENT">
|
<label for="Tid_doc_#ID_DOCUMENT"><i class="fa fa-file-pdf-o rouge"></i>[ (#TITRE|sinon{#FICHIER|basename})]</label>
|
||||||
<i class="fa fa-file-pdf-o rouge"></i>[ (#TITRE|sinon{#FICHIER|basename})] :
|
|
||||||
<a class="mediabox" href="#URL_DOCUMENT">voir le fichier</a>
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
</BOUCLE_doc>
|
</BOUCLE_doc>
|
||||||
</div>
|
</div>
|
||||||
</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_fichier.html -> à la fin du formulaire
|
||||||
- gamumail/SLUG_fichiers.html -> à la fin du formulaire
|
|
||||||
|
|
||||||
### 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**
|
|
||||||
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']`
|
|
||||||
Exemple dans un fichier `prefixe_fonctions.php` :
|
|
||||||
|
|
||||||
```php
|
|
||||||
$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**
|
|
||||||
|
|
||||||
### 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
|
### Dans le php
|
||||||
|
#### 1. Appel du formualire
|
||||||
#### 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
|
||||||
*
|
*
|
||||||
* @param string $slug modele du mail a charger
|
* @param string $slug modele du mail a charger
|
||||||
* @param string $destinataires = adresses mails et id_auteurs séparées par , ou en array
|
* @param int|string $auteur id_auteur ou email du destinataire
|
||||||
* 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 []['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email']
|
||||||
* @param array $Tclient = un ou plusieurs mails de destinataires sortis d'une table objet spécifique
|
* ou
|
||||||
* de la forme []['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email'] ou ['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email']
|
* ['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)
|
* @param array $Tpdf []['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]]
|
||||||
* []['fichier' => 'pdf_facture', 'nom' => 'facture_123', 'contexte' => ['id_app_facture' => 3]] ou ['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 string $redirect
|
||||||
* @param array $options = un gros fourre-tout sous forme d'un array
|
* @param array $options
|
||||||
* utilisé en particulier par les inclure HTML de gamumail/#SLUG_soustexte et gamumail/#SLUG_fichiers
|
|
||||||
*
|
|
||||||
* @return array $valeurs
|
* @return array $valeurs
|
||||||
*/
|
*/
|
||||||
function formulaires_gamumail_charger_dist($slug, $auteur = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []){
|
function formulaires_gamumail_charger_dist($slug, $auteur = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []){
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
> l'Argument $Tclient est utilisé pour récupérer des emails dans un ou X autres Objets SPIP
|
||||||
|
|
||||||
#### argument $slug "no_gamumail"
|
#### 2. modification de chaque étape: charger / vérifier / traiter
|
||||||
|
|
||||||
Si $slug à pour valeur **no_gamumail** alors l'envoi est annulé
|
|
||||||
Exemple d'option à insérer dans un select sélecteur de slug :
|
|
||||||
|
|
||||||
```html
|
|
||||||
<option
|
|
||||||
value="no_gamumail"
|
|
||||||
[
|
|
||||||
(#ENV{slug}|=""
|
|
||||||
="{no_gamumail}|oui)"
|
|
||||||
selected="selected"
|
|
||||||
]
|
|
||||||
>
|
|
||||||
<:souscriptions:pas_de_mail_auto:>
|
|
||||||
</option>
|
|
||||||
```
|
|
||||||
|
|
||||||
#### argument Tclient
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
- exemple d'appel pour 1 fichier PDF avec son contexte :
|
|
||||||
|
|
||||||
```html
|
|
||||||
[(#FORMULAIRE_GAMUMAIL{ #ENV{slug}, #ENV{email}, '', #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`
|
|
||||||
|
|
||||||
- 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
|
|
||||||
[(#FORMULAIRE_GAMUMAIL{ #ENV{slug}, #ENV{email}, '', #ARRAY{ 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 :
|
|
||||||
|
|
||||||
- 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
|
|
||||||
|
|
||||||
#### 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
|
||||||
|
* verifier -> $erreurs
|
||||||
|
* traiter -> $corps (array du message envoyé à facteur)
|
||||||
|
|
||||||
- charger -> $valeurs
|
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):
|
||||||
- verifier -> $erreurs
|
* pour charger : **gamumail/charger.php** pour tous les formulaires ou
|
||||||
- traiter -> $corps (array du message envoyé à facteur)
|
* pour charger : **gamumail/SLUG_charger.php** avec une fonction :
|
||||||
|
|
||||||
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)
|
|
||||||
La surcharge pour tous les slugs (`gamumail_tous_...`) précède celle spécifique par slug : on peut donc utiliser les 2 successivement.
|
|
||||||
Syntaxe :
|
|
||||||
|
|
||||||
- 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 :
|
|
||||||
|
|
||||||
```php
|
```php
|
||||||
function gamumail_NOM_SLUG_charger($valeurs, $options = []){
|
function gamumail_SLUG_charger($valeurs, $options = []){
|
||||||
return $valeurs;
|
return $valeurs;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
* pour verifier : **gamumail/verifier.php** pour tous les formulaires ou
|
||||||
- pour verifier pour tous les slugs : **gamumail/tous_verifier.php** (fonction `gamumail_tous_verifier()`)
|
* pour verifier : **gamumail/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_SLUG_verifier($erreurs, $options = []){
|
||||||
return $erreurs;
|
return $erreurs;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
* pour traiter : **gamumail/traiter.php** pour tous les formulaires ou
|
||||||
- pour traiter pour tous les slugs : **gamumail/tous_traiter.php** (fonction `gamumail_tous_traiter()`)
|
* pour traiter : **gamumail/SLUG_traiter.php** avec une fonction 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_contrat_resa_traiter($corps, $options = []){
|
||||||
if (array_key_exists('id_article', $options)) {
|
if (array_key_exists('id_article', $options)) {
|
||||||
$htmlAdd = '';
|
$htmlAdd = '';
|
||||||
$texteAdd = '';
|
$texteAdd = '';
|
||||||
|
@ -225,131 +118,10 @@ function gamumail_NOM_SLUG_traiter($corps, $options = []){
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 3. Pipeline remplacements_slug pour le traitement du contenu des messages
|
#### 3. Ajouter un header / footer dans notre content html
|
||||||
|
|
||||||
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
|
|
||||||
function PREFIX_remplacements_slug($flux){
|
|
||||||
include_spip('gamumail_fonctions');
|
|
||||||
|
|
||||||
// remplacements statiques
|
|
||||||
if ($html = $flux['data']) {
|
|
||||||
$html = gamumail_remplacer_modele('url_page_commandes', url_absolue(generer_url_public('historique_commandes')), $html);
|
|
||||||
$html = gamumail_remplacer_modele('url_page_contrats', url_absolue(generer_url_public('mes_contrats')), $html);
|
|
||||||
}
|
|
||||||
|
|
||||||
// remplacements dynamiques
|
|
||||||
/*
|
|
||||||
* /!\ Attention, $flux['args'] peut etre un array cle -> valeur
|
|
||||||
* sans passer par un sous tab $args comme ici
|
|
||||||
*/
|
|
||||||
if ($args = $flux['args']['args']
|
|
||||||
and $html = $flux['data']
|
|
||||||
) {
|
|
||||||
if (isset($args['url_attestation'])) {
|
|
||||||
$html = gamumail_remplacer_modele('url_attestation', $args['url_attestation'], $html);
|
|
||||||
}
|
|
||||||
$flux['data'] = $html;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $flux;
|
|
||||||
}
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 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.
|
|
||||||
|
|
||||||
#### 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_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
|
||||||
|
|
||||||
- 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
|
|
||||||
|
|
||||||
#### 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
|
|
||||||
- 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`
|
|
||||||
- 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.
|
|
||||||
=> voir le code en commentaire dans le fichier `inclure/fermer_modale`
|
|
||||||
|
|
||||||
## API d'envoi de mails utilisant les slugs
|
|
||||||
|
|
||||||
### fonction envoyer_gamumail()
|
|
||||||
|
|
||||||
- exemple d'appel :
|
|
||||||
|
|
||||||
```php
|
|
||||||
$fonction = charger_fonction('envoyer_gamumail','inc');
|
|
||||||
$options = [
|
|
||||||
'debug' => false,
|
|
||||||
'options' => ['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' ]
|
|
||||||
```
|
|
||||||
|
|
||||||
## 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
|
|
||||||
=> dans le mes_options.php du site mettre :
|
|
||||||
```php
|
|
||||||
define('_DEBUG_AUTORISER', true);
|
|
||||||
```
|
|
||||||
|
|
||||||
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é
|
|
||||||
if (defined('_DEBUG_AUTORISER')) {
|
|
||||||
curl_setopt($CurlConnect, CURLOPT_SSL_VERIFYHOST, false);
|
|
||||||
curl_setopt($CurlConnect, CURLOPT_SSL_VERIFYPEER, false);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
|
@ -1,75 +0,0 @@
|
||||||
<?php
|
|
||||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
|
||||||
|
|
||||||
defined('_GAMUMAIL_PREFIX_SLUG') || define('_GAMUMAIL_PREFIX_SLUG', "slug");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* créer un slug Gamumail
|
|
||||||
*
|
|
||||||
* @plugin GamuMail
|
|
||||||
*
|
|
||||||
* @copyright 2020
|
|
||||||
* @author cy_altern
|
|
||||||
* @licence GNU/GPL
|
|
||||||
*
|
|
||||||
**/
|
|
||||||
function action_creer_slug_dist($slug = null, $opt = [], $ecraser = false){
|
|
||||||
include_spip('inc/autoriser');
|
|
||||||
include_spip('action/editer_objet');
|
|
||||||
if (!autoriser('creer','gamumail')) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Arrive d'une action SPIP
|
|
||||||
if ($slug === null) {
|
|
||||||
$set = [
|
|
||||||
'slug' => '',
|
|
||||||
'titre' => 'Le titre du modèle',
|
|
||||||
'sujet' => 'Le sujet du mail',
|
|
||||||
'texte' => 'Le texte du mail',
|
|
||||||
'statut' => 'publie',
|
|
||||||
'editable' => '',
|
|
||||||
];
|
|
||||||
|
|
||||||
if ($id_slug = objet_inserer('gamumail', null, $set)) {
|
|
||||||
$slug = getSlugGamumail($id_slug);
|
|
||||||
$set = ['slug' => $slug];
|
|
||||||
sql_updateq('spip_gamumails', $set, 'id_gamumail = '.$id_slug);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Appel de la fonction via charger_fonction("creer_slug", 'action');
|
|
||||||
// Création d'un slug à l'installation d'un plugin
|
|
||||||
|
|
||||||
// remplacement d'un slug, il faut l'option $ecraser=true
|
|
||||||
$id_slug = sql_getfetsel('id_gamumail', 'spip_gamumails', 'slug='.sql_quote($slug));
|
|
||||||
if (
|
|
||||||
intval($id_slug)
|
|
||||||
and $ecraser
|
|
||||||
) {
|
|
||||||
sql_updateq('spip_gamumails', $opt, 'id_gamumail='.intval($id_slug));
|
|
||||||
}
|
|
||||||
|
|
||||||
// creation d'un nouveau slug
|
|
||||||
if (!intval($id_slug)) {
|
|
||||||
$opt['slug'] = $slug;
|
|
||||||
sql_insertq('spip_gamumails', $opt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cache
|
|
||||||
include_spip('inc/invalideur');
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
|
@ -6,13 +6,17 @@ function action_gamuform_add_pdf_dist(){
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
include_spip('inc/autoriser');
|
include_spip('inc/autoriser');
|
||||||
if (!autoriser('modifier','gamumail')) {
|
if (! autoriser("etre","connecte")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$securiser_action = charger_fonction('securiser_action', 'inc');
|
$securiser_action = charger_fonction('securiser_action', 'inc');
|
||||||
$arg = $securiser_action();
|
$arg = $securiser_action();
|
||||||
$id_gamumail = $arg;
|
$id_gamumail = $arg;
|
||||||
|
include_spip('inc/autoriser');
|
||||||
|
if (! autoriser("webmestre")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (intval($id_gamumail)) {
|
if (intval($id_gamumail)) {
|
||||||
sql_insertq('spip_gamumail_pdfs',['id_gamumail' => intval($id_gamumail)]);
|
sql_insertq('spip_gamumail_pdfs',['id_gamumail' => intval($id_gamumail)]);
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
<?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'");
|
|
||||||
}
|
|
|
@ -1,35 +0,0 @@
|
||||||
<?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,29 +52,23 @@ function gamumail_declarer_tables_objets_sql($tables) {
|
||||||
'titre' => 'varchar(255) NOT NULL DEFAULT ""',
|
'titre' => 'varchar(255) NOT NULL DEFAULT ""',
|
||||||
'sujet' => 'varchar(255) NOT NULL DEFAULT ""',
|
'sujet' => 'varchar(255) NOT NULL DEFAULT ""',
|
||||||
'texte' => 'text NOT NULL DEFAULT ""',
|
'texte' => 'text NOT NULL DEFAULT ""',
|
||||||
'id_docs' => 'text NOT NULL DEFAULT ""',
|
|
||||||
'statut' => 'varchar(20) DEFAULT "0" NOT NULL',
|
'statut' => 'varchar(20) DEFAULT "0" NOT NULL',
|
||||||
'public' => 'varchar(20) DEFAULT "oui" NOT NULL',
|
'maj' => 'TIMESTAMP'
|
||||||
'editable' => 'varchar(5) DEFAULT "oui" NOT NULL',
|
|
||||||
'date' => 'datetime NOT NULL DEFAULT "0000-00-00 00:00:00"',
|
|
||||||
'maj' => 'TIMESTAMP',
|
|
||||||
'rang' => 'smallint(6) NOT NULL'
|
|
||||||
),
|
),
|
||||||
'key' => array(
|
'key' => array(
|
||||||
'PRIMARY KEY' => 'id_gamumail',
|
'PRIMARY KEY' => 'id_gamumail',
|
||||||
'KEY statut' => 'statut',
|
'KEY statut' => 'statut',
|
||||||
),
|
),
|
||||||
// 'titre' => 'slug AS titre, "" AS lang',
|
'titre' => 'slug AS titre, "" AS lang',
|
||||||
#'date' => '',
|
#'date' => '',
|
||||||
'champs_editables' => array('slug', 'sujet', 'texte','titre', 'editable', 'public', 'id_docs', 'rang', 'statut', 'date'),
|
'champs_editables' => array('slug', 'sujet', 'texte','titre'),
|
||||||
'champs_versionnes' => array('slug', 'sujet', 'texte','titre', 'editable', 'public', 'id_docs', 'rang', 'statut', 'date'),
|
'champs_versionnes' => array('slug', 'sujet', 'texte','titre'),
|
||||||
'rechercher_champs' => array("slug" => 8),
|
'rechercher_champs' => array("slug" => 8),
|
||||||
'tables_jointures' => array(),
|
'tables_jointures' => array(),
|
||||||
'statut'=> array(
|
'statut'=> array(
|
||||||
array(
|
array(
|
||||||
'champ' => 'statut',
|
'champ' => 'statut',
|
||||||
'publie' => 'publie',
|
'publie' => 'publie',
|
||||||
'previsu' => '!',
|
|
||||||
'exception' => array('statut','tout')
|
'exception' => array('statut','tout')
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
#CACHE{0}
|
|
||||||
[(#AUTORISER{configurer,gamumail}|sinon_interdire_acces)]
|
|
||||||
|
|
||||||
<div class="inner">
|
|
||||||
<div class="mt-3 mb-7">
|
|
||||||
<h1 class="mb-3">Configuration de Gamumail</h1>
|
|
||||||
<INCLURE{fond=inclure/gamumail_config,env}>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
|
@ -1,11 +0,0 @@
|
||||||
[(#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}, #ARRAY{id_dossier,#ENV{id_dossier}}})]
|
|
|
@ -1,20 +0,0 @@
|
||||||
#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>
|
|
102
css/gamumail.css
102
css/gamumail.css
|
@ -1,4 +1,4 @@
|
||||||
/* les styles de tag-editor */
|
/* surrounding tag container */
|
||||||
.tag-editor {
|
.tag-editor {
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
padding: 0 5px 0 0;
|
padding: 0 5px 0 0;
|
||||||
|
@ -20,17 +20,14 @@
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
margin: 3px 0;
|
margin: 3px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tag-editor div {
|
.tag-editor div {
|
||||||
float: left;
|
float: left;
|
||||||
padding: 0 4px;
|
padding: 0 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tag-editor .placeholder {
|
.tag-editor .placeholder {
|
||||||
padding: 0 8px;
|
padding: 0 8px;
|
||||||
color: #bbb;
|
color: #bbb;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tag-editor .tag-editor-spacer {
|
.tag-editor .tag-editor-spacer {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
width: 8px;
|
width: 8px;
|
||||||
|
@ -38,7 +35,6 @@
|
||||||
color: transparent;
|
color: transparent;
|
||||||
background: none;
|
background: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tag-editor input {
|
.tag-editor input {
|
||||||
vertical-align: inherit;
|
vertical-align: inherit;
|
||||||
border: 0;
|
border: 0;
|
||||||
|
@ -54,13 +50,11 @@
|
||||||
background: none;
|
background: none;
|
||||||
color: #444;
|
color: #444;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* hide original input field or textarea visually to allow tab navigation */
|
/* hide original input field or textarea visually to allow tab navigation */
|
||||||
.tag-editor-hidden-src {
|
.tag-editor-hidden-src {
|
||||||
position: absolute !important;
|
position: absolute !important;
|
||||||
left: -99999px;
|
left: -99999px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* hide IE10 "clear field" X */
|
/* hide IE10 "clear field" X */
|
||||||
.tag-editor ::-ms-clear {
|
.tag-editor ::-ms-clear {
|
||||||
display: none;
|
display: none;
|
||||||
|
@ -88,12 +82,10 @@
|
||||||
padding-left: 3px;
|
padding-left: 3px;
|
||||||
padding-right: 4px;
|
padding-right: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tag-editor .tag-editor-delete i {
|
.tag-editor .tag-editor-delete i {
|
||||||
line-height: 18px;
|
line-height: 18px;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*.tag-editor .tag-editor-delete i:before { font-size: 16px; color: #8ba7ba; content: "×"; font-style: normal; }*/
|
/*.tag-editor .tag-editor-delete i:before { font-size: 16px; color: #8ba7ba; content: "×"; font-style: normal; }*/
|
||||||
.tag-editor .tag-editor-delete i:before {
|
.tag-editor .tag-editor-delete i:before {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
|
@ -101,13 +93,11 @@
|
||||||
content: '×';
|
content: '×';
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tag-editor .tag-editor-delete:hover i:before {
|
.tag-editor .tag-editor-delete:hover i:before {
|
||||||
color: #d65454;
|
color: #d65454;
|
||||||
}
|
}
|
||||||
|
.tag-editor .tag-editor-tag.active + .tag-editor-delete,
|
||||||
.tag-editor .tag-editor-tag.active+.tag-editor-delete,
|
.tag-editor .tag-editor-tag.active + .tag-editor-delete i {
|
||||||
.tag-editor .tag-editor-tag.active+.tag-editor-delete i {
|
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
cursor: text;
|
cursor: text;
|
||||||
}
|
}
|
||||||
|
@ -124,11 +114,9 @@
|
||||||
cursor: default;
|
cursor: default;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ui-front {
|
.ui-front {
|
||||||
z-index: 9999;
|
z-index: 9999;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ui-menu {
|
.ui-menu {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
padding: 1px;
|
padding: 1px;
|
||||||
|
@ -136,26 +124,21 @@
|
||||||
display: block;
|
display: block;
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ui-menu .ui-menu-item a {
|
.ui-menu .ui-menu-item a {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
display: block;
|
display: block;
|
||||||
padding: 2px 0.4em;
|
padding: 2px 0.4em;
|
||||||
line-height: 1.4;
|
line-height: 1.4;
|
||||||
min-height: 0;
|
min-height: 0; /* support: IE7 */
|
||||||
/* support: IE7 */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.ui-widget-content {
|
.ui-widget-content {
|
||||||
border: 1px solid #bbb;
|
border: 1px solid #bbb;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
color: #555;
|
color: #555;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ui-widget-content a {
|
.ui-widget-content a {
|
||||||
color: #46799b;
|
color: #46799b;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ui-widget-content .ui-state-hover,
|
.ui-widget-content .ui-state-hover,
|
||||||
.ui-widget-header .ui-state-hover,
|
.ui-widget-header .ui-state-hover,
|
||||||
.ui-state-focus,
|
.ui-state-focus,
|
||||||
|
@ -163,36 +146,26 @@
|
||||||
.ui-widget-header .ui-state-focus {
|
.ui-widget-header .ui-state-focus {
|
||||||
background: #e0eaf1;
|
background: #e0eaf1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ui-helper-hidden-accessible {
|
.ui-helper-hidden-accessible {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* les styles de gamumails */
|
|
||||||
.formulaire_gamumail {
|
.formulaire_gamumail {
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.formulaire_gamumail .editer {
|
.formulaire_gamumail .editer {
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.editer_pour {
|
.editer_pour {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
.editer_pour label {
|
.editer_pour label {
|
||||||
width: 50px;
|
width: 50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.editer_envoi_separe {
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
|
|
||||||
.editer_cc {
|
.editer_cc {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
.editer_cc label {
|
.editer_cc label {
|
||||||
width: 50px;
|
width: 50px;
|
||||||
}
|
}
|
||||||
|
@ -200,73 +173,6 @@
|
||||||
.editer_cci {
|
.editer_cci {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
.editer_cci label {
|
.editer_cci label {
|
||||||
width: 50px;
|
width: 50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.editer_repondre_a {
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
|
|
||||||
.editer_repondre_a label {
|
|
||||||
width: 120px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.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;
|
|
||||||
}
|
|
||||||
|
|
||||||
.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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 117 KiB |
|
@ -1,28 +1,20 @@
|
||||||
#CACHE{0}
|
#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">
|
||||||
|
|
||||||
[(#REM)
|
<div class="formulaire_spip formgtulaire_#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)
|
|
||||||
|
|
||||||
]<INCLURE{fond=inclure/fermer_modale,env}>
|
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
|
||||||
[(#REM)
|
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
|
||||||
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">
|
|
||||||
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
|
|
||||||
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok}|explode{@@}|table_valeur{0})</p>]
|
|
||||||
|
|
||||||
<form name="formulaire_#FORM" action="#ENV{action}" method="post"><div>
|
<form name="formulaire_#FORM" action="#ENV{action}" method="post"><div>
|
||||||
#ACTION_FORMULAIRE{#ENV{action}}
|
#ACTION_FORMULAIRE{#ENV{action}}
|
||||||
|
|
||||||
#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}
|
||||||
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
|
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
|
||||||
|
@ -33,25 +25,6 @@
|
||||||
<input required type="text" class="text tagEditor" name="#GET{name}" id="#GET{name}" value="#ENV{#GET{name}}" >
|
<input required type="text" class="text tagEditor" name="#GET{name}" id="#GET{name}" value="#ENV{#GET{name}}" >
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<BOUCLE_testEnvoiSepare(CONDITION){si #ENV{envoi_separe}|oui}>
|
|
||||||
<div class="editer_groupe">
|
|
||||||
#SET{name,envoi_separe}
|
|
||||||
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
|
|
||||||
#SET{obli,"obligatoire"}
|
|
||||||
<div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
|
|
||||||
<label> Envoi séparé (1 mail par destinataire)</label>
|
|
||||||
<div class="choix">
|
|
||||||
<input type="radio" class="radio" name="#GET{name}" value="" id="#GET{name}_non"[ (#ENV{#GET{name}}|non|?{checked="checked"})] >
|
|
||||||
<label for="#GET{name}_non">Non</label>
|
|
||||||
</div>
|
|
||||||
<div class="choix">
|
|
||||||
<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>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</BOUCLE_testEnvoiSepare>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="editer_groupe">
|
<div class="editer_groupe">
|
||||||
#SET{name,cc}
|
#SET{name,cc}
|
||||||
|
@ -75,25 +48,12 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<BOUCLE_testRepondreA(CONDITION){si #ENV{repondre_a}}>
|
|
||||||
<div class="editer_groupe">
|
|
||||||
#SET{name,repondre_a}
|
|
||||||
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
|
|
||||||
#SET{obli,"obligatoire"}
|
|
||||||
<div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
|
|
||||||
<label for="#GET{name}">Répondre à</label>
|
|
||||||
[<span class="erreur_message">(#GET{erreurs})</span>]
|
|
||||||
<input type="text" class="text mail_repondre_a tagEditor" name="#GET{name}" id="#GET{name}" value="#ENV{#GET{name}}" >
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</BOUCLE_testRepondreA>
|
|
||||||
|
|
||||||
<div class="editer_groupe">
|
<div class="editer_groupe">
|
||||||
#SET{name,sujet}
|
#SET{name,sujet}
|
||||||
#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,74 +64,69 @@
|
||||||
#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">
|
|
||||||
<div class="colonne_droite">
|
|
||||||
<h2><:gamumail:fichiers_televerser:></h2>
|
|
||||||
<INCLURE{fond=inclure/bigform,env,accept=#LISTE{image/*, application/pdf},suffix_liste_fichiers=gamumail}>
|
|
||||||
</div>
|
|
||||||
<div class="colonne_gauche">
|
|
||||||
#SET{fichier,#SLUG|concat{_soustexte}}
|
#SET{fichier,#SLUG|concat{_soustexte}}
|
||||||
[(#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}>
|
||||||
]
|
]
|
||||||
<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>Fichiers PDF envoyés</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="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
|
||||||
|
<BOUCLE_pdf(DATA){source tableau, #ENV{TFichierpdfs}}>
|
||||||
<div class="choix">
|
<div class="choix">
|
||||||
[<span class="erreur_message">(#GET{erreurs})</span>]
|
<input type="checkbox" class="checkbox" name="#GET{name}[]" value="#VALEUR" id="#GET{name}_#COMPTEUR_BOUCLE" checked="checked" >
|
||||||
<label for="#GET{name}"><:gamumail:id_docs_attaches:></label>
|
<label for="#GET{name}_#COMPTEUR_BOUCLE">#VALEUR</label>
|
||||||
<input type="text" class="text" name="#GET{name}" value="[(#ENV{#GET{name}})]" id="#GET{name}" >
|
|
||||||
</div>
|
</div>
|
||||||
<B_docs_spip>
|
</BOUCLE_pdf>
|
||||||
<div class="details_docs_spip">
|
|
||||||
<ul>
|
|
||||||
<BOUCLE_docs_spip(DOCUMENTS){tous}{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>
|
||||||
</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>
|
||||||
|
<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>
|
</div>
|
||||||
#SET{fichier,all_fichiers}
|
</BOUCLE_doc>
|
||||||
[(#CHEMIN{gamumail/#GET{fichier}.html}|oui)
|
</div>
|
||||||
#SET{erreurs,#ENV**{erreurs}|table_valeur{Tid_doc}}
|
</div>
|
||||||
[<span class="erreur_message">(#GET{erreurs})</span>]
|
</B_doc>
|
||||||
<INCLURE{fond=gamumail/#GET{fichier},env,slug=#SLUG,options=#ENV{options}}>
|
|
||||||
]
|
|
||||||
|
|
||||||
#SET{fichier,#SLUG|concat{_fichiers}}
|
#SET{fichier,#SLUG|concat{_fichiers}}
|
||||||
[(#CHEMIN{gamumail/#GET{fichier}.html}|oui)
|
[(#CHEMIN{gamumail/#GET{fichier}.html}|oui)
|
||||||
#SET{erreurs,#ENV**{erreurs}|table_valeur{Tid_doc}}
|
<INCLURE{fond=gamumail/#GET{fichier},env}>
|
||||||
[<span class="erreur_message">(#GET{erreurs})</span>]
|
|
||||||
<h2><:gamumail:fichiers_annexes:></h2>
|
|
||||||
<INCLURE{fond=gamumail/#GET{fichier},env,options=#ENV{options}}>
|
|
||||||
]
|
]
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<hr>
|
<div class="boutons">
|
||||||
<div class="boutons text-center">
|
|
||||||
<button type="submit" class="btn"><:gamumail:envoyer:></button>
|
<button type="submit" class="btn"><:gamumail:envoyer:></button>
|
||||||
</div>
|
</div>
|
||||||
</div></form>
|
</div></form>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="[(#CHEMIN{js/jquery.tag-editor.min.js}|timestamp)]" type="text/javascript"></script>
|
<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 src="[(#CHEMIN{js/jquery.caret.min.js}|timestamp)]" type="text/javascript"></script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
jQuery(function() {
|
jQuery(function() {
|
||||||
gamumail();
|
gamumail();
|
||||||
|
|
|
@ -1,49 +1,28 @@
|
||||||
<?php
|
<?php
|
||||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||||
|
|
||||||
|
|
||||||
include_spip('inc/filtres');
|
include_spip('inc/filtres');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* formulaire générique pour envoyer des mails avec pieces attachés
|
* formulaire générique pour envoyer des mails avec pieces attachés
|
||||||
*
|
*
|
||||||
* @param string $slug modele du mail a charger
|
* @param string $slug modele du mail a charger
|
||||||
* @param string $destinataires = adresses mails et id_auteurs séparées par , ou en array
|
* @param int|string $auteur id_auteur ou email du destinataire
|
||||||
* 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 []['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email'] ou ['objet' => 'app_client', 'id_objet' => 3, 'champ' => 'email']
|
||||||
* @param array $Tclient = un ou plusieurs mails de destinataires sortis d'une table objet spécifique
|
* @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]]
|
||||||
* 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
|
|
||||||
* @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']]
|
|
||||||
* 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
|
||||||
* utilisé en particulier par les inclure HTML de gamumail/#SLUG_soustexte et gamumail/#SLUG_fichiers
|
|
||||||
*
|
|
||||||
* @return array $valeurs
|
* @return array $valeurs
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
function formulaires_gamumail_charger_dist($slug, $destinataires = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []){
|
function formulaires_gamumail_charger_dist($slug, $auteur = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []){
|
||||||
|
|
||||||
$Tmails = [];
|
$Tmails = [];
|
||||||
|
if (intval($auteur)) {
|
||||||
$Tcc = lire_config('gamumail/mail_cc') !== '' ? explode(',', lire_config('gamumail/mail_cc', '')) : [];
|
$Tmails[] = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.intval($auteur));
|
||||||
$Tcci = lire_config('gamumail/mail_cci') !== '' ? explode(',', lire_config('gamumail/mail_cci', '')) : [];
|
} elseif (is_string($auteur)) {
|
||||||
|
if (email_valide($auteur)) {
|
||||||
$Trepondre_a = lire_config('gamumail/mail_repondre_a') !== '' ? explode(',', lire_config('gamumail/mail_repondre_a', '')) : [];
|
$Tmails[] = $auteur;
|
||||||
|
|
||||||
if (!empty($destinataires) and !is_array($destinataires)) {
|
|
||||||
$destinataires = explode(',', $destinataires);
|
|
||||||
} else {
|
|
||||||
$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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,13 +34,8 @@ function formulaires_gamumail_charger_dist($slug, $destinataires = 0, $Tclient =
|
||||||
$table = table_objet_sql($o['objet']);
|
$table = table_objet_sql($o['objet']);
|
||||||
$id = id_table_objet($o['objet']);
|
$id = id_table_objet($o['objet']);
|
||||||
$mail = sql_getfetsel("{$o['champ']}", $table, "$id=".intval($o['id_objet']));
|
$mail = sql_getfetsel("{$o['champ']}", $table, "$id=".intval($o['id_objet']));
|
||||||
$copie = (isset($o['copie']) and in_array($o['copie'], ['cc', 'cci'])) ? $o['copie'] : false;
|
|
||||||
if (email_valide($mail)) {
|
if (email_valide($mail)) {
|
||||||
if (!$copie) {
|
|
||||||
$Tmails[] = $mail;
|
$Tmails[] = $mail;
|
||||||
} else {
|
|
||||||
$copie == 'cc' ? $Tcc[] = $mail : $Tcci[] = $mail;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,280 +45,81 @@ function formulaires_gamumail_charger_dist($slug, $destinataires = 0, $Tclient =
|
||||||
if (array_key_exists('fichier', $Tpdf)) {
|
if (array_key_exists('fichier', $Tpdf)) {
|
||||||
$Tpdf = [$Tpdf];
|
$Tpdf = [$Tpdf];
|
||||||
}
|
}
|
||||||
foreach ($Tpdf as $id => $pdf) {
|
foreach ($Tpdf as $pdf) {
|
||||||
$TFichierPdf[$id] = $pdf;
|
$TFichierPdf[] = $pdf['fichier'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$TFichierPdf = pipeline('gamumail_filtrer_tPDF', [
|
$gamuMail = sql_fetsel('sujet, texte', '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' => lire_config('gamumail/mail_cc'),
|
||||||
'cci' => implode(',', $Tcci),
|
'cci' => lire_config('gamumail/mail_cci'),
|
||||||
'repondre_a' => implode(',', $Trepondre_a),
|
|
||||||
'TFichierpdfs' => $TFichierPdf,
|
'TFichierpdfs' => $TFichierPdf,
|
||||||
'Tpdfs_ok' => [],
|
'Tpdfs_ok' => [],
|
||||||
'docs_spip' => $gamuMail['id_docs'] ?? '',
|
'Tid_doc' => [],
|
||||||
'Tid_fichiers' => [],
|
'options' => $options
|
||||||
'options' => $options,
|
|
||||||
'envoi_separe' => $options['envoi_separe'] ?? ''
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// surcharges charger : d'abord les surcharges pour tous les slugs (tous_charge.php) puis les spécifiques par slug (nom_slug_charger.php)
|
if ($f = charger_fonction('charger', 'gamumail', true)) {
|
||||||
if ($f = charger_fonction('tous_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)) {
|
if ($f = charger_fonction($slug . '_charger', 'gamumail', true)) {
|
||||||
$valeurs = $f($valeurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);
|
$valeurs = $f($valeurs, $options, $slug, $auteur, $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, $auteur = 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';
|
||||||
}
|
}
|
||||||
|
|
||||||
// le slug est il OK ?
|
if ($f = charger_fonction('verifier', 'gamumail', true)) {
|
||||||
if (preg_match('/[^a-zA-Z0-9_\-]/', $slug)) {
|
$erreurs = $f($erreurs, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect);
|
||||||
$erreurs['message_erreur'] = _T("gamumail:erreur_format_slug");
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* Finalement on accepte d'utiliser gamumail sans slug
|
|
||||||
* Je commente les lignes ci dessous
|
|
||||||
*/
|
|
||||||
// $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 : d'abord les surcharges pour tous les slugs (tous_verifier.php) puis les spécifiques par slug (nom_slug_verifier.php)
|
|
||||||
if ($f = charger_fonction('tous_verifier', 'gamumail', true)) {
|
|
||||||
$erreurs = $f($erreurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);
|
|
||||||
}
|
}
|
||||||
if ($f = charger_fonction($slug . '_verifier', 'gamumail', true)) {
|
if ($f = charger_fonction($slug . '_verifier', 'gamumail', true)) {
|
||||||
$erreurs = $f($erreurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);
|
$erreurs = $f($erreurs, $options, $slug, $auteur, $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;
|
||||||
}
|
}
|
||||||
|
|
||||||
function formulaires_gamumail_traiter_dist($slug, $destinataires = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []) :Array{
|
|
||||||
$retour = [];
|
|
||||||
|
|
||||||
// blocage de l'envoi par appel du pseudo-slug no_gamumail
|
function formulaires_gamumail_traiter_dist($slug, $auteur = 0, $Tclient = [], $Tpdf = [], $redirect = '', $options = []) :Array{
|
||||||
if ($slug === 'no_gamumail') {
|
|
||||||
$retour['message_ok'] = _T('gamumail:message_no_gamumail');
|
|
||||||
if ($redirect AND $redirect != '') {
|
|
||||||
$retour['redirect'] = $redirect;
|
|
||||||
}
|
|
||||||
spip_log("Pas d'envoi de mail pour cause de slug no_gamumail","gamumail");
|
|
||||||
return $retour;
|
|
||||||
}
|
|
||||||
|
|
||||||
include_spip('inc/texte');
|
include_spip('inc/texte');
|
||||||
include_spip('classes/facteur');
|
include_spip('classes/facteur');
|
||||||
|
|
||||||
$envoi_separe = _request('envoi_separe') ?? '';
|
$retour = array();
|
||||||
$options['envoi_separe'] = $envoi_separe;
|
|
||||||
|
|
||||||
$pour = _request('pour');
|
$pour = _request('pour');
|
||||||
$pour = explode(',', $pour);
|
$cc = _request('cc');
|
||||||
|
$cci = _request('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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 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)) {
|
|
||||||
gamuSend($slug, $options, $destinataires, $Tclient, $Tpdf, $Tfiles, $redirect, $retour);
|
|
||||||
} else {
|
|
||||||
$ok = true;
|
|
||||||
foreach ($destinataires as $d) {
|
|
||||||
$r = gamuSend($slug, $options, [$d], $Tclient, $Tpdf, $Tfiles, $redirect);
|
|
||||||
if (!$r) {
|
|
||||||
$ok = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!$ok) {
|
|
||||||
$retour['message_erreur'] = _T("gamumail:erreur_envoi_mail");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$retour['message_ok'] = _T('gamumail:mail_envoye');
|
|
||||||
|
|
||||||
// dans le retour message_ok ajouter que le gamumail est OK
|
|
||||||
$retour['message_ok'] .= '@@gamumail_ok';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if ($redirect AND $redirect != '') {
|
|
||||||
$retour['redirect'] = $redirect;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $retour;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function gamuSend($slug, $options, $destinataires, $Tclient, $Tpdf, $Tfiles, $redirect, &$retour = []) {
|
|
||||||
|
|
||||||
$cc = _request('cc') ?? '';
|
|
||||||
$cci = _request('cci') ?? '';
|
|
||||||
$repondre_a = _request('repondre_a') ?? '';
|
|
||||||
|
|
||||||
$cc = explode(',', $cc);
|
|
||||||
$cci = explode(',', $cci);
|
|
||||||
$Tcci_gamuza = $GLOBALS['gamuza_mail_cci'] ?? [];
|
|
||||||
$cci = array_merge($cci, $Tcci_gamuza);
|
|
||||||
$repondre_a = explode(',', $repondre_a);
|
|
||||||
|
|
||||||
$sujet = _request('sujet');
|
$sujet = _request('sujet');
|
||||||
$html = propre(_request('texte'));
|
$html = propre(_request('texte'));
|
||||||
$docs_spip = _request('docs_spip');
|
|
||||||
$Tpdfs_ok = _request('Tpdfs_ok');
|
|
||||||
$Tid_doc = _request('Tid_doc');
|
$Tid_doc = _request('Tid_doc');
|
||||||
|
$Tpdfs_ok = _request('Tpdfs_ok');
|
||||||
$texte = facteur_mail_html2text($html);
|
$texte = facteur_mail_html2text($html);
|
||||||
|
|
||||||
$args = $options;
|
$pour = explode(',', $pour);
|
||||||
$args['slug'] = $slug;
|
$cc = explode(',', $cc);
|
||||||
$args['destinataires'] = $destinataires;
|
$cci = explode(',', $cci);
|
||||||
|
|
||||||
|
// les documents joints
|
||||||
$pieces_jointes = [];
|
$pieces_jointes = [];
|
||||||
if ($f = charger_fonction('traiter_av_pdf', 'gamumail', true)) {
|
|
||||||
$options = $f($options, $destinataires, $Tclient, $Tpdf);
|
|
||||||
}
|
|
||||||
if ($f = charger_fonction($slug . '_traiter_av_pdf', 'gamumail', true)) {
|
|
||||||
$options = $f($options, $destinataires, $Tclient, $Tpdf);
|
|
||||||
}
|
|
||||||
|
|
||||||
// les documents par id_document
|
if (!empty($Tid_doc)) {
|
||||||
$docs_spip = ($docs_spip != '' ? explode(',', $docs_spip) : []);
|
foreach ($Tid_doc as $id_document) {
|
||||||
if (!empty($docs_spip)) {
|
$Tdocument = sql_fetsel('titre,fichier,extension','spip_documents','id_document='.intval($id_document));
|
||||||
foreach ($docs_spip as $id_document) {
|
$destination = _DIR_IMG.$Tdocument['fichier'];
|
||||||
$protected = '';
|
|
||||||
$Tdocument = sql_fetsel('*','spip_documents','id_document='.intval($id_document));
|
|
||||||
if (
|
|
||||||
array_key_exists('protected', $Tdocument)
|
|
||||||
and $Tdocument['protected'] === 'oui'
|
|
||||||
) {
|
|
||||||
$protected = 'PROTECTED/';
|
|
||||||
}
|
|
||||||
$destination = _DIR_IMG.$protected.$Tdocument['fichier'];
|
|
||||||
$extension = $Tdocument['extension'];
|
$extension = $Tdocument['extension'];
|
||||||
if ($Tdocument['titre']) {
|
if ($Tdocument['titre']) {
|
||||||
$nom_fichier = $Tdocument['titre'] .".".$extension;
|
$nom_fichier = $Tdocument['titre'] .".".$extension;
|
||||||
|
@ -356,58 +131,20 @@ 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
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// les documents par Tid_doc envoyés depuis inclure gamumail/#SLUG_fichiers.html
|
// les pdfs
|
||||||
if (!empty($Tid_doc)) {
|
if ($f = charger_fonction('traiter_av_pdf', 'gamumail', true)) {
|
||||||
foreach ($Tid_doc as $id_doc) {
|
$options = $f($options, $auteur, $Tclient, $Tpdf);
|
||||||
$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,
|
|
||||||
'quoi' => 'docs_spip',
|
|
||||||
'qui' => $id_doc
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
if ($f = charger_fonction($slug . '_traiter_av_pdf', 'gamumail', true)) {
|
||||||
|
$options = $f($options, $auteur, $Tclient, $Tpdf);
|
||||||
}
|
}
|
||||||
|
|
||||||
// les documents par tFiles (téléversés)
|
$Tpdf_dell = [];
|
||||||
$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
|
|
||||||
$Tpdf_del = [];
|
|
||||||
if (!empty($Tpdfs_ok) and is_array($Tpdfs_ok)) {
|
if (!empty($Tpdfs_ok) and is_array($Tpdfs_ok)) {
|
||||||
if (array_key_exists('fichier', $Tpdf)) {
|
if (array_key_exists('fichier', $Tpdf)) {
|
||||||
$Tpdf = [$Tpdf];
|
$Tpdf = [$Tpdf];
|
||||||
|
@ -415,164 +152,88 @@ function gamuSend($slug, $options, $destinataires, $Tclient, $Tpdf, $Tfiles, $re
|
||||||
|
|
||||||
$recup_pdf = charger_fonction('charger_pdf','inc');
|
$recup_pdf = charger_fonction('charger_pdf','inc');
|
||||||
foreach ($Tpdfs_ok as $pdf) {
|
foreach ($Tpdfs_ok as $pdf) {
|
||||||
$nom = "mon_fichier";
|
foreach ($Tpdf as $p) {
|
||||||
foreach ($Tpdf as $cle => $p) {
|
if ($p['fichier'] === $pdf) {
|
||||||
if ($p['fichier'].'_'.$cle === $pdf) {
|
$c = $p['contexte'];
|
||||||
$fichier = $p['fichier'];
|
$nom = $p['nom'];
|
||||||
$c = isset($p['contexte']) ? $p['contexte'] : [];
|
|
||||||
$nom = isset($p['nom']) ? $p['nom'] : $fichier;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$nom = pipeline('remplacements_slug', array(
|
$pdf = $recup_pdf($pdf, $c);
|
||||||
'args' => $args,
|
|
||||||
'data' => $nom
|
|
||||||
));
|
|
||||||
|
|
||||||
$c = pipeline('tpdf_charger_contexte', [
|
|
||||||
'args' => [
|
|
||||||
'destinataires' => $destinataires,
|
|
||||||
'contexte' => $c,
|
|
||||||
'options' => $options
|
|
||||||
], 'data' => $c
|
|
||||||
]);
|
|
||||||
|
|
||||||
$pdf = $recup_pdf($fichier, $c, $args);
|
|
||||||
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_dell[] = $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
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ($f = charger_fonction('traiter_pieces_jointes', 'gamumail', true)) {
|
|
||||||
$pc = $f($slug, $options, $destinataires, $Tclient, $Tpdf);
|
|
||||||
if (!empty($pc)) {
|
|
||||||
$pieces_jointes[] = $pc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($f = charger_fonction($slug . '_traiter_pieces_jointes', 'gamumail', true)) {
|
|
||||||
$pc = $f($options, $destinataires, $Tclient, $Tpdf);
|
|
||||||
if (!empty($pc)) {
|
|
||||||
$pieces_jointes[] = $pc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$html_header = '';
|
$html_header = '';
|
||||||
if (find_in_path('gamumail/'.$slug .'_html_header.html')) {
|
|
||||||
$html_header = recuperer_fond('gamumail/'.$slug . '_html_header', $options);
|
if(find_in_path('gamumail/html_header.html')){
|
||||||
}
|
|
||||||
elseif(find_in_path('gamumail/html_header.html')) {
|
|
||||||
$html_header = recuperer_fond('gamumail/html_header', $options);
|
$html_header = recuperer_fond('gamumail/html_header', $options);
|
||||||
}
|
}
|
||||||
$html_footer = '';
|
elseif (find_in_path($slug . '_html_header.html')) {
|
||||||
if (find_in_path('gamumail/'.$slug . '_html_footer.html')) {
|
$html_header = recuperer_fond('gamumail/'.$slug . '_html_header', $options);
|
||||||
$html_footer = recuperer_fond('gamumail/'.$slug . '_html_footer', $options);
|
|
||||||
}
|
}
|
||||||
elseif (find_in_path('gamumail/html_footer.html')) {
|
|
||||||
|
$html_footer = '';
|
||||||
|
if(find_in_path('gamumail/html_footer.html')){
|
||||||
$html_footer = recuperer_fond('gamumail/html_footer', $options);
|
$html_footer = recuperer_fond('gamumail/html_footer', $options);
|
||||||
}
|
}
|
||||||
|
elseif (find_in_path($slug . '_html_footer.html')) {
|
||||||
|
$html_footer = recuperer_fond('gamumail/'.$slug . '_html_footer', $options);
|
||||||
|
}
|
||||||
|
|
||||||
$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
|
|
||||||
$html = pipeline('remplacements_slug', array(
|
|
||||||
'args' => $args,
|
|
||||||
'data' => $html
|
|
||||||
));
|
|
||||||
|
|
||||||
// traitement des remplacements génériques fournis par Gamumail
|
|
||||||
$remplacement_generiques = charger_fonction('gamumail_remplacements', 'inc');
|
|
||||||
$html = $remplacement_generiques($args, $html);
|
|
||||||
|
|
||||||
$texte = facteur_mail_html2text($html);
|
|
||||||
$corps = [
|
$corps = [
|
||||||
'html' => $html,
|
'html' => $html,
|
||||||
'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) {
|
|
||||||
$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)
|
|
||||||
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, $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)) {
|
if ($f = charger_fonction($slug . '_traiter', 'gamumail', true)) {
|
||||||
$corps = $f($corps, $options, $slug, $destinataires);
|
$corps = $f($corps, $options, $slug, $auteur, $Tclient, $Tpdf, $redirect);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gestion des variables dans le sujet du mail (spécifiques + génériques)
|
// envoi du mail
|
||||||
$sujet = pipeline('remplacements_slug',[
|
|
||||||
'args' => $args,
|
|
||||||
'data' => $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['sujet'] = $sujet;
|
|
||||||
|
|
||||||
// envoyer !
|
|
||||||
$envoyer_mail = charger_fonction('envoyer_mail', 'inc/');
|
$envoyer_mail = charger_fonction('envoyer_mail', 'inc/');
|
||||||
//var_dump($destinataires);
|
$ok = $envoyer_mail($pour, $sujet, $corps);
|
||||||
//var_dump($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 : ","roc_mail");
|
||||||
spip_log($corps,"gamumail");
|
spip_log($corps,"roc");
|
||||||
$retour['message_erreur'] = _T("gamumail:erreur_envoi_mail");
|
$retour['message_erreur'] = _T("gamumail:erreur_envoi_mail");
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$retour['message_ok'] = _T('gamumail:mail_envoye');
|
$retour['message_ok'] = _T('gamumail:mail_envoye');
|
||||||
|
|
||||||
// appel d'une éventuelle fonction de traitement si le mail est OK
|
|
||||||
$retour = pipeline('post_gamumail_ok', array(
|
|
||||||
'args' => $args,
|
|
||||||
'data' => $retour
|
|
||||||
));
|
|
||||||
|
|
||||||
// dans le retour message_ok ajouter que le gamumail est OK
|
|
||||||
$retour['message_ok'] .= '@@gamumail_ok';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// on supprime les pdfs temporaires
|
// on supprime les pdfs temporaires
|
||||||
if (count($Tpdf_del)) {
|
if (count($Tpdf_dell)) {
|
||||||
foreach ($Tpdf_del as $pdf) {
|
foreach ($Tpdf_dell as $pdf) {
|
||||||
unlink($pdf);
|
unlink($pdf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $ok;
|
if ($redirect) {
|
||||||
|
$retour['redirect'] = $redirect;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $retour;
|
||||||
|
}
|
||||||
|
|
||||||
|
function gamumail_supprimer_si_vide($v){
|
||||||
|
if (!empty($v)) {
|
||||||
|
return $v;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,12 +0,0 @@
|
||||||
<!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>
|
|
|
@ -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>
|
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
[(#REM)
|
|
||||||
la liste des remplacements joués dans tous les slugs GamuMail
|
|
||||||
+ tous ceux des plugins qui les documentent via $GLOBALS'remplacements_gamumail'
|
|
||||||
|
|
||||||
inclure pour la page de configuration des gamumails
|
|
||||||
|
|
||||||
]
|
|
||||||
<div class="remplacements_slugs">
|
|
||||||
<h3 class="spip"><:gamumail:remplacements_disponibles:></h3>
|
|
||||||
<ul class="">
|
|
||||||
<BOUCLE_remplace(DATA){source tableau, #VAL|afficher_remplacements}>
|
|
||||||
<li><span class="toClip pointer" data-clipboard-text="#CLE"><strong>[(#CLE)]</strong> </span>: [(#VALEUR)]</li>
|
|
||||||
</BOUCLE_remplace>
|
|
||||||
</ul>
|
|
||||||
<em><:gamumail:avertissement_remplacements:></em>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script src="[(#CHEMIN{javascript/spip_barre.js}|timestamp)]" type="text/javascript"></script>
|
|
||||||
<script src="[(#CHEMIN{js/toClip.js}|timestamp)]" type="text/javascript"></script>
|
|
|
@ -26,67 +26,11 @@ if (!defined('_ECRIRE_INC_VERSION')) {
|
||||||
function gamumail_upgrade($nom_meta_base_version, $version_cible) {
|
function gamumail_upgrade($nom_meta_base_version, $version_cible) {
|
||||||
$maj = array();
|
$maj = array();
|
||||||
|
|
||||||
$maj['create'] = array(
|
$maj['create'] = array(array('maj_tables', array('spip_gamumails')));
|
||||||
array('maj_tables', array('spip_gamumails')),
|
|
||||||
array('creer_compte_curl', 'creer_slugs'),
|
|
||||||
);
|
|
||||||
$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'));
|
||||||
$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.14'] = 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'));
|
|
||||||
|
|
||||||
|
function creer_compte_curl(){
|
||||||
include_spip('base/upgrade');
|
|
||||||
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(){
|
|
||||||
if (sql_countsel('spip_auteurs', 'nom="curl_login"')){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$mdp = uniqid(uniqid(),1);
|
$mdp = uniqid(uniqid(),1);
|
||||||
$set = [
|
$set = [
|
||||||
'nom' => 'curl_login',
|
'nom' => 'curl_login',
|
||||||
|
@ -97,14 +41,18 @@ function creer_compte_curl(){
|
||||||
|
|
||||||
include_spip('action/editer_auteur');
|
include_spip('action/editer_auteur');
|
||||||
$id_auteur = auteur_inserer(null, $set);
|
$id_auteur = auteur_inserer(null, $set);
|
||||||
|
|
||||||
if ($id_auteur) {
|
if ($id_auteur) {
|
||||||
include_spip('inc/config');
|
include_spip('inc/config');
|
||||||
ecrire_config('curl_login', $set['login']);
|
ecrire_config('curl_login', $set['login']);
|
||||||
ecrire_config('curl_mdp', $mdp);
|
ecrire_config('curl_mdp', $mdp);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
include_spip('base/upgrade');
|
||||||
|
maj_plugin($nom_meta_base_version, $version_cible, $maj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fonction de désinstallation du plugin GamuMail.
|
* Fonction de désinstallation du plugin GamuMail.
|
||||||
*
|
*
|
||||||
|
|
|
@ -13,6 +13,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fonction d'appel pour le pipeline
|
* Fonction d'appel pour le pipeline
|
||||||
* @pipeline autoriser */
|
* @pipeline autoriser */
|
||||||
|
@ -20,39 +21,64 @@ function gamumail_autoriser() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// -----------------
|
||||||
|
// Objet gamumails
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Objet gamumails
|
* Autorisation de créer (gamumail)
|
||||||
**/
|
*
|
||||||
|
* @param string $faire Action demandée
|
||||||
|
* @param string $type Type d'objet sur lequel appliquer l'action
|
||||||
|
* @param int $id Identifiant de l'objet
|
||||||
|
* @param array $qui Description de l'auteur demandant l'autorisation
|
||||||
|
* @param array $opt Options de cette autorisation
|
||||||
|
* @return bool true s'il a le droit, false sinon
|
||||||
|
**/
|
||||||
function autoriser_gamumail_creer_dist($faire, $type, $id, $qui, $opt) {
|
function autoriser_gamumail_creer_dist($faire, $type, $id, $qui, $opt) {
|
||||||
return $qui['statut'] == '0minirezo' and !$qui['restreint'];
|
return in_array($qui['statut'], array('0minirezo', '1comite'));
|
||||||
}
|
|
||||||
function autoriser_gamumail_voir_dist($faire, $type, $id, $qui, $opt) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
function autoriser_gamumail_modifier_dist($faire, $type, $id, $qui, $opt) {
|
|
||||||
return $qui['statut'] == '0minirezo' and !$qui['restreint'];
|
|
||||||
}
|
|
||||||
function autoriser_gamumail_supprimer_dist($faire, $type, $id, $qui, $opt) {
|
|
||||||
return $qui['statut'] == '0minirezo' and !$qui['restreint'];
|
|
||||||
}
|
|
||||||
function autoriser_gamumail_configurer_dist($faire, $type, $id, $qui, $opt) {
|
|
||||||
return autoriser('webmestre');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Autorisation de modifier le nom d'un slug
|
* Autorisation de voir (gamumail)
|
||||||
* uniquement les webmestres avec un mail en @gamuza.fr
|
*
|
||||||
* sauf si editable=non (pour les slugs créés par des plugins)
|
* @param string $faire Action demandée
|
||||||
**/
|
* @param string $type Type d'objet sur lequel appliquer l'action
|
||||||
function autoriser_gamumail_modifier_nom_slug_dist($faire, $type, $id, $qui, $opt) {
|
* @param int $id Identifiant de l'objet
|
||||||
$editable = sql_getfetsel('editable', 'spip_gamumails', 'id_gamumail='.intval($id));
|
* @param array $qui Description de l'auteur demandant l'autorisation
|
||||||
if (
|
* @param array $opt Options de cette autorisation
|
||||||
intval($id)
|
* @return bool true s'il a le droit, false sinon
|
||||||
and $editable != 'non'
|
**/
|
||||||
) {
|
function autoriser_gamumail_voir_dist($faire, $type, $id, $qui, $opt) {
|
||||||
return
|
return true;
|
||||||
autoriser('webmestre')
|
}
|
||||||
and strpos($qui['email'], 'gamuza.fr') !== false;
|
|
||||||
}
|
/**
|
||||||
return false;
|
* Autorisation de modifier (gamumail)
|
||||||
|
*
|
||||||
|
* @param string $faire Action demandée
|
||||||
|
* @param string $type Type d'objet sur lequel appliquer l'action
|
||||||
|
* @param int $id Identifiant de l'objet
|
||||||
|
* @param array $qui Description de l'auteur demandant l'autorisation
|
||||||
|
* @param array $opt Options de cette autorisation
|
||||||
|
* @return bool true s'il a le droit, false sinon
|
||||||
|
**/
|
||||||
|
function autoriser_gamumail_modifier_dist($faire, $type, $id, $qui, $opt) {
|
||||||
|
return in_array($qui['statut'], array('0minirezo', '1comite'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Autorisation de supprimer (gamumail)
|
||||||
|
*
|
||||||
|
* @param string $faire Action demandée
|
||||||
|
* @param string $type Type d'objet sur lequel appliquer l'action
|
||||||
|
* @param int $id Identifiant de l'objet
|
||||||
|
* @param array $qui Description de l'auteur demandant l'autorisation
|
||||||
|
* @param array $opt Options de cette autorisation
|
||||||
|
* @return bool true s'il a le droit, false sinon
|
||||||
|
**/
|
||||||
|
function autoriser_gamumail_supprimer_dist($faire, $type, $id, $qui, $opt) {
|
||||||
|
return $qui['statut'] == '0minirezo' and !$qui['restreint'];
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,103 +13,6 @@ if (!defined('_ECRIRE_INC_VERSION')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// retourne un array OK comme élément du paramètre $Tclient passé à gamumail_charger
|
function gamumail_TabClient($objet, $id_objet, $champ){
|
||||||
function gamumail_TabClient($objet, $id_objet, $champ, $copie=''){
|
return compact('objet', 'id_objet', 'champ');
|
||||||
return compact('objet', 'id_objet', 'champ', 'copie');
|
|
||||||
}
|
|
||||||
|
|
||||||
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'];
|
|
||||||
include_spip('classes/facteur');
|
|
||||||
$texte = facteur_mail_html2text($html);
|
|
||||||
$corps['html'] = $html;
|
|
||||||
$corps['texte'] = $texte;
|
|
||||||
|
|
||||||
return $corps;
|
|
||||||
}
|
|
||||||
|
|
||||||
function gamumail_remplacer_modele($modele, $val, $texte){
|
|
||||||
if ($texte and $modele and $val) {
|
|
||||||
return str_replace('@@'.$modele.'@@', $val, $texte);
|
|
||||||
}
|
|
||||||
return $texte;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* le filtre pour retourner l'array des remplacements
|
|
||||||
**/
|
|
||||||
function afficher_remplacements() {
|
|
||||||
return $GLOBALS['remplacements_gamumail'];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,20 +20,3 @@ function crayons_determine_input_mode_type_gamumail($type, $champ, $sqltype) {
|
||||||
|
|
||||||
return in_array($champ, $Ttextarea) ? 'texte' : 'ligne';
|
return in_array($champ, $Ttextarea) ? 'texte' : 'ligne';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* pour la doc fournie par inclure/remplacements_slugs.html
|
|
||||||
* $GLOBALS['remplacements_gamumail'] est l'array global des remplacements dans les slugs (sera complété avec les remplacements des plugins)
|
|
||||||
* de la forme : ['@@truc_a_remplacer_1@@' => 'le machin qui remplace 1', '@@truc_a_remplacer_2@@' => _T('gamumail:chaine_de_langue_2')...];
|
|
||||||
*
|
|
||||||
**/
|
|
||||||
$GLOBALS['remplacements_gamumail'] = [
|
|
||||||
'@@nom@@' => _T('gamumail:nom'),
|
|
||||||
'@@prenom@@' => _T('gamumail:prenom_sinon_nom'),
|
|
||||||
'@@url_site@@' => _T('gamumail:url_site'),
|
|
||||||
'@@nom_site@@' => _T('gamumail:nom_site'),
|
|
||||||
'@@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'),
|
|
||||||
];
|
|
||||||
|
|
|
@ -13,34 +13,9 @@ if (!defined('_ECRIRE_INC_VERSION')) {
|
||||||
return;
|
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;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* pipeline pour déclencher une action si le gamumail est envoyé OK
|
|
||||||
* (typiquement enregistrer la date d'envoi)
|
|
||||||
*
|
|
||||||
* @param array $flux Données du pipeline
|
|
||||||
* @return array Données du pipeline
|
|
||||||
*
|
|
||||||
*
|
|
||||||
function gamumail_post_gamumail_ok($flux) {
|
|
||||||
|
|
||||||
return $flux;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Optimiser la base de données
|
* Optimiser la base de données
|
||||||
|
@ -51,11 +26,9 @@ function gamumail_post_gamumail_ok($flux) {
|
||||||
* @param array $flux Données du pipeline
|
* @param array $flux Données du pipeline
|
||||||
* @return array Données du pipeline
|
* @return array Données du pipeline
|
||||||
*/
|
*/
|
||||||
/*
|
|
||||||
function gamumail_optimiser_base_disparus($flux) {
|
function gamumail_optimiser_base_disparus($flux) {
|
||||||
|
|
||||||
sql_delete('spip_gamumails', "statut='poubelle' AND maj < " . $flux['args']['date']);
|
sql_delete('spip_gamumails', "statut='poubelle' AND maj < " . $flux['args']['date']);
|
||||||
|
|
||||||
return $flux;
|
return $flux;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
|
@ -3,7 +3,34 @@ if (!defined('_ECRIRE_INC_VERSION')){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
function inc_charger_pdf_dist($fichier_pdf, $contexte = [], $args = []){
|
|
||||||
$f = charger_fonction('generer_pdf','gamu');
|
function inc_charger_pdf_dist($fichier_pdf, $contexte = []){
|
||||||
return $f($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)) {
|
||||||
|
$val = intval($val);
|
||||||
|
} else {
|
||||||
|
$val = "$val";
|
||||||
|
}
|
||||||
|
$url .= "&$champ=$val";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$CurlConnect = curl_init();
|
||||||
|
|
||||||
|
// pour une connexion https locale (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);
|
||||||
|
curl_close($CurlConnect);
|
||||||
|
|
||||||
|
return $retour;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,312 +0,0 @@
|
||||||
<?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['dest_cci' => 'toto@truc.tld'] le destinataire (to) si $options['cci'] === true
|
|
||||||
* (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 :
|
|
||||||
* - 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['pieces_jointes'][] = [
|
|
||||||
* 'chemin' => 'tmp/cache/toto.xls',
|
|
||||||
* 'nom' => 'toto.xls',
|
|
||||||
* 'encodage' => 'base64',
|
|
||||||
* 'mime' => 'application/vnd.ms-excel'
|
|
||||||
* ]
|
|
||||||
* ]
|
|
||||||
* $options['args' => ['param_1' => 'valeur_1, 'param_2' => 'valeur_2', ...]]
|
|
||||||
* @param Array $Tid_doc_piece_jointe => Array id_doc a ajouter comme piece jointe
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
function inc_envoyer_gamumail($slug, $destinataires, $options = [], $Tid_doc_piece_jointe = []) {
|
|
||||||
//var_dump($options) ;die;
|
|
||||||
//var_dump($destinataires);
|
|
||||||
|
|
||||||
include_spip('inc/texte');
|
|
||||||
include_spip('classes/facteur');
|
|
||||||
|
|
||||||
$retour = array();
|
|
||||||
|
|
||||||
// blocage de l'envoi pour le pseudo-slug "no_gamumail"
|
|
||||||
if ($slug === 'no_gamumail') {
|
|
||||||
$retour['message_ok'] = _T('gamumail:message_no_gamumail');
|
|
||||||
spip_log("Pas d'envoi de mail pour cause de slug no_gamumail","gamumail");
|
|
||||||
return $retour;
|
|
||||||
}
|
|
||||||
|
|
||||||
// sécu
|
|
||||||
if (preg_match('/[^a-zA-Z0-9_\-]/', $slug)) {
|
|
||||||
$retour['message_erreur'] = _T("gamumail:erreur_format_slug");
|
|
||||||
return $retour;
|
|
||||||
}
|
|
||||||
|
|
||||||
// langue (par défaut langue du site)
|
|
||||||
$lang = !empty($options['lang']) ? $options['lang'] : lire_config('langue_site', 'fr');
|
|
||||||
$id_docs = '';
|
|
||||||
if ($slug === 'no_slug' && array_key_exists('message', $options)) {
|
|
||||||
$html = $options['message'];
|
|
||||||
if (array_key_exists('sujet', $options)) {
|
|
||||||
$sujet = $options['sujet'];
|
|
||||||
} else {
|
|
||||||
$sujet = array_shift($html);
|
|
||||||
}
|
|
||||||
} 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
|
|
||||||
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);
|
|
||||||
$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
|
|
||||||
if (count($pour) > 1 AND isset($options['cci']) AND $options['cci']) {
|
|
||||||
$cci = array_unique(array_merge($cci, $pour));
|
|
||||||
if (isset($options['dest_cci']) and email_valide($options['dest_cci'])) {
|
|
||||||
$pour = [$options['dest_cci']];
|
|
||||||
} else {
|
|
||||||
$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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$Tid_doc = array_merge($Tid_doc, $Tid_doc_piece_jointe);
|
|
||||||
|
|
||||||
// récup des paramètres des docs à attacher
|
|
||||||
if (!empty($Tid_doc)) {
|
|
||||||
foreach ($Tid_doc as $id_document) {
|
|
||||||
$protected = '';
|
|
||||||
$Tdocument = sql_fetsel('*','spip_documents','id_document='.intval($id_document));
|
|
||||||
if (
|
|
||||||
array_key_exists('protected', $Tdocument)
|
|
||||||
and $Tdocument['protected'] === 'oui'
|
|
||||||
) {
|
|
||||||
$protected = 'PROTECTED/';
|
|
||||||
}
|
|
||||||
$destination = _DIR_IMG.$protected.$Tdocument['fichier'];
|
|
||||||
|
|
||||||
$extension = $Tdocument['extension'];
|
|
||||||
if ($Tdocument['titre']) {
|
|
||||||
$nom_fichier = $Tdocument['titre'] .".".$extension;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$nom_fichier = basename($Tdocument['fichier']);
|
|
||||||
}
|
|
||||||
include_spip('bigup_fonctions');
|
|
||||||
|
|
||||||
$type_mime = bigup_get_mime_type_extension($extension);
|
|
||||||
$pieces_jointes[] = [
|
|
||||||
'chemin' => $destination,
|
|
||||||
'nom' => $nom_fichier,
|
|
||||||
'encodage' => 'base64',
|
|
||||||
'mime' => $type_mime
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// les docs attachés
|
|
||||||
if (isset($options['pieces_jointes'])) {
|
|
||||||
if (is_array($options['pieces_jointes'])) {
|
|
||||||
foreach ($options['pieces_jointes'] as $Tpj) {
|
|
||||||
$pieces_jointes[] = $Tpj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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 remplacements du contenu des slugs spécifiques de chaque plugins
|
|
||||||
$args = $options;
|
|
||||||
$args['slug'] = $slug;
|
|
||||||
$args['destinataires'] = $pour;
|
|
||||||
|
|
||||||
$html = pipeline('remplacements_slug', [
|
|
||||||
'args' => $args,
|
|
||||||
'data' => $html
|
|
||||||
]);
|
|
||||||
$sujet = pipeline('remplacements_slug',[
|
|
||||||
'args' => $args,
|
|
||||||
'data' => $sujet
|
|
||||||
]);
|
|
||||||
|
|
||||||
// traitement des remplacements génériques fournis par Gamumail
|
|
||||||
$remplacement_generiques = charger_fonction('gamumail_remplacements', 'inc');
|
|
||||||
$html = $remplacement_generiques($args, $html);
|
|
||||||
$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');
|
|
||||||
$texte = facteur_mail_html2text($html);
|
|
||||||
$corps = [
|
|
||||||
'html' => $html,
|
|
||||||
'texte' => $texte,
|
|
||||||
'cc' => $cc,
|
|
||||||
'bcc' => $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;
|
|
||||||
//exit;
|
|
||||||
} else {
|
|
||||||
// pour ne pas avoir de warning de la fonction envoyer_mail() on doit lui passer un paramètre $from et un $header
|
|
||||||
$from = '';
|
|
||||||
$header = $options['header'] ?? '';
|
|
||||||
$envoyer_mail = charger_fonction('envoyer_mail', 'inc/');
|
|
||||||
$ok = $envoyer_mail($pour, $sujet, $corps, $from, $header);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$ok) {
|
|
||||||
spip_log("Erreur d'envoi du mail : ","gamumail");
|
|
||||||
spip_log($corps,"gamumail");
|
|
||||||
|
|
||||||
$retour['message_erreur'] = _L("gamumail:erreur_envoi_mail");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$retour['message_ok'] = _L('gamumail:mail_envoye');
|
|
||||||
}
|
|
||||||
|
|
||||||
// on supprime les pdfs temporaires
|
|
||||||
if (count($Tpdf_dell)) {
|
|
||||||
foreach ($Tpdf_dell as $pdf) {
|
|
||||||
unlink($pdf);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $retour;
|
|
||||||
}
|
|
|
@ -1,93 +0,0 @@
|
||||||
<?php
|
|
||||||
if (!defined('_ECRIRE_INC_VERSION')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* fonction pour les remplacements génériques fournis par gamumail
|
|
||||||
*
|
|
||||||
* @param array $args = ['slug' => $slug, 'destinataires' => $pour, [$options]]
|
|
||||||
* @param string $data = $html
|
|
||||||
*
|
|
||||||
* @return $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 = sql_getfetsel('nom', 'spip_auteurs', 'email='.sql_quote($args['destinataires'][0])) ?? ' ';
|
|
||||||
$html = gamumail_remplacer_modele('nom', ucwords($nom), $html);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @@prenom@@ => $prenom ou un espace pour vider le champ @@prenom@@
|
|
||||||
**/
|
|
||||||
$prenom = ' ';
|
|
||||||
$trouver_table = charger_fonction('trouver_table', 'base');
|
|
||||||
$desc = $trouver_table('spip_auteurs');
|
|
||||||
if (array_key_exists('prenom', $desc['field'])) {
|
|
||||||
$prenom = sql_getfetsel('prenom', 'spip_auteurs', 'email='.sql_quote($args['destinataires'][0])) ?? ' ';
|
|
||||||
}
|
|
||||||
$html = gamumail_remplacer_modele('prenom', ucwords($prenom), $html);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @@url_site@@ => URL du site
|
|
||||||
**/
|
|
||||||
$url_site = lire_config('adresse_site');
|
|
||||||
$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_absolue(generer_url_public('spip_pass'));
|
|
||||||
$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;
|
|
||||||
}
|
|
|
@ -1,51 +0,0 @@
|
||||||
[(#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}{si #ENV{cacher_selecteur_slug}|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,dest=#ENV{dest},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
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
|
@ -1,28 +0,0 @@
|
||||||
[(#REM) fichier vide appelé par formulaire/gamumail.html
|
|
||||||
surchargeable si besoin de jouer du JS en fonction du retour du traiter
|
|
||||||
par exemple pour fermer la modale dans laquelle formulaire/gamumail.html est ouvert
|
|
||||||
|
|
||||||
la fonction traiter de formulaire/gamumail.php ajoute le suffixe @@gamumail_ok au retour #ENV{message_ok} si l'envoi du gamumail s'est bien passé
|
|
||||||
|
|
||||||
Exemple de code pour tester le retour OK et ajouter du JS qui met à jour un bloc ajax paybyurl_#ID_TRANSACTION et ferme la modalbox
|
|
||||||
(ici le #ID_TRANSACTION est dans l'env du formulaire via l'#ARRAY{options} du charger )
|
|
||||||
|
|
||||||
[(#ENV{message_ok}|explode{@@}|table_valeur{1}|=={gamumail_ok}|oui)
|
|
||||||
<script type="text/javascript">
|
|
||||||
jQuery(function() {
|
|
||||||
var lien_ajax = 'paybyurl';
|
|
||||||
var id_transaction = #ENV{options/id_transaction};
|
|
||||||
|
|
||||||
ajaxReload(lien_ajax, {
|
|
||||||
args: {
|
|
||||||
id_transaction: id_transaction
|
|
||||||
},
|
|
||||||
callback: function(){
|
|
||||||
$.modalboxclose();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
]
|
|
||||||
|
|
||||||
]
|
|
|
@ -1,167 +1,69 @@
|
||||||
[(#AUTORISER{modifier,gamumail}|sinon_interdire_acces)]
|
|
||||||
|
|
||||||
<style type="text/css" media="screen">
|
<style type="text/css" media="screen">
|
||||||
.configuration_mails .objet--mail span {
|
.configuration_mails .objet--mail span {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
.configuration_mails .objet--mail {
|
.well {
|
||||||
margin-top: 1.5rem;
|
|
||||||
}
|
|
||||||
.configuration_mails .well {
|
|
||||||
background-color: #cecece;
|
background-color: #cecece;
|
||||||
margin: 10px auto;
|
margin: 10px auto;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
.crayon {
|
||||||
.configuration_mails .un-pdf {
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.un-pdf {
|
||||||
border: 1px solid black;
|
border: 1px solid black;
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
.configuration_mails span.label {
|
span.label {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 180px;
|
width: 180px;
|
||||||
}
|
}
|
||||||
.configuration_mails span.crayon, .configuration_mails div.crayon {
|
|
||||||
background-color: #fff;
|
|
||||||
padding: .5rem;
|
|
||||||
}
|
|
||||||
.configuration_mails .well h4.crayon {
|
|
||||||
background-color: #cecece;
|
|
||||||
}
|
|
||||||
.configuration_mails .wp600 {
|
|
||||||
width: 600px;
|
|
||||||
}
|
|
||||||
.configuration_mails .btn_supprimer {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
.configuration_mails .btn_editer {
|
|
||||||
float: right;
|
|
||||||
margin-right: 2rem;
|
|
||||||
}
|
|
||||||
.configuration_mails .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;
|
|
||||||
}
|
|
||||||
.configuration_mails .markItUp .markItUpHeader ul a em {
|
|
||||||
width: 2rem;
|
|
||||||
height: 2rem;
|
|
||||||
}
|
|
||||||
.configuration_mails span > em {
|
|
||||||
font-size: 85%;
|
|
||||||
}
|
|
||||||
.configuration_mails .remplacements_slugs {
|
|
||||||
margin-top: 4rem;
|
|
||||||
}
|
|
||||||
.configuration_mails .name_config {
|
|
||||||
font-size: 1rem;
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
<div class="inner configuration_mails">
|
<div class="inner configuration_mails">
|
||||||
[(#REM) <h1>Configuration des mails</h1> ]
|
<h1 class="txtcenter">Configuration des mails</h1>
|
||||||
<div class="configuration_generale">
|
<div class="configuration_generale">
|
||||||
<h2>Paramétres généraux</h2>
|
|
||||||
<div class="well">
|
<div class="well">
|
||||||
<div class="une_conf">
|
<div class="une_conf">
|
||||||
<small class="name_config">gamumail/mail_cc</small>
|
<h4>Emails en copie "cc" des différents messages
|
||||||
<h4><:gamumail:email_en_cc:></h4>
|
<span class="#EDIT{meta-gamumail/mail_cc} inbl w600p">[(#CONFIG{gamumail/mail_cc}|sinon{cliquer})]</span>
|
||||||
<div class="#EDIT{meta-gamumail/mail_cc} inbl w600p nomulti">[(#CONFIG{gamumail/mail_cc}|sinon{<i><:gamumail:dbe_clic_editer:></i>})]</div>
|
</h4>
|
||||||
<p class="explication"><:gamumail:plusieurs_mails_separer_virgule:>.</p>
|
<p class="explication">Si plusieurs emails, les séparer par une virgule</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="well">
|
|
||||||
<div class="une_conf">
|
<div class="une_conf">
|
||||||
<small class="name_config">gamumail/mail_cci</small>
|
<h4>Emails en copie cachée "cci" des différents messages
|
||||||
<h4><:gamumail:email_en_cci:></h4>
|
<span class="#EDIT{meta-gamumail/mail_cci} inbl w600p">[(#CONFIG{gamumail/mail_cci}|sinon{cliquer})]</span>
|
||||||
<div class="#EDIT{meta-gamumail/mail_cci} inbl w600p nomulti">[(#CONFIG{gamumail/mail_cci}|sinon{<i><:gamumail:dbe_clic_editer:></i>})]</div>
|
</h4>
|
||||||
<p class="explication"><:gamumail:plusieurs_mails_separer_virgule:>.</p>
|
<p class="explication">Si plusieurs emails, les séparer par une virgule</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
<BOUCLE_message(GAMUMAILS)>
|
||||||
<h2>Modèles de mails</h2>
|
|
||||||
<h3 class="explication"><:gamumail:dbe_clic_editer_champs:></h3>
|
|
||||||
<BOUCLE_message(GAMUMAILS){par rang, num titre}>
|
|
||||||
<div class="well">
|
<div class="well">
|
||||||
<div class="une_conf">
|
<div class="une_conf">
|
||||||
[(#AUTORISER{supprimer,gamumail}|oui)
|
<h4 class="toggle cursor"
|
||||||
<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>
|
data-id="#SLUG">
|
||||||
]
|
|
||||||
<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-#COMPTEUR_BOUCLE">
|
|
||||||
<i class="fa fa-envelope mrs"></i>
|
<i class="fa fa-envelope mrs"></i>
|
||||||
[(#TITRE)]
|
[(#TITRE)]
|
||||||
<i class="fa fa-caret-down"></i>
|
<i class="fa fa-caret-down"></i>
|
||||||
</h4>
|
</h4>
|
||||||
|
|
||||||
<div id="#SLUG-#COMPTEUR_BOUCLE" class="js-hidden">
|
<div id="#SLUG" class="js-hidden">
|
||||||
<div class="objet--slug">
|
[(#AUTORISER{webmestre}|oui)
|
||||||
<strong><:gamumail:slug:>: </strong>
|
<div class="objet--slyg">
|
||||||
[(#AUTORISER{modifier_nom_slug, gamumail, #ID_GAMUMAIL}|?{
|
<strong>Slug : </strong>
|
||||||
<span class="[(#EDIT{nom_slug})] nomulti">[(#SLUG|sinon{<:gamumail:dbe_clic_editer:>})]</span>
|
<span class="#EDIT{slug}">[(#SLUG|sinon{cliquez})]</span>
|
||||||
,
|
|
||||||
<span class="">[(#SLUG)]</span>
|
|
||||||
})]
|
|
||||||
</div>
|
</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} nomulti">
|
|
||||||
[(#ID_DOCS|sinon{<:gamumail:dbe_clic_editer:>})]
|
|
||||||
</div>
|
|
||||||
<B_docs_spip>
|
|
||||||
<div class="details_docs_spip">
|
|
||||||
<ul>
|
|
||||||
<BOUCLE_docs_spip(DOCUMENTS){id_document IN #ID_DOCS|explode{','}}{tous}>
|
|
||||||
<li><strong>#ID_DOCUMENT :</strong> #TITRE
|
|
||||||
([<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>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</B_docs_spip>
|
|
||||||
</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 class="objet--mail">
|
||||||
|
<strong>Objet : </strong>
|
||||||
|
<span class="#EDIT{sujet}">[(#SUJET|sinon{cliquez})]</span>
|
||||||
</div>
|
</div>
|
||||||
|
<strong>Message : </strong>
|
||||||
|
<div class="texte #EDIT{texte}">[(#TEXTE|sinon{cliquez})]</div>
|
||||||
[(#REM)
|
[(#REM)
|
||||||
Pour l'instant, inutile
|
Pour l'instant, inutile
|
||||||
<div class="pdfs">
|
<div class="pdfs">
|
||||||
|
@ -177,16 +79,14 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</BOUCLE_message>
|
</BOUCLE_message>
|
||||||
[(#AUTORISER{creer,gamumail}|oui)
|
</BOUCLE_messages>
|
||||||
<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>
|
</div>
|
||||||
|
|
||||||
<INCLURE{fond=gamumail/remplacements_slugs}>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|
||||||
jQuery(function() {
|
jQuery(function() {
|
||||||
configuration_mails();
|
configuration_mails();
|
||||||
|
|
||||||
|
@ -198,4 +98,5 @@
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
]
|
]
|
||||||
|
|
||||||
<div class="pdfs">
|
<div class="pdfs">
|
||||||
[(#AUTORISER{modifier,gamumail}|oui)
|
[(#AUTORISER{webmestre}|oui)
|
||||||
<a class="btn ajax nohistory nocache" href="[(#URL_ACTION_AUTEUR{gamuform_add_pdf,#ENV{id_gamumail},#SELF})]">
|
<a class="btn ajax nohistory nocache" href="[(#URL_ACTION_AUTEUR{gamuform_add_pdf,#ENV{id_gamumail},#SELF})]">
|
||||||
+ pdf
|
+ pdf
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -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>
|
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
[(#SET{Tpdf,#ARRAY{
|
|
||||||
fichier,#ENV{pdf_fichier},
|
|
||||||
nom,#ENV{pdf_nom},
|
|
||||||
contexte,#ARRAY{slug, #ENV{slug}}
|
|
||||||
}}
|
|
||||||
)]
|
|
||||||
<h3 id="titre_slug"><:gamumail:contenu_mail:></h3>
|
|
||||||
<div class="bloc_contenu_slug ajax">
|
|
||||||
[(#FORMULAIRE_GAMUMAIL{
|
|
||||||
#ENV{slug},
|
|
||||||
#ENV{dest},
|
|
||||||
#ENV{client},
|
|
||||||
#GET{Tpdf},
|
|
||||||
#ENV{redirect},
|
|
||||||
#ENV{options}
|
|
||||||
})]
|
|
||||||
</div>
|
|
15
js/toClip.js
15
js/toClip.js
|
@ -1,15 +0,0 @@
|
||||||
jQuery(function ($) {
|
|
||||||
$('.toClip').on('mousedown', function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
const t = $(this).data('clipboard-text') ?? $(this).text();
|
|
||||||
navigator.clipboard.writeText(t).then(() => {
|
|
||||||
barre_inserer(t);
|
|
||||||
const html = `<span class="copierOk verte"><strong>✔ copié</strong></span>`;
|
|
||||||
$(this).append(html);
|
|
||||||
setTimeout(() => {
|
|
||||||
$(this).children('.copierOk').remove();
|
|
||||||
}, 1000);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
|
@ -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',
|
|
||||||
);
|
|
|
@ -10,38 +10,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
|
||||||
|
|
||||||
// A
|
// A
|
||||||
'ajouter_lien_gamumail' => 'Ajouter ce gamumail',
|
'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
|
// C
|
||||||
'champ_slug_label' => 'Slug',
|
'champ_slug_label' => 'Slug',
|
||||||
'champ_sujet_label' => 'Sujet',
|
'champ_sujet_label' => 'Sujet',
|
||||||
'champ_texte_label' => 'Texte',
|
'champ_texte_label' => 'Texte',
|
||||||
'confirmer_supprimer_gamumail' => 'Confirmez-vous la suppression de cet gamumail ?',
|
'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' => 'Texte',
|
|
||||||
|
|
||||||
// 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' => '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',
|
||||||
"erreur_envoi_mail" => "Erreur dans l'envoi de votre mail",
|
"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',
|
|
||||||
'fichiers_televerser' => 'Fichiers téléversés',
|
|
||||||
|
|
||||||
// I
|
// I
|
||||||
'icone_creer_gamumail' => 'Créer un gamumail',
|
'icone_creer_gamumail' => 'Créer un gamumail',
|
||||||
|
@ -50,46 +28,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
|
||||||
'info_aucun_gamumail' => 'Aucun gamumail',
|
'info_aucun_gamumail' => 'Aucun gamumail',
|
||||||
'info_gamumails_auteur' => 'Les gamumails de cet auteur',
|
'info_gamumails_auteur' => 'Les gamumails de cet auteur',
|
||||||
'info_nb_gamumails' => '@nb@ gamumails',
|
'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
|
//MM
|
||||||
"mail_envoye" => "Votre message a bien été envoyé",
|
"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
|
// R
|
||||||
'retirer_lien_gamumail' => 'Retirer ce gamumail',
|
'retirer_lien_gamumail' => 'Retirer ce gamumail',
|
||||||
'retirer_tous_liens_gamumails' => 'Retirer tous les gamumails',
|
'retirer_tous_liens_gamumails' => 'Retirer tous les gamumails',
|
||||||
'remplacements_disponibles' => 'Remplacements automatiques disponibles :',
|
|
||||||
|
|
||||||
// S
|
// S
|
||||||
'supprimer_gamumail' => 'Supprimer cet gamumail',
|
'supprimer_gamumail' => 'Supprimer cet gamumail',
|
||||||
'selectionnez_modele' => 'Sélectionnez un modèle...',
|
|
||||||
'supprimer_modele' => 'Supprimer le modèle',
|
|
||||||
'slug' => 'Slug',
|
|
||||||
'sujet' => 'Sujet',
|
|
||||||
'switch_modele_public' => 'Modifier la visibilité publique du modèle',
|
|
||||||
|
|
||||||
// T
|
// T
|
||||||
'texte_ajouter_gamumail' => 'Ajouter un gamumail',
|
'texte_ajouter_gamumail' => 'Ajouter un gamumail',
|
||||||
|
@ -102,12 +50,4 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
|
||||||
'titre_langue_gamumail' => 'Langue de ce gamumail',
|
'titre_langue_gamumail' => 'Langue de ce gamumail',
|
||||||
'titre_logo_gamumail' => 'Logo de ce gamumail',
|
'titre_logo_gamumail' => 'Logo de ce gamumail',
|
||||||
'titre_objets_lies_gamumail' => 'Liés à 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 du lien pour réinitialiser le mot de passe du compte <small>(à n\'utiliser que dans le slug de reset de passe !)</small>',
|
|
||||||
|
|
||||||
// V
|
|
||||||
'visibilite_public' => 'Disponible dans la liste des modèles',
|
|
||||||
);
|
);
|
||||||
|
|
13
paquet.xml
13
paquet.xml
|
@ -1,12 +1,12 @@
|
||||||
<paquet
|
<paquet
|
||||||
prefix="gamumail"
|
prefix="gamumail"
|
||||||
categorie="communication"
|
categorie="communication"
|
||||||
version="1.4.6"
|
version="1.0.6"
|
||||||
etat="dev"
|
etat="dev"
|
||||||
compatibilite="[3.2.0;4.*]"
|
compatibilite="[3.3.0-dev;3.3.*]"
|
||||||
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.5"
|
||||||
>
|
>
|
||||||
|
|
||||||
<nom>GamuMail</nom>
|
<nom>GamuMail</nom>
|
||||||
|
@ -15,15 +15,10 @@
|
||||||
|
|
||||||
<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="post_gamumail_ok" 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" />
|
||||||
|
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
#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>
|
|
|
@ -1,3 +0,0 @@
|
||||||
<BOUCLE_toto(GAMUMAILS){id_gamumail}>
|
|
||||||
#SLUG
|
|
||||||
</BOUCLE_toto>
|
|
Loading…
Add table
Reference in a new issue