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; } }