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
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+1 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -6,6 +6,7 @@ action/copier_local.php -text
action/dissocier_document.php -text
action/editer_document.php -text
action/supprimer_document.php -text
action/supprimer_tous_orphelins.php -text
action/tourner.php -text
action/verifier_documents_brises.php -text
base/medias.php -text
+3 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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);

	// 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);

	pipeline('post_edition',
@@ -91,7 +92,8 @@ function supprimer_lien_document($id_document, $objet, $id_objet, $supprime = fa

	// On supprime ensuite s'il est orphelin
	// 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');
		return $supprimer_document($id_document);
	}
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -159,7 +159,7 @@ function instituer_document($id_document,$champs=array()){
		$statut = 'prepa';
	
		$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
		// penser a ouvrir un ticket d'ici la :p
		$date_publication=time()+10*365*24*3600;
+7 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -43,8 +43,15 @@ function action_supprimer_document_dist($id_document=0) {
		action_supprimer_document_dist($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
  sql_delete('spip_documents_liens', 'id_document='.intval($id_document));
	sql_delete('spip_documents', 'id_document='.intval($id_document));
	// securite
	sql_delete('spip_documents_liens', 'id_document='.intval($id_document));
+56 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?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
Chargement en cours