Valider 8e06eb84 rédigé par esj's avatar esj
Parcourir les fichiers

Petite incommodité dans l'implémentation de autoriser(): quand on déclare par...

Petite incommodité dans l'implémentation de autoriser(): quand on déclare par programme les rubriques restreintes d'un admin, cette fonction calcule leur liste à son premier appel et les mémorise dans une statique. Du coup les rubriques déclarées ensuite ne seront pas considérées comme administrées dans la suite du script.

Pour y remédier, la statique est reportée dans la fonction  liste_rubriques_auteur qui admet un 2e argument optionnel forçant son recalcul pour cet auteur.

Aussi dans ce dépot: allègement du code des puces, par evacuation de acces_restreint_rubrique.
parent 87080856
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+16 −15
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -40,7 +40,6 @@ if (!function_exists('autoriser')) {
//
// http://doc.spip.org/@autoriser_dist
function autoriser_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL) {
	static $restreint = array();

	// Qui ? auteur_session ?
	if ($qui === NULL)
@@ -50,17 +49,11 @@ function autoriser_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL) {
		$qui = spip_fetch_array($s);
	}

	// Admins restreints, les verifier ici (pas generique mais...)
	// Par convention $restreint est un array des rubriques autorisees
	// (y compris leurs sous-rubriques), vide si admin complet
	if (is_array($qui)
	AND $qui['statut'] == '0minirezo'
	AND !isset($qui['restreint'])) {
		if (!isset($restreint[$qui['id_auteur']])) {
			$restreint[$qui['id_auteur']] = liste_rubriques_auteur($qui['id_auteur']);
		}
		$qui['restreint'] = $restreint[$qui['id_auteur']];
	}
	// Admins restreints, on construit ici (pas generique mais...)
	// le tableau de toutes leurs rubriques (y compris les sous-rubriques)
	if (is_array($qui))
		$qui['restreint'] = liste_rubriques_auteur($qui['id_auteur']);

	if (_DEBUG_AUTORISER) spip_log("autoriser $faire $type $id ($qui[nom]) ?");

	// Chercher une fonction d'autorisation explicite
@@ -443,9 +436,16 @@ function autoriser_document_voir_dist($faire, $type, $id, $qui, $opt) {

// Renvoie la liste des rubriques liees a cet auteur, independamment de son
// statut (pour les admins restreints, il faut donc aussi verifier statut)
// Memorise le resultat dans un tableau statique indexe par les id_auteur.
// On peut reinitialiser un element en passant un 2e argument non vide
// http://doc.spip.org/@liste_rubriques_auteur
function liste_rubriques_auteur($id_auteur) {
	$id_auteur = intval($id_auteur);
function liste_rubriques_auteur($id_auteur, $raz=false) {
	static $restreint = array();

	if (!$id_auteur = intval($id_auteur)) return array();
	if ($raz) unset($restreint[$id_auteur]);
	elseif (isset($restreint[$id_auteur])) return $restreint[$id_auteur];

	$q = spip_query("SELECT id_rubrique FROM spip_auteurs_rubriques WHERE id_auteur=$id_auteur AND id_rubrique!=0");

	// Recurrence sur les sous-rubriques
@@ -467,7 +467,8 @@ function liste_rubriques_auteur($id_auteur) {
	if ($GLOBALS['auteur_session']['id_auteur'] == $id_auteur)
		$GLOBALS['auteur_session']['restreint'] = $rubriques;
			
	return $rubriques;

	return $restreint[$id_auteur] = $rubriques;
}

?>
+17 −23
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -200,26 +200,21 @@ function puce_statut_breve($id, $statut, $id_rubrique, $type) {

// http://doc.spip.org/@puce_statut_site
function puce_statut_site($id_site, $statut, $id_rubrique, $type){

	$droit = autoriser('publierdans','rubrique',$id_rubrique) ?
	  'anim' : 'breve';
	switch ($statut) {
		case 'publie': 
				if (acces_restreint_rubrique($id_rubrique))
					$puce = 'puce-verte-anim.gif';
				else
					$puce='puce-verte-breve.gif';
			$puce = 'puce-verte-' . $droit .'.gif';
			$title = _T('info_site_reference');
			break;
		case 'prop':
				if (acces_restreint_rubrique($id_rubrique))
					$puce = 'puce-orange-anim.gif';
				else
					$puce='puce-orange-breve.gif';
			$puce = 'puce-orange-' . $droit .'.gif';
			$title = _T('info_site_attente');
			break;
		case 'refuse':
				if (acces_restreint_rubrique($id_rubrique))
					$puce = 'puce-poubelle-anim.gif';
				else
					$puce='puce-poubelle-breve.gif';
		default:
			$puce = 'puce-poubelle-' . $droit .'.gif';
			$title = _T('info_site_refuse');
			break;
	}
@@ -239,9 +234,8 @@ function puce_statut_syndic_article($id_syndic, $statut, $id_rubrique, $type){
				$puce = 'puce-rouge.gif';
		}
	
		else if ($statut == "off") { // feed d'un site en mode "miroir"
		else  // i.e. $statut=="off" feed d'un site en mode "miroir"
				$puce = 'puce-rouge-anim.gif';
		}
	
		return http_img_pack($puce, $statut, "class='puce'");
}