[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_www.git] / www / plugins-dist / medias / action / editer_document.php
index dba16f5..bdde33e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -126,6 +126,7 @@ function document_modifier($id_document, $set=false) {
        if ($champs['fichier'] // un plugin a pu interdire la modif du fichier en virant le champ
         AND $ancien_fichier // on avait bien note le nom du fichier avant la modif
         AND $ancien_fichier!==$champs['fichier'] // et il a ete modifie
+        AND !tester_url_absolue($ancien_fichier)
         AND @file_exists($f = get_spip_doc($ancien_fichier)))
                spip_unlink($f);
 
@@ -249,12 +250,27 @@ function medias_revision_document_parents($id_document, $parents=null, $ajout=fa
        if (!$ajout){
                foreach($liens as $k=>$lien)
                        if (!isset($objets_parents[$lien['objet']]) OR !in_array($lien['id_objet'],$objets_parents[$lien['objet']])) {
-                               objet_dissocier(array('document'=>$id_document),array($lien['objet']=>$lien['id_objet']));
+                               if (autoriser('dissocierdocuments',$lien['objet'],$lien['id_objet'])){
+                                       objet_dissocier(array('document'=>$id_document),array($lien['objet']=>$lien['id_objet']));
+                               }
                                unset($liens[$k]);
                        }
                        else $deja_parents[$lien['objet']][] = $lien['id_objet'];
        }
 
+       // trier les objets à traiter : ne pas prendre en compte ceux qui sont déjà associés ou qu'on n'a pas le droit d'associer
+       foreach ($objets_parents as $objet => $ids) {
+               foreach ($ids as $k => $id) {
+                       if ((
+                                       isset($deja_parents[$objet])
+                                       and in_array($id, $deja_parents[$objet])
+                               )
+                               or !autoriser('associerdocuments', $objet, $id)
+                       ) {
+                               unset($objets_parents[$objet][$k]);
+                       }
+               }
+       }
        objet_associer(array('document'=>$id_document),$objets_parents);
 
 }