supprimer_document.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2014 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined("_ECRIRE_INC_VERSION")) return;
  12. // http://code.spip.net/@supprimer_document
  13. function action_supprimer_document_dist($id_document=0) {
  14. if (!$id_document){
  15. $securiser_action = charger_fonction('securiser_action','inc');
  16. $id_document = $securiser_action();
  17. }
  18. include_spip('inc/autoriser');
  19. if (!autoriser('supprimer','document',$id_document)){
  20. spip_log("Echec : Suppression document $id_document interdite",_LOG_ERREUR);
  21. return false;
  22. }
  23. // si c'etait une vignette, modifier le document source !
  24. if ($source = sql_getfetsel('id_document', 'spip_documents', 'id_vignette='.intval($id_document))){
  25. include_spip('action/editer_document');
  26. document_modifier($source,array("id_vignette" => 0));
  27. }
  28. include_spip('inc/documents');
  29. if (!$doc = sql_fetsel('*', 'spip_documents', 'id_document='.intval($id_document))){
  30. spip_log("Echec : Suppression document $id_document : le document n'existe pas en base",_LOG_ERREUR);
  31. return false;
  32. }
  33. spip_log("Suppression du document $id_document (".$doc['fichier'].")");
  34. include_spip('action/editer_liens');
  35. // Si c'est un document ayant une vignette, supprimer aussi la vignette
  36. if ($doc['id_vignette']) {
  37. action_supprimer_document_dist($doc['id_vignette']);
  38. objet_dissocier(array('document'=>$doc['id_vignette']),'*');
  39. }
  40. // Si c'est un document ayant des documents annexes (sous-titre, ...)
  41. // les supprimer aussi
  42. $annexes = array_map('reset',sql_allfetsel("id_document","spip_documents_liens","objet='document' AND id_objet=".intval($id_document)));
  43. foreach($annexes as $id){
  44. action_supprimer_document_dist($id);
  45. }
  46. // dereferencer dans la base
  47. objet_dissocier(array('document'=>$id_document),'*');
  48. sql_delete('spip_documents', 'id_document='.intval($id_document));
  49. // Supprimer le fichier si le doc est local,
  50. // et la copie locale si le doc est distant
  51. if ($doc['distant'] == 'oui') {
  52. include_spip('inc/distant');
  53. if ($local = _DIR_RACINE . copie_locale($doc['fichier'],'test'))
  54. spip_unlink($local);
  55. }
  56. else
  57. spip_unlink(get_spip_doc($doc['fichier']));
  58. pipeline('post_edition',
  59. array(
  60. 'args' => array(
  61. 'operation' => 'supprimer_document', // compat v<=2
  62. 'action' => 'supprimer_document',
  63. 'table' => 'spip_documents',
  64. 'id_objet' => $id_document
  65. ),
  66. 'data' => null
  67. )
  68. );
  69. return true;
  70. }
  71. ?>