Compare commits

..

30 commits

Author SHA1 Message Date
cy_altern
3398155b9d Chore : up de z 2025-04-09 18:26:17 +02:00
cy_altern
d0548a952c Fix : maj du fichier de surcharge de Bigup + correction chaîne de langue html_titre 2025-04-09 18:25:45 +02:00
110ad97c13 chore: en 2025, on apache compresse donc on écrit de facon lisible 2025-01-18 15:41:08 +01:00
4f6c3f8607 necessite verifier 2025-01-06 17:53:28 +01:00
cy_altern
654bcb5b4a Fix : dans le mode logoon/logooff ne pas prendre en compte l'arg id_document pour ne pas faire planter la gestion du logo par SPIP qui supprime puis recrée un doc lorsqu'il faut chnger l'image d'un logo 2024-09-05 20:03:21 +02:00
cy_altern
c14898d75c Chore : chaînes de langue 2024-09-05 19:21:52 +02:00
cy_altern
4f52fe2c54 Chore : up de z pour l'ajout du paramètre ajaxCallback 2024-09-05 19:09:46 +02:00
cy_altern
e44c854b7a Feat : ajout d'un paramètre ajaxCallback qui permet d'indiquer une fonction JS appellée en callback de l'ajaxReload à la fin du traiter. Le retour[message_ok] du traiter est maintenant un array encodé en JSon 2024-09-05 18:56:47 +02:00
cy_altern
ae7665ef2f Doc pour le paramètre id_document + up de z 2024-08-09 00:54:13 +02:00
cy_altern
b2232a9323 Feat : ajout d'un argument id_document dans les options possibles de l'appel du formulaire bigform qui permet de faire la mise à jour du fichier de ce document à la place d'en créer un nouveau 2024-08-08 17:30:18 +02:00
cy_altern
40d61b2988 Feat : ajout d'un argument boutonSubmit dans les options de chargement du formulaire bigform pour afficher le bouton submit (par défaut reste invisible) 2024-08-07 00:12:30 +02:00
36cea7e4c6 chore: compat spip 4.*.* 2024-07-15 16:55:29 +02:00
1fd62d251a chore: up de z 2024-07-12 10:22:38 +02:00
1745f8d854 feat: FORMULAIRE_BIGLOAD - ajout ajaxReload
On ajout une cle dans l'array args pour définir un bloc à recharger via
ajaxReload
2024-07-12 10:22:08 +02:00
f3e8326650 up de z 2024-01-12 16:49:44 +01:00
91fb5cb036 fix: le nom du fichier doit passe dynamique sinon, la verif ne fonctionne pas dans toutes les situations 2024-01-12 16:49:30 +01:00
fc05287781 version pour SPIP >= 41 2023-11-09 15:39:23 +01:00
3838807fdf chore: up de z 2023-11-09 13:26:58 +01:00
aec035250a feat: quand on appelle <INCLURE{fond=inclure/bigform,env}>, on ajoute
un arg: suffix_liste_fichiers, qui permet de surcharger facilement
l'inclure de prévisualisation inc-bigup_liste_fichiers.html
2023-11-09 13:26:35 +01:00
f444d46818 fix: correction sur le chargement de la var charger_js_titre pour que par defaut on ne casse rien 2023-10-16 09:50:06 +02:00
efd1dda37b feat: ajout la possibilite de ne pas charger le js d'ajout du champ titre 2023-06-29 23:47:18 +02:00
1ef8ddec16 feat: formulaire autonome, on peut passer dans l'array d'options soit obfusquer soit proteger 2023-06-29 17:49:43 +02:00
8e67ee4208 feat: ajout pipeline bigform_post_insertion utile pour faire une req sur les id_doc 2023-06-29 16:53:09 +02:00
1addd51db1 up de z 2023-06-29 10:50:30 +02:00
65aae8ebcb secu: cette boucle pouvait permettre (difficilement) de voir les images.
On ajoute 3 tests :
- que la config : generation des adaptives images soit sur OUI
- il faut etre connecté
- il faut etre à l'orginine de l'appel de la requette (c'est pas top, mais
  ca rajoute une complexite, c'est OK tant que le code n'est pas
  publique )
