Compare commits

..

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

10 changed files with 64 additions and 185 deletions

View file

@ -1,9 +1,7 @@
# Plugin bigform # Plugin bigform
> plugin proposant un formulaire CVT pour le plugin bigup > plugin proposant un formulaire CVT pour le plugin bigup
## Usage 1 : en formulaire autonome (comme html5_upload) ## Usage 1 : en formulaire autonome (comme html5_upload)
> ATTENTION : il n'y a pas de vérification sur le type des fichiers envoyés en PHP. > ATTENTION : il n'y a pas de vérification sur le type des fichiers envoyés en PHP.
> Ne pas hésiter à surcharger la fonction de vérification : formulaires_bigform_verifier() > Ne pas hésiter à surcharger la fonction de vérification : formulaires_bigform_verifier()
> en fonction des besoins ! > en fonction des besoins !
@ -11,57 +9,30 @@
```html ```html
#FORMULAIRE_BIGFORM{objet, id_objet, mode, args (array)} #FORMULAIRE_BIGFORM{objet, id_objet, mode, args (array)}
``` ```
- `mode` (facultatif) : le type d'image si besoin. Valeurs possibles : `auto | logoon | logooff` - `mode` (facultatif) : le type d'image si besoin. Valeurs possibles : `auto | logoon | logooff`
- `args` (facultatif) : un array d'options. - `args` (facultatif) : un array d'options.
- `redirect` qui permet de renvoyer sur la page passée en argument. - `redirect` qui permet de renvoyer sur la page passée en argument.
- `obfusquer` - `obfusquer`
- `proteger` - `proteger`
- `charger_js_titre` oui par defaut => permet de ne pas charger le js d'ajout de l'input titre - `charger_js_titre` oui par defaut => permet de ne pas charger le js d'ajout de l'input titre
- `ajaxReload` le nom d'un bloc ajax à recharger via ajaxReload. dans ce cas, charger_js_titre = non Exemple pour revenir à la page principale "equipe" avec un bigform appelé dans une popin :
- `ajaxCallback` le nom d'une fonction JS qui sera appellée en callback de l'ajaxReload (/!\ le JS de cette fonction doit être dans le bloc rechargé)
- `boutonSubmit` non par défaut (= bouton masqué) => oui permet d'afficher le bouton submit du FORMULAIRE_BIGFORM
- `id_document` l'ID du document pour lequel le fichier chargé va remplacer le fichier existant (/!\ non pris en compte avec les modes `logoon | logooff` puisque dans ce cas le document est supprimé puis recréé)
Exemple pour revenir à la page principale "equipe" avec un bigform appelé dans une popin :
``` ```
#FORMULAIRE_BIGFORM{article, #ID_ARTICLE, logoon, #ARRAY{redirect, #URL_PAGE{equipe}, obfusquer, oui}} #FORMULAIRE_BIGFORM{article, #ID_ARTICLE, logoon, #ARRAY{redirect, #URL_PAGE{equipe}, obfusquer, oui}}
``` ```
## Usage 2 : en inclure dans un formulaire ## Usage 2 : en inclure dans un formulaire
> Ajoute dynamiquement un champ **titre** pour chaque image > Ajoute dynamiquement un champ **titre** pour chaque image
1. dans le formulaire html: 1. dans le formulaire html:
```html ```html
<INCLURE{fond=inclure/bigform,env}> <INCLURE{fond=inclure/bigform,env}>
ou arg: suffix_liste_fichiers=toto qui permet de charger le fichier :inc-bigup_liste_fichiers_toto.html
<INCLURE{fond=inclure/bigform, env, id_document, charger_js_titre=non}>
``` ```
Cet inclure peut accepter les arguments facultatifs : cet inclure peut accepter 3 arguments facultatifs :
* `accept=#LISTE{image/*, application/pdf}` ou `accept="image/*"` par défaut tous les fichiers
- `accept=#LISTE{image/*, application/pdf}` ou `accept="image/*"` par défaut tous les fichiers * `previsualiser=non` (par défaut = oui)
- `previsualiser=non` (par défaut = oui) * `multiple=non` (par défaut = oui)
- `multiple=non` (par défaut = oui)
- `suffix_liste_fichiers=toto` : permet de charger le fichier : `inc-bigup_liste_fichiers_toto.html`
Les autres arguments de **l'usage 1** utiles ici sont :
- `charger_js_titre=non` : pour ne pas charger/afficher le js d'ajout de l'input titre
- `id_document=#ID_DOCUMENT` : pour que le fichier chargé remplace celui du document `#ID_DOCUMENT` (ou autre `#ENV{id_document}`)
/!\ cet argument nécessite que le `..._traiter` du formulaire récupère l'id_document lui aussi :
```php
$bigform = charger_fonction('bigform_traiter','inc');
$bigform($id_article, 'article', 'auto', ['id_document' => intval($id_document)]);
```
(ici `id_article` et `id_document` sont des arguments du CVT)
1. dans le formulaire php
2. dans le formulaire php
```php ```php
// dans le charger : // dans le charger :
$valeurs['_bigup_rechercher_fichiers'] = true; $valeurs['_bigup_rechercher_fichiers'] = true;
@ -115,7 +86,6 @@ $bigform($id_objet, $objet, $mode, $secu);
define('_BIGFORM_OBFUSQUER', true); define('_BIGFORM_OBFUSQUER', true);
``` ```
> **ATTENTION** > **ATTENTION**
> Il faut ajouter les vérifications pour les différents types de fichiers > Il faut ajouter les vérifications pour les différents types de fichiers

