Commit 78546af1 authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Version fonctionnelle reste à nettoyer

parent 4d3e4f73
Loading
Loading
Loading
Loading
+19 −0
Changes for module/Information/config/module.config.php: 19 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -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;
@@ -109,6 +112,7 @@ return [
                        'index',
                        'ajouter',
                        'supprimer',
                        'telecharger',
                    ],
                    'privileges' => [
                        InformationPrivileges::INFORMATION_MODIFIER,
@@ -163,6 +167,17 @@ return [
                                    ],
                                ],
                            ],
                            'telecharger' => [
                                'type'          => Segment::class,
                                'may_terminate' => true,
                                'options'       => [
                                    'route'       => '/telecharger/:id',
                                    'defaults'    => [
                                        'controller'    => FichierController::class,
                                        'action' => 'telecharger',
                                    ],
                                ],
                            ],
                        ],
                    ],
                    'afficher' => [
@@ -239,6 +254,7 @@ return [
        ],
        'factories' => [
            InformationService::class => InformationServiceFactory::class,
            InformationFichierService::class => InformationFichierServiceFactory::class,
        ],
    ],

@@ -249,6 +265,9 @@ return [
        ],
    ],
    'form_elements'   => [
        'invokables' => [
            FichierForm::class => FichierForm::class,
        ],
        'factories' => [
            InformationForm::class => InformationFormFactory::class,
        ],
+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
@@ -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
+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
@@ -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
+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
+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