2023-06-29 10:48:02 +02:00
dbca8408c9 fix: correction sur les bornes 2023-06-29 09:13:58 +02:00
5c54cd64d4 PSR 2023-06-29 09:13:48 +02:00
63662f2966 feat: bigform.php ajout de la fonciton de vérification et d'un pipeline pour changer les options 2023-06-28 23:20:16 +02:00
77f391a155 up de y et borne compat 2023-06-28 10:12:34 +02:00
54aa01ddba feat: compat spip 41 qui n'utilise plus la fonction urls_propres mais generer_url_document
C'est un gros plus, car plus besoin d'avoir une réécriture d'url pour que cela fonctionne
Normalement, on garde la compat spip < 41
2023-06-28 10:04:46 +02:00
17 changed files with 261 additions and 82 deletions

View file

@ -1,7 +1,9 @@
# Plugin bigform
> plugin proposant un formulaire CVT pour le plugin bigup
## 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.
> Ne pas hésiter à surcharger la fonction de vérification : formulaires_bigform_verifier()
> en fonction des besoins !
@ -9,25 +11,57 @@
```html
#FORMULAIRE_BIGFORM{objet, id_objet, mode, args (array)}
```
- `mode` (facultatif) : le type d'image si besoin. Valeurs possibles : `auto | logoon | logooff`
- `args` (facultatif) : un array d'options. Pour l'instant la seule supportée est `redirect` qui permet de renvoyer sur la page passée en argument.
- `args` (facultatif) : un array d'options.
- `redirect` qui permet de renvoyer sur la page passée en argument.
- `obfusquer`
- `proteger`
- `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
- `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}}}
#FORMULAIRE_BIGFORM{article, #ID_ARTICLE, logoon, #ARRAY{redirect, #URL_PAGE{equipe}, obfusquer, oui}}
```
## Usage 2 : en inclure dans un formulaire
> Ajoute dynamiquement un champ **titre** pour chaque image
1. dans le formulaire html:
```html
<INCLURE{fond=inclure/bigform,env}>
ou
<INCLURE{fond=inclure/bigform, env, id_document, charger_js_titre=non}>
```
cet inclure peut accepter 3 arguments facultatifs :
* `accept=#LISTE{image/*, application/pdf}` ou `accept="image/*"` par défaut tous les fichiers
* `previsualiser=non` (par défaut = oui)
* `multiple=non` (par défaut = oui)
Cet inclure peut accepter les arguments facultatifs :
- `accept=#LISTE{image/*, application/pdf}` ou `accept="image/*"` par défaut tous les fichiers
- `previsualiser=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
// dans le charger :
$valeurs['_bigup_rechercher_fichiers'] = true;
@ -81,6 +115,7 @@ $bigform($id_objet, $objet, $mode, $secu);
define('_BIGFORM_OBFUSQUER', true);
```
> **ATTENTION**
> Il faut ajouter les vérifications pour les différents types de fichiers

View file

