Changeset 109499 in spip-zone


Ignore:
Timestamp:
Mar 14, 2018, 4:31:58 PM (15 months ago)
Author:
peetdu@…
Message:

La détection ‘magique’ du contexte est hasardeuse et contraignante pour la suite du développement.
On passe maintenant par un pipeline ‘rang_declarer_contexte’

Location:
_plugins_/rang/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/rang/trunk/inc/rang_api.php

    r106515 r109499  
    1515
    1616/**
    17  * Construire la liste des objets à exclure
     17 * Construire la liste des objets à exclure de la configuration
    1818 *
    1919 * @return array
     
    156156
    157157/**
    158  * construction des chemins de sources vers les listes des objets sélectionnés
    159  * ce tableau sera ensuite comparé à la valeur $flux['data']['source'] fourni par le pipeline recuperer_fond()
     158 * Construction, a partir des objets selectionnes, des chemins de sources vers les listes correspondantes
     159 * Ce tableau sera ensuite comparé à la valeur $flux['data']['source'] fourni par le pipeline recuperer_fond()
    160160 *
    161161 * @return array
     
    178178                $objet = table_objet($value);
    179179                if (!empty($value)) {
    180                         $source = find_in_path('prive/objets/liste/'.$objet.'.html');
     180                        $source = 'prive/objets/liste/'.$objet;
    181181                        $sources[] = $source;
    182182                }
    183183
    184184                // cas objets historiques
    185                 if($objet == 'mots') {
    186                         $source = find_in_path('prive/objets/liste/mots-admin.html');
     185                if ($objet == 'mots') {
     186                        $source = 'prive/objets/liste/mots-admin';
    187187                        $sources[] = $source;
    188188                }
    189189        }
     190
     191        // tempo : test sur des liaisons
     192        $sources[] = 'prive/objets/liste/mots_lies';
     193
    190194        return $sources;
    191195}
  • _plugins_/rang/trunk/paquet.xml

    r107248 r109499  
    22        prefix="rang"
    33        categorie="navigation"
    4         version="0.7.10"
     4        version="0.7.11"
    55        etat="experimental"
    66        compatibilite="[3.1.0;3.2.*]"
     
    1919
    2020        <necessite nom="saisies" compatibilite="[2.18.21;]" />
    21         <utilise nom="declarerparent" compatibilite="[1.0.0;]" />
    22         <utilise nom="mots" compatibilite="[2.7.8;]" />
     21        <necessite nom="declarerparent" compatibilite="[1.0.0;]" />
     22        <utilise nom="mots" compatibilite="[2.7.8;]" />
     23
     24        <pipeline nom="rang_declarer_contexte" action="" />
    2325
    2426        <pipeline nom="autoriser" inclure="rang_autorisations.php" />
     27        <pipeline nom="declarer_tables_objets_sql" inclure="rang_pipelines.php" />
    2528        <pipeline nom="recuperer_fond" inclure="rang_pipelines.php" />
    26         <pipeline nom="declarer_tables_objets_sql" inclure="rang_pipelines.php" />
    2729        <pipeline nom="pre_edition" inclure="rang_pipelines.php" />
     30
     31       
    2832</paquet>
  • _plugins_/rang/trunk/rang_pipelines.php

    r107024 r109499  
    1515
    1616include_spip('inc/rang_api');
     17include_spip('inc/config');
    1718
    1819/**
    1920 * Declaration du champ Rang sur les objets sélectionnés
    20  * + Definir la relation a l‘objet parent dans la declaration de l‘objet (en attendant https://core.spip.net/issues/3844)
    2121 *
    2222 * @param array $tables
     
    2424 */
    2525function rang_declarer_tables_objets_sql($tables) {
    26         include_spip('inc/config');
    27 
     26       
    2827        /* Declaration du champ Rang sur les objets sélectionnés */
    2928        $rang_objets = rtrim(lire_config('rang/rang_objets'), ',');
     
    3332                $tables[$table]['field']['rang'] = "SMALLINT NOT NULL";
    3433        }
    35        
    36         /* Definir la relation a l‘objet parent dans la declaration de l‘objet (en attendant https://core.spip.net/issues/3844) */
    37         // pour les articles
    38         $tables['spip_articles']['parent'] = array('type' => 'rubrique', 'champ' => 'id_rubrique');
    39 
    40         // pour les rubriques
    41         $tables['spip_rubriques']['parent'] = array('type' => 'rubrique', 'champ' => 'id_rubrique');
    42 
    43         //pour les mots-clés
    44         $tables['spip_mots']['parent'] = array('type' => 'groupe_mot', 'champ' => 'id_groupe');
    4534
    4635        return $tables;
    4736}
    4837
     38
    4939/**
    50  * Inserer le JS qui gére le tri par Drag&Drop dans la page ?exec=xxxxx
     40 * Calculer et Inserer le JS qui gére le tri par Drag&Drop dans le bon contexte (la page ?exec=xxxxx)
    5141 *
    52  * @param array $flux
    53  * @return array
     42 * @param       array $flux     Données du pipeline
     43 * @return      array           Données du pipeline
    5444 */
    5545function rang_recuperer_fond($flux) {
     46       
     47        $tables_objets_selectionnes = lire_config('rang/rang_objets');
    5648
    57         $exec           = _request('exec');
    5849       
    59         // Gestion du contexte i.e. page ?exec=xxxx
    60         // Par défaut, on peut toujours trier dans une rubrique où dans un groupe de mot
    61         $contextes      = array(0 => 'rubrique', 1 => 'groupe_mots');
     50        if (isset($tables_objets_selectionnes) AND !empty($tables_objets_selectionnes)) {
     51                /* Gestion du contexte : dans quelle page insérer le JS */
     52                $exec           = _request('exec');
     53                $contextes      = pipeline('rang_declarer_contexte', array('rubrique', 'groupe_mots', 'mots'));
     54                $sources        = rang_get_sources();
    6255
    63         // Ajouter automatiquement un contexte
    64         // pour les objets sans rubrique, on ajoute le contexte ?exec=objet
    65         include_spip('inc/config');
    66         $objets_selectionnes = lire_config('rang/rang_objets');
    67         $liste = lister_tables_objets_sql();
    68         foreach ($liste as $key => $value) {
    69                 if ($value['editable'] == 'oui' /*AND !isset($value['field']['id_rubrique'])*/) {
    70                         $objet = table_objet($key);
    71                         if (strpos($objets_selectionnes,$objet)) {
    72                                 $contextes[] = $objet;
    73                         }
     56                if ( in_array($exec, $contextes)
     57                        AND in_array($flux['args']['fond'], $sources)
     58                        AND strpos($flux['data']['texte'], 'liste-objets') // cette derniere condition n'est peut etre pas utile, voire contraignante pour ordonner autre chose qu'une liste d'objet ?
     59                ) {
     60                        // recuperer les paramètres pour le calcul du JS correspondant
     61                        preg_match('/liste-objets\s([A-Za-z]+)/', $flux['data']['texte'], $result);
     62                        $type_objet = $result[1];
     63
     64                        $nom_objet  = table_objet($type_objet);
     65
     66                        // récupérer le type de parent…
     67                        $table_objet = table_objet_sql($type_objet);
     68                        $table = lister_tables_objets_sql($table_objet);
     69                        $type_parent = $table['parent']['type'];
     70
     71                        // …puis l'id_parent
     72                        $id = id_table_objet($type_parent);
     73                        $id_parent = $flux['args']['contexte'][$id];
     74
     75                        // Calcul du JS à insérer avec les paramètres
     76                        $ajout_script = recuperer_fond('prive/squelettes/inclure/rang', array(  'suffixe_pagination' => $nom_objet,
     77                                                                                                                                                                        'objet' => $type_objet,
     78                                                                                                                                                                        'id_parent' => $id_parent ));
     79
     80                        // et hop, on insère le JS calculé
     81                        $flux['data']['texte'] = str_replace('</table>', '</table>'. $ajout_script, $flux['data']['texte']);
    7482                }
    75         }
    76 
    77         // dans le futur, on doit pouvoir ajouter d'autres contextes
    78         // -> mots-clefs,
    79         // -> contextes spécifiques à certains plugins (ex : pages uniques, Albums, etc.)
    80 
    81 
    82 
    83         // faire archi gaffe à prendre le bon flux....pfiou compliqué :)
    84         $sources        = rang_get_sources();
    85 
    86         if ( in_array($exec, $contextes) AND
    87                  in_array($flux['data']['source'], $sources) AND
    88                  strpos($flux['data']['texte'], 'pagination_liste')) {
    89 
    90                         // récupérer le type de l'objet, quelle que soit le contexte
    91                         preg_match('/pagination_liste_([A-Za-z]+)/', $flux['data']['texte'], $result);
    92                         $objet = $result[1];
    93                         $suffixe_pagination = table_objet($objet);
    94 
    95                         $id_parent = $flux['args']['contexte']['id_rubrique'];
    96 
    97                         // particularité des objets historiques
    98                         switch ($objet) {
    99                                 case 'art':
    100                                         $objet = 'articles';
    101                                         $suffixe_pagination = 'art';
    102                                         break;
    103                                 case 'mots':
    104                                         $objet = 'mots';
    105                                         $suffixe_pagination = 'mot';
    106                                         $id_parent = $flux['args']['contexte']['id_groupe'];
    107                                         break;
    108                                 default:
    109                                         $id_parent = $flux['args']['contexte']['id_rubrique'];
    110                                         break;
    111                         }
    112                        
    113                         $ajout_script = recuperer_fond('prive/squelettes/inclure/rang', array('suffixe_pagination' => $suffixe_pagination, 'objet' => $objet, 'id_parent' => $id_parent ));
    114                         $flux['data']['texte'] = str_replace('</table>', '</table>'. $ajout_script, $flux['data']['texte']);
    115                
    11683        }
    11784        return $flux;
     
    12087/**
    12188 * Insertion dans le pipeline pre_edition pour le classer l'objet quand on le publie
    122  * @param array $flux
    123  * @return array
     89 * @param       array $flux     Données du pipeline
     90 * @return      array           Données du pipeline
    12491 */
    12592function rang_pre_edition($flux) {
Note: See TracChangeset for help on using the changeset viewer.