[SPIP] v3.2.1-->v3.2.2
[lhc/web/www.git] / www / prive / objets / liste / auteurs_fonctions.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2019 *
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
13 /**
14 * Fonctions spécifiques au squelette
15 *
16 * @package SPIP\Core\Fonctions
17 **/
18 if (!defined('_ECRIRE_INC_VERSION')) {
19 return;
20 }
21
22 /**
23 * Compter les articles publies lies a un auteur, dans une boucle auteurs
24 * pour la vue prive/liste/auteurs.html
25 *
26 * @param <type> $idb
27 * @param <type> $boucles
28 * @param <type> $crit
29 * @param <type> $left
30 */
31 function critere_compteur_articles_filtres_dist($idb, &$boucles, $crit, $left = false) {
32 $boucle = &$boucles[$idb];
33
34 $_statut = calculer_liste($crit->param[0], array(), $boucles, $boucle->id_parent);
35
36 $not = '';
37 if ($crit->not) {
38 $not = ", 'NOT'";
39 }
40 $boucle->from['LAA'] = 'spip_auteurs_liens';
41 $boucle->from_type['LAA'] = 'left';
42 $boucle->join['LAA'] = array("'auteurs'", "'id_auteur'", "'id_auteur'", "'LAA.objet=\'article\''");
43
44 $boucle->from['articles'] = 'spip_articles';
45 $boucle->from_type['articles'] = 'left';
46 $boucle->join['articles'] = array(
47 "'LAA'",
48 "'id_article'",
49 "'id_objet'",
50 "'(articles.statut IS NULL OR '.sql_in('articles.statut',_q($_statut)$not).')'"
51 );
52
53 $boucle->select[] = 'COUNT(articles.id_article) AS compteur_articles';
54 $boucle->group[] = 'auteurs.id_auteur';
55 }
56
57 /**
58 * Compter les articles publiés liés à un auteur, dans une boucle auteurs
59 * pour la vue `prive/liste/auteurs.html`
60 *
61 * Nécessite le critère `compteur_articles_filtres`
62 *
63 * @balise
64 * @see critere_compteur_articles_filtres_dist()
65 *
66 * @param Champ $p
67 * Pile au niveau de la balise
68 * @return Champ
69 * Pile complétée par le code à générer
70 */
71 function balise_COMPTEUR_ARTICLES_dist($p) {
72 return rindex_pile($p, 'compteur_articles', 'compteur_articles_filtres');
73 }
74
75
76 /**
77 * Afficher l'initiale pour la navigation par lettres
78 *
79 * @staticvar string $memo
80 * @param <type> $url
81 * @param <type> $initiale
82 * @param <type> $compteur
83 * @param <type> $debut
84 * @param <type> $pas
85 * @return <type>
86 */
87 function afficher_initiale($url, $initiale, $compteur, $debut, $pas) {
88 static $memo = null;
89 static $res = array();
90 $out = '';
91 if (!$memo
92 or (!$initiale and !$url)
93 or ($initiale !== $memo['initiale'])
94 ) {
95 $newcompt = intval(floor(($compteur - 1) / $pas) * $pas);
96 // si fin de la pagination et une seule entree, ne pas l'afficher, ca ne sert a rien
97 if (!$initiale and !$url and !$memo['compteur']) {
98 $memo = null;
99 }
100 if ($memo) {
101 $on = (($memo['compteur'] <= $debut)
102 and (
103 $newcompt > $debut or ($newcompt == $debut and $newcompt == $memo['compteur'])
104 ));
105 $res[] = lien_ou_expose($memo['url'], $memo['initiale'], $on, 'lien_pagination');
106 }
107 if ($initiale) {
108 $memo = array(
109 'entree' => isset($memo['entree']) ? $memo['entree'] + 1 : 0,
110 'initiale' => $initiale,
111 'url' => parametre_url($url, 'i', $initiale),
112 'compteur' => $newcompt
113 );
114 }
115 }
116 if (!$initiale and !$url) {
117 if (count($res) > 1) {
118 $out = implode(' ', $res);
119 }
120 $memo = $res = null;
121 }
122
123 return $out;
124 }
125
126 /**
127 * Calculer l'url vers la messagerie :
128 * - si l'auteur accepte les messages internes et que la messagerie est activee
129 * et qu'il est en ligne, on propose le lien vers la messagerie interne
130 * - sinon on propose un lien vers un email si possible
131 * - sinon rien
132 *
133 * @staticvar string $time
134 * @param int $id_auteur
135 * @param date $en_ligne
136 * @param string $statut
137 * @param string $imessage
138 * @param string $email
139 * @return string
140 */
141 function auteur_lien_messagerie($id_auteur, $en_ligne, $statut, $imessage, $email = '') {
142 static $time = null;
143 if (!in_array($statut, array('0minirezo', '1comite'))) {
144 return '';
145 }
146
147 if (is_null($time)) {
148 $time = time();
149 }
150 $parti = (($time - strtotime($en_ligne)) > 15 * 60);
151
152 if ($imessage != 'non' and !$parti // historique : est-ce que ca a encore un sens de limiter vu qu'on a la notification par email ?
153 and $GLOBALS['meta']['messagerie_agenda'] != 'non'
154 ) {
155 return parametre_url(parametre_url(generer_url_ecrire('message_edit', 'new=oui'), 'to', $id_auteur), 'redirect', self());
156 } elseif (strlen($email) and autoriser('voir', 'auteur', $id_auteur)) {
157 return 'mailto:' . $email;
158 } else {
159 return '';
160 }
161 }