Changeset 96496 in spip-zone


Ignore:
Timestamp:
Apr 6, 2016, 7:15:23 PM (5 years ago)
Author:
tcharlss@…
Message:

Version 1.1.0 : sur une idée de RastaPopoulos?, on ajoute un pipeline "identifiants_utiles" inspiré du plugin Menus. Ce pipeline permet aux squelettes qui auraient besoin/utiliseraient des identifiants précis de les déclarer. Si le pipeline est utilisé, l'utilisateur se verra suggérer de créer ces identifiants pour les types d'objets concernés, via une boîte de raccourcis en colonne de gauche. En l'occurence, ça ne concerne que le webmaster, puisque pour l'intstant, c'est le seul qui a le droit de voir les identifiants.

Par exemple, si un plugin de squelettes a besoin de 2 rubriques identifiées "bazar" et "vrac" plus un article identifié "mentions", le pipeline pourra ressembler à ceci :

function leplugin_identifiants_utiles($flux){

$utiles = array(

'rubrique' => array('bazar', 'vac'),
'article' => array('mentions'),

);
return array_merge_recursive($flux, $utiles);

}

Attention, le $flux retourné n'est pas identique à celui du pipeline "menus_utiles" du plugin Menus, dans notre cas il s'agit d'un tableau de la forme [objet] => [tableau d'identifiants]

On en profite pour déplacer la fonction qui met à jour les identifiants dans le fichier de fonctions. Dedans, on vérifie aussi les doublons avant de mettre à jour ou de créer un identifiant (avant le test était fait en amont, mais ça ne suffit pas toujours).

Location:
_plugins_/identifiants/trunk
Files:
5 added
4 edited

