コード例 #1
0
ファイル: lien.php プロジェクト: xablen/Semaine14_SPIP_test
function expanser_liens($t, $connect = '', $env = array())
{
    $t = pipeline('pre_liens', $t);
    // on passe a traiter_modeles la liste des liens reperes pour lui permettre
    // de remettre le texte d'origine dans les parametres du modele
    $t = traiter_modeles($t, false, false, $connect);
    return $t;
}
コード例 #2
0
function inc_marquer_doublons_doc_dist($champs, $id, $type, $id_table_objet, $table_objet, $spip_table_objet, $desc = array(), $serveur = '')
{
    $champs_selection = array();
    foreach ($GLOBALS['medias_liste_champs'] as $champs_choisis) {
        if (isset($champs[$champs_choisis])) {
            array_push($champs_selection, $champs_choisis);
        }
    }
    if (count($champs_selection) == 0) {
        return;
    }
    if (!$desc) {
        $trouver_table = charger_fonction('trouver_table', 'base');
        $desc = $trouver_table($table_objet, $serveur);
    }
    $load = "";
    // charger le champ manquant en cas de modif partielle de l	'objet
    // seulement si le champ existe dans la table demande
    $champs_a_traiter = "";
    foreach ($champs_selection as $champs_a_parcourir) {
        if (isset($desc['field'][$champs_a_parcourir])) {
            $load = $champs_a_parcourir;
            $champs_a_traiter .= $champs[$champs_a_parcourir];
        }
    }
    if ($load) {
        $champs[$load] = "";
        $row = sql_fetsel($load, $spip_table_objet, "{$id_table_objet}=" . sql_quote($id));
        if ($row and isset($row[$load])) {
            $champs[$load] = $row[$load];
        }
    }
    include_spip('inc/texte');
    include_spip('base/abstract_sql');
    include_spip('action/editer_liens');
    include_spip('base/objets');
    $modeles = lister_tables_objets_sql('spip_documents');
    $modeles = $modeles['modeles'];
    $GLOBALS['doublons_documents_inclus'] = array();
    $env = array('objet' => $type, 'id_objet' => $id, $id_table_objet => $id);
    traiter_modeles($champs_a_traiter, array('documents' => $modeles), '', '', null, $env);
    // detecter les doublons
    objet_qualifier_liens(array('document' => '*'), array($type => $id), array('vu' => 'non'));
    if (count($GLOBALS['doublons_documents_inclus'])) {
        // on repasse par une requete sur spip_documents pour verifier que les documents existent bien !
        $in_liste = sql_in('id_document', $GLOBALS['doublons_documents_inclus']);
        $res = sql_allfetsel("id_document", "spip_documents", $in_liste);
        $res = array_map('reset', $res);
        // Creer le lien s'il n'existe pas deja
        objet_associer(array('document' => $res), array($type => $id), array('vu' => 'oui'));
        objet_qualifier_liens(array('document' => $res), array($type => $id), array('vu' => 'oui'));
    }
}
コード例 #3
0
ファイル: v019.php プロジェクト: nursit/SPIP
function maj_1_935()
{
    include_spip('inc/texte');
    foreach (array('article' => 'id_article', 'rubrique' => 'id_rubrique', 'breve' => 'id_breve') as $type => $id_table_objet) {
        $table_objet = "{$type}" . "s";
        $chapo = $type == 'article' ? ",a.chapo" : "";
        $res = spip_query("SELECT a.{$id_table_objet},a.texte {$chapo} FROM spip_documents_{$table_objet} AS d JOIN spip_{$table_objet} AS a ON a.{$id_table_objet}=d.{$id_table_objet} GROUP BY {$id_table_objet}");
        while ($row = sql_fetch($res)) {
            $GLOBALS['doublons_documents_inclus'] = array();
            traiter_modeles(($chapo ? $row['chapo'] : "") . $row['texte'], true);
            // detecter les doublons
            if (count($GLOBALS['doublons_documents_inclus'])) {
                $id = $row[$id_table_objet];
                $liste = "(" . implode(",{$id},'oui'),(", $GLOBALS['doublons_documents_inclus']) . ",{$id},'oui')";
                spip_query("REPLACE INTO spip_documents_{$table_objet} (`id_document`,`{$id_table_objet}`,`vu`) VALUES {$liste}");
            }
        }
    }
}
コード例 #4
0
ファイル: texte.php プロジェクト: genma/spip_ynh
/**
 * Typographie generale
 * avec protection prealable des balises HTML et SPIP
 *
 * http://code.spip.net/@typo
 *
 * @param string $letexte
 * @param bool $echapper
 * @param null $connect
 * @param array $env
 * @return string
 */
