Loading doc/release-notes/v14/14.0.0/01_these_cotutelle.sql +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 Loading @@ -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 Loading Loading @@ -165,7 +165,6 @@ create table these_cotutelle_avenant_fichier ); */ create table these_cotutelle_presence ( id bigserial Loading @@ -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, Loading Loading @@ -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'; Loading module/Application/src/Application/Utils/FormUtils.php +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 Loading @@ -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. */ Loading module/Application/src/Application/View/Renderer/PhpRenderer.php +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 Loading @@ -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; Loading @@ -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; /** Loading Loading @@ -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 = []) Loading module/Fichier/src/Fichier/Filter/NomFichierFormatter.php +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 Loading @@ -3,6 +3,7 @@ namespace Fichier\Filter; use Fichier\Entity\Db\Fichier; use Webmozart\Assert\Assert; /** * Filtre générateur de nom de fichier. Loading @@ -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 module/Fichier/src/Fichier/View/Helper/Fichier/FichierViewHelper.php +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 Loading @@ -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; Loading @@ -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; Loading @@ -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 Loading
doc/release-notes/v14/14.0.0/01_these_cotutelle.sql +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 Loading @@ -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 Loading Loading @@ -165,7 +165,6 @@ create table these_cotutelle_avenant_fichier ); */ create table these_cotutelle_presence ( id bigserial Loading @@ -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, Loading Loading @@ -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'; Loading
module/Application/src/Application/Utils/FormUtils.php +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 Loading @@ -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. */ Loading
module/Application/src/Application/View/Renderer/PhpRenderer.php +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 Loading @@ -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; Loading @@ -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; /** Loading Loading @@ -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 = []) Loading
module/Fichier/src/Fichier/Filter/NomFichierFormatter.php +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 Loading @@ -3,6 +3,7 @@ namespace Fichier\Filter; use Fichier\Entity\Db\Fichier; use Webmozart\Assert\Assert; /** * Filtre générateur de nom de fichier. Loading @@ -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
module/Fichier/src/Fichier/View/Helper/Fichier/FichierViewHelper.php +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 Loading @@ -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; Loading @@ -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; Loading @@ -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