/**
  * ACTION DE MASSE - Copie d'un ou de plusieurs fichiers / dossiers
  */
 public function processCopierContenu()
 {
     $classeurDAO = _ioDAO('classeur|classeur');
     $dossierDAO = _ioDAO('classeur|classeurdossier');
     $fichierDAO = _ioDAO('classeur|classeurfichier');
     if (is_null($ppo->classeur = $classeurDAO->get(_request('classeurId', null))) || is_null($ppo->dossier = $dossierDAO->get(_request('dossierId', null)))) {
         return CopixActionGroup::process('generictools|Messages::getError', array('message' => CopixI18N::get('kernel|kernel.error.errorOccurred'), 'back' => CopixUrl::get('')));
     }
     $nomsContenus = array();
     // Récupération des identifiants de dossier à copier
     $dossierIds = _request('dossiers', array());
     if (!is_null($dossierIds)) {
         // Si copie d'un seul dossier, on vérifie s'il s'agit d'un casier et que l'utilisateur à la permission de le copier
         if (count($dossierIds) == 1) {
             $dossier = $dossierDAO->get($dossierIds[0]);
             // Seul l'enseignant peut copier un casier
             if ($dossier->casier && Kernel::getLevel('MOD_CLASSEUR', $ppo->classeur->id) < PROFILE_CCV_PUBLISH) {
                 return CopixActionGroup::process('generictools|Messages::getError', array('message' => CopixI18N::get('classeur|classeur.error.copyLocker'), 'back' => CopixUrl::get('classeur||voirContenu', array('classeurId' => $ppo->classeur->id))));
             } else {
                 $nomsContenus[] = $dossier->nom;
             }
         } else {
             $ppo->dossierIds = implode($dossierIds, ',');
             foreach ($dossierIds as $dossierId) {
                 $dossier = $dossierDAO->get($dossierId);
                 if (!$dossier->casier) {
                     $nomsContenus[] = $dossier->nom;
                 } else {
                     unset($ppo->dossiers[$dossierId]);
                 }
             }
         }
     }
     // Récupération des identifiants de fichier à déplacer
     $fichierIds = _request('fichiers', array());
     if (!is_null($fichierIds)) {
         if (is_array($fichierIds)) {
             $ppo->fichierIds = implode($fichierIds, ',');
         } else {
             $ppo->fichierIds = $fichierIds;
             $fichierIds = explode($ppo->fichierIds, ',');
         }
         foreach ($fichierIds as $fichierId) {
             $fichier = $fichierDAO->get($fichierId);
             if ($fichier) {
                 $nomsContenus[] = $fichier->fichier;
             }
         }
     }
     if (!empty($nomsContenus)) {
         $ppo->nomsContenus = implode($nomsContenus, ', ');
     } else {
         $ppo->nomsContenus = _request('fichiersSelectionnes', null);
     }
     if (CopixRequest::isMethod('post')) {
         _classInclude('classeur|classeurservice');
         $arFichierIds = !is_null(_request('fichiers', null)) ? explode(',', _request('fichiers')) : array();
         $arDossierIds = !is_null(_request('dossiers', null)) ? explode(',', _request('dossiers')) : array();
         if (!is_null($destination = _request('destination', null))) {
             list($destinationType, $destinationId) = explode('-', $destination);
             if ($destinationType == 'dossier') {
                 $dossierDestination = $dossierDAO->get($destinationId);
             }
         }
         // Traitement des erreurs
         $ppo->erreurs = array();
         if (!isset($destinationType) || !isset($destinationId) || is_null($destinationType) || is_null($destinationId)) {
             $ppo->erreurs[] = CopixI18N::get('classeur|classeur.error.noDestination');
         } elseif ($destinationType == 'dossier' && in_array($destinationId, $arDossierIds)) {
             $ppo->erreurs[] = CopixI18N::get('classeur|classeur.error.destinationUnauthorized');
         }
         if (empty($arFichierIds) && empty($arDossierIds)) {
             $ppo->erreurs[] = CopixI18N::get('classeur|classeur.error.noContentSelected');
         }
         if (!empty($ppo->erreurs)) {
             $modParentInfo = Kernel::getModParentInfo('MOD_CLASSEUR', $ppo->classeur->id);
             $ppo->TITLE_PAGE = $modParentInfo['nom'];
             return _arPPO($ppo, array('template' => 'copier_contenu.tpl'));
         }
         // Copie des dossiers
         if (!empty($arDossierIds)) {
             $dossiers = array();
             foreach ($arDossierIds as $arDossierId) {
                 $dossier = $dossierDAO->get($arDossierId);
                 if ($destinationType == 'dossier' && !classeurService::isDescendantOf($dossierDestination, $dossier) || $destinationType == 'classeur') {
                     // On ne copie que les dossiers pouvant l'être
                     if ($dossier = $dossierDAO->get($arDossierId) && !$dossier->casier) {
                         // En cas de copie, le copieur devient le propriétaire de la copie
                         $dossier->user_type = _currentUser()->getExtra('type');
                         $dossier->user_id = _currentUser()->getExtra('id');
                         classeurService::copyFolder($dossier, $destinationType, $destinationId);
                     }
                 }
             }
         }
         // Copie des fichiers
         if (!empty($arFichierIds)) {
             foreach ($arFichierIds as $arFichierId) {
                 $fichier = $fichierDAO->get($arFichierId);
                 // En cas de copie, le copieur devient le propriétaire de la copie
                 $fichier->user_type = _currentUser()->getExtra('type');
                 $fichier->user_id = _currentUser()->getExtra('id');
                 classeurService::copyFile($fichier, $destinationType, $destinationId);
             }
         }
         // Redirection
         $confirmMessage = CopixI18N::get('classeur|classeur.message.confirmCopy');
         if ($destinationType == 'dossier') {
             classeurService::updateFolderInfos($dossierDestination);
             return _arRedirect(CopixUrl::get('classeur||voirContenu', array('classeurId' => $dossierDestination->classeur_id, 'dossierId' => $destinationId, 'confirmMessage' => $confirmMessage)));
         } else {
             return _arRedirect(CopixUrl::get('classeur||voirContenu', array('classeurId' => $destinationId, 'confirmMessage' => $confirmMessage)));
         }
     }
     $modParentInfo = Kernel::getModParentInfo('MOD_CLASSEUR', $ppo->classeur->id);
     $ppo->TITLE_PAGE = $modParentInfo['nom'];
     return _arPPO($ppo, array('template' => 'copier_contenu.tpl'));
 }