/** * 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 }
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; } } } }