public function executeDownload(sfWebRequest $request) { $this->checkProject($request); $this->checkProfile($request, $this->ei_project); $this->checkEiScenario($request, $this->ei_project); //Suppression des fichiers du repertoire web/download $download_dir = sfContext::getInstance()->getConfiguration()->getRootDir() . '/web/download/'; MyFunction::deleteDownloadFiles($download_dir); //paramètres de creation du scénario $ei_scenario_id = $request->getParameter('ei_scenario_id'); $profile_id = $request->getParameter('profile_id'); $profil_scenario = Doctrine_Core::getTable('EiProfilScenario')->findOneByEiScenarioIdAndProfileId($ei_scenario_id, $profile_id); if ($profil_scenario == null) { $this->error1 = 'error1'; } else { $id_version = $profil_scenario->id_version; //récupération de la version $version = Doctrine_Core::getTable('EiVersion')->findOneBy('id', $id_version); if ($version == null) { $this->error2 = 'error2'; } else { //fichier du scénario $this->ei_scenario_id = $ei_scenario_id; $this->id_version = $id_version; $this->profile_id = $profile_id; if ($ei_scenario_id == null || $id_version == null || $profile_id == null) { $this->error3 = 'error3'; } else { $scenario_file = Doctrine_Core::getTable('EiScenario')->generateXML($ei_scenario_id, $id_version, $profile_id); if ($scenario_file == null) { $this->error4 = 'error4'; //Aucune fonction pour la version et le scénario spécifiés } else { //récupération des fonctions $q = Doctrine_Core::getTable('EiFonction')->getFonctionsByCriteria($id_version, $ei_scenario_id, null, null, null); $ei_fonctions = $q->execute(); //$fonction_file=Doctrine_Core::getTable('EiFonction')->generateXMLForPHP($id_fonction); // creation du dossier tmp à retourner à l'utilisateur //mkdir("./download/tmp", 0777); //creation du scenario $zip = new ZipArchive(); //on crée une nouvelle instance zip $generik_name = $profil_scenario->getEiProfil()->profile_name . '_' . $profil_scenario->getEiScenario()->nom_scenario; if ($profile_id != null) { $this->nom_zip = $ei_scenario_id . '_' . $profile_id . '_' . $generik_name . '_' . date('H:i:s'); } if ($zip->open('./download/' . $this->nom_zip . '.zip', ZipArchive::CREATE) === true) { //création de l archive // Ajout direct. $zip->addEmptyDir($generik_name); $zip->addFromString($generik_name . '/scenario.xml', $scenario_file); //ajout des fonctions foreach ($ei_fonctions as $ei_fonction) { $fonction_file = Doctrine_Core::getTable('EiFonction')->generateXMLForPHP($ei_fonction->id, $profile_id, $request); $zip->addFromString($generik_name . '/' . $ei_fonction->getKalFonction()->nom_fonction . $ei_fonction->id, $fonction_file); } $zip->close(); $this->redirect('http://' . $request->getHost() . '/download/' . $this->nom_zip . '.zip'); } else { echo 'Impossible d\'ouvrir <br/>'; // Traitement des erreurs avec un switch(), par exemple. } } } } } }