Legend:

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

    r95015 r96496  
    1010 */
    1111
     12if (!defined('_ECRIRE_INC_VERSION')) {
     13        return;
     14}
    1215
    1316/**
     
    5154
    5255/**
     56 * Manipuler l'identifiant d'un objet : créer, mettre à jour, ou supprimer.
     57 *
     58 * Pour supprimer l'identifiant actuel de l'objet, appeler la fonction sans 3ème paramètre (ou vide).
     59 *
     60 * @param string $objet
     61 *     Type d'objet
     62 * @param int $id_objet
     63 *     Identifiant numérique de l'objet
     64 * @return bool | string
     65 *     False si problème, sinon retour des fonctions sql_insertq, sql_updateq ou sql_delete.
     66 */
     67function maj_identifiant_objet($objet='', $id_objet='', $new_identifiant=''){
     68
     69        if (
     70                $objet
     71                and $id_objet = intval($id_objet)
     72        ) {
     73
     74                // on récupère l'ancien identifiant
     75                $old_identifiant = sql_getfetsel(
     76                        'identifiant',
     77                        'spip_identifiants',
     78                        'objet='.sql_quote($objet).' AND id_objet='.intval($id_objet)
     79                );
     80
     81                // regardons si le nouvel identifiant est déjà utilisé ailleurs
     82                $deja_utilise = (sql_countsel('spip_identifiants', 'objet='.sql_quote($objet).' AND id_objet !='.intval($id_objet).' AND identifiant='.sql_quote($new_identifiant).' AND identifiant != \'\'') > 0 ? true : false);
     83
     84                // on définit ce qu'on doit faire
     85                $action =
     86                        (!$old_identifiant and $new_identifiant)  ? 'creer' :
     87                        (($old_identifiant and $new_identifiant)  ? 'maj' :
     88                        (($old_identifiant and !$new_identifiant) ? 'supprimer' : ''));
     89
     90                switch ($action) {
     91
     92                        case 'creer' :
     93                                if (!$deja_utilise) {
     94                                        return sql_insertq(
     95                                                'spip_identifiants',
     96                                                array('objet' => $objet, 'id_objet' => $id_objet, 'identifiant' => $new_identifiant)
     97                                        );
     98                                } else {
     99
     100                                        return false;
     101                                }
     102
     103                        case 'maj' :
     104                                if (!$deja_utilise) {
     105                                        return sql_updateq(
     106                                                'spip_identifiants',
     107                                                array('identifiant' => $new_identifiant),
     108                                                'objet='.sql_quote($objet).' AND id_objet='.intval($id_objet).' AND identifiant='.sql_quote($old_identifiant)
     109                                        );
     110                                } else {
     111                                        return false;
     112                                }
     113
     114                        case 'supprimer' :
     115                                return sql_delete(
     116                                        'spip_identifiants',
     117                                        'objet='.sql_quote($objet).' AND id_objet='.intval($id_objet).' AND identifiant='.sql_quote($old_identifiant)
     118                                );
     119
     120                        default :
     121                                return false;
     122                }
     123
     124        } else {
     125                return false;
     126        }
     127
     128}
     129
     130
     131/**
    53132 * Retourne une liste de tables possédant une colonne « identifiant »
    54133 *
     
    70149        return $tables_avec_identifiant;
    71150}
     151
     152
     153/**
     154 * Lister les identifiants utiles qui ne sont pas encore créés
     155 **/ 
     156function identifiants_utiles() {
     157
     158        if (
     159                $identifiants_utiles = pipeline('identifiants_utiles', array())
     160                and is_array($identifiants_utiles)
     161        ) {
     162                foreach ($identifiants_utiles as $objet => $identifiants) {
     163                        // on retire de la liste les identifiants existants
     164                        foreach ($identifiants as $identifiant) {
     165                                if (sql_countsel('spip_identifiants', 'objet = '.sql_quote($objet).' AND identifiant='.sql_quote($identifiant))) {
     166                                        unset($identifiants_utiles[$objet][array_search($identifiant,$identifiants_utiles[$objet])]);
     167                                }
     168                        }
     169                        // on retire l'objet de la liste s'il ne reste plus d'identifiant
     170                        if (!count($identifiants_utiles[$objet])) {
     171                                unset($identifiants_utiles[$objet]);
     172                        }
     173                }
     174        }
     175
     176        return $identifiants_utiles;
     177}
  • _plugins_/identifiants/trunk/identifiants_pipelines.php

    r95640 r96496  
    234234        ) {
    235235
    236                 maj_identifiant_edition_objet($objet, $id_objet);
     236                maj_identifiant_objet($objet, $id_objet, _request('identifiant'));
    237237
    238238        }
     
    269269        ){
    270270
    271                 maj_identifiant_edition_objet($objet, $id_objet);
    272 
    273         }
    274 
    275         return $flux;
    276 }
    277 
    278 
    279 /**
    280  * Fonction privée pour mettre à jour l'identifiant lors de l'édition d'un objet.
    281  *
    282  * @param string $objet
    283  *     Type d'objet
    284  * @param int $id_objet
    285  *     Identifiant numérique de l'objet
    286  * @return bool | string
    287  *     False si problème, sinon retour des fonctions sql_insertq, sql_updateq ou sql_delete.
    288  */
    289 function maj_identifiant_edition_objet($objet='', $id_objet=''){
    290 
    291         if (
    292                 $objet
    293                 and $id_objet = intval($id_objet)
    294         ) {
    295 
    296                 // on récupère le nouvel identifiant
    297                 $new_identifiant = _request('identifiant');
    298 
    299                 // on récupère l'ancien identifiant
    300                 $old_identifiant = sql_getfetsel(
    301                         'identifiant',
    302                         'spip_identifiants',
    303                         'objet='.sql_quote($objet).' AND id_objet='.intval($id_objet)
    304                 );
    305 
    306                 // on définit ce qu'on doit faire
    307                 $action =
    308                         (!$old_identifiant and $new_identifiant)  ? 'creer' :
    309                         (($old_identifiant and $new_identifiant)  ? 'maj' :
    310                         (($old_identifiant and !$new_identifiant) ? 'supprimer' : ''));
    311 
    312                 switch ($action) {
    313 
    314                         case 'creer' :
    315                                 return sql_insertq(
    316                                         'spip_identifiants',
    317                                         array('objet' => $objet, 'id_objet' => $id_objet, 'identifiant' => $new_identifiant)
    318                                 );
    319 
    320                         case 'maj' :
    321                                 return sql_updateq(
    322                                         'spip_identifiants',
    323                                         array('identifiant' => $new_identifiant),
    324                                         'objet='.sql_quote($objet).' AND id_objet='.intval($id_objet).' AND identifiant='.sql_quote($old_identifiant)
    325                                 );
    326 
    327                         case 'supprimer' :
    328                                 return sql_delete(
    329                                         'spip_identifiants',
    330                                         'objet='.sql_quote($objet).' AND id_objet='.intval($id_objet).' AND identifiant='.sql_quote($old_identifiant)
    331                                 );
    332 
    333                         default :
    334                                 return false;
    335                 }
    336 
    337         } else {
    338                 return false;
    339         }
    340 
    341 }
     271                maj_identifiant_objet($objet, $id_objet, _request('identifiant'));
     272
     273        }
     274
     275        return $flux;
     276}
     277
     278
     279/**
     280 * Ajouter du contenu dans la colonne de gauche d'un objet
     281 *
     282 * - Afficher la suggestion de création d'identifiants
     283 *
     284 * @pipeline affiche_gauche
     285 * @param array $flux Données du pipeline
     286 * @return array      Données du pipeline
     287**/
     288function identifiants_affiche_gauche($flux){
     289
     290        include_spip('inc/config');
     291        include_spip('inc/autoriser');
     292        include_spip('base/objets');
     293        $objets = lire_config('identifiants/objets', array());
     294        // prendre en compte le pipeline identifiant_utiles
     295        if (
     296                is_array($identifiants_utiles = identifiants_utiles())
     297                and $objets_utiles = array_map('table_objet_sql', array_keys($identifiants_utiles))
     298        ){
     299                $objets = array_merge($objets, $objets_utiles);
     300        }
     301
     302        if (
     303                $objet = $flux['args']['type-page']
     304                and $table_objet_sql = table_objet_sql($objet)
     305                and in_array($table_objet_sql, $objets)
     306                and $id_table_objet = id_table_objet($objet)
     307                and $id_objet = intval($flux['args'][$id_table_objet])
     308                and !sql_countsel('spip_identifiants', 'objet='.sql_quote($objet).' AND id_objet='.intval($id_objet))
     309                and autoriser('voir','identifiants')
     310        ) {
     311
     312                // récupérer le squelette
     313                $utiles = recuperer_fond(
     314                        'prive/squelettes/inclure/identifiants_utiles', array(
     315                                'objet' => $objet,
     316                                'id_objet' => $id_objet,
     317                                'identifiants_utiles' => $identifiants_utiles[$objet]
     318                        )
     319                );
     320
     321                $flux['data'] .= $utiles;
     322
     323        }
     324
     325        return $flux;
     326}
  • _plugins_/identifiants/trunk/lang/identifiant_fr.php

    r95015 r96496  
    3131        // T
    3232        'titre_page_configurer_identifiants' => 'Configuration des identifiants',
     33
     34        // U
     35        'utiles_explication' => 'Les squelettes actuels du site peuvent utiliser ces identifiants pour les @objets@.',
     36        'utiles_generer_identifiant' => 'Attribuer l\'identifiant <strong>@identifiant@</strong>',
     37        'utiles_titre' => 'Identifiants utiles',
     38
    3339);
    3440
  • _plugins_/identifiants/trunk/paquet.xml

    r95640 r96496  
    22        prefix="identifiants"
    33        categorie="divers"
    4         version="1.0.12"
     4        version="1.1.0"
    55        etat="test"
    66        compatibilite="[3.0.0;3.1.*]"
     
    2121        <pipeline nom="declarer_tables_objets_sql" inclure="base/identifiants.php" />
    2222        <pipeline nom="editer_contenu_objet" inclure="identifiants_pipelines.php" />
    23         <pipeline nom="boite_infos" inclure="identifiants_pipelines.php" />
    2423        <pipeline nom="formulaire_charger" inclure="identifiants_pipelines.php" />
    2524        <pipeline nom="formulaire_verifier" inclure="identifiants_pipelines.php" />
    2625        <pipeline nom="formulaire_traiter" inclure="identifiants_pipelines.php" />
    2726        <pipeline nom="post_insertion" inclure="identifiants_pipelines.php" />
     27        <pipeline nom="boite_infos" inclure="identifiants_pipelines.php" />
     28        <pipeline nom="affiche_gauche" inclure="identifiants_pipelines.php" />
     29        <pipeline nom="identifiants_utiles" action="" />
    2830
    2931</paquet>
Note: See TracChangeset for help on using the changeset viewer.