1 | <?php |
---|
2 | /**************************************************************************\ |
---|
3 | * SPIP, Systeme de publication pour l'internet * |
---|
4 | * * |
---|
5 | * Copyright (c) 2001-2007 * |
---|
6 | * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * |
---|
7 | * * |
---|
8 | * Ce script fait partie d'un logiciel libre distribue sous licence GNU/GPL. * |
---|
9 | * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * |
---|
10 | \**************************************************************************/ |
---|
11 | |
---|
12 | /* Batir une liste de navigation |
---|
13 | |
---|
14 | $navig = new NavigationListe(array( |
---|
15 | 'requete_liste' => requete_auteurs($tri, $statut), |
---|
16 | 'callback_liste' => 'complement_auteur', |
---|
17 | 'requete_comptage' => 'SELECT COUNT(*) FROM spip_auteurs', |
---|
18 | 'requete_etapes' => |
---|
19 | 'SELECT DISTINCT UPPER(LEFT(nom,1)) l, COUNT(*) FROM spip_auteurs |
---|
20 | GROUP BY l ORDER BY l', |
---|
21 | 'max_par_page' => 30, |
---|
22 | 'debut' => intval(_request('debut')), |
---|
23 | 'fragment' => intval(_request('fragment')), |
---|
24 | 'contenu_ligne' => 'ligne_auteur' |
---|
25 | )); |
---|
26 | */ |
---|
27 | |
---|
28 | class NavigationListe |
---|
29 | { |
---|
30 | // requete de base de la liste |
---|
31 | var $requete_liste = ''; |
---|
32 | // un callback pour completer la liste |
---|
33 | var $callback_liste = ''; |
---|
34 | // requete pour decompte total |
---|
35 | var $requete_comptage = ''; |
---|
36 | // requete pour etapes comme les initiales |
---|
37 | var $requete_etapes = ''; |
---|
38 | // la taille de la fenetre vue |
---|
39 | var $max_par_page = 30; |
---|
40 | // le positionnement de cette fenetre |
---|
41 | var $debut = 0; |
---|
42 | |
---|
43 | // decompte total |
---|
44 | var $compte = null; |
---|
45 | // etapes |
---|
46 | var $etapes = array(); |
---|
47 | // fenetre de lignes courantes |
---|
48 | var $page = array(); |
---|
49 | |
---|
50 | // l'erreur eventuelle |
---|
51 | var $erreur = ''; |
---|
52 | // la dernier requete |
---|
53 | var $query = ''; |
---|
54 | // son resultat |
---|
55 | var $result = null; |
---|
56 | // le dernier fetch |
---|
57 | var $fetch = array(); |
---|
58 | // var $fragment' => intval(_request('fragment')), |
---|
59 | // var $contenu_ligne' => 'ligne_auteur' |
---|
60 | |
---|
61 | function NavigationListe($tabopt) |
---|
62 | { |
---|
63 | // pour l'instant interface libre |
---|
64 | foreach ($tabopt as $opt => $val) { |
---|
65 | $this->$opt = $val; |
---|
66 | } |
---|
67 | |
---|
68 | // compter la population totale ou mourir |
---|
69 | if ($this->requete_comptage) { |
---|
70 | if ($this->errQuery($this->requete_comptage, 'Compte global impossible', SPIP_NUM)) { |
---|
71 | return; |
---|
72 | } |
---|
73 | $this->compte = intval($this->fetch[0]); |
---|
74 | } |
---|
75 | |
---|
76 | // chercher les etapes ou mourir |
---|
77 | if ($this->errQuery($this->requete_etapes, 'Etapes impossibles')) { |
---|
78 | return; |
---|
79 | } |
---|
80 | // charger le tableau des etapes |
---|
81 | $cumul = 0; |
---|
82 | do { |
---|
83 | $eta = $this->fetch['etape']; |
---|
84 | $this->etapes[$eta]['compte'] = intval($this->fetch['compte']); |
---|
85 | $this->etapes[$eta]['debut'] = $cumul; |
---|
86 | $cumul += $this->etapes[$eta]['compte']; |
---|
87 | } while ($this->fetch = spip_fetch_array($this->result)); |
---|
88 | |
---|
89 | // total des etapes == population totale ? |
---|
90 | if (is_null($this->compte)) { |
---|
91 | $this->compte = $cumul; |
---|
92 | } elseif ($cumul != $this->compte) { |
---|
93 | $this->setErreur('Comptes ???'); |
---|
94 | return; |
---|
95 | } |
---|
96 | |
---|
97 | // demarrer la page ou mourir |
---|
98 | if ($this->errQuery($this->requete_liste, 'Liste impossible')) { |
---|
99 | return; |
---|
100 | } |
---|
101 | // charger la page |
---|
102 | do { |
---|
103 | $this->page[] = $this->fetch; |
---|
104 | } while ($this->fetch = spip_fetch_array($this->result)); |
---|
105 | return; |
---|
106 | } |
---|
107 | |
---|
108 | function setErreur($msg = '') |
---|
109 | { |
---|
110 | $this->erreur = $msg ? $msg : $this->query; |
---|
111 | } |
---|
112 | |
---|
113 | function errQuery($query, $msg = '', $mode = SPIP_ASSOC) |
---|
114 | { |
---|
115 | ((($this->result = spip_query($this->query = $query)) && |
---|
116 | ($this->fetch = spip_fetch_array($this->result, $mode))) || |
---|
117 | ($this->setErreur($msg))); |
---|
118 | return $this->erreur; |
---|
119 | } |
---|
120 | |
---|
121 | function show() |
---|
122 | { |
---|
123 | $res = "<div id='auteurs_nav'><ul>"; |
---|
124 | foreach($this->etapes as $nom=>$val) { |
---|
125 | $res .= "<li><a href='$nom'>$nom (<span>".$val['compte']."</span>)</a></li>"; |
---|
126 | } |
---|
127 | $res .= "</ul></div>"; |
---|
128 | return $res; |
---|
129 | } |
---|
130 | } |
---|