/** * Initialise une liste de données à récupérer pour une table donnée * @param STRING $table Le nom de la table * @param STRING $want Une liste de colonnes à retourner (default '*' (tout)) * @param STRING $tri La colonne à utiliser pour le tri (default 'id') * @param STRING $ordre La direction du tri (default 'ASC') * @param STRING $filtre_key La colonne à utiliser pour filtrer les résultats (default FALSE (pas de filtre)) * @param STRING $filtre_comp La comparaison à effectuer pour le filtrage (default '=') * @param STRING $filtre La valeur à utiliser pour filtrer les résultats (default null) * @param INT $limit Nombre maximum de données à retourner (default FALSE (pas de limite) * @param BOOLEAN $withFK TRUE pour récupérer les données JOINTES (cf config->table relations) (default TRUE) * @param BOOLEAN $decodeJson TRUE pour décoder les champs contenant du JSON automatiquement. FALSE pour avoir les champs JSON au format STRING (default TRUE) * @param BOOLEAN $parseDatesJS TRUE pour formater les dates au format ISO 8601 pour javascript (default TRUE) * @return ARRAY Le tableau des résultats, ou FALSE si aucune donnée */ public function getListe($table, $want = '*', $tri = 'id', $ordre = 'ASC', $filtre_key = false, $filtre_comp = '=', $filtre = null, $limit = false, $withFK = true, $decodeJson = true, $parseDatesJS = true) { global $DATE_FIELDS; $this->listResult = array(); $this->table = $table; $this->what = $want; $this->tri = $tri; $this->ordre = $ordre; // Check si table existe if (!$this->check_table_exist($table)) { throw new Exception("Liste::getListe() : La table '{$table}' n'existe pas"); } // pour chaque filtre défini par Liste::addFiltre() if (is_array($this->filtres) && count($this->filtres) > 0) { $FM = ''; foreach ($this->filtres as $f) { $FM .= $f; } $filtrage_multiple = trim($FM, " {$this->lastLogiquefiltre} "); } if ($filtre_key && (string) $filtre != null) { if (Liste::check_col_exist($filtre_key)) { $this->isFiltred = true; $this->filtre_key = $filtre_key; $this->filtre = addslashes($filtre); } else { return false; } } if ($this->isFiltred) { $this->request = "SELECT {$this->what} FROM `{$this->table}` WHERE `{$this->filtre_key}` {$filtre_comp} '{$this->filtre}' ORDER BY `{$tri}` {$ordre}"; } elseif (isset($filtrage_multiple)) { $this->request = "SELECT {$this->what} FROM `{$this->table}` WHERE {$filtrage_multiple} ORDER BY `{$tri}` {$ordre}"; } elseif (isset($this->filtreSQL)) { $this->request = "SELECT {$this->what} FROM `{$this->table}` WHERE {$this->filtreSQL} ORDER BY `{$tri}` {$ordre}"; } else { $this->request = "SELECT {$this->what} FROM `{$this->table}` ORDER BY `{$this->tri}` {$this->ordre}"; } if (is_int($limit)) { $this->request .= " LIMIT {$limit}"; } $q = $this->bddCx->prepare($this->request); $q->execute(); if ($q->rowCount() >= 1) { // Formatage des résultats de la requête $result = $q->fetchAll(PDO::FETCH_ASSOC); $retour = array(); $i = 0; foreach ($result as $resultOK) { unset($resultOK['password']); foreach ($resultOK as $k => $v) { // Décodage JSON le cas échéant if ($decodeJson && is_string($v) && preg_match('/((^\\[)*(]$))|((^\\{")*(}$))/', $v)) { $valArr = json_decode($v, true); if (!is_array($valArr)) { continue; } $resultOK[$k] = $valArr; } // Remplacement par la Foreign Key le cas échéant if ($withFK && preg_match("/^" . FOREIGNKEYS_PREFIX . "/", $k)) { $fk = $this->getForeignKey($k, $v, $decodeJson, $parseDatesJS); if (!is_array($fk)) { continue; } $resultOK[$fk[0]] = $fk[1]; } if (is_array(@$DATE_FIELDS) && $parseDatesJS) { if (in_array($k, $DATE_FIELDS)) { $resultOK[$k] = date("c", strtotime($v)); } // Formatage de la date au format ISO 8601 (pour que JS puisse la parser) } } if (count($resultOK) == 1) { // Si une seule valeur demandée, pas besoin d'une dimension en plus $retour[$i] = reset($resultOK); } else { $retour[$i] = $resultOK; } $i++; } $this->listResult = $retour; return $retour; } else { return false; } }