/** * 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')); }