public static function GetDifferentielReferentielForSelect($nom, $colId, $colLib, $colDesc = '', $idParDefaut = NULL, $colCat = '', $colCatLib = '') { $nomRef = ''; if (is_array($nom)) { foreach ($nom as $nomCol) { if ($nomRef !== '') { $nomRef .= ','; } $nomRef .= $nomCol; } } else { $nomRef = $nom; } $contexte = self::ContexteCourant(); if (self::$referentiels[REF_TYPE_DONNEES][$contexte][$nomRef][REF_DONNEES_DIFFSELOK] === false) { $changementRef = false; self::$referentiels[REF_TYPE_DONNEES][$contexte][$nomRef][REF_DONNEES_DIFFSELOK] = true; $nouveauRef = self::GetReferentiel($nomRef); $ancienRef = NULL; $anciennesCat = array(); $nouvellesCat = array(); if ($contexte !== REF_CONTEXTE_AUCUN) { $ancienRef = GContexte::Referentiel($contexte, $nomRef, REF_TYPE_DONNEES); } else { $ancienRef = GSession::Referentiel($nomRef, REF_TYPE_DONNEES); } if ($ancienRef === NULL) { $ancienRef = array(); } else { foreach ($ancienRef as &$ancienneValeur) { if ($colCat !== '' && $colCatLib !== '') { $anciennesCat[] = $ancienneValeur[$colCat]; } } foreach ($nouveauRef as &$mObjet) { if ($colCat !== '' && $colCatLib !== '') { $nouvellesCat[$mObjet->GetChampSQLFromTableau($colCat)] = 1; } foreach ($ancienRef as &$ancienneValeur) { if ($ancienneValeur !== NULL && $mObjet !== NULL) { $identique = true; foreach ($ancienneValeur as $nomCol => $valCol) { if ($mObjet->GetChampSQLFromTableau(explode(',', $nomCol)) !== $valCol) { $identique = false; } } if ($identique === true) { if ($idParDefaut != NULL && $mObjet->GetChampSQLFromTableau($colId) == $idParDefaut) { if ($changementRef === false) { GReponse::AjouterElementSelect($nomRef); $changementRef = true; } GReponse::AjouterElementSelectSelection($idParDefaut); } $ancienneValeur = NULL; $mObjet = NULL; break; } } } } } $categorieCree = array(); foreach ($nouveauRef as &$mObjet) { if ($mObjet !== NULL) { if ($changementRef === false) { GReponse::AjouterElementSelect($nomRef); $changementRef = true; } $activer = false; $id = $mObjet->GetChampSQLFromTableau($colId); if ($idParDefaut !== NULL && $id == $idParDefaut) { $activer = true; } $categorie = ''; if ($colCat !== '') { $categorie = $mObjet->GetChampSQLFromTableau($colCat); if ($colCatLib !== '' && !array_key_exists($categorie, $categorieCree)) { GReponse::AjouterElementSelectCreationCategorie($categorie, $mObjet->GetChampSQLFromTableau($colCatLib)); $categorieCree[$categorie] = 1; } } $description = ''; if ($colDesc !== '') { $description = $mObjet->GetChampSQLFromTableau($colDesc); } GReponse::AjouterElementSelectCreation($id, $mObjet->GetChampSQLFromTableau($colLib), $description, $activer, $categorie); } } foreach ($ancienRef as &$ancienneValeur) { if ($ancienneValeur !== NULL) { if ($changementRef === false && $ancienneValeur !== NULL) { GReponse::AjouterElementSelect($nomRef); $changementRef = true; } GReponse::AjouterElementSelectSuppression($ancienneValeur[$colId]); //if ($colCat !== '' && $colCatLib !== '') // $anciennesCat[] = $ancienneValeur[$colCat]; } } foreach ($anciennesCat as $categorie) { if ($changementRef === false) { GReponse::AjouterElementSelect($nomRef); $changementRef = true; } if (!array_key_exists($categorie, $nouvellesCat)) { GReponse::AjouterElementSelectSuppressionCategorie($categorie); } } } }