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

Depuis la mise sous forme d'action (tache #605) de la modification d'un...

Depuis la mise sous forme d'action (tache #605) de la modification d'un article, il était possible à un admin restreint de publier un article dans n'importe quelle rubrique, après l'avoir publié dans une des siennes. A présent cette tentative mettre l'article comme "soumis à publication" dans la rubrique visée.

A noter aussi un petit bug qui empechait un article déplacé d'hériter de langue de sa nouvelle rubrique si celle-ci l'exigeait.
parent 22a280a0
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -100,6 +100,10 @@ function articles_set($id_article, $new) {
function revisions_articles ($id_article, $new, $c = false) {
global $flag_revisions;
$row = spip_fetch_array(spip_query("SELECT statut FROM spip_articles WHERE id_article=$id_article"));
$statut = $row['statut'];
$nouveau_statut = false;
// unifier $texte en cas de texte trop long
trop_longs_articles();
......@@ -126,8 +130,21 @@ function revisions_articles ($id_article, $new, $c = false) {
AND (spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_rubriques WHERE id_rubrique=$id_rubrique")))
AND (spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_articles WHERE id_article=$id_article AND id_rubrique!=$id_rubrique")))) {
$champs['id_rubrique'] = $id_rubrique;
}
// si l'article est publie
// et que le demandeur n'est pas admin de la rubrique
// repasser l'article en statut 'propose'.
if ($statut == 'publie') {
if ($GLOBALS['auteur_session']['statut'] != '0minirezo')
$nouveau_statut = $statut = 'prop';
else {
include_spip('inc/auth');
$r = auth_rubrique($GLOBALS['auteur_session']['id_auteur'], $GLOBALS['auteur_session']['statut']);
if (is_array($r) AND !$r[$id_rubrique])
$nouveau_statut = $statut = 'prop';
}
}
}
// recuperer les extras (incompatible avec $c pour l'instant)
if ($GLOBALS['champs_extra']
AND !is_array($c)) {
......@@ -146,7 +163,6 @@ function revisions_articles ($id_article, $new, $c = false) {
)
);
// Stockage des versions : creer une premier version si non-existante
if (($GLOBALS['meta']["articles_versions"]=='oui') && $flag_revisions) {
include_spip('inc/revisions');
......@@ -184,11 +200,10 @@ function revisions_articles ($id_article, $new, $c = false) {
signale_edition ($id_article, $GLOBALS['auteur_session']['id_auteur'], 'article');
}
// Si on deplace l'article
// - propager les secteurs
// - changer sa langue (si heritee)
if (isset($champ['id_rubrique'])) {
if (isset($champs['id_rubrique'])) {
propager_les_secteurs();
$row = spip_fetch_array(spip_query("SELECT lang, langue_choisie FROM spip_articles WHERE id_article=$id_article"));
......@@ -201,14 +216,14 @@ function revisions_articles ($id_article, $new, $c = false) {
if ($langue_new != $langue_old)
spip_query("UPDATE spip_articles SET lang = '$langue_new' WHERE id_article = $id_article");
}
if ($nouveau_statut)
spip_query("UPDATE spip_articles SET statut = '$statut' WHERE id_article = $id_article");
}
//
// Post-modifications
//
$row = spip_fetch_array(spip_query("SELECT statut FROM spip_articles WHERE id_article=$id_article"));
$statut = $row['statut'];
// Invalider les caches
if ($statut == 'publie') {
......
......@@ -30,7 +30,7 @@ function acces_restreint_rubrique($id_rubrique) {
global $connect_id_rubrique;
global $connect_statut;
return ($connect_statut == "0minirezo" AND isset($connect_id_rubrique[$id_rubrique]));
return (isset($connect_id_rubrique[$id_rubrique]));
}
// http://doc.spip.org/@acces_mots
......@@ -60,32 +60,31 @@ function acces_article($id_article)
return ($s == 'prepa' OR $s == 'prop' OR $s == 'poubelle');
}
// Retourne les droits de publication d'un auteur selon le codage suivant:
// - le tableau de ses rubriques si c'est un admin restreint
// - 0 si c'est un admin de plein droit
// - la chaine indiquant son statut s'il n'est pas admin
// http://doc.spip.org/@auth_rubrique
function auth_rubrique()
function auth_rubrique($id_auteur, $statut)
{
global $connect_statut, $connect_id_auteur, $connect_toutes_rubriques, $connect_id_rubrique;
if ($statut != '0minirezo') return $statut;
if ($connect_statut != '0minirezo') {
$connect_toutes_rubriques = false;
$connect_id_rubrique = array();
return;
}
$result = spip_query("SELECT id_rubrique FROM spip_auteurs_rubriques WHERE id_auteur=$id_auteur AND id_rubrique!='0'");
$result = spip_query("SELECT id_rubrique FROM spip_auteurs_rubriques WHERE id_auteur=$connect_id_auteur AND id_rubrique!='0'");
if (!spip_num_rows($result)) return 0;
$connect_toutes_rubriques = (@spip_num_rows($result) == 0);
if (!$connect_toutes_rubriques) {
$connect_id_rubrique = array();
for (;;) {
$r = array();
while ($row = spip_fetch_array($result)) {
$id_rubrique = $row['id_rubrique'];
$r[] = $connect_id_rubrique[$id_rubrique] = $id_rubrique;
}
if (!$r) break;
$r = join(',', $r);
$result = spip_query("SELECT id_rubrique FROM spip_rubriques WHERE id_parent IN ($r) AND id_rubrique NOT IN ($r)");
$rubriques = array();
for (;;) {
$r = array();
while ($row = spip_fetch_array($result)) {
$id_rubrique = $row['id_rubrique'];
$r[]= $rubriques[$id_rubrique] = $id_rubrique;
}
if (!$r) return $rubriques;
$r = join(',', $r);
$result = spip_query("SELECT id_rubrique FROM spip_rubriques WHERE id_parent IN ($r) AND id_rubrique NOT IN ($r)");
}
}
......@@ -109,8 +108,7 @@ function acces_statut($id_auteur, $statut, $bio)
function inc_auth_dist() {
global $auth_can_disconnect, $ignore_auth_http, $ignore_remote_user;
global $prefs, $connect_id_auteur, $connect_login;
global $connect_statut, $connect_toutes_rubriques;
global $connect_statut, $connect_toutes_rubriques, $connect_id_rubrique;
//
// Initialiser variables (eviter hacks par URL)
//
......@@ -175,8 +173,13 @@ function inc_auth_dist() {
$connect_id_auteur = $row['id_auteur'];
$connect_statut = acces_statut($connect_id_auteur, $row['statut'], $row['bio']);
if ($connect_statut == '0minirezo') auth_rubrique();
else if ($connect_statut != '1comite') return auth_arefaire();
$r = auth_rubrique($connect_id_auteur, $connect_statut);
if (is_string($r)) {
if ($r != '1comite') return auth_arefaire();
} elseif (is_array($r))
$connect_id_rubrique = $r;
else $connect_toutes_rubriques = true;
$prefs = unserialize($row['prefs']);
$connect_login = $row['login'];
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter