Changeset 69369 in spip-zone


Ignore:
Timestamp:
Jan 25, 2013, 10:41:50 AM (7 years ago)
Author:
marcimat@…
Message:

Gérer les crayons sur des parties de configuration, avec #EDIT{meta-demo/truc} ou #EDIT_CONFIG{demo/truc}.

Attention, cette nouvelle balise (#EDIT_CONFIG) n'étant pas présente dans SPIP, si le plugin crayon est désactivé, le contenu de la balise s'affiche dans les squelettes ({demo/truc}).

Par ailleurs, enregistrer des sous configurations nécessite soit SPIP 3, soit SPIP 2.x + Bonux 2 ou CFG

On change de stratégie pour l'autorisation de lire ou d'écrire des metas : on dit que celles de SPIP qu'on pouvait éditer ne changent pas (pouvoir configurer le site), mais les autres, plutôt que de les interdire nécessitent d'être webmestre pour être modifiées.

Ces 2 écritures sont donc valables :

<div class="#EDIT_CONFIG{demo/truc}">#CONFIG{demo/truc,---}</div>
<div class="#EDIT{meta-demo/truc}">#CONFIG{demo/truc,---}</div>

On ajoute quelques PHPDocs au passage.

Location:
_plugins_/crayons
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/crayons/action/crayons_html.php

    r67517 r69369  
    33if (!defined("_ECRIRE_INC_VERSION")) return;
    44
     5/**
     6 * Affiche le controleur (formulaire) d'un crayon
     7 * suivant la classe CSS décrivant le champ à éditer (produit par #EDIT)
     8 *
     9 * @param string $class
     10 *   Class CSS décrivant le champ
     11 * @param null $c
     12 *
     13 * @return array
     14 *   Tableau avec 2 entrées possibles :
     15 *   - '$erreur' : texte d'erreur éventuel
     16 *   - '$html' : code HTML du controleur
     17**/
    518function affiche_controleur($class, $c=null) {
    619        $return = array('$erreur'=>'');
     
    2942                $return['$erreur'] = _U('crayons:donnees_mal_formatees');
    3043        }
     44
    3145        return $return;
    3246}
  • _plugins_/crayons/action/crayons_store.php

    r64372 r69369  
    1313function post_crayons() {
    1414    $results = array();
     15
    1516    if (isset($_POST['crayons']) AND is_array($_POST['crayons']))
    1617    foreach ($_POST['crayons'] as $crayon) {
     
    165166
    166167// recuperer une valeur en fonction des parametres recuperes
    167 // cette fonction cherche une valeur d'un colonne d'une table SQL
     168// cette fonction cherche une valeur d'une colonne d'une table SQL
    168169function crayons_store_get_valeur($content, $regs) {
    169170        list(,$crayon,$type,$modele,$id) = $regs;
     
    394395}
    395396
     397/**
     398 * Enregistre les modifications sur une configuration
     399 * suite à un crayon sur une meta
     400 *
     401 * La colonne est toujours 'valeur' pour ces données.
     402 * La donnée à enregistrer peut-être une sous partie de configuration.
     403 * Si c'est le cas, on gère l'enregistrement via ecrire_config.
     404 *
     405 * @param string $a
     406 *   Nom ou clé de la meta (descriptif_site ou demo__truc pour demo/truc)
     407 * @param bool|array $c
     408 *   Liste des champs modifiés
     409 *   Ici, 'valeur' normalement.
     410 * @return void
     411**/
    396412function revision_meta($a, $c = false) {
    397413        if (isset($c['valeur'])) {
     414                // Certaines cles de configuration sont echapées ici (cf #EDIT_CONFIG{demo/truc})
     415                $a = str_replace('__', '/', $a);
    398416                spip_log("meta '$a' = '$c[valeur]'", 'crayons');
    399                 ecrire_meta($a, $c['valeur']);
     417                // eviter de planter les vieux SPIP
     418                if (false === strpos($a, '/')) {
     419                        ecrire_meta($a, $c['valeur']);
     420                // SPIP 3 ou Bonux 2 ou CFG
     421                } else {
     422                        include_spip('inc/config');
     423                        ecrire_config($a, $c['valeur']);
     424                }
    400425                include_spip('inc/invalideur');
    401426                suivre_invalideur('meta');
  • _plugins_/crayons/crayons_fonctions.php

    r64372 r69369  
    55/* inserer le css et le js externes pour Crayons dans le <head>
    66 *
    7  *  Crayons plugin for spip (c) Fil, toggg 2006-2010 -- licence GPL
     7 *  Crayons plugin for spip (c) Fil, toggg 2006-2013 -- licence GPL
    88 */
    99
     
    183183}
    184184
    185 // #EDIT{ps} pour appeler le crayon ps ;
    186 // si cette fonction est absente, balise_EDIT_dist() met a vide
     185
     186/**
     187 * Balise indiquant un champ SQL crayonnable
     188 *
     189 * @note
     190 *   Si cette fonction est absente, balise_EDIT_dist() déclarée par SPIP
     191 *   ne retourne rien
     192 *
     193 * @example
     194 *   <div class="#EDIT{texte}">#TEXTE</div>
     195 *   <div class="#EDIT{ps}">#PS</div>
     196 *
     197 * @param Champ $p
     198 *   Pile au niveau de la balise
     199 * @return Champ
     200 *   Pile complétée par le code à générer
     201**/
    187202function balise_EDIT($p) {
    188203
     
    191206
    192207        // Verification si l'on est dans le cas d'une meta
    193         // #EDIT{meta-descriptif_site} #EDIT{slogan_site} #EDIT{nom_site} et #EDIT{email_webmaster}
    194         if(preg_match('/meta-(.*)\'/',$label,$meta)){
    195                 if(in_array($meta[1],array('descriptif_site','slogan_site','nom_site','email_webmaster'))){
    196                         $type = 'meta';
    197                         $label= 'valeur';
    198                         $primary = $meta[1];
    199                         $p->code = "classe_boucle_crayon('"
    200                                 . $type
    201                                 ."',"
    202                                 .sinon($label,"''")
    203                                 .","
    204                                 . $primary
    205                                 .").' '";
    206                         $p->interdire_scripts = false;
    207                         return $p;
    208                 }
     208        // #EDIT{meta-descriptif_site} ou #EDIT{meta-demo/truc}
     209        if (preg_match('/meta-(.*)\'/',$label,$meta)) {
     210                $type = 'meta';
     211                $label= 'valeur';
     212                $primary = $meta[1];
     213                $p->code = "classe_boucle_crayon('"
     214                        . $type
     215                        ."',"
     216                        .sinon($label,"''")
     217                        .","
     218                        . "str_replace('/', '__', '$primary')" # chaque / doit être remplacé pour CSS.
     219                        .").' '";
     220                $p->interdire_scripts = false;
     221                return $p;
    209222        }
    210223
     
    248261}
    249262
     263
     264/**
     265 * Balise indiquant une configuration crayonnable
     266 *
     267 * @example
     268 *   <div class="#EDIT_CONFIG{descriptif_site}">#DESCRIPTIF_SITE_SPIP</div>
     269 *   <div class="#EDIT_CONFIG{demo/truc}">#CONFIG{demo/truc}</div>
     270 *
     271 * @param Champ $p
     272 *   Pile au niveau de la balise
     273 * @return Champ
     274 *   Pile complétée par le code à générer
     275**/
     276function balise_EDIT_CONFIG_dist($p) {
     277
     278        // le code compile de ce qui se trouve entre les {} de la balise
     279        $config = interprete_argument_balise(1,$p);
     280        if (!$config) return $p;
     281
     282        // chaque / du nom de config doit être transformé pour css.
     283        // nous utiliserons '__' à la place.
     284
     285        $type = 'meta';
     286        $label= 'valeur';
     287
     288        $p->code = "classe_boucle_crayon('"
     289                . $type
     290                . "','"
     291                . $label
     292                . "',"
     293                . "str_replace('/', '__', $config)"
     294                . ").' '";
     295        $p->interdire_scripts = false;
     296        return $p;
     297}
     298
     299/**
     300 * Crée le controleur du crayon indiqué par la classe CSS
     301 *
     302 * @param string $class
     303 *   Class CSS de crayon tel que créé par #EDIT
     304 * @return string
     305 *   HTML du crayon, sinon texte d'erreur
     306**/
    250307function creer_le_crayon($class) {
    251308        include_spip('inc/crayons');
     
    255312}
    256313
    257 // #CRAYON{ps} pour creer le crayon ps SI ?edit=1;
     314/**
     315 * Balise #CRAYON affichant un formulaire de crayon
     316 * SI ?edit=1;
     317 *
     318 * @example
     319 *   #CRAYON{ps}
     320 *
     321 * @param Champ $p
     322 *   Pile au niveau de la balise
     323 * @return Champ
     324 *   Pile complétée par le code à générer
     325**/
    258326function balise_CRAYON($p) {
    259327        $p = balise_EDIT($p);
     
    263331
    264332
    265 // Donne la classe crayon en fonction
    266 // - du type de la boucle
    267 // (attention aux exceptions pour #EDIT dans les boucles HIERARCHIE et SITES)
    268 // - du champ demande (vide, + ou se terminant par + : (+)classe type--id)
    269 // - de l'id courant
     333/**
     334 * Donne la classe CSS crayon en fonction
     335 * - du type de la boucle
     336 *   (attention aux exceptions pour #EDIT dans les boucles HIERARCHIE et SITES)
     337 * - du champ demande (vide, + ou se terminant par + : (+)classe type--id)
     338 * - de l'id courant
     339 *
     340 * @param string $type
     341 *   Type d'objet, ou "meta" pour un champ de configuration
     342 * @param string $champ
     343 *   Champ SQL concerné
     344 * @param int|string $id
     345 *   Identifiant de la ligne sql
     346 * @return string
     347 *   Classes CSS (à ajouter dans le HTML à destination du javascript de Crayons)
     348**/
    270349function classe_boucle_crayon($type, $champ, $id) {
     350        // $type = objet_type($type);
    271351        $type = $type[strlen($type) - 1] == 's' ?
    272352                substr($type, 0, -1) :
  • _plugins_/crayons/inc/crayons.php

    r55041 r69369  
    2020include_spip('inc/crayons-json');
    2121
    22 // table spip_meta, non ; sauf quelques-uns qu'on teste autoriser(configurer)
    23 // Attention sur les SPIP < 11515 inc/autoriser passe seulement
    24 // intval($id) alors qu'ici la cle est une chaine...
     22
    2523if (!function_exists('autoriser_meta_modifier_dist')) {
    26         function autoriser_meta_modifier_dist($faire, $type, $id, $qui, $opt) {
    27                 if (in_array("$id", array(
    28                         'nom_site', 'slogan_site', 'descriptif_site', 'email_webmaster'
    29                 )))
    30                         return autoriser('configurer', null, null, $qui);
    31                 else
    32                         return false;
    33         }
     24/**
     25 * Autorisation d'éditer les configurations dans spip_meta
     26 *
     27 * Les admins complets OK pour certains champs,
     28 * Sinon, il faut être webmestre
     29 *
     30 * @note
     31 *  Attention sur les SPIP < 11515 (avant 04/2008) inc/autoriser
     32 *  passe seulement intval($id) alors qu'ici la cle est une chaine...
     33 *
     34 * @param  string $faire Action demandée
     35 * @param  string $type  Type d'objet sur lequel appliquer l'action
     36 * @param  int    $id    Identifiant de l'objet
     37 * @param  array  $qui   Description de l'auteur demandant l'autorisation
     38 * @param  array  $opt   Options de cette autorisation
     39 * @return bool          true s'il a le droit, false sinon
     40**/
     41function autoriser_meta_modifier_dist($faire, $type, $id, $qui, $opt) {
     42        // Certaines cles de configuration sont echapées ici (cf #EDIT_CONFIG{demo/truc})
     43        // $id = str_replace('__', '/', $id);
     44        if (in_array("$id", array(
     45                'nom_site', 'slogan_site', 'descriptif_site', 'email_webmaster'
     46        )))
     47                return autoriser('configurer', null, null, $qui);
     48        else
     49                return autoriser('webmestre', null, null, $qui);
     50}
    3451}
    3552
     
    444461}
    445462
     463/**
     464 * Extrait la valeur d'une ou plusieurs colonnes d'une table
     465 *
     466 * @param string $table
     467 *   Type d'objet de la table (article)
     468 * @param string|array $col
     469 *   Nom de la ou des colonnes (ps)
     470 * @param string $id
     471 *   Identifiant de l'objet
     472 * @return array
     473 *   Couples Nom de la colonne => Contenu de la colonne
     474**/
    446475function valeur_colonne_table($table, $col, $id) {
    447476        if (!is_array($col))
     
    453482                return $f($table, $col, $id);
    454483}
     484
     485/**
     486 * Extrait la valeur d'une configuration en meta
     487 *
     488 * Pour ces données, il n'y a toujours qu'une colonne (valeur),
     489 * mais on gère l'enregistrement et la lecture via lire_config ou ecrire_config
     490 * dès que l'on demande des sous parties d'une configuration.
     491 *
     492 * On ne retourne alors ici dans 'valeur' que la sous-partie demandée si
     493 * c'est le cas.
     494 *
     495 * @param string $table
     496 *   Nom de la table (meta)
     497 * @param array $col
     498 *   Nom des colonnes (valeur)
     499 * @param string $id
     500 *   Nom ou clé de configuration (descriptif_site ou demo__truc pour demo/truc)
     501 * @return array
     502 *   Couple valeur => Contenu de la configuration
     503**/
     504function meta_valeur_colonne_table_dist($table, $col, $id) {
     505        // Certaines clés de configuration sont echapées ici (cf #EDIT_CONFIG{demo/truc})
     506        $id = str_replace('__', '/', $id);
     507
     508        // Éviter de planter les vieux SPIP
     509        if (false === strpos($id, '/')) {
     510                $config = isset($GLOBALS['meta'][$id]) ? $GLOBALS['meta'][$id] : '';
     511        // SPIP 3 ou Bonux 2 ou CFG
     512        } else {
     513                include_spip('inc/config');
     514                $config =  lire_config($id, '');
     515        }
     516        return array('valeur' => $config);
     517}
     518
    455519
    456520function return_log($var) {
  • _plugins_/crayons/js/crayons.js

    r67517 r69369  
    11(function($){
    22/*
    3  *      crayons.js (c) Fil, toggg, 2006-2012-- licence GPL
     3 *      crayons.js (c) Fil, toggg, 2006-2013 -- licence GPL
    44 */
    55
  • _plugins_/crayons/paquet.xml

    r67517 r69369  
    22        prefix="crayons"
    33        categorie="edition"
    4         version="1.13.9"
     4        version="1.14.0"
    55        etat="stable"
    66        compatibilite="[1.9.0;*]"
  • _plugins_/crayons/plugin.xml

    r67517 r69369  
    1414        </auteur>
    1515        <licence>
    16                 &#169; 2006-2012 - GNU/GPL
     16                &#169; 2006-2013 - GNU/GPL
    1717        </licence>
    1818        <version>
    19         1.13.9
     19        1.14.0
    2020        </version>
    2121        <etat>
Note: See TracChangeset for help on using the changeset viewer.