/**
  * T�l�chargement d'une pi�ce jointe (download)
  *
  * @author Christophe Beyer <*****@*****.**>
  * @since 2005/10/18
  * @param string $file Nom du fichier � t�l�charger
  * @todo V�rifier les droits par rapport au minimail contenant cette pi�ce jointe
  */
 public function downloadAttachment()
 {
     $minimailService =& CopixClassesFactory::Create('minimail|minimailService');
     $malleService =& CopixClassesFactory::Create('malle|malleService');
     $file = _request("file") ? _request("file") : NULL;
     $fullFile = realpath("../var/data") . "/minimail/" . $file;
     $errors = array();
     if (!$file || !file_exists($fullFile)) {
         $errors[] = CopixI18N::get('minimail.error.noFile');
     }
     if ($errors) {
         $urlReturn = CopixUrl::get('minimail||getListRecv');
         return new CopixActionReturn(COPIX_AR_REDIRECT, $urlReturn);
     }
     $fileDl = $minimailService->getAttachmentName($file);
     return _arFile($fullFile, array('filename' => $fileDl, 'content-type' => $malleService->getMimeType($fileDl)));
 }
 /**
  * FICHIER - Téléchargement d'un fichier
  */
 public function processTelechargerFichier()
 {
     $classeurDAO = _ioDAO('classeur|classeur');
     $fichierDAO = _ioDAO('classeur|classeurfichier');
     $classeur = $classeurDAO->get(_request('classeurId', null));
     $fichier = $fichierDAO->get(_request('fichierId', null));
     if (!$classeur || !$fichier) {
         return CopixActionGroup::process('generictools|Messages::getError', array('message' => CopixI18N::get('kernel|kernel.error.errorOccurred'), 'back' => CopixUrl::get('classeur||')));
     }
     _classInclude('classeur|classeurService');
     $nomClasseur = $classeur->id . '-' . $classeur->cle;
     $extension = strtolower(strrchr($fichier->fichier, '.'));
     $nomFichier = $fichier->id . '-' . $fichier->cle . $extension;
     $pathFichier = realpath('./static/classeur') . '/' . $classeur->id . '-' . $classeur->cle . '/' . $nomFichier;
     if (!file_exists($pathFichier)) {
         return CopixActionGroup::process('generictools|Messages::getError', array('message' => CopixI18N::get('classeur|classeur.error.noFile'), 'back' => CopixUrl::get('classeur||')));
     }
     $this->flash->addCycle();
     return _arFile($pathFichier, array('filename' => $fichier->fichier, 'content-type' => classeurService::getMimeType($pathFichier), 'content-disposition' => 'attachement'));
 }
 /**
  * Telechargement d'un document joint a une fiche
  *
  * @author Christophe Beyer <*****@*****.**>
  * @since 2011/01/31
  * @param string $fichier Nom du fichier
  *
  */
 public function processDoc()
 {
     $iFichier = CopixRequest::get('fichier');
     $malleService =& CopixClassesFactory::Create('malle|malleService');
     preg_match('/^([0-9]+)_(.+)$/', $iFichier, $regs);
     $file = COPIX_VAR_PATH . CopixConfig::get('fichesecoles|docPath') . $iFichier;
     if (@file_exists($file)) {
         $filename = $regs[2];
         return _arFile($file, array('filename' => $filename, 'content-type' => $malleService->getMimeType($file), 'content-disposition' => 'attachement'));
     }
     header("HTTP/1.0 404 Not Found");
     return new CopixActionReturn(COPIX_AR_NONE, 0);
 }
 /**
  * Téléchargement (download) de plusieurs fichiers en un seul fichier ZIP
  *
  * @author Christophe Beyer <*****@*****.**>
  * @since 2006/05/09
  * @param integer $id Id de la malle
  * @param integer $folder Id du dossier
  * @param array $files Liste des fichiers sélectionnés
  * @param array $folders Liste des dossiers sélectionnés
  */
 public function processDoActionDownloadZip()
 {
     $kernelService =& CopixClassesFactory::Create('kernel|kernel');
     $malleService =& CopixClassesFactory::Create('malle|malleService');
     $daoMalles = CopixDAOFactory::create("malle|malle_malles");
     $daoFolders = CopixDAOFactory::create("malle|malle_folders");
     $daoFiles = CopixDAOFactory::create("malle|malle_files");
     $id = $this->getRequest('id', null);
     $folder = $this->getRequest('folder', null);
     $files = $this->getRequest('files', array());
     $folders = $this->getRequest('folders', array());
     $criticErrors = array();
     if ($folder) {
         $rFolder = $daoFolders->get($folder);
         if (!$rFolder) {
             $criticErrors[] = CopixI18N::get('malle|malle.error.noFolder');
         } elseif ($rFolder->malle != $id) {
             $criticErrors[] = CopixI18N::get('malle|malle.error.noFolder');
         }
         $malle_cle = $rFolder->malle_cle;
     } else {
         $rMalle = $daoMalles->get($id);
         if (!$rMalle) {
             $criticErrors[] = CopixI18N::get('malle|malle.error.noMalle');
         }
         $malle_cle = $rMalle->cle;
     }
     if (!count($files) && !count($folders)) {
         $criticErrors[] = CopixI18N::get('malle|malle.error.noSelection');
     }
     if (!$criticErrors) {
         $mondroit = $kernelService->getLevel("MOD_MALLE", $id);
         //print_r($mondroit);
         if (!$malleService->canMakeInMalle("ITEM_DOWNLOAD_ZIP", $mondroit)) {
             $criticErrors[] = CopixI18N::get('kernel|kernel.error.noRights');
         } else {
             //$parent = $kernelService->getModParentInfo( "MOD_MALLE", $id);
         }
     }
     if ($criticErrors) {
         return CopixActionGroup::process('genericTools|Messages::getError', array('message' => implode('<br/>', $criticErrors), 'back' => CopixUrl::get('malle||')));
     }
     $errors = array();
     $zipFile = 'archive' . mt_rand(100000, 9999999) . '.zip';
     if (file_exists($malleService->getTmpFolder() . '/' . $zipFile)) {
         unlink($malleService->getTmpFolder() . '/' . $zipFile);
     }
     $archive = new PclZip($malleService->getTmpFolder() . '/' . $zipFile);
     //print_r($files);
     $zipFiles = array();
     foreach ($files as $k) {
         $r = $daoFiles->get($k);
         if ($r && $r->malle == $id && $r->folder == $folder) {
             //print_r($r);
             $zipFiles[] = $r->id . '_' . $r->fichier;
         }
     }
     $zipFiles2 = array();
     foreach ($folders as $k) {
         $r = $daoFolders->get($k);
         if ($r && $r->malle == $id && $r->parent == $folder) {
             //print_r($r);
             $malleService->getFilesInFolder($id, $k, $zipFiles2);
         }
     }
     //print_r($zipFiles2);
     if ($zipFiles) {
         // Fichiers
         foreach ($zipFiles as $f) {
             //print_r($f);
             $fullFile = realpath('./static/malle') . '/' . $id . '_' . $malle_cle . '/' . $f;
             //print_r($fullFile);
             //$add = $archive->add($fullFile, PCLZIP_OPT_REMOVE_ALL_PATH, PCLZIP_ATT_FILE_NEW_SHORT_NAME, 'toto.txt');
             $add = $archive->add(array(PCLZIP_ATT_FILE_NAME => $fullFile), PCLZIP_OPT_REMOVE_ALL_PATH);
             if ($add == 0) {
                 // ,
                 $errors[] = $archive->errorInfo(true);
             }
         }
     }
     if ($zipFiles2) {
         // Dossiers
         //print_r($zipFiles2);
         //print_r($fullFile);
         foreach ($zipFiles2 as $f) {
             $fullFile = realpath('./static/malle') . '/' . $id . '_' . $malle_cle . '/' . $f['id'] . '_' . $f['fichier'];
             //print_r($fullFile);
             if ($archive->add($fullFile, PCLZIP_OPT_ADD_PATH, $f['folder_path'], PCLZIP_OPT_REMOVE_ALL_PATH) == 0) {
                 // ,
                 $errors[] = $archive->errorInfo(true);
             }
         }
     }
     //print_r($fullFile);
     //var_dump($malleService->getTmpFolder().'/'.$zipFile);
     //die ('a');
     //print_r($archive);
     //$list = $archive->listContent();
     //print_r($list);
     if ($errors) {
         //print_r($errors);
         return CopixActionGroup::process('malle|malle::getMalle', array('id' => $id, 'folder' => $folder, 'errors' => $errors));
     } else {
         return _arFile($malleService->getTmpFolder() . '/' . $zipFile, array('filename' => $zipFile, 'content-type' => $malleService->getMimeType($zipFile)));
     }
 }