Commit d1ab2c49 authored by Bertrand Gauthier's avatar Bertrand Gauthier Committed by Jean-Philippe Metivier
Browse files

Interdiction de supprimer un fichier possédant un id permanent.

parent 9c5f7dc2
Loading
Loading
Loading
Loading
+8 −0
Changes for CHANGELOG.md: 8 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -3,8 +3,16 @@ Journal des modifications

2.1.6
-----
- Utilisation de l'id permanent CHARTE_DEPOT_DIFFUSION_THESE pour télécharger la charte de dépôt et diffusion de thèse.
- Abandon de la nature de fichier 'divers' au profit de 'commun'.
- Rétablissement de l'import des origines de financement pour être en phase avec les releases du web service d'import.
- Financement : masquage possible de certaines origines de financement (ex : handicap).
- Financement : la visibilité des origines masquées peut être forcée grâce à un privilège.
- Interdiction de supprimer un fichier possédant un id permanent.
- [FIX] Usurpation d'un compte local en BDD
- [FIX] Plantage de la page Assistance en cas d'authentification locale BDD
- [FIX] Injection manquante de la source SYGAL dans la création manuelle d'un utilisateur local (identifiant = adresse mail)
- [FIX] Date de soutenance et de fin de confidentialité : changement de l'élément de formulaire pour pouvoir sélectionner une année

2.1.5
-----
+105 −0
Changes for doc/release-notes/v2.1.6.md: 105 added lines, 0 removed lines.
Original line number Diff line number Diff line
# Version 2.1.6

## 1. Sur le serveur d'application

- Placez-vous dans le répertoire de l'application puis lancez la commande suivante 
pour installer la nouvelle version :

```bash
git fetch --tags && git checkout --force 2.1.6 && bash ./install.sh
```

- Selon le moteur PHP que vous avez installé, rechargez le service, exemple :
  - php7.3-fpm         : `service php7.3-fpm reload`
  - apache2-mod-php7.3 : `service apache2 reload`

## 2. Dans la base de données

```sql
--
-- Ajout d'une colonne pour ne pas afficher certaines origines de financement (ex: handicap)
--
alter table ORIGINE_FINANCEMENT add VISIBLE smallint default 1 not null;

--
-- Rétablissement de l'import des origines de financement.
--
create or replace view SRC_ORIGINE_FINANCEMENT as
select NULL                 AS id,
       tmp.SOURCE_CODE      AS SOURCE_CODE,
       src.ID               AS SOURCE_ID,
       COD_OFI              as CODE,
       LIC_OFI              as LIBELLE_COURT,
       LIB_OFI              as LIBELLE_LONG
from TMP_ORIGINE_FINANCEMENT tmp
       JOIN SOURCE src ON src.CODE = tmp.SOURCE_ID
;
alter table ORIGINE_FINANCEMENT modify HISTO_MODIFICATION null
;
alter table ORIGINE_FINANCEMENT modify HISTO_MODIFICATEUR_ID null
;

--
-- Privilèges.
--
insert into CATEGORIE_PRIVILEGE(ID, CODE, LIBELLE, ORDRE) values (CATEGORIE_PRIVILEGE_ID_SEQ.nextval, 'financement', 'Financement', 5)
;
insert into PRIVILEGE(ID, CATEGORIE_ID, CODE, LIBELLE, ORDRE)
select privilege_id_seq.nextval, cp.id, 'voir-origine-non-visible', 'Voir les origines de financement masquées', 10
from CATEGORIE_PRIVILEGE cp where cp.CODE = 'financement';

--
-- Fichiers divers ==> communs
--
update FICHIER
set NATURE_ID = (
  select id
  from NATURE_FICHIER
  where CODE = 'COMMUNS'
)
where id in (
  select f.id
  from FICHIER f
         join NATURE_FICHIER nf on f.NATURE_ID = nf.ID and nf.CODE = 'DIVERS'
);
delete from NATURE_FICHIER where code = 'DIVERS'
;
update PROFIL_PRIVILEGE pp set PRIVILEGE_ID = (
  select p.id from PRIVILEGE p join CATEGORIE_PRIVILEGE cp on p.CATEGORIE_ID = cp.ID and cp.CODE = 'fichier-commun'
  where p.CODE = 'televerser'
)
where PRIVILEGE_ID = (
  select p.id from PRIVILEGE p join CATEGORIE_PRIVILEGE cp on p.CATEGORIE_ID = cp.ID and cp.CODE = 'fichier-divers'
  where p.CODE = 'televerser'
) -- PAS GRAVE si vous rencontrez l'erreur 'ORA-00001: violation de contrainte unique'
;
update PROFIL_PRIVILEGE pp set PRIVILEGE_ID = (
  select p.id from PRIVILEGE p join CATEGORIE_PRIVILEGE cp on p.CATEGORIE_ID = cp.ID and cp.CODE = 'fichier-commun'
  where p.CODE = 'telecharger'
)
where PRIVILEGE_ID = (
  select p.id from PRIVILEGE p join CATEGORIE_PRIVILEGE cp on p.CATEGORIE_ID = cp.ID and cp.CODE = 'fichier-divers'
  where p.CODE = 'telecharger'
) -- PAS GRAVE si vous rencontrez l'erreur 'ORA-00001: violation de contrainte unique'
;
update ROLE_PRIVILEGE pp set PRIVILEGE_ID = (
  select p.id from PRIVILEGE p join CATEGORIE_PRIVILEGE cp on p.CATEGORIE_ID = cp.ID and cp.CODE = 'fichier-commun'
  where p.CODE = 'televerser'
)
where PRIVILEGE_ID = (
  select p.id from PRIVILEGE p join CATEGORIE_PRIVILEGE cp on p.CATEGORIE_ID = cp.ID and cp.CODE = 'fichier-divers'
  where p.CODE = 'televerser'
) -- PAS GRAVE si vous rencontrez l'erreur 'ORA-00001: violation de contrainte unique'
;
update ROLE_PRIVILEGE pp set PRIVILEGE_ID = (
  select p.id from PRIVILEGE p join CATEGORIE_PRIVILEGE cp on p.CATEGORIE_ID = cp.ID and cp.CODE = 'fichier-commun'
  where p.CODE = 'telecharger'
)
where PRIVILEGE_ID = (
  select p.id from PRIVILEGE p join CATEGORIE_PRIVILEGE cp on p.CATEGORIE_ID = cp.ID and cp.CODE = 'fichier-divers'
  where p.CODE = 'telecharger'
) -- PAS GRAVE si vous rencontrez l'erreur 'ORA-00001: violation de contrainte unique'
;
delete from CATEGORIE_PRIVILEGE where code = 'fichier-divers' -- NB: cascade sur PROFIL_PRIVILEGE et ROLE_PRIVILEGE
;
```
+6 −0
Changes for module/Application/src/Application/Service/Fichier/FichierService.php: 6 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -183,6 +183,12 @@ class FichierService extends BaseService
        $this->entityManager->beginTransaction();
        try {
            foreach ($fichiers as $fichier) {
                if ($fichier->getIdPermanent() !== null) {
                    throw new Exception(sprintf(
                        "Interdit de supprimer un fichier possédant un id permanent (en l'occurence : '%s')",
                        $fichier->getIdPermanent()
                    ));
                }
                $filePaths[] = $this->computeDestinationFilePathForFichier($fichier);
                $this->entityManager->remove($fichier);
                $this->entityManager->flush($fichier);