diff --git a/.gitattributes b/.gitattributes index c7693b4818b774cb37e34a2d0879e81848b7731f..f15d5ae2f79c48af1459d3e8b54700d0032bacab 100644 --- a/.gitattributes +++ b/.gitattributes @@ -12,6 +12,10 @@ dist/formulaires/editer_article/charger.php -text dist/formulaires/editer_article/traiter.php -text dist/formulaires/editer_article/verifier.php -text dist/formulaires/editer_article_fonctions.php -text +dist/formulaires/editer_rubrique.html -text +dist/formulaires/editer_rubrique/charger.php -text +dist/formulaires/editer_rubrique/traiter.php -text +dist/formulaires/editer_rubrique/verifier.php -text dist/formulaires/formulaire_.html -text dist/formulaires/login_forum_abo.html -text dist/formulaires/logo_auteur.html -text @@ -302,6 +306,7 @@ dist/prive/contenu/breve.html -text dist/prive/contenu/rubrique.html -text dist/prive/contenu/site.html -text dist/prive/editer/article.html -text +dist/prive/editer/rubrique.html -text dist/prive/infos/article.html -text dist/prive/infos/article_fonctions.php -text dist/prive/infos/auteur.html -text diff --git a/dist/formulaires/editer_article.html b/dist/formulaires/editer_article.html index 4f989d5275532f7d1e3744cb2a30f22f9c604889..337b2c42a0f2061b78cc22cf4feba2217670c2b9 100644 --- a/dist/formulaires/editer_article.html +++ b/dist/formulaires/editer_article.html @@ -1,4 +1,4 @@ -<div class='formfx'> +<div class='formfx editer_article'> <br class='spacer' /> [<p class="formulaire_message">(#ENV*{message_ok})</p>] [<p class='formulaire_erreur'>(#ENV*{message_erreur})</p>] @@ -29,14 +29,14 @@ [<span class='erreur'>(#ENV**{erreurs}|table_valeur{soustitre})</span>] </li>] - [<li>(#REM|sinon{titre_cadre_interieur_rubrique}|_T|concat{' ',#AIDER{artrub}} - |chercher_rubrique{#ENV{id_rubrique}, #ENV{id_secteur},#ENV**{config}|table_valeur{restreint}})</li>] + [<li>(#VAL{titre_cadre_interieur_rubrique}|_T|concat{' ',#AIDER{artrub}} + |chercher_rubrique{#ENV{id_rubrique},'article',#ENV{id_secteur},#ENV**{config}|table_valeur{restreint}})</li>] [(#ENV**{config}|table_valeur{articles_descriptif}|=={non}|?{#ENV**{descriptif,''},' '}|?{' '}) <li class="haut"> <label for="descriptif"><:texte_descriptif_rapide:><em>#AIDER{artdesc}</em></label> <textarea name='descriptif' id='descriptif' class='forml' rows='2' cols='40'>[(#ENV**{descriptif})]</textarea> - [<span class='erreur'>(#ENV**{erreurs}|table_valeur{desctiptid})</span>] + [<span class='erreur'>(#ENV**{erreurs}|table_valeur{desctiptif})</span>] </li>] [(#ENV**{config}|table_valeur{articles_chapeau}|=={non}|?{#ENV**{chapo,''},' '}|?{' '}) [<li class='haut redirection'>(#ENV**{chapo}|match{^=}|?{' '}) diff --git a/dist/formulaires/editer_article/charger.php b/dist/formulaires/editer_article/charger.php index 463cf609a761523c99f064b48fec11f7eb8c5470..b196d3c999b6eab2ecc885aac8be0907e5b04c98 100644 --- a/dist/formulaires/editer_article/charger.php +++ b/dist/formulaires/editer_article/charger.php @@ -17,135 +17,20 @@ include_spip('inc/editer'); // http://doc.spip.org/@inc_editer_article_dist function formulaires_editer_article_charger_dist($id_article='new', $id_rubrique=0, $lier_trad=0, $retour='', $config_fonc='articles_edit_config', $row=array(), $hidden=''){ - - $new = $id_article; - // Appel direct dans un squelette - if (!$row) { - include_spip('inc/article_select'); - $row = article_select($id_article, $id_rubrique, $lier_trad); - if (!$row) return ''; - if (is_numeric($id_article)) $new = ''; - else $new = $id_article; - } - // Gaffe: sans ceci, on ecrase systematiquement l'article d'origine - // (et donc: pas de lien de traduction) - $id_article = ($new OR $lier_trad) ? 'oui' : $row['id_article']; - - $contexte = $row; - $contexte['config'] = $config = $config_fonc($row); - $att_text = " class='formo' " - . $GLOBALS['browser_caret'] - . " rows='" - . ($config['lignes'] +15) - . "' cols='40'"; - list($contexte['texte'],$contexte['_texte_trop_long']) = editer_article_recolle($contexte['texte'],$att_text); - - // on veut conserver la langue de l'interface ; - // on passe cette donnee sous un autre nom, au cas ou le squelette - // voudrait l'exploiter - if (isset($contexte['lang'])) { - $contexte['langue'] = $contexte['lang']; - unset($contexte['lang']); - } - - $contexte['browser_caret']=$GLOBALS['browser_caret']; - - $contexte['_hidden'] = "<input type='hidden' name='editer_article' value='oui' />\n" . - (!$lier_trad ? '' : - ("\n<input type='hidden' name='lier_trad' value='" . - $lier_trad . - "' />" . - "\n<input type='hidden' name='changer_lang' value='" . - $config['langue'] . - "' />")) . $hidden; - - // Ajouter le controles md5 - if (intval($id_article)) { - include_spip('inc/editer'); - $contexte['_hidden'] .= controles_md5($row); - } - if (isset($contexte['extra'])) - $contexte['extra'] = unserialize($contexte['extra']); - - // preciser que le formulaire doit passer dans un pipeline - $contexte['_pipeline'] = array('editer_contenu_objet','args'=>array('type'=>'article','id'=>$id_article,'contexte'=>$contexte)); - // preciser que le formulaire doit etre securise auteur/action - $contexte['_action'] = array('editer_article',$id_article); - - return $contexte; -} - - -// -// Gestion des textes trop longs (limitation brouteurs) -// utile pour les textes > 32ko - -// http://doc.spip.org/@coupe_trop_long -function coupe_trop_long($texte){ - $aider = charger_fonction('aider', 'inc'); - if (strlen($texte) > 28*1024) { - $texte = str_replace("\r\n","\n",$texte); - $pos = strpos($texte, "\n\n", 28*1024); // coupe para > 28 ko - if ($pos > 0 and $pos < 32 * 1024) { - $debut = substr($texte, 0, $pos)."\n\n<!--SPIP-->\n"; - $suite = substr($texte, $pos + 2); - } else { - $pos = strpos($texte, " ", 28*1024); // sinon coupe espace - if (!($pos > 0 and $pos < 32 * 1024)) { - $pos = 28*1024; // au pire (pas d'espace trouv'e) - $decalage = 0; // si y'a pas d'espace, il ne faut pas perdre le caract`ere - } else { - $decalage = 1; - } - $debut = substr($texte,0,$pos + $decalage); // Il faut conserver l'espace s'il y en a un - $suite = substr($texte,$pos + $decalage); - } - return (array($debut,$suite)); - } - else - return (array($texte,'')); + return formulaires_editer_objet_charger('article',$id_article,$id_rubrique,$lier_trad,$retour,$config_fonc,$row,$hidden); } -// http://doc.spip.org/@editer_article_recolle -function editer_article_recolle($texte, $att_text) -{ - if ((strlen($texte)<29*1024) - OR (include_spip('inc/layer') AND ($GLOBALS['browser_name']!="MSIE")) ) - return array($texte,""); - - include_spip('inc/barre'); - $textes_supplement = "<br /><span style='color: red'>"._T('info_texte_long')."</span>\n"; - $nombre = 0; - - while (strlen($texte)>29*1024) { - $nombre ++; - list($texte1,$texte) = coupe_trop_long($texte); - $id = "document.getElementById('texte$nombre')"; - $textes_supplement .= "<br />" . afficher_barre($id) . - "<textarea id='texte$nombre' name='texte_plus[$nombre]'$att_text>$texte1</textarea>\n"; - } - return array($texte,$textes_supplement); -} - - // Choix par defaut des options de presentation // http://doc.spip.org/@articles_edit_config function articles_edit_config($row) { - global /*$champs_extra,*/ $spip_ecran, $spip_lang, $spip_display; + global $spip_ecran, $spip_lang, $spip_display; $config = $GLOBALS['meta']; $config['lignes'] = ($spip_ecran == "large")? 8 : 5; $config['afficher_barre'] = $spip_display != 4; $config['langue'] = $spip_lang; - /*if ($champs_extra) { - include_spip('inc/extra'); - $config['extra'] = true; - } - else - $config['extra'] = false;*/ - $config['restreint'] = ($row['statut'] == 'publie'); return $config; } diff --git a/dist/formulaires/editer_article/traiter.php b/dist/formulaires/editer_article/traiter.php index 974df0ca479e84aefd8a6a5b338f26f78694f5e4..ddaac26ffdb1f9fcd26ae4534bd163f6a1fd4879 100644 --- a/dist/formulaires/editer_article/traiter.php +++ b/dist/formulaires/editer_article/traiter.php @@ -17,18 +17,7 @@ include_spip('inc/editer'); // http://doc.spip.org/@inc_editer_article_dist function formulaires_editer_article_traiter_dist($id_article='new', $id_rubrique=0, $lier_trad=0, $retour='', $config_fonc='articles_edit_config', $row=array(), $hidden=''){ - - $message = ""; - $action_editer_article = charger_fonction('editer_article','action'); - list($id_article,$err) = $action_editer_article(); - if ($err){ - $message .= $err; - } - elseif ($retour) { - include_spip('inc/headers'); - $message .= redirige_formulaire(parametre_url($retour,'id_article',$id_article)); - } - return $message; + return formulaires_editer_objet_traiter('article',$id_article,$id_rubrique,$lier_trad,$retour,$config_fonc,$row,$hidden); } ?> \ No newline at end of file diff --git a/dist/formulaires/editer_article_fonctions.php b/dist/formulaires/editer_article_fonctions.php index d99f86d0d42a85d2694d685082d4223ded224f1c..c43ef7fb4317a75120398aa29f26ed80ca323a7a 100644 --- a/dist/formulaires/editer_article_fonctions.php +++ b/dist/formulaires/editer_article_fonctions.php @@ -1,17 +1,5 @@ <?php -function chercher_rubrique($msg, $id_rubrique, $id_secteur, $restreint){ - $chercher_rubrique = charger_fonction('chercher_rubrique', 'inc'); - $opt = $chercher_rubrique($id_rubrique, 'article', $restreint); - - if ($id_rubrique == 0) $logo = "racine-site-24.gif"; - elseif ($id_secteur == $id_rubrique) $logo = "secteur-24.gif"; - else $logo = "rubrique-24.gif"; - - include_spip('inc/presentation'); - return debut_cadre_couleur($logo, true, "", $msg) . $opt .fin_cadre_couleur(true); -} - function barre_typo($id,$lang=''){ include_spip('inc/barre'); return '<div>' . afficher_barre("document.getElementById('$id')",false,$lang) . '</div>'; diff --git a/dist/formulaires/editer_rubrique.html b/dist/formulaires/editer_rubrique.html new file mode 100644 index 0000000000000000000000000000000000000000..a16bbb6e41c8382606fe940092935011c44fec54 --- /dev/null +++ b/dist/formulaires/editer_rubrique.html @@ -0,0 +1,46 @@ +<div class='formfx editer_rubrique'> + <br class='spacer' /> + [<p class="formulaire_message">(#ENV*{message_ok})</p>] + [<p class='formulaire_erreur'>(#ENV*{message_erreur})</p>] + [(#ENV{editable}) + <form method='post' action='#ENV{action}' enctype='multipart/form-data' class='noajax'> + [(#REM) declarer les hidden qui declencheront le service du formulaire + parametre : url d'action ] + #ACTION_FORMULAIRE{#ENV{action}} + <input type='hidden' name='id_article' value='#ENV{id_article}' /> + <fieldset> + <ol class="formfx"> + <li class="gauche obligatoire"> + <label for="titre"><:info_titre:><em>#AIDER{arttitre}</em></label> + <input type='text' name='titre' id='titre' class='formo' value="[(#ENV**{titre,#REM|concat{info_nouvel_article}|_T})]" + [(#ENV{titre,''}|?{'',' '})onfocus="if(!antifocus){this.value='';antifocus=true;}"]/> + [<span class='erreur'>(#ENV**{erreurs}|table_valeur{titre})</span>] + </li> + + [<li>(#VAL{titre_cadre_interieur_rubrique}|_T|concat{' ',#AIDER{rubrub}} + |chercher_rubrique{#ENV{id_rubrique},'rubrique',#ENV{id_secteur},#ENV**{config}|table_valeur{restreint}})</li>] + + [(#ENV**{config}|table_valeur{rubriques_descriptif}|=={non}|?{#ENV**{descriptif,''},' '}|?{' '}) + <li class="haut"> + <label for="descriptif"><:texte_descriptif_rapide:></label> + <div class='commentaire'><:entree_contenu_rubrique:></div> + <textarea name='descriptif' id='descriptif' class='forml' rows='2' cols='40'>[(#ENV**{descriptif})]</textarea> + [<span class='erreur'>(#ENV**{erreurs}|table_valeur{desctiptif})</span>] + </li>] + [(#ENV**{config}|table_valeur{rubriques_texte}|=={non}|?{#ENV**{texte,''},' '}|?{' '}) + <li class="haut"> + <label for="text_area"><:info_texte_explicatif:><em>#AIDER{raccourcis}</em></label> + [(#ENV**{_texte_trop_long,''})] + <div class="commentaire"><:texte_enrichir_mise_a_jour:><em>#AIDER{raccourcis}</em></div> + <textarea name='texte' id='text_area' class='formo barre_inserer' rows='[(#ENV**{config}|table_valeur{lignes}|plus{2})]' cols='40'[ + (#ENV**{browser_caret,''})]>[(#ENV**{texte})]</textarea> + [<span class='erreur'>(#ENV**{erreurs}|table_valeur{texte})</span>] + </li>] + </ol> + </fieldset> + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] + <!--extra--> + <div style='text-align: right'><input class='fondo' type='submit' value='<:bouton_enregistrer:>' /></div> + </form> + ] +</div> \ No newline at end of file diff --git a/dist/formulaires/editer_rubrique/charger.php b/dist/formulaires/editer_rubrique/charger.php new file mode 100644 index 0000000000000000000000000000000000000000..c33feee904aa56d2fd6354f1c115bdef3acd653c --- /dev/null +++ b/dist/formulaires/editer_rubrique/charger.php @@ -0,0 +1,35 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2008 * + * 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('inc/actions'); +include_spip('inc/editer'); + +// http://doc.spip.org/@inc_editer_article_dist +function formulaires_editer_rubrique_charger_dist($id_rubrique='new', $id_parent=0, $lier_trad=0, $retour='', $config_fonc='rubriques_edit_config', $row=array(), $hidden=''){ + return formulaires_editer_objet_charger('rubrique',$id_rubrique,$id_parent,$lier_trad,$retour,$config_fonc,$row,$hidden); +} + +function rubriques_edit_config($row) +{ + global $spip_ecran, $spip_lang, $spip_display; + + $config = $GLOBALS['meta']; + $config['lignes'] = ($spip_ecran == "large")? 8 : 5; + $config['afficher_barre'] = $spip_display != 4; + $config['langue'] = $spip_lang; + + $config['restreint'] = (!$GLOBALS['connect_toutes_rubriques']); + return $config; +} +?> \ No newline at end of file diff --git a/dist/formulaires/editer_rubrique/traiter.php b/dist/formulaires/editer_rubrique/traiter.php new file mode 100644 index 0000000000000000000000000000000000000000..a4b02058342f38b2002cb51240e7adf4becd21ea --- /dev/null +++ b/dist/formulaires/editer_rubrique/traiter.php @@ -0,0 +1,22 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2008 * + * 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('inc/actions'); +include_spip('inc/editer'); + +function formulaires_editer_rubrique_traiter_dist($id_rubrique='new', $id_parent=0, $lier_trad=0, $retour='', $config_fonc='rubriques_edit_config', $row=array(), $hidden=''){ + return formulaires_editer_objet_traiter('rubrique',$id_rubrique,$id_parent,$lier_trad,$retour,$config_fonc,$row,$hidden); +} + +?> \ No newline at end of file diff --git a/dist/formulaires/editer_rubrique/verifier.php b/dist/formulaires/editer_rubrique/verifier.php new file mode 100644 index 0000000000000000000000000000000000000000..b21fef9aa3e7b4abc805abf1580946f7c14289d7 --- /dev/null +++ b/dist/formulaires/editer_rubrique/verifier.php @@ -0,0 +1,37 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2008 * + * 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('inc/actions'); +include_spip('inc/editer'); + +function formulaires_editer_rubrique_verifier_dist($id_rubrique='new', $id_parent=0, $lier_trad=0, $retour='', $config_fonc='rubriques_edit_config', $row=array(), $hidden=''){ + + $erreurs = array(); + if (intval($id_article)) { + $conflits = controler_contenu('rubrique',$id_rubrique); + if (count($conflits)) { + foreach($conflits as $champ=>$conflit){ + $erreurs[$champ] .= _L("ATTENTION : Ce champ a été modifié par ailleurs. La valeur actuelle est :<br /><textarea readonly='readonly' class='forml'>".$conflit['base']."</textarea>"); + } + } + } + foreach(array('titre') as $obli){ + if (!_request($obli)) + $erreurs[$obli] .= _L("Cette information est obligatoire");; + } + + return $erreurs; +} + +?> \ No newline at end of file diff --git a/dist/prive/editer/rubrique.html b/dist/prive/editer/rubrique.html new file mode 100644 index 0000000000000000000000000000000000000000..f090a664888fe43c02c9dce255e564aa540d5bc4 --- /dev/null +++ b/dist/prive/editer/rubrique.html @@ -0,0 +1,5 @@ +#ENV**{icone_retour} +[<:info_modifier_rubrique:> +<h1>(#ENV{titre})</h1>] +<hr class='fin_article_presentation' /> +#FORMULAIRE_EDITER_RUBRIQUE{#ENV{new},#ENV{id_rubrique},#ENV{lier_trad},#ENV{redirect},#ENV{config_fonc}} \ No newline at end of file diff --git a/ecrire/action/editer_rubrique.php b/ecrire/action/editer_rubrique.php index 55fe06db583f28d14813e8ac79cda1a9cb8c37a6..8e545bd567826883bc7abf493f7fa51c4e596c83 100644 --- a/ecrire/action/editer_rubrique.php +++ b/ecrire/action/editer_rubrique.php @@ -28,10 +28,15 @@ function action_editer_rubrique_dist() { revisions_rubriques($id_rubrique); - $redirect = parametre_url( - urldecode(_request('redirect')), - 'id_rubrique', $id_rubrique, '&'); - redirige_par_entete($redirect); + if (_request('redirect')) { + $redirect = parametre_url( + urldecode(_request('redirect')), + 'id_rubrique', $id_rubrique, '&'); + + redirige_par_entete($redirect); + } + else + return array($id_rubrique,''); } diff --git a/ecrire/exec/rubriques_edit.php b/ecrire/exec/rubriques_edit.php index 4919bb7729ac422ef26055ec9884b057714421cb..6e898fc918ce74b0df57830a053f5fec69b993e0 100644 --- a/ecrire/exec/rubriques_edit.php +++ b/ecrire/exec/rubriques_edit.php @@ -98,9 +98,22 @@ function exec_rubriques_edit_args($id_rubrique, $id_parent, $new) echo creer_colonne_droite('', true); echo pipeline('affiche_droite',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>'')); echo debut_droite('', true); - + echo debut_cadre_formulaire("", 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_right']), + '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' + ); + $page = evaluer_fond("prive/editer/rubrique", $contexte, $connect); + echo $page['texte']; + echo fin_cadre_formulaire(true); + /* + if ($id_rubrique) echo icone_inline(_T('icone_retour'), generer_url_ecrire("naviguer","id_rubrique=$id_rubrique"), $ze_logo, "rien.gif",$spip_lang_right); else echo icone_inline(_T('icone_retour'), generer_url_ecrire("naviguer","id_rubrique=$id_parent"), $ze_logo, "rien.gif",$spip_lang_right); @@ -119,8 +132,8 @@ function exec_rubriques_edit_args($id_rubrique, $id_parent, $new) $form .= "<li>" . debut_cadre_couleur("$logo_parent", true, '', _T('entree_interieur_rubrique').aide ("rubrub")) . $chercher_rubrique($id_parent, 'rubrique', !$connect_toutes_rubriques, $id_rubrique); -// si c'est une rubrique-secteur contenant des breves, demander la -// confirmation du deplacement + // si c'est une rubrique-secteur contenant des breves, demander la + // confirmation du deplacement $contient_breves = sql_countsel('spip_breves', "id_rubrique=$id_rubrique",'',2); if ($contient_breves > 0) { @@ -175,12 +188,11 @@ function exec_rubriques_edit_args($id_rubrique, $id_parent, $new) $form .= "</ol>"; echo redirige_action_auteur("editer_rubrique", $id_rubrique ? $id_rubrique : 'oui', 'naviguer', '', $form, " method='post'"); - - echo "\n", fin_cadre_formulaire(true); + */ echo pipeline('affiche_milieu',array('args'=>array('exec'=>'rubriques_edit','id_rubrique'=>$id_rubrique),'data'=>'')); echo fin_gauche(), fin_page(); } } -?> +?> \ No newline at end of file diff --git a/ecrire/inc/editer.php b/ecrire/inc/editer.php index c061011a3d27aa08bd3843894a403775cd90d37a..638695930c5c412c179bd9b7ec0afde677e7ea8e 100644 --- a/ecrire/inc/editer.php +++ b/ecrire/inc/editer.php @@ -12,6 +12,137 @@ if (!defined("_ECRIRE_INC_VERSION")) return; +function formulaires_editer_objet_traiter($type, $id='new', $id_parent=0, $lier_trad=0, $retour='', $config_fonc='articles_edit_config', $row=array(), $hidden=''){ + + $message = ""; + $action_editer = charger_fonction("editer_$type",'action'); + list($id,$err) = $action_editer(); + if ($err){ + $message .= $err; + } + elseif ($retour) { + include_spip('inc/headers'); + $id_table_objet = id_table_objet($type); + $message .= redirige_formulaire(parametre_url($retour,$id_table_objet,$id)); + } + return $message; +} + +function formulaires_editer_objet_charger($type, $id='new', $id_parent=0, $lier_trad=0, $retour='', $config_fonc='articles_edit_config', $row=array(), $hidden=''){ + $table_objet = table_objet($type); + $table_objet_sql = table_objet_sql($type); + $id_table_objet = id_table_objet($type); + + $new = $id; + // Appel direct dans un squelette + if (!$row) { + if ($select = charger_fonction($type."_select",'inc',true)){ + $row = article_select($id, $id_parent, $lier_trad); + if (!$row) return ''; + } + else { + $row = sql_fetsel('*',$table_objet_sql,$id_table_objet."=".intval($id)); + } + if (is_numeric($id)) $new = ''; + else $new = $id; + } + // Gaffe: sans ceci, on ecrase systematiquement l'article d'origine + // (et donc: pas de lien de traduction) + $id = ($new OR $lier_trad) ? 'oui' : $row[$id_table_objet]; + + $contexte = $row; + $contexte['config'] = $config = $config_fonc($row); + $att_text = " class='formo' " + . $GLOBALS['browser_caret'] + . " rows='" + . ($config['lignes'] +15) + . "' cols='40'"; + list($contexte['texte'],$contexte['_texte_trop_long']) = editer_texte_recolle($contexte['texte'],$att_text); + + // on veut conserver la langue de l'interface ; + // on passe cette donnee sous un autre nom, au cas ou le squelette + // voudrait l'exploiter + if (isset($contexte['lang'])) { + $contexte['langue'] = $contexte['lang']; + unset($contexte['lang']); + } + + $contexte['browser_caret']=$GLOBALS['browser_caret']; + + $contexte['_hidden'] = "<input type='hidden' name='editer_$type' value='oui' />\n" . + (!$lier_trad ? '' : + ("\n<input type='hidden' name='lier_trad' value='" . + $lier_trad . + "' />" . + "\n<input type='hidden' name='changer_lang' value='" . + $config['langue'] . + "' />")) . $hidden; + + // Ajouter le controles md5 + if (intval($id)) { + $contexte['_hidden'] .= controles_md5($row); + } + if (isset($contexte['extra'])) + $contexte['extra'] = unserialize($contexte['extra']); + + // preciser que le formulaire doit passer dans un pipeline + $contexte['_pipeline'] = array('editer_contenu_objet','args'=>array('type'=>$type,'id'=>$id,'contexte'=>$contexte)); + // preciser que le formulaire doit etre securise auteur/action + $contexte['_action'] = array("editer_$type",$id); + + return $contexte; +} + +// +// Gestion des textes trop longs (limitation brouteurs) +// utile pour les textes > 32ko + +// http://doc.spip.org/@coupe_trop_long +function coupe_trop_long($texte){ + $aider = charger_fonction('aider', 'inc'); + if (strlen($texte) > 28*1024) { + $texte = str_replace("\r\n","\n",$texte); + $pos = strpos($texte, "\n\n", 28*1024); // coupe para > 28 ko + if ($pos > 0 and $pos < 32 * 1024) { + $debut = substr($texte, 0, $pos)."\n\n<!--SPIP-->\n"; + $suite = substr($texte, $pos + 2); + } else { + $pos = strpos($texte, " ", 28*1024); // sinon coupe espace + if (!($pos > 0 and $pos < 32 * 1024)) { + $pos = 28*1024; // au pire (pas d'espace trouv'e) + $decalage = 0; // si y'a pas d'espace, il ne faut pas perdre le caract`ere + } else { + $decalage = 1; + } + $debut = substr($texte,0,$pos + $decalage); // Il faut conserver l'espace s'il y en a un + $suite = substr($texte,$pos + $decalage); + } + return (array($debut,$suite)); + } + else + return (array($texte,'')); +} + +function editer_texte_recolle($texte, $att_text) +{ + if ((strlen($texte)<29*1024) + OR (include_spip('inc/layer') AND ($GLOBALS['browser_name']!="MSIE")) ) + return array($texte,""); + + include_spip('inc/barre'); + $textes_supplement = "<br /><span style='color: red'>"._T('info_texte_long')."</span>\n"; + $nombre = 0; + + while (strlen($texte)>29*1024) { + $nombre ++; + list($texte1,$texte) = coupe_trop_long($texte); + $id = "document.getElementById('texte$nombre')"; + $textes_supplement .= "<br />" . afficher_barre($id) . + "<textarea id='texte$nombre' name='texte_plus[$nombre]'$att_text>$texte1</textarea>\n"; + } + return array($texte,$textes_supplement); +} + // Produit la liste des md5 d'un tableau de donnees, sous forme // de inputs html diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php index 737505b7546bb4ea93170cad6896f1a7cbebaee4..11726abfb566d2050ecb61969043cea3d53824e7 100644 --- a/ecrire/inc/filtres.php +++ b/ecrire/inc/filtres.php @@ -2448,4 +2448,32 @@ function f_extra_editer_contenu_objet($flux){ return $flux; } + +function chercher_rubrique($msg, $id_rubrique, $type, $id_secteur, $restreint){ + $chercher_rubrique = charger_fonction('chercher_rubrique', 'inc'); + $opt = $chercher_rubrique($id_rubrique, $type, $restreint); + + if ($id_rubrique == 0) $logo = "racine-site-24.gif"; + elseif ($id_secteur == $id_rubrique) $logo = "secteur-24.gif"; + else $logo = "rubrique-24.gif"; + + $confirm = ""; + if ($type=='rubrique') { + // si c'est une rubrique-secteur contenant des breves, demander la + // confirmation du deplacement + $contient_breves = sql_countsel('spip_breves', "id_rubrique=$id_rubrique",'',2); + + if ($contient_breves > 0) { + $scb = ($contient_breves>1? 's':''); + $scb = _T('avis_deplacement_rubrique', + array('contient_breves' => $contient_breves, + 'scb' => $scb)); + $confirm .= "\n<div class='confirmer_deplacement verdana2'><input type='checkbox' name='confirme_deplace' value='oui' id='confirme-deplace' /><label for='confirme-deplace'>" . $scb . "</label></div>\n"; + } else + $confirm .= "<input type='hidden' name='confirme_deplace' value='oui' />\n"; + } + include_spip('inc/presentation'); + return debut_cadre_couleur($logo, true, "", $msg) . $opt . $confirm .fin_cadre_couleur(true); +} + ?> \ No newline at end of file