source: spip-zone/_plugins_/_dev_/acces_groupes/exec/articles_tous.php @ 5862

Last change on this file since 5862 was 5862, checked in by cy_altern@…, 15 years ago

début du filtrage complet de l'espace privé par surcharge des requêtes SQL : plus de rubriques restreintes *presque partout*, reste les articles, les sites et les forums...

File size: 12.6 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');
16
17// modif pour accesgroupes
18// inclure le fichier de redéfinitions des BOUCLES pour utiliser ses fcts de filtrage des requètes pour l'espace privé
19         include_spip('inc/accesgroupes_fonctions');
20
21// http://doc.spip.org/@exec_articles_tous_dist
22function exec_articles_tous_dist()
23{
24        global $aff_art, $sel_lang, $article, $enfant, $text_article;
25        global $connect_id_auteur, $connect_statut, $spip_dir_lang, $spip_lang, $browser_layer;
26
27        if (!is_array($aff_art)) $aff_art = array('prop','publie');
28
29        pipeline('exec_init',array('args'=>array('exec'=>'articles_tous'),'data'=>''));
30        list($enfant, $first_couche, $last_couche) = arbo_articles_tous();
31        debut_page(_T('titre_page_articles_tous'), "accueil", "tout-site");
32        debut_gauche();
33
34        if (($GLOBALS['meta']['multi_rubriques'] == 'oui' OR $GLOBALS['meta']['multi_articles'] == 'oui') AND $GLOBALS['meta']['gerer_trad'] == 'oui') 
35                $langues = explode(',', $GLOBALS['meta']['langues_multilingue']);
36        else    $langues = array(); 
37
38        $sel_lang[$spip_lang] = $spip_lang;
39
40if ($connect_statut == "0minirezo") 
41  $result = spip_query("SELECT id_article, titre, statut, id_rubrique, lang, id_trad, date_modif FROM spip_articles ORDER BY date DESC");
42else 
43  $result = spip_query("SELECT articles.id_article, articles.titre, articles.statut, articles.id_rubrique, articles.lang, articles.id_trad, articles.date_modif FROM spip_articles AS articles, spip_auteurs_articles AS lien WHERE (articles.statut = 'publie' OR articles.statut = 'prop' OR (articles.statut = 'prepa' AND articles.id_article = lien.id_article AND lien.id_auteur = $connect_id_auteur)) GROUP BY id_article ORDER BY articles.date DESC");
44
45while($row = spip_fetch_array($result)) {
46        $id_rubrique=$row['id_rubrique'];
47        $id_article = $row['id_article'];
48        $titre = typo($row['titre']);
49        $statut = $row['statut'];
50        $lang = $row['lang'];
51        $id_trad = $row['id_trad'];
52        $date_modif = $row['date_modif'];
53       
54        $aff_statut[$statut] = true; // signale qu'il existe de tels articles
55        $text_article[$id_article]["titre"] = $titre;
56        $text_article[$id_article]["statut"] = $statut;
57        $text_article[$id_article]["lang"] = $lang;
58        $text_article[$id_article]["id_trad"] = $id_trad;
59        $text_article[$id_article]["date_modif"] = $date_modif;
60        $GLOBALS['langues_utilisees'][$lang] = true;
61
62        if (count($langues) > 1) {
63                while (list(, $l) = each ($langues)) {
64                        if (in_array($l, $sel_lang)) $text_article[$id_article]["trad"]["$l"] =  "<span class='creer'>$l</span>";
65                }
66        }
67               
68        if ($id_trad == $id_article OR $id_trad == 0) {
69                $text_article[$id_article]["trad"]["$lang"] = "<span class='lang_base'$spip_dir_lang>$lang</span>";
70        }
71               
72        if (in_array($statut, $aff_art))
73                $article[$id_rubrique][] = $id_article;
74 }
75
76if ($text_article)
77        foreach ($text_article as $id_article => $v) {
78                $id_trad = $v["id_trad"];
79                $lang = $v['lang'];
80                               
81                       
82                if ($id_trad > 0 AND $id_trad != $id_article AND in_array($lang, $sel_lang)) {
83                        if ($text_article[$id_trad]["date_modif"] < $v["date_modif"]) 
84                          $c = 'foncee';
85                        else
86                          $c = 'claire';
87                        $text_article[$id_trad]["trad"][$lang] =
88 "<a class='$c' href='" . generer_url_ecrire("articles","id_article=$id_article") . "'>$lang</a>";
89                }
90        }
91
92formulaire_affiche_tous($aff_art, $aff_statut, $sel_lang);
93
94        echo pipeline('affiche_gauche',array('args'=>array('exec'=>'articles_tous'),'data'=>''));
95        creer_colonne_droite();
96        echo pipeline('affiche_droite',array('args'=>array('exec'=>'articles_tous'),'data'=>''));
97debut_droite();
98
99if ($enfant AND $browser_layer)
100        couche_formulaire_tous($first_couche, $last_couche);
101
102afficher_rubriques_filles(0);
103
104
105fin_page();
106}
107
108// Voir inc_layer pour les 2 globales utilisees
109
110// http://doc.spip.org/@arbo_articles_tous
111function arbo_articles_tous()
112{
113        global $numero_block, $compteur_block;
114
115        $enfant = array();
116       
117// modif pour accesgroupes
118        $sql_rub_restreintes = accesgroupes_rubriques_accessibles_where('id_rubrique ', 'prive');               
119       
120        $result = spip_query("SELECT id_rubrique, titre, id_parent
121                                                                                                FROM spip_rubriques
122                                                                                                WHERE $sql_rub_restreintes
123                                                                                                ORDER BY 0+titre,titre");
124// fin modif
125                                                                                               
126        $first_couche = 0;
127        while ($row = spip_fetch_array($result)) {
128                $id_rubrique = $row['id_rubrique'];
129                $id_parent = $row['id_parent'];
130                $enfant[$id_parent][$id_rubrique] = typo($row['titre']);
131                $nom_block = "rubrique$id_rubrique";
132                if (!isset($numero_block[$nom_block])){
133                        $compteur_block++;
134                        $numero_block[$nom_block] = $compteur_block;
135
136                        if (!$first_couche) $first_couche = $compteur_block;
137                }
138        }
139        $last_couche = $first_couche ? $compteur_block : 0;
140        return array($enfant, $first_couche, $last_couche);
141}
142
143
144//  checkbox avec image
145
146// http://doc.spip.org/@http_label_img
147function http_label_img($statut, $etat, $var, $img, $texte) {
148  return "<label for='$statut'>". 
149    boutonne('checkbox',
150             $var . '[]',
151             $statut,
152             (($etat !== false) ? ' checked="checked"' : '') .
153             "id='$statut'") .
154    "&nbsp;" .
155    http_img_pack($img, $texte, "width='8' height='9' border='0'", $texte) .
156    " " .
157    $texte .
158    "</label><br />";
159}
160
161// http://doc.spip.org/@formulaire_affiche_tous
162function formulaire_affiche_tous($aff_art, $aff_statut,$sel_lang)
163{
164global $spip_lang_right;
165echo generer_url_post_ecrire("articles_tous"), 
166        "<input type='hidden' name='aff_art[]' value='x'>";
167
168debut_boite_info();
169
170 echo "<b>",_T('titre_cadre_afficher_article'),"&nbsp;:</b><br />";
171
172if ($aff_statut['prepa'])
173        echo http_label_img('prepa',
174                            in_array('prepa', $aff_art),
175                            'aff_art',
176                            'puce-blanche-breve.gif',
177                            _T('texte_statut_en_cours_redaction'));
178
179if ($aff_statut['prop'])
180        echo http_label_img('prop',
181                            in_array('prop', $aff_art),
182                            'aff_art',
183                            'puce-orange-breve.gif',
184                            _T('texte_statut_attente_validation'));
185       
186if ($aff_statut['publie'])
187        echo http_label_img('publie',
188                            in_array('publie', $aff_art),
189                            'aff_art',
190                            'puce-verte-breve.gif',
191                            _T('texte_statut_publies'));
192
193if ($aff_statut['refuse'])
194        echo http_label_img('refuse',
195                            in_array('refuse', $aff_art),
196                            'aff_art',
197                            'puce-rouge-breve.gif',
198                            _T('texte_statut_refuses'));
199
200if ($aff_statut['poubelle'])
201        echo http_label_img('poubelle',
202                            in_array('poubelle', $aff_art),
203                            'aff_art',
204                            'puce-poubelle-breve.gif',
205                            _T('texte_statut_poubelle'));
206
207echo "<div align='$spip_lang_right'><INPUT TYPE='submit' CLASS='fondo' VALUE='"._T('bouton_changer')."'></div>";
208
209
210// GERER LE MULTILINGUISME
211if (($GLOBALS['meta']['multi_rubriques'] == 'oui' OR $GLOBALS['meta']['multi_articles'] == 'oui') AND $GLOBALS['meta']['gerer_trad'] == 'oui') {
212
213        // bloc legende
214        $lf = $GLOBALS['meta']['langue_site'];
215        echo "<hr /><div class='verdana2'>";
216        echo _T('info_tout_site6');
217        echo "<div><span class='lang_base'>$lf</span> ". _T('info_tout_site5') ." </div>";
218        echo "<div><span class='creer'>$lf</span> ". _T('info_tout_site2') ." </div>";
219        echo "<div><a class='claire'>$lf</a> ". _T('info_tout_site3'). " </div>";
220        echo "<div><a class='foncee'>$lf</a> ". _T('info_tout_site4'). " </div>";
221        echo "</div>\n";
222
223        // bloc choix de langue
224        $langues = explode(',', $GLOBALS['meta']['langues_multilingue']);
225        if (count($langues) > 1) {
226                sort($langues);
227                echo "<br /><div class='verdana2'><b>"._T('titre_cadre_afficher_traductions')."</b><br />";
228                echo "<select style='width:100%' NAME='sel_lang[]' size='".count($langues)."' multiple='multiple'>";
229                while (list(, $l) = each ($langues)) {
230                  echo "<option value='$l'",
231                    (in_array($l,$sel_lang) ? " selected='selected'" : ""),
232                    ">",
233                    traduire_nom_langue($l),
234                    "</option>\n"; 
235                }
236                echo "</select></div>\n";
237
238                echo "<div align='$spip_lang_right'><INPUT TYPE='submit' NAME='Changer' CLASS='fondo' VALUE='"._T('bouton_changer')."'></div>";
239        }
240
241}
242
243fin_boite_info();
244echo "</form>";
245}
246
247// http://doc.spip.org/@couche_formulaire_tous
248function couche_formulaire_tous($first_couche, $last_couche)
249{
250        global $spip_lang_rtl;
251
252        echo "<div>&nbsp;</div>";
253        echo "<b class='verdana3'>";
254        echo "<a href=\"javascript:";
255        echo "manipuler_couches('ouvrir','$spip_lang_rtl',$first_couche,$last_couche, '" . _DIR_IMG_PACK . "')\">";
256        echo _T('lien_tout_deplier');
257        echo "</a>";
258        echo "</b>";
259        echo " | ";
260        echo "<b class='verdana3'>";
261        echo "<a href=\"javascript:";
262        echo "manipuler_couches('fermer','$spip_lang_rtl',$first_couche,$last_couche, '" . _DIR_IMG_PACK . "')\">";
263        echo _T('lien_tout_replier');
264        echo "</a>";
265        echo "</b>";
266        echo "<div>&nbsp;</div>";
267}
268
269// http://doc.spip.org/@afficher_rubriques_filles
270function afficher_rubriques_filles($id_parent) {
271        global $enfant, $article;
272        global $spip_lang_left, $spip_lang_right, $spip_lang;
273        global $couleur_claire;
274        static $decal = 0;
275
276        $decal = $decal + 1;
277        $droite = 500 - (10 * $decal);
278       
279        if ($enfant[$id_parent]) {
280          while (list($id_rubrique, $titre) = each($enfant[$id_parent]) ) {
281                       
282                        if ($id_parent == 0) {
283                                $icone = "secteur-24.gif";
284                                $bgcolor = " background-color: $couleur_claire;";
285                        }
286                        else {
287                                $icone = "rubrique-24.gif";
288                                $bgcolor = "";
289                        }
290                       
291                        echo "<div style='padding-top: 5px; padding-bottom: 5px; padding-$spip_lang_left: 28px; background: url(" . http_wrapper($icone) . ") $spip_lang_left center no-repeat;$bgcolor'>";
292                       
293                        $lesarticles = isset($article[$id_rubrique]) ? $article[$id_rubrique] : '';
294                        $lesenfants = isset($enfant[$id_rubrique]) ? $enfant[$id_rubrique] : '';
295                        if ($lesenfants OR $lesarticles) echo bouton_block_invisible("rubrique$id_rubrique");
296                       
297                        echo "<b class='verdana2'><a href='",
298                          generer_url_ecrire("naviguer","id_rubrique=$id_rubrique"),
299                          "'>",
300                          $titre,
301                          "</b></a></div>\n";
302
303                        if ($lesenfants OR $lesarticles) {
304                                echo debut_block_invisible("rubrique$id_rubrique");
305                                echo "<div class='plan-rubrique'>";
306                                if ($lesarticles) {
307                                        echo "<div class='plan-articles'>";
308                                        article_tous_rubrique($lesarticles, $id_rubrique);
309                                        echo "</div>";
310                                }
311
312                                afficher_rubriques_filles($id_rubrique);       
313                                echo "</div>";
314                                echo fin_block();
315                        }
316                       
317                if ($id_parent == 0) echo "<div>&nbsp;</div>";
318          }
319        }
320        $decal = $decal-1;
321       
322}
323
324// http://doc.spip.org/@article_tous_rubrique
325function article_tous_rubrique($tous, $id_rubrique) 
326{
327        global $text_article;
328
329        $flag_trad = (($GLOBALS['meta']['multi_rubriques'] == 'oui' 
330                        OR $GLOBALS['meta']['multi_articles'] == 'oui') 
331                AND $GLOBALS['meta']['gerer_trad'] == 'oui');
332
333        while(list(,$zarticle) = each($tous) ) {
334                $attarticle = &$text_article[$zarticle];
335                $zelang = $attarticle["lang"];
336                unset ($attarticle["trad"][$zelang]);
337                if ($attarticle["id_trad"] == 0 OR $attarticle["id_trad"] == $zarticle) {
338                        $auteurs = trouve_auteurs_articles($zarticle);
339                        /* pas loin du but, mais mise en page horrible
340$statuts= puce_statut_article($zarticle, $attarticle['statut'], $id_rubrique);
341                        */
342                        if (count($attarticle["trad"]) > 0) {
343                                ksort($attarticle["trad"]);
344                                $traductions = join ($attarticle["trad"], "");
345                        echo "<span class='trad_float'>", $traductions, "</span>";
346                        }
347                        echo "<a   class='",
348                          $attarticle["statut"],
349                          "' href='", 
350                          generer_url_ecrire("articles","id_article=$zarticle"),
351                          "'",
352                          ($auteurs ? (' title="' . htmlspecialchars($auteurs). '"') :''),
353                          ">",
354                          ($flag_trad ? "<span class='lang_base'>$zelang</span> " : ''),
355                          "<span>",
356                          $attarticle["titre"],
357                          "</span></a>";
358                }
359        }
360}
361
362// http://doc.spip.org/@trouve_auteurs_articles
363function trouve_auteurs_articles($id_article)
364{
365        $result = spip_query("SELECT nom FROM spip_auteurs AS auteurs, spip_auteurs_articles AS lien WHERE auteurs.id_auteur=lien.id_auteur AND lien.id_article=$id_article ORDER BY auteurs.nom");
366        $res = array();
367        while ($row = spip_fetch_array($result))  $res[] = $row["nom"];
368        return join(", ", $res);
369}
370?>
Note: See TracBrowser for help on using the repository browser.