From 5a5b784d1e68715862278ebfb52d2fcdd626af9a Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Sun, 21 Jan 2007 12:55:40 +0000
Subject: [PATCH] "petites correction d'autorisation (il y avait des
 restrictions erronees pour les redacteurs) et
 ('creerxxxdans','rubrique',$id_rubrique) systematique"

---
 ecrire/exec/articles_edit.php |  2 +-
 ecrire/exec/breves_edit.php   |  4 ++--
 ecrire/exec/naviguer.php      | 12 +++++------
 ecrire/exec/sites_edit.php    | 17 ++++++++--------
 ecrire/inc/autoriser.php      | 38 +++++++++++++++++++++++++++++++++++
 5 files changed, 56 insertions(+), 17 deletions(-)

diff --git a/ecrire/exec/articles_edit.php b/ecrire/exec/articles_edit.php
index ebbdb1157d..58f6cbe332 100644
--- a/ecrire/exec/articles_edit.php
+++ b/ecrire/exec/articles_edit.php
@@ -33,7 +33,7 @@ function articles_edit($id_article, $id_rubrique,$lier_trad,  $id_version, $new,
 {
 	$commencer_page = charger_fonction('commencer_page', 'inc');
 	if (
-	  ($new AND !autoriser('voir','rubrique',$id_rubrique)) 
+	  ($new AND !autoriser('creerarticledans','rubrique',$id_rubrique)) 
 	  OR (!$new AND (!autoriser('voir', 'article', $id_article)	OR !autoriser('modifier','article', $id_article))) 
 	  ) {
 		echo $commencer_page(_T('info_modifier_titre', array('titre' => $titre)), "naviguer", "rubriques", $id_rubrique);
diff --git a/ecrire/exec/breves_edit.php b/ecrire/exec/breves_edit.php
index 7f8defd030..cbe5178037 100644
--- a/ecrire/exec/breves_edit.php
+++ b/ecrire/exec/breves_edit.php
@@ -25,8 +25,8 @@ function exec_breves_edit_dist()
 	$id_rubrique  = intval(_request('id_rubrique'));
 	$new = _request('new');
 
-	if ( (!$new AND !autoriser('voir','breve',$id_breve))
-		OR ($new AND !autoriser('voir','rubrique',$id_rubrique)) ) {
+	if ( (!$new AND (!autoriser('voir','breve',$id_breve) OR !autoriser('modifier','breve', $id_breve)))
+		OR ($new AND !autoriser('creerbrevedans','rubrique',$id_rubrique)) ) {
 		echo $commencer_page("&laquo; $titre_breve &raquo;", "naviguer", "breves", $id_rubrique);
 		echo "<strong>"._T('avis_acces_interdit')."</strong>";
 		echo fin_page();
diff --git a/ecrire/exec/naviguer.php b/ecrire/exec/naviguer.php
index 4802cf49f4..4c6d204f80 100644
--- a/ecrire/exec/naviguer.php
+++ b/ecrire/exec/naviguer.php
@@ -122,7 +122,7 @@ function exec_naviguer_dist()
 	    
 	fin_cadre_relief();
 
-	echo afficher_enfant_rub($id_rubrique, $flag_editable, false);
+	echo afficher_enfant_rub($id_rubrique, autoriser('creerrubriquedans','rubrique',$id_rubrique), false);
 
 	echo contenu_naviguer($id_rubrique, $id_parent, $ze_logo, $flag_editable);
 
@@ -199,11 +199,11 @@ function raccourcis_naviguer($id_rubrique, $id_parent)
 	
 	$n = spip_num_rows(spip_query("SELECT id_rubrique FROM spip_rubriques LIMIT 1"));
 	if ($n) {
-		if ($id_rubrique > 0)
+		if (autoriser('creerarticledans','rubrique',$id_rubrique))
 		  $res .= icone_horizontale(_T('icone_ecrire_article'), generer_url_ecrire("articles_edit","id_rubrique=$id_rubrique&new=oui"), "article-24.gif","creer.gif", false);
 	
 		$activer_breves = $GLOBALS['meta']["activer_breves"];
-		if ($activer_breves != "non" AND $id_parent == "0" AND $id_rubrique != "0") {
+		if (autoriser('creerbrevedans','rubrique',$id_rubrique,NULL,array('id_parent'=>$id_parent))) {
 		  $res .= icone_horizontale(_T('icone_nouvelle_breve'), generer_url_ecrire("breves_edit","id_rubrique=$id_rubrique&new=oui"), "breve-24.gif","creer.gif", false);
 		}
 	}
@@ -340,7 +340,7 @@ function contenu_naviguer($id_rubrique, $id_parent) {
 
 	  $res .= afficher_articles(_T('info_tous_articles_presents'), array("WHERE" => "statut='publie' AND id_rubrique='$id_rubrique'", 'ORDER BY' => "date DESC"));
 
-	if ($id_rubrique > 0){
+	if (autoriser('creerarticledans','rubrique',$id_rubrique)){
 	  $res .= "<div align='$spip_lang_right'>"
 	  . icone(_T('icone_ecrire_article'), generer_url_ecrire("articles_edit","id_rubrique=$id_rubrique&new=oui"), "article-24.gif", "creer.gif", '', 'non')
 	 . "</div>";
@@ -351,7 +351,7 @@ function contenu_naviguer($id_rubrique, $id_parent) {
 	$res .= afficher_breves('<b>' . _T('icone_ecrire_nouvel_article') . '</b>', array("FROM" => 'spip_breves', 'WHERE' => "id_rubrique='$id_rubrique' AND statut != 'prop' AND statut != 'prepa'", 'ORDER BY' => "date_heure DESC"));
 
 
-	if ((!$id_parent) AND $id_rubrique AND $GLOBALS['meta']["activer_breves"]!="non"){
+	if (autoriser('creerbrevedans','rubrique',$id_rubrique,NULL,array('id_parent'=>$id_parent))){
 	  $res .= "<br /><div align='$spip_lang_right'>"
 	  . icone(_T('icone_nouvelle_breve'), generer_url_ecrire("breves_edit","id_rubrique=$id_rubrique&new=oui"), "breve-24.gif", "creer.gif",'','non')
 	  . "</div>";
@@ -364,7 +364,7 @@ function contenu_naviguer($id_rubrique, $id_parent) {
 		$res .= '<br />' . afficher_sites('<b>' . _T('titre_sites_references_rubrique') . '</b>', array("FROM" => 'spip_syndic', 'WHERE' => "id_rubrique='$id_rubrique' AND statut!='refuse' AND statut != 'prop' AND syndication NOT IN ('off','sus')", 'ORDER BY' => 'nom_site'));
 
 		if ($id_rubrique > 0
-		AND ($GLOBALS['meta']["proposer_sites"]> 0 OR autoriser('publierdans','rubrique',$id_rubrique))) {
+		AND (autoriser('creersitedans','rubrique',$id_rubrique))) {
 	
 		$res .= "<br /><div align='$spip_lang_right'>"
 		. icone(_T('info_sites_referencer'), generer_url_ecrire('sites_edit', "id_rubrique=$id_rubrique&redirect=" . generer_url_retour('naviguer', "id_rubrique=$id_rubrique")), "site-24.gif", "creer.gif",'', 'non')
diff --git a/ecrire/exec/sites_edit.php b/ecrire/exec/sites_edit.php
index 43db3de4ef..6819034dc7 100644
--- a/ecrire/exec/sites_edit.php
+++ b/ecrire/exec/sites_edit.php
@@ -19,14 +19,6 @@ function exec_sites_edit_dist()
 	global $connect_statut, $descriptif, $id_rubrique, $id_secteur, $id_syndic, $new, $nom_site, $syndication, $url_site, $url_syndic, $connect_id_rubrique;
 
 	$result = spip_query("SELECT * FROM spip_syndic WHERE id_syndic=" . intval($id_syndic));
-	$commencer_page = charger_fonction('commencer_page', 'inc');
-	if (!autoriser('voir','site',$id_syndic)
-	  OR !autoriser('modifier','site',$id_syndic)){
-		echo $commencer_page(_T('info_site_reference_2'), "naviguer", "sites", $id_rubrique);
-		echo "<strong>"._T('avis_acces_interdit')."</strong>";
-		echo fin_page();
-		exit;
-	}
 
 	if ($row = spip_fetch_array($result)) {
 		$id_syndic = $row["id_syndic"];
@@ -47,6 +39,15 @@ function exec_sites_edit_dist()
 			$id_rubrique = $row['id_rubrique'];
 		}
 	}
+	$commencer_page = charger_fonction('commencer_page', 'inc');
+	if ( ($new!='oui' AND (!autoriser('voir','site',$id_syndic) OR !autoriser('modifier','site',$id_syndic)))
+	  OR ($new=='oui' AND !autoriser('creersitedans','rubrique',$id_rubrique)) ){
+		echo $commencer_page(_T('info_site_reference_2'), "naviguer", "sites", $id_rubrique);
+		echo "<strong>"._T('avis_acces_interdit')."</strong>";
+		echo fin_page();
+		exit;
+	}
+
 	pipeline('exec_init',array('args'=>array('exec'=>'sites_edit','id_syndic'=>$id_syndic),'data'=>''));
 
 	echo $commencer_page(_T('info_site_reference_2'), "naviguer", "sites", $id_rubrique);
diff --git a/ecrire/inc/autoriser.php b/ecrire/inc/autoriser.php
index 703180e7e8..a4f5a6b202 100644
--- a/ecrire/inc/autoriser.php
+++ b/ecrire/inc/autoriser.php
@@ -121,6 +121,44 @@ function autoriser_rubrique_publierdans_dist($faire, $type, $id, $qui, $opt) {
 		);
 }
 
+// Autoriser a creer un article dans la rubrique $id
+function autoriser_rubrique_creerrubriquedans_dist($faire, $type, $id, $qui, $opt) {
+	return
+		autoriser('voir','rubrique',$id)
+		AND autoriser('publierdans','rubrique',$id);
+}
+
+// Autoriser a creer un article dans la rubrique $id
+function autoriser_rubrique_creerarticledans_dist($faire, $type, $id, $qui, $opt) {
+	return
+		$id
+		AND autoriser('voir','rubrique',$id);
+}
+
+// Autoriser a creer une breve dans la rubrique $id
+function autoriser_rubrique_creerbrevedans_dist($faire, $type, $id, $qui, $opt) {
+	$s = spip_query(
+	"SELECT id_parent FROM spip_rubriques WHERE id_rubrique="._q($id));
+	$r = spip_fetch_array($s);
+	return
+		$id
+		AND ($r['id_parent']==0)
+		AND ($GLOBALS['meta']["activer_breves"]!="non")
+		AND autoriser('voir','rubrique',$id);
+}
+
+// Autoriser a creer un site dans la rubrique $id
+function autoriser_rubrique_creersitedans_dist($faire, $type, $id, $qui, $opt) {
+	return
+		$id
+		AND autoriser('voir','rubrique',$id)
+		AND $GLOBALS['meta']['activer_sites'] != 'non'
+		AND (
+			$qui['statut']=='0minirezo'
+			OR ($qui['statut']=='1comite' AND $GLOBALS['meta']["proposer_sites"]>=1)
+			OR ($qui['statut']=='6forum' AND $GLOBALS['meta']["proposer_sites"]>=2) );
+}
+
 // Autoriser a modifier la rubrique $id
 // = publierdans rubrique $id
 // http://doc.spip.org/@autoriser_rubrique_modifier_dist
-- 
GitLab