/** * Action de réparation de la base de données * * Tente de réparer les tables, recalcule les héritages et secteurs * de rubriques. Affiche les erreurs s'il y en a eu. * * @pipeline_appel base_admin_repair * @uses admin_repair_tables() * @uses calculer_rubriques() * @uses propager_les_secteurs() * * @param string $titre Inutilisé * @param string $reprise Inutilisé **/ function base_repair_dist($titre = '', $reprise = '') { $res = admin_repair_tables(); if (!$res) { $res = "<div class='error'>" . _T('avis_erreur_mysql') . ' ' . sql_errno() . ': ' . sql_error() . "</div>\n"; } else { include_spip('inc/rubriques'); calculer_rubriques(); propager_les_secteurs(); } include_spip('inc/minipres'); $res .= pipeline('base_admin_repair', $res); echo minipres(_T('texte_tentative_recuperation'), $res . generer_form_ecrire('accueil', '', '', _T('public:accueil_site'))); }
function reorganiser_rubrique_rubrique($id_quoi, $id_cible) { if ($id_quoi != $id_cible and autoriser('modifier', 'rubrique', $id_cible) and autoriser('modifier', 'rubrique', $id_quoi)) { if (!$id_cible) { $id_secteur = $id_quoi; } else { $id_secteur = sql_getfetsel("id_secteur", "spip_rubriques", "id_rubrique={$id_cible}"); } $s = sql_fetsel("statut, id_parent, id_secteur", "spip_rubriques", "id_rubrique=" . intval($id_quoi)); sql_updateq('spip_rubriques', array('id_parent' => $id_cible, 'id_secteur' => $id_secteur), "id_rubrique=" . intval($id_quoi)); include_spip('inc/rubriques'); // propager les secteurs si besoin if ($s['id_secteur'] != $id_secteur) { propager_les_secteurs(); } // changer le statut de la rubrique source if ($s['statut'] == 'publie') { calculer_rubriques_if($s['id_parent'], array('id_rubrique' => $id_cible), 'publie'); } } }
function base_admin_repair_dist($titre='', $reprise='') { $f = sql_repair('repair', NULL, true); if ($f) { $res = admin_repair_tables(); } else { if ($titre) spip_log("Pas d'instruction REPAIR dans ce serveur SQL"); $res = ' '; } if (!$res) { $res = "<br /><br /><span style='color: red; font-weight: bold;'><tt>"._T('avis_erreur_mysql').' '.sql_errno().': '.sql_error() ."</tt></span><br /><br /><br />\n"; } else { include_spip('inc/rubriques'); calculer_rubriques(); propager_les_secteurs(); } include_spip('inc/minipres'); $res .= pipeline('base_admin_repair',$res); $res .= admin_repair_plat(); echo minipres(_T('texte_tentative_recuperation'), $res . generer_form_ecrire('accueil', '','',_T('public:accueil_site'))); }
/** * 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 }
/** * Mise à jour pour recalculer les secteurs des rubriques * * @uses propager_les_secteurs() **/ function maj_propager_les_secteurs() { include_spip('inc/rubriques'); propager_les_secteurs(); }
/** * Plugin pour Spip 2.0 * Licence GPL (c) 2006-2008 (d0M0.b) * */ function action_ajouter_zone_groupe_dist(){ # $securiser_action = charger_fonction('securiser_action','inc'); # $arg = $securiser_action(); $mess_ok=''; $err=''; $redirect = _request('redirect'); if ($redirect==NULL) $redirect="peupler_zone_lcs"; if (_request('arg')) { $v_zones = sql_fetsel('*','spip_zones', 'titre='.sql_quote(_request('arg'))); if($v_zones['titre']) { $err="La zone" ._request('group')." existe deja"; redirige_par_entete(parametre_url(str_replace("&","&",urldecode($redirect)),'message',$err,'&')); } // nouvel zone $id_zone = sql_insertq("spip_zones", array("maj"=>"NOW()", "titre"=>_request('arg'), "descriptif"=>'', 'publique'=>'oui','privee'=>'oui')); //on cree une rubrique du meme non que le groupe et on la place dans la zone creee $prefixes=array('Equipe'=>'Equipes','Classe'=>'Classes','Cours'=>'Cours','Matiere'=>'Matières'); // On regarde s'il esiste une rubrique de meme nom que la zone creee if(!$rub_exist= sql_fetsel("*","spip_rubriques", "titre=".sql_quote(_request('arg')))){ # if(!$rub_exist= sql_getfetsel("id_rubrique","spip_rubriques", "titre=".sql_quote(_request('arg')))){ include_spip('inc/rubriques'); $id_parent=0; //pour les groupes secondaires Equipe, Classe, Matiere et Cours // on cree une rubrique (Equipes, Classes, Matieres et Cours) a la racine // et on place les rubriques crees dedans # $prefixes=array('Equipe'=>'Equipes','Classe'=>'Classes','Cours'=>'Cours','Matiere'=>'Matières'); foreach($prefixes as $prefix=>$nom_rub) { if(preg_match("/".$prefix."/",_request('arg'))) { $rub_parent=$nom_rub; if ($id_rubrique= sql_getfetsel("id_rubrique","spip_rubriques", "titre=".sql_quote($rub_parent))) { $id_parent=$id_rubrique; } else{ $id_rubrique = sql_insertq("spip_rubriques", array( 'titre' => $rub_parent, id_parent => 0, 'statut' => 'new')); $id_parent=$id_rubrique; propager_les_secteurs(); calculer_langues_rubriques(); } } } // pour le groupe principal, on crée a la racine // Pour les groupes secondaires, on regarde si la rubrique parent existe // sinon on la cree if ($id_rubrique= sql_getfetsel("id_rubrique","spip_rubriques", "titre=".sql_quote($rub_parent))) $id_parent=$id_rubrique; # $row_rub_parent['id_rubrique'] ? $id_parent=$row_rub_parent['id_rubrique'] : $id_parent=0; $id_rubrique = sql_insertq("spip_rubriques", array( 'titre' => _request('arg'), id_parent => intval($id_parent), 'statut' => 'new')); propager_les_secteurs(); calculer_langues_rubriques(); // on place la rubrique creee et la rubrique p arent ds la zone de meme nom $ids['id_zone']=$id_zone; $ids['id_rubrique']=$id_rubrique; $zone_rubrique = sql_insertq("spip_zones_rubriques", $ids,'',$serveur='connect',$option=true); $zone_parent = sql_insertq("spip_zones_rubriques", array("id_zone"=>$id_zone,"id_rubrique"=>$id_parent),'',$serveur='connect',$option=true); // pour le groupe Equipe on donne le droit a la zone sur la rubrique classe (si elle existe) $classe = preg_replace('/Equipe/', 'Classe', _request('arg')); if($id_rub_classe=sql_getfetsel("id_rubrique","spip_rubriques", "titre=".sql_quote($classe))) { $zone_rub_classe = sql_insertq("spip_zones_rubriques", array('id_zone'=>$id_zone, 'id_rubrique'=>$id_rub_classe),'',$serveur='connect',$option=true); } }else{ $zone_rubrique = sql_insertq("spip_zones_rubriques", array('id_zone'=>$id_zone, 'id_rubrique'=>$rub_exist['id_rubrique']),'',$serveur='connect',$option=true); /* foreach($prefixes as $prefix=>$nom_rub) { if(preg_match("/".$prefix."/",_request('arg'))) $zone_parent = sql_insertq("spip_zones_rubriques", array('id_zone'=>$id_zone, 'id_rubrique'=>$rub_exist['id_parent']),'',$serveur='connect',$option=true); } $classe = preg_replace('/Equipe/', 'Classe', _request('arg')); if($id_rub_classe=sql_getfetsel("id_rubrique","spip_rubriques", "titre=".sql_quote($classe))) { $zone_rub_classe = sql_insertq("spip_zones_rubriques", array('id_zone'=>$id_zone, 'id_rubrique'=>$id_rub_classe),'',$serveur='connect',$option=true); } */ } } // redirige_par_entete(parametre_url(str_replace("&","&",urldecode($redirect)),'message',$mes,'&')); }
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; } } } }