Changeset 94815 in spip-zone


Ignore:
Timestamp:
Jan 30, 2016, 2:47:10 PM (4 years ago)
Author:
tcharlss@…
Message:

Pouvoir éditer également les identifiants des nouveaux objets (ajout du pipeline post_insertion, et petites corrections sur formulaire_charger, formulaire_verifier et formulaire_traiter). On passe en test. Up de z

Location:
_plugins_/identifiants/trunk
Files:
4 edited

Legend:

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

    r94812 r94815  
    3131 * @return bool          true s'il a le droit, false sinon
    3232 */
    33 function autoriser_identifiant_voir_dist($faire, $type, $id, $qui, $opts) {
     33function autoriser_identifiants_voir_dist($faire, $type, $id, $qui, $opts) {
    3434        $is_webmestre = ($qui['statut']=='0minirezo' and !$qui['restreint']);
    3535        $autoriser    = $is_webmestre;
     
    5050 * @return bool          true s'il a le droit, false sinon
    5151 */
    52 function autoriser_identifiant_modifier_dist($faire, $type, $id, $qui, $opts) {
     52function autoriser_identifiants_modifier_dist($faire, $type, $id, $qui, $opts) {
    5353        $is_webmestre = ($qui['statut']=='0minirezo' and !$qui['restreint']);
    5454        $autoriser    = $is_webmestre;
  • _plugins_/identifiants/trunk/identifiants_pipelines.php

    r94812 r94815  
    1616 * Ajouter du contenu sur les formulaires d'édition des objets.
    1717 *
    18  * - Identifiants sur les objets configurés
     18 * - Ajouter la saisie identifiant sur les objets configurés
    1919 *
    2020 * @pipeline editer_contenu_objet
     
    3131        if (
    3232                $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')
     33                and $table_objet_sql = table_objet_sql($objet)
     34                and in_array($table_objet_sql,$objets)
     35                and autoriser('modifier','identifiants')
    3736        ) {
    3837
     
    6160 * Ajouter du contenu dans la boîte infos d'un objet
    6261 *
    63  * - Identifiants sur les objets configurés
     62 * - Afficher l'identifiant sous le n° de l'objet pour les objets configurés
    6463 *
    6564 * @pipeline boite_info
     
    7776                and $table_objet_sql = table_objet_sql($objet)
    7877                and in_array($table_objet_sql,$objets)
    79                 and autoriser('voir','identifiant')
     78                and autoriser('voir','identifiants')
    8079        ) {
    8180
     
    106105
    107106/**
    108  * Ajouter des vérifications aux formulaires
    109  *
    110  * - Identifiants sur les objets configurés
     107 * Ajouter des valeurs au chargement des formulaires
     108 *
     109 * - Ajouter l'identifiant lors de l'édition d'un objet, pour les objets configurés
    111110 *
    112111 * @pipeline boite_info
     
    118117        include_spip('inc/config');
    119118        $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         ) {
     119
     120        if (
     121                preg_match('/^editer_(.*)/', $flux['args']['form'], $matches) // formulaire editer_xxx
     122                and $objet = $matches[1]
     123                and $table_objet_sql = table_objet_sql($objet)
     124                and in_array($table_objet_sql,$objets)
     125                and autoriser('modifier','identifiants')
     126        ) {
     127
     128                // on suppose que id_objet est le 1er paramètre du formulaire
     129                $id_objet = intval($flux['args']['args'][0]);
    129130
    130131                // récupérer la valeur de l'identifiant
     
    145146 * Ajouter des vérifications aux formulaires
    146147 *
    147  * - Identifiants sur les objets configurés
     148 * - Vérifier le format et l'unicité de l'identifiant lors de l'édition d'un objet,
     149 * pour les objets configurés.
    148150 *
    149151 * @pipeline boite_info
     
    155157        include_spip('inc/config');
    156158        $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')
     159
     160        if (
     161                preg_match('/^editer_(.*)/', $flux['args']['form'], $matches) // formulaire editer_xxx
     162                and $objet = $matches[1]
     163                and $table_objet_sql = table_objet_sql($objet)
     164                and in_array($table_objet_sql,$objets)
     165                and autoriser('modifier','identifiants')
    165166        ) {
    166167
    167168                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));
     169                        // nombre max de charactères (on ne sait jamais)
     170                        $nb_max = 255;
     171                        if (($nb = strlen($identifiant)) > $nb_max) {
     172                                $flux['data']['identifiant'] = _T('identifiant:erreur_champ_identifiant_taille', array('nb'=>$nb, 'nb_max'=>$nb_max));
    171173                        }
    172174                        // format : charactères alphanumériques en minuscules ou "_"
     
    189191 * Ajouter des traitements aux formulaires
    190192 *
    191  * - Enregistter les identifiants sur les objets configurés
     193 * - Mettre à jour l'identifiant lors de l'édition d'un objet, pour les objets configurés
     194 *
     195 * @note
     196 * On ne peut pas utiliser les pipelines pre_edition et post_edition,
     197 * car il ne s'agit pas d'un champ de la table de l'objet édité.
    192198 *
    193199 * @pipeline boite_info
     
    199205        include_spip('inc/config');
    200206        $objets = lire_config('identifiants/objets', array());
    201         preg_match('/^editer_(.*)/', $flux['args']['form'], $matches);
    202 
    203         if (
    204                 $objet = $matches[1]
     207
     208        if (
     209                preg_match('/^editer_(.*)/', $flux['args']['form'], $matches) // formulaire editer_xxx
     210                and $objet = $matches[1]
    205211                and $id_objet = intval($flux['args']['args'][0]) // on suppose que c'est le 1er paramètre
    206212                and $table_objet_sql = table_objet_sql($objet)
    207213                and in_array($table_objet_sql,$objets)
    208                 and autoriser('voir','identifiant')
    209         ) {
    210 
     214                and autoriser('modifier','identifiants')
     215        ) {
     216
     217                maj_identifiant_edition_objet($objet, $id_objet);
     218
     219        }
     220
     221        return $flux;
     222}
     223
     224
     225/**
     226 * Intervenir après la création d'un objet.
     227 *
     228 * - Créer l'identifiant lors de la création d'un objet, pour les objets configurés.
     229 *
     230 * @note
     231 * L'identifiant n'est pas transmis dans $flux['data'], il faut le récupérer avec _request().
     232 * Il ne s'agit pas d'un champ de la table de l'objet édité.
     233 *
     234 * @pipeline post_insertion
     235 * @param  array $flux Données du pipeline
     236 * @return array       Données du pipeline
     237 */
     238function identifiants_post_insertion($flux){
     239
     240        include_spip('inc/config');
     241        $objets = lire_config('identifiants/objets', array());
     242
     243        if (
     244                $table_objet = $flux['args']['table']
     245                and $objet = objet_type($table_objet)
     246                and $id_objet = $flux['args']['id_objet']
     247                and in_array($table_objet, $objets)
     248                and autoriser('modifier','identifiants')
     249        ){
     250
     251                maj_identifiant_edition_objet($objet, $id_objet);
     252
     253        }
     254
     255        return $flux;
     256}
     257
     258
     259/**
     260 * Fonction privée pour mettre à jour l'identifiant lors de l'édition d'un objet.
     261 *
     262 * @param string $objet
     263 *     Type d'objet
     264 * @param int $id_objet
     265 *     Identifiant numérique de l'objet
     266 * @return void | bool | string
     267 *     Retour des fonctions sql_insertq, sql_updateq ou sql_delete.
     268 */
     269function maj_identifiant_edition_objet($objet='', $id_objet=''){
     270
     271        if (
     272                $objet
     273                and $id_objet = intval($id_objet)
     274        ) {
     275
     276                // on récupère le nouvel identifiant
     277                $new_identifiant = _request('identifiant');
     278
     279                // on récupère l'ancien identifiant
    211280                $old_identifiant = sql_getfetsel(
    212281                        'identifiant',
     
    214283                        'objet='.sql_quote($objet).' AND id_objet='.intval($id_objet)
    215284                );
    216                 $new_identifiant = _request('identifiant');
     285
     286                // on prépare les données
    217287                $set = array(
    218288                        'objet'       => $objet,
     
    221291                );
    222292
    223                 // création...
    224                 if (
    225                         !$old_identifiant
    226                         and $new_identifiant
    227                 ) {
    228                         sql_insertq('spip_identifiants', $set);
     293                // on définit ce qu'on doit faire
     294                $creation    = (!$old_identifiant and $new_identifiant);
     295                $maj         = ($old_identifiant and $new_identifiant);
     296                $suppression = ($old_identifiant and !$new_identifiant);
     297
     298                // création
     299                if ($creation) {
     300                        return sql_insertq('spip_identifiants', $set);
    229301                }
    230 
    231                 // ...ou mise à jour...
    232                 elseif (
    233                         $old_identifiant
    234                         and $new_identifiant
    235                 ) {
    236                         sql_updateq('spip_identifiants', $set);
     302                // mise à jour
     303                elseif ($maj) {
     304                        return sql_updateq('spip_identifiants', $set);
    237305                }
    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));
     306                // suppression
     307                elseif ($suppression) {
     308                        return sql_delete('spip_identifiants', 'objet='.sql_quote($objet).' AND id_objet='.intval($id_objet));
    245309                }
    246 
    247         }
    248 
    249         return $flux;
    250 }
     310        }
     311
     312}
  • _plugins_/identifiants/trunk/lang/identifiant_fr.php

    r94812 r94815  
    2020
    2121        // E
    22         'erreur_champ_identifiant_format' => 'Format incorrect : n\'utilisez pas d\'espace, ni de caractères accentués ou spéciaux.',
     22        'erreur_champ_identifiant_format' => 'Format incorrect : n\'utilisez pas d\'espace, ni de majuscule, ni de caractères accentués ou spéciaux.',
    2323        'erreur_champ_identifiant_doublon' => 'Cet identifiant existe déjà pour ce type d\'objet',
    24         'erreur_champ_identifiant_taille' => '50 caractères au maximum (actuellement @nb@)',
     24        'erreur_champ_identifiant_taille' => '@nb_max@ caractères au maximum (actuellement @nb@)',
    2525
    2626        // I
  • _plugins_/identifiants/trunk/paquet.xml

    r94812 r94815  
    22        prefix="identifiants"
    33        categorie="divers"
    4         version="1.0.5"
    5         etat="dev"
     4        version="1.0.6"
     5        etat="test"
    66        compatibilite="[3.0.0;3.1.*]"
    77        logo="prive/themes/spip/images/identifiants.png"
     
    2525        <pipeline nom="formulaire_verifier" inclure="identifiants_pipelines.php" />
    2626        <pipeline nom="formulaire_traiter" inclure="identifiants_pipelines.php" />
     27        <pipeline nom="post_insertion" inclure="identifiants_pipelines.php" />
    2728
    2829</paquet>
Note: See TracChangeset for help on using the changeset viewer.