Exemplo n.º 1
0
 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.
                     }
                 }
             }
         }
     }
 }