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