public function InjecterListeObjetsMetiers(MListeObjetsMetiers $mListeObjetsMetiers, $dejaChargee = false) { // Si on est dans le cas d'un changement de page, on vérifie que c'est bien cette liste qui est visée. if (self::$changementPage !== NULL && self::$changementPage !== '') { if (array_key_exists($this->TypeSynchro(), self::$changementPage) && array_key_exists($this->numero, self::$changementPage[$this->TypeSynchro()])) { // Si on change effectivement de page. if ($this->numPageCourante != self::$changementPage[$this->TypeSynchro()][$this->numero] && $this->statique !== true) { $this->numPageCourante = self::$changementPage[$this->TypeSynchro()][$this->numero]; GContexte::ListePageCourante($this->contexte, $this->TypeSynchro(), $this->numero, $this->numPageCourante); GContexte::ListeActive($this->contexte, $this->AncienTypeSynchroPage(), true); } else { $this->chargement = false; } } else { $this->chargement = false; } } else { if (self::$chargementEtage !== NULL && self::$chargementEtage !== '') { $this->chargement = $this->ChargementEtageListeParente(); } else { if (self::$chargementContenu !== NULL && self::$chargementContenu !== '') { $this->chargement = $this->ChargementContenuListeParente(); } } } if ($this->chargement === true) { // Récupération des informations complémentaires sur les champs. // Pour que cela fonctionne, il faut que le nom du champ défini dans InitialisationChamps soit le même que // celui auquel il est lié dans l'objet métier de la liste. $mObjetMetier = $mListeObjetsMetiers->GetObjetMetierReference(); foreach ($this->champs as $nomChamp => &$champ) { $noms = $nomChamp; if (strpos($nomChamp, ',') !== false) { $noms = explode(',', $nomChamp); } $nomPremChamp = $noms; if (is_array($noms)) { $nomPremChamp = $noms[0]; } if ($mObjetMetier->IsChampExiste($nomPremChamp) === true) { $champ[LISTE_CHAMPLISTE_MIN] = $mObjetMetier->GetChampMinFromTableau($noms); $champ[LISTE_CHAMPLISTE_MAX] = $mObjetMetier->GetChampMaxFromTableau($noms); $champ[LISTE_CHAMPLISTE_LONGUEURMIN] = $mObjetMetier->GetChampLongueurMinFromTableau($noms); $champ[LISTE_CHAMPLISTE_LONGUEURMAX] = $mObjetMetier->GetChampLongueurMaxFromTableau($noms); $champ[LISTE_CHAMPLISTE_REGEXP] = $mObjetMetier->GetChampRegExpFromTableau($noms); if ($champ[LISTE_CHAMPLISTE_VALEURPARDEFAUT] === NULL) { $champ[LISTE_CHAMPLISTE_VALEURPARDEFAUT] = $mObjetMetier->GetChampValeurParDefautFromTableau($noms); } $champ[LISTE_CHAMPLISTE_NONNUL] = $mObjetMetier->IsChampNonNulFromTableau($noms); } } // Récupération du nombre total d'éléments. if ($this->nbElementsTotal < 0 && $this->nbElementsParPage >= 1) { $this->nbElementsTotal = $mListeObjetsMetiers->GetNbElementsFromBase(); } // On vérifie que le contenu de la liste n'a pas déjà été chargé par une autre liste de même type. $listeElem = NULL; if (array_key_exists($this->TypeSynchroPage(), self::$listeElemChargee)) { $listeElem = self::$listeElemChargee[$this->TypeSynchroPage()]; $dejaChargee = true; } if ($dejaChargee === false) { // Si le nombre total d'éléments est supérieur au nombre d'éléments qu'on affiche dans une page de la liste. if ($this->nbElementsParPage >= 1 && $this->nbElementsParPage < $this->nbElementsTotal) { // Si la liste est triable, on affiche l'élément de la page d'avant afin qu'on puisse faire changer l'élément de page. if ($this->triable === true && $this->numPageCourante >= 2) { $mListeObjetsMetiers->Charger($this->nbElementsParPage + 1, ($this->numPageCourante - 1) * $this->nbElementsParPage - 1); } else { $mListeObjetsMetiers->Charger($this->nbElementsParPage, ($this->numPageCourante - 1) * $this->nbElementsParPage); } } else { $mListeObjetsMetiers->Charger(); } // On enregistre le contenu de la liste dans une variable globale aux listes, notamment pour éviter // de recharger 2 fois le contenu pour 2 listes identiques. if (self::$listeElemChargee === NULL) { self::$listeElemChargee = array(); } self::$listeElemChargee[$this->TypeSynchroPage()] = $mListeObjetsMetiers->GetListe(); } if ($listeElem === NULL) { $listeElem = $mListeObjetsMetiers->GetListe(); } // Récupération des éléments de la liste métier et injection dans la liste graphique. foreach ($listeElem as $mObjetMetier) { $element = array(); foreach ($this->champs as $nomChamp => &$champ) { $noms = $nomChamp; if (strpos($nomChamp, ',') !== false) { $noms = explode(',', $nomChamp); } if ($mObjetMetier->IsChampExiste($noms) === true) { $champValeur = $mObjetMetier->GetChampSQLFromTableau($noms); $element[LISTE_ELEMENT_OBJET] = $mObjetMetier; if ($champValeur !== NULL) { $element[$nomChamp][LISTE_ELEMENT_VALEURCONSULT] = $champValeur; } else { $element[$nomChamp][LISTE_ELEMENT_VALEURCONSULT] = $this->ChampValeurParDefaut($nomChamp); } } else { $this->SetElemValeurChampSpec($element, $nomChamp); } } $this->elements[] = $element; } } }