Changeset 118711 in spip-zone


Ignore:
Timestamp:
Nov 19, 2019, 8:15:48 PM (3 weeks ago)
Author:
eric@…
Message:

Inverser les tests dans le pipeline post_boucle et ajouts de tests dans la démo.
A priori ça semble bien fonctionner

Location:
_plugins_/archive_objet/trunk
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/archive_objet/trunk/archobjet_pipelines.php

    r118708 r118711  
    142142/**
    143143 * Filtrer les boucles pour ne pas afficher les objets archivés par défaut sauf si un critère
    144  * achive explicite ou conditionnel existe.
    145  *
    146  * @pipeline pre_boucle
     144 * d'archivage explicite ou conditionnel existe.
     145 *
     146 * @pipeline post_boucle
    147147 *
    148148 * @param Boucle $boucle
     
    163163                $tables_autorisees = lire_config('archobjet/objets_archivables', array());
    164164                if (in_array($table, $tables_autorisees)) {
     165                        // On cherche un critère d'archivage explicite parmi :
     166                        // - {est_archive = 0} ou {est_archivee = 1}
     167                        // - {archive} ou {!archive}
     168                        // Si il existe un tel critère, alors on n'exclut pas les archives par défaut, on laisse le traitement
     169                        // du critère explicite.
    165170                        $critere_archive_explicite = false;
    166                         // On boucle sur chaque condition where et on cherche si un critère est_archive conditionnel
    167                         // existe : dans ce cas il ne faut pas rajouter le critère d'exclusion des archives.
    168                         $conditions = $boucle->where;
    169                         foreach ($conditions as $_cle => $_condition) {
     171                        $criteres = $boucle->criteres;
     172                        foreach ($criteres as $_critere) {
    170173                                if (
    171                                         (strpos($_condition[0], '?') !== false)
    172                                         and (strpos($_condition[1], 'est_archive') !== false)
     174                                        ($_critere->op == 'archive')
     175                                        or (!empty($_critere->param[0][0]->texte)
     176                                                and ($_critere->param[0][0]->texte == 'est_archive')
     177                                        )
    173178                                ) {
    174                                         // On met à jour cette condition pour que l'absence de est_archive dans l'env
    175                                         // implique l'ajout de est_archive=1.
    176                                         $where_est_article[0] = $_condition[0];
    177                                         $where_est_article[1] = $_condition[1];
    178                                         $where_est_article[2] = array("'='", "'est_archive'", 0);
    179                                         $where_est_article[3] = $_condition[3][3];
    180                                         $boucle->where[$_cle] = $where_est_article;
    181179                                        $critere_archive_explicite = true;
    182180                                        break;
     
    184182                        }
    185183
    186                         // On boucle sur chaque critère et on cherche les critères :
    187                         // - {est_archive = 0} ou {est_archivee = 1}
    188                         // - {archive} ou {!archive}
    189                         // et on sort au premier trouvé.
     184                        // Si on a trouvé aucun critère explicite, il se peut qu'il y ait un critère conditionnel du type {id_?} :
     185                        // dans ce cas, la condition a déjà été calculée mais pas de la bonne façon.
     186                        // -> Il faut donc la corriger et ne pas rajouter la condition par défaut.
    190187                        if (!$critere_archive_explicite) {
    191                                 $criteres = $boucle->criteres;
    192                                 foreach ($criteres as $_critere) {
     188                                $conditions = $boucle->where;
     189                                foreach ($conditions as $_cle => $_condition) {
    193190                                        if (
    194                                                 ($_critere->op == 'archive')
    195                                                 or (!empty($_critere->param[0][0]->texte)
    196                                                         and ($_critere->param[0][0]->texte == 'est_archive')
    197                                                 )
     191                                                (strpos($_condition[0], '?') !== false)
     192                                                and (strpos($_condition[1], 'est_archive') !== false)
    198193                                        ) {
     194                                                // On met à jour cette condition pour que l'absence de est_archive dans l'env
     195                                                // implique l'ajout de est_archive=0.
     196                                                // TODO : faire évoluer le core pour calculer cette condition avec une fonction spéficique.
     197                                                $where_est_article[0] = $_condition[0];
     198                                                $where_est_article[1] = $_condition[1];
     199                                                $where_est_article[2] = array("'='", "'est_archive'", 0);
     200                                                $where_est_article[3] = $_condition[3][3];
     201                                                $boucle->where[$_cle] = $where_est_article;
    199202                                                $critere_archive_explicite = true;
    200203                                                break;
     
    202205                                }
    203206
    204                                 // Aucun critère d'archivage explicite, on peut filtrer la boucle en excluant les archives.
     207                                // Aucun critère d'archivage explicite ni conditionnel : on peut filtrer la boucle en excluant les archives.
    205208                                if (!$critere_archive_explicite) {
    206                                         // On vérifie aussi si on a pas passé est_archive via le modificateur id_
    207209                                        $boucle->where[] = array("'='", "'est_archive'", 0);
    208210                                }
  • _plugins_/archive_objet/trunk/demo/archobjet.html

    r118708 r118711  
    2323<ul>
    2424<BOUCLE_articles_pub_archives(ARTICLES){archive}{par id_article}{pagination 20}>
    25 <li>#ID_ARTICLE - #TITRE[(#EST_ARCHIVE|=={1}|oui) (Archive)]</li>
     25<li>#ID_ARTICLE - #STATUT - #TITRE[(#EST_ARCHIVE|=={1}|oui) (Archive)]</li>
    2626</BOUCLE_articles_pub_archives>
    2727</ul>
     
    3838<ul>
    3939<BOUCLE_articles_non_archives(ARTICLES){!archive}{par id_article}{pagination 20}>
    40 <li>#ID_ARTICLE - #TITRE[(#EST_ARCHIVE|=={0}|oui) (Non archive)]</li>
     40<li>#ID_ARTICLE - #STATUT - #TITRE[(#EST_ARCHIVE|=={0}|oui) (Non archive)]</li>
    4141</BOUCLE_articles_non_archives>
    4242</ul>
     
    5353<ul>
    5454<BOUCLE_articles_publies(ARTICLES){est_archive>=0}{par id_article}{pagination 20}>
    55         <li>#ID_ARTICLE - #TITRE[ (#EST_ARCHIVE|?{\(Archive\), \(Non archive\)})]</li>
     55        <li>#ID_ARTICLE - #STATUT - #TITRE[ (#EST_ARCHIVE|?{\(Archive\), \(Non archive\)})]</li>
    5656</BOUCLE_articles_publies>
    5757</ul>
     
    6060Aucun article publi&eacute;
    6161<//B_articles_publies>
     62
     63
     64<h3>Articles publi&eacute;s avec condition d'archivage variable {id_?}</h3>
     65
     66<B_articles_variables>
     67(#GRAND_TOTAL)
     68#ANCRE_PAGINATION
     69<ul>
     70<BOUCLE_articles_variables(ARTICLES){id_?}{par id_article}{pagination 20}>
     71        <li>#ID_ARTICLE - #STATUT - #TITRE[ (#EST_ARCHIVE|?{\(Archive\), \(Non archive\)})]</li>
     72</BOUCLE_articles_variables>
     73</ul>
     74<div class="pagination">#PAGINATION</div>
     75</B_articles_variables>
     76Aucun article publi&eacute;
     77<//B_articles_variables>
     78
     79
     80<h3>Articles publi&eacute;s avec condition d'archivage conditionnelle {est_archive?}</h3>
     81
     82<B_articles_conditionnels>
     83(#GRAND_TOTAL)
     84#ANCRE_PAGINATION
     85<ul>
     86<BOUCLE_articles_conditionnels(ARTICLES){est_archive?}{par id_article}{pagination 20}>
     87        <li>#ID_ARTICLE - #STATUT - #TITRE[ (#EST_ARCHIVE|?{\(Archive\), \(Non archive\)})]</li>
     88</BOUCLE_articles_conditionnels>
     89</ul>
     90<div class="pagination">#PAGINATION</div>
     91</B_articles_conditionnels>
     92Aucun article publi&eacute;
     93<//B_articles_conditionnels>
  • _plugins_/archive_objet/trunk/paquet.xml

    r118708 r118711  
    2626        <pipeline nom="affiche_milieu" inclure="archobjet_pipelines.php" />
    2727
    28         <menu nom="objets_archives" titre="archobjet:objets_archives_titre" parent="menu_administration" icone="images/archive-16.png" action="objets_archives" />
     28        <menu nom="objets_archives" titre="archobjet:objets_archives_titre" parent="menu_administration" icone="images/archiver-16.png" action="objets_archives" />
    2929</paquet>
  • _plugins_/archive_objet/trunk/prive/squelettes/contenu/objets_archives.html

    r118708 r118711  
    1010]
    1111</BOUCLE_archives>
     12#BOITE_OUVRIR{'', notice}
     13#BOITE_FERMER
    1214</B_archives>
Note: See TracChangeset for help on using the changeset viewer.