Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 216 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 216 Rev 220
Line 1... Line 1...
1
<?php
1
<?php
2
class NomDAO {
2
class NomDAO {
3
	private $bdd = null;
3
	private $bdd = null;
4
	private $versions = null;
4
	private $versions = null;
-
 
5
	private $requeteNbreNomsTotal = null;
Line 5... Line 6...
5
 
6
 
6
	public function __construct(Ressources $ressources, Parametres $parametres, Bdd $bdd, Versions $versions) {
7
	public function __construct(Ressources $ressources, Parametres $parametres, Bdd $bdd, Versions $versions) {
7
		$this->ressources = $ressources;
8
		$this->ressources = $ressources;
8
		$this->parametres = $parametres;
9
		$this->parametres = $parametres;
Line 25... Line 26...
25
		$nom = new NomDO($resultats);
26
		$nom = new NomDO($resultats);
26
		return $nom;
27
		return $nom;
27
	}
28
	}
Line 28... Line 29...
28
 
29
 
-
 
30
	public function rechercher() {
29
	public function rechercher() {
31
		$clause = $this->getClauseSelectSpeciale();
30
		$table = $this->getTable();
32
		$table = $this->getTable();
31
		$conditions = $this->getConditions();
33
		$conditions = $this->getConditions();
32
		$where = $this->getWhere($conditions);
34
		$where = $this->getWhere($conditions);
Line 33... Line 35...
33
		$navigation = $this->getNavigation();
35
		$navigation = $this->getNavigation();
34
 
36
 
35
		$requete = 'SELECT SQL_CALC_FOUND_ROWS ns.*,  '.
37
		$requete = "SELECT $clause ns.*, ".
36
			'	nr.nom_sci AS nr_nom_sci, nb.nom_sci AS nb_nom_sci '.
38
			'	nr.nom_sci AS nr_nom_sci, nb.nom_sci AS nb_nom_sci '.
37
			"FROM $table AS ns ".
39
			"FROM $table AS ns ".
38
			"	LEFT JOIN $table AS nr ON (ns.num_nom_retenu = nr.num_nom) ".
40
			"	LEFT JOIN $table AS nr ON (ns.num_nom_retenu = nr.num_nom) ".
39
			"	LEFT JOIN $table AS nb ON (ns.basionyme = nb.num_nom) ".
41
			"	LEFT JOIN $table AS nb ON (ns.basionyme = nb.num_nom) ".
40
			$where.$conditions.
42
			$where.' '.$conditions.' '.
41
			'ORDER BY ns.nom_sci ASC '.
-
 
-
 
43
			'ORDER BY ns.nom_sci ASC '.
42
			"LIMIT $navigation ";
44
			"LIMIT $navigation ";
Line 43... Line 45...
43
 
45
		$this->requeteNbreNomsTotal = $this->transformerRequetePourNbreNomsTotal($requete);
44
		$resultats = $this->bdd->recupererTous($requete);
46
		$resultats = $this->bdd->recupererTous($requete);
Line 45... Line 47...
45
 
47
 
-
 
48
		return $resultats;
46
		return $resultats;
49
	}
47
	}
50
 
48
 
51
	public function rechercherFloue() {
49
	public function rechercherFloue() {
52
		$clause = $this->getClauseSelectSpeciale();
-
 
53
		$table = $this->getTable();
50
		$table = $this->getTable();
54
		$masque = $this->parametres->getMasquePourBdd();
51
		$masque = $this->parametres->getMasquePourBdd();
55
		$where = $this->getWhere();
52
		$where = $this->getWhere();
56
		$navigation = $this->getNavigation();
53
		$navigation = $this->getNavigation();
57
 
54
		$requete = 'SELECT SQL_CALC_FOUND_ROWS ns.*,  '.
58
		$requete = "SELECT $clause ns.*, ".
55
			'	nr.nom_sci AS nr_nom_sci, nb.nom_sci AS nb_nom_sci '.
59
			'	nr.nom_sci AS nr_nom_sci, nb.nom_sci AS nb_nom_sci '.
56
			"FROM $table AS ns ".
60
			"FROM $table AS ns ".
57
			"	LEFT JOIN $table AS nr ON (ns.num_nom_retenu = nr.num_nom) ".
61
			"	LEFT JOIN $table AS nr ON (ns.num_nom_retenu = nr.num_nom) ".
58
			"	LEFT JOIN $table AS nb ON (ns.basionyme = nb.num_nom) ".
62
			"	LEFT JOIN $table AS nb ON (ns.basionyme = nb.num_nom) ".
59
			$where .
63
			$where .
60
			($masque ? ($where ? ' AND ' : ' WHERE ').
64
			($masque ? ($where ? ' AND ' : ' WHERE ').
-
 
65
				"	(SOUNDEX(ns.nom_sci) = SOUNDEX($masque)) ".
61
				"	(SOUNDEX(ns.nom_sci) = SOUNDEX($masque)) ".
66
				"	OR (SOUNDEX(REVERSE(ns.nom_sci)) = SOUNDEX(REVERSE($masque))) " : '').
62
				"	OR (SOUNDEX(REVERSE(ns.nom_sci)) = SOUNDEX(REVERSE($masque))) " : '').
67
			'ORDER BY ns.nom_sci ASC '.
63
			'ORDER BY ns.nom_sci ASC '.
68
			"LIMIT $navigation ";
Line -... Line 69...
-
 
69
		$this->requeteNbreNomsTotal = $this->transformerRequetePourNbreNomsTotal($requete);
-
 
70
		$resultats = $this->bdd->recupererTous($requete);
-
 
71
		return $resultats;
-
 
72
	}
-
 
73
 
64
			"LIMIT $navigation ";
74
	private function getClauseSelectSpeciale() {
65
		$resultats = $this->bdd->recupererTous($requete);
75
		$clause = (Config::get('bdd_protocole') == 'mysql') ? 'SQL_CALC_FOUND_ROWS' : '';
66
		return $resultats;
76
		return $clause;
67
	}
77
	}
68
 
78
 
Line 123... Line 133...
123
		$nbre = $this->parametres->get('navigation.limite');
133
		$nbre = $this->parametres->get('navigation.limite');
124
		$navigation = "$debut,$nbre";
134
		$navigation = "$debut,$nbre";
125
		return $navigation;
135
		return $navigation;
126
	}
136
	}
Line -... Line 137...
-
 
137
 
-
 
138
	private function transformerRequetePourNbreNomsTotal($requete) {
-
 
139
		$requete = preg_replace('/SELECT .* FROM/', 'SELECT COUNT(*) AS nbre FROM', $requete);
-
 
140
		$requete = preg_replace('/LIMIT [0-9]+,[0-9]+/', '', $requete);
-
 
141
		return $requete;
-
 
142
	}
127
 
143
 
-
 
144
	public function recupererNombreNomsTotal() {
128
	public function recupererNombreNomsTotal() {
145
		if (Config::get('bdd_protocole') == 'mysql') {
-
 
146
			$requete = 'SELECT FOUND_ROWS() AS nbre';
-
 
147
		} else {
-
 
148
			$requete = $this->requeteNbreNomsTotal;
-
 
149
		}
129
		$requete = 'SELECT FOUND_ROWS() AS nbre';
150
 
130
		$nombre = $this->bdd->recuperer($requete);
151
		$nombre = $this->bdd->recuperer($requete);
131
		return (int) $nombre['nbre'];
152
		return (int) $nombre['nbre'];
132
	}
153
	}
133
}
154
}
134
?>
155
?>