Changeset 44157 in spip-zone


Ignore:
Timestamp:
Feb 4, 2011, 10:52:01 PM (9 years ago)
Author:
cedric@…
Message:

report de r44136
prevoir que l'on peut rattacher un document a un autre. C'est une pre-figuration de la reorganisation des documents.
Dans spip_documents_liens id_document designe toujours l'enfant (dependant de) et (id_objet,objet) le parent.
Donc ici un document annexe (sous-titrage, licence, ..) est designe par id_document, et (id_objet,objet='document') pointe vers le document maitre.
Des variantes du mode 'vignette' sont donc a prevoir, pour les documents annexes

Location:
_core_/plugins/medias
Files:
4 edited
1 copied

Legend:

Unmodified
Added
Removed
  • _core_/plugins/medias/action/dissocier_document.php

    r43778 r44157  
    6464
    6565        // Si c'est une vignette, l'eliminer du document auquel elle appartient
     66        // cas tordu peu probable
    6667        sql_updateq("spip_documents", array('id_vignette' => 0), "id_vignette=".$id_document);
    6768
     
    9293        // On supprime ensuite s'il est orphelin
    9394        // et si demande
    94         if ($supprime AND !sql_countsel('spip_documents_liens', 'id_document='.$id_document)){
     95        // ici on ne bloque pas la suppression d'un document rattache a un autre
     96        if ($supprime AND !sql_countsel('spip_documents_liens', "objet!='document' AND id_document=".$id_document)){
    9597                $supprimer_document = charger_fonction('supprimer_document','action');
    9698                return $supprimer_document($id_document);
  • _core_/plugins/medias/action/editer_document.php

    r43779 r44157  
    160160       
    161161                $trouver_table = charger_fonction('trouver_table','base');
    162                 $res = sql_select('id_objet,objet','spip_documents_liens','id_document='.intval($id_document));
     162                $res = sql_select('id_objet,objet','spip_documents_liens',"objet!='document' AND id_document=".intval($id_document));
    163163                // dans 10 ans, ca nous fera un bug a corriger vers 2018
    164164                // penser a ouvrir un ticket d'ici la :p
  • _core_/plugins/medias/action/supprimer_document.php

    r43932 r44157  
    4444                sql_delete('spip_documents_liens', 'id_document='.$doc['id_vignette']);
    4545        }
     46        // Si c'est un document ayant des documents annexes (sous-titre, ...)
     47        // les supprimer aussi
     48        $annexes = array_map('reset',sql_allfetsel("id_document","spip_documents_liens","objet='document' AND id_objet=".intval($id_document)));
     49  foreach($annexes as $id){
     50          action_supprimer_document_dist($id);
     51  }
    4652
    4753        // dereferencer dans la base
     54  sql_delete('spip_documents_liens', 'id_document='.intval($id_document));
    4855        sql_delete('spip_documents', 'id_document='.intval($id_document));
    4956        // securite
  • _core_/plugins/medias/action/supprimer_tous_orphelins.php

    r44149 r44157  
    11<?php
     2
     3/***************************************************************************\
     4 *  SPIP, Systeme de publication pour l'internet                           *
     5 *                                                                         *
     6 *  Copyright (c) 2001-2011                                                *
     7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
     8 *                                                                         *
     9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
     10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
     11\***************************************************************************/
    212
    313if (!defined("_ECRIRE_INC_VERSION")) return;
     
    1020        $arg = $securiser_action();
    1121
    12         list($media,$distant,$statut,$sanstitre) = explode('/',$arg); //on récupère le contexte pour ne supprimer les orphelins que de ce dernier
     22        //on recupere le contexte pour ne supprimer les orphelins que de ce dernier
     23        list($media,$distant,$statut,$sanstitre) = explode('/',$arg);
    1324       
     25        //critere sur le media
    1426        if($media) {
    15                 $select = sql_get_select("extension","spip_types_documents as nnnn","media='$media'");
    16                 $where[] = "spip_documents.extension IN ($select)";     //critere sur le media
     27                $select = sql_get_select("extension","spip_types_documents as nnnn","media=".sql_quote($media));
     28                $where[] = "spip_documents.extension IN ($select)";
    1729        }
     30
     31        //critere sur le distant
    1832        if($distant)
    19                 $where[] = "distant=$distant"; //critere sur le distant
     33                $where[] = "distant=".sql_quote($distant);
     34
     35        //critere sur le statut
    2036        if($statut)
    21                 $where[] = "statut REGEXP '($statut)'"; //critere sur le statut
     37                $where[] = "statut REGEXP ".sql_quote("($statut)");
     38
     39        //critere sur le sanstitre
    2240        if($sanstitre)
    23                 $where[] = "titre=''"; //critere sur le sanstitre
    24                
    25                 $select = sql_get_select("DISTINCT id_document","spip_documents_liens as oooo");
    26                 $cond = "spip_documents.id_document NOT IN ($select)"; //on isole les orphelins
    27                 $where[] = $cond;
     41                $where[] = "titre=''";
     42
     43        //on isole les orphelins
     44        $select = sql_get_select("DISTINCT id_document","spip_documents_liens as oooo");
     45        $cond = "spip_documents.id_document NOT IN ($select)";
     46        $where[] = $cond;
    2847
    2948        $ids_doc_orphelins = sql_select( "id_document", "spip_documents", $where );
  • _core_/plugins/medias/medias_autoriser.php

    r43934 r44157  
    4040        if (!autoriser('modifier','document',$id,$qui,$options))
    4141                return false;
    42 
     42       
    4343        if (!isset($options['document']) OR !$document = $options['document'])
    4444                $document = sql_fetsel('*','spip_documents','id_document='.intval($id_document));
    45 
     45       
    4646        // (on ne le propose pas pour les images qu'on sait
    4747        // lire : gif jpg png), sauf bug, ou document distant
     
    5151                AND $document['distant']!='oui')
    5252                return false;
    53 
     53       
    5454        // Donnees sur le type de document
    5555        $extension = $document['extension'];
     
    146146                OR !autoriser('ecrire','','',$qui))
    147147                return false;
     148
     149        // ne pas considerer les document parent
     150        // (cas des vignettes ou autre document annexe rattache a un document)
     151        if (sql_countsel('spip_documents_liens', "objet!='document' AND id_document=".intval($id)))
     152                return false;
     153
    148154        // si c'est une vignette, se ramener a l'autorisation de son parent
    149155        if (sql_getfetsel('mode','spip_documents','id_document='.intval($id))=='vignette'){
    150156                $id_document = sql_getfetsel('id_document','spip_documents','id_vignette='.intval($id));
    151           return !$id_document OR autoriser('modifier','document',$id_document);
    152         }
    153         if (sql_countsel('spip_documents_liens', 'id_document='.intval($id)))
    154                 return false;
     157                return !$id_document OR autoriser('modifier','document',$id_document);
     158        }
     159  // si c'est un document annexe, se ramener a l'autorisation de son parent
     160        if ($id_document=sql_getfetsel('id_objet','spip_documents_liens',"objet='document' AND id_document=".intval($id))){
     161                return autoriser('modifier','document',$id_document);
     162        }
    155163
    156164        return autoriser('modifier','document',$id,$qui,$opt);
     
    204212 * Autoriser a nettoyer les orphelins de la base des documents
    205213 * reserve aux admins complets
    206  * 
     214 *
    207215 * @param  $faire
    208216 * @param  $type
Note: See TracChangeset for help on using the changeset viewer.