Changeset 94812 in spip-zone


Ignore:
Timestamp:
Jan 29, 2016, 9:25:16 PM (4 years ago)
Author:
tcharlss@…
Message:

Front de simplification de l'interface : on déplace l'identifiant d'un objet dans la boîte infos, sous l'identifiant numérique. S'il n'y a pas d'identifiant, rien n'est affiché. On les édite en mode édition, la saisie est affichée aux niveau des champs extras.
Maintenant, seules les webmestres peuvent les voir et les manipuler.
Mise à jour de la description. Up de Z

Location:
_plugins_/identifiants/trunk
Files:
3 added
2 deleted
7 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/identifiants/trunk/identifiants_autorisations.php

    r93875 r94812  
    2222 * Autorisation à voir les identifiants.
    2323 *
    24  * Uniquement les admins (complets et restreints).
     24 * Uniquement les webmestres.
    2525 *
    2626 * @param  string $faire Action demandée
     
    3232 */
    3333function autoriser_identifiant_voir_dist($faire, $type, $id, $qui, $opts) {
    34         $is_admin  = ($qui['statut']=='0minirezo');
    35         $autoriser = $is_admin;
     34        $is_webmestre = ($qui['statut']=='0minirezo' and !$qui['restreint']);
     35        $autoriser    = $is_webmestre;
    3636        return $autoriser;
    3737}
     
    4141 * Autorisation à modifier les identifiants.
    4242 *
    43  * Uniquement les admins (complets et restreints).
     43 * Uniquement les webmestres.
    4444 *
    4545 * @param  string $faire Action demandée
     
    5151 */
    5252function autoriser_identifiant_modifier_dist($faire, $type, $id, $qui, $opts) {
    53         $is_admin  = ($qui['statut']=='0minirezo');
    54         $autoriser = $is_admin;
     53        $is_webmestre = ($qui['statut']=='0minirezo' and !$qui['restreint']);
     54        $autoriser    = $is_webmestre;
    5555        return $autoriser;
    5656}
  • _plugins_/identifiants/trunk/identifiants_pipelines.php

    r93875 r94812  
    11<?php
    22/**
    3  * Utilisations de pipelines par Identifiants
     3 * Utilisations de pipelines par le plugin Identifiants
    44 *
    55 * @plugin     Identifiants
    6  * @copyright  2015
     6 * @copyright  2016
    77 * @author     C.R
    88 * @licence    GNU/GPL
     
    1212if (!defined('_ECRIRE_INC_VERSION')) return;
    1313
    14 /**
    15  * Ajout de contenu sur certaines pages.
    16  *
    17  * - Prix sur les objets configurés
    18  *
    19  * @pipeline affiche_milieu
     14
     15/**
     16 * Ajouter du contenu sur les formulaires d'édition des objets.
     17 *
     18 * - Identifiants sur les objets configurés
     19 *
     20 * @pipeline editer_contenu_objet
    2021 *
    2122 * @param  array $flux Données du pipeline
    2223 * @return array       Données du pipeline
    2324 */
    24 function identifiants_affiche_milieu($flux) {
    25 
    26         include_spip('inc/config');
    27         $texte  = "";
    28         $e      = trouver_objet_exec($flux['args']['exec']);
     25function identifiants_editer_contenu_objet($flux) {
     26
     27        include_spip('inc/config');
    2928        $objets = lire_config('identifiants/objets', array());
    3029
    3130        // Identifiants sur les objets activés
    3231        if (
    33                 $e !== false // page d'un objet éditorial
    34                 and $e['edition'] === false // pas en mode édition
    35                 and $table_objet_sql = $e['table_objet_sql']
    36                 and in_array($table_objet_sql,$objets)
    37                 and autoriser('voir','identifiant')
    38         ) {
    39                 $texte .= recuperer_fond('prive/objets/editer/identifiant', array(
    40                         'objet'    => $e['type'],
    41                         'id_objet' => $flux['args'][$e['id_table_objet']],
    42                         ),
    43                         array('ajax'=>'identifiant')
    44                 );
    45         }
    46 
    47         if ($texte) {
    48                 if ($p=strpos($flux['data'],"<!--affiche_milieu-->"))
    49                         $flux['data'] = substr_replace($flux['data'],$texte,$p,0);
    50                 else
    51                         $flux['data'] .= $texte;
    52         }
    53 
    54         return $flux;
    55 }
     32                $objet = $flux['args']['type']
     33                and $id_objet = intval($flux['args']['id'])
     34                and $table_objet_sql = table_objet_sql($objet)
     35                and in_array($table_objet_sql,$objets)
     36                and autoriser('voir','identifiant')
     37        ) {
     38
     39                // récupérer le squelette de la saisie
     40                // la valeur de l'identifiant est donnée dans formulaire_charger
     41                $saisie = recuperer_fond(
     42                        'prive/objets/editer/identifiant',
     43                        array(
     44                                'identifiant' => $flux['args']['contexte']['identifiant'],
     45                                'erreurs'     => $flux['args']['contexte']['erreurs'],
     46                        )
     47                );
     48
     49                // ajouter la saisie au niveau des champs extras
     50                $balise = defined('_DIR_PLUGIN_SAISIES') ? saisie_balise_structure_formulaire('ul') : 'div';
     51                $cherche = '%(<!--extra-->)%is';
     52                $remplace = "<$balise class='editer-groupe identifiant'>$saisie</$balise>\n" . '$1';
     53                $flux['data'] = preg_replace($cherche, $remplace, $flux['data']);
     54        }
     55
     56        return $flux;
     57}
     58
     59
     60/**
     61 * Ajouter du contenu dans la boîte infos d'un objet
     62 *
     63 * - Identifiants sur les objets configurés
     64 *
     65 * @pipeline boite_info
     66 * @param array $flux Données du pipeline
     67 * @return array      Données du pipeline
     68**/
     69function identifiants_boite_infos($flux){
     70
     71        include_spip('inc/config');
     72        $objets = lire_config('identifiants/objets', array());
     73
     74        if (
     75                $objet = $flux['args']['type']
     76                and $id_objet = intval($flux['args']['id'])
     77                and $table_objet_sql = table_objet_sql($objet)
     78                and in_array($table_objet_sql,$objets)
     79                and autoriser('voir','identifiant')
     80        ) {
     81
     82                // récupérer la valeur de l'identifiant
     83                $identifiant = sql_getfetsel(
     84                        'identifiant',
     85                        'spip_identifiants',
     86                        'objet='.sql_quote($objet).' AND id_objet='.intval($id_objet)
     87                );
     88
     89                // récupérer le squelette
     90                $info = recuperer_fond(
     91                        'prive/objets/infos/identifiant',
     92                        array(
     93                                'identifiant' => $identifiant,
     94                        )
     95                );
     96
     97                $cherche = "/(<div[^>]*class=('|\")numero.*?<\/div>)/is";
     98                $remplace = '$1' . "$info\n";
     99                $flux['data'] = preg_replace($cherche, $remplace, $flux['data']);
     100
     101        }
     102
     103        return $flux;
     104}
     105
     106
     107/**
     108 * Ajouter des vérifications aux formulaires
     109 *
     110 * - Identifiants sur les objets configurés
     111 *
     112 * @pipeline boite_info
     113 * @param array $flux Données du pipeline
     114 * @return array      Données du pipeline
     115**/
     116function identifiants_formulaire_charger($flux){
     117
     118        include_spip('inc/config');
     119        $objets = lire_config('identifiants/objets', array());
     120        preg_match('/^editer_(.*)/', $flux['args']['form'], $matches);
     121
     122        if (
     123                $objet = $matches[1]
     124                and $id_objet = intval($flux['args']['args'][0]) // on suppose que c'est le 1er paramètre
     125                and $table_objet_sql = table_objet_sql($objet)
     126                and in_array($table_objet_sql,$objets)
     127                and autoriser('voir','identifiant')
     128        ) {
     129
     130                // récupérer la valeur de l'identifiant
     131                $identifiant = sql_getfetsel(
     132                        'identifiant',
     133                        'spip_identifiants',
     134                        'objet='.sql_quote($objet).' AND id_objet='.intval($id_objet)
     135                );
     136                $flux['data']['identifiant'] = $identifiant;
     137
     138        }
     139
     140        return $flux;
     141}
     142
     143
     144/**
     145 * Ajouter des vérifications aux formulaires
     146 *
     147 * - Identifiants sur les objets configurés
     148 *
     149 * @pipeline boite_info
     150 * @param array $flux Données du pipeline
     151 * @return array      Données du pipeline
     152**/
     153function identifiants_formulaire_verifier($flux){
     154
     155        include_spip('inc/config');
     156        $objets = lire_config('identifiants/objets', array());
     157        preg_match('/^editer_(.*)/', $flux['args']['form'], $matches);
     158
     159        if (
     160                $objet = $matches[1]
     161                and $id_objet = intval($flux['args']['args'][0]) // on suppose que c'est le 1er paramètre
     162                and $table_objet_sql = table_objet_sql($objet)
     163                and in_array($table_objet_sql,$objets)
     164                and autoriser('voir','identifiant')
     165        ) {
     166
     167                if ($identifiant = _request('identifiant')) {
     168                        // nombre de charactères : 50 max
     169                        if (($nb = strlen($identifiant)) > 50) {
     170                                $flux['data']['identifiant'] = _T('identifiant:erreur_champ_identifiant_taille', array('nb'=>$nb));
     171                        }
     172                        // format : charactères alphanumériques en minuscules ou "_"
     173                        elseif (!preg_match('/^[a-z0-9_]+$/', $identifiant)) {
     174                                $flux['data']['identifiant'] = _T('identifiant:erreur_champ_identifiant_format');
     175                        }
     176                        // doublon : on n'autorise qu'un seul identifiant par type d'objet
     177                        elseif (sql_countsel('spip_identifiants', 'identifiant='.sql_quote($identifiant).' AND objet='.sql_quote($objet).' AND id_objet!='.intval($id_objet))) {
     178                                $flux['data']['identifiant'] = _T('identifiant:erreur_champ_identifiant_doublon');
     179                        }
     180                }
     181
     182        }
     183
     184        return $flux;
     185}
     186
     187
     188/**
     189 * Ajouter des traitements aux formulaires
     190 *
     191 * - Enregistter les identifiants sur les objets configurés
     192 *
     193 * @pipeline boite_info
     194 * @param array $flux Données du pipeline
     195 * @return array      Données du pipeline
     196**/
     197function identifiants_formulaire_traiter($flux){
     198
     199        include_spip('inc/config');
     200        $objets = lire_config('identifiants/objets', array());
     201        preg_match('/^editer_(.*)/', $flux['args']['form'], $matches);
     202
     203        if (
     204                $objet = $matches[1]
     205                and $id_objet = intval($flux['args']['args'][0]) // on suppose que c'est le 1er paramètre
     206                and $table_objet_sql = table_objet_sql($objet)
     207                and in_array($table_objet_sql,$objets)
     208                and autoriser('voir','identifiant')
     209        ) {
     210
     211                $old_identifiant = sql_getfetsel(
     212                        'identifiant',
     213                        'spip_identifiants',
     214                        'objet='.sql_quote($objet).' AND id_objet='.intval($id_objet)
     215                );
     216                $new_identifiant = _request('identifiant');
     217                $set = array(
     218                        'objet'       => $objet,
     219                        'id_objet'    => $id_objet,
     220                        'identifiant' => $new_identifiant,
     221                );
     222
     223                // création...
     224                if (
     225                        !$old_identifiant
     226                        and $new_identifiant
     227                ) {
     228                        sql_insertq('spip_identifiants', $set);
     229                }
     230
     231                // ...ou mise à jour...
     232                elseif (
     233                        $old_identifiant
     234                        and $new_identifiant
     235                ) {
     236                        sql_updateq('spip_identifiants', $set);
     237                }
     238
     239                // ... ou suppression
     240                elseif (
     241                        $old_identifiant
     242                        and !$new_identifiant
     243                ) {
     244                        sql_delete('spip_identifiants', 'objet='.sql_quote($objet).' AND id_objet='.intval($id_objet));
     245                }
     246
     247        }
     248
     249        return $flux;
     250}
  • _plugins_/identifiants/trunk/lang/identifiant_fr.php

    r93843 r94812  
    1717        Les tables possédant déjà une colonne « identifiant » sont exclues.',
    1818        'champ_identifiant_label' => 'Identifiant',
    19         'champ_identifiant_explication' => 'Charactères alphanumérique ou «_».',
     19        'champ_identifiant_explication' => 'Identifiant unique pour cet objet. Il s\'agit d\'un nom informatique : charactères alphanumériques ou «_».',
    2020
    2121        // E
    22         'erreur_champ_identifiant_format' => 'Format incorrect',
     22        'erreur_champ_identifiant_format' => 'Format incorrect : n\'utilisez pas d\'espace, ni de caractères accentués ou spéciaux.',
    2323        'erreur_champ_identifiant_doublon' => 'Cet identifiant existe déjà pour ce type d\'objet',
    2424        'erreur_champ_identifiant_taille' => '50 caractères au maximum (actuellement @nb@)',
  • _plugins_/identifiants/trunk/lang/paquet-identifiants_fr.php

    r94716 r94812  
    88        // I
    99        'identifiants_nom' => 'Identifiants',
    10         'identifiants_slogan' => 'Ajouter des identifiants uniques à n\'importe quel objet.',
    11         'identifiants_description' => 'On a parfois besoin de différencier certains objets : un article sur les mentions légales, une rubrique contenant des vidéos, etc.
    12         Le but du plugin est de permettre d\'attribuer des identifiants uniques à certains objets, et donc de les sélectionner en fonction de ceux-ci.
    13         Ex. : <BOUCLE_rubrique(RUBRIQUES){identifiant=un_identifiant}>. Les identifiants sont stockés dans la table `spip_identifiants`.
    14         L\'ajout d\'identifiants n\'est proposé que pour les tables ne possédant pas déjà une colonne `identifiant`, donc elles ne seront pas concernées par l\'utilisation de ce plugin.',
     10        'identifiants_slogan' => 'Ajouter des identifiants uniques aux objets.',
     11        'identifiants_description' => 'Ce plugin permet d\'attribuer des identifiants textes uniques aux objets.
     12        Ainsi, au lieu de faire <code><BOUCLE_rubrique(RUBRIQUES){id_rubrique=N}></code>, vous pourrez faire par exemple <code><BOUCLE_rubrique(RUBRIQUES){identifiant=ecureuil}></code>.
     13        Seuls les webmestres peuvent voir et manipuler les identifiants : ils sont (en principe) à utiliser avec parcimonie, et ne devraient pas changer une fois définis.
     14        Les objets auxquels ont peut ajouter des identifiants sont à définir sur la page de configuration du plugin.
     15        Seules les tables ne possédant pas déjà une colonne `identifiant` sont proposées.
     16        Les identifiants sont stockés dans la table de liens `spip_identifiants`',
    1517);
    1618
  • _plugins_/identifiants/trunk/paquet.xml

    r94780 r94812  
    22        prefix="identifiants"
    33        categorie="divers"
    4         version="1.0.4"
     4        version="1.0.5"
    55        etat="dev"
    66        compatibilite="[3.0.0;3.1.*]"
     
    1616        <licence>GNU/GPL</licence>
    1717
    18         <pipeline nom="affiche_milieu" inclure="identifiants_pipelines.php" />
    1918        <pipeline nom="autoriser" inclure="identifiants_autorisations.php" />
    20 
    2119        <pipeline nom="declarer_tables_interfaces" inclure="base/identifiants.php" />
    2220        <pipeline nom="declarer_tables_auxiliaires" inclure="base/identifiants.php" />
    2321        <pipeline nom="declarer_tables_objets_sql" inclure="base/identifiants.php" />
     22        <pipeline nom="editer_contenu_objet" inclure="identifiants_pipelines.php" />
     23        <pipeline nom="boite_infos" inclure="identifiants_pipelines.php" />
     24        <pipeline nom="formulaire_charger" inclure="identifiants_pipelines.php" />
     25        <pipeline nom="formulaire_verifier" inclure="identifiants_pipelines.php" />
     26        <pipeline nom="formulaire_traiter" inclure="identifiants_pipelines.php" />
    2427
    2528</paquet>
  • _plugins_/identifiants/trunk/prive/objets/editer/identifiant.html

    r93843 r94812  
    1 <div class="ajax">
    2         #FORMULAIRE_EDITER_IDENTIFIANT{#ENV{objet},#ENV{id_objet}}
     1[(#REM)
     2
     3        Saisie d'un identifiant sur le formulaire d'un objet.
     4        Inclus via le pipeline editer_contenu_objet.
     5
     6]
     7<div class="editer editer_identifiant[ (#ENV**{erreurs/identifiant}|oui)erreur]">
     8        <label for="identifiant"><:identifiant:champ_identifiant_label:>&nbsp;:</label>[
     9        <span class='erreur_message'>(#ENV**{erreurs/identifiant})</span>
     10        ]<p class="explication"><:identifiant:champ_identifiant_explication:></p>
     11        <input class="text" name="identifiant" id="identifiant" value="#ENV{identifiant}" lang="#LANG" type="text">
    312</div>
  • _plugins_/identifiants/trunk/prive/style_prive_plugin_identifiants.html

    r93843 r94812  
    77
    88/*
    9   FORMULAIRE
    10   ==========
     9  ===========
     10  BOITE INFOS
     11  ===========
    1112*/
    12 .formulaire_editer_identifiant label {
     13.infos .identifiant {
     14  padding: 5px 0;
     15  border-bottom: 1px solid #eee;
     16  text-align: center;
     17}
     18.infos .identifiant_icone {
     19  display: none;
     20  vertical-align: middle;
     21}
     22.infos .identifiant_label {
     23  text-transform: uppercase;
     24  font-size: 0.769em;
    1325  font-weight: bold;
    1426}
    15 .formulaire_editer_identifiant label img {
    16   vertical-align: middle;
    17   margin-#ENV{right}: 0.33em;
     27.infos .identifiant_valeur {
     28  display: block;
     29  font-family: mono;
     30  color: #333;
    1831}
    19 .formulaire_editer_identifiant .editer_identifiant {
    20   padding-top: 0;
    21   padding-bottom: 0;
    22 }
    23 .formulaire_editer_identifiant .no_identifiant {
    24   opacity: 0.5;
    25 }
Note: See TracChangeset for help on using the changeset viewer.