public function ChargerFonctions($xmlfile, Doctrine_Connection $conn = null) { /* Tous les objets vont etre recharger sur le projet courant. * Du coup on récupère l'id et le ref du projet */ $project_id = $this->getProjectId(); $project_ref = $this->getRefId(); if ($conn == null) { $conn = Doctrine_Manager::connection(); } $dom = new DomDocument(); if ($xmlfile != null) { $dom->loadXML($xmlfile); $dom->save('projet.xml'); /* A utiliser en cas de deboguage pour visualiser le contenu du fichier */ //recherche de l'element racine <projets> if ($dom->documentElement) { $projets = $dom->documentElement; //rechargement des données du projet //si le projet a été trouvé if ($projets->getElementsByTagName("info")->item(0)) { MyFunction::rechargerProjet($projets->getElementsByTagName("info")->item(0), true, $conn); //Création des tables temporaires pour opérations d'insert - delete //Table temporaire des fonctions Doctrine_Core::getTable('ScriptEiFunction')->insertTmpData($projets, $project_id, $project_ref, $conn); //Table temporaire des dossiers de fonctions (EiView) Doctrine_Core::getTable('ScriptEiView')->insertTmpData($projets, $project_id, $project_ref, $conn); //Table temporaire des scripts Doctrine_Core::getTable('ScriptEiScript')->insertTmpData($projets, $project_id, $project_ref, $conn); //Table temporaire des relations script-profil Doctrine_Core::getTable('ScriptEiScriptVersion')->insertTmpData($projets, $project_id, $project_ref, $conn); //Table temporaire des notices Doctrine_Core::getTable('ScriptEiNotice')->insertTmpData($projets, $project_id, $project_ref, $conn); //Table temporaire des profils de notice Doctrine_Core::getTable('ScriptEiNoticeProfil')->insertTmpData($projets, $project_id, $project_ref, $conn); //Table temporaire des versions de notice Doctrine_Core::getTable('ScriptEiVersionNotice')->insertTmpData($projets, $project_id, $project_ref, $conn); //Rechargement des relations version_notice-profil du projet Doctrine_Core::getTable('EiNoticeProfil')->reload($projets, $project_id, $project_ref, $conn); //Rechargement des versions de notice d'un projet Doctrine_Core::getTable('EiVersionNotice')->reload($projets, $project_id, $project_ref, $conn); //Rechargement des notice d'un projet //$this->getNotices()->delete($conn); Doctrine_Core::getTable('EiNotice')->reload($projets, $project_id, $project_ref, $conn); //Rechargement des liaisons utilisateurs-tickets $this->getUserTickets()->delete($conn); //Doctrine_Core::getTable('EiUserTicket')->deleteUserTicketForProject($project_id, $project_ref , $conn); Doctrine_Core::getTable('EiUserTicket')->reload($projets, $project_id, $project_ref, $conn); //Rechargement des paramètres de profil //$this->getProjectProfileParams()->delete($conn); Doctrine_Core::getTable('EiProfileParam')->deleteProjectProfileParams($project_id, $project_ref, $conn); Doctrine_Core::getTable('EiProfileParam')->reload($projets, $project_id, $project_ref, $conn); //Rechargement des paramètres d'une fonction Doctrine_Core::getTable('EiFunctionHasParam')->reload($projets, $project_id, $project_ref, $conn); //Rechargement des liaisons script-profil des fonctions d'un projet Doctrine_Core::getTable('EiScriptVersion')->reload($projets, $project_id, $project_ref, $conn); //Rechargement des scripts de fonction Doctrine_Core::getTable('EiScript')->reload($projets, $project_id, $project_ref, $conn); //Rechargement des fonctions (KalFunction pour ne pas créer d'ambiguité avec EiFonction) Doctrine_Core::getTable('KalFunction')->reload($projets, $project_id, $project_ref, $conn); //Rechargement des commandes de fonction d'un projet Doctrine_Core::getTable('EiFunctionHasCommande')->reload($projets, $project_id, $project_ref, $conn); //Rechargement des vues du projet //Doctrine_Core::getTable('EiView')->deleteProjectViews($project_id, $project_ref , $conn); Doctrine_Core::getTable('EiView')->reload($projets, $project_id, $project_ref, $conn); //Rechargement des profils //Doctrine_Core::getTable('EiProfil')->deleteProjectProfiles($project_id, $project_ref , $conn ); Doctrine_Core::getTable('EiProfil')->reload($projets, $project_id, $project_ref, $conn); //Rechargement des tickets Doctrine_Core::getTable('EiTicket')->deleteProjectTickets($project_id, $project_ref, $conn); Doctrine_Core::getTable('EiTicket')->reload($projets, $project_id, $project_ref, $conn); //récupération des noeuds ouverts pour les garder ouverts. $nodes = $this->getAllProjectNodes(); $openNodes = array(); foreach ($nodes as $i => $n) { $opened = $n->getEiTreeOpenedByUsers(); if ($opened->count() > 0) { $openNodes[$n->getId()] = $opened; } } //Doctrine_Core::getTable('EiTree')->deleteProjectNodes($project_id, $project_ref ,$conn); //Rechargement de l'arbre Doctrine_Core::getTable('EiTree')->reload($projets, $project_id, $project_ref, $conn, $openNodes); //Rechargement des langues du projet Doctrine_Core::getTable('EiProjectLang')->deleteProjectLangs($project_id, $project_ref, $conn); Doctrine_Core::getTable('EiProjectLang')->reload($projets, $project_id, $project_ref, $conn); //Rechargement des paramètres globaux du projet Doctrine_Core::getTable('EiProjectParam')->deleteProjectParams($project_id, $project_ref, $conn); Doctrine_Core::getTable('EiProjectParam')->reload($projets, $project_id, $project_ref, $conn); //Suppression des fonctions inactives Doctrine_Core::getTable('KalFunction')->deleteInactiveFunctions($this, $conn); //Création des status par défaut du projet $this->createDefaultStates($conn); } } else { $d = date('Y-m-d H:i:s'); $this->setObsolete(true); $this->setCheckedAt($d); $this->save(); } } return null; }