source: spip-zone/_plugins_/_amelioration_admin_/mots_partout/exec/mots_tous.php @ 5178

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

bug avec les forums, en double dans la requete insert !

File size: 18.0 KB
Line 
1<?php
2
3// SURCHARGE du mots_tous par defaut, pour permettre de sp�cifier des
4// autorisations sur les autres tables
5
6if (!defined("_ECRIRE_INC_VERSION")) return;
7
8include_spip('inc/presentation');
9include_spip('inc/actions');
10include_spip('base/abstract_sql');
11
12$p=explode(basename(_DIR_PLUGINS)."/",str_replace('\\','/',realpath(dirname(dirname(__FILE__)))));
13define('_DIR_PLUGIN_MOTS_PARTOUT',(_DIR_PLUGINS.end($p)));
14
15function exec_mots_tous()
16{
17  global $acces_comite, $acces_forum, $acces_minirezo, $new, $articles, $breves, $change_type, $conf_mot, $connect_statut, $connect_toutes_rubriques, $descriptif, $id_groupe, $modifier_groupe, $obligatoire, $rubriques, $spip_lang, $spip_lang_right, $supp_group, $syndic, $texte, $unseul;
18
19///////////////////
20//MODIFICATION
21///////////////////
22// liste des types de tables sur lesquels on peut mettre des mots cl�s
23// - ceux du core
24//      $choses= array('articles', 'breves', 'rubriques', 'syndic');
25// - ceux du plugin
26//      include(_DIR_PLUGIN_MOTS_PARTOUT."/mots_partout_choses.php");
27        $tables_installees = unserialize(lire_meta('MotsPartout:tables_installees'));
28        foreach($tables_installees as $chose => $m) { $choses[]= $chose; }
29///////////////////
30
31  $id_groupe = intval($id_groupe);
32
33  if (acces_mots()) {
34        if ($modifier_groupe == "oui") {
35                $change_type = (corriger_caracteres($change_type));
36                $texte = (corriger_caracteres($texte));
37                $descriptif = (corriger_caracteres($descriptif));
38
39                if (!$new) {    // modif groupe
40                        spip_query("UPDATE spip_mots SET type=" . spip_abstract_quote($change_type) . " WHERE id_groupe=$id_groupe");
41
42///////////////////
43//MODIFICATION
44///////////////////
45// update "dynamique" en fonction de la liste de choses possibles
46                        $rq='';
47                        foreach($choses as $chose) {
48                                $rq.=", $chose=" . spip_abstract_quote($GLOBALS[$chose]);
49                        }
50                        spip_query("UPDATE spip_groupes_mots SET titre=" . spip_abstract_quote($change_type) . ", texte=" . spip_abstract_quote($texte) . ", descriptif=" . spip_abstract_quote($descriptif) . ", unseul=" . spip_abstract_quote($unseul) . ", obligatoire=" . spip_abstract_quote($obligatoire) . $rq . ",     minirezo=" . spip_abstract_quote($acces_minirezo) . ", comite=" . spip_abstract_quote($acces_comite) . ", forum=" . spip_abstract_quote($acces_forum) . " WHERE id_groupe=$id_groupe");
51///////////////////
52                } else {        // creation groupe
53///////////////////
54//MODIFICATION
55///////////////////
56// insert "dynamique" en fonction de la liste de choses possibles
57                        $rqCol='';
58                        $rqVal='';
59                        foreach($choses as $chose) if ($chose!='forum'){
60                                $rqCol.=", $chose";
61                                $rqVal.=", " . spip_abstract_quote($GLOBALS[$chose]);
62                        }
63                  spip_abstract_insert('spip_groupes_mots', "(titre, texte, descriptif, unseul,  obligatoire $rqCol, minirezo, comite, forum)", "(" . spip_abstract_quote($change_type) . ", " . spip_abstract_quote($texte) . " , " . spip_abstract_quote($descriptif) . " , " . spip_abstract_quote($unseul) . " , " . spip_abstract_quote($obligatoire) . $rqVal . " , " . spip_abstract_quote($acces_minirezo) . " ,  " . spip_abstract_quote($acces_comite) . " , " . spip_abstract_quote($acces_forum) . " )");
64///////////////////
65                }
66        }
67        if ($supp_group){
68                spip_query("DELETE FROM spip_groupes_mots WHERE id_groupe=" . intval($supp_group));
69        }
70 }
71
72
73pipeline('exec_init',array('args'=>array('exec'=>'mots_tous'),'data'=>''));
74debut_page(_T('titre_page_mots_tous'), "naviguer", "mots");
75debut_gauche();
76
77echo pipeline('affiche_gauche',array('args'=>array('exec'=>'mots_tous'),'data'=>''));
78creer_colonne_droite();
79echo pipeline('affiche_droite',array('args'=>array('exec'=>'mots_tous'),'data'=>''));
80debut_droite();
81
82gros_titre(_T('titre_mots_tous'));
83 if (acces_mots()) {
84  echo typo(_T('info_creation_mots_cles')) . aide ("mots") ;
85  }
86echo "<br><br>";
87
88// Preliminaire: confirmation de suppression d'un mot lie a qqch
89// (cf fin de afficher_groupe_mots_boucle executee a l'appel precedent)
90// Faudrait ajaxer ca.
91
92  if ($conf_mot = intval($conf_mot)) {
93        $row = spip_fetch_array(spip_query("SELECT * FROM spip_mots WHERE id_mot=$conf_mot"));
94        $id_mot = $row['id_mot'];
95        $titre_mot = typo($row['titre']);
96        $type_mot = typo($row['type']);
97
98///////////////////
99//MODIFICATION
100///////////////////
101//TODO : documenter syntaxe
102$texte_lie='';
103foreach($choses as $chose) {
104        $chaine1='un';
105        $chaine2=substr($chose,0,-1);
106        if ($chose=='syndic') $chaine2='site';
107        elseif ($chose=='breve') $chaine1='une';
108       
109        if (($nb[$chose] = intval($nb[$chose])) == 1) {
110                $texte_lie .= _T('info_'.$chaine1.'_'.$chaine2)." ";
111        } else if ($nb[$chose] > 1) {
112                $texte_lie .= _T('info_nombre_'.$chaine2.'s', array('nb_'.$chaine2.'s' => intval($nb[$chose]))) ." ";
113        }
114}
115/*
116////////////////////
117
118        if (($na = intval($na)) == 1) {
119                $texte_lie = _T('info_un_article')." ";
120        } else if ($na > 1) {
121                $texte_lie = _T('info_nombre_articles', array('nb_articles' => $na)) ." ";
122        }
123        if (($nb = intval($nb)) == 1) {
124                $texte_lie .= _T('info_une_breve')." ";
125        } else if ($nb > 1) {
126                $texte_lie .= _T('info_nombre_breves', array('nb_breves' => $nb))." ";
127        }
128        if (($ns = intval($ns)) == 1) {
129                $texte_lie .= _T('info_un_site')." ";
130        } else if ($ns > 1) {
131                $texte_lie .= _T('info_nombre_sites', array('nb_sites' => $ns))." ";
132        }
133        if (($nr = intval($nr)) == 1) {
134                $texte_lie .= _T('info_une_rubrique')." ";
135        } else if ($nr > 1) {
136                $texte_lie .= _T('info_nombre_rubriques', array('nb_rubriques' => $nr))." ";
137        }
138*/
139///////////////////
140
141        debut_boite_info();
142        echo "<div class='serif'>";
143        echo _T('info_delet_mots_cles', array('titre_mot' => $titre_mot, 'type_mot' => $type_mot, 'texte_lie' => $texte_lie));
144
145        echo "<UL>";
146        echo "<LI><B><A href='", 
147          redirige_action_auteur('editer_mot', ",$id_mot,,,",'mots_tous'),
148          "'>",
149          _T('item_oui'),
150          "</A>,</B> ",
151          _T('info_oui_suppression_mot_cle');
152        echo "<LI><B><A href='" . generer_url_ecrire("mots_tous","") . "'>"._T('item_non')."</A>,</B> "._T('info_non_suppression_mot_cle');
153        echo "</UL>";
154        echo "</div>";
155        fin_boite_info();
156        echo "<br />";
157}
158
159//
160// On boucle d'abord sur les groupes de mots
161//
162
163 $result_groupes = spip_query("SELECT *, ".creer_objet_multi ("titre", "$spip_lang")." FROM spip_groupes_mots ORDER BY multi");
164
165
166while ($row_groupes = spip_fetch_array($result_groupes)) {
167        $id_groupe = $row_groupes['id_groupe'];
168        $titre_groupe = typo($row_groupes['titre']);
169        $descriptif = $row_groupes['descriptif'];
170        $texte = $row_groupes['texte'];
171        $unseul = $row_groupes['unseul'];
172        $obligatoire = $row_groupes['obligatoire'];
173///////////////////
174//MODIFICATION
175///////////////////
176/*      $articles = $row_groupes['articles'];
177        $breves = $row_groupes['breves'];
178        $rubriques = $row_groupes['rubriques'];
179        $syndic = $row_groupes['syndic'];
180*/
181///////////////////
182        $acces_minirezo = $row_groupes['minirezo'];
183        $acces_comite = $row_groupes['comite'];
184        $acces_forum = $row_groupes['forum'];
185
186        // Afficher le titre du groupe
187        debut_cadre_enfonce("groupe-mot-24.gif", false, '', $titre_groupe);
188        // Affichage des options du groupe (types d'elements, permissions...)
189        echo "<font face='Verdana,Arial,Sans,sans-serif' size=1>";
190///////////////////
191//MODIFICATION
192///////////////////
193//TODO : documenter syntaxe
194// affichage des cases a cocher
195        foreach($choses as $chose) {
196                if ($row_groupes[$chose] == "oui") echo "> "._T('motspartout:info_'.$chose)." &nbsp;&nbsp;";
197        }
198///////////////////
199
200        if ($unseul == "oui" OR $obligatoire == "oui") echo "<br>";
201        if ($unseul == "oui") echo "> "._T('info_un_mot')." &nbsp;&nbsp;";
202        if ($obligatoire == "oui") echo "> "._T('info_groupe_important')." &nbsp;&nbsp;";
203
204        echo "<br>";
205        if ($acces_minirezo == "oui") echo "> "._T('info_administrateurs')." &nbsp;&nbsp;";
206        if ($acces_comite == "oui") echo "> "._T('info_redacteurs')." &nbsp;&nbsp;";
207        if ($acces_forum == "oui") echo "> "._T('info_visiteurs_02')." &nbsp;&nbsp;";
208
209        echo "</font>";
210        if ($descriptif) {
211                echo "<p><div style='border: 1px dashed #aaaaaa;'>";
212                echo "<font size='2' face='Verdana,Arial,Sans,sans-serif'>";
213                echo "<b>",_T('info_descriptif'),"</b> ";
214                echo propre($descriptif);
215                echo "&nbsp; ";
216                echo "</font>";
217                echo "</div>";
218        }
219
220        if (strlen($texte)>0){
221                echo "<FONT FACE='Verdana,Arial,Sans,sans-serif'>";
222                echo "<P>".propre($texte);
223                echo "</FONT>";
224        }
225
226        //
227        // Afficher les mots-cles du groupe
228        //
229        $supprimer_groupe = afficher_groupe_mots($id_groupe);
230       
231        echo $supprimer_groupe;
232
233        if (acces_mots() AND !$conf_mot){
234                echo "\n<table cellpadding='0' cellspacing='0' border='0' width='100%'>";
235                echo "<tr>";
236                echo "<td>";
237                icone(_T('icone_modif_groupe_mots'), generer_url_ecrire("mots_type","id_groupe=$id_groupe"), "groupe-mot-24.gif", "edit.gif");
238                echo "</td>";
239                if (!$supprimer_groupe) {
240                        echo "<td>";
241                        icone(_T('icone_supprimer_groupe_mots'), generer_url_ecrire("mots_tous","supp_group=$id_groupe"), "groupe-mot-24.gif", "supprimer.gif");
242                        echo "</td>";
243                        echo "<td> &nbsp; </td>"; // Histoire de forcer "supprimer" un peu plus vers la gauche
244                }
245                echo "<td>";
246                echo "<div align='$spip_lang_right'>";
247                icone(_T('icone_creation_mots_cles'), generer_url_ecrire("mots_edit","new=oui&id_groupe=$id_groupe&redirect=" . rawurlencode(generer_url_ecrire('mots_tous'))), "mot-cle-24.gif", "creer.gif");
248                echo "</div>";
249                echo "</td></tr></table>";
250        }       
251
252        fin_cadre_enfonce();
253}
254
255 if (acces_mots()  AND !$conf_mot){
256        echo "<p>&nbsp;</p><div align='right'>";
257        icone(_T('icone_creation_groupe_mots'), generer_url_ecrire("mots_type","new=oui"), "groupe-mot-24.gif", "creer.gif");
258        echo "</div>";
259}
260
261fin_page();
262}
263
264
265//
266// Calculer les nombres d'elements (articles, etc.) lies a chaque mot
267//
268
269// http://doc.spip.org/@calculer_liens_mots
270function calculer_liens_mots()
271{
272//////////////////////////
273//MODIFICATION
274//////////////////////////
275        $tables_installees = unserialize(lire_meta('MotsPartout:tables_installees'));
276        foreach($tables_installees as $chose => $m) { $choses[]= $chose; }
277       
278        global $choses_possibles;
279        include(_DIR_PLUGIN_MOTS_PARTOUT."/mots_partout_choses.php");
280        $occurences = array();
281        foreach ($choses as $chose){
282        //les choses n'ont pas forcement un statut + gerer en fonction du statut utilisateur
283         $query="SELECT COUNT(*) as cnt, lien.id_mot FROM spip_mots_".$chose." AS lien, ".$choses_possibles[$chose]['table_principale']." AS chose WHERE chose.".$choses_possibles[$chose]['id_chose']."=lien.".$choses_possibles[$chose]['id_chose'];
284         if ($choses_possibles[$chose]['statut_'.$GLOBALS['connect_statut']])
285                $query.=" AND chose.statut IN (".$choses_possibles[$chose]['statut_'.$GLOBALS['connect_statut']].")";
286         elseif ($choses_possibles[$chose]['statut_'.$GLOBALS['connect_statut']])
287                $query.=" AND chose.statut IN (".$choses_possibles[$chose]['statut_tous'].")";
288         $query.=" GROUP BY lien.id_mot";
289         if($row=spip_fetch_array(spip_query($query)))
290                $occurences[$chose][$row['id_mot']] = $row['cnt'];
291        }
292        return $occurences;
293
294/*
295        if ($GLOBALS['connect_statut'] =="0minirezo") $aff_articles = "'prepa','prop','publie'";
296        else $aff_articles = "'prop','publie'";
297
298  $articles = array();
299 $result_articles = spip_query("SELECT COUNT(*) as cnt, lien.id_mot FROM spip_mots_articles AS lien, spip_articles AS article   WHERE article.id_article=lien.id_article AND article.statut IN ($aff_articles) GROUP BY lien.id_mot");
300 while ($row =  spip_fetch_array($result_articles)){
301        $articles[$row['id_mot']] = $row['cnt'];
302}
303
304
305 $rubriques = array();
306 $result_rubriques = spip_query("SELECT COUNT(*) AS cnt, lien.id_mot FROM spip_mots_rubriques AS lien, spip_rubriques AS rubrique WHERE rubrique.id_rubrique=lien.id_rubrique GROUP BY lien.id_mot");
307
308 while ($row = spip_fetch_array($result_rubriques)){
309        $rubriques[$row['id_mot']] = $row['cnt'];
310}
311
312 $breves = array();
313 $result_breves = spip_query("SELECT COUNT(*) AS cnt, lien.id_mot FROM spip_mots_breves AS lien, spip_breves AS breve   WHERE breve.id_breve=lien.id_breve AND breve.statut IN ($aff_articles) GROUP BY lien.id_mot");
314
315 while ($row = spip_fetch_array($result_breves)){
316        $breves[$row['id_mot']] = $row['cnt'];
317}
318
319 $syndic = array();
320 $result_syndic = spip_query("SELECT COUNT(*) AS cnt, lien.id_mot FROM spip_mots_syndic AS lien, spip_syndic AS syndic WHERE syndic.id_syndic=lien.id_syndic AND syndic.statut IN ($aff_articles) GROUP BY lien.id_mot");
321 while ($row = spip_fetch_array($result_syndic)){
322        $sites[$row['id_mot']] = $row['cnt'];
323
324 }
325
326 return array('articles' => $articles,
327              'breves' => $breves,
328              'rubriques' => $rubriques,
329              'syndic' => $syndic);
330*/
331////////////////////
332}
333
334// http://doc.spip.org/@afficher_groupe_mots
335function afficher_groupe_mots($id_groupe) {
336        global $connect_id_auteur, $connect_statut;
337        global $spip_lang_right, $couleur_claire, $spip_lang;
338
339        $jjscript = array("fonction" => "afficher_groupe_mots",
340                          "id_groupe" => $id_groupe);
341        $jjscript = (serialize($jjscript));
342        $hash = "0x".substr(md5($connect_id_auteur.$jjscript), 0, 16);
343        $tmp_var = substr($hash, 2, 6);
344                       
345        $javascript = "charger_id_url('" . generer_url_ecrire('memoriser',"&var_ajax=1&id_ajax_fonc=::id_ajax_fonc::::deb::", true) . "','$tmp_var')";
346
347        $select = 'id_mot, titre, ' . creer_objet_multi ("titre", $spip_lang);
348        $from = 'spip_mots';
349        $where = "id_groupe=$id_groupe" ;
350
351        $cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM $from WHERE $where"));
352
353        if (! ($cpt = $cpt['n'])) return '' ;
354
355        $occurrences = calculer_liens_mots();
356
357        $res_proch = spip_query("SELECT id_ajax_fonc FROM spip_ajax_fonc WHERE hash=$hash AND id_auteur=$connect_id_auteur ORDER BY id_ajax_fonc DESC LIMIT 1");
358        if ($row = spip_fetch_array($res_proch)) {
359                        $id_ajax_fonc = $row["id_ajax_fonc"];
360        } else  {
361                        include_spip('base/abstract_sql');
362                        $id_ajax_fonc = spip_abstract_insert("spip_ajax_fonc", "(id_auteur, variables, hash, date)", "($connect_id_auteur, " . spip_abstract_quote($jjscript) . ", $hash, NOW())");
363        }
364
365        $nb_aff = 1.5 * _TRANCHES;
366        $deb_aff = intval(_request('t_' .$tmp_var));
367        $limit = ($deb_aff >= 0 ? "$deb_aff, $nb_aff" : "99999");
368
369        if ($cpt > $nb_aff) {
370                $nb_aff = (_TRANCHES); 
371                $tranches = afficher_tranches_requete($cpt, 3, $tmp_var, $javascript, $nb_aff);
372        } else $tranches = '';
373
374
375        $table = array();
376        $result = spip_query("SELECT $select FROM $from WHERE $where ORDER BY multi LIMIT  $limit");
377        while ($row = spip_fetch_array($result)) {
378                $table[] = afficher_groupe_mots_boucle($row, $occurrences);
379        }
380
381        if ($connect_statut=="0minirezo") {
382                        $largeurs = array('', 100, 130);
383                        $styles = array('arial11', 'arial1', 'arial1');
384                }
385        else {
386                        $largeurs = array('', 100);
387                        $styles = array('arial11', 'arial1');
388        }
389
390        $res = http_img_pack("searching.gif", "*", "style='visibility: hidden; position: absolute; $spip_lang_right: 0px; top: -20px;' id='img_$tmp_var'") 
391          . "<div class='liste'>"
392          . "<table border='0' cellspacing='0' cellpadding='3' width='100%'>"
393          . str_replace("::id_ajax_fonc::", "$id_ajax_fonc", $tranches)
394          . afficher_liste($largeurs, $table, $styles)
395          . "</table>"
396          . "</div>";
397               
398        if ($deb_aff) return $res;
399
400        return "<div id='$tmp_var' style='position: relative;'>$res</div>";
401}
402
403// http://doc.spip.org/@afficher_groupe_mots_boucle
404function afficher_groupe_mots_boucle($row, $occurrences)
405{
406        global $connect_statut, $connect_toutes_rubriques;
407
408        $id_mot = $row['id_mot'];
409        $titre_mot = typo($row['titre']);
410                       
411        if ($connect_statut == "0minirezo" OR $occurrences['articles'][$id_mot] > 0)
412                $titre_mot = "<a href='" .
413                  generer_url_ecrire('mots_edit', "id_mot=$id_mot&redirect=" . generer_url_retour('mots_tous')) .
414                  "' class='liste-mot'>$titre_mot</a>";
415
416        $vals = array($titre_mot);
417
418        $texte_lie = array();
419
420//////////////////////////
421//MODIFICATION
422//////////////////////////
423        $texte['articles']['1']=_T('info_1_article');
424        $texte['articles']['2']=_T('info_articles_02');
425        $texte['breves']['1']=_T('info_1_breve');       
426        $texte['breves']['2']=_T('info_breves_03');
427        $texte['syndic']['1']=_T('info_1_site');
428        $texte['syndic']['2']=_T('info_sites');
429        $texte['rubriques']['1']=_T('info_une_rubrique_02');
430        $texte['rubriques']['2'] = _T('info_rubriques_02');
431//TODO : documenter syntaxe : info_1_xxxs et info_xxxs pour xxxs1
432
433        $tables_installees = unserialize(lire_meta('MotsPartout:tables_installees'));
434        foreach($tables_installees as $chose => $m) { $choses[]= $chose; }
435        $nb_total=0;
436        $param="conf_mot=".$id_mot;
437               
438
439        foreach ($choses as $chose){
440                $nb[$chose]=isset($occurrences[$chose][$id_mot]) ? $occurrences[$chose][$id_mot] : 0;
441                $nb_total+=$nb[$chose];
442                if ($nb[$chose]) $param.="&nb[".$chose."]=".$nb[$chose];
443                if ($nb[$chose] == 1)
444                        if ($texte[$chose]['1'])
445                                $texte_lie[] = $texte[$chose]['1'];
446                        else 
447                                $texte_lie[] = _T('info_1_'.$chose);
448                elseif ($nb[$chose] > 1)
449                        if ($texte[$chose]['2'])
450                                $texte_lie[] = $nb[$chose]." ".$texte[$chose]['2'];
451                        else 
452                                $texte_lie[] = $nb[$chose]." "._T('info_'.$chose);
453               
454        }
455//////////////////////////
456//MODIFICATION
457//////////////////////////
458/*     
459//////////////////////////
460
461        $na = isset($occurrences['articles'][$id_mot]) ? $occurrences['articles'][$id_mot] : 0;
462        if ($na == 1)
463                $texte_lie[] = _T('info_1_article');
464        else if ($na > 1)
465                $texte_lie[] = $na." "._T('info_articles_02');
466
467        $nb = isset($occurrences['breves'][$id_mot]) ? $occurrences['breves'][$id_mot] : 0;
468        if ($nb == 1)
469                $texte_lie[] = _T('info_1_breve');
470        else if ($nb > 1)
471                $texte_lie[] = $nb." "._T('info_breves_03');
472
473        $ns = isset($occurrences['sites'][$id_mot]) ? $occurrences['sites'][$id_mot] : 0;
474        if ($ns == 1)
475                $texte_lie[] = _T('info_1_site');
476        else if ($ns > 1)
477                $texte_lie[] = $ns." "._T('info_sites');
478
479        $nr = isset($occurrences['rubriques'][$id_mot]) ? $occurrences['rubriques'][$id_mot] : 0;
480        if ($nr == 1)
481                $texte_lie[] = _T('info_une_rubrique_02');
482        else if ($nr > 1)
483                $texte_lie[] = $nr." "._T('info_rubriques_02');
484//////////////////////////
485//MODIFICATION
486//////////////////////////
487*/
488//////////////////////////
489
490        $texte_lie = join($texte_lie,", ");
491                               
492        $vals[] = $texte_lie;
493
494        if (acces_mots()) {
495//////////////////////////
496//MODIFICATION
497//////////////////////////
498                $href = ($nb_total)
499//              $href = ($nr OR $na OR $ns OR $nb)
500//              ? generer_url_ecrire("mots_tous","conf_mot=$id_mot&na=$na&nb=$nb&nr=$nr&ns=$ns")
501                ? generer_url_ecrire("mots_tous",$param)
502//////////////////////////
503                : redirige_action_auteur('editer_mot', ",$id_mot,,,",'mots_tous');
504
505                $vals[] = "<div style='text-align:right;'><a href='$href'>"
506                . _T('info_supprimer_mot')
507                . "&nbsp;<img src='"
508                . _DIR_IMG_PACK
509                . "croix-rouge.gif' alt='X' width='7' height='7' align='bottom' /></a></div>";
510        } 
511       
512        return $vals;                   
513}
514?>
Note: See TracBrowser for help on using the repository browser.