source: spip-zone/_plugins_/_dev_/gestion_auteurs/inc/navigation_liste.php @ 10458

Last change on this file since 10458 was 10458, checked in by renato@…, 14 years ago

retour a deux niveaux

File size: 4.0 KB
Line 
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
28class 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                if(strlen($this->debut_etape)==1)
124                        $res = "<a href='".parametre_url($this->url,'debut_etape','')."'>Racine</a>";
125                else 
126                        $res = "<a href='".parametre_url($this->url,'debut_etape',substr($this->debut_etape,0,-1))."'>".substr($this->debut_etape,0,-1)."</a>";
127                $res .= "<div id='auteurs_nav'><ul>";
128                foreach($this->etapes as $nom=>$val) {
129                        $res .= "<li><a href='".parametre_url($this->url,'debut_etape',$nom)."'>$nom (<span>".$val['compte']."</span>)</a></li>";
130                }
131                $res .= "</ul></div>";
132                return $res;
133        }
134}
Note: See TracBrowser for help on using the repository browser.