Skip to content
Extraits de code Groupes Projets
Valider 7816319e rédigé par cedric@yterium.com's avatar cedric@yterium.com
Parcourir les fichiers

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
parent e725627b
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -6,6 +6,7 @@ action/copier_local.php -text ...@@ -6,6 +6,7 @@ action/copier_local.php -text
action/dissocier_document.php -text action/dissocier_document.php -text
action/editer_document.php -text action/editer_document.php -text
action/supprimer_document.php -text action/supprimer_document.php -text
action/supprimer_tous_orphelins.php -text
action/tourner.php -text action/tourner.php -text
action/verifier_documents_brises.php -text action/verifier_documents_brises.php -text
base/medias.php -text base/medias.php -text
......
...@@ -63,6 +63,7 @@ function supprimer_lien_document($id_document, $objet, $id_objet, $supprime = fa ...@@ -63,6 +63,7 @@ function supprimer_lien_document($id_document, $objet, $id_objet, $supprime = fa
sql_delete("spip_documents_liens", "id_objet=".intval($id_objet)." AND objet=".sql_quote($objet)." AND id_document=".$id_document); sql_delete("spip_documents_liens", "id_objet=".intval($id_objet)." AND objet=".sql_quote($objet)." AND id_document=".$id_document);
// Si c'est une vignette, l'eliminer du document auquel elle appartient // 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);
pipeline('post_edition', pipeline('post_edition',
...@@ -91,7 +92,8 @@ function supprimer_lien_document($id_document, $objet, $id_objet, $supprime = fa ...@@ -91,7 +92,8 @@ function supprimer_lien_document($id_document, $objet, $id_objet, $supprime = fa
// On supprime ensuite s'il est orphelin // On supprime ensuite s'il est orphelin
// et si demande // et si demande
if ($supprime AND !sql_countsel('spip_documents_liens', 'id_document='.$id_document)){ // 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'); $supprimer_document = charger_fonction('supprimer_document','action');
return $supprimer_document($id_document); return $supprimer_document($id_document);
} }
......
...@@ -159,7 +159,7 @@ function instituer_document($id_document,$champs=array()){ ...@@ -159,7 +159,7 @@ function instituer_document($id_document,$champs=array()){
$statut = 'prepa'; $statut = 'prepa';
$trouver_table = charger_fonction('trouver_table','base'); $trouver_table = charger_fonction('trouver_table','base');
$res = sql_select('id_objet,objet','spip_documents_liens','id_document='.intval($id_document)); $res = sql_select('id_objet,objet','spip_documents_liens',"objet!='document' AND id_document=".intval($id_document));
// dans 10 ans, ca nous fera un bug a corriger vers 2018 // dans 10 ans, ca nous fera un bug a corriger vers 2018
// penser a ouvrir un ticket d'ici la :p // penser a ouvrir un ticket d'ici la :p
$date_publication=time()+10*365*24*3600; $date_publication=time()+10*365*24*3600;
......
...@@ -43,8 +43,15 @@ function action_supprimer_document_dist($id_document=0) { ...@@ -43,8 +43,15 @@ function action_supprimer_document_dist($id_document=0) {
action_supprimer_document_dist($doc['id_vignette']); action_supprimer_document_dist($doc['id_vignette']);
sql_delete('spip_documents_liens', 'id_document='.$doc['id_vignette']); sql_delete('spip_documents_liens', 'id_document='.$doc['id_vignette']);
} }
// Si c'est un document ayant des documents annexes (sous-titre, ...)
// les supprimer aussi
$annexes = array_map('reset',sql_allfetsel("id_document","spip_documents_liens","objet='document' AND id_objet=".intval($id_document)));
foreach($annexes as $id){
action_supprimer_document_dist($id);
}
// dereferencer dans la base // dereferencer dans la base
sql_delete('spip_documents_liens', 'id_document='.intval($id_document));
sql_delete('spip_documents', 'id_document='.intval($id_document)); sql_delete('spip_documents', 'id_document='.intval($id_document));
// securite // securite
sql_delete('spip_documents_liens', 'id_document='.intval($id_document)); sql_delete('spip_documents_liens', 'id_document='.intval($id_document));
......
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('base/abstract_sql');
function action_supprimer_tous_orphelins() {
$securiser_action = charger_fonction('securiser_action','inc');
$arg = $securiser_action();
//on recupere le contexte pour ne supprimer les orphelins que de ce dernier
list($media,$distant,$statut,$sanstitre) = explode('/',$arg);
//critere sur le media
if($media) {
$select = sql_get_select("extension","spip_types_documents as nnnn","media=".sql_quote($media));
$where[] = "spip_documents.extension IN ($select)";
}
//critere sur le distant
if($distant)
$where[] = "distant=".sql_quote($distant);
//critere sur le statut
if($statut)
$where[] = "statut REGEXP ".sql_quote("($statut)");
//critere sur le sanstitre
if($sanstitre)
$where[] = "titre=''";
//on isole les orphelins
$select = sql_get_select("DISTINCT id_document","spip_documents_liens as oooo");
$cond = "spip_documents.id_document NOT IN ($select)";
$where[] = $cond;
$ids_doc_orphelins = sql_select( "id_document", "spip_documents", $where );
$supprimer_document = charger_fonction('supprimer_document','action');
while ($row = sql_fetch($ids_doc_orphelins)) {
$supprimer_document($row['id_document']); // pour les orphelins du contexte, on traite avec la fonction existante
}
}
?>
\ No newline at end of file
...@@ -39,10 +39,10 @@ function autoriser_document_tailler_dist($faire,$quoi,$id,$qui,$options) { ...@@ -39,10 +39,10 @@ function autoriser_document_tailler_dist($faire,$quoi,$id,$qui,$options) {
return false; return false;
if (!autoriser('modifier','document',$id,$qui,$options)) if (!autoriser('modifier','document',$id,$qui,$options))
return false; return false;
if (!isset($options['document']) OR !$document = $options['document']) if (!isset($options['document']) OR !$document = $options['document'])
$document = sql_fetsel('*','spip_documents','id_document='.intval($id_document)); $document = sql_fetsel('*','spip_documents','id_document='.intval($id_document));
// (on ne le propose pas pour les images qu'on sait // (on ne le propose pas pour les images qu'on sait
// lire : gif jpg png), sauf bug, ou document distant // lire : gif jpg png), sauf bug, ou document distant
if (in_array($document['extension'], array('gif','jpg','png')) if (in_array($document['extension'], array('gif','jpg','png'))
...@@ -50,7 +50,7 @@ function autoriser_document_tailler_dist($faire,$quoi,$id,$qui,$options) { ...@@ -50,7 +50,7 @@ function autoriser_document_tailler_dist($faire,$quoi,$id,$qui,$options) {
AND $document['largeur'] AND $document['largeur']
AND $document['distant']!='oui') AND $document['distant']!='oui')
return false; return false;
// Donnees sur le type de document // Donnees sur le type de document
$extension = $document['extension']; $extension = $document['extension'];
$type_inclus = sql_getfetsel('inclus','spip_types_documents', "extension=".sql_quote($extension)); $type_inclus = sql_getfetsel('inclus','spip_types_documents', "extension=".sql_quote($extension));
...@@ -145,13 +145,21 @@ function autoriser_document_supprimer($faire, $type, $id, $qui, $opt){ ...@@ -145,13 +145,21 @@ function autoriser_document_supprimer($faire, $type, $id, $qui, $opt){
OR !$qui['id_auteur'] OR !$qui['id_auteur']
OR !autoriser('ecrire','','',$qui)) OR !autoriser('ecrire','','',$qui))
return false; return false;
// ne pas considerer les document parent
// (cas des vignettes ou autre document annexe rattache a un document)
if (sql_countsel('spip_documents_liens', "objet!='document' AND id_document=".intval($id)))
return false;
// si c'est une vignette, se ramener a l'autorisation de son parent // si c'est une vignette, se ramener a l'autorisation de son parent
if (sql_getfetsel('mode','spip_documents','id_document='.intval($id))=='vignette'){ if (sql_getfetsel('mode','spip_documents','id_document='.intval($id))=='vignette'){
$id_document = sql_getfetsel('id_document','spip_documents','id_vignette='.intval($id)); $id_document = sql_getfetsel('id_document','spip_documents','id_vignette='.intval($id));
return !$id_document OR autoriser('modifier','document',$id_document); return !$id_document OR autoriser('modifier','document',$id_document);
}
// si c'est un document annexe, se ramener a l'autorisation de son parent
if ($id_document=sql_getfetsel('id_objet','spip_documents_liens',"objet='document' AND id_document=".intval($id))){
return autoriser('modifier','document',$id_document);
} }
if (sql_countsel('spip_documents_liens', 'id_document='.intval($id)))
return false;
return autoriser('modifier','document',$id,$qui,$opt); return autoriser('modifier','document',$id,$qui,$opt);
} }
...@@ -203,7 +211,7 @@ function autoriser_autoassocierdocument_dist($faire, $type, $id, $qui, $opts) { ...@@ -203,7 +211,7 @@ function autoriser_autoassocierdocument_dist($faire, $type, $id, $qui, $opts) {
/** /**
* Autoriser a nettoyer les orphelins de la base des documents * Autoriser a nettoyer les orphelins de la base des documents
* reserve aux admins complets * reserve aux admins complets
* *
* @param $faire * @param $faire
* @param $type * @param $type
* @param $id * @param $id
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter