Changeset 110863 in spip-zone


Ignore:
Timestamp:
Jun 25, 2018, 3:18:00 PM (3 years ago)
Author:
eric@…
Message:

Amélioration du chargement des pages pour éviter de forcer le mode complet uniquement pour mettre à jour l'activité des pages.
De fait, sur le pipeline affiche_milieu de la page d'admin des plugins on recharge les pages et les types de noisettes normalement.
Par contre, pour les boutons on effectue un rechargement complet.

Location:
_plugins_/noizetier/trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/noizetier/trunk/action/recharger_pages.php

    r110123 r110863  
    3131        }
    3232
    33         // Rechargement des pages : on ne force pas le recalcul complet.
     33        // Rechargement des pages : on force le recalcul complet, c'est le but.
    3434        include_spip('inc/noizetier_page');
    35         noizetier_page_charger();
     35        noizetier_page_charger(true);
    3636}
  • _plugins_/noizetier/trunk/action/recharger_types_noisette.php

    r110123 r110863  
    3131        }
    3232
    33         // Rechargement des types de noisette : on ne force pas le recalcul complet.
     33        // Rechargement des types de noisette : on force le recalcul complet, c'est le but.
    3434        include_spip('inc/ncore_type_noisette');
    35         type_noisette_charger('noizetier');
     35        type_noisette_charger('noizetier', true);
    3636}
  • _plugins_/noizetier/trunk/demo/noizetier.php

    r110066 r110863  
    66
    77include_spip('inc/config');
    8 //include_spip('inc/ncore_type_noisette');
     8include_spip('inc/ncore_type_noisette');
    99include_spip('inc/ncore_noisette');
    10 //include_spip('ncore/ncore');
    11 //include_spip('ncore/noizetier');
     10include_spip('ncore/ncore');
     11include_spip('ncore/noizetier');
    1212
    1313$contexte = array('objet' => 'auteur', 'id' => 12);
     
    1717
    1818        $timestamp_debut = microtime(true);
     19        $types_noisettes_existantes = ncore_type_noisette_lister($_plugin, '');
     20        var_dump($types_noisettes_existantes);
    1921
    2022//      $conteneur = array('squelette' => 'content/article');
     
    4850//      var_dump('conteneur info noisette id_noisette', $retour);
    4951
    50         $conteneur = array('type_noisette' => 'conteneur', 'id_noisette' => 8);
    51         $retour = noisette_ajouter($_plugin, 'codespip', $conteneur, array());
    52         var_dump($retour);
     52//      $conteneur = array('type_noisette' => 'conteneur', 'id_noisette' => 8);
     53//      $retour = noisette_ajouter($_plugin, 'codespip', $conteneur, array());
     54//      var_dump($retour);
    5355//      $retour = noisette_ajouter($_plugin, 'codespip', 'content/article', array(), 2);
    5456//      var_dump($retour);
  • _plugins_/noizetier/trunk/inc/noizetier_page.php

    r110843 r110863  
    4141        if ($fichiers = find_all_in_path($options['repertoire_pages'], '.+[.]html$')) {
    4242                $pages_nouvelles = $pages_modifiees = $pages_obsoletes = array();
    43                 // Récupération :
     43                // Récupération pour les divers traitements qui suivent:
    4444                // - des signatures md5 des pages déjà enregistrées pour déterminer si les fichiers YAML/XML
    4545                //   ont subi des changements.
    4646                // - des blocs exclus qui sont éditables après chargement, il faut donc conserver les modifications éventuelles.
    4747                // - des plugins nécessités et des indicateurs d'activité (voir fin de traitement).
    48                 $select = array('page', 'signature', 'blocs_exclus', 'necessite', 'est_active');
    49                 $signatures = $blocs_exclus = array();
     48                $trouver_table = charger_fonction('trouver_table', 'base');
     49                $table = $trouver_table($from);
     50                $select = array_diff(array_keys($table['field']), array('maj'));
     51                $signatures = array();
    5052                if ($pages_existantes = sql_allfetsel($select, $from, $where)) {
    51                         // On construit le tableau des blocs exclus de chaque page déjà enregistrée en base.
    52                         $blocs_exclus = array_column($pages_existantes, 'blocs_exclus', 'page');
     53                        // On construit le tableau des pages déjà enregistrée en base indexé par identifiant de page.
     54                        $pages_existantes = array_column($pages_existantes, null, 'page');
    5355
    5456                        // Si on force le rechargement il est inutile de gérer les signatures, les indicateurs d'activité
     
    8486                                                // On met à jour les blocs exclus avec la sauvegarde effectuée au préalable (si la page
    8587                                                // existait déjà en base).
    86                                                 if (isset($blocs_exclus[$page])) {
    87                                                         $configuration['blocs_exclus'] = $blocs_exclus[$page];
     88                                                if (isset($pages_existantes[$page])) {
     89                                                        $configuration['blocs_exclus'] = $pages_existantes[$page];
    8890                                                }
    8991                                                // On détermine si la page est nouvelle ou modifiée.
     
    115117                }
    116118
     119                // On complète la liste des pages à changer avec les pages dont l'indicateur d'activité est modifié suite
     120                // à l'activation ou à la désactivation d'un plugin (le fichier XML/YAML lui n'a pas changé). Il est inutile de
     121                // le faire si on recharge tout.
     122                // -- on cherche ces pages en excluant les pages obsolètes et celles à changer qui ont déjà recalculé
     123                //    l'indicateur lors de la lecture du fichier XML/YAML.
     124                if (!$forcer_chargement) {
     125                        $pages_exclues = $pages_modifiees
     126                                ? array_merge(array_column($pages_modifiees, 'page'), $pages_obsoletes)
     127                                : $pages_obsoletes;
     128                        $pages_a_verifier = $pages_exclues
     129                                ? array_diff_key($pages_existantes, array_flip($pages_exclues))
     130                                : $pages_existantes;
     131
     132                        if ($pages_a_verifier) {
     133                                foreach ($pages_a_verifier as $_page => $_description) {
     134                                        $est_active = 'oui';
     135                                        $plugins_necessites = unserialize($_description['necessite']);
     136                                        if ($plugins_necessites) {
     137                                                foreach ($plugins_necessites as $_plugin_necessite) {
     138                                                        if (!defined('_DIR_PLUGIN_' . strtoupper($_plugin_necessite))) {
     139                                                                $est_active = 'non';
     140                                                                break;
     141                                                        }
     142                                                }
     143                                        }
     144                                        if ($est_active != $_description['est_active']) {
     145                                                // On stocke la mise à jour dans les types à changer.
     146                                                $_description['est_active'] = $est_active;
     147                                                $pages_modifiees[] = $_description;
     148                                        }
     149
     150                                }
     151                        }
     152                }
     153
    117154                // Mise à jour de la table des pages
    118155                // -- Suppression des pages obsolètes ou de toute les pages non virtuelles si on est en mode
     
    136173                if (sql_preferer_transaction()) {
    137174                        sql_terminer_transaction();
    138                 }
    139 
    140                 // Pour les pages nouvelles ou modifiées, l'indicateur d'activité a été mis à jour.
    141                 // Mais ce n'est pas le cas pour les pages existantes dont le fichier YAML/XML n'a pas été modifié
    142                 // (en général, la plupart des pages).
    143                 // => Il faut donc mettre à jour l'indicateur d'activité pour ces pages.
    144                 $pages_exclues = $pages_modifiees ? array_column($pages_modifiees, 'page') : array();
    145                 foreach ($pages_existantes as $_page) {
    146                         if (!$pages_exclues or !in_array($_page['page'], $pages_exclues)) {
    147                                 $est_active = 'oui';
    148                                 $plugins_necessites = unserialize($_page['necessite']);
    149                                 if ($plugins_necessites) {
    150                                         foreach ($plugins_necessites as $_plugin_necessite) {
    151                                                 if (!defined('_DIR_PLUGIN_' . strtoupper($_plugin_necessite))) {
    152                                                         $est_active = 'non';
    153                                                         break;
    154                                                 }
    155                                         }
    156                                 }
    157 
    158                                 if ($est_active != $_page['est_active']) {
    159                                         sql_updateq($from, array('est_active' => $est_active), array('page=' . sql_quote($_page)));
    160                                 }
    161                         }
    162175                }
    163176
  • _plugins_/noizetier/trunk/ncore/noizetier.php

    r110817 r110863  
    122122 * @return array
    123123 *        Tableau de la description du type de noisette. Les champs textuels et les champs de type tableau sérialisé
    124  *        sont retournés en l'état.
     124 *        sont retournés en l'état, le timestamp `maj n'est pas fourni.
    125125 */
    126126function noizetier_type_noisette_decrire($plugin, $type_noisette) {
    127127
    128         // Chargement de toute la configuration de la noisette en base de données.
     128        // Table des types de noisette.
     129        $from = 'spip_types_noisettes';
     130
     131        // Chargement de toute la configuration de la noisette en base de données sauf le timestamp 'maj'.
    129132        // Les données sont renvoyées brutes sans traitement sur les textes ni les tableaux sérialisés.
     133        $trouver_table = charger_fonction('trouver_table', 'base');
     134        $table = $trouver_table($from);
     135        $select = array_diff(array_keys($table['field']), array('maj'));
     136
    130137        $where = array('plugin=' . sql_quote($plugin), 'type_noisette=' . sql_quote($type_noisette));
    131         $description = sql_fetsel('*', 'spip_types_noisettes', $where);
     138        $description = sql_fetsel($select, $from, $where);
    132139
    133140        return $description;
     
    149156 *
    150157 * @return array
    151  *        Tableau de la forme `[type_noisette] = information ou description complète`.
     158 *        Tableau de la forme `[type_noisette] = information ou description complète`. Les champs textuels et
     159 *        les champs de type tableau sérialisé sont retournés en l'état, le timestamp `maj n'est pas fourni.
    152160 */
    153161function noizetier_type_noisette_lister($plugin, $information = '') {
    154162
     163        $from = 'spip_types_noisettes';
    155164        $where = array('plugin=' . sql_quote($plugin));
    156         $select = $information ? array('type_noisette', $information) : '*';
    157         if ($info_noisettes = sql_allfetsel($select, 'spip_types_noisettes', $where)) {
     165        if ($information) {
     166                $select = array('type_noisette', $information);
     167        } else {
     168                // Tous les champs sauf le timestamp 'maj' sont renvoyés.
     169                $trouver_table = charger_fonction('trouver_table', 'base');
     170                $table = $trouver_table($from);
     171                $select = array_diff(array_keys($table['field']), array('maj'));
     172        }
     173        if ($types_noisettes = sql_allfetsel($select, $from, $where)) {
    158174                if ($information) {
    159                         $info_noisettes = array_column($info_noisettes, $information, 'type_noisette');
     175                        $types_noisettes = array_column($types_noisettes, $information, 'type_noisette');
    160176                } else {
    161                         $info_noisettes = array_column($info_noisettes, null, 'type_noisette');
    162                 }
    163         }
    164 
    165         return $info_noisettes;
     177                        $types_noisettes = array_column($types_noisettes, null, 'type_noisette');
     178                }
     179        }
     180
     181        return $types_noisettes;
    166182}
    167183
  • _plugins_/noizetier/trunk/noizetier_pipelines.php

    r110837 r110863  
    342342
    343343        if ($exec == 'admin_plugin') {
    344                 // On recharge les pages du noiZetier dont la liste a pu changer. Inutile de forcer un rechargement complet.
     344                // On recharge les pages du noiZetier dont la liste ou l'activité a pu changer. Inutile de forcer un
     345                // rechargement complet.
    345346                include_spip('inc/noizetier_page');
    346347                noizetier_page_charger();
    347                 // On recharge les types de noisettes en forçant un chargement complet. En effet, il est nécessaire de tenir
    348                 // compte des types de noisettes qui nécessitent un plugin donné qui serait activé ou désactivé.
     348                // On recharge les types de noisettes dont la liste ou l'activité a pu changer. Inutile de forcer un
     349                // rechargement complet.
    349350                include_spip('inc/ncore_type_noisette');
    350                 type_noisette_charger('noizetier', true);
     351                type_noisette_charger('noizetier');
    351352
    352353                // Suppression des caches N-Core nécessaires à la compilation des noisettes
  • _plugins_/noizetier/trunk/paquet.xml

    r110843 r110863  
    22        prefix="noizetier"
    33        categorie="maintenance"
    4         version="3.0.11"
     4        version="3.0.12"
    55        etat="dev"
    66        compatibilite="[3.0.0;3.2.*]"
     
    4040        <pipeline nom="insert_head" action="insert_head_css" inclure="noizetier_pipelines.php" />
    4141
    42         <necessite nom="ncore" compatibilite="[0.4.3;[" />
     42        <necessite nom="ncore" compatibilite="[0.4.7;[" />
    4343        <necessite nom="saisies" compatibilite="[2.2.3;[" />
    4444        <necessite nom="verifier" compatibilite="[1.0.5;[" />
Note: See TracChangeset for help on using the changeset viewer.