source: spip-zone/_core_/branches/spip-3.1/plugins/grenier/inc/afficher_objets.php @ 104360

Last change on this file since 104360 was 104360, checked in by spip.franck@…, 3 years ago

code.spip est maintenant en https, donc j'ajoute le "s" à http

File size: 18.0 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2016                                                *
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
15$GLOBALS['my_sites'] = array();
16
17// https://code.spip.net/@icone_table
18function icone_table($type) {
19        $derog = array('document' => 'doc-24.png','syndic_article' => 'site-24.png', 'groupes_mot' => 'groupes-mot-24.png');
20        if (isset($derog[$type]))
21                return $derog[$type];
22        return "$type-24.png";
23}
24
25// https://code.spip.net/@lien_editer_objet
26function lien_editer_objet($type, $key, $id) {
27        return $type == 'document' ? '' : generer_url_ecrire($type . "s_edit", "$key=$id");
28}
29
30// https://code.spip.net/@lien_voir_objet
31function lien_voir_objet($type, $key, $id) {
32        return generer_url_entite($id, $type);
33}
34
35// https://code.spip.net/@afficher_numero_edit
36function afficher_numero_edit($id, $key, $type, $row = null) {
37        global $spip_lang_right, $spip_lang_left,$my_sites;
38        static $numero , $style = '' ;
39        if ($type == 'syndic_article') {
40                $redirect = _request('id_syndic') ? 'id_syndic='._request('id_syndic') : '';
41                if (autoriser('modifier', $type, $id)) {
42                        if ($row['statut'] == "publie"){
43                          $s =  "[<a href='". redirige_action_auteur('instituer_syndic', "$id-refuse", _request('exec'), $redirect) . "'><span style='color: black'>"._T('info_bloquer_lien')."</span></a>]";
44
45                        }
46                        elseif ($row['statut'] == "refuse"){
47                          $s =  "[<a href='". redirige_action_auteur('instituer_syndic', "$id-publie", _request('exec'), $redirect) . "'>"._T('info_retablir_lien')."</a>]";
48                        }
49                        elseif ($row['statut'] == "off"
50                        and isset($my_sites[$id]['miroir']) and $my_sites[$id]['miroir'] == 'oui') {
51                                $s = '('._T('syndic_lien_obsolete').')';
52                        }
53                        else /* 'dispo' ou 'off' (dans le cas ancien site 'miroir') */
54                        {
55                          $s = "[<a href='". redirige_action_auteur('instituer_syndic', "$id-publie", _request('exec'), $redirect) . "'>"._T('info_valider_lien')."</a>]";
56                        }
57                        return $s;
58                }
59        }
60
61        if (!$style) {
62                $style = " class='spip_xx-small' style='float: $spip_lang_right; padding-$spip_lang_left: 4px; color: black; '";
63
64                $numero = _T('info_numero_abbreviation');
65        }
66
67        if (!autoriser('modifier', $type, $id) or
68            !$href = lien_editer_objet($type, $key, $id)) {
69                $bal = 'span';
70        } else {
71                $bal = 'a';
72                $href = "\nhref='"
73                . $href
74                . "' title='"
75                . _T('bouton_modifier')
76                . "'";
77        }
78        return "<$bal$style$href><b>"
79        . $numero
80        . $id
81        . "</b></$bal>";
82}
83
84// libelle du titre de l'objet :
85// la partie du titre a afficher dans un lien
86// puis la partie hors lien
87// https://code.spip.net/@afficher_titre_objet
88function afficher_titre_objet($type, $row) {
89        if (function_exists($f = "afficher_titre_$type"))
90                return $f($row);
91
92        $titre = isset($row['titre'])?sinon($row['titre'], "("._T('info_sans_titre_2').")"):
93        (isset($row['nom'])?sinon($row['nom'], "("._T('info_sans_titre_2').")"):
94         (isset($row['nom_email'])?sinon($row['nom_email'], "("._T('info_sans_titre_2').")"):
95          ""));
96        return array(typo(supprime_img($titre, '')),'');
97}
98// https://code.spip.net/@afficher_titre_site
99function afficher_titre_site($row) {
100        $nom = $row['nom_site'];
101
102        $nom = $nom?(strlen($nom) > 1?typo($nom):_T('info_sans_titre_2')):("("._T('info_sans_titre_2').")");
103
104        $s2 = "&nbsp;&nbsp; <span class='spip_xx-small'>[<a href='"
105        .$row['url_site']."'>"._T('lien_visite_site')."</a>]</span>";
106
107        return array($nom,$s2);
108}
109// https://code.spip.net/@afficher_titre_auteur
110function afficher_titre_auteur($row) {
111        return array($row['nom'],
112                ((isset($row['restreint']) and $row['restreint'])
113                   ? (" &nbsp;<small>"._T('statut_admin_restreint')."</small>")
114                   : ''));
115}
116
117// https://code.spip.net/@afficher_titre_syndic_article
118function afficher_titre_syndic_article($row) {
119        return array('', recuperer_fond(
120                'prive/objets/contenu/syndic_article',
121                array('id' => $row['id_syndic_article'])
122        ));
123}
124
125// https://code.spip.net/@afficher_complement_objet
126function afficher_complement_objet($type, $row) {
127        if (function_exists($f = "afficher_complement_$type"))
128                return $f($row);
129         return "";
130}
131
132// https://code.spip.net/@afficher_complement_site
133function afficher_complement_site($row) {
134        $syndication = $row['syndication'];
135        $s = "";
136        if ($syndication == 'off' or $syndication == 'sus') {
137                $s .= "<div style='color: red;'>"
138                        . http_img_pack('puce-orange-anim.gif', $syndication, "class='puce'", _T('info_panne_site_syndique'))
139                        . " "._T('info_probleme_grave')." </div>";
140        }
141        if ($syndication == "oui" or $syndication == "off" or $syndication == 'sus'){
142                $s .= "<div style='color: red;'>"._T('info_syndication')."</div>";
143        }
144        if ($syndication == "oui" or $syndication == "off" or $syndication == "sus") {
145                $id_syndic = $row['id_syndic'];
146                $total_art = sql_countsel("spip_syndic_articles", "id_syndic=$id_syndic");
147                $s .= " " . $total_art . " " . _T('info_syndication_articles');
148        } else {
149                        $s .= "&nbsp;";
150        }
151        return $s;
152}
153// https://code.spip.net/@afficher_complement_syndic_article
154function afficher_complement_syndic_article($row) {
155        global $my_sites;
156        if ($GLOBALS['exec'] != 'sites') {
157                $id_syndic = $row['id_syndic'];
158                // $my_sites cache les resultats des requetes sur les sites
159                if (!isset($my_sites[$id_syndic]))
160                        $my_sites[$id_syndic] = sql_fetsel("nom_site, moderation, miroir", "spip_syndic", "id_syndic=$id_syndic");
161
162                $aff = $my_sites[$id_syndic]['nom_site'];
163                if ($my_sites[$id_syndic]['moderation'] == 'oui')
164                        $aff = "<i>$aff</i>";
165
166                $s = "<a href='" . generer_url_ecrire("sites", "id_syndic=$id_syndic") . "'>$aff</a>";
167
168                return $s;
169        }
170        return "";
171}
172
173// affichage des liste d'objets
174// Cas generique, utilise pour tout sauf article
175// https://code.spip.net/@inc_afficher_objets_dist
176function inc_afficher_objets_dist($type, $titre, $requete, $formater = '', $force = false) {
177        if ($afficher = charger_fonction("afficher_{$type}s", 'inc', true)){
178                return $afficher($titre, $requete, $formater);
179        }
180
181        if (($GLOBALS['meta']['multi_rubriques'] == 'oui'
182             and (!isset($GLOBALS['id_rubrique'])))
183        or $GLOBALS['meta']['multi_articles'] == 'oui') {
184                $afficher_langue = true;
185
186                if (isset($GLOBALS['langue_rubrique'])) $langue_defaut = $GLOBALS['langue_rubrique'];
187                else $langue_defaut = $GLOBALS['meta']['langue_site'];
188        } else $afficher_langue = $langue_defaut = '';
189
190        $arg = array($afficher_langue, false, $langue_defaut, $formater, $type,id_table_objet($type));
191        if (!function_exists($skel = "afficher_{$type}s_boucle")){
192                $skel = "afficher_objet_boucle";
193        }
194
195        $presenter_liste = charger_fonction('presenter_liste', 'inc');
196        $tmp_var = 't_' . substr(md5(join('', $requete)), 0, 4);
197        $styles = array(array('arial11', 7), array('arial11'), array('arial1'), array('arial1'), array('arial1 centered', 100), array('arial1', 38));
198
199        $tableau = array(); // ne sert pas ici
200        return $presenter_liste($requete, $skel, $tableau, $arg, $force, $styles, $tmp_var, $titre, icone_table($type));
201}
202
203// https://code.spip.net/@charger_fonction_logo_if
204function charger_fonction_logo_if()
205{
206        global $spip_display;
207
208        if ($spip_display == 1 or $spip_display == 4 or !isset($GLOBALS['meta']['image_process']))
209          return false;
210        if ($GLOBALS['meta']['image_process'] == "non") return false;
211        return charger_fonction('chercher_logo', 'inc');
212}
213
214// https://code.spip.net/@afficher_objet_boucle
215function afficher_objet_boucle($row, $own)
216{
217        global $connect_statut, $spip_lang_right;
218        static $chercher_logo = true;
219
220        list($afficher_langue, $affrub, $langue_defaut, $formater, $type, $primary) = $own;
221        $vals = array();
222        $id_objet = $row[$primary];
223        if (autoriser('voir', $type, $id_objet)){
224
225                $date_heure = isset($row['date'])?$row['date']:(isset($row['date_heure'])?$row['date_heure']:"");
226
227                $statut = isset($row['statut'])?$row['statut']:"";
228                if (isset($row['lang']))
229                  changer_typo($lang = $row['lang']);
230                else $lang = $langue_defaut;
231                $lang_dir = lang_dir($lang);
232                $id_rubrique = isset($row['id_rubrique'])?$row['id_rubrique']:0;
233
234                $puce_statut = charger_fonction('puce_statut', 'inc');
235                $vals[] = $puce_statut($id_objet, $statut, $id_rubrique, $type);
236
237                list($titre, $suite) = afficher_titre_objet($type, $row);
238                $flogo = '';
239                if ($chercher_logo) {
240                        if ($chercher_logo !== true
241                            or $chercher_logo = charger_fonction_logo_if())
242                          if ($logo = $chercher_logo($id_objet, $primary, 'on')) {
243                                list($fid, $dir, $nom, $format) = $logo;
244                                include_spip('inc/filtres_images_mini');
245                                $logo = image_reduire("<img src='$fid' alt='' />", 26, 20);
246                                if ($logo)
247                                        $flogo = "\n<span style='float: $spip_lang_right; margin-top: -2px; margin-bottom: -2px;'>$logo</span>";
248                          }
249                }
250                if ($titre) {
251                        $titre = "<a href='"
252                        .  lien_voir_objet($type, $primary, $id_objet)
253                        .  "'>"
254                        . $titre
255                        . "</a>";
256                }
257                $vals[] = "\n<div>$flogo$titre$suite</div>";
258
259                $s = "";
260                if ($afficher_langue){
261                        if (isset($row['langue_choisie'])){
262                                $s .= " <span class='spip_xx-small' style='color: #666666' dir='$lang_dir'>";
263                                if ($row['langue_choisie'] == "oui") $s .= "<b>".traduire_nom_langue($lang)."</b>";
264                                else $s .= "(".traduire_nom_langue($lang).")";
265                                $s .= "</span>";
266                        }
267                        elseif ($lang != $langue_defaut)
268                                $s .= " <span class='spip_xx-small' style='color: #666666' dir='$lang_dir'>".
269                                        ($lang
270                                                ? "(".traduire_nom_langue($lang).")"
271                                                : ''
272                                        )
273                                ."</span>";
274                }
275                $vals[] = $s;
276
277                $vals[] = afficher_complement_objet($type, $row);
278
279                $s = "";
280                if ($affrub && $id_rubrique) {
281                        $rub = sql_fetsel("id_rubrique, titre", "spip_rubriques", "id_rubrique=$id_rubrique");
282                        $id_rubrique = $rub['id_rubrique'];
283                        $s .= "<a href='" . generer_url_entite($id_rubrique, 'rubrique') . "' style=\"display:block;\">".typo($rub['titre'])."</a>";
284                } elseif ($statut){
285                        if ($statut != "prop")
286                                        $s = affdate_jourcourt($date_heure);
287                                else
288                                        $s .= _T('info_a_valider');
289                }
290                $vals[] = $s;
291
292                $vals[] = afficher_numero_edit($id_objet, $primary, $type, $row);
293        }
294        return $vals;
295}
296
297// Cas particuliers -----------------------------------------------------------------
298
299//
300// Afficher tableau d'articles
301//
302// https://code.spip.net/@inc_afficher_articles_dist
303function inc_afficher_articles_dist($titre, $requete, $formater = '') {
304
305        if (!isset($requete['FROM'])) $requete['FROM'] = 'spip_articles AS A';
306
307        if (!isset($requete['SELECT'])) {
308                $requete['SELECT'] = "A.id_article, A.titre, A.id_rubrique, A.statut, A.date, A.lang, A.id_trad, A.descriptif";
309        }
310
311        if (!isset($requete['GROUP BY'])) $requete['GROUP BY'] = '';
312
313        $cpt = sql_countsel($requete['FROM'], $requete['WHERE'], $requete['GROUP BY']);
314
315        if (!$cpt) return '' ;
316
317        $requete['FROM'] = preg_replace("/(spip_articles\s+AS\s+(\w+))/i", "\\1 LEFT JOIN spip_petitions AS P ON \\2.id_article=P.id_article", $requete['FROM']);
318
319        $requete['SELECT'] .= ", P.id_article AS petition ";
320
321        // memorisation des arguments pour gerer l'affichage par tranche
322        // et/ou par langues.
323
324
325        $hash = sauver_requete($titre, $requete, $formater);
326
327        if (isset($requete['LIMIT'])) $cpt = min($requete['LIMIT'], $cpt);
328        return afficher_articles_trad($titre, $requete, $formater, $hash, $cpt);
329}
330
331//
332// Stocke la fonction ajax dans le fichier temp pour exec=memoriser
333//
334
335// https://code.spip.net/@sauver_requete
336function sauver_requete($titre, $requete, $formater)
337{
338        $r = $requete;
339        unset($r['ORDER BY']);
340        $hash = substr(md5(serialize($r) . $GLOBALS['meta']['gerer_trad'] . $titre), 0, 31);
341
342        // on lit l'existant
343        lire_fichier(_DIR_SESSIONS.'ajax_fonctions.txt', $ajax_fonctions);
344        $ajax_fonctions = @unserialize($ajax_fonctions);
345
346        // on ajoute notre fonction
347        $v = array(time(), $titre, $requete, $formater);
348        $ajax_fonctions[$hash] = $v;
349
350        // supprime les fonctions trop vieilles
351        foreach ($ajax_fonctions as $h => $fonc)
352                if (time() - $fonc[0] > 48 * 3600)
353                        unset($ajax_fonctions[$h]);
354
355        // enregistre
356        ecrire_fichier(_DIR_SESSIONS.'ajax_fonctions.txt',
357                serialize($ajax_fonctions));
358
359        return $hash;
360
361}
362// https://code.spip.net/@afficher_articles_trad
363function afficher_articles_trad($titre_table, $requete, $formater, $hash, $cpt, $trad = 0) {
364
365        global $spip_lang_right;
366
367        $tmp_var = 't' . substr($hash, 0, 7);
368
369        if ($trad) {
370                $formater = 'afficher_articles_trad_boucle';
371                $icone = "langues-off-12.gif";
372                $alt = _T('masquer_trad');
373        } else {
374                if (!$formater)
375                        $formater = charger_fonction('formater_article', 'inc');
376                $icone = 'langues-12.gif';
377                $alt = _T('afficher_trad');
378        }
379
380        $texte =  '<b>' . $titre_table  . '</b>';
381
382        // Le parametre o sert a empecher le navigateur de reutiliser
383        // un cache de tranche issu d'un autre tri
384
385        $arg = "hash=$hash&o=" . $requete['ORDER BY'];
386
387/*
388        // DESACTIVE CAR AJOUTE UNE COMPLEXITE INUTILE -- A REVOIR
389        // le micro "afficher les traductions"
390        if (($GLOBALS['meta']['gerer_trad'] == "oui")) {
391                $url = generer_url_ecrire('memoriser',"$arg&trad=" . (1-$trad));
392                $texte =
393                "\n<span style='float: $spip_lang_right;'><a href=\"#\""
394                  . generer_onclic_ajax($url, $tmp_var, 0)
395                  . "><img\nsrc='". chemin_image($icone) ."' alt='$alt' title='$alt' /></a></span>" . $texte;
396        }
397*/
398
399/*
400        // DESACTIVE CAR AJOUTE UNE COMPLEXITE INUTILE -- A REVOIR
401        $url_t = generer_url_ecrire('memoriser',"hash=$hash&by=0%2Btitre,titre");
402        $url_t = afficher_boutons_tri($url_t, $tmp_var);
403
404        $url_d = generer_url_ecrire('memoriser',"hash=$hash&by=date");
405        $url_d = afficher_boutons_tri($url_d, $tmp_var);
406*/
407        $url_t = $url_d = '';
408        $presenter_liste = charger_fonction('presenter_liste', 'inc');
409        $styles = array(array('', 11), array('arial2','', $url_t), array('arial1', 80), array('arial1', 100, $url_d), array('arial1', 50));
410        $tableau = array();
411        $url = generer_url_ecrire('memoriser', "$arg&trad=$trad");
412        $res = $presenter_liste($requete, $formater, $tableau, array(), false, $styles, $tmp_var, $texte, "article-24.png", $url, $cpt);
413
414        return ajax_action_greffe($tmp_var, '', $res);
415}
416
417// https://code.spip.net/@afficher_boutons_tri
418function afficher_boutons_tri($url, $tmp_var)
419{
420        static $monter = '';
421        static $descendre = '';
422
423        if (!$monter) {
424                $monter = http_img_pack('monter-16.png', '<');
425                $descendre = http_img_pack('descendre-16.png', '>');
426        }
427
428        $url_d = generer_onclic_ajax($url ."&amp;order=desc", $tmp_var, 0);
429        $url_a = generer_onclic_ajax($url ."&amp;order=asc", $tmp_var, 0);
430       
431        return "<a href='$url'$url_d>$monter</a><a href='$url'$url_a>$descendre</a>";
432}
433
434// https://code.spip.net/@afficher_articles_trad_boucle
435function afficher_articles_trad_boucle($row, $own = '')
436{
437        global $spip_lang_right, $spip_display;
438
439        $id_article = $row['id_article'];
440        if (!autoriser('voir', 'article', $id_article)) return '';
441
442        $titre = $row['titre'];
443        $id_rubrique = $row['id_rubrique'];
444        $statut = $row['statut'];
445        $id_trad = $row['id_trad'];
446        $lang = $row['lang'];
447
448        $lang_dir = lang_dir($GLOBALS['lang_objet']);
449        $dates_art = $langues_art = array();
450        $ligne = "";
451
452        $res_trad = sql_select("id_article, lang, date_modif", "spip_articles", "id_trad = $id_trad AND id_trad > 0");
453
454        while ($row_trad = sql_fetch($res_trad)) {
455                $id_article_trad = $row_trad["id_article"];
456                $lang_trad = $row_trad["lang"];
457                $date = $row_trad['date_modif'];
458                $dates_art[$lang_trad] = $date;
459                $langues_art[$lang_trad] = $id_article_trad;
460                if ($id_article_trad == $id_trad) $date_ref = $date;
461        }
462
463        // faudrait sortir ces invariants de boucle
464
465        if (($GLOBALS['meta']['multi_rubriques'] == 'oui' and (!isset($GLOBALS['id_rubrique']))) or $GLOBALS['meta']['multi_articles'] == 'oui') {
466                        $langue_defaut = isset($GLOBALS['langue_rubrique'])
467                          ? $GLOBALS['meta']['langue_site']
468                          : $GLOBALS['langue_rubrique'];
469                        if ($lang != $langue_defaut)
470                                $afficher_langue = " <span class='spip_xx-small' style='color: #666666'  dir='$lang_dir'>(".traduire_nom_langue($lang).")</span>";
471        } else $afficher_langue = '';
472
473        foreach(explode(',', $GLOBALS['meta']['langues_multilingue']) as $k){
474                if (isset($langues_art[$k]) and $langues_art[$k] <> $id_trad){
475                        $h = generer_url_ecrire("articles", "id_article=".$langues_art[$k]);
476                        $style = strtotime($dates_art[$k]) < strtotime($date_ref);
477                        $style = $style ? 'claire' : 'foncee';
478                        $ligne .= "<a href='$h' class='$style'>$k</a>";
479                }
480        }
481
482        if (acces_restreint_rubrique($id_rubrique))
483                $img = http_img_pack("auteur-0minirezo-16.png", _T('titre_image_administrateur'), "", _T('titre_image_admin_article'));
484        else $img = '';
485
486        if (!$titre) $titre =  _T('ecrire:info_sans_titre');
487        if ($id_article == $id_trad) $titre = "<b>$titre</b>";
488
489        $h = generer_url_ecrire("articles", "id_article=$id_article");
490
491        $titre = "\n<div>"
492          . $img
493          . "<a href='$h' dir='$lang_dir' style=\"display:block;\">"
494          . typo(supprime_img($titre, ''))
495          . "</a></div>";
496
497        if ($spip_display == 4) return array($ligne);
498
499        $ligne .= "<a href='$h'><span class='lang_base'>$lang</span></a>";
500
501        // La petite puce de changement de statut
502        $puce_statut = charger_fonction('puce_statut', 'inc');
503        $puce = $puce_statut($id_article, $statut, $id_rubrique, 'article');
504
505        return array($puce,
506                      $titre,
507                      $afficher_langue,
508                      "<div style='float: $spip_lang_right; margin-right: -10px;'>"
509                      . $ligne
510                      . "</div>");
511}
512
513// https://code.spip.net/@afficher_auteurs_boucle
514function afficher_auteurs_boucle($row, $own) {
515        $vals = array();
516        list($afficher_langue, $affrub, $langue_defaut, $formater, $type, $primary) = $own;
517        $formater_auteur = $formater ? $formater : charger_fonction('formater_auteur', 'inc');
518        if ($row['statut'] == '0minirezo')
519                $row['restreint'] = sql_countsel('spip_auteurs_liens', "objet='rubrique' AND id_auteur=".intval($row['id_auteur']));
520
521        list($s, $mail, $nom, $w, $p) = $formater_auteur($row['id_auteur'], $row);
522        if ($w) {
523          if (preg_match(',^([^>]*>)[^<]*(.*)$,', $w, $r)) {
524            $w = $r[1] . substr($row['site'], 0, 20) . $r[2];
525          }
526        }
527        $vals[] = $s;
528        $vals[] = $mail;
529        $vals[] = $nom
530                . ((isset($row['restreint']) and $row['restreint'])
531                   ? (" &nbsp;<small>"._T('statut_admin_restreint')."</small>")
532                   : '');
533        $vals[] = $w;
534        $vals[] = $p;
535        return $vals;
536}
Note: See TracBrowser for help on using the repository browser.