From 86f937663521ce3a1d52a01feccb9667f3f0aae5 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Fri, 8 Oct 2010 13:00:45 +0000 Subject: [PATCH] Une fonction Ooops qui permet d'annuler la derniere suppression de liens. Ainsi, si on clique sur le mauvais lien 'retirer cet auteur' ou par inadvertance sur 'Retrier tous les auteurs', il suffit de cliquer sur 'Ooops' pour retablir la situation --- prive/formulaires/editer_liens.html | 2 ++ prive/formulaires/editer_liens.php | 45 ++++++++++++++++++++++------- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/prive/formulaires/editer_liens.html b/prive/formulaires/editer_liens.html index f54cb6ef03..d036fe2d82 100644 --- a/prive/formulaires/editer_liens.html +++ b/prive/formulaires/editer_liens.html @@ -9,7 +9,9 @@ <input type="hidden" name="visible" value="#ENV{visible,0}" id="visible-#ENV{id}"/> <p class='boutons' style="display:none;"><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_changer:>' /></p> ] + <INCLURE{fond=prive/listes/#ENV{_vue_liee},env,ajax}> + [<div class="action"><input type="hidden" name="_oups" value='(#ENV**{_oups})' /><input type="submit" name="annuler_oups" value="Ooops" /></div>] [(#ENV{visible,0}|et{#ENV{editable}}|oui) <div class="selecteur[(#ENV{recherche}|oui)filtre]"> diff --git a/prive/formulaires/editer_liens.php b/prive/formulaires/editer_liens.php index 189ebe9813..be86ec1a1c 100644 --- a/prive/formulaires/editer_liens.php +++ b/prive/formulaires/editer_liens.php @@ -44,6 +44,7 @@ function formulaires_editer_liens_charger_dist($table_source,$objet,$id_objet){ 'recherche'=>'', 'visible'=>0, 'editable'=>autoriser('modifier',$objet,$id_objet), + '_oups' => _request('_oups'), ); return $valeurs; @@ -53,17 +54,41 @@ function formulaires_editer_liens_traiter_dist($table_source,$objet,$id_objet){ if (_request('tout_voir')) set_request('recherche',''); - #var_dump($_REQUEST); - if ($ajouter = _request('ajouter_lien')){ - $ajouter_lien = charger_fonction('ajouter_lien','action'); - foreach($ajouter as $lien=>$dummy) - $ajouter_lien($lien); - } - if ($supprimer = _request('supprimer_lien')){ - $supprimer_lien = charger_fonction('supprimer_lien','action'); - foreach($supprimer as $lien=>$dummy) - $supprimer_lien($lien); + + if (autoriser('modifier',$objet,$id_objet)) { + // annuler les suppressions du coup d'avant ! + if (_request('annuler_oups') + AND $oups = _request('_oups') + AND $oups = unserialize($oups)){ + $objet_source = objet_type($table_source); + include_spip('action/editer_liens'); + foreach($oups as $oup) { + objet_associer(array($objet_source=>$oup[$objet_source]), array($objet=>$oup[$objet]),$oup); + } + # oups ne persiste que pour la derniere action, si suppression + set_request('_oups'); + } + + if ($ajouter = _request('ajouter_lien')){ + $ajouter_lien = charger_fonction('ajouter_lien','action'); + foreach($ajouter as $lien=>$dummy) + $ajouter_lien($lien); + # oups ne persiste que pour la derniere action, si suppression + set_request('_oups'); + } + + if ($supprimer = _request('supprimer_lien')){ + include_spip('action/editer_liens'); + $oups = array(); + foreach($supprimer as $lien=>$dummy) { + $lien = explode("-",$lien); + list($objet_source,$ids,$objet_lie,$idl) = $lien; + $oups = array_merge($oups, objet_trouver_liens(array($objet_source=>$ids), array($objet_lie=>$idl))); + objet_dissocier(array($objet_source=>$ids), array($objet_lie=>$idl)); + } + set_request('_oups',$oups?serialize($oups):null); + } } $res = array('editable'=>true); -- GitLab