[SPIP] +installation version 3.0.10
[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-2012 *
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 if (!defined('_ECRIRE_INC_VERSION')) return;
15
16 /**
17 * Compter les articles publies lies a un auteur, dans une boucle auteurs
18 * pour la vue prive/liste/auteurs.html
19 *
20 * @param <type> $idb
21 * @param <type> $boucles
22 * @param <type> $crit
23 * @param <type> $left
24 */
25 function critere_compteur_articles_filtres_dist($idb, &$boucles, $crit, $left=false){
26 $boucle = &$boucles[$idb];
27
28 $_statut = calculer_liste($crit->param[0], array(), $boucles, $boucle->id_parent);
29
30 $not="";
31 if ($crit->not)
32 $not=", 'NOT'";
33 $boucle->from['LAA'] = 'spip_auteurs_liens';
34 $boucle->from_type['LAA'] = 'left';
35 $boucle->join['LAA'] = array("'auteurs'","'id_auteur'","'id_auteur'","'LAA.objet=\'article\''");
36
37 $boucle->from['articles'] = 'spip_articles';
38 $boucle->from_type['articles'] = 'left';
39 $boucle->join['articles'] = array("'LAA'","'id_article'","'id_objet'","'(articles.statut IS NULL OR '.sql_in('articles.statut',_q($_statut)$not).')'");
40
41 $boucle->select[]= "COUNT(articles.id_article) AS compteur_articles";
42 $boucle->group[] = 'auteurs.id_auteur';
43 }
44 /**
45 * Compter les articles publies lies a un auteur, dans une boucle auteurs
46 * pour la vue prive/liste/auteurs.html
47 *
48 * @param <type> $p
49 * @return <type>
50 */
51 function balise_COMPTEUR_ARTICLES_dist($p) {
52 return rindex_pile($p, 'compteur_articles', 'compteur_articles_filtres');
53 }
54
55
56 /**
57 * Calculer l'initiale d'un nom
58 *
59 * @param <type> $nom
60 * @return <type>
61 */
62 function initiale($nom){
63 return spip_substr(trim(strtoupper($nom)),0,1);
64 }
65
66 /**
67 * Afficher l'initiale pour la navigation par lettres
68 *
69 * @staticvar string $memo
70 * @param <type> $url
71 * @param <type> $initiale
72 * @param <type> $compteur
73 * @param <type> $debut
74 * @param <type> $pas
75 * @return <type>
76 */
77 function afficher_initiale($url,$initiale,$compteur,$debut,$pas){
78 static $memo = null;
79 static $res = array();
80 $out = "";
81 if (!$memo
82 OR (!$initiale AND !$url)
83 OR ($initiale!==$memo['initiale'])
84 ){
85 $newcompt = intval(floor(($compteur-1)/$pas)*$pas);
86 // si fin de la pagination et une seule entree, ne pas l'afficher, ca ne sert a rien
87 if (!$initiale AND !$url AND !$memo['compteur']) $memo=null;
88 if ($memo){
89 $on = (($memo['compteur']<=$debut)
90 AND (
91 $newcompt>$debut OR ($newcompt==$debut AND $newcompt==$memo['compteur'])
92 ));
93 $res[] = lien_ou_expose($memo['url'],$memo['initiale'],$on,'lien_pagination');
94 }
95 if ($initiale)
96 $memo = array('entree'=>isset($memo['entree'])?$memo['entree']+1:0,'initiale'=>$initiale,'url'=>parametre_url($url,'i',$initiale),'compteur'=>$newcompt);
97 }
98 if (!$initiale AND !$url) {
99 if (count($res)>1)
100 $out = implode(' ',$res);
101 $memo=$res=null;
102 }
103 return $out;
104 }
105
106 /**
107 * Calculer l'url vers la messagerie :
108 * - si l'auteur accepte les messages internes et que la messagerie est activee
109 * et qu'il est en ligne, on propose le lien vers la messagerie interne
110 * - sinon on propose un lien vers un email si possible
111 * - sinon rien
112 *
113 * @staticvar string $time
114 * @param int $id_auteur
115 * @param date $en_ligne
116 * @param string $statut
117 * @param string $imessage
118 * @param string $email
119 * @return string
120 */
121 function auteur_lien_messagerie($id_auteur,$en_ligne,$statut,$imessage,$email=''){
122 static $time = null;
123 if (!in_array($statut, array('0minirezo', '1comite')))
124 return '';
125
126 if (is_null($time))
127 $time = time();
128 $parti = (($time-strtotime($en_ligne))>15*60);
129
130 if (
131 $imessage != 'non' AND !$parti // historique : est-ce que ca a encore un sens de limiter vu qu'on a la notification par email ?
132 AND $GLOBALS['meta']['messagerie_agenda'] != 'non')
133 return parametre_url(parametre_url(generer_url_ecrire("message_edit","new=oui"),'to',$id_auteur),'redirect',self());
134
135 elseif (strlen($email) AND autoriser('voir', 'auteur', $id_auteur))
136 return 'mailto:' . $email;
137
138 else
139 return '';
140
141 }
142
143 ?>