Your IP : 216.73.216.249


Current Path : /home/etiennec/www/oldsite/ecrire/inc/
Upload File :
Current File : /home/etiennec/www/oldsite/ecrire/inc/documenter.php

<?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;

// Affiche le portfolio et les documents lies a l'article (ou a la rubrique)
// => Nouveau : au lieu de les ignorer, on affiche desormais avec un fond gris
// les documents et images inclus dans le texte.

// http://doc.spip.org/@inc_documenter_dist
function inc_documenter_dist(
	$doc,		# tableau des documents ou numero de l'objet attachant
	$type = "article",	# article ou rubrique ?
	$ancre = 'portfolio',	# album d'images ou de documents ?
	$ignore_flag = false,	# IGNORE, remplace par autoriser(modifier,document)
	$couleur='',		# IGNORE couleur des cases du tableau
	$appelant =''		# pour le rappel (cf plugin)
) {
	if (is_numeric($doc)) {
		$prim = 'id_' . $type;
		$img = ($ancre == 'portfolio') ? '' : " NOT";
		$select = "D.id_document, D.id_vignette, D.extension, D.titre,  D.date,  D.descriptif,  D.fichier,  D.taille, D.largeur,  D.hauteur,  D.mode,  D.distant, L.vu, L.id_objet, L.id_objet as $prim";
		$from = "spip_documents AS D LEFT JOIN spip_documents_liens AS L ON  L.id_document=D.id_document"; 
		$where = "L.id_objet=$doc AND L.objet='$type' AND D.mode='document' AND D.extension $img IN ('gif', 'jpg', 'png')";
		$order = "0+D.titre, D.date";
		$docs = sql_allfetsel($select, $from, $where, '', $order);
		$opt = array('objet'=>$type, 'id_objet' => $doc);
	} else {
		$docs = $doc;
		$opt = array();
	}

	if (!$docs) return '';

	// On passe &$tous dans la boucle pour verifier si on a bien
	// le droit de supprimer tous les documents
	$tous = (count($docs) > 3);
	$s = ($ancre =='documents' ? '': '-');
	if (preg_match('/_edit$/', _request('script'))) {
	  $res = " ";
	} else {
	  $res = documenter_boucle($docs, $type, $ancre, $tous, $appelant, $opt);
	  if (is_int($doc))
		$res = documenter_bloc($doc, $res, $s, $appelant, $ancre, $tous, $type);
	}
	return ajax_action_greffe("documenter", "$s$doc", $res);
}

// http://doc.spip.org/@documenter_bloc
function documenter_bloc($id, $res, $s, $script, $ancre, $tous, $type)
{
	// seulement s'il y a au moins un document dedans
	if (!$res) return "";

	if ($tous) {
		$tous = "<div class='lien_tout_supprimer'>"
			. ajax_action_auteur('documenter', "$s$id/$type", $appelant ? $appelant : _request('exec'), "id_$type=$id&s=$s&type=$type",array(_T('lien_tout_supprimer')))
			. "</div>\n";
	} else $tous = '';

	$bouton = bouton_block_depliable(majuscules(_T("info_$ancre")),true,"portfolio_$ancre");

	return debut_cadre("$ancre","","",$bouton)
		. debut_block_depliable(true,"portfolio_$ancre")
		. $tous
		. $res
		. fin_block()
		. fin_cadre();
}

// http://doc.spip.org/@documenter_boucle
function documenter_boucle($documents, $type, $ancre, &$tous_autorises, $appelant, $opt=array())
{
	// la derniere case d'une rangee
	$bord_droit = ($ancre == 'portfolio' ? 2 : 1);
	$case = 0;
	$res = '';

	$tourner = charger_fonction('tourner', 'inc');
	$legender = charger_fonction('legender', 'inc');

	// Pour les doublons d'article et en mode ajax, il faut faire propre()
	/*if ($type=='article'
	AND !isset($GLOBALS['doublons_documents_inclus'])
	AND is_int($doc)) {
		$r = sql_fetsel("chapo,texte", "spip_articles", "id_article=".sql_quote($doc));
		propre(join(" ",$r));
	}*/

	$show_docs = explode(',', _request('show_docs'));

	foreach ($documents as $document) {
		$id_document = $document['id_document'];

		// $opt : options pour l'autorisation (type d'objet parent, et id de l'objet parent)
		if (!autoriser('voir', 'document', $id_document, null, $opt))
			continue;
			
		if (isset($document['script']))
			$script = $document['script']; # pour plugin Cedric
		else
		  // ref a $exec inutilise en standard
		  $script = $appelant ? $appelant : $GLOBALS['exec'];

		if (!$case)
			$res .= "<tr>";

		$flag = autoriser('modifier', 'document', $id_document);
		$tous_autorises &= $flag;
		$vu = ($document['vu']=='oui') ? ' vu':'';

		$vue_document = $tourner($id_document, $document, $script, $flag, $type);

		$editer_document =  (!$flag  ? '' :
		   $legender($id_document, $document, $script, $type, $document["id_$type"], $ancre, in_array($id_document, $show_docs)))
			. (!isset($document['info']) ? '' :
		       ("<div class='verdana1'>".$document['info']."</div>"));

		// Prevoir le passage de la vue et de l'edition sous forme de squelettes separes
		// Ces pipelines seront alors inutiles, car integres dans l'appel des squelettes
		$vue_document = pipeline('afficher_contenu_objet',
			array(
				'args' => array(
					'type'=> 'case_document',
					'id'=>$id_document
				),
				'data'=> $vue_document
			)
		);

		$editer_document = pipeline('editer_contenu_objet',
			array(
				'args' => array(
					'type'=> 'case_document',
					'id'=>$id_document
				),
				'data'=> $editer_document
			)
		);

		$res .= "\n<td  class='document$vu'>"
			. $vue_document
			. $editer_document
			. "</td>\n";

		$case++;
		if ($case > $bord_droit) {
			  $case = 0;
			  $res .= "</tr>\n";
		}
	}

	// fermer la derniere ligne
	if ($case) {
		$res .= "<td></td>";
		$res .= "</tr>";
	}

	// pas de contenu, pas de tableau
	if (!$res) return "";
	
	return "\n<table width='100%' cellspacing='0' cellpadding='4'>"
	. $res
	. "</table>";
}
?>