Loading module/Information/config/module.config.php +19 −0 Changes for module/Information/config/module.config.php: 19 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -4,10 +4,13 @@ use Application\Entity\Db\Repository\DefaultEntityRepository; use Information\Controller\FichierController; use Information\Controller\InformationController; use Information\Controller\InformationControllerFactory; use Information\Form\FichierForm; use Information\Form\InformationForm; use Information\Form\InformationFormFactory; use Information\Form\InformationHydrator; use Information\Provider\Privilege\InformationPrivileges; use Information\Service\InformationFichierService; use Information\Service\InformationFichierServiceFactory; use Information\Service\InformationService; use Information\Service\InformationServiceFactory; use Zend\Mvc\Router\Http\Literal; Loading Loading @@ -109,6 +112,7 @@ return [ 'index', 'ajouter', 'supprimer', 'telecharger', ], 'privileges' => [ InformationPrivileges::INFORMATION_MODIFIER, Loading Loading @@ -163,6 +167,17 @@ return [ ], ], ], 'telecharger' => [ 'type' => Segment::class, 'may_terminate' => true, 'options' => [ 'route' => '/telecharger/:id', 'defaults' => [ 'controller' => FichierController::class, 'action' => 'telecharger', ], ], ], ], ], 'afficher' => [ Loading Loading @@ -239,6 +254,7 @@ return [ ], 'factories' => [ InformationService::class => InformationServiceFactory::class, InformationFichierService::class => InformationFichierServiceFactory::class, ], ], Loading @@ -249,6 +265,9 @@ return [ ], ], 'form_elements' => [ 'invokables' => [ FichierForm::class => FichierForm::class, ], 'factories' => [ InformationForm::class => InformationFormFactory::class, ], Loading module/Information/src/Information/Controller/FichierController.php +85 −38 Changes for module/Information/src/Information/Controller/FichierController.php: 85 added lines, 38 removed lines. Original line number Diff line number Diff line Loading @@ -3,66 +3,113 @@ namespace Information\Controller; use Application\Entity\Db\Fichier; use Application\Entity\Db\NatureFichier; use Application\Entity\Db\Utilisateur; use Application\Entity\Db\VersionFichier; use Application\Service\Fichier\FichierServiceAwareTrait; use Application\Service\Utilisateur\UtilisateurServiceAwareTrait; use Zend\Form\Element\Hidden; use Zend\Form\Form; use Application\Service\File\FileServiceAwareTrait; use Application\Service\UserContextServiceAwareTrait; use Information\Entity\Db\InformationFichier; use Information\Form\FichierForm; use Information\Service\InformationFichierServiceAwareTrait; use UnicaenApp\Exception\RuntimeException; use Zend\Http\Request; use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; class FichierController extends AbstractActionController { class FichierController extends AbstractActionController { use FichierServiceAwareTrait; use UtilisateurServiceAwareTrait; use InformationFichierServiceAwareTrait; use FileServiceAwareTrait; use UserContextServiceAwareTrait; public function indexAction() { $nature = $this->fichierService->fetchNatureFichier(NatureFichier::CODE_INFORMATION); $fichiers = $this->fichierService->getRepository()->fetchFichiersByNature($nature); $fichiers = $this->getInformationFichierService()->getInformationFichiers(); return new ViewModel([ 'fichiers' => $fichiers, ]); } public function supprimerAction() { /** @var InformationFichier $fichier */ $id = $this->params()->fromRoute('id'); $fichier = $this->getInformationFichierService()->getInformationFichier($id); $this->getInformationFichierService()->delete($fichier); $logoDir = $this->fileService->computeDirectoryPathForInformation(); $filePath = implode("/", [$logoDir,$fichier->getNom()]); $success = unlink($filePath); if (!$success) throw new RuntimeException("Un problème s'est produit lors de l'effacement sur le disque du fichier ".$filePath); $this->redirect()->toRoute('informations/fichiers', [], [], true); } /** ***************************************************************************************************************/ public function ajouterAction() { $nature = $this->fichierService->fetchNatureFichier(NatureFichier::CODE_INFORMATION); $version = $this->fichierService->fetchVersionFichier(VersionFichier::CODE_ORIG); /** @var Form $form */ $form = $this->uploader()->getForm(); $form->setAttribute('id', uniqid('form-')); // $form->setUploadMaxFilesize('50M'); $form->addElement((new Hidden('nature'))->setValue($nature->getCode())); $form->addElement((new Hidden('version'))->setValue($version->getCode())); $form->get('files')->setLabel("")->setAttribute('multiple', false)/*->setAttribute('accept', '.pdf')*/; $fichierStuff = null; $utilisateurs = $this->utilisateurService->getRepository()->findByIndividu($rapporteur->getIndividu()); //TODO Que faire lorsque plusieurs utilisateurs sont remontés pour un même individu. (shib est favorisé) /** @var Utilisateur $utilisateur */ $utilisateur = null; $utilisateursShib = array_filter($utilisateurs, function (Utilisateur $u) { return $u->getPassword() === Utilisateur::PASSWORD_SHIB;}); if (!empty($utilisateursShib)) { $utilisateur = current($utilisateursShib); } else { $utilisateur = current($utilisateurs); /** @var FichierForm $form */ $form = $this->getServiceLocator()->get('FormElementManager')->get(FichierForm::class); $form->setAttribute('action', $this->url()->fromRoute('informations/fichiers/ajouter', [], [], true)); /** @var Request $request */ $request = $this->getRequest(); if ($request->isPost()) { $file = $request->getFiles()->toArray(); if ($file['chemin'] !== null) { $logoDir = $this->fileService->computeDirectoryPathForInformation(); $this->fileService->createWritableDirectory($logoDir); $uploadPath = $file['chemin']['tmp_name']; $truePath = implode("/", [$logoDir, $file['chemin']['name']]); var_dump($uploadPath . " -> ".$truePath); $ok = rename($uploadPath, $truePath); if (! $ok) { throw new RuntimeException("Impossible de renommer le fichier sur le disque."); } $user = $this->userContextService->getIdentityDb(); $fichier = new InformationFichier(); $fichier->setNom($file['chemin']['name']); $fichier->setCreateur($user); $fichier->setDateCreation(new \DateTime()); $this->getInformationFichierService()->create($fichier); } } public function supprimerAction() return new ViewModel([ 'title' => 'Sélection du fichier à déposer', 'form' => $form, ]); } /** TELECHARGEMENT ************************************************************************************************/ /** Action permettant le téléchargement */ public function telechargerAction() { /** @var Fichier $fichier */ /** @var InformationFichier $fichier */ $id = $this->params()->fromRoute('id'); $fichier = $this->fichierService->getRepository()->find($id); $fichier = $this->getInformationFichierService()->getInformationFichier($id); $fichier->historiser(); $this->fichierService->update($fichier); $this->redirect()->toRoute('informations/fichiers', [], [], true); $logoDir = $this->fileService->computeDirectoryPathForInformation(); $filePath = implode("/", [$logoDir,$fichier->getNom()]); $contenuFichier = file_get_contents($filePath); $contentType = 'application/octet-stream'; header('Content-Description: File Transfer'); header('Content-Type: ' . $contentType); header('Content-Disposition: attachment; filename=' . $fichier->getNom()); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . strlen($contenuFichier)); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Expires: 0'); header('Pragma: public'); echo $contenuFichier; exit; } } No newline at end of file module/Information/src/Information/Controller/FichierControllerFactory.php +18 −1 Changes for module/Information/src/Information/Controller/FichierControllerFactory.php: 18 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -3,17 +3,34 @@ namespace Information\Controller; use Application\Service\Fichier\FichierService; use Application\Service\File\FileService; use Application\Service\These\TheseService; use Application\Service\UserContextService; use Application\Service\Utilisateur\UtilisateurService; use Information\Service\InformationFichierService; use Zend\Mvc\Controller\ControllerManager; class FichierControllerFactory { public function __invoke(ControllerManager $manager) { /** @var FichierService $fichierService */ /** * @var FichierService $fichierService * @var UserContextService $userContextService * @var FileService $fileService * @var InformationFichierService $informationFichierService */ $fichierService = $manager->getServiceLocator()->get('FichierService'); $userContextService = $manager->getServiceLocator()->get('UnicaenAuth\Service\UserContext'); $fileService = $manager->getServiceLocator()->get(FileService::class); $informationFichierService = $manager->getServiceLocator()->get(InformationFichierService::class); $controller = new FichierController(); $controller->setFichierService($fichierService); $controller->setUserContextService($userContextService); $controller->setFileService($fileService); $controller->setInformationFichierService($informationFichierService); return $controller; } } No newline at end of file module/Information/src/Information/Entity/Db/InformationFichier.php 0 → 100644 +80 −0 Changes for module/Information/src/Information/Entity/Db/InformationFichier.php: 80 added lines, 0 removed lines. Original line number Diff line number Diff line <?php namespace Information\Entity\Db; use Application\Entity\Db\Utilisateur; use DateTime; class InformationFichier { /** @var integer */ private $id; /** @var string */ private $nom; /** @var Utilisateur */ private $createur; /** @var DateTime */ private $dateCreation; /** * @return int */ public function getId() { return $this->id; } /** * @return string */ public function getNom() { return $this->nom; } /** * @param string $nom * @return InformationFichier */ public function setNom($nom) { $this->nom = $nom; return $this; } /** * @return Utilisateur */ public function getCreateur() { return $this->createur; } /** * @param Utilisateur $createur * @return InformationFichier */ public function setCreateur($createur) { $this->createur = $createur; return $this; } /** * @return DateTime */ public function getDateCreation() { return $this->dateCreation; } /** * @param DateTime $dateCreation * @return InformationFichier */ public function setDateCreation($dateCreation) { $this->dateCreation = $dateCreation; return $this; } } No newline at end of file module/Information/src/Information/Entity/Db/Mapping/Information.Entity.Db.InformationFichier.dcm.xml 0 → 100644 +22 −0 Changes for module/Information/src/Information/Entity/Db/Mapping/Information.Entity.Db.InformationFichier.dcm.xml: 22 added lines, 0 removed lines. Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> <entity name="Information\Entity\Db\InformationFichier" table="INFORMATION_FICHIER"> <id name="id" type="integer" column="ID"> <generator strategy="SEQUENCE"/> </id> <field name="nom" column="NOM" type="string" length="256" nullable="false"/> <field name="dateCreation" type="datetime" column="CREATION" nullable="false"/> <many-to-one field="createur" target-entity="Application\Entity\Db\Utilisateur"> <join-columns> <join-column name="CREATEUR" referenced-column-name="ID"/> </join-columns> </many-to-one> </entity> </doctrine-mapping> Loading
module/Information/config/module.config.php +19 −0 Changes for module/Information/config/module.config.php: 19 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -4,10 +4,13 @@ use Application\Entity\Db\Repository\DefaultEntityRepository; use Information\Controller\FichierController; use Information\Controller\InformationController; use Information\Controller\InformationControllerFactory; use Information\Form\FichierForm; use Information\Form\InformationForm; use Information\Form\InformationFormFactory; use Information\Form\InformationHydrator; use Information\Provider\Privilege\InformationPrivileges; use Information\Service\InformationFichierService; use Information\Service\InformationFichierServiceFactory; use Information\Service\InformationService; use Information\Service\InformationServiceFactory; use Zend\Mvc\Router\Http\Literal; Loading Loading @@ -109,6 +112,7 @@ return [ 'index', 'ajouter', 'supprimer', 'telecharger', ], 'privileges' => [ InformationPrivileges::INFORMATION_MODIFIER, Loading Loading @@ -163,6 +167,17 @@ return [ ], ], ], 'telecharger' => [ 'type' => Segment::class, 'may_terminate' => true, 'options' => [ 'route' => '/telecharger/:id', 'defaults' => [ 'controller' => FichierController::class, 'action' => 'telecharger', ], ], ], ], ], 'afficher' => [ Loading Loading @@ -239,6 +254,7 @@ return [ ], 'factories' => [ InformationService::class => InformationServiceFactory::class, InformationFichierService::class => InformationFichierServiceFactory::class, ], ], Loading @@ -249,6 +265,9 @@ return [ ], ], 'form_elements' => [ 'invokables' => [ FichierForm::class => FichierForm::class, ], 'factories' => [ InformationForm::class => InformationFormFactory::class, ], Loading
module/Information/src/Information/Controller/FichierController.php +85 −38 Changes for module/Information/src/Information/Controller/FichierController.php: 85 added lines, 38 removed lines. Original line number Diff line number Diff line Loading @@ -3,66 +3,113 @@ namespace Information\Controller; use Application\Entity\Db\Fichier; use Application\Entity\Db\NatureFichier; use Application\Entity\Db\Utilisateur; use Application\Entity\Db\VersionFichier; use Application\Service\Fichier\FichierServiceAwareTrait; use Application\Service\Utilisateur\UtilisateurServiceAwareTrait; use Zend\Form\Element\Hidden; use Zend\Form\Form; use Application\Service\File\FileServiceAwareTrait; use Application\Service\UserContextServiceAwareTrait; use Information\Entity\Db\InformationFichier; use Information\Form\FichierForm; use Information\Service\InformationFichierServiceAwareTrait; use UnicaenApp\Exception\RuntimeException; use Zend\Http\Request; use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; class FichierController extends AbstractActionController { class FichierController extends AbstractActionController { use FichierServiceAwareTrait; use UtilisateurServiceAwareTrait; use InformationFichierServiceAwareTrait; use FileServiceAwareTrait; use UserContextServiceAwareTrait; public function indexAction() { $nature = $this->fichierService->fetchNatureFichier(NatureFichier::CODE_INFORMATION); $fichiers = $this->fichierService->getRepository()->fetchFichiersByNature($nature); $fichiers = $this->getInformationFichierService()->getInformationFichiers(); return new ViewModel([ 'fichiers' => $fichiers, ]); } public function supprimerAction() { /** @var InformationFichier $fichier */ $id = $this->params()->fromRoute('id'); $fichier = $this->getInformationFichierService()->getInformationFichier($id); $this->getInformationFichierService()->delete($fichier); $logoDir = $this->fileService->computeDirectoryPathForInformation(); $filePath = implode("/", [$logoDir,$fichier->getNom()]); $success = unlink($filePath); if (!$success) throw new RuntimeException("Un problème s'est produit lors de l'effacement sur le disque du fichier ".$filePath); $this->redirect()->toRoute('informations/fichiers', [], [], true); } /** ***************************************************************************************************************/ public function ajouterAction() { $nature = $this->fichierService->fetchNatureFichier(NatureFichier::CODE_INFORMATION); $version = $this->fichierService->fetchVersionFichier(VersionFichier::CODE_ORIG); /** @var Form $form */ $form = $this->uploader()->getForm(); $form->setAttribute('id', uniqid('form-')); // $form->setUploadMaxFilesize('50M'); $form->addElement((new Hidden('nature'))->setValue($nature->getCode())); $form->addElement((new Hidden('version'))->setValue($version->getCode())); $form->get('files')->setLabel("")->setAttribute('multiple', false)/*->setAttribute('accept', '.pdf')*/; $fichierStuff = null; $utilisateurs = $this->utilisateurService->getRepository()->findByIndividu($rapporteur->getIndividu()); //TODO Que faire lorsque plusieurs utilisateurs sont remontés pour un même individu. (shib est favorisé) /** @var Utilisateur $utilisateur */ $utilisateur = null; $utilisateursShib = array_filter($utilisateurs, function (Utilisateur $u) { return $u->getPassword() === Utilisateur::PASSWORD_SHIB;}); if (!empty($utilisateursShib)) { $utilisateur = current($utilisateursShib); } else { $utilisateur = current($utilisateurs); /** @var FichierForm $form */ $form = $this->getServiceLocator()->get('FormElementManager')->get(FichierForm::class); $form->setAttribute('action', $this->url()->fromRoute('informations/fichiers/ajouter', [], [], true)); /** @var Request $request */ $request = $this->getRequest(); if ($request->isPost()) { $file = $request->getFiles()->toArray(); if ($file['chemin'] !== null) { $logoDir = $this->fileService->computeDirectoryPathForInformation(); $this->fileService->createWritableDirectory($logoDir); $uploadPath = $file['chemin']['tmp_name']; $truePath = implode("/", [$logoDir, $file['chemin']['name']]); var_dump($uploadPath . " -> ".$truePath); $ok = rename($uploadPath, $truePath); if (! $ok) { throw new RuntimeException("Impossible de renommer le fichier sur le disque."); } $user = $this->userContextService->getIdentityDb(); $fichier = new InformationFichier(); $fichier->setNom($file['chemin']['name']); $fichier->setCreateur($user); $fichier->setDateCreation(new \DateTime()); $this->getInformationFichierService()->create($fichier); } } public function supprimerAction() return new ViewModel([ 'title' => 'Sélection du fichier à déposer', 'form' => $form, ]); } /** TELECHARGEMENT ************************************************************************************************/ /** Action permettant le téléchargement */ public function telechargerAction() { /** @var Fichier $fichier */ /** @var InformationFichier $fichier */ $id = $this->params()->fromRoute('id'); $fichier = $this->fichierService->getRepository()->find($id); $fichier = $this->getInformationFichierService()->getInformationFichier($id); $fichier->historiser(); $this->fichierService->update($fichier); $this->redirect()->toRoute('informations/fichiers', [], [], true); $logoDir = $this->fileService->computeDirectoryPathForInformation(); $filePath = implode("/", [$logoDir,$fichier->getNom()]); $contenuFichier = file_get_contents($filePath); $contentType = 'application/octet-stream'; header('Content-Description: File Transfer'); header('Content-Type: ' . $contentType); header('Content-Disposition: attachment; filename=' . $fichier->getNom()); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . strlen($contenuFichier)); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Expires: 0'); header('Pragma: public'); echo $contenuFichier; exit; } } No newline at end of file
module/Information/src/Information/Controller/FichierControllerFactory.php +18 −1 Changes for module/Information/src/Information/Controller/FichierControllerFactory.php: 18 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -3,17 +3,34 @@ namespace Information\Controller; use Application\Service\Fichier\FichierService; use Application\Service\File\FileService; use Application\Service\These\TheseService; use Application\Service\UserContextService; use Application\Service\Utilisateur\UtilisateurService; use Information\Service\InformationFichierService; use Zend\Mvc\Controller\ControllerManager; class FichierControllerFactory { public function __invoke(ControllerManager $manager) { /** @var FichierService $fichierService */ /** * @var FichierService $fichierService * @var UserContextService $userContextService * @var FileService $fileService * @var InformationFichierService $informationFichierService */ $fichierService = $manager->getServiceLocator()->get('FichierService'); $userContextService = $manager->getServiceLocator()->get('UnicaenAuth\Service\UserContext'); $fileService = $manager->getServiceLocator()->get(FileService::class); $informationFichierService = $manager->getServiceLocator()->get(InformationFichierService::class); $controller = new FichierController(); $controller->setFichierService($fichierService); $controller->setUserContextService($userContextService); $controller->setFileService($fileService); $controller->setInformationFichierService($informationFichierService); return $controller; } } No newline at end of file
module/Information/src/Information/Entity/Db/InformationFichier.php 0 → 100644 +80 −0 Changes for module/Information/src/Information/Entity/Db/InformationFichier.php: 80 added lines, 0 removed lines. Original line number Diff line number Diff line <?php namespace Information\Entity\Db; use Application\Entity\Db\Utilisateur; use DateTime; class InformationFichier { /** @var integer */ private $id; /** @var string */ private $nom; /** @var Utilisateur */ private $createur; /** @var DateTime */ private $dateCreation; /** * @return int */ public function getId() { return $this->id; } /** * @return string */ public function getNom() { return $this->nom; } /** * @param string $nom * @return InformationFichier */ public function setNom($nom) { $this->nom = $nom; return $this; } /** * @return Utilisateur */ public function getCreateur() { return $this->createur; } /** * @param Utilisateur $createur * @return InformationFichier */ public function setCreateur($createur) { $this->createur = $createur; return $this; } /** * @return DateTime */ public function getDateCreation() { return $this->dateCreation; } /** * @param DateTime $dateCreation * @return InformationFichier */ public function setDateCreation($dateCreation) { $this->dateCreation = $dateCreation; return $this; } } No newline at end of file
module/Information/src/Information/Entity/Db/Mapping/Information.Entity.Db.InformationFichier.dcm.xml 0 → 100644 +22 −0 Changes for module/Information/src/Information/Entity/Db/Mapping/Information.Entity.Db.InformationFichier.dcm.xml: 22 added lines, 0 removed lines. Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> <entity name="Information\Entity\Db\InformationFichier" table="INFORMATION_FICHIER"> <id name="id" type="integer" column="ID"> <generator strategy="SEQUENCE"/> </id> <field name="nom" column="NOM" type="string" length="256" nullable="false"/> <field name="dateCreation" type="datetime" column="CREATION" nullable="false"/> <many-to-one field="createur" target-entity="Application\Entity\Db\Utilisateur"> <join-columns> <join-column name="CREATEUR" referenced-column-name="ID"/> </join-columns> </many-to-one> </entity> </doctrine-mapping>