function typo($letexte, $echapper = true, $connect = null, $env = array())
{
    // Plus vite !
    if (!$letexte) {
        return $letexte;
    }
    // les appels directs a cette fonction depuis le php de l'espace
    // prive etant historiquement ecrit sans argment $connect
    // on utilise la presence de celui-ci pour distinguer les cas
    // ou il faut passer interdire_script explicitement
    // les appels dans les squelettes (de l'espace prive) fournissant un $connect
    // ne seront pas perturbes
    $interdire_script = false;
    if (is_null($connect)) {
        $connect = '';
        $interdire_script = true;
    }
    $echapper = $echapper ? 'TYPO' : false;
    // Echapper les codes <html> etc
    if ($echapper) {
        $letexte = echappe_html($letexte, $echapper);
    }
    //
    // Installer les modeles, notamment images et documents ;
    //
    // NOTE : propre() ne passe pas par ici mais directement par corriger_typo
    // cf. inc/lien
    $letexte = traiter_modeles($mem = $letexte, false, $echapper ? $echapper : '', $connect, null, $env);
    if (!$echapper and $letexte != $mem) {
        $echapper = '';
    }
    unset($mem);
    $letexte = corriger_typo($letexte);
    $letexte = echapper_faux_tags($letexte);
    // reintegrer les echappements
    if ($echapper !== false) {
        $letexte = echappe_retour($letexte, $echapper);
    }
    // Dans les appels directs hors squelette, securiser ici aussi
    if ($interdire_script) {
        $letexte = interdire_scripts($letexte);
    }
    return $letexte;
}
コード例 #5
0
ファイル: lien.php プロジェクト: JamesRezo/textwheel
function expanser_liens_tw($texte, $connect = '')
{
    $debug = _request('var_debug_wheel');
    $texte = pipeline('pre_liens', $texte);
    if ($debug) {
        spip_timer('liensmatch');
    }
    tw_expanser_un_lien($connect, 'init');
    if (strpos($texte, '->') !== false) {
        $texte = preg_replace_callback(_RACCOURCI_LIEN_TW, 'tw_expanser_un_lien', $texte);
    }
    if ($debug) {
        $GLOBALS['totaux']['expanser_liens:']['liensmatch'] += spip_timer('liensmatch', true);
    }
    // on passe a traiter_modeles la liste des liens reperes pour lui permettre
    // de remettre le texte d'origine dans les parametres du modele
    if ($debug) {
        spip_timer('traiter_modeles');
    }
    $texte = traiter_modeles($texte, false, false, $connect, tw_expanser_un_lien('', 'sources'));
    if ($debug) {
        $GLOBALS['totaux']['expanser_liens:']['traiter_modeles'] += spip_timer('traiter_modeles', true);
    }
    if ($debug) {
        spip_timer('corriger_typo');
    }
    $texte = corriger_typo($texte);
    if ($debug) {
        $GLOBALS['totaux']['expanser_liens:']['corriger_typo'] += spip_timer('corriger_typo', true);
    }
    if ($debug) {
        spip_timer('reinserts');
    }
    $texte = tw_expanser_un_lien($texte, 'reinsert');
    if ($debug) {
        $GLOBALS['totaux']['expanser_liens:']['reinserts'] += spip_timer('reinserts', true);
    }
    return $texte;
}
コード例 #6
0
/**
 * Trouver les documents utilisés dans le texte d'un objet et enregistrer cette liaison comme vue.
 *
 * La liste des champs susceptibles de contenir des documents ou images est indiquée
 * par la globale `medias_liste_champs` (un tableau).
 *
 * Le contenu de ces champs (du moins ceux qui existent pour l'objet demandé) est récupéré et analysé.
 * La présence d'un modèle de document dans ces contenus, tel que imgXX, docXX ou embXX
 * indique que le document est utilisé et doit être lié à l'objet, avec le champ `vu=oui`
 *
 * S'il y avait des anciens liens avec vu=oui qui n'ont plus lieu d'être, ils passent à non.
 *
 * @note
 *     La fonction pourrait avoir bien moins d'arguments : seuls $champs, $id, $type ou $objet, $desc, $serveur
 *     sont nécessaires. On calcule $desc s'il est absent, et il contient toutes les infos…
 *
 * @param array $champs
 *     Couples [champ => valeur] connus de l'objet
 * @param int $id
 *     Identifiant de l'objet
 * @param string $type
 *     Type d'objet éditorial (ex: article)
 * @param string $id_table_objet
 *     Nom de la clé primaire sur la table sql de l'objet
 * @param string $table_objet
 *     Nom de l'objet éditorial (ex: articles)
 * @param string $spip_table_objet
 *     Nom de la table sql de l'objet
 * @param array $desc
 *     Description de l'objet, si déjà calculé
 * @param string $serveur
 *     Serveur sql utilisé.
 * @return void|null
 **/
