コード例 #1
0
 public function reload($projets, $project_id, $project_ref, Doctrine_Connection $conn = null)
 {
     if ($conn == null) {
         $conn = Doctrine_Manager::connection();
     }
     //Création de la collection d'objet EiProfil à ajouter
     $collection = new Doctrine_Collection("EiProfil");
     $items = $projets->getElementsByTagName("ei_profiles");
     if ($items->length > 0) {
         //ya t-il des éléments à traiter?
         $ei_profiles = $items->item(0)->getElementsByTagName("ei_profile");
         if ($ei_profiles != null) {
             foreach ($ei_profiles as $key => $ei_profile) {
                 $profile_id = $ei_profile->getAttribute("profile_id");
                 $profile_ref = $ei_profile->getAttribute("profile_ref");
                 //recherche du profil en base
                 if ($profile_id != null && $profile_ref) {
                     //l'élément n'existe pas encore, et dans ce cas on le crée
                     $new_ei_profile = new EiProfil();
                     $new_ei_profile->setProfileId($profile_id);
                     $new_ei_profile->setProfileRef($profile_ref);
                     $new_ei_profile->setProjectId($project_id);
                     $new_ei_profile->setProjectRef($project_ref);
                     $new_ei_profile->setName($ei_profile->getElementsByTagName("name")->item(0)->nodeValue);
                     $new_ei_profile->setBaseUrl($ei_profile->getElementsByTagName("base_url")->item(0)->nodeValue);
                     $new_ei_profile->setDescription($ei_profile->getElementsByTagName("description")->item(0)->nodeValue);
                     $new_ei_profile->setParentId($ei_profile->getElementsByTagName("parent_id")->item(0)->nodeValue);
                     $new_ei_profile->setParentRef($ei_profile->getElementsByTagName("parent_ref")->item(0)->nodeValue);
                     $new_ei_profile->setIsDefault($ei_profile->getElementsByTagName("is_default")->item(0)->nodeValue);
                     $new_ei_profile->setCreatedAt($ei_profile->getElementsByTagName("created_at")->item(0)->nodeValue);
                     $new_ei_profile->setUpdatedAt($ei_profile->getElementsByTagName("updated_at")->item(0)->nodeValue);
                     $collection->add($new_ei_profile, $key);
                 }
             }
             /*Traitement de la collection de profil . 
              * La gestion des rechargements de profil est spéciale car on doit prendre en compte
              * les associations scenario-profil pour les profils dupliqués sur la plate forme 
              * centrale.On éffectue pour célà un parcours afin d'analyser les profils récupérés 
              */
             while ($collection->getFirst()) {
                 //Tant qu'il existe des profiles dans la collection
                 foreach ($collection as $key => $profile) {
                     if (!$this->findIfProfileExists($profile, $conn)) {
                         //Si le profile n'existe pas en base
                         if ($profile->getParentId() != null && $profile->getParentRef() != null) {
                             //Si le profile possède un parent
                             //On recherche le parent du profile
                             $profileParent = $conn->getTable('EiProfil')->findOneByProfileIdAndProfileRef($profile->getParentId(), $profile->getParentRef());
                             //Si le parent existe déjà côté compose (client)
                             if ($profileParent != null) {
                                 //On crée les relations scénario-profil pour le profile enfant
                                 $this->createRelationForProfileChild($profileParent, $profile, $conn);
                                 $profile->save($conn);
                                 //On sauvegarde le profil
                                 $collection->remove($key);
                                 //On  supprime le profil de la collection
                             }
                         } else {
                             // si le profil ne possède pas de parent (premier chargement du projet), on le crée
                             $profile->save($conn);
                             $collection->remove($key);
                             //On  supprime le profil de la collection
                         }
                     } else {
                         //Si le profile existe , on le met à jour
                         $this->updateExistProfile($profile, $conn);
                         $collection->remove($key);
                         //On  supprime le profil de la collection
                     }
                 }
             }
             // if($collection->getFirst()) $collection->save($conn); //Sauvegarde de la collection
             return 1;
         }
         return null;
     }
 }