1#
2#
3# Mod�le "texte"
4#
5# Historique
6#   1998/06/15 : pda          : conception
7#   1999/06/20 : pda          : s�paration du langage HTML
8#   1999/07/02 : pda          : simplification
9#   1999/07/25 : pda          : int�gration des tableaux de droopy
10#   2007/03/14 : pda/moindrot : cr�ation du mod�le news
11#   2007/03/21 : pda/moindrot : g�n�ration fichier interm�diaire dans les news
12#   2007/04/05 : pda/moindrot : v�rification de l'unicit� du couple date/auteur
13#                               pour la g�n�ration de la balise guid du RSS
14#   2008/02/22 : pda/moindrot : int�gration dans le mod�le texte standard
15#
16
17#
18# Inclure les directives de formattage de base
19#
20
21inclure-tcl include/html/base.tcl
22
23#
24# Fichier interm�diaire servant � stocker les news pour la g�n�ration
25#	- du fichier index.html global
26#	- du fichier rss.xml
27#
28
29set fichiernews "/tmp/news.txt"
30
31#
32# Tableau global servant � d�tecter des doublons de news � l'int�rieur
33# d'un fichier htgt
34#
35
36array set tnews {}
37
38###############################################################################
39# Proc�dures de conversion HTML sp�cifiques au mod�le
40###############################################################################
41
42proc htg_titre {} {
43    if [catch {set niveau [htg getnext]} v] then {error $v}
44    check-int $niveau
45    if [catch {set texte  [htg getnext]} v] then {error $v}
46    switch $niveau {
47	1	{
48	    if {[dans-contexte "rarest"]} then {
49		set r [helem H2 "<br>$texte"]
50	    } else {
51		set logo [helem TD \
52			    [helem IMG \
53				"" \
54				SRC /images/logo_osiris_print.jpeg ALT "logo" \
55				] \
56			    ALIGN center VALIGN top \
57			    ID image-a-imprimer-seulement \
58			]
59		set titre [helem TD [helem H2 $texte] ALIGN center VALIGN middle]
60		set r [helem TABLE \
61			    [helem TR "$logo$titre"] \
62			    CELLPADDING 0 CELLSPACING 0 BORDER 0 WIDTH 100% \
63			]
64	    }
65
66	}
67	default	{
68	    incr niveau
69	    set r [helem H$niveau $texte]
70	}
71    }
72    return $r
73}
74
75# une actu : son contenu est ajout� � un fichier dans /tmp, qui sera
76# r�cup�r�, tri�, d�doublonn� apr�s la compilation du serveur Web.
77
78proc htg_news {} {
79    global fichiernews
80    global tnews
81
82    if [catch {set date [htg getnext]} v] then {error $v}
83    if [catch {set titre [htg getnext]} v] then {error $v}
84    if [catch {set theme [htg getnext]} v] then {error $v}
85    if [catch {set contenu [htg getnext]} v] then {error $v}
86    if [catch {set lien [htg getnext]} v] then {error $v}
87    if [catch {set auteur [htg getnext]} v] then {error $v}
88
89    regsub -all "\n\n" $contenu "<br /><br />" contenu
90
91    #
92    # V�rifier le format de la date et de l'heure
93    #
94
95    if {! [regexp {^[0-9]{2}/[0-9]{2}/[0-9]{4}\s+[0-9]{2}:[0-9]{2}$} $date]} then {
96	error "date et heure '$date' invalides (jj/mm/aaaa hh:mm)"
97    }
98
99    #
100    # V�rifier que toutes les News on une date/heure/Auteur unique
101    #
102
103    if {[info exists tnews($date$auteur)]} {
104       error "Une news ayant une date '$date' et un auteur '$auteur' identique a �t� trouv�e"
105    }
106    set tnews($date$auteur) ""
107
108    #
109    # Recopier la nouvelle dans le fichier news.txt
110    #
111
112    set fd [open $fichiernews "a"]
113    puts $fd [list $date $titre $theme $contenu $lien $auteur]
114    close $fd
115
116    #
117    # G�n�rer le code HTML :
118    #
119    #   <div class="texte-news">
120    #     <a name="$date_ancre/$auteur">
121    #       <h3>
122    #         <span class="news-date">[$date]</span>
123    #         <span class="news-titre">$titre</span>
124    #         <span class="news-theme">($theme)</span>
125    #       </h3>
126    #     </a>
127    #     <p>$contenu <span class="news-qui">[$auteur]</span></p>
128    #     <p>Voir aussi&nbsp;: <a href="$lien">$lien</a></p>
129    #   </div>
130    #
131
132    regsub -all " " $date "/" date_ancre
133
134    set r1 ""
135    append r1 [helem SPAN "\[$date\]" CLASS news-date]
136    append r1 "\n"
137    append r1 [helem SPAN $titre      CLASS news-titre]
138    append r1 "\n"
139    append r1 [helem SPAN "($theme)"  CLASS news-theme]
140
141    set r2 [helem A [helem H3 $r1] NAME "$date_ancre/$auteur"]
142
143    set r3 $contenu
144    append r3 " "
145    append r3 [helem SPAN "\[$auteur\]" CLASS news-qui]
146
147    set r4 [helem P $r3]
148
149    if {[string equal [string trim $lien] ""]} then {
150	set r6 ""
151    } else {
152	set r5 [helem A $lien HREF $lien]
153	set r6 [helem P "Voir aussi&nbsp;: $r5"]
154    }
155
156    set r [helem DIV "$r2\n$r4\n$r6\n" CLASS texte-news]
157
158    return $r
159}
160
161proc htg_greytab {} {
162    set r [helem TABLE \
163		[helem TR \
164		    [helem TD "" ALIGN center VALIGN middle] \
165		] \
166		CLASS tab_middle \
167		BORDER 0 CELLPADDING 5 CELLSPACING 0 WIDTH 100% \
168	    ]
169    return $r
170}
171
172proc htg_partie {} {
173    global partie
174
175    if [catch {set id [htg getnext]} v] then {error $v}
176    if [catch {set texte [htg getnext]} v] then {error $v}
177    set texte [nettoyer-html $texte]
178
179    switch -exact $id {
180	banniere	-
181	titrepage	{
182	    regsub -all "\n" $texte "<br>\n" texte
183	}
184	default {
185	    regsub -all "\n\n+" $texte "<p>" texte
186	}
187    }
188
189    set partie($id) $texte
190    return {}
191}
192