@ -3,17 +3,8 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
function action_charger_document_dist($arg=null){
if (is_null($arg)) {
// DEMI sécurité : s'il y a un hash, on teste la sécurité
if (_request('hash')) {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
// Sinon, on prend l'arg direct
else {
$arg = _request('arg');
}
}
include_spip('inc/autoriser');
if (! autoriser("charger","document")) {

View file

@ -26,9 +26,7 @@ function autoriser_document_charger_dist($faire, $type, $id, $qui, $opt) {
}
function autoriser_document_dissociersupprimer_dist($faire, $type, $id, $qui, $opt) {
if (!intval($id)
or !$qui['id_auteur']
) {
if (!intval($id) or !intval($qui['id_auteur'])) {
return false;
}

View file

@ -13,6 +13,10 @@ if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function urls_generer_url_document($id_document, $args = '', $ancre = '', $public = null, $connect = '') {
$f = charger_fonction('bigform_generer_url_document', 'inc');
return $f($id_document, $args, $ancre, $public, $connect);
}
// https://code.spip.net/@urls_propres2_dist
function urls_propres2($i, &$entite, $args = '', $ancre = '') {

View file

@ -38,6 +38,7 @@ function bigform_post_edition($flux){
"largeur" => $flux['data']['largeur'],
"hauteur" => $flux['data']['hauteur'],
"taille" => $flux['data']['taille'],
"id_auteur" => session_get('id_auteur')
], true, false);
$ch = curl_init($url);

View file

@ -1,18 +1,58 @@
[(#ENV{objet_ok}|oui)
<div class="formulaire_spip formulaire_#FORM">
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[(#ENV*{message_ok}|oui)
<script>
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>
#ACTION_FORMULAIRE{#ENV{action}}
[(#ENV{ajaxReload}|non)
<INCLURE{fond=inclure/bigform_doc,env,ajax}>
]
<INCLURE{fond=inclure/bigform,env}>
<div class="boutons"><input id="valider_bigup" type="submit" class="submit valider_bigup" value="Envoyer" ></div>
<div class="boutons"><input id="valider_bigup" type="submit" class="submit valider_bigup" value="<:bigform:envoyer:>" ></div>
</div></form>
</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

@ -3,14 +3,24 @@ if (!defined('_ECRIRE_INC_VERSION')){
return;
}
include_spip('inc/cvtupload');
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';
$ajaxReload = null;
}
$boutonSubmit = !empty($args['boutonSubmit']) ? $args['boutonSubmit'] : null;
function formulaires_bigform_charger_dist($objet, $id_objet, $mode = 'auto', $args = array()) {
$valeurs = [
'_bigup_rechercher_fichiers' => true,
'id_objet' => $id_objet,
'objet' => $objet
'objet' => $objet,
'ajaxReload' => $ajaxReload,
'charger_js_titre' => $charger_js_titre === 'oui' ? 'oui' : 'non',
'boutonSubmit' => $boutonSubmit,
];
$valeurs['objet_ok'] = '';
@ -22,20 +32,63 @@ function formulaires_bigform_charger_dist($objet, $id_objet, $mode = 'auto', $ar
return $valeurs;
}
function formulaires_bigform_verifier_dist($objet, $id_objet, $mode = 'auto', $args = array()) {
$erreurs = array();
function formulaires_bigform_verifier_dist($objet, $id_objet, $mode = 'auto', $args = []) {
$erreurs = [];
$options = pipeline('bigform_verifier', [
'args' => [
'id_objet' => $id_objet,
'objet' => $objet,
'mode' => $mode,
'args' => $args
],
'data' => []
]);
$bigform = charger_fonction('bigform_verifier','inc');
$bigform($options,$erreurs);
return $erreurs;
}
function formulaires_bigform_traiter_dist($objet = 'article', $id_objet = 0, $mode = 'auto', $args = array()) {
function formulaires_bigform_traiter_dist($objet = 'article', $id_objet = 0, $mode = 'auto', $args = []) {
$options = [];
if (array_key_exists('proteger', $args)) {
$options['proteger'] = true;
}
if (array_key_exists('obfusquer', $args)) {
$options['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');
$T = $bigform($id_objet,$objet,$mode, $options);
//return [];
$T = $bigform($id_objet,$objet,$mode);
if (!empty($args) and !empty($args['redirect'])) {
return ['redirect' => $args['redirect']];
} else {
return [];
pipeline('bigform_post_insertion', [
'args' => [
'id_objet' => $id_objet,
'objet' => $objet,
'mode' => $mode,
'args' => $args,
'tId_doc' => $T
]
]);
$retour = [];
if (!empty($args['redirect'])) {
$retour['redirect'] = $args['redirect'];
}
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

@ -0,0 +1,17 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')){
return;
}
function inc_bigform_generer_url_document_dist($id_document, $args = '', $ancre = '', $public = null, $connect = '') {
if (sql_countsel('spip_documents',['id_document='.$id_document, 'protected="oui"'])) {
//return generer_url_action('charger_document','id_document='.$id_document);
include_spip('inc/securiser_action');
return securiser_action_auteur('charger_document',$id_document);
}
include_spip('inc/documents');
return generer_url_document_dist($id_document, $args, $ancre);
}

View file

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

View file

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

View file

@ -14,7 +14,11 @@
[(#SET{multiple,#ENV{multiple,oui}})]
[(#SET{accept,#ENV{accept}|bigform_tab_accept})]
<INCLURE{fond=inclure/inc-bigup_liste_fichiers,
[(#SET{inclure,inc-bigup_liste_fichiers})]
[(#ENV{suffix_liste_fichiers}|oui)
[(#SET{inclure,#GET{inclure}|concat{_}|concat{#ENV{suffix_liste_fichiers}}})]
]
<INCLURE{fond=inclure/#GET{inclure},
nom=fichiers,
multiple=oui,
fichiers=#ENV{_bigup_fichiers}
@ -26,5 +30,7 @@
{accept=#GET{accept}}
)]
[(#ENV{charger_js_titre}|!={non}|oui)
<INCLURE{fond=js/bigform.js,env}>
]

View file

@ -76,14 +76,3 @@
</BOUCLE_pdf>
</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>
<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}}}>
<BOUCLE_fichiers(DATA){source table, #FICHIERS|bigup_lister_fichiers{#ENV{nom},#ENV{multiple}}}>
<div class='fichier'>
<div class='description'>
[(#VALEUR{bigup/vignette/data}|oui)
@ -36,6 +36,7 @@
<span class='name'><strong>#NAME</strong></span>
<span class='size'>[(#SIZE|taille_en_octets)]</span>
</div>
[(#ENV{mode}|=={liste}|non)
<div class="html_titre">
<label><:bigform:html_titre:> <input type="text" value="" name="html_titre\[\]"/></label>
<input type="hidden" value="#NAME" name="html_ordre\[\]"/>
@ -43,13 +44,13 @@
<div class='actions'>
<button class='submit' 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;">
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>

23
lang/bigform_en.php Normal file
View file

@ -0,0 +1,23 @@
<?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',
// C
'cfg_exemple' => 'Exemple',
'cfg_exemple_explication' => 'Explication de cet exemple',
'cfg_titre_parametrages' => 'Paramétrages',
// E
'envoyer' => 'Envoyer',
//H
'html_titre' => 'Titre',
// T
'titre_page_configurer_bigform' => 'BigForm',
'titre_page_configurer_bigform' => 'Configurer BigForm',
);

View file

@ -1,9 +1,9 @@
<paquet
prefix="bigform"
categorie="edition"
version="1.2.3"
version="1.4.5"
etat="dev"
compatibilite="[3.2.5;4.0.*]"
compatibilite="[4.1.0;4.*]"
logo="prive/themes/spip/images/bigform-64.png"
documentation=""
schema="1.0.5"
@ -17,11 +17,14 @@
<licence>GNU/GPL</licence>
<necessite nom="bigup" compatibilite="[1.0.0;[" />
<necessite nom="verifier" compatibilite="[3.1.0;[" />
<pipeline nom="autoriser" inclure="bigform_autorisations.php" />
<pipeline nom="declarer_tables_principales" inclure="base/bigform.php" />
<pipeline nom="post_edition" inclure="bigform_pipelines.php" />
<pipeline nom="bigform_verifier" action='' />
<pipeline nom="bigform_post_insertion" action='' />
</paquet>

View file

@ -1,4 +1,11 @@
<BOUCLE_documents(DOCUMENTS){id_document}{largeur}{hauteur}{taille}{tout}>
<BOUCLE_documents(DOCUMENTS)
{si #CONFIG{bigform/retailler_image}|=={oui}}
{si #SESSION{id_auteur}}
{si #ENV{id_auteur}|=={#SESSION{id_auteur}}}
{protected=""}
{id_document}
{largeur}{hauteur}{taille}
{tout}>
[(#FICHIER|image_recadre{3072:1800,-,focus}|adaptive_images{3072})]
[(#FICHIER|image_recadre{2048:1200,-,focus}|adaptive_images{2048})]
[(#FICHIER|image_recadre{1024:600,-,focus}|adaptive_images{1024})]