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
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+21 −6
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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') {
+28 −25
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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,34 +60,33 @@ 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();
	$rubriques = array();
	for (;;) {
		$r = array();
		while ($row = spip_fetch_array($result)) {
			$id_rubrique = $row['id_rubrique'];
				$r[] = $connect_id_rubrique[$id_rubrique] = $id_rubrique;
			$r[]= $rubriques[$id_rubrique] = $id_rubrique;
		}
			if (!$r) break;
		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)");
	}
}
}

// Un nouvel inscrit prend son statut definitif a la 1ere connexion
// Le statut a ete memorise dans bio (cf formulaire_inscription)
@@ -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'];