/**
 * Instituer une rubrique (changer son parent)
 *
 * Change le parent d'une rubrique, si les autorisations sont correctes,
 * mais n'accèpte pas de déplacer une rubrique dans une de ses filles, tout de même !
 *
 * Recalcule les secteurs, les langues et déplace les brèves au passage.
 *
 * @param int $id_rubrique
 *     Identifiant de la rubrique à instituer
 * @param array $c
 *     Informations pour l'institution (id_rubrique, confirme_deplace)
 * @global array $GLOBALS ['visiteur_session']
 * @return string
 *     Chaîne vide : aucune erreur
 *     Chaîne : Texte du message d'erreur
 */
function rubrique_instituer($id_rubrique, $c)
{
    // traitement de la rubrique parente
    // interdiction de deplacer vers ou a partir d'une rubrique
    // qu'on n'administre pas.
    if (null !== ($id_parent = $c['id_parent'])) {
        $id_parent = intval($id_parent);
        $filles = calcul_branche_in($id_rubrique);
        if (strpos(",{$id_parent},", ",{$filles},") !== false) {
            spip_log("La rubrique {$id_rubrique} ne peut etre fille de sa descendante {$id_parent}");
        } else {
            $s = sql_fetsel("id_parent, statut", "spip_rubriques", "id_rubrique={$id_rubrique}");
            $old_parent = $s['id_parent'];
            if (!($id_parent != $old_parent and autoriser('publierdans', 'rubrique', $id_parent) and autoriser('creerrubriquedans', 'rubrique', $id_parent) and autoriser('publierdans', 'rubrique', $old_parent))) {
                if ($s['statut'] != 'new') {
                    spip_log("deplacement de {$id_rubrique} vers {$id_parent} refuse a " . $GLOBALS['visiteur_session']['id_auteur'] . ' ' . $GLOBALS['visiteur_session']['statut']);
                }
            } elseif (editer_rubrique_breves($id_rubrique, $id_parent, $c)) {
                $statut_ancien = $s['statut'];
                sql_updateq('spip_rubriques', array('id_parent' => $id_parent), "id_rubrique={$id_rubrique}");
                propager_les_secteurs();
                // Deplacement d'une rubrique publiee ==> chgt general de leur statut
                if ($statut_ancien == 'publie') {
                    calculer_rubriques_if($old_parent, array('id_rubrique' => $id_parent), $statut_ancien);
                } elseif (!$statut_ancien || $old_parent != $id_parent) {
                    effacer_meta("date_calcul_rubriques");
                }
                calculer_langues_rubriques();
            }
        }
    }
    return '';
    // pas d'erreur
}
示例#2
0
function instituer_rubrique($id_rubrique, $c) {
	// traitement de la rubrique parente
	// interdiction de deplacer vers ou a partir d'une rubrique
	// qu'on n'administre pas.

	$statut_ancien = $parent = '';
	if (NULL !== ($id_parent = $c['id_parent'])) {
		$id_parent = intval($id_parent);
		$filles = calcul_branche($id_rubrique);
		if (strpos(",$id_parent,", ",$filles,") !== false)
			spip_log("La rubrique $id_rubrique ne peut etre fille de sa descendante $id_parent");
		else {
			$s = sql_fetsel("id_parent, statut", "spip_rubriques", "id_rubrique=$id_rubrique");
			$old_parent = $s['id_parent'];

			if (!($id_parent != $old_parent
			AND autoriser('publierdans', 'rubrique', $id_parent)
			AND autoriser('creerrubriquedans', 'rubrique', $id_parent)
			AND autoriser('publierdans', 'rubrique', $old_parent)
			      )) {
				if ($s['statut'] != 'new') {
					spip_log("deplacement de $id_rubrique vers $id_parent refuse a " . $GLOBALS['visiteur_session']['id_auteur'] . ' '.  $GLOBALS['visiteur_session']['statut']);
				}
			} elseif (editer_rubrique_breves($id_rubrique, $id_parent, $c)) {
				$statut_ancien = $s['statut'];
				sql_updateq('spip_rubriques', array('id_parent' => $id_parent), "id_rubrique=$id_rubrique");


				propager_les_secteurs();

				// Deplacement d'une rubrique publiee ==> chgt general de leur statut
				if ($statut_ancien == 'publie')
					calculer_rubriques_if($old_parent, array('id_rubrique' => $id_parent), $statut_ancien);
				// Creation ou deplacement d'une rubrique non publiee
				// invalider le cache de leur menu
				elseif (!$statut_ancien || $old_parent!=$id_parent)
					effacer_meta("date_calcul_rubriques");

				calculer_langues_rubriques();

				return true;
			}
		}
	}
}