function inc_marquer_doublons_doc_dist($champs, $id, $type, $id_table_objet, $table_objet, $spip_table_objet, $desc = array(), $serveur = '')
{
    // On conserve uniquement les champs qui modifient le calcul des doublons de documents
    // S'il n'il en a aucun, les doublons ne sont pas impactés, donc rien à faire d'autre..
    if (!($champs = array_intersect_key($champs, array_flip($GLOBALS['medias_liste_champs'])))) {
        return;
    }
    if (!$desc) {
        $trouver_table = charger_fonction('trouver_table', 'base');
        $desc = $trouver_table($table_objet, $serveur);
    }
    // Il faut récupérer toutes les données qui impactent les liens de documents vus
    // afin de savoir lesquels sont présents dans les textes, et pouvoir actualiser avec
    // les liens actuellement enregistrés.
    $absents = array();
    // Récupérer chaque champ impactant qui existe dans la table de l'objet et qui nous manque
    foreach ($GLOBALS['medias_liste_champs'] as $champ) {
        if (isset($desc['field'][$champ]) and !isset($champs[$champ])) {
            $absents[] = $champ;
        }
    }
    // Retrouver les textes des champs manquants
    if ($absents) {
        $row = sql_fetsel($absents, $spip_table_objet, "{$id_table_objet}=" . sql_quote($id));
        if ($row) {
            $champs = array_merge($row, $champs);
        }
    }
    include_spip('inc/texte');
    include_spip('base/abstract_sql');
    include_spip('action/editer_liens');
    include_spip('base/objets');
    // récupérer la liste des modèles qui considèrent un document comme vu s'ils sont utilisés dans un texte
    $modeles = lister_tables_objets_sql('spip_documents');
    $modeles = $modeles['modeles'];
    // liste d'id_documents trouvés dans les textes
    $GLOBALS['doublons_documents_inclus'] = array();
    // detecter les doublons dans ces textes
    traiter_modeles(implode(" ", $champs), array('documents' => $modeles), '', '', null, array('objet' => $type, 'id_objet' => $id, $id_table_objet => $id));
    $texte_documents_vus = $GLOBALS['doublons_documents_inclus'];
    // on ne modifie les liaisons que si c'est nécessaire
    $bdd_documents_vus = array('oui' => array(), 'non' => array());
    $liaisons = objet_trouver_liens(array('document' => '*'), array($type => $id));
    foreach ($liaisons as $l) {
        $bdd_documents_vus[$l['vu']][] = $l['id_document'];
    }
    // il y a des nouveaux documents vus dans le texte
    $nouveaux = array_diff($texte_documents_vus, $bdd_documents_vus['oui']);
    // il y a des anciens documents vus dans la bdd
    $anciens = array_diff($bdd_documents_vus['oui'], $texte_documents_vus);
    if ($nouveaux) {
        // on vérifie que les documents indiqués vus existent réellement tout de même (en cas d'erreur de saisie)
        $ids = sql_allfetsel("id_document", "spip_documents", sql_in('id_document', $nouveaux));
        $ids = array_map('reset', $ids);
        if ($ids) {
            // Creer le lien s'il n'existe pas déjà
            objet_associer(array('document' => $ids), array($type => $id), array('vu' => 'oui'));
            objet_qualifier_liens(array('document' => $ids), array($type => $id), array('vu' => 'oui'));
        }
    }
    if ($anciens) {
        objet_qualifier_liens(array('document' => $anciens), array($type => $id), array('vu' => 'non'));
    }
}
コード例 #7
0
ファイル: lien.php プロジェクト: rhertzog/lcs
function expanser_liens($texte, $connect='')
{
	$texte = pipeline('pre_liens', $texte);
	$sources = $inserts = $regs = array();
	if (preg_match_all(_RACCOURCI_LIEN, $texte, $regs, PREG_SET_ORDER)) {
		$lien = charger_fonction('lien', 'inc');
		foreach ($regs as $k => $reg) {

			$inserts[$k] = '@@SPIP_ECHAPPE_LIEN_' . $k . '@@';
			$sources[$k] = $reg[0];
			$texte = str_replace($sources[$k], $inserts[$k], $texte);

			list($titre, $bulle, $hlang) = traiter_raccourci_lien_atts($reg[1]);
			$r = $reg[count($reg)-1];
			// la mise en lien automatique est passee par la a tort !
			// corrigeons pour eviter d'avoir un <a...> dans un href...
			if (strncmp($r,'<a',2)==0){
				$href = extraire_attribut($r, 'href');
				// remplacons dans la source qui peut etre reinjectee dans les arguments
				// d'un modele
				$sources[$k] = str_replace($r,$href,$sources[$k]);
				// et prenons le href comme la vraie url a linker
				$r = $href;
			}
			$regs[$k] = $lien($r, $titre, '', $bulle, $hlang, '', $connect);
		}
	}

	// on passe a traiter_modeles la liste des liens reperes pour lui permettre
	// de remettre le texte d'origine dans les parametres du modele
	$texte = traiter_modeles($texte, false, false, $connect, array($inserts, $sources));
 	$texte = corriger_typo($texte);
	$texte = str_replace($inserts, $regs, $texte);
	return $texte;
}
コード例 #8
0
ファイル: lien.php プロジェクト: loorenzooo/aslfc
function expanser_liens($t, $connect = '', $env = array())
{
    $t = pipeline('pre_liens', $t);
    expanser_un_lien($connect, 'init', $env);
    if (strpos($t, '->') !== false) {
        $t = preg_replace_callback(_RACCOURCI_LIEN, 'expanser_un_lien', $t);
    }
    // on passe a traiter_modeles la liste des liens reperes pour lui permettre
    // de remettre le texte d'origine dans les parametres du modele
    $t = traiter_modeles($t, false, false, $connect, expanser_un_lien('', 'sources'), $env);
    $t = corriger_typo($t);
    $t = expanser_un_lien($t, 'reinsert');
    return $t;
}
コード例 #9
0
ファイル: modifier.php プロジェクト: rhertzog/lcs
function marquer_doublons_documents($champs,$id,$type,$id_table_objet,$table_objet,$spip_table_objet, $desc=array(), $serveur=''){
	if (!isset($champs['texte']) AND !isset($champs['chapo'])) return;
	if (!$desc){
		$trouver_table = charger_fonction('trouver_table', 'base');
		$desc = $trouver_table($table_objet, $serveur);
	}
	$load = "";

	// charger le champ manquant en cas de modif partielle de l'objet
	// seulement si le champ existe dans la table demande
	if (!isset($champs['texte']) && isset($desc['field']['texte'])) $load = 'texte';
	if (!isset($champs['chapo']) && isset($desc['field']['chapo'])) $load = 'chapo';
	if ($load){
		$champs[$load] = "";
		$row = sql_fetsel($load, $spip_table_objet, "$id_table_objet=".sql_quote($id));
		if ($row AND isset($row[$load]))
			$champs[$load] = $row[$load];
	}
	include_spip('inc/texte');
	include_spip('base/abstract_sql');
	$GLOBALS['doublons_documents_inclus'] = array();
	traiter_modeles($champs['chapo'].$champs['texte'],true); // detecter les doublons
	sql_updateq("spip_documents_liens", array("vu" => 'non'), "id_objet=$id AND objet=".sql_quote($type));
	if (count($GLOBALS['doublons_documents_inclus'])){
		// on repasse par une requete sur spip_documents pour verifier que les documents existent bien !
		$in_liste = sql_in('id_document',
			$GLOBALS['doublons_documents_inclus']);
		$res = sql_select("id_document", "spip_documents", $in_liste);
		while ($row = sql_fetch($res)) {
			// Mettre le lien a jour ou le creer s'il n'existe pas deja
			if (!sql_updateq("spip_documents_liens", array("vu" => 'oui'), "id_objet=$id AND objet=".sql_quote($type)." AND id_document=".$row['id_document']) OR
			!sql_getfetsel("id_document", "spip_documents_liens", "id_document=".$row['id_document']." AND id_objet=$id AND objet=".sql_quote($type))) {
				sql_insertq("spip_documents_liens", array('id_objet' => $id, 'objet' => $type, 'id_document' => $row['id_document'], 'vu' => 'oui'));
				pipeline('post_edition',
					array(
						'args' => array(
							'operation' => 'lier_document',
							'table' => 'spip_documents',
							'id_objet' => $row['id_document'],
							'objet' => $type,
							'id' => $id
						),
						'data' => null
					)
				);
			}
		}
	}
}
コード例 #10
0
ファイル: rubriques_edit.php プロジェクト: rhertzog/lcs
function exec_rubriques_edit_args($id_rubrique, $id_parent, $new, $lier_trad)
{
	global $connect_toutes_rubriques, $connect_statut, $spip_lang_right;

	$titre = false;

	if ($new == "oui") {
		$id_rubrique = 0;
		$titre = filtrer_entites(_T('titre_nouvelle_rubrique'));

		if (!autoriser('creerrubriquedans','rubrique',$id_parent)) {
			$id_parent = intval(reset($GLOBALS['connect_id_rubrique']));
		}
	} else {
		$row = sql_fetsel("*", "spip_rubriques", "id_rubrique=$id_rubrique");
		if ($row) {
	
			$id_parent = $row['id_parent'];
			$titre = $row['titre'];
			$id_secteur = $row['id_secteur'];
		}
	}
	$commencer_page = charger_fonction('commencer_page', 'inc');

	if ($titre === false
	OR ($new=='oui' AND !autoriser('creerrubriquedans','rubrique',$id_parent))
	OR ($new!='oui' AND !autoriser('modifier','rubrique',$id_rubrique)))  {
		include_spip('inc/minipres');
		echo minipres();
	} else {

	pipeline('exec_init',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>''));
	echo $commencer_page(_T('info_modifier_titre', array('titre' => $titre)), "naviguer", "rubriques", $id_rubrique);

	if ($id_parent == 0) $ze_logo = "secteur-24.gif";
	else $ze_logo = "rubrique-24.gif";

	echo debut_grand_cadre(true);
	echo afficher_hierarchie($id_parent,'',$id_rubrique,'rubrique');
	echo fin_grand_cadre(true);

	echo debut_gauche('', true);

	// Pave "documents associes a la rubrique"
	if (!$new){
		# affichage sur le cote des pieces jointes, en reperant les inserees
		# note : traiter_modeles($texte, true) repere les doublons
		# aussi efficacement que propre(), mais beaucoup plus rapidement
		traiter_modeles(join('',$row), true);
		echo afficher_documents_colonne($id_rubrique, 'rubrique');
	} 

	echo pipeline('affiche_gauche',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>''));
	echo creer_colonne_droite('', true);
	echo pipeline('affiche_droite',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>''));	  
	echo debut_droite('', true);

	$contexte = array(
	'icone_retour'=>icone_inline(_T('icone_retour'), generer_url_ecrire("naviguer","id_rubrique=$id_rubrique"), $ze_logo, "rien.gif",$GLOBALS['spip_lang_left']),
	'redirect'=>generer_url_ecrire("naviguer"),
	'titre'=>$titre,
	'new'=>$new == "oui"?$new:$id_rubrique,
	'id_rubrique'=>$id_parent, // pour permettre la specialisation par la rubrique appelante
	'config_fonc'=>'rubriques_edit_config',
	'lier_trad'=>$lier_trad
	);

	echo recuperer_fond("prive/editer/rubrique", $contexte);

	echo pipeline('affiche_milieu',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>''));	  

	echo fin_gauche(), fin_page();
	}
}
コード例 #11
0
ファイル: articles_edit.php プロジェクト: rhertzog/lcs
function articles_edit($id_article, $id_rubrique, $lier_trad, $id_version, $new, $config_fonc, $row)
{
	$id_article = $row['id_article'];
	$id_rubrique = $row['id_rubrique'];
	$titre = sinon($row["titre"],_T('info_sans_titre'));
	$commencer_page = charger_fonction('commencer_page', 'inc');
	pipeline('exec_init',array('args'=>array('exec'=>'articles_edit','id_article'=>$id_article),'data'=>''));
	
	if ($id_version) $titre.= ' ('._T('version')." $id_version)";

	echo $commencer_page(_T('titre_page_articles_edit', array('titre' => $titre)), "naviguer", "articles", $id_rubrique);

	echo debut_grand_cadre(true);
	echo afficher_hierarchie($id_rubrique,'',$id_article,'article');
	echo fin_grand_cadre(true);

	echo debut_gauche("",true);

	// Pave "documents associes a l'article"
	
	if (!$new){
		# affichage sur le cote des pieces jointes, en reperant les inserees
		# note : traiter_modeles($texte, true) repere les doublons
		# aussi efficacement que propre(), mais beaucoup plus rapidement
		traiter_modeles(join('',$row), true);
		echo afficher_documents_colonne($id_article, 'article');
	} else {
		# ICI GROS HACK
		# -------------
		# on est en new ; si on veut ajouter un document, on ne pourra
		# pas l'accrocher a l'article (puisqu'il n'a pas d'id_article)...
		# on indique donc un id_article farfelu (0-id_auteur) qu'on ramassera
		# le moment venu, c'est-a-dire lors de la creation de l'article
		# dans editer_article.
		echo afficher_documents_colonne(
			0-$GLOBALS['visiteur_session']['id_auteur'], 'article');
	}

	echo pipeline('affiche_gauche',array('args'=>array('exec'=>'articles_edit','id_article'=>$id_article),'data'=>''));
	echo creer_colonne_droite("",true);
	echo pipeline('affiche_droite',array('args'=>array('exec'=>'articles_edit','id_article'=>$id_article),'data'=>''));
	echo debut_droite("",true);
	
	$oups = ($lier_trad ?
	     generer_url_ecrire("articles","id_article=$lier_trad")
	     : ($new
		? generer_url_ecrire("naviguer","id_rubrique=".$row['id_rubrique'])
		: generer_url_ecrire("articles","id_article=".$row['id_article'])
		));

	$contexte = array(
	'icone_retour'=>icone_inline(_T('icone_retour'), $oups, "article-24.gif", "rien.gif",$GLOBALS['spip_lang_left']),
	'redirect'=>generer_url_ecrire("articles"),
	'titre'=>$titre,
	'new'=>$new?$new:$row['id_article'],
	'id_rubrique'=>$row['id_rubrique'],
	'id_secteur'=>$row['id_secteur'],
	'lier_trad'=>$lier_trad,
	'config_fonc'=>$config_fonc,
	// passer row si c'est le retablissement d'une version anterieure
	'row'=> $id_version
		? $row
		: null
	);

	$milieu = recuperer_fond("prive/editer/article", $contexte);
	
	echo pipeline('affiche_milieu',array('args'=>array('exec'=>'articles_edit','id_article'=>$id_article),'data'=>$milieu));

	echo fin_gauche(), fin_page();
}
コード例 #12
0
ファイル: breves_edit.php プロジェクト: rhertzog/lcs
function breves_edit_ok($row, $id_breve, $id_rubrique, $new)
{
	global  $connect_statut, $spip_lang_right;

	if ($new != 'oui') {
		$id_breve=$row['id_breve'];
		$titre=$row['titre'];
		$statut=$row['statut'];
		$id_rubrique=$row['id_rubrique'];
	} else {
		$titre = filtrer_entites(_T('titre_nouvelle_breve'));
		$statut = "prop";
	}

	$commencer_page = charger_fonction('commencer_page', 'inc');
	pipeline('exec_init',array('args'=>array('exec'=>'breves_edit','id_breve'=>$id_breve),'data'=>''));

	echo $commencer_page(_T('titre_page_breves_edit', array('titre' => $titre)), "naviguer", "breves", $id_rubrique);

	echo debut_grand_cadre(true);
	echo afficher_hierarchie($id_rubrique);

	echo fin_grand_cadre(true);
	echo debut_gauche('', true);
	if ($new != 'oui' AND ($connect_statut=="0minirezo" OR $statut=="prop")) {
	# affichage sur le cote des images, en reperant les inserees
	# note : traiter_modeles($texte, true) repere les doublons
	# aussi efficacement que propre(), mais beaucoup plus rapidement
		traiter_modeles("$titre$texte", true);
		echo afficher_documents_colonne($id_breve, "breve");
	}
	echo pipeline('affiche_gauche',array('args'=>array('exec'=>'breves_edit','id_breve'=>$id_breve),'data'=>''));
	echo creer_colonne_droite('', true);
	echo pipeline('affiche_droite',array('args'=>array('exec'=>'breves_edit','id_breve'=>$id_breve),'data'=>''));
	echo debut_droite('', true);

	$contexte = array(
	'icone_retour'=>$new=='oui'?'':icone_inline(_T('icone_retour'), generer_url_ecrire("breves_voir","id_breve=$id_breve"), "breve-24.gif", "rien.gif",$GLOBALS['spip_lang_left']),
	'redirect'=>generer_url_ecrire("breves_voir"),
	'titre'=>$titre,
	'new'=>$new == "oui"?$new:$id_breve,
	'id_rubrique'=>$id_rubrique,
	'config_fonc'=>'breves_edit_config'
	);

	echo recuperer_fond("prive/editer/breve", $contexte);

	echo fin_gauche(), fin_page();

}