Commit ebc6fa5d authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Script de Parcours en BDD des fichiers déposés pour les stocker sur le disque.

parent 4e8e1f7b
Loading
Loading
Loading
Loading
Loading
+72 −0
Changes for code/contenu-fichier.php: 72 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php
/**
 * @var $this \Zend\View\Renderer\PhpRenderer
 * @var $controller \UnicaenCode\Controller\Controller
 * @var $viewName string
 */

use Application\Entity\Db\ContenuFichier;
use Application\Service\Fichier\FichierService;
use UnicaenApp\Util;

//////////////////////////////////////////////////////////////////////////
//
// Parcours en BDD des fichiers déposés pour les stocker sur le disque.
//
//////////////////////////////////////////////////////////////////////////

/** @var FichierService $fs */
$fs = $controller->getServiceLocator()->get('FichierService');
$rootdir = $fs->getRootDirectoryPath();

$repo = $fs->getEntityManager()->getRepository(ContenuFichier::class);
$qb = $repo->createQueryBuilder('cf')
    ->addSelect('f, nf')
    ->join('cf.fichier', 'f')
    ->join('f.nature', 'nf')
    ->where('1 = pasHistorise(f)');
$result = $qb/*->setMaxResults(50)*/->getQuery()->getArrayResult();

$createdFiles = [];
$existingFiles = [];
$totalSize = 0;


foreach ($result as $cf) {
    /** @var ContenuFichier $cf */
    $dir = $rootdir . '/' . strtolower($cf['fichier']['nature']['code']);

    $filename = $cf['fichier']['nom'];
    $filesize = $cf['fichier']['taille'];
    $filepath = $dir . '/' . $filename;

    if (file_exists($filepath)) {
        $existingFiles[] = $filepath;
        $totalSize += filesize($filepath);
        continue;
    }

    if (! \Application\Util::createWritableFolder($dir, 0770)) {
        throw new RuntimeException("Le répertoire suivant n'a pas pu être créé sur le serveur : " . $dir);
    }

    $content = stream_get_contents($cf['data']);
    file_put_contents($filepath, $content);

    if (! file_exists($filepath)) {
        throw new \UnicaenApp\Exception\RuntimeException("Created file not found : " . $filepath);
    }
    if (($size = filesize($filepath)) !== $filesize) {
        throw new \UnicaenApp\Exception\RuntimeException("Size mismatch ($size !== $filesize) for " . $filepath);
    }

    $createdFiles[] = $filepath;
    $totalSize += filesize($filepath);
}

echo 'Fichiers déjà présents :';
var_dump($existingFiles);
echo 'Fichiers créés :';
var_dump($createdFiles);
echo 'Taille totale :';
var_dump($totalSize . ' (' . $totalSize/1024/1024 . 'Go)');
 No newline at end of file
+1 −1
Changes for config/application.config.php: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@ $modules = [

if ('development' === (getenv('APPLICATION_ENV') ?: 'production')) {
    $modules = array_merge($modules, [
//        'ZendDeveloperTools',
        'ZendDeveloperTools',
        'UnicaenCode',
        'UnicaenTest',
    ]);
+76 −0
Changes for module/Application/src/Application/Entity/Db/ContenuFichier.php: 76 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application\Entity\Db;

/**
 * ContenuFichier
 */
class ContenuFichier
{
    /**
     * @var string
     */
    private $id;

    /**
     * @var string
     */
    private $data;

    /**
     * @var Fichier
     */
    private $fichier;

    /**
     * Set nom
     *
     * @param string $data
     * @return self
     */
    public function setData($data)
    {
        $this->data = $data;

        return $this;
    }

    /**
     * Get nom
     *
     * @return string 
     */
    public function getData()
    {
        return $this->data;
    }

    /**
     * Get id
     *
     * @return string
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @return Fichier
     */
    public function getFichier()
    {
        return $this->fichier;
    }

    /**
     * @param Fichier $fichier
     * @return self
     */
    public function setFichier(Fichier $fichier)
    {
        $this->fichier = $fichier;

        return $this;
    }
}
+18 −0
Changes for module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.ContenuFichier.dcm.xml: 18 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="Application\Entity\Db\ContenuFichier" table="CONTENU_FICHIER">

    <id name="id" type="integer" column="ID">
      <generator strategy="SEQUENCE"/>
    </id>

    <field name="data" type="blob" column="DATA"/>

    <many-to-one field="fichier" target-entity="Application\Entity\Db\Fichier" fetch="LAZY">
      <join-columns>
        <join-column name="FICHIER_ID" referenced-column-name="ID"/>
      </join-columns>
    </many-to-one>

  </entity>
</doctrine-mapping>
+9 −1
Changes for module/Application/src/Application/Service/Fichier/FichierService.php: 9 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -43,6 +43,14 @@ class FichierService extends BaseService
        $this->rootDirectoryPath = $rootDirectoryPath;
    }

    /**
     * @return string
     */
    public function getRootDirectoryPath()
    {
        return $this->rootDirectoryPath;
    }

    /**
     * @return FichierRepository
     */
@@ -129,7 +137,7 @@ class FichierService extends BaseService
     */
    private function computeDestinationFilePathForFichier(Fichier $fichier)
    {
        return $this->rootDirectoryPath . '/' . strtolower($fichier->getNature()->getCode()) . '/' . $fichier->getNom();
        return $this->computeDestinationDirectoryPathForFichier($fichier) . '/' . $fichier->getNom();
    }

    /**