Пример #1
0
 /**
  * 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;
     }
 }