Commit 8aac1eb1 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

wip

parent be197528
Loading
Loading
Loading
Loading
+7 −3
Changes for doc/release-notes/v14/14.0.0/01_these_cotutelle.sql: 7 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -58,7 +58,7 @@ create table these_cotutelle
    date_fin                               date                                                         not null,
    date_signature                         date,
    etat_administratif                     these_cotutelle_etat_enum                                    not null,
    --soutenance_dans_etablissement_etranger bool default false not null,
    soutenance_dans_etablissement_etranger bool      default false                                      not null,
    commentaire                            text,

    histo_createur_id                      bigint                                                       not null
@@ -165,7 +165,6 @@ create table these_cotutelle_avenant_fichier
);
*/


create table these_cotutelle_presence
(
    id                         bigserial
@@ -183,7 +182,7 @@ create table these_cotutelle_presence
    date_debut                 date                                                         not null,
    date_fin                   date                                                         not null,

    justif_presence_fichier_id bigint                                                       not null
    justif_presence_fichier_id bigint
        constraint these_cotutelle_presence_justif_presence_fichier_fk
            references fichier,

@@ -212,6 +211,11 @@ select 90, 'autre', 'Autres (à préciser dans les commentaires, svp)'
;


INSERT INTO NATURE_FICHIER (ID, code, libelle)
VALUES (nextval('nature_fichier_id_seq'),'COTUTELLE_JUSTIFICATIF_PRESENCE', 'Justificatif de présence dans le cadre d''une cotutelle');



insert into unicaen_privilege_categorie(id, code, libelle)
select nextval('categorie_privilege_id_seq'), 'these-cotutelle', 'Cotutelle de thèse';

+8 −0
Changes for module/Application/src/Application/Utils/FormUtils.php: 8 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -8,6 +8,14 @@ use Laminas\Form\Form;

class FormUtils
{
    /**
     * Génère un span rprésentant une asterisk (indiquant un champ de formulaire obligatoire).)
     */
    public static function generateAsteriskSpan(): string
    {
        return " <span class='icon icon-obligatoire' style='color: darkred;font-size: 0.8em;' data-bs-toggle='tooltip' title='Obligatoire'></span>";
    }

    /**
     * Méthode statique pour ajouter un bouton "Enregistrer" à un formulaire.
     */
+19 −18
Changes for module/Application/src/Application/View/Renderer/PhpRenderer.php: 19 added lines, 18 removed lines.
Original line number Diff line number Diff line
@@ -2,15 +2,19 @@

namespace Application\View\Renderer;

use Application\View\Helper\Actualite\ActualiteViewHelper;
use Application\View\Helper\EscapeTextHelper;
use Application\View\Helper\Etat\EtatViewHelper;
use Depot\View\Helper\Url\UrlDepotHelper;
use Application\View\Helper\FinancementFormatterHelper;
use Depot\Entity\Db\VWorkflow;
use Depot\View\Helper\Workflow\RoadmapHelper;
use Depot\View\Helper\Workflow\WorkflowHelper;
use Depot\View\Helper\Workflow\WorkflowStepHelper;
use DiplomationThese\Entity\Db\DiplomationTheseEtat;
use Doctorant\Entity\Db\MissionEnseignement;
use Doctorant\View\Helper\MissionEnseignementViewHelper;
use Feature\View\Helper\FeatureViewHelper;
use Fichier\Entity\Db\Fichier;
use Fichier\View\Helper\Fichier\FichierViewHelper;
use RNCP\Entity\Db\SousCompetence;
use RNCP\View\Helper\SousCompetenceViewHelper;
use Horodatage\Entity\Db\Horodatage;
use Horodatage\Entity\Interfaces\HasHorodatagesInterface;
use Horodatage\View\Helper\DernierHorodatageViewHelper;
@@ -19,30 +23,24 @@ use Horodatage\View\Helper\HorodatagesParTypesViewHelper;
use Horodatage\View\Helper\HorodatagesParTypeViewHelper;
use Horodatage\View\Helper\HorodatageViewHelper;
use Laminas\Form\ElementInterface;
use RNCP\Entity\Db\SousCompetence;
use RNCP\View\Helper\SousCompetenceViewHelper;
use Structure\Entity\Db\EcoleDoctorale;
use Structure\Entity\Db\Etablissement;
use Structure\Entity\Db\Structure;
use Structure\Entity\Db\UniteRecherche;
use Structure\View\Helper\EcoleDoctoraleHelper;
use Structure\View\Helper\EtablissementHelper;
use Structure\View\Helper\StructureViewHelper;
use Structure\View\Helper\UniteRechercheHelper;
use These\Entity\Db\These;
use UnicaenApp\Form\Element\Select2;
use UnicaenEvenement\Entity\Db\Etat;
use UnicaenApp\Form\Fieldset\MultipageFormNavFieldset;
use Validation\Entity\Db\ValidationThese;
use Depot\Entity\Db\VWorkflow;
use Application\View\Helper\Actualite\ActualiteViewHelper;
use Application\View\Helper\EscapeTextHelper;
use Application\View\Helper\FinancementFormatterHelper;
use Depot\View\Helper\Workflow\RoadmapHelper;
use Depot\View\Helper\Workflow\WorkflowHelper;
use Depot\View\Helper\Workflow\WorkflowStepHelper;
use DiplomationThese\Entity\Db\DiplomationTheseEtat;
use Structure\View\Helper\EcoleDoctoraleHelper;
use Structure\View\Helper\EtablissementHelper;
use Structure\View\Helper\UniteRechercheHelper;
use UnicaenApp\Message\View\Helper\MessageHelper;
use UnicaenApp\View\Helper\AppInfos;
use UnicaenEvenement\Entity\Db\Etat;
use UnicaenIdref\View\Helper\IdrefLinkViewHelper;
use Validation\Entity\Db\ValidationThese;
use Validation\View\Helper\ValidationTheseViewHelper;

/**
@@ -187,7 +185,10 @@ use Validation\View\Helper\ValidationTheseViewHelper;
 * @method \DiplomationThese\View\Helper\EtatViewHelper diplomationTheseEtat(?DiplomationTheseEtat $etat = null)
 *
 * @method ActualiteViewHelper actualite()
 * @method FichierViewHelper fichier(Fichier $object)
 *
 * @method \Fichier\View\Helper\Fichier\UrlFichierViewHelper urlFichier(Fichier $fichier, bool $isTargetBlank = false, array $options = [])
 * @method \Fichier\View\Helper\Fichier\FichierViewHelper fichier(Fichier $object)
 *
 * @method SousCompetenceViewHelper sousCompetences(SousCompetence[] $object, array $options = [])
 * @method EtatViewHelper etatHelper(mixed $etat = null, int|null $resultat = null, string|null $resultatString = "", $options = [])
 * @method MissionEnseignementViewHelper missionEnseignement(MissionEnseignement $missionEnseignement, These $these, $options = [])
+31 −12
Changes for module/Fichier/src/Fichier/Filter/NomFichierFormatter.php: 31 added lines, 12 removed lines.
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@
namespace Fichier\Filter;

use Fichier\Entity\Db\Fichier;
use Webmozart\Assert\Assert;

/**
 * Filtre générateur de nom de fichier.
@@ -11,32 +12,50 @@ use Fichier\Entity\Db\Fichier;
 */
class NomFichierFormatter extends AbstractNomFichierFormatter
{
    protected string $separator = '-';
    protected Fichier $fichier;

    /**
     * Retourne un nom de fichier conforme aux règles de nommage.
     *
     * @param Fichier $value
     * @return string
     */
    public function filter($value): string
    {
        $fichier = $value;

        $extension = $this->extractExtensionFromFichier($fichier);
        Assert::isInstanceOf($value, Fichier::class);
        $this->fichier = $value;

        $parts = [];
        $parts['nom'] = $this->generateName();
        $parts['hash'] = $this->generateHash(); // hash pour différencier 2 fichiers de même nom déposés
        $parts['nature'] = $this->generateNature();
        $parts['extra'] = $this->generateExtra();

        $nomOriginalSansExtension = substr($fichier->getNomOriginal(), 0, -1 * (strlen($extension)+1));
        $parts['nom'] = $this->normalizedString($nomOriginalSansExtension);
        $name = implode($this->separator, array_filter($parts));
        $extension = $this->extractExtensionFromFichier($this->fichier);

        // on inclue un id unique car il peut y avoir plusieurs fichiers de même nom déposés
        $parts['id'] = $fichier->getShortUuid();
        return $name . '.' . $extension;
    }

        $parts['nature'] = $this->normalizedString($fichier->getNature()->getCode());
    protected function generateName(): string
    {
        $extension = $this->extractExtensionFromFichier($this->fichier);
        $nomOriginalSansExtension = substr($this->fichier->getNomOriginal(), 0, -1 * (strlen($extension)+1));

        $name = implode($this->separator, $parts);
        return $this->normalizedString($nomOriginalSansExtension);
    }

        return $name . '.' . $extension;
    protected function generateHash(): string
    {
        return $this->fichier->getShortUuid();
    }

    protected function generateNature(): string
    {
        return $this->normalizedString($this->fichier->getNature()->getCode());
    }

    protected function generateExtra(): ?string
    {
        return null;
    }
}
 No newline at end of file
+3 −3
Changes for module/Fichier/src/Fichier/View/Helper/Fichier/FichierViewHelper.php: 3 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -59,7 +59,7 @@ class FichierViewHelper extends AbstractHelper
    /**
     * Spécifie L'URL pour accéder au fichier.
     */
    public function setUrlTelechargementFichier(string $urlTelechargementFichier): self
    public function setUrlTelechargementFichier(?string $urlTelechargementFichier): self
    {
        $this->urlTelechargementFichier = $urlTelechargementFichier;
        return $this;
@@ -68,7 +68,7 @@ class FichierViewHelper extends AbstractHelper
    /**
     * Spécifie L'URL pour supprimer le fichier.
     */
    public function setUrlSuppressionFichier(string $urlSuppressionFichier): self
    public function setUrlSuppressionFichier(?string $urlSuppressionFichier): self
    {
        $this->urlSuppressionFichier = $urlSuppressionFichier;
        return $this;
@@ -77,7 +77,7 @@ class FichierViewHelper extends AbstractHelper
    /**
     * Spécifie Un libellé optionnel à afficher (à la place du nom du fichier).
     */
    public function setLibelleOptionnel(string $libelleOptionnel): self
    public function setLibelleOptionnel(?string $libelleOptionnel): self
    {
        $this->libelleOptionnel = $libelleOptionnel;
        return $this;
Loading