feat: ajout la possibilité de joindre des fichiers téléverser.

Attention, ces fichiers ne sont pas sauvegardés.
Fichiers acceptés :
    * images
    * pdf
This commit is contained in:
Christophe 2023-11-09 14:23:36 +01:00
parent 1f870feae8
commit 57e1466497
5 changed files with 162 additions and 67 deletions

View file

@ -110,73 +110,80 @@
</div> </div>
</div> </div>
#SET{fichier,#SLUG|concat{_soustexte}} <div class="flex gap-6">
[(#CHEMIN{gamumail/#GET{fichier}.html}|oui) <div class="w500p">
<INCLURE{fond=gamumail/#GET{fichier},env,lang=#GET{lang_dest}}> #SET{fichier,#SLUG|concat{_soustexte}}
] [(#CHEMIN{gamumail/#GET{fichier}.html}|oui)
<INCLURE{fond=gamumail/#GET{fichier},env,lang=#GET{lang_dest}}>
#SET{name,Tpdfs_ok} ]
<B_pdf> #SET{name,Tpdfs_ok}
<h2><:gamumail:pdf_envoyes:></h2> <B_pdf>
<div class="editer_groupe"> <h2><:gamumail:pdf_envoyes:></h2>
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer_groupe">
#SET{obli,"obligatoire"} #SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
<div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> #SET{obli,"obligatoire"}
<BOUCLE_pdf(DATA){source tableau, #ENV{TFichierpdfs}}> <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">
<div class="choix"> <BOUCLE_pdf(DATA){source tableau, #ENV{TFichierpdfs}}>
<input type="checkbox" class="checkbox" name="#GET{name}[]" value="[(#VALEUR|table_valeur{fichier})]_#CLE" id="#GET{name}_#COMPTEUR_BOUCLE" checked="checked" > <div class="choix">
[(#SET{url_pdf, #URL_PAGE{spipdf} <input type="checkbox" class="checkbox" name="#GET{name}[]" value="[(#VALEUR|table_valeur{fichier})]_#CLE" id="#GET{name}_#COMPTEUR_BOUCLE" checked="checked" >
|parametre_url{spipdf, #VALEUR|table_valeur{fichier}} [(#SET{url_pdf, #URL_PAGE{spipdf}
|parametre_url{lang, #GET{lang_dest}} |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(DATA){source tableau, #VALEUR|table_valeur{contexte}}>
</BOUCLE_options> [(#SET{url_pdf,[(#GET{url_pdf}|parametre_url{#CLE,#VALEUR})]})]
<label for="#GET{name}_#COMPTEUR_BOUCLE">[(#VALEUR|table_valeur{nom})] : <a href="#GET{url_pdf}">voir le PDF</a></label> </BOUCLE_options>
<label for="#GET{name}_#COMPTEUR_BOUCLE">[(#VALEUR|table_valeur{nom})] : <a href="#GET{url_pdf}">voir le PDF</a></label>
</div>
</BOUCLE_pdf>
</div> </div>
</BOUCLE_pdf> </div>
</B_pdf>
#SET{name,docs_spip}
<h2><:gamumail:documents_attaches:></h2>
<div class="editer_groupe">
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
<div class="editer editer_[(#GET{name})][ (#GET{erreurs}|oui)erreur]">
<div class="choix">
[<span class="erreur_message">(#GET{erreurs})</span>]
<label for="#GET{name}"><:gamumail:id_docs_attaches:></label>
<input type="text" class="text" name="#GET{name}" value="[(#ENV{#GET{name}})]" id="#GET{name}" >
</div>
<B_docs_spip>
<div class="details_docs_spip">
<ul>
<BOUCLE_docs_spip(DOCUMENTS){id_document IN #ENV{#GET{name}}|explode{','}}>
<li><strong>#ID_DOCUMENT :</strong> #TITRE ([<a class="mediabox" href="#URL_DOCUMENT">(#FICHIER|basename)</a>])</li>
</BOUCLE_docs_spip>
</ul>
</div>
</B_docs_spip>
</div>
</div>
#SET{fichier,all_fichiers}
[(#CHEMIN{gamumail/#GET{fichier}.html}|oui)
#SET{erreurs,#ENV**{erreurs}|table_valeur{Tid_doc}}
[<span class="erreur_message">(#GET{erreurs})</span>]
<INCLURE{fond=gamumail/#GET{fichier},env,slug=#SLUG,options=#ENV{options}}>
]
#SET{fichier,#SLUG|concat{_fichiers}}
[(#CHEMIN{gamumail/#GET{fichier}.html}|oui)
#SET{erreurs,#ENV**{erreurs}|table_valeur{Tid_doc}}
[<span class="erreur_message">(#GET{erreurs})</span>]
<h2><:gamumail:fichiers_annexes:></h2>
<INCLURE{fond=gamumail/#GET{fichier},env,options=#ENV{options}}>
]
</div>
<div class="minw-500p">
<h2><:gamumail:fichiers_televerser:></h2>
<INCLURE{fond=inclure/bigform,env,accept=#LISTE{image/*, application/pdf},suffix_liste_fichiers=gamumail}>
</div> </div>
</div> </div>
</B_pdf>
#SET{name,docs_spip}
<h2><:gamumail:documents_attaches:></h2>
<div class="editer_groupe">
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
<div class="editer editer_[(#GET{name})][ (#GET{erreurs}|oui)erreur]">
<div class="choix">
[<span class="erreur_message">(#GET{erreurs})</span>]
<label for="#GET{name}"><:gamumail:id_docs_attaches:></label>
<input type="text" class="text" name="#GET{name}" value="[(#ENV{#GET{name}})]" id="#GET{name}" >
</div>
<B_docs_spip>
<div class="details_docs_spip">
<ul>
<BOUCLE_docs_spip(DOCUMENTS){id_document IN #ENV{#GET{name}}|explode{','}}>
<li><strong>#ID_DOCUMENT :</strong> #TITRE ([<a class="mediabox" href="#URL_DOCUMENT">(#FICHIER|basename)</a>])</li>
</BOUCLE_docs_spip>
</ul>
</div>
</B_docs_spip>
</div>
</div>
#SET{fichier,all_fichiers} <div class="boutons text-center">
[(#CHEMIN{gamumail/#GET{fichier}.html}|oui)
#SET{erreurs,#ENV**{erreurs}|table_valeur{Tid_doc}}
[<span class="erreur_message">(#GET{erreurs})</span>]
<INCLURE{fond=gamumail/#GET{fichier},env,slug=#SLUG,options=#ENV{options}}>
]
#SET{fichier,#SLUG|concat{_fichiers}}
[(#CHEMIN{gamumail/#GET{fichier}.html}|oui)
#SET{erreurs,#ENV**{erreurs}|table_valeur{Tid_doc}}
[<span class="erreur_message">(#GET{erreurs})</span>]
<h2><:gamumail:fichiers_annexes:></h2>
<INCLURE{fond=gamumail/#GET{fichier},env,options=#ENV{options}}>
]
<div class="boutons">
<button type="submit" class="btn"><:gamumail:envoyer:></button> <button type="submit" class="btn"><:gamumail:envoyer:></button>
</div> </div>
</div></form> </div></form>

View file

@ -112,6 +112,8 @@ function formulaires_gamumail_charger_dist($slug, $destinataires = 0, $Tclient =
$valeurs = $f($valeurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect); $valeurs = $f($valeurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);
} }
$valeurs['_bigup_rechercher_fichiers'] = true;
return $valeurs; return $valeurs;
} }
@ -197,6 +199,21 @@ function formulaires_gamumail_verifier_dist($slug, $destinataires = 0, $Tclient
$erreurs = $f($erreurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect); $erreurs = $f($erreurs, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);
} }
/*
* Verification des fichiers téléversés
*/
defined('_IMG_MAX_WIDTH') || define('_IMG_MAX_WIDTH', 2048);
$options = [
'mime' => 'tout_mime',
'dimension_max' => [
'largeur' => 10000,
'hauteur' => 10000,
]
];
$bigform = charger_fonction('bigform_verifier','inc');
$bigform($options,$erreurs);
return $erreurs; return $erreurs;
} }
@ -233,12 +250,22 @@ function formulaires_gamumail_traiter_dist($slug, $destinataires = 0, $Tclient =
} }
} }
/*
* on recupère d'éventuels fichiers téléversés
*/
include_spip('inc/joindre_document');
set_request('joindre_upload','ok');
$Tfiles = joindre_trouver_fichier_envoye();
if (!is_array($Tfiles)) {
$Tfiles = [];
}
if (empty($envoi_separe)) { if (empty($envoi_separe)) {
gamuSend($slug, $options, $destinataires, $Tclient, $Tpdf, $redirect, $retour); gamuSend($slug, $options, $destinataires, $Tclient, $Tpdf, $Tfiles, $redirect, $retour);
} else { } else {
$ok = true; $ok = true;
foreach ($destinataires as $d) { foreach ($destinataires as $d) {
$r = gamuSend($slug, $options, [$d], $Tclient, $Tpdf, $redirect); $r = gamuSend($slug, $options, [$d], $Tclient, $Tpdf, $Tfiles, $redirect);
if (!$r) { if (!$r) {
$ok = false; $ok = false;
} }
@ -263,7 +290,7 @@ function formulaires_gamumail_traiter_dist($slug, $destinataires = 0, $Tclient =
} }
function gamuSend($slug, $options, $destinataires, $Tclient, $Tpdf, $redirect, &$retour = []) { function gamuSend($slug, $options, $destinataires, $Tclient, $Tpdf, $Tfiles, $redirect, &$retour = []) {
$cc = _request('cc'); $cc = _request('cc');
$cci = _request('cci'); $cci = _request('cci');
@ -341,6 +368,19 @@ function gamuSend($slug, $options, $destinataires, $Tclient, $Tpdf, $redirect, &
]; ];
} }
} }
// les documents par tFiles (téléversés)
if (!empty($Tfiles)) {
foreach ($Tfiles as $key => $fichier) {
$pieces_jointes[] = [
'chemin' => $fichier['tmp_name'],
'nom' => $fichier['name'],
'encodage' => 'base64',
'mime' => $fichier['type']
];
}
}
// les pdfs générés en fonction du contexte // les pdfs générés en fonction du contexte
$Tpdf_del = []; $Tpdf_del = [];
if (!empty($Tpdfs_ok) and is_array($Tpdfs_ok)) { if (!empty($Tpdfs_ok) and is_array($Tpdfs_ok)) {
@ -437,7 +477,6 @@ function gamuSend($slug, $options, $destinataires, $Tclient, $Tpdf, $redirect, &
$corps['repondre_a'] = $repondre_a; $corps['repondre_a'] = $repondre_a;
} }
// surcharges de traiter : d'abord les surcharges pour tous les slugs (tous_traiter.php) puis les spécifiques par slug (nom_slug_traiter.php) // surcharges de traiter : d'abord les surcharges pour tous les slugs (tous_traiter.php) puis les spécifiques par slug (nom_slug_traiter.php)
if ($f = charger_fonction('traiter', 'gamumail', true)) { if ($f = charger_fonction('traiter', 'gamumail', true)) {
$corps = $f($corps, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect); $corps = $f($corps, $options, $slug, $destinataires, $Tclient, $Tpdf, $redirect);

View file

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

View file

@ -39,6 +39,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
// F // F
'fichiers_annexes' => 'Fichiers annexes', 'fichiers_annexes' => 'Fichiers annexes',
'fichiers_televerser' => 'Fichiers téléversés',
// I // I
'icone_creer_gamumail' => 'Créer un gamumail', 'icone_creer_gamumail' => 'Créer un gamumail',

View file

@ -15,7 +15,7 @@
<licence>GNU/GPL</licence> <licence>GNU/GPL</licence>
<necessite nom="bigform" compatibilite="[1.0.0;[" /> <necessite nom="bigform" compatibilite="[1.3.3;[" />
<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;[" />