Autoriser un auteur s'il est présent dans la zone d'une rubrique #SPIP (acces restreint)

8 January 2017

Une petite fonction d’autorisation sympas : autoriser un auteur (peu importe son statut) à publier dans une rubrique, s’il est dans la zone de cette rubrique. :

<?php
function autoriser_accesrestreint_publiedans($faire, $type, $id, $qui, $opt) {
    include_spip('accesrestreint_fonctions');
    // On récupère les zones de la rubrique
    $zones = accesrestreint_zones_rubrique_et_hierarchie($id);
    foreach ($zones as $zone) {
        // Est-ce que l'auteur appartient à la zone ?
        if (accesrestreint_acces_zone($zone, $qui['id_auteur'])) {
            return true;
        }
    }

    return false;
}

Ensuite, on peut surcharger les autorisations de SPIP pour qu’elles tiennent compte de cette fonction :

<?php
/**
 * Surcharge de l'autorisation de publication dans les rubriques. On va prendre
 * en compte l'accès restreint. Si un auteur est dans la zone de la rubrique, on
 * l'autorise à publier
 */
function autoriser_rubrique_publierdans($faire, $type, $id, $qui, $opt) {
    if (autoriser('publiedans', 'accesrestreint', $id, $qui, $opt)) {
        return true;
    }

    return autoriser_rubrique_publierdans_dist($faire, $type, $id, $qui, $opt);
}

/**
 * Surcharge de l'autorisation de création d'article pour prendre en compte
 * l'autorisation d'accesrestreint
 */
function autoriser_rubrique_creerarticledans($faire, $type, $id, $qui, $opt) {

    if (autoriser('publiedans', 'accesrestreint', $id, $qui, $opt)) {
        return true;
    }

    return autoriser_rubrique_creerarticledans_dist($faire, $type, $id, $qui, $opt);
}