Changeset 110055 in spip-zone for _plugins_/acces_restreint


Ignore:
Timestamp:
May 1, 2018, 1:47:39 PM (3 months ago)
Author:
tcharlss@…
Message:

v 3.15.13 : une nouvelle fonction générique 'accesrestreint_objet_restreint' pour tester si un objet est restreint ou pas, qui utilise les fonctions spécifiques si elles existent (donc les 2 fonctions existantes pour les articles et rubriques), et qui fait appel à un pipeline 'accesrestreint_objet_restreint' à la fin pour permettre aux plugins de modifier le résultat. Ajout également d'un nouveau pipeline 'accesrestreint_objets_accessibles_where' à la fin des fonctions qui renvoient le code de la condition where pour la liste des objets accessibles, afin de permettre aux plugins de modifier le résultat. Cas d'utilisation : on a ponctuellement des articles situés dans des zones restreintes, mais qui ne doivent pas être restreints. Ils sont marqués ave un mot-clé, les 2 pipelines permettent de les rendres accessibles en prenant en compte ce mot-clé.

Location:
_plugins_/acces_restreint/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/acces_restreint/trunk/accesrestreint_fonctions.php

    r98151 r110055  
    2424function accesrestreint_securise_squelette($letexte) {
    2525        return '';
     26}
     27
     28/**
     29 * filtre de test générique pour savoir si l'acces à un objet est restreint
     30 *
     31 * @uses accesrestreint_article_restreint
     32 * @uses accesrestreint_rubrique_restreinte
     33 *
     34 * @param string $objet
     35 * @param int $id_objet
     36 * @param int $id_auteur
     37 * @return bool
     38 */
     39function accesrestreint_objet_restreint($id_objet, $objet, $id_auteur = null) {
     40
     41        // S'il existe une fonction spécifique pour le type d'objet, on l'utilise
     42        if ($fonction = "accesrestreint_${objet}_restreint"
     43                and function_exists($fonction)
     44        ) {
     45                $restreint = $fonction($id_objet, $id_auteur);
     46
     47        // Sinon du générique
     48        } else {
     49
     50                include_spip('inc/accesrestreint');
     51                include_spip('base/objets');
     52                $table_objet_sql = table_objet_sql($objet);
     53                $champs = objet_info($objet, 'field');
     54
     55                // Si l'objet est dans une rubrique, vérifier qu'elle ne soit pas exclue
     56                $rubrique_exclue = false;
     57                if (isset($champs['id_rubrique'])) {
     58                        include_spip('public/quete');
     59                        $objet_lang = quete_parent_lang($table_objet_sql, $id_objet);
     60                        $rubrique_exclue = @in_array(
     61                                $objet_lang['id_rubrique'],
     62                                accesrestreint_liste_rubriques_exclues(!test_espace_prive(), $id_auteur)
     63                        );
     64                }
     65
     66                // Le test
     67                $restreint =
     68                        $rubrique_exclue
     69                        or @in_array($id_objet, accesrestreint_liste_objets_exclus($objet, !test_espace_prive(), $id_auteur));
     70        }
     71
     72        // Permettre aux plugins de modifier le résultat
     73        $restreint = pipeline(
     74                'accesrestreint_objet_restreint',
     75                array(
     76                        'args' => array(
     77                                'objet'     => $objet,
     78                                'id_objet'  => $id_objet,
     79                                'id_auteur' => $id_auteur,
     80                        ),
     81                        'data' => $restreint,
     82                )
     83        );
     84
     85        return $restreint;
    2686}
    2787
  • _plugins_/acces_restreint/trunk/paquet.xml

    r108297 r110055  
    22        prefix="accesrestreint"
    33        categorie="auteur"
    4         version="3.15.12"
     4        version="3.15.13"
    55        etat="test"
    66        compatibilite="[3.0.0;3.2.*]"
     
    4040        <!-- Après avoir analysé le doc, et juste avant son affichage -->
    4141        <pipeline nom="accesrestreint_afficher_document" action="" />
     42        <!-- Code de la condition pour filtrer les objets accessibles  -->
     43        <pipeline nom="accesrestreint_objets_accessibles_where" action="" />
     44        <!-- Test pour savoir si un objet est restreint -->
     45        <pipeline nom="accesrestreint_objet_restreint" action="" />
    4246
    4347        <menu nom="zones" titre="accesrestreint:icone_menu_config" parent="menu_publication" icone="images/zone-16.png" />
  • _plugins_/acces_restreint/trunk/public/accesrestreint.php

    r103177 r110055  
    135135                $_publique = '!test_espace_prive()';
    136136        }
    137 
    138         return "sql_in('$primary', accesrestreint_liste_rubriques_exclues($_publique), '$not')";
     137        $where = "sql_in('$primary', accesrestreint_liste_rubriques_exclues($_publique), '$not')";
     138
     139        // Permettre aux plugins de modifier la condition
     140        $where = pipeline('accesrestreint_objets_accessibles_where',
     141                array(
     142                        'args' => array(
     143                                'table_objet' => 'rubriques',
     144                                'primary'   => $primary,
     145                                'publique' => $_publique,
     146                                'not'       => $not,
     147                        ),
     148                        'data' => $where
     149                )
     150        );
     151
     152        return $where;
    139153}
    140154
     
    149163        $where =  "array('NOT IN','$primary','(SELECT * FROM('.sql_get_select('zzza.id_article','spip_articles as zzza',".accesrestreint_rubriques_accessibles_where('zzza.id_rubrique', '', $_publique).", '', '', '', '',\$connect).') AS subquery)')";
    150164        $where = "array('AND', $where, ".accesrestreint_objets_accessibles_where('articles', $primary, 'not', $_publique).")";
     165
     166        // Permettre aux plugins de modifier la condition
     167        $where = pipeline('accesrestreint_objets_accessibles_where',
     168                array(
     169                        'args' => array(
     170                                'table_objet' => 'articles',
     171                                'primary'     => $primary,
     172                                'publique'   => $_publique,
     173                                'not'         => null,
     174                        ),
     175                        'data' => $where
     176                )
     177        );
     178
    151179        return $where;
    152180        #return array('SUBSELECT','id_article','spip_articles',array(".accesrestreint_rubriques_accessibles_where('id_rubrique').")))";
     
    163191        $where = "array('NOT IN','$primary','(SELECT * FROM('.sql_get_select('zzzb.id_breve','spip_breves as zzzb',".accesrestreint_rubriques_accessibles_where('zzzb.id_rubrique', '', $_publique).", '', '', '', '',\$connect).') AS subquery)')";
    164192        $where = "array('AND', $where, ".accesrestreint_objets_accessibles_where('breves', $primary, 'not', $_publique).")";
     193
     194        // Permettre aux plugins de modifier la condition
     195        $where = pipeline('accesrestreint_objets_accessibles_where',
     196                array(
     197                        'args' => array(
     198                                'table_objet' => 'breves',
     199                                'primary'     => $primary,
     200                                'publique'   => $_publique,
     201                                'not'         => null,
     202                        ),
     203                        'data' => $where
     204                )
     205        );
     206
    165207        return $where;
    166208        #return "array('IN','$primary',array('SUBSELECT','id_breve','spip_breves',array(".accesrestreint_rubriques_accessibles_where('id_rubrique').")))";
     
    177219        $where = "array('NOT IN','$primary','(SELECT * FROM('.sql_get_select('zzzs.id_syndic','spip_syndic as zzzs',".accesrestreint_rubriques_accessibles_where('zzzs.id_rubrique', '', $_publique).", '', '', '', '',\$connect).') AS subquery)')";
    178220        $where = "array('AND', $where, ".accesrestreint_objets_accessibles_where('syndic', $primary, 'not', $_publique).")";
     221
     222        // Permettre aux plugins de modifier la condition
     223        $where = pipeline('accesrestreint_objets_accessibles_where',
     224                array(
     225                        'args' => array(
     226                                'table_objet' => 'syndic_articles',
     227                                'primary'     => $primary,
     228                                'publique'   => $_publique,
     229                                'not'         => null,
     230                        ),
     231                        'data' => $where
     232                )
     233        );
     234
    179235        return $where;
    180236        #return "array('IN','$primary',array('SUBSELECT','id_syndic','spip_syndic',array(".accesrestreint_rubriques_accessibles_where('id_rubrique').")))";
     
    200256        $where = "array('OR',$where,sql_in('zzzf.objet',\"'rubrique','article','breve'\",'NOT',\$connect))";
    201257
     258        // Permettre aux plugins de modifier la condition
     259        $where = pipeline('accesrestreint_objets_accessibles_where',
     260                array(
     261                        'args' => array(
     262                                'table_objet' => 'forums',
     263                                'primary'     => $primary,
     264                                'publique'   => $_publique,
     265                                'not'         => null,
     266                        ),
     267                        'data' => $where
     268                )
     269        );
     270
    202271        return "array('IN','$primary','(SELECT * FROM('.sql_get_select('zzzf.id_forum','spip_forum as zzzf',array($where),'','','','',\$connect).') AS subquery)')";
    203272}
     
    209278 *
    210279 * @param string $primary
     280 * @param mixed $_publique
    211281 * @return string
    212282 */
     
    224294        )";
    225295
     296        // Permettre aux plugins de modifier la condition
     297        $where = pipeline('accesrestreint_objets_accessibles_where',
     298                array(
     299                        'args' => array(
     300                                'table_objet' => 'documents',
     301                                'primary'     => $primary,
     302                                'publique'   => $_publique,
     303                                'not'         => null,
     304                        ),
     305                        'data' => $where
     306                )
     307        );
     308
    226309        return $where;
    227310}
Note: See TracChangeset for help on using the changeset viewer.