/** * ACTION DE MASSE - Téléchargement d'un ou de plusieurs fichiers / dossiers (Archive ZIP) */ public function processTelechargerContenu() { if (is_null($ppo->classeurId = _request('classeurId')) || is_null($ppo->dossierId = _request('dossierId'))) { return CopixActionGroup::process('generictools|Messages::getError', array('message' => CopixI18N::get('kernel|kernel.error.errorOccurred'), 'back' => CopixUrl::get(''))); } _classInclude('classeur|classeurservice'); $fichierDAO = _ioDAO('classeur|classeurfichier'); $dossierDAO = _ioDAO('classeur|classeurdossier'); // Récupération des paramètres $dossierIds = _request('dossiers', array()); $fichierIds = _request('fichiers', array()); $classeurDAO = _ioDAO('classeur|classeur'); $classeur = $classeurDAO->get($ppo->classeurId); $cptFavori = 0; if (empty($dossierIds) && count($fichierIds) == 1) { // Récupération du fichier $fichier = $fichierDAO->get($fichierIds[0]); if ($fichier->estUnFavori()) { return _arRedirect(CopixUrl::get('classeur||voirContenu', array('classeurId' => $fichier->classeur_id, 'dossierId' => $fichier->dossier_id, 'errorMessage' => CopixI18N::get('classeur|classeur.error.downloadFavorite')))); } // Path du fichier $dir = realpath('./static/classeur') . '/' . $classeur->id . '-' . $classeur->cle . '/'; $extension = strtolower(strrchr($fichier->fichier, '.')); $pathfile = $dir . $fichier->id . '-' . $fichier->cle . $extension; return _arFile($pathfile, array('filename' => $fichier->fichier, 'content-type' => classeurService::getMimeType($fichier->fichier), 'content-disposition' => 'attachment')); } // Path de l'archive ZIP temporaire $dossierTmp = classeurService::getTmpFolder(); if ($ppo->dossierId != 0) { $dossier = $dossierDAO->get($ppo->dossierId); $fichierZip = str_replace('/', '-', $dossier->nom) . '.zip'; } else { $fichierZip = str_replace('/', '-', $classeur->titre) . '.zip'; } if (file_exists($dossierTmp . $fichierZip)) { unlink($dossierTmp . $fichierZip); } $zip = new ZipArchive(); if ($zip->open($dossierTmp . $fichierZip, ZIPARCHIVE::CREATE) === true) { if (!empty($dossierIds)) { $ppo->dossierIds = implode($dossierIds, ','); if (count($ppo->dossierIds) == 1) { $dossier = $dossierDAO->get($dossierIds[0]); // Seul l'enseignant peut télécharger un casier if ($dossier->casier && Kernel::getLevel('MOD_CLASSEUR', $ppo->classeurId) < PROFILE_CCV_PUBLISH) { return CopixActionGroup::process('generictools|Messages::getError', array('message' => CopixI18N::get('classeur|classeur.error.downloadLocker'), 'back' => CopixUrl::get('classeur||voirContenu', array('classeurId' => $ppo->classeurId)))); } else { classeurService::addFolderToZip($dossier, $zip); } } else { foreach ($dossierIds as $dossierId) { $dossier = $dossierDAO->get($dossierId); if (!$dossier->casier || $dossier->casier && Kernel::getLevel('MOD_CLASSEUR', $ppo->classeurId) >= PROFILE_CCV_PUBLISH) { classeurService::addFolderToZip($dossier, $zip); } } } } $ppo->fichierIds = implode($fichierIds, ','); foreach ($fichierIds as $fichierId) { $fichier = $fichierDAO->get($fichierId); if (!$fichier->estUnFavori()) { classeurService::addFileToZip($fichier, $zip); } else { $cptFavori++; } } } $zip->close(); if ($cptFavori != 0 && $cptFavori == count($fichierIds)) { return _arRedirect(CopixUrl::get('classeur||voirContenu', array('classeurId' => $fichier->classeur_id, 'dossierId' => $fichier->dossier_id, 'errorMessage' => CopixI18N::get('classeur|classeur.error.downloadFavorite')))); } return _arFile($dossierTmp . $fichierZip, array('filename' => $fichierZip, 'content-type' => classeurService::getMimeType($fichierZip), 'content-disposition' => 'attachment')); }