Changeset 110863 in spip-zone for _plugins_/noizetier/trunk/inc


Ignore:
Timestamp:
Jun 25, 2018, 3:18:00 PM (13 months 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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _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
Note: See TracChangeset for help on using the changeset viewer.