Browse Source

Mise au point de la branche de gestion des CSS dans N-Core:

- ajout du formulaire d'édition d'une noisette dans N-Core en le généralisant.
- création d'un pipeline type_noisette_styler pour collecter les saisies CSS et encapsulé les traitements dans un noiuveau service de N-Core appelé ncore_type_noisette_styler().
- ajout d'un champ css_saisies dans les types et les noisettes
pull/4/head
Eric Lupinacci 1 year ago
parent
commit
103b1133d6
  1. 0
      formulaires/editer_noisette.html
  2. 235
      formulaires/editer_noisette.php
  3. 41
      ncore_autorisations.php

0
formulaires/editer_noisette.html

235
formulaires/editer_noisette.php

@ -0,0 +1,235 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
if (!function_exists('autoriser')) {
include_spip('inc/autoriser');
} // si on utilise le formulaire dans le public
function formulaires_editer_noisette_saisies_dist($plugin, $id_noisette, $redirect = '') {
// On sauvegarde les saisies de la noisette en statique
static $saisies = array();
// Dans cette fonction on définit les saisies mais on ne charge jamais les valeurs par défaut qui
// seront positionnées par le mécanisme de Saisies à partir des valeurs chargées (fonction _charger du formulaire).
if (!$saisies) {
// En premier lieu on insère 3 hidden pour stocker le type de noisette, l'indicateur de noisette conteneur
// et la valeur du paramètre d'encapsulation.
$saisies[] = array(
'saisie' => 'hidden',
'options' => array(
'nom' => 'type_noisette',
)
);
$saisies[] = array(
'saisie' => 'hidden',
'options' => array(
'nom' => 'est_conteneur',
)
);
$saisies[] = array(
'saisie' => 'hidden',
'options' => array(
'nom' => 'encapsulation',
)
);
// Ensuite on insère un fieldset contenant les paramètres de la noisette
// -- Récupérer la description de la noisette
include_spip('inc/ncore_noisette');
$noisette = noisette_lire($plugin, intval($id_noisette));
// -- Récupérer la description des saisies
include_spip('inc/ncore_type_noisette');
$type_noisette = type_noisette_lire($plugin, $noisette['type_noisette']);
$champs = $type_noisette['parametres'];
// -- Si pas de paramètre pour la noisette on le précise à l'utilisateur.
if (!$champs) {
$champs = array(
array(
'saisie' => 'explication',
'options' => array(
'nom' => 'notice_sans_parametre',
'texte' => '<:ncore:saisie_0_parametre_explication:>'
)
)
);
}
// -- Ajout des saisies dans un fieldset "Paramètres"
$saisies[] = array(
'saisie' => 'fieldset',
'options' => array(
'nom' => 'fieldset_parametrage',
'label' => '<:ncore:saisie_parametrage_legende:>'
),
'saisies' => $champs
);
// Ensuite on insère un fieldset contenant le mode d'encapsulation (sauf pour les conteneurs qui n'ont
// pas de capsule).
if ($noisette['est_conteneur'] !== 'oui') {
// -- Construction de la liste des valeurs possibles pour le choix de l'encapsulation
include_spip('ncore/ncore');
$config_encapsulation = ncore_noisette_initialiser_encapsulation($plugin)
? _T('ncore:saisie_encapsulation_oui_info')
: _T('ncore:saisie_encapsulation_non_info');
$options_encapsulation = array(
'defaut' => _T('ncore:saisie_encapsulation_defaut_option', array('defaut' => lcfirst($config_encapsulation))),
'oui' => _T('ncore:saisie_encapsulation_oui_option'),
'non' => _T('ncore:saisie_encapsulation_non_option')
);
// -- Construction de la saisie de la méthode d'encapsulation
$saisies[] = array(
'saisie' => 'fieldset',
'options' => array(
'nom' => 'fieldset_encapsulation',
'label' => '<:ncore:saisie_encapsulation_legende:>'
),
'saisies' => array(
array(
'saisie' => 'radio',
'options' => array(
'nom' => 'encapsulation',
'label' => '<:ncore:saisie_encapsulation_label:>',
'datas' => $options_encapsulation,
)
)
)
);
}
// -- Construction de la saisie des css appliqués à la capsule
$saisies[] = array(
'saisie' => 'fieldset',
'options' => array(
'nom' => 'fieldset_css',
'label' => '<:ncore:saisie_css_legende:>',
'afficher_si' => '(@est_conteneur@ == "oui") || (@encapsulation@ == "oui") || ((@encapsulation@ == "defaut") && (@config:noizetier/encapsulation_noisette@ == "on"))'
),
'saisies' => $type_noisette['css_saisies']
);
}
return $saisies;
}
function formulaires_editer_noisette_charger_dist($plugin, $id_noisette, $redirect = '') {
$valeurs = array('editable' => false);
if (autoriser( 'editer', 'noisette', $id_noisette)) {
// Récupération des informations sur la noisette en cours d'édition et sur le type de noisette
include_spip('inc/ncore_noisette');
$noisette = noisette_lire($plugin, intval($id_noisette));
if ($noisette) {
// Id de la noisette
$valeurs['id_noisette'] = intval($id_noisette);
// Type de la noisette
$valeurs['type_noisette'] = $noisette['type_noisette'];
$valeurs['est_conteneur'] = $noisette['est_conteneur'];
// Insérer dans le contexte les valeurs des paramètres spécifiques stockées en BD.
// On doit passer par saisies_charger_champs() au cas ou la définition de la noisette a changé
// et qu'il y a de nouveaux champs à prendre en compte
include_spip('inc/saisies');
include_spip('inc/ncore_type_noisette');
$type_noisette = type_noisette_lire($plugin, $noisette['type_noisette']);
$valeurs = array_merge(
$valeurs,
saisies_charger_champs($type_noisette['parametres']),
$noisette['parametres']
);
// Insérer dans le contexte le paramètre d'encapsulation stocké en BD
// (ce paramètre n'est utilisé que si la noisette n'est pas un conteneur).
$valeurs['encapsulation'] = $noisette['encapsulation'];
// Insérer les css applicables soit à la capsule, soit au conteneur en affectant correctement la valeur
// compilée du champ css de la noisette à chacune des saisies css.
$valeurs['css_saisies'] = $noisette['css_saisies'];
$valeurs['editable'] = true;
}
}
return $valeurs;
}
function formulaires_editer_noisette_traiter_dist($plugin, $id_noisette, $redirect = '') {
$retour = array();
// On constitue le tableau des valeurs des paramètres spécifiques de la noisette
include_spip('inc/ncore_type_noisette');
$champs = type_noisette_lire(
$plugin,
_request('type_noisette'),
'parametres'
);
$parametres = array();
if ($champs) {
include_spip('inc/saisies_lister');
foreach (saisies_lister_champs($champs, false) as $_champ) {
$parametres[$_champ] = _request($_champ);
}
}
$valeurs = array('parametres' => serialize($parametres));
// Récupération des classes CSS saisies sous forme tabulaire
// (nécessaire à ce stade car remis à zéro si pas d'encapsulation)
if (!$css_saisies = _request('css_saisies')) {
$css_saisies = array();
}
// Encapsulation de la noisette: uniquement pour les noisettes non conteneur
if (_request('est_conteneur') !== 'oui') {
include_spip('inc/ncore_noisette');
$encapsulation = _request('encapsulation');
if (($encapsulation == 'non') or (($encapsulation == 'defaut') and !ncore_noisette_initialiser_encapsulation($plugin))) {
// on remet à zéro les css si la capsule englobante n'est pas active
$css_saisies = array();
}
$valeurs['encapsulation'] = $encapsulation;
}
// Traitement des CSS de la capsule ou du conteneur
// -- préparation pour enregistrement en base
$valeurs['css_saisies'] = serialize($css_saisies);
// -- calcul de la chaine compilée des classes CSS
$valeurs['css'] = '';
foreach ($css_saisies as $_css) {
$valeurs['css'] .= (is_array($_css) ? implode(' ', $_css) : $_css) . ' ';
}
$valeurs['css'] = rtrim($valeurs['css'], ' ');
// Fermeture de la modale
$autoclose = "<script type='text/javascript'>if (window.jQuery) jQuery.modalboxclose();</script>";
// Mise à jour de la noisette en base de données
include_spip('inc/ncore_noisette');
if (noisette_parametrer($plugin, intval($id_noisette), $valeurs)) {
// On invalide le cache
include_spip('inc/invalideur');
suivre_invalideur("id='noisette/$id_noisette'");
$retour['message_ok'] = _T('info_modification_enregistree') . $autoclose;
if ($redirect) {
if (strncmp($redirect, 'javascript:', 11) == 0) {
$retour['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/'.substr($redirect, 11).'/*]]>*/</script>';
$retour['editable'] = true;
} else {
$retour['redirect'] = $redirect;
}
}
} else {
$retour['message_erreur'] = _T('noizetier:erreur_mise_a_jour');
}
return $retour;
}

41
ncore_autorisations.php

@ -0,0 +1,41 @@
<?php
// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Fonction appelée par le pipeline
*
*/
function ncore_autoriser() {}
/**
* Autorisation d'édition d'une noisette déjà ajoutée dans un conteneur.
* Il faut :
* - que la noisette existe bien.
*
* @param $faire
* @param $type
* @param $id
* @param $qui
* @param $options
*
* @return bool
*/
function autoriser_noisette_editer_dist($faire, $type, $id, $qui, $options) {
$autoriser = false;
if ($id_noisette = intval($id)) {
// On lit le conteneur de la noisette
include_spip('inc/ncore_noisette');
$id_conteneur = noisette_lire('noizetier', $id_noisette, 'id_conteneur');
if ($id_conteneur) {
$autoriser = true;
}
}
return $autoriser;
}
Loading…
Cancel
Save