From 09d438c80e8dedc135ef6bf399867f4c1c472dd1 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Mon, 22 Jan 2007 10:08:06 +0000
Subject: [PATCH] retablir les bons droits de creation article/breve/site a
 partir de l'accueil Quand la rubrique par defaut n'est pas autorisee, on
 cherche un des secteurs autorises et on le prend par defaut si aucun secteur
 n'est autorise, il y a plus grand chose a faire ...

---
 ecrire/exec/articles_edit.php | 18 ++++++------------
 ecrire/exec/breves_edit.php   | 35 +++++++++++++++++++++--------------
 ecrire/exec/sites_edit.php    |  7 +++++++
 ecrire/inc/article_select.php |  7 +++++++
 4 files changed, 41 insertions(+), 26 deletions(-)

diff --git a/ecrire/exec/articles_edit.php b/ecrire/exec/articles_edit.php
index 58f6cbe332..c4640cb334 100644
--- a/ecrire/exec/articles_edit.php
+++ b/ecrire/exec/articles_edit.php
@@ -31,9 +31,13 @@ function exec_articles_edit_dist()
 // http://doc.spip.org/@articles_edit
 function articles_edit($id_article, $id_rubrique,$lier_trad,  $id_version, $new, $config_fonc)
 {
+	$row = article_select($id_article ? $id_article : $new, $id_rubrique,  $lier_trad, $id_version);
+	$id_article = $row['id_article'];
+	$id_rubrique = $row['id_rubrique'];
+	
 	$commencer_page = charger_fonction('commencer_page', 'inc');
-	if (
-	  ($new AND !autoriser('creerarticledans','rubrique',$id_rubrique)) 
+	if (!$row
+	  OR ($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);
@@ -44,16 +48,6 @@ function articles_edit($id_article, $id_rubrique,$lier_trad,  $id_version, $new,
 
 	pipeline('exec_init',array('args'=>array('exec'=>'articles_edit','id_article'=>$id_article),'data'=>''));
 	
-	$row = article_select($id_article ? $id_article : $new, $id_rubrique,  $lier_trad, $id_version);
-	if (!$row) 
-	      {include_spip('minipres');
-		echo minipres();
-		exit;
-	      }
-
-	$id_article = $row['id_article'];
-	$id_rubrique = $row['id_rubrique'];
-
 	if ($id_version) $titre.= ' ('._T('version')." $id_version)";
 	else $titre = $row['titre'];
 
diff --git a/ecrire/exec/breves_edit.php b/ecrire/exec/breves_edit.php
index cbe5178037..75005ed8e4 100644
--- a/ecrire/exec/breves_edit.php
+++ b/ecrire/exec/breves_edit.php
@@ -25,8 +25,27 @@ function exec_breves_edit_dist()
 	$id_rubrique  = intval(_request('id_rubrique'));
 	$new = _request('new');
 
-	if ( (!$new AND (!autoriser('voir','breve',$id_breve) OR !autoriser('modifier','breve', $id_breve)))
-		OR ($new AND !autoriser('creerbrevedans','rubrique',$id_rubrique)) ) {
+	// appel du script a la racine, faut choisir 
+	// on prend le dernier secteur cree
+	// dans une liste restreinte si admin restreint
+
+	if (!$id_rubrique) {
+		$in = !$connect_id_rubrique ? ''
+		  : (' AND id_rubrique IN (' . join(',', $connect_id_rubrique) . ')');
+		$row_rub = spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0$in ORDER BY id_rubrique DESC LIMIT 1"));		
+		$id_rubrique = $row_rub['id_rubrique'];
+		if (!autoriser('creerbrevedans','rubrique',$id_rubrique )){
+			// manque de chance, la rubrique n'est pas autorisee, on cherche un des secteurs autorises
+			$res = spip_query("SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0");
+			while (!autoriser('creerbrevedans','rubrique',$id_rubrique ) && $row_rub = spip_fetch_array($res)){
+				$id_rubrique = $row_rub['id_rubrique'];
+			}
+		}
+	}
+	
+	$commencer_page = charger_fonction('commencer_page', 'inc');
+	if ( ($new!='oui' AND (!autoriser('voir','breve',$id_breve) OR !autoriser('modifier','breve', $id_breve)))
+		OR ($new=='oui' 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();
@@ -66,7 +85,6 @@ function exec_breves_edit_dist()
 
 pipeline('exec_init',array('args'=>array('exec'=>'breves_edit','id_breve'=>$id_breve),'data'=>''));
 
-$commencer_page = charger_fonction('commencer_page', 'inc');
 echo $commencer_page(_T('titre_page_breves_edit', array('titre' => $titre)), "naviguer", "breves", $id_rubrique);
 
 
@@ -132,17 +150,6 @@ if ($connect_statut=="0minirezo" OR $statut=="prop" OR $new == "oui") {
 
 	$form .= debut_cadre_couleur("$logo_parent", true, "",_T('entree_interieur_rubrique').aide ("brevesrub"));
 
-	// appel du script a la racine, faut choisir 
-	// on prend le dernier secteur cree
-	// dans une liste restreinte si admin restreint
-
-	if (!$id_rubrique) {
-		$in = !$connect_id_rubrique ? ''
-		  : (' AND id_rubrique IN (' . join(',', $connect_id_rubrique) . ')');
-		$row_rub = spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0$in ORDER BY id_rubrique DESC LIMIT 1"));		
-		$id_rubrique = $row_rub['id_rubrique'];
-	}
-
 	// selecteur de rubrique (en general pas d'ajax car toujours racine)
 	$chercher_rubrique = charger_fonction('chercher_rubrique', 'inc');
 	$form .= $chercher_rubrique($id_rubrique, 'breve', ($statut == 'publie'));
diff --git a/ecrire/exec/sites_edit.php b/ecrire/exec/sites_edit.php
index 6819034dc7..9fa7e2eede 100644
--- a/ecrire/exec/sites_edit.php
+++ b/ecrire/exec/sites_edit.php
@@ -38,6 +38,13 @@ function exec_sites_edit_dist()
 			$row = spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_rubriques$in ORDER BY id_rubrique DESC LIMIT 1"));		
 			$id_rubrique = $row['id_rubrique'];
 		}
+		if (!autoriser('creersitedans','rubrique',$id_rubrique )){
+			// manque de chance, la rubrique n'est pas autorisee, on cherche un des secteurs autorises
+			$res = spip_query("SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0");
+			while (!autoriser('creersitedans','rubrique',$id_rubrique ) && $row_rub = spip_fetch_array($res)){
+				$id_rubrique = $row_rub['id_rubrique'];
+			}
+		}
 	}
 	$commencer_page = charger_fonction('commencer_page', 'inc');
 	if ( ($new!='oui' AND (!autoriser('voir','site',$id_syndic) OR !autoriser('modifier','site',$id_syndic)))
diff --git a/ecrire/inc/article_select.php b/ecrire/inc/article_select.php
index 436b0a052f..f1f4540b02 100644
--- a/ecrire/inc/article_select.php
+++ b/ecrire/inc/article_select.php
@@ -70,6 +70,13 @@ function article_select($id_article, $id_rubrique=0, $lier_trad=0, $id_version=0
 			$row_rub = spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_rubriques ORDER BY id_rubrique DESC LIMIT 1"));
 			$row['id_rubrique'] = $id_rubrique = $row_rub['id_rubrique'];
 		}
+		if (!autoriser('creerarticledans','rubrique',$row['id_rubrique'] )){
+			// manque de chance, la rubrique n'est pas autorisee, on cherche un des secteurs autorises
+			$res = spip_query("SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0");
+			while (!autoriser('creerarticledans','rubrique',$row['id_rubrique'] ) && $row_rub = spip_fetch_array($res)){
+				$row['id_rubrique'] = $row_rub['id_rubrique'];
+			}
+		}
 	}
 
 	// recuperer le secteur, pour affecter les bons champs extras
-- 
GitLab