예제 #1
0
 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);
             }
         }
     }
 }