Browse Source

Séparation de l'API rubrique et renforcement des autorisations sur les champs extras

master
Eric Lupinacci 3 years ago
parent
commit
3fdcb03804
  1. 96
      contrib_autorisations.php
  2. 104
      inc/contrib_rubrique.php

96
contrib_autorisations.php

@ -8,11 +8,12 @@ function contrib_autoriser(){}
/**
* Autorisation de modifier la catégorie d'une rubrique.
* Autorisation de modifier le champ extra catégorie d'une rubrique.
* Il faut :
* - être un webmestre,
* - que la rubrique ait une profondeur égale à 0 ou 1,
* - que le secteur ne soit ni celui du carnet, ni celui de l'aide (apropos).
* - et que si la rubrique est de profondeur 1, le secteur a déjà sa catégorie remplie.
*
* @param $faire
* L'action se nomme modifierextra
@ -38,13 +39,19 @@ function autoriser_rubrique_modifierextra_categorie($faire, $type, $id, $qui, $o
// On vérifie si la rubrique est dans un secteur à exclure (non plugin).
// - le carnet wiki
// - le secteur apropos
include_spip('inc/contrib_rubrique');
if (!rubrique_est_apropos($id_rubrique)
and !rubrique_est_carnet($id_rubrique)) {
// On vérifie la profondeur de la rubrique qui ne peut-être que 0 ou 1.
$profondeur = rubrique_lire_profondeur($id_rubrique);
if (($profondeur !== null)
and ($profondeur < 2)) {
$autoriser = true;
if (($profondeur == 0)
or (($profondeur == 1)
and ($id_parent = rubrique_lire_parent($id_rubrique))
and rubrique_lire_categorie($id_parent))) {
$autoriser = true;
}
}
}
}
@ -55,11 +62,13 @@ function autoriser_rubrique_modifierextra_categorie($faire, $type, $id, $qui, $o
/**
* Autorisation de modifier le préfixe d'une rubrique.
* Autorisation de modifier le champ extra préfixe d'une rubrique.
* Il faut :
* - être un webmestre,
* - que la rubrique ait une profondeur égale à 2,
* - que le secteur ne soit secteur-plugin, donc que sa catégorie soit non vide.
* - que la catégorie de sa rubrique parente soit non vide.
* Cela implique que le préfixe ne peut être positionné que si les rubriques parentes
* ont déjà une catégorie.
*
* @param $faire
* L'action se nomme modifierextra
@ -83,13 +92,14 @@ function autoriser_rubrique_modifierextra_prefixe($faire, $type, $id, $qui, $opt
if (autoriser('webmestre')) {
if ($id_rubrique = intval($id)) {
// On vérifie la profondeur de la rubrique qui ne peut-être que 2.
include_spip('inc/contrib_rubrique');
$profondeur = rubrique_lire_profondeur($id_rubrique);
if (($profondeur !== null)
and ($profondeur == 2)) {
// On vérifie que l'on est bien dans une rubrique-plugin ce qui implique que le secteur ou la rubrique
// parente possède une catégorie non vide.
if ($id_secteur = rubrique_lire_secteur($id_rubrique)
and rubrique_lire_categorie($id_secteur)) {
if ($id_parent = rubrique_lire_parent($id_rubrique)
and rubrique_lire_categorie($id_parent)) {
$autoriser =true;
}
}
@ -98,77 +108,3 @@ function autoriser_rubrique_modifierextra_prefixe($faire, $type, $id, $qui, $opt
return $autoriser;
}
function rubrique_lire_profondeur($id_rubrique) {
static $profondeurs = array();
if (!isset($profondeurs[$id_rubrique])) {
$from = 'spip_rubriques';
$where = array('id_rubrique=' . intval($id_rubrique));
$profondeurs[$id_rubrique] = sql_getfetsel('profondeur', $from, $where);
}
return $profondeurs[$id_rubrique];
}
function rubrique_lire_secteur($id_rubrique) {
$id_secteur = 0;
$from = 'spip_rubriques';
$where = array('id_rubrique=' . intval($id_rubrique));
$id = sql_getfetsel('id_secteur', $from, $where);
if ($id !== null) {
$id_secteur = $id;
}
return $id_secteur;
}
function rubrique_lire_categorie($id_rubrique) {
$categorie = '';
$from = 'spip_rubriques';
$where = array('id_rubrique=' . intval($id_rubrique));
$c = sql_getfetsel('categorie', $from, $where);
if ($c !== null) {
$categorie = $c;
}
return $categorie;
}
function rubrique_est_apropos($id_rubrique) {
$est_apropos = false;
include_spip('inc/config');
$apropos = lire_config('secteur/exclure_sect', array());
if ($apropos and in_array(rubrique_lire_secteur($id_rubrique), $apropos)) {
$est_apropos = true;
}
return $est_apropos;
}
function rubrique_est_carnet($id_rubrique) {
$est_carnet = false;
include_spip('inc/config');
$carnet = lire_config('autorite/espace_wiki', array());
if ($carnet and in_array(rubrique_lire_secteur($id_rubrique), $carnet)) {
$est_carnet = true;
}
return $est_carnet;
}

104
inc/contrib_rubrique.php

@ -0,0 +1,104 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function rubrique_lire_profondeur($id_rubrique) {
static $profondeurs = array();
if (!isset($profondeurs[$id_rubrique])) {
$from = 'spip_rubriques';
$where = array('id_rubrique=' . intval($id_rubrique));
$profondeurs[$id_rubrique] = sql_getfetsel('profondeur', $from, $where);
}
return $profondeurs[$id_rubrique];
}
function rubrique_lire_parent($id_rubrique) {
static $ids_parent = array();
if (!isset($ids_parent[$id_rubrique])) {
$ids_parent[$id_rubrique] = 0;
$from = 'spip_rubriques';
$where = array('id_rubrique=' . intval($id_rubrique));
$id = sql_getfetsel('id_parent', $from, $where);
if ($id !== null) {
$ids_parent[$id_rubrique] = $id;
}
}
return $ids_parent[$id_rubrique];
}
function rubrique_lire_secteur($id_rubrique) {
static $ids_secteur = array();
if (!isset($ids_secteur[$id_rubrique])) {
$ids_secteur[$id_rubrique] = 0;
$from = 'spip_rubriques';
$where = array('id_rubrique=' . intval($id_rubrique));
$id = sql_getfetsel('id_secteur', $from, $where);
if ($id !== null) {
$ids_secteur[$id_rubrique] = $id;
}
}
return $ids_secteur[$id_rubrique];
}
function rubrique_lire_categorie($id_rubrique) {
static $categories = array();
if (!isset($ids_secteur[$id_rubrique])) {
$categories[$id_rubrique] = '';
$from = 'spip_rubriques';
$where = array('id_rubrique=' . intval($id_rubrique));
$categorie = sql_getfetsel('categorie', $from, $where);
if ($categorie !== null) {
$categories[$id_rubrique] = $categorie;
}
}
return $categories[$id_rubrique];
}
function rubrique_est_apropos($id_rubrique) {
$est_apropos = false;
include_spip('inc/config');
$apropos = lire_config('secteur/exclure_sect', array());
if ($apropos and in_array(rubrique_lire_secteur($id_rubrique), $apropos)) {
$est_apropos = true;
}
return $est_apropos;
}
function rubrique_est_carnet($id_rubrique) {
$est_carnet = false;
include_spip('inc/config');
$carnet = lire_config('autorite/espace_wiki', array());
if ($carnet and in_array(rubrique_lire_secteur($id_rubrique), $carnet)) {
$est_carnet = true;
}
return $est_carnet;
}
Loading…
Cancel
Save