Skip to content
Extraits de code Groupes Projets
Valider 40bb3067 rédigé par esj's avatar esj
Parcourir les fichiers

Tâche #605: l'accès en écriture de la table des rubriques est déporté dans le...

Tâche #605: l'accès en écriture de la table des rubriques est déporté dans le répertoire action. En prime, un admin restreint cliquant sur le bouton de création de rubrique (et non de sous-rubrique) crééra une sous-rubrique dans sa premiere rubrique plutot que d'etre rejeté. Et filtrage plus systématique des mauvais déplacements.
parent 1c7144c4
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -307,6 +307,7 @@ ecrire/action/documenter.php -text
ecrire/action/editer_article.php -text
ecrire/action/editer_auteurs.php -text
ecrire/action/editer_mot.php -text
ecrire/action/editer_rubrique.php -text
ecrire/action/ical.php -text
ecrire/action/iconifier.php -text
ecrire/action/instituer_article.php -text
......
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2006 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/actions');
include_spip('inc/rubriques');
// http://doc.spip.org/@action_editer_article_dist
function action_editer_rubrique_dist() {
$var_f = charger_fonction('controler_action_auteur', 'inc');
$var_f();
$arg = _request('arg');
if (!preg_match(";^(\d+),(\w*),(\d+)$;", $arg, $r)) {
spip_log("action_editer_rubrique_dist $arg pas compris");
} else {
list($x, $old_parent, $new, $id_rubrique) = $r;
$id_parent = intval(_request('id_parent'));
if ($new == 'oui')
$id_rubrique = enregistre_creer_naviguer($id_parent);
enregistre_modifier_naviguer($id_rubrique,
$id_parent,
_request('titre'),
_request('texte'),
_request('descriptif'),
$old_parent);
calculer_rubriques();
calculer_langues_rubriques();
// invalider les caches marques de cette rubrique
include_spip('inc/invalideur');
suivre_invalideur("id='id_rubrique/$id_rubrique'");
}
$redirect = parametre_url(urldecode(_request('redirect')),
'id_rubrique', $id_rubrique, '&');
redirige_par_entete($redirect);
}
// http://doc.spip.org/@enregistre_creer_naviguer
function enregistre_creer_naviguer($id_parent)
{
include_spip('base/abstract_sql');
return spip_abstract_insert("spip_rubriques",
"(titre, id_parent)",
"('"._T('item_nouvelle_rubrique')."', '$id_parent')");
}
// http://doc.spip.org/@enregistre_modifier_naviguer
function enregistre_modifier_naviguer($id_rubrique, $id_parent, $titre, $texte, $descriptif, $old_parent=0)
{
// interdiction de deplacer vers ou a partir d'une rubrique
// qu'on n'administre pas.
$parent = '';
if ($id_parent != $old_parent) {
include_spip('inc/auth');
$r = auth_rubrique($GLOBALS['auteur_session']['id_auteur'], $GLOBALS['auteur_session']['statut']);
if (is_int($r)
OR (is_array($r)
AND $r[$id_parent]
AND (!$old_parent OR $r[$old_parent])))
$parent = "id_parent=" . intval($id_parent) . ", ";
else {
spip_log("deplacement de $id_rubrique vers $id_parent refuse a " . $GLOBALS['auteur_session']['id_auteur'] . ' '. $GLOBALS['auteur_session']['statut']);
$id_parent = '';
}
}
// si c'est une rubrique-secteur contenant des breves, ne deplacer
// que si $confirme_deplace == 'oui', et changer l'id_rubrique des
// breves en question
if (_request('confirme_deplace') == 'oui'
AND $parent) {
$id_secteur = spip_fetch_array(spip_query("SELECT id_secteur FROM spip_rubriques WHERE id_rubrique=$id_parent"));
if ($id_secteur= $id_secteur['id_secteur'])
spip_query("UPDATE spip_breves SET id_rubrique=$id_secteur WHERE id_rubrique=$id_rubrique");
} else
$parent = '';
if ($id_parent == $id_rubrique) $parent = ''; // au fou
if (_request('champs_extra')) {
include_spip('inc/extra');
$extra = extra_recup_saisie("rubriques");
}
else $extra = '';
spip_query("UPDATE spip_rubriques SET " . $parent . "titre=" . spip_abstract_quote($titre) . ", descriptif=" . spip_abstract_quote($descriptif) . ", texte=" . spip_abstract_quote($texte) . (!$extra ? '' : ", extra = " . spip_abstract_quote($extra) . "") . " WHERE id_rubrique=$id_rubrique");
if ($GLOBALS['meta']['activer_moteur'] == 'oui') {
include_spip("inc/indexation");
marquer_indexer('spip_rubriques', $id_rubrique);
}
propager_les_secteurs();
}
?>
......@@ -17,51 +17,15 @@ include_spip('inc/texte');
include_spip('inc/rubriques');
include_spip('inc/actions');
include_spip('inc/forum');
include_spip('inc/mots');
include_spip('inc/documents');
include_spip('base/abstract_sql');
charger_generer_url();
// http://doc.spip.org/@exec_naviguer_dist
function exec_naviguer_dist()
{
global $new, $id_parent, $id_rubrique, $spip_display, $champs_extra, $cherche_mot, $select_groupe, $descriptif, $texte, $titre;
global $id_rubrique, $spip_display, $cherche_mot, $select_groupe;
$id_rubrique = intval($id_rubrique);
$id_parent = intval($id_parent);
if ($id_parent == $id_rubrique && $id_parent) exit;
$flag_editable = (acces_rubrique($id_parent) OR acces_rubrique($id_rubrique)); // id_parent necessaire en cas de creation de sous-rubrique
if ($flag_editable AND $new) {
if ($new == 'oui')
$id_rubrique = enregistre_creer_naviguer($id_parent);
enregistre_modifier_naviguer($id_rubrique,
$id_parent,
$titre,
$texte,
$descriptif
);
calculer_rubriques();
calculer_langues_rubriques();
// invalider les caches marques de cette rubrique
include_spip('inc/invalideur');
suivre_invalideur("id='id_rubrique/$id_rubrique'");
// pour avoir id_rubrique dans l'URL
if ($new == 'oui') {
redirige_par_entete(generer_url_ecrire('naviguer', 'id_rubrique='.$id_rubrique, true));
}
}
//
// recuperer les infos sur cette rubrique
//
$row=spip_fetch_array(spip_query("SELECT * FROM spip_rubriques WHERE id_rubrique='$id_rubrique'"));
$row = spip_fetch_array(spip_query("SELECT * FROM spip_rubriques WHERE id_rubrique='$id_rubrique'"));
if ($row) {
$id_parent=$row['id_parent'];
$titre=$row['titre'];
......@@ -69,13 +33,15 @@ function exec_naviguer_dist()
$texte=$row['texte'];
$statut = $row['statut'];
$extra = $row["extra"];
} else $statut = $titre = $descriptif = $texte = $extra = '';
} elseif ($id_rubrique)
die();
else $statut = $titre = $descriptif = $texte = $extra = '';
if ($id_rubrique == 0) $ze_logo = "racine-site-24.gif";
else if ($id_parent == 0) $ze_logo = "secteur-24.gif";
else $ze_logo = "rubrique-24.gif";
///// debut de la page
$flag_editable = acces_rubrique($id_rubrique);
pipeline('exec_init',array('args'=>array('exec'=>'naviguer','id_rubrique'=>$id_rubrique),'data'=>''));
......@@ -87,8 +53,6 @@ function exec_naviguer_dist()
'',
$id_rubrique);
//////// parents
debut_grand_cadre();
if ($id_rubrique > 0) echo afficher_hierarchie($id_parent);
......@@ -126,7 +90,7 @@ function exec_naviguer_dist()
montre_naviguer($id_rubrique, $titre, $descriptif, $ze_logo, $flag_editable);
if ($champs_extra AND $extra) {
if ($extra) {
include_spip('inc/extra');
extra_affichage($extra, "rubriques");
}
......@@ -143,20 +107,10 @@ function exec_naviguer_dist()
echo "\n<p><div align='justify'><font size=3 face='Verdana,Arial,Sans,sans-serif'>", justifier(propre($texte)), "&nbsp;</font></div>";
}
//
// Langue de la rubrique
//
langue_naviguer($id_rubrique, $id_parent, $flag_editable);
fin_cadre_relief();
//
// Gerer les modifications...
//
contenu_naviguer($id_rubrique, $id_parent, $ze_logo, $flag_editable);
echo fin_page();
......@@ -506,41 +460,4 @@ function bouton_supprimer_naviguer($id_rubrique, $id_parent, $ze_logo, $flag_edi
}
}
// http://doc.spip.org/@enregistre_creer_naviguer
function enregistre_creer_naviguer($id_parent)
{
return spip_abstract_insert("spip_rubriques",
"(titre, id_parent)",
"('"._T('item_nouvelle_rubrique')."', '$id_parent')");
}
// http://doc.spip.org/@enregistre_modifier_naviguer
function enregistre_modifier_naviguer($id_rubrique, $id_parent, $titre, $texte, $descriptif)
{
// si c'est une rubrique-secteur contenant des breves, ne deplacer
// que si $confirme_deplace == 'oui', et changer l'id_rubrique des
// breves en question
if ($GLOBALS['confirme_deplace'] == 'oui'
AND $id_parent > 0) {
$id_secteur = spip_fetch_array(spip_query("SELECT id_secteur FROM spip_rubriques WHERE id_rubrique=$id_parent"));
if ($id_secteur= $id_secteur['id_secteur'])
spip_query("UPDATE spip_breves SET id_rubrique=$id_secteur WHERE id_rubrique=$id_rubrique");
} else
$id_parent = 0;
if ($GLOBALS['champs_extra']) {
include_spip('inc/extra');
$extra = extra_recup_saisie("rubriques");
}
else $extra = '';
spip_query("UPDATE spip_rubriques SET " . (acces_rubrique($id_parent) ? "id_parent=$id_parent," : "") . "titre=" . spip_abstract_quote($titre) . ", descriptif=" . spip_abstract_quote($descriptif) . ", texte=" . spip_abstract_quote($texte) . (!$extra ? '' : ", extra = " . spip_abstract_quote($extra) . "") . "WHERE id_rubrique=$id_rubrique");
if ($GLOBALS['meta']['activer_moteur'] == 'oui') {
include_spip("inc/indexation");
marquer_indexer('spip_rubriques', $id_rubrique);
}
propager_les_secteurs();
}
?>
......@@ -18,32 +18,37 @@ include_spip('inc/rubriques');
// http://doc.spip.org/@exec_rubriques_edit_dist
function exec_rubriques_edit_dist()
{
global
$champs_extra,
$connect_statut,
$id_parent,
$id_rubrique,
$new,
$options;
if ($new == "oui") {
if (($connect_statut=='0minirezo') AND acces_rubrique($id_parent)) {
$id_parent = intval($id_parent);
global
$champs_extra,
$connect_statut,
$id_parent,
$id_rubrique,
$new,
$options;
if ($connect_statut !='0minirezo') {
echo _T('avis_acces_interdit');
exit;
}
if ($new == "oui") {
$id_rubrique = 0;
$titre = filtrer_entites(_T('titre_nouvelle_rubrique'));
$onfocus = " onfocus=\"if(!antifocus){this.value='';antifocus=true;}\"";
$descriptif = "";
$texte = "";
}
else {
echo _T('avis_acces_interdit');
exit;
}
}
else {
$id_rubrique = intval($id_rubrique);
$result = spip_query("SELECT * FROM spip_rubriques WHERE id_rubrique='$id_rubrique'");
while ($row = spip_fetch_array($result)) {
$id_parent = intval($id_parent);
if (!acces_rubrique($id_parent)) {
$id_parent = $GLOBALS['connect_id_rubrique'][0];
}
} else {
$id_rubrique = intval($id_rubrique);
$row = spip_fetch_array(spip_query("SELECT * FROM spip_rubriques WHERE id_rubrique='$id_rubrique'"));
if (!$row) exit;
$id_parent = $row['id_parent'];
$titre = $row['titre'];
$descriptif = $row['descriptif'];
......@@ -51,126 +56,115 @@ else {
$id_secteur = $row['id_secteur'];
$extra = $row["extra"];
}
}
pipeline('exec_init',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>''));
debut_page(_T('info_modifier_titre', array('titre' => $titre)), "naviguer", "rubriques", '', $id_rubrique);
if ($id_parent == 0) $ze_logo = "secteur-24.gif";
else $ze_logo = "rubrique-24.gif";
if ($id_parent == 0) $logo_parent = "racine-site-24.gif";
else {
$id_secteur = spip_fetch_array(spip_query("SELECT id_secteur FROM spip_rubriques WHERE id_rubrique='$id_parent'"));
$id_secteur = $id_secteur['id_secteur'];
if ($id_parent_== $id_secteur)
$logo_parent = "secteur-24.gif";
else $logo_parent = "rubrique-24.gif";
}
debut_grand_cadre();
echo afficher_hierarchie($id_parent);
fin_grand_cadre();
pipeline('exec_init',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>''));
debut_page(_T('info_modifier_titre', array('titre' => $titre)), "naviguer", "rubriques", '', $id_rubrique);
debut_gauche();
//////// parents
if ($id_parent == 0) $ze_logo = "secteur-24.gif";
else $ze_logo = "rubrique-24.gif";
if ($id_parent == 0) $logo_parent = "racine-site-24.gif";
else {
$id_secteur = spip_fetch_array(spip_query("SELECT id_secteur FROM spip_rubriques WHERE id_rubrique='$id_parent'"));
$id_secteur = $id_secteur['id_secteur'];
if ($id_parent_== $id_secteur)
$logo_parent = "secteur-24.gif";
else $logo_parent = "rubrique-24.gif";
}
debut_grand_cadre();
echo pipeline('affiche_gauche',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>''));
creer_colonne_droite();
echo pipeline('affiche_droite',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>''));
debut_droite();
debut_cadre_formulaire();
echo "\n<table cellpadding=0 cellspacing=0 border=0 width='100%'>";
echo "<tr width='100%'>";
echo "<td>";
echo afficher_hierarchie($id_parent);
if ($id_rubrique) icone(_T('icone_retour'), generer_url_ecrire("naviguer","id_rubrique=$id_rubrique"), $ze_logo, "rien.gif");
else icone(_T('icone_retour'), generer_url_ecrire("naviguer","id_rubrique=$id_parent"), $ze_logo, "rien.gif");
fin_grand_cadre();
echo "</td>";
echo "<td>". http_img_pack('rien.gif', " ", "width='10'") . "</td>\n";
echo "<td width='100%'>";
echo _T('info_modifier_rubrique');
gros_titre($titre);
echo "</td></tr></table>";
echo "<p>";
debut_gauche();
echo generer_url_post_ecrire("naviguer",($id_rubrique ? "id_rubrique=$id_rubrique" : ""));
echo pipeline('affiche_gauche',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>''));
creer_colonne_droite();
echo pipeline('affiche_droite',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>''));
debut_droite();
$titre = entites_html($titre);
debut_cadre_formulaire();
echo _T('entree_titre_obligatoire');
echo "<INPUT TYPE='text' CLASS='formo' NAME='titre' VALUE=\"$titre\" SIZE='40' $onfocus><P>";
echo "\n<table cellpadding=0 cellspacing=0 border=0 width='100%'>";
echo "<tr width='100%'>";
echo "<td>";
if ($id_rubrique) icone(_T('icone_retour'), generer_url_ecrire("naviguer","id_rubrique=$id_rubrique"), $ze_logo, "rien.gif");
else icone(_T('icone_retour'), generer_url_ecrire("naviguer","id_rubrique=$id_parent"), $ze_logo, "rien.gif");
debut_cadre_couleur("$logo_parent", false, '', _T('entree_interieur_rubrique').aide ("rubrub"));
echo "</td>";
echo "<td>". http_img_pack('rien.gif', " ", "width='10'") . "</td>\n";
echo "<td width='100%'>";
echo _T('info_modifier_rubrique');
gros_titre($titre);
echo "</td></tr></table>";
echo "<p>";
// selecteur de rubriques
$selecteur_rubrique = charger_fonction('chercher_rubrique', 'inc');
$restreint = ($GLOBALS['statut'] == 'publie');
echo $selecteur_rubrique($id_parent, 'rubrique', $restreint, $id_rubrique);
$titre = entites_html($titre);
$selecteur_rubrique = charger_fonction('chercher_rubrique', 'inc');
$form = _T('entree_titre_obligatoire')
. "<input type='text' class='formo' name='titre' value=\"$titre\" size='40' $onfocus><P>"
. debut_cadre_couleur("$logo_parent", true, '', _T('entree_interieur_rubrique').aide ("rubrub"))
. $selecteur_rubrique($id_parent, 'rubrique', !$connect_toutes_rubriques, $id_rubrique);
// si c'est une rubrique-secteur contenant des breves, demander la
// confirmation du deplacement
$contient_breves = spip_fetch_array(spip_query("SELECT COUNT(*) AS cnt FROM spip_breves WHERE id_rubrique='$id_rubrique' LIMIT 1"));
$contient_breves = $contient_breves['cnt'];
if ($contient_breves > 0) {
$scb = ($contient_breves>1? 's':'');
echo "<div><font size='2'><input type='checkbox' name='confirme_deplace'
value='oui' id='confirme-deplace'
><label for='confirme-deplace'>&nbsp;"
._T('avis_deplacement_rubrique',
array('contient_breves' => $contient_breves,
'scb' => $scb))
."</font></label></div>\n";
} else
echo "<input type='hidden' name='confirme_deplace' value='oui' />\n";
fin_cadre_couleur();
echo "<P>";
if ($options == "avancees" OR $descriptif) {
echo "<B>"._T('texte_descriptif_rapide')."</B><BR>";
echo _T('entree_contenu_rubrique')."<BR>";
echo "<TEXTAREA NAME='descriptif' CLASS='forml' ROWS='4' COLS='40' wrap=soft>";
echo entites_html($descriptif);
echo "</TEXTAREA><P>\n";
}
else {
echo "<INPUT TYPE='Hidden' NAME='descriptif' VALUE=\"".entites_html($descriptif)."\" />";
$contient_breves = spip_fetch_array(spip_query("SELECT COUNT(*) AS cnt FROM spip_breves WHERE id_rubrique='$id_rubrique' LIMIT 1"));
$contient_breves = $contient_breves['cnt'];
if ($contient_breves > 0) {
$scb = ($contient_breves>1? 's':'');
$form .= "<div><font size='2'><input type='checkbox' name='confirme_deplace' value='oui' id='confirme-deplace'><label for='confirme-deplace'>&nbsp;"
. _T('avis_deplacement_rubrique',
array('contient_breves' => $contient_breves,
'scb' => $scb))
. "</font></label></div>\n";
} else
$form .= "<input type='hidden' name='confirme_deplace' value='oui' />\n";
$form .= fin_cadre_couleur(true)
. "<p>";
if ($options == "avancees" OR $descriptif) {
$form .= "<b>"._T('texte_descriptif_rapide')."</b><br />"
. _T('entree_contenu_rubrique')."<br />"
. "<textarea name='descriptif' class='forml' rows='4' cols='40' wrap=soft>"
. entites_html($descriptif)
. "</textarea><p>\n";
} else {
$form .= "<input type='hidden' name='descriptif' value=\"".entites_html($descriptif)."\" />";
}
echo "<B>"._T('info_texte_explicatif')."</B>";
echo aide ("raccourcis");
echo "<BR><TEXTAREA NAME='texte' ROWS='15' CLASS='formo' COLS='40' wrap=soft>";
echo entites_html($texte);
echo "</TEXTAREA>\n";
$form .= "<B>"._T('info_texte_explicatif')."</B>"
. aide ("raccourcis")
. "<br /><textarea name='texte' rows='15' class='formo' cols='40' wrap=soft>"
. entites_html($texte)
. "</textarea>\n";
if ($champs_extra) {
include_spip('inc/extra');
extra_saisie($extra, 'rubriques', $id_secteur);
}
echo "<input type='hidden' name='new' value='",
(($new == "oui") ? 'oui' : 'non'),
"' />";
$form .= "<input type='hidden' name='new' value='"
. (($new == "oui") ? 'oui' : 'non')
. "' />"
. "\n<p align='right'><input type='submit' value='"
. _T('bouton_enregistrer')
. "' class='fondo' />\n</p>";
$retour = generer_url_ecrire("naviguer");
$arg = intval($id_parent) . ",$new," . intval($id_rubrique);
echo "\n<p align='right'><input type='submit' value='"._T('bouton_enregistrer')."' CLASS='fondo' />\n</p></form>";
echo generer_action_auteur("editer_rubrique", $arg, $retour, $form, " method='post'");
fin_cadre_formulaire();
fin_cadre_formulaire();
echo fin_page();
echo fin_page();
}
?>
......@@ -201,7 +201,7 @@ function selecteur_rubrique_ajax($id_rubrique, $type, $restreint, $idem=0) {
## la verification est faite a l'arrivee des donnees (Fil)
if ($idem)
$exclus = "&exclus=$idem&rac=oui";
$exclus = "&exclus=$idem&racine=" . ($restreint ? 'non' : 'oui');
if ($id_rubrique)
list($titre_parent) = spip_fetch_array(spip_query("SELECT titre FROM spip_rubriques WHERE id_rubrique=$id_rubrique"), SPIP_NUM);
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter