source: spip-zone/_plugins_/_dev_/aidejTip/exec/articles_edit.php @ 7230

Last change on this file since 7230 was 7230, checked in by real3t@…, 13 years ago

La version avec articles_edit.php modifié pour rajouter les bouton d'appel de l'aide.

File size: 12.1 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2006                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15include_spip('inc/presentation');
16include_spip('inc/article_select');
17include_spip('inc/rubriques');
18include_spip('inc/actions');
19include_spip('inc/documents');
20include_spip('inc/barre');
21
22//
23// Gestion des textes trop longs (limitation brouteurs)
24//
25
26// http://doc.spip.org/@coupe_trop_long
27function coupe_trop_long($texte){       // utile pour les textes > 32ko
28        if (strlen($texte) > 28*1024) {
29                $texte = str_replace("\r\n","\n",$texte);
30                $pos = strpos($texte, "\n\n", 28*1024); // coupe para > 28 ko
31                if ($pos > 0 and $pos < 32 * 1024) {
32                        $debut = substr($texte, 0, $pos)."\n\n<!--SPIP-->\n";
33                        $suite = substr($texte, $pos + 2);
34                } else {
35                        $pos = strpos($texte, " ", 28*1024);    // sinon coupe espace
36                        if (!($pos > 0 and $pos < 32 * 1024)) {
37                                $pos = 28*1024; // au pire (pas d'espace trouv'e)
38                                $decalage = 0; // si y'a pas d'espace, il ne faut pas perdre le caract`ere
39                        } else {
40                                $decalage = 1;
41                        }
42                        $debut = substr($texte,0,$pos + $decalage); // Il faut conserver l'espace s'il y en a un
43                        $suite = substr($texte,$pos + $decalage);
44                }
45                return (array($debut,$suite));
46        }
47        else
48                return (array($texte,''));
49}
50
51// http://doc.spip.org/@articles_edit_recolle
52function articles_edit_recolle($texte, $att_text)
53{
54        $textes_supplement = "<br /><font color='red'>"._T('info_texte_long')."</font>\n";
55        $nombre = 0;
56
57        while (strlen($texte)>29*1024) {
58                $nombre ++;
59                list($texte1,$texte) = coupe_trop_long($texte);
60
61                $textes_supplement .= "<br />" .
62                        afficher_barre('document.formulaire.texte'.$nombre)  .
63                        "<textarea id='texte$nombre' name='texte_plus[$nombre]'$att_text>$texte1</textarea><p>\n";
64                }
65        return array($texte,$textes_supplement);
66}
67
68// http://doc.spip.org/@chapo_articles_edit
69function chapo_articles_edit($chapo, $articles_chapeau)
70{
71        global $spip_ecran;
72
73        if (substr($chapo, 0, 1) == '=') {
74                $virtuel = substr($chapo, 1);
75                $chapo = "";
76        }
77
78        if ($virtuel) {
79                return "<p><div style='border: 1px dashed #666666; background-color: #f0f0f0; padding: 5px;'>" .
80                        "<table width=100% cellspacing=0 cellpadding=0 border=0>" .
81                        "<tr><td valign='top'>" .
82                        "<font face='Verdana,Arial,Sans,sans-serif' size=2>" .
83                        "<B><label for='confirme-virtuel'>"._T('info_redirection')."&nbsp;:</label></B>" .
84                        aide ("artvirt") .
85                        "</font>" .
86                        "</td>" .
87                        "<td width=10>&nbsp;</td>" .
88                        "<td valign='top' width='50%'>" .
89                        "<INPUT TYPE='text' NAME='virtuel' CLASS='forml'
90                style='font-size:9px;' VALUE=\"$virtuel\" SIZE='40'>" .
91                        "<input type='hidden' name='changer_virtuel' value='oui'>" .
92                        "</td></tr></table>\n" .
93                        "<font face='Verdana,Arial,Sans,sans-serif' size=2>" .
94                        _T('texte_article_virtuel_reference') .
95                        "</font>" .
96                        "</div><p>\n";
97        }
98
99        else {
100
101                if (($articles_chapeau) OR strlen($chapo)) {
102                        if ($spip_ecran == "large") $rows = 8;
103                        else $rows = 5;
104                        return "<br /><B>"._T('info_chapeau')."</B>" .
105                                aide ("artchap") .
106                                "\n<br />"._T('texte_introductif_article')."<br />\n" .
107                                "<textarea name='chapo' class='forml' rows='$rows' COLS='40' wrap=soft>" .
108                                $chapo .
109                                "</textarea><P>\n";
110                }
111        }
112}
113
114// http://doc.spip.org/@formulaire_articles_edit
115function formulaire_articles_edit($row, $lier_trad, $new, $champs_article) {
116
117        global $champs_extra, $spip_lang, $options, $spip_ecran, $spip_display;
118
119        $articles_surtitre = $champs_article['articles_surtitre'] != 'non';
120        $articles_soustitre = $champs_article['articles_soustitre'] != "non";
121        $articles_descriptif = $champs_article['articles_descriptif'] != "non";
122        $articles_urlref = $champs_article['articles_urlref'] != "non";
123        $articles_chapeau = $champs_article['articles_chapeau'] != "non";
124        $articles_ps = $champs_article['articles_ps']  != "non";
125
126        $id_trad = $row['id_article'];
127        $gros_titre = $row['titre'];
128        // Gaffe: sans ceci, on ecrase systematiquement l'article d'origine
129        // (et donc: pas de lien de traduction)
130        $id_article = $lier_trad ? '' : $id_trad;
131
132        $titre = entites_html($row['titre']);
133        $soustitre = entites_html($row['soustitre']);
134        $surtitre = entites_html($row['surtitre']);
135        $descriptif = entites_html($row['descriptif']);
136        $nom_site = entites_html($row['nom_site']);
137        $url_site = entites_html($row['url_site']);
138        $chapo = entites_html($row['chapo']);
139        $texte = entites_html($row['texte']);
140        $ps = entites_html($row['ps']);
141
142        $id_rubrique = $row['id_rubrique'];
143        $id_secteur = $row['id_secteur'];
144        $date = $row['date'];
145        $extra = $row['extra'];
146        $onfocus = $row['onfocus'];
147        $statut = $row['statut'];
148       
149        if ($id_rubrique == 0) $logo = "racine-site-24.gif";
150        elseif ($id_secteur == $id_rubrique) $logo = "secteur-24.gif";
151        else $logo = "rubrique-24.gif";
152
153        if ($spip_ecran == "large") $rows = 28; else $rows = 20;
154        $att_text = " class='formo' ".$GLOBALS['browser_caret']." rows='$rows' COLS='40' wrap='soft'";
155        if (strlen($texte)>29*1024) { // texte > 32 ko -> decouper en morceaux
156          list($texte, $sup) = articles_edit_recolle($texte, $att_text);
157        } else $sup='';
158
159        if ($champs_extra) include_spip('inc/extra');
160
161        $selecteur_rubrique = charger_fonction('chercher_rubrique', 'inc');
162        $redirect = generer_url_ecrire("articles");
163
164        $form = "<input type='hidden' name='editer_article' value='oui' />\n" .
165                 (!$lier_trad ? '' :
166                 ("\n<input type='hidden' name='lier_trad' value='" .
167                  $lier_trad .
168                  "' />" .
169                  "\n<input type='hidden' name='changer_lang' value='" .
170                  $spip_lang .
171                  "' />")) .
172
173                (!(($options == "avancees" AND $articles_surtitre) OR $surtitre)?
174                        ("\n<input type='hidden' name='surtitre' value=\"$surtitre\" />") :
175                        ( "<b>" .
176                          _T('texte_sur_titre') .
177                          "</b>" .
178                          aide ("arttitre") .
179                          "<br />\n<a href='?exec=aidejtip_aide&width=375&champ=surtitre' class='jTip' id='help_1' name='fonction du champ surtitre'>?</a>
180                          <input type='text' name='surtitre' class='forml' value=\"" .
181                          $surtitre .
182                          "\" size='40'" .
183// Pour faire fonctionner le onchange sur Safari il faudrait modifier
184// chaque input. Conclusion : c'est la mauvaise methode.
185// ' onchange="disable_other_forms(this.parentNode);"'.
186                          " /><P>")) .
187                _T('texte_titre_obligatoire') .
188                aide ("arttitre") .
189               
190                "\n<br /><a href='?exec=aidejtip_aide&width=375&champ=titre' class='jTip' id='help_2' name='fonction du champ titre'>?</a>  
191                <input type='text' name='titre' style='font-weight: bold; font-size: 13px;' CLASS='formo' VALUE=\"" .
192                $titre .
193                "\" size='40' " .
194                $onfocus .
195                " />\n<P>" .
196
197                (($articles_soustitre OR strlen($soustitre)) ?
198                 ("<b>" .
199                  _T('texte_sous_titre') .
200                  "</b>" .
201                  aide ("arttitre") .
202                  "\n<br /><a href='?exec=aidejtip_aide&width=375&champ=soustitre' class='jTip' id='help_3' name='fonction du champ soustitre'>?</a><input type='text' name='soustitre' class='forml' value=\"" .
203                  $soustitre .
204                  "\" size='40' /><br /><br />\n") :
205                 '') .
206
207                debut_cadre_couleur($logo, true, "", _T('titre_cadre_interieur_rubrique'). aide("artrub")) .
208
209                $selecteur_rubrique($id_rubrique, 'article', ($statut == 'publie')) .
210
211                fin_cadre_couleur(true) .
212       
213                ((($options == "avancees" AND $articles_descriptif) OR strlen($descriptif))?
214                 ("\n<P><B>" ._T('texte_descriptif_rapide') ."</B>" .
215                  aide ("artdesc") .
216                  "</p>\n<br />" ._T('texte_contenu_article') ."<br />\n" .
217                  "<a href='?exec=aidejtip_aide&width=375&champ=descriptif' class='jTip' id='help_4' name='fonction du champ descriptif'>?</a>
218                  <textarea name='descriptif' class='forml' rows='2' cols='40' wrap=soft>" .
219                  $descriptif .
220                  "</textarea>\n") :
221                 '') .
222
223                ((($options == "avancees" AND $articles_urlref) OR $nom_site OR $url_site) ?
224                 (_T('entree_liens_sites') ."<br />\n" .
225                  _T('info_titre') ." " .
226                  "\n<input type='text' name='nom_site' class='forml' width='40' value=\"$nom_site\"/><br />\n" .
227                  _T('info_url') .
228                  "\n<input type='text' name='url_site' class='forml' width='40' value=\"$url_site\"/>\n") : '') .
229
230                chapo_articles_edit($chapo, $articles_chapeau) .
231
232                "<b>" ._T('info_texte') ."</b>" .
233                aide ("arttexte") . "<br />\n" .
234                _T('texte_enrichir_mise_a_jour') .
235                aide("raccourcis") .
236                $sup .
237                ($spip_display==4 ? '' : afficher_barre('document.formulaire.texte')) .
238                "<a href='?exec=aidejtip_aide&width=375&champ=texte' class='jTip' id='help_5' name='fonction du champ texte'>?</a>
239                <textarea id='text_area' name='texte'$att_text>$texte</textarea>\n" .
240
241                ((($articles_ps AND $options == "avancees") OR strlen($ps)) ?
242                 ("\n<p><b>" . _T('info_post_scriptum') ."</b><br />" . "<textarea name='ps' class='forml' rows='5' cols='40' wrap=soft>" . $ps . "</textarea></p><p>\n") :
243                 '') .
244
245                (!$champs_extra ? '': extra_saisie($extra, 'articles', $id_secteur, false)) .
246
247                "<div align='right'><input class='fondo' type='submit' value='" . _T('bouton_enregistrer') . "'></div>";
248
249        return
250                "\n<table cellpadding='0' cellspacing='0' border='0' width='100%'>" .
251                "<tr width='100%'>" .
252                "\n<td>" .
253                ($lier_trad ?
254                 icone(_T('icone_retour'), generer_url_ecrire("articles","id_article=$lier_trad"), "article-24.gif", "rien.gif", '',false) :
255                 icone(_T('icone_retour'), generer_url_ecrire("articles","id_article=$id_trad"), "article-24.gif", "rien.gif",'',false)) .
256                "</td>\n<td>" .
257                http_img_pack('rien.gif', " ", "width='10'") .
258                "</td>\n" .
259                "<td width='100%'>" .
260                _T('texte_modifier_article') .
261                gros_titre($gros_titre,'',false) .
262                "</td></tr></table><p><hr />\n<p>" .
263          generer_action_auteur("editer_article", $new ? $new : $id_article, $redirect, $form, " method='post' name='formulaire' onchange='disable_other_forms(this);'");
264
265}
266
267// http://doc.spip.org/@exec_articles_edit_dist
268function exec_articles_edit_dist()
269{
270        $id_article = _request('id_article');
271        $id_rubrique = _request('id_rubrique');
272        $lier_trad = intval(_request('lier_trad'));
273        $new = _request('new');
274
275        pipeline('exec_init',array('args'=>array('exec'=>'articles_edit','id_article'=>$id_article),'data'=>''));
276       
277        $row = article_select($id_article, $id_rubrique, $lier_trad, $new);
278        if (!$row) die ("<h3>"._T('info_acces_interdit')."</h3>");
279
280        $id_article = $row['id_article'];
281
282        // si une ancienne revision est demandee, la charger
283        // en lieu et place de l'actuelle ; attention les champs
284        // qui etaient vides ne sont pas vide's. Ca permet de conserver
285        // des complements ajoutes "orthogonalement", et ca fait un code
286        // plus generique.
287        if ($id_version = intval(_request('id_version'))) {
288                include_spip('inc/revisions');
289                if ($textes = recuperer_version($id_article, $id_version)) {
290                        foreach ($textes as $champ => $contenu)
291                                $row[$champ] = $contenu;
292                }
293        }
294
295        $id_rubrique = $row['id_rubrique'];
296        $titre = $row['titre'];
297
298        if ($id_version) $titre.= ' ('._T('version')." $id_version)";
299
300        debut_page(_T('titre_page_articles_edit', array('titre' => $titre)),
301                        "naviguer", "articles", "hauteurTextarea();",
302                        "",
303                        $id_rubrique);
304
305        debut_grand_cadre();
306        afficher_hierarchie($id_rubrique);
307        fin_grand_cadre();
308
309        debut_gauche();
310
311        // Pave "documents associes a l'article"
312
313        if (!$new){
314
315                # affichage sur le cote des pieces jointes, en reperant les inserees
316                # note : traiter_modeles($texte, true) repere les doublons
317                # aussi efficacement que propre(), mais beaucoup plus rapidement
318                traiter_modeles(join('',$row), true);
319                afficher_documents_colonne($id_article, 'article', true);
320        }
321        echo pipeline('affiche_gauche',array('args'=>array('exec'=>'articles_edit','id_article'=>$id_article),'data'=>''));
322        creer_colonne_droite();
323        echo pipeline('affiche_droite',array('args'=>array('exec'=>'articles_edit','id_article'=>$id_article),'data'=>''));
324        debut_droite();
325       
326        debut_cadre_formulaire();
327        echo formulaire_articles_edit($row, $lier_trad, $new, $GLOBALS['meta']);
328        fin_cadre_formulaire();
329        echo '<script type="text/javascript">JT_init();</script>';
330        fin_page();
331       
332}
333?>
Note: See TracBrowser for help on using the repository browser.