[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins-dist / medias / action / dissocier_document.php
index dff2a17..a2d7542 100644 (file)
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-if (!defined("_ECRIRE_INC_VERSION")) return;
+/**
+ * Gestion de l'action dissocier_document
+ *
+ * @package SPIP\Medias\Action
+ **/
+
+if (!defined('_ECRIRE_INC_VERSION')) {
+       return;
+}
 
 
 /**
  * Dissocier un document
- * $arg fournit les arguments de la fonction dissocier_document
- * sous la forme
- * $id_objet-$objet-$document-suppr-safe
  *
- * 4eme arg : suppr = true, false sinon
- * 5eme arg : safe = true, false sinon
- * 
+ * @param string $arg
+ *     fournit les arguments de la fonction dissocier_document
+ *     sous la forme `$id_objet-$objet-$document-suppr-safe`
+ *
+ *     - 4eme arg : suppr = true, false sinon
+ *     - 5eme arg : safe = true, false sinon
+ *
  * @return void
  */
-function action_dissocier_document_dist($arg=null){
-       if(is_null($arg)){
+function action_dissocier_document_dist($arg = null) {
+       if (is_null($arg)) {
                $securiser_action = charger_fonction('securiser_action', 'inc');
                $arg = $securiser_action();
        }
 
        // attention au cas ou id_objet est negatif !
-       if (strncmp($arg,'-',1)==0){
-               $arg = explode('-',substr($arg,1));
+       if (strncmp($arg, '-', 1) == 0) {
+               $arg = explode('-', substr($arg, 1));
                list($id_objet, $objet, $document) = $arg;
                $id_objet = -$id_objet;
-       }
-       else {
-               $arg = explode('-',$arg);
+       } else {
+               $arg = explode('-', $arg);
                list($id_objet, $objet, $document) = $arg;
        }
 
-       $suppr=false;
-       if (count($arg)>3 AND $arg[3]=='suppr')
+       $suppr = $check = false;
+       if (count($arg) > 3 and $arg[3] == 'suppr') {
                $suppr = true;
-       if (count($arg)>4 AND $arg[4]=='safe')
+       }
+       if (count($arg) > 4 and $arg[4] == 'safe') {
                $check = true;
-       if ($id_objet=intval($id_objet)
-               AND (
-                       ($id_objet<0 AND $id_objet==-$GLOBALS['visiteur_session']['id_auteur'])
-                       OR autoriser('dissocierdocuments',$objet,$id_objet)
-               ))
+       }
+       if ($id_objet = intval($id_objet)
+               and (
+                       ($id_objet < 0 and $id_objet == -$GLOBALS['visiteur_session']['id_auteur'])
+                       or autoriser('dissocierdocuments', $objet, $id_objet)
+               )
+       ) {
                dissocier_document($document, $objet, $id_objet, $suppr, $check);
-       else
-               spip_log("Interdit de modifier $objet $id_objet","spip");
+       } else {
+               spip_log("Interdit de modifier $objet $id_objet", 'spip');
+       }
 }
 
 /**
@@ -70,22 +82,31 @@ function action_dissocier_document_dist($arg=null){
  * @return bool
  */
 function supprimer_lien_document($id_document, $objet, $id_objet, $supprime = false, $check = false) {
-       if (!$id_document = intval($id_document))
+       if (!$id_document = intval($id_document)) {
                return false;
+       }
+
+       // [TODO] le mettre en paramètre de la fonction ?
+       $serveur = '';
 
        // D'abord on ne supprime pas, on dissocie
        include_spip('action/editer_liens');
-       objet_dissocier(array('document'=>$id_document),array($objet=>$id_objet));
+       objet_dissocier(array('document' => $id_document), array($objet => $id_objet), array('role' => '*'));
 
        // Si c'est une vignette, l'eliminer du document auquel elle appartient
        // cas tordu peu probable
-       sql_updateq("spip_documents", array('id_vignette' => 0), "id_vignette=".$id_document);
+       sql_updateq('spip_documents', array('id_vignette' => 0), 'id_vignette=' . $id_document);
 
        // verifier son statut apres une suppression de lien
        include_spip('action/editer_document');
        document_instituer($id_document);
 
-       pipeline('post_edition',
+       // Invalider les caches
+       include_spip('inc/invalideur');
+       suivre_invalideur("id='id_document/$id_document'");
+
+       pipeline(
+               'post_edition',
                array(
                        'args' => array(
                                'operation' => 'delier_document', // compat v<=2
@@ -103,18 +124,19 @@ function supprimer_lien_document($id_document, $objet, $id_objet, $supprime = fa
                // si demande, on verifie que ses documents vus sont bien lies !
                $spip_table_objet = table_objet_sql($objet);
                $table_objet = table_objet($objet);
-               $id_table_objet = id_table_objet($objet,$serveur);
-               $champs = sql_fetsel('*',$spip_table_objet,addslashes($id_table_objet)."=".intval($id_objet));
+               $id_table_objet = id_table_objet($objet, $serveur);
+               $champs = sql_fetsel('*', $spip_table_objet, addslashes($id_table_objet) . '=' . intval($id_objet));
 
-               $marquer_doublons_doc = charger_fonction('marquer_doublons_doc','inc');
-               $marquer_doublons_doc($champs,$id_objet,$objet,$id_table_objet,$table_objet,$spip_table_objet, '', $serveur);
+               $marquer_doublons_doc = charger_fonction('marquer_doublons_doc', 'inc');
+               $marquer_doublons_doc($champs, $id_objet, $objet, $id_table_objet, $table_objet, $spip_table_objet, '', $serveur);
        }
 
        // On supprime ensuite s'il est orphelin
        // et si demande
        // ici on ne bloque pas la suppression d'un document rattache a un autre
-       if ($supprime AND !sql_countsel('spip_documents_liens', "objet!='document' AND id_document=".$id_document)){
-               $supprimer_document = charger_fonction('supprimer_document','action');
+       if ($supprime and !sql_countsel('spip_documents_liens', "objet!='document' AND id_document=" . $id_document)) {
+               $supprimer_document = charger_fonction('supprimer_document', 'action');
+
                return $supprimer_document($id_document);
        }
 }
@@ -127,7 +149,7 @@ function supprimer_lien_document($id_document, $objet, $id_objet, $supprime = fa
  *   I/image pour dissocier les images en mode Image
  *   I/document pour dissocier les images en mode document
  *   D/document pour dissocier les documents non image en mode document
- * @param  $objet
+ * @param string $objet
  *   objet duquel dissocier
  * @param  $id_objet
  *   id_objet duquel dissocier
@@ -137,20 +159,21 @@ function supprimer_lien_document($id_document, $objet, $id_objet, $supprime = fa
  *   verifier le texte des documents et relier les documents references dans l'objet
  * @return void
  */
-function dissocier_document($document, $objet, $id_objet, $supprime = false, $check = false){
-       if ($id_document=intval($document)) {
+function dissocier_document($document, $objet, $id_objet, $supprime = false, $check = false) {
+       if ($id_document = intval($document)) {
                supprimer_lien_document($id_document, $objet, $id_objet, $supprime, $check);
-       }
-       else {
-               list($image,$mode) = explode('/',$document);
-               $image = ($image=='I');
-               $typdoc = sql_in('docs.extension', array('gif', 'jpg', 'png'), $image  ? '' : 'NOT');
-
-               $obj = "id_objet=".intval($id_objet)." AND objet=".sql_quote($objet);
-
-               $s = sql_select('docs.id_document',
-                       "spip_documents AS docs LEFT JOIN spip_documents_liens AS l ON l.id_document=docs.id_document",
-                       "$obj AND vu='non' AND docs.mode=".sql_quote($mode)." AND $typdoc");
+       } else {
+               list($image, $mode) = explode('/', $document);
+               $image = ($image == 'I');
+               $typdoc = sql_in('docs.extension', array('gif', 'jpg', 'png'), $image ? '' : 'NOT');
+
+               $obj = 'id_objet=' . intval($id_objet) . ' AND objet=' . sql_quote($objet);
+
+               $s = sql_select(
+                       'docs.id_document',
+                       'spip_documents AS docs LEFT JOIN spip_documents_liens AS l ON l.id_document=docs.id_document',
+                       "$obj AND vu='non' AND docs.mode=" . sql_quote($mode) . " AND $typdoc"
+               );
                while ($t = sql_fetch($s)) {
                        supprimer_lien_document($t['id_document'], $objet, $id_objet, $supprime, $check);
                }
@@ -162,4 +185,3 @@ function dissocier_document($document, $objet, $id_objet, $supprime = false, $ch
                depublier_branche_rubrique_if($id_objet);
        }
 }
-?>