View file

@ -1,58 +1,18 @@
[(#ENV{objet_ok}|oui) [(#ENV{objet_ok}|oui)
<div class="formulaire_spip formulaire_#FORM"> <div class="formulaire_spip formulaire_#FORM">
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
[(#ENV*{message_ok}|oui) [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<script> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
var aa = '#ENV*{message_ok}';
if (aa) {
try {
aa = JSON.parse(aa);
} catch (e) {
// utiliser le catch pour la compat descendante = lorsque ENV{message_ok} est une simple string avec le nom du bloc à recharger
ajaxReload(aa);
}
}
//console.log(aa);
if (aa.bloc_ajax !== undefined) {
let bb = '';
if (aa.callback_ajax !== undefined) {
bb = aa.callback_ajax;
}
ajaxReload(
aa.bloc_ajax,
{
callback: eval(bb)
}
);
}
</script>
]
<form class="form_bigform" id="form_bigform[_(#ENV{objet})][_(#ENV{id_objet})]" name="formulaire_#FORM" action="#ENV{action}" method="post" enctype="multipart/form-data"><div> <form class="form_bigform" id="form_bigform[_(#ENV{objet})][_(#ENV{id_objet})]" name="formulaire_#FORM" action="#ENV{action}" method="post" enctype="multipart/form-data"><div>
#ACTION_FORMULAIRE{#ENV{action}} #ACTION_FORMULAIRE{#ENV{action}}
[(#ENV{ajaxReload}|non)
<INCLURE{fond=inclure/bigform_doc,env,ajax}> <INCLURE{fond=inclure/bigform_doc,env,ajax}>
]
<INCLURE{fond=inclure/bigform,env}> <INCLURE{fond=inclure/bigform,env}>
<div class="boutons"><input id="valider_bigup" type="submit" class="submit valider_bigup" value="<:bigform:envoyer:>" ></div> <div class="boutons"><input id="valider_bigup" type="submit" class="submit valider_bigup" value="Envoyer" ></div>
</div></form> </div></form>
</div> </div>
] ]
[(#ENV{boutonSubmit}|non)
<style type="text/css">
.valider_bigup { display: none; }
</style>
]
<script type="text/javascript">
jQuery(function() {
//$('.valider_bigup').css('display','none');
$('input.bigup').bigup({}, {
complete: function(){
$(this).parents('form').submit();
},
});
});
</script>

View file

@ -5,22 +5,12 @@ if (!defined('_ECRIRE_INC_VERSION')){
function formulaires_bigform_charger_dist($objet, $id_objet, $mode = 'auto', $args = []) { function formulaires_bigform_charger_dist($objet, $id_objet, $mode = 'auto', $args = []) {
if (!empty($args['ajaxReload'])) {
$ajaxReload = $args['ajaxReload'];
$charger_js_titre = 'non';
} else {
$charger_js_titre = $args['charger_js_titre'] ?? 'oui'; $charger_js_titre = $args['charger_js_titre'] ?? 'oui';
$ajaxReload = null;
}
$boutonSubmit = !empty($args['boutonSubmit']) ? $args['boutonSubmit'] : null;
$valeurs = [ $valeurs = [
'_bigup_rechercher_fichiers' => true, '_bigup_rechercher_fichiers' => true,
'id_objet' => $id_objet, 'id_objet' => $id_objet,
'objet' => $objet, 'objet' => $objet,
'ajaxReload' => $ajaxReload, 'charger_js_titre' => $charger_js_titre === 'oui' ? 'oui' : 'non'
'charger_js_titre' => $charger_js_titre === 'oui' ? 'oui' : 'non',
'boutonSubmit' => $boutonSubmit,
]; ];
$valeurs['objet_ok'] = ''; $valeurs['objet_ok'] = '';
@ -52,20 +42,17 @@ function formulaires_bigform_verifier_dist($objet, $id_objet, $mode = 'auto', $a
} }
function formulaires_bigform_traiter_dist($objet = 'article', $id_objet = 0, $mode = 'auto', $args = []) { function formulaires_bigform_traiter_dist($objet = 'article', $id_objet = 0, $mode = 'auto', $args = []) {
$options = [];
$options_secu = [];
if (array_key_exists('proteger', $args)) { if (array_key_exists('proteger', $args)) {
$options['proteger'] = true; $options_secu['proteger'] = true;
} }
if (array_key_exists('obfusquer', $args)) { if (array_key_exists('obfusquer', $args)) {
$options['obfusquer'] = true; $options_secu['obfusquer'] = true;
}
// passer l'id_document à remplacer seulement si ce n'est pas un logo (en cas de logo SPIP supprime puis recrée le doc)
if (array_key_exists('id_document', $args) && intval($args['id_document']) && !in_array($mode, ['logoon', 'logooff'])) {
$options['id_document'] = intval($args['id_document']);
} }
$bigform = charger_fonction('bigform_traiter','inc'); $bigform = charger_fonction('bigform_traiter','inc');
$T = $bigform($id_objet,$objet,$mode, $options); $T = $bigform($id_objet,$objet,$mode, $options_secu);
pipeline('bigform_post_insertion', [ pipeline('bigform_post_insertion', [
'args' => [ 'args' => [
@ -77,18 +64,9 @@ function formulaires_bigform_traiter_dist($objet = 'article', $id_objet = 0, $mo
] ]
]); ]);
$retour = []; if (!empty($args) and !empty($args['redirect'])) {
if (!empty($args['redirect'])) { return ['redirect' => $args['redirect']];
$retour['redirect'] = $args['redirect']; } else {
return [];
} }
if (!empty($args['ajaxReload'])) {
//$retour['message_ok'] = $args['ajaxReload'];
$Tretour = ['bloc_ajax' => $args['ajaxReload']];
if (!empty($args['ajaxCallback'])) {
$Tretour['callback_ajax'] = $args['ajaxCallback'];
}
$retour['message_ok'] = json_encode($Tretour);
}
return $retour;
} }

View file

@ -10,31 +10,24 @@ if (!defined('_ECRIRE_INC_VERSION')){
* @param $id_objet * @param $id_objet
* @param $objet * @param $objet
* @param $mode * @param $mode
* @param array $options['secu' => false, 'obfusquer' => false, 'id_document' => ID du document pour lequel on va remplacer le fichier] * @param array $options_secu['secu' => false, 'obfusquer' => false;]
* @return array tableau des id_document $Tid_doc * @return array tableau des id_document $Tid_doc
*/ */
function inc_bigform_traiter_dist($id_objet, $objet = 'article', $mode = 'auto', $options = false) { function inc_bigform_traiter_dist($id_objet, $objet = 'article', $mode = 'auto', $options_secu = false) {
include_spip('inc/joindre_document'); include_spip('inc/joindre_document');
include_spip('inc/autoriser'); include_spip('inc/autoriser');
$proteger = false; $proteger = false;
$obfusquer = false; $obfusquer = false;
$id_document = 'new'; if (is_array($options_secu)) {
if (is_array($options)) { if (array_key_exists('proteger', $options_secu)) {
if (array_key_exists('proteger', $options)) { $proteger = $options_secu['proteger'];
$proteger = $options['proteger'];
} }
if (array_key_exists('obfusquer', $options)) { if (array_key_exists('obfusquer', $options_secu)) {
$obfusquer = $options['obfusquer']; $obfusquer = $options_secu['obfusquer'];
}
if (array_key_exists('id_document', $options)
&& $options['id_document'] == intval($options['id_document'])
&& intval($options['id_document'])
) {
$id_document = $options['id_document'];
} }
} else { } else {
if ($options) { if ($options_secu) {
$proteger = true; $proteger = true;
} }
} }
@ -87,10 +80,8 @@ function inc_bigform_traiter_dist($id_objet, $objet = 'article', $mode = 'auto',
autoriser_exception('associerdocuments', $type, $id_objet); autoriser_exception('associerdocuments', $type, $id_objet);
$autorisation_temp = true; $autorisation_temp = true;
} }
$ajouter_document = charger_fonction('ajouter_documents', 'action'); $ajouter_document = charger_fonction('ajouter_documents', 'action');
$Tid_doc = $ajouter_document($id_document, $files, $objet, $id_objet, $mode); $Tid_doc = $ajouter_document('new', $files, $objet, $id_objet, $mode);
if ($autorisation_temp) { if ($autorisation_temp) {
autoriser_exception('associerdocuments', $type, $id_objet, false); autoriser_exception('associerdocuments', $type, $id_objet, false);
} }
@ -108,6 +99,7 @@ function inc_bigform_traiter_dist($id_objet, $objet = 'article', $mode = 'auto',
include_spip('inc/bigform_obfusquer_doc'); include_spip('inc/bigform_obfusquer_doc');
bigform_obfusquer_doc($Tid_doc); bigform_obfusquer_doc($Tid_doc);
} }
} }
// si tout s'est bien passé, on supprime le/les anciens logos // si tout s'est bien passé, on supprime le/les anciens logos

View file

@ -20,13 +20,10 @@ function inc_bigform_verifier_dist($options = [], &$erreurs = [] ){
$er = []; $er = [];
$verifier = charger_fonction('verifier', 'inc/'); $verifier = charger_fonction('verifier', 'inc/');
if (!empty($_FILES['fichiers'])) {
if (!empty($_FILES)) { $verifier($_FILES['fichiers'], 'fichiers',$options, $er);
foreach ($_FILES as $cle => $file) {
$verifier($file, 'fichiers', $options, $er);
if (count($er)) { if (count($er)) {
$erreurs[$cle] = implode('<br>', $er); $erreurs['fichiers'] = implode('<br>', $er);
}
} }
} }
} }

View file

@ -13,20 +13,17 @@
.bloc_titres{ .bloc_titres{
flex-grow: 1; flex-grow: 1;
} }
.vignette_doc {
max-width: 200px;
}
</style> </style>
<div class="docs_ressource doc_rang" id="les_docs"> <div class="docs_ressource doc_rang" id="les_docs">
<BOUCLE_doc(DOCUMENTS){id_objet}{objet}{mode in image,logoon,vignette}{statut in prop,prepa,publie}{par rang_lien}> <BOUCLE_doc(DOCUMENTS){id_objet}{objet}{mode in image,logoon,vignette}{statut in prop,prepa,publie}{par rang_lien}>
<div id="id-#ID_DOCUMENT" class="doc_article doc_objet[ (#MODE|=={logoon}|oui)logo_objet]"> <div id="id-#ID_DOCUMENT" class="doc_article doc_objet[ (#MODE|=={logoon}|oui)logo_objet]">
<div class="vignette_doc"> <div class="vignette_doc">
[(#EXTENSION|match{jpg|png|gif}|oui) [(#EXTENSION|match{jpg|png|gif}|oui)
<a href="[(#URL_DOCUMENT)]" title="Ouvrir le document" class="mediabox"> <a href="#URL_DOCUMENT" title="Ouvrir le document" class="mediabox">
][(#EXTENSION|match{jpg|png|gif}|non) ][(#EXTENSION|match{jpg|png|gif}|non)
<a href="[(#URL_DOCUMENT)]" title="Ouvrir le document" class="" download="[(#FICHIER|basename)]"> <a href="#URL_DOCUMENT" title="Ouvrir le document" class="" download="[(#FICHIER|basename)]">
] ]
<img class="spip_logo spip_logos" src="[(#LOGO_DOCUMENT{apercu}|extraire_attribut{src})]" alt=""> #LOGO_DOCUMENT{apercu}
</a> </a>
</div> </div>
<div class="infos_doc"> <div class="infos_doc">
@ -54,8 +51,8 @@
<BOUCLE_pdf(DOCUMENTS){id_objet}{objet}{mode=document}{extension=pdf}{statut in prop,prepa,publie}{par rang_lien}> <BOUCLE_pdf(DOCUMENTS){id_objet}{objet}{mode=document}{extension=pdf}{statut in prop,prepa,publie}{par rang_lien}>
<div id="id-#ID_DOCUMENT" class="doc_article doc_objet doc_pdf]"> <div id="id-#ID_DOCUMENT" class="doc_article doc_objet doc_pdf]">
<div class="vignette_doc"> <div class="vignette_doc">
<a href="[(#URL_DOCUMENT)]" title="Ouvrir le document" class="" download="[(#FICHIER|basename)]"> <a href="#URL_DOCUMENT" title="Ouvrir le document" class="" download="[(#FICHIER|basename)]">
[(#LOGO_DOCUMENT{apercu})] #LOGO_DOCUMENT{apercu}
</a> </a>
</div> </div>
<div class="infos_doc"> <div class="infos_doc">
@ -76,3 +73,14 @@
</BOUCLE_pdf> </BOUCLE_pdf>
</div> </div>
<script type="text/javascript">
jQuery(function() {
$('.valider_bigup').css('display','none');
$('input.bigup').bigup({}, {
complete: function(){
console.log("on valide [(#ENV{objet})]_[(#ENV{id_objet})]");
$(this).parents('form').submit();
},
});
});
</script>

View file

@ -23,7 +23,7 @@
] ]
<B_fichiers> <B_fichiers>
<div class='bigup_fichiers fichiers_[(#ENV{nom}|concat{#ENV{multiple}|=={oui}|?{\[\]}}|bigup_nom2classe)]'> <div class='bigup_fichiers fichiers_[(#ENV{nom}|concat{#ENV{multiple}|=={oui}|?{\[\]}}|bigup_nom2classe)]'>
<BOUCLE_fichiers(DATA){source table, #FICHIERS|bigup_lister_fichiers{#ENV{nom},#ENV{multiple}}}> <BOUCLE_fichiers(DATA){source tableau, #FICHIERS|bigup_lister_fichiers{#ENV{nom},#ENV{multiple}}}>
<div class='fichier'> <div class='fichier'>
<div class='description'> <div class='description'>
[(#VALEUR{bigup/vignette/data}|oui) [(#VALEUR{bigup/vignette/data}|oui)
@ -36,19 +36,17 @@
<span class='name'><strong>#NAME</strong></span> <span class='name'><strong>#NAME</strong></span>
<span class='size'>[(#SIZE|taille_en_octets)]</span> <span class='size'>[(#SIZE|taille_en_octets)]</span>
</div> </div>
[(#ENV{mode}|=={liste}|non)
<div class="html_titre"> <div class="html_titre">
<label><:bigform:html_titre:> <input type="text" value="" name="html_titre\[\]"/></label> <label><:bigform:html_titre:><input type="text" value="" name="html_titre\[\]"/></label>
<input type="hidden" value="#NAME" name="html_ordre\[\]"/> <input type="hidden" value="#NAME" name="html_ordre\[\]"/>
</div> </div>
<div class='actions'> <div class='actions'>
<button class='submit' type='submit' <button class='submit' type='submit'
name='bigup_enlever_fichier' value="#VALEUR{bigup/identifiant}" name='bigup_enlever_fichier' value="#VALEUR{bigup/identifiant}"
onclick="jQuery(this).parents('form').find('input,textarea,select').filter('\[required\]').prop('required', false); return true;"> onclick="jQuery(this).parents('form').find('input,textarea,select').filter('[required]').prop('required', false); return true;">
<:bigup:bouton_enlever:> <:bigup:bouton_enlever:>
</button> </button>
</div> </div>
]
</div> </div>
</div> </div>
</BOUCLE_fichiers> </BOUCLE_fichiers>

View file

@ -1,23 +0,0 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// B
'bigform_titre' => 'BigForm',
// C
// E
'envoyer' => 'Submit',
//H
'html_titre' => 'Title',
// T
'titre_page_configurer_bigform' => 'Configure BigForm',
);

View file

@ -11,13 +11,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'bigform_titre' => 'BigForm', 'bigform_titre' => 'BigForm',
// C // C
'cfg_exemple' => 'Exemple',
// E 'cfg_exemple_explication' => 'Explication de cet exemple',
'envoyer' => 'Envoyer', 'cfg_titre_parametrages' => 'Paramétrages',
//H //H
'html_titre' => 'Titre', 'html_titre' => 'Titre',
// T // T
'titre_page_configurer_bigform' => 'Configurer BigForm', 'titre_page_configurer_bigform' => 'BigForm',
); );

View file

@ -1,9 +1,9 @@
<paquet <paquet
prefix="bigform" prefix="bigform"
categorie="edition" categorie="edition"
version="1.4.5" version="1.3.3"
etat="dev" etat="dev"
compatibilite="[4.1.0;4.*]" compatibilite="[4.0.0;4.2.*]"
logo="prive/themes/spip/images/bigform-64.png" logo="prive/themes/spip/images/bigform-64.png"
documentation="" documentation=""
schema="1.0.5" schema="1.0.5"
@ -17,7 +17,6 @@
<licence>GNU/GPL</licence> <licence>GNU/GPL</licence>
<necessite nom="bigup" compatibilite="[1.0.0;[" /> <necessite nom="bigup" compatibilite="[1.0.0;[" />
<necessite nom="verifier" compatibilite="[3.1.0;[" />
<pipeline nom="autoriser" inclure="bigform_autorisations.php" /> <pipeline nom="autoriser" inclure="bigform_autorisations.php" />
<pipeline nom="declarer_tables_principales" inclure="base/bigform.php" /> <pipeline nom="declarer_tables_principales" inclure="base/bigform.php" />