Changeset 118708 in spip-zone


Ignore:
Timestamp:
Nov 19, 2019, 4:58:34 PM (3 weeks ago)
Author:
eric@…
Message:

Une version qui fonctionne mais qui peut surement être améliorée

Location:
_plugins_/archive_objet/trunk
Files:
5 edited

Legend:

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

    r118675 r118708  
    141141}
    142142/**
    143  * Filtrer les boucles pour ne pas afficher les objets archivés.
     143 * 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.
    144145 *
    145146 * @pipeline pre_boucle
     
    151152 *         La boucle dont la condition `where` a été modifiée ou pas.
    152153 */
    153 function archobjet_pre_boucle($boucle){
     154function archobjet_post_boucle($boucle){
    154155
    155156        // Initialisation de la table sur laquelle porte le critère
     
    162163                $tables_autorisees = lire_config('archobjet/objets_archivables', array());
    163164                if (in_array($table, $tables_autorisees)) {
     165                        $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) {
     170                                if (
     171                                        (strpos($_condition[0], '?') !== false)
     172                                        and (strpos($_condition[1], 'est_archive') !== false)
     173                                ) {
     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;
     181                                        $critere_archive_explicite = true;
     182                                        break;
     183                                }
     184                        }
     185
    164186                        // On boucle sur chaque critère et on cherche les critères :
    165                         // - {est_article = 0} ou {est_article = 1}
     187                        // - {est_archive = 0} ou {est_archivee = 1}
    166188                        // - {archive} ou {!archive}
    167189                        // et on sort au premier trouvé.
    168                         $criteres = $boucle->criteres;
    169                         $critere_archive_explicite = false;
    170                         foreach($criteres as $_critere){
    171                                 if (
    172                                         ($_critere->op == 'archive')
    173                                         or (!empty($_critere->param[0][0]->texte)
    174                                                 and ($_critere->param[0][0]->texte == 'est_archive')
    175                                         )
    176                                 ) {
    177                                         $critere_archive_explicite = true;
    178                                         break;
    179                                 }
    180                         }
    181 
    182                         // Aucun critère d'archivage explicite, on peut filtrer la boucle en excluant les archives.
    183190                        if (!$critere_archive_explicite) {
    184                                 $boucle->where[] = array("'='", "'est_archive'", 0);
     191                                $criteres = $boucle->criteres;
     192                                foreach ($criteres as $_critere) {
     193                                        if (
     194                                                ($_critere->op == 'archive')
     195                                                or (!empty($_critere->param[0][0]->texte)
     196                                                        and ($_critere->param[0][0]->texte == 'est_archive')
     197                                                )
     198                                        ) {
     199                                                $critere_archive_explicite = true;
     200                                                break;
     201                                        }
     202                                }
     203
     204                                // Aucun critère d'archivage explicite, on peut filtrer la boucle en excluant les archives.
     205                                if (!$critere_archive_explicite) {
     206                                        // On vérifie aussi si on a pas passé est_archive via le modificateur id_
     207                                        $boucle->where[] = array("'='", "'est_archive'", 0);
     208                                }
    185209                        }
    186210                }
     
    189213        return $boucle;
    190214}
     215
     216function archobjet_lister_champs_selection_conditionnelle($flux) {
     217
     218        if (isset($flux['args']['table'])
     219                and $flux['args']['table']
     220        ) {
     221                $table = $flux['args']['table'];
     222
     223                // Vérifier que la table fait bien partie de la liste autorisée à utiliser l'archivage.
     224                include_spip('inc/config');
     225                $tables_autorisees = lire_config('archobjet/objets_archivables', array());
     226                if (in_array($table, $tables_autorisees)) {
     227                        $flux['data'][] = 'est_archive';
     228                }
     229        }
     230
     231        return $flux;
     232}
     233
     234
  • _plugins_/archive_objet/trunk/demo/archobjet.html

    r118674 r118708  
    5252#ANCRE_PAGINATION
    5353<ul>
    54 <BOUCLE_articles_publies(ARTICLES){par id_article}{pagination 20}>
     54<BOUCLE_articles_publies(ARTICLES){est_archive>=0}{par id_article}{pagination 20}>
    5555        <li>#ID_ARTICLE - #TITRE[ (#EST_ARCHIVE|?{\(Archive\), \(Non archive\)})]</li>
    5656</BOUCLE_articles_publies>
  • _plugins_/archive_objet/trunk/lang/archobjet_fr.php

    r118675 r118708  
    1616
    1717        // O
    18         'objets_archives_page_titre' => 'Liste des archives',
     18        'objets_archives_titre' => 'Liste des archives',
    1919        'objet_archiver' => 'Archiver',
    2020        'objet_desarchiver' => 'Retirer des archives ',
  • _plugins_/archive_objet/trunk/paquet.xml

    r118674 r118708  
    2121        <pipeline nom="declarer_tables_objets_sql" inclure="base/archobjet_declarations.php" />
    2222        <pipeline nom="autoriser" inclure="archobjet_pipelines.php" />
    23         <pipeline nom="pre_boucle" inclure="archobjet_pipelines.php" />
     23        <pipeline nom="post_boucle" inclure="archobjet_pipelines.php" />
     24        <pipeline nom="lister_champs_selection_conditionnelle" inclure="archobjet_pipelines.php" />
    2425        <pipeline nom="boite_infos" inclure="archobjet_pipelines.php" />
    2526        <pipeline nom="affiche_milieu" inclure="archobjet_pipelines.php" />
     27
     28        <menu nom="objets_archives" titre="archobjet:objets_archives_titre" parent="menu_administration" icone="images/archive-16.png" action="objets_archives" />
    2629</paquet>
  • _plugins_/archive_objet/trunk/prive/squelettes/contenu/objets_archives.html

    r118675 r118708  
    11[(#AUTORISER{archivage}|sinon_interdire_acces)]
    22<h1 class="grostitre">
    3         <:archobjet:objets_archives_page_titre:>
     3        <:archobjet:objets_archives_titre:>
    44</h1>
    55<B_archives>
     
    77[<h3>[(#CLE|objet_info{texte_objets}|_T)]</h3>
    88        (#VALEUR|trouver_fond{prive/objets/liste/}|oui)
    9                 #INCLURE{fond=prive/objets/liste/#VALEUR, env}
     9                <INCLURE{fond=prive/objets/liste/#VALEUR, est_archive=1, env} />
    1010]
    1111</BOUCLE_archives>
Note: See TracChangeset for help on using the changeset viewer.