Browse Source

Finalisation du crayonnage des fieldset.

- Un fichier de vue spécifique doit être utilisé pour retrouver le fieldset qui a modifié les champs que l'on reçoit.
  Retrouver le fieldset est un peu casse pied, mais ça se fait.
- La classe de crayon pour le fieldset est mise sur le conteneur, pas sur son titre, sinon au retour Crayons ne remplace que le titre par le résultat de la vue, et non le titre et ses champs.
svn/root/tags/v3.12.4
marcimat@rezo.net 6 years ago
parent
commit
4c6c5eeaeb
  1. 1
      .gitattributes
  2. 2
      controleurs/champs_extras_fieldset.php
  3. 13
      inc/cextras.php
  4. 6
      paquet.xml
  5. 30
      vues/champs_extras.php
  6. 106
      vues/champs_extras_fieldset.php

1
.gitattributes vendored

@ -32,3 +32,4 @@ lang/paquet-cextras_ru.php -text
lang/paquet-cextras_sk.php -text
/paquet.xml -text
vues/champs_extras.php -text
vues/champs_extras_fieldset.php -text

2
controleurs/champs_extras_fieldset.php

@ -42,7 +42,7 @@ function controleurs_champs_extras_fieldset_dist($regs, $c = null) {
}
$n = new Crayon(
$type . '-champs_extras-' . $id,
$type . '-champs_extras_fieldset-' . $id,
$valeurs,
array('controleur' => 'controleurs/champs_extras')
);

13
inc/cextras.php

@ -94,6 +94,7 @@ function saisies_lister_avec_traitements($saisies, $tri = 'nom') {
* Déclarer la classe spécifique à crayons, permettant l'édition d'un champ
*
* On complète (ou crée) l'option 'vue_class' avec la classe pour crayonner.
* On utilise 'conteneur_class' pour les fieldset.
*
* @param array $saisies
* @param string $type
@ -103,11 +104,15 @@ function champs_extras_saisies_inserer_classe_crayons($saisies, $type, $id) {
include_spip('crayons_fonctions');
if (function_exists('classe_boucle_crayon')) {
foreach ($saisies as $cle => $saisie) {
if (!isset($saisie['options']['vue_class'])) {
$saisie['options']['vue_class'] = '';
$opt_class = 'vue_class';
if ($saisie['saisie'] == 'fieldset') {
$opt_class = 'conteneur_class';
}
$saisie['options']['vue_class'] = trim(
$saisie['options']['vue_class']
if (!isset($saisie['options'][$opt_class])) {
$saisie['options'][$opt_class] = '';
}
$saisie['options'][$opt_class] = trim(
$saisie['options'][$opt_class]
. ' '
. classe_boucle_crayon($type, $saisie['options']['nom'], $id)
);

6
paquet.xml

@ -1,7 +1,7 @@
<paquet
prefix="cextras"
categorie="outil"
version="3.11.1"
version="3.11.2"
etat="stable"
compatibilite="[3.0.0;3.1.*]"
logo="images/cextras-64.png"
@ -26,8 +26,8 @@
<pipeline nom="formulaire_fond" inclure="cextras_pipelines.php" />
<pipeline nom="revisions_chercher_label" inclure="cextras_pipelines.php" />
<necessite nom="saisies" compatibilite="[2.11.0;]" />
<necessite nom="saisies" compatibilite="[2.11.2;]" />
<utilise nom="verifier" compatibilite="[0.1.12;]" />
<utilise nom="crayons" compatibilite="[1.26.0;]" />
<utilise nom="crayons" compatibilite="[1.26.1;]" />
</paquet>

30
vues/champs_extras.php

@ -1,6 +1,13 @@
<?php
/**
* Retourner le code HTML de la vue d'un champ (ou plusieurs) champs extras pour Crayons
*
* @uses champs_extras_objet()
* @uses champs_extras_saisies_lister_avec_sql()
* @uses cextras_appliquer_traitements_saisies()
* @uses cextras_preparer_vue()
*
* @param string $type
* Type d'objet
* @param string $modele
@ -25,10 +32,7 @@ function vues_champs_extras_dist($type, $modele, $id, $content, $wid) {
$valeurs = cextras_appliquer_traitements_saisies($saisies, $content);
// Réduire l'affichage au minimum s'il n'y a qu'un champ à afficher
foreach ($saisies as $champ => $saisie) {
$saisies[$champ]['options']['valeur_uniquement'] = (count($valeurs) <= 1 ? 'oui' : '');
$saisies[$champ]['options']['sans_reponse'] = '';
}
$saisies = cextras_preparer_vue($saisies, count($valeurs) <= 1);
$contexte = array(
'saisies' => $saisies,
@ -37,3 +41,21 @@ function vues_champs_extras_dist($type, $modele, $id, $content, $wid) {
return recuperer_fond('inclure/voir_saisies', $contexte);
}
/**
* Préparer le tableau de saisie pour l'affichage
*
* @param array $saisies
* @param bool $affichage_reduit
* @return array
*/
function cextras_preparer_vue($saisies, $affichage_reduit = false){
foreach ($saisies as $cle => $saisie) {
$saisies[$cle]['options']['valeur_uniquement'] = ($affichage_reduit ? 'oui' : '');
$saisies[$cle]['options']['sans_reponse'] = '';
if (!empty($saisie['saisies'])) {
$saisies[$cle]['saisies'] = cextras_preparer_vue($saisie['saisies'], $affichage_reduit);
}
}
return $saisies;
}

106
vues/champs_extras_fieldset.php

@ -0,0 +1,106 @@
<?php
/**
* Retourner le code HTML de la vue d'un fieldset de champs extras pour Crayons
*
* @note
* On perd l'information du nom de notre fieldset. On ne reçoit que le nom
* des champs qui ont été postés et qui correspondent à des champs dans la
* base de données.
*
* @uses champs_extras_objet()
* @uses champs_extras_saisies_lister_avec_sql()
* @uses cextras_appliquer_traitements_saisies()
* @uses cextras_preparer_vue()
*
* @param string $type
* Type d'objet
* @param string $modele
* Nom du modèle donné par le contrôleur
* @param int $id
* Identifiant de l'objet
* @param array $content
* Couples champs / valeurs postés.
* @param $wid
* Identifiant du formulaire
*/
function vues_champs_extras_fieldset_dist($type, $modele, $id, $content, $wid) {
include_spip('cextras_pipelines');
include_spip('vues/champs_extras');
$table = table_objet_sql($type);
// Récupérer les saisies SQL de la table
$saisies = champs_extras_objet($table);
$saisies_sql = champs_extras_saisies_lister_avec_sql($saisies);
// Ne conserver que les champs concernés ici
$saisies_sql = array_intersect_key($saisies_sql, $content);
$valeurs = cextras_appliquer_traitements_saisies($saisies_sql, $content);
// On cherche le fieldset qui englobe tous les champs transmis.
$saisies = cextras_saisies_retrouver_fieldset($saisies, array_keys($content));
// Réduire l'affichage au minimum s'il n'y a qu'un champ à afficher
$saisies = cextras_preparer_vue($saisies, count($valeurs) <= 1);
$contexte = array(
'saisies' => $saisies,
'valeurs' => $valeurs,
);
return recuperer_fond('inclure/voir_saisies', $contexte);
}
/**
* Retrouver la saisie fieldset qui contient les champs indiqués.
*
* @param array $saisies
* @param array $noms
* @return array
*/
function cextras_saisies_retrouver_fieldset($saisies, $noms) {
// on stocke le nom des parents dans chaque saisie enfant
$saisies = cextras_saisies_indiquer_parents($saisies);
$_saisies = saisies_lister_par_nom($saisies);
// tous les parents possibles
$parents = array_keys($_saisies);
// réduire à l'intersection des parents de chaque saisie
$_saisies = array_intersect_key($_saisies, array_flip($noms));
foreach ($_saisies as $s) {
$parents = array_intersect($s['_parents'], $parents);
}
// théoriquement, le plus proche parent est le premier de la liste
$parent = reset($parents);
$saisie = saisies_chercher($saisies, $parent);
return array($saisie);
}
/**
* Enregistrer le nom de la saisie parente pour les enfants des fieldset
* dans chaque enfant, dans la clé `_parent`
*
* @param array $saisies
* @return array
*/
function cextras_saisies_indiquer_parents($saisies) {
foreach ($saisies as $k => $saisie) {
if (!isset($saisie['_parents'])) {
$saisie['_parents'] = array();
}
if (!empty($saisie['saisies'])) {
foreach ($saisie['saisies'] as $c => $s) {
if (!isset($saisie['saisies'][$c]['_parents'])) {
$saisie['saisies'][$c]['_parents'] = array();
}
$saisie['saisies'][$c]['_parents'][] = $saisie['options']['nom'];
if (count($saisie['_parents'])) {
$saisie['saisies'][$c]['_parents'] += $saisie['_parents'];
}
}
$saisie['saisies'] = cextras_saisies_indiquer_parents($saisie['saisies']);
}
$saisies[$k] = $saisie;
}
return $saisies;
}
Loading…
Cancel
Save