--- /dev/null
+<!--
+ ~ Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ ~ This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ ~
+ ~ Lilie is free software. You can redistribute it and/or modify since
+ ~ you respect the terms of either (at least one of the both license) :
+ ~ - under the terms of the GNU Affero General Public License as
+ ~ published by the Free Software Foundation, either version 3 of the
+ ~ License, or (at your option) any later version.
+ ~ - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ ~ License, or any later version
+ ~
+ ~ There are special exceptions to the terms and conditions of the
+ ~ licenses as they are applied to this software. View the full text of
+ ~ the exception in file LICENSE.txt in the directory of this software
+ ~ distribution.
+ ~
+ ~ Lilie is distributed in the hope that it will be useful,
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ ~ Licenses for more details.
+ ~
+ ~ You should have received a copy of the GNU General Public License
+ ~ and the CeCILL-C along with Lilie. If not, see :
+ ~ <http://www.gnu.org/licenses/> and
+ ~ <http://www.cecill.info/licences.fr.html>.
+ -->
+
+<databaseChangeLog
+ xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">
+
+ <changeSet id="1" author="agia">
+ <comment>
+ Suppression des utilisateurs désactivés depuis une date donnée et de leurs
+ données
+ </comment>
+
+ <sql>
+ DROP FUNCTION IF EXISTS suppression_utilisateurs(
+ dateDesactivation timestamp,
+ nbAutoritesASupprimer integer);
+ </sql>
+
+
+ <createProcedure>
+ <![CDATA[
+
+CREATE OR REPLACE FUNCTION suppression_utilisateurs(
+ dateDesactivation timestamp,
+ nbAutoritesASupprimer integer
+)
+RETURNS TABLE
+ (nb_deleted_textes_preferences_ut integer,
+ nb_deleted_signature integer,
+ nb_deleted_rel_cahier_acteur integer,
+ nb_deleted_rel_activite_acteur integer,
+ nb_deleted_pref_agenda integer,
+ nb_deleted_modele_appreciation integer,
+ nb_deleted_evment integer,
+ nb_deleted_dossier integer,
+ nb_deleted_commentaire integer,
+ nb_deleted_discussion integer,
+ nb_deleted_autorisation integer,
+ nb_deleted_agenda integer,
+ nb_deleted_pref_notes integer,
+ nb_deleted_notif_pref integer,
+ nb_deleted_fiche_eleve_commentaire integer,
+ nb_deleted_acces_fonctionnalite_personne integer,
+ nb_deleted_compte_utilisateur integer,
+ nb_deleted_chapitre integer,
+ nb_deleted_question_tdbase integer,
+ nb_deleted_sujet_tdbase integer,
+ nb_deleted_ressource integer,
+ nb_deleted_date_activite integer,
+ nb_deleted_activite integer,
+ nb_deleted_cahier_de_textes integer,
+ nb_deleted_personne integer,
+ nb_deleted_autorite integer
+ ) AS $$
+BEGIN
+ -- NB:on utilise CREATE TEMP TABLE et pas WITH car la portée d'une table temporaire créée par WITH ne concerne que la première requête
+
+ CREATE TEMP TABLE result (
+ nb_deleted_textes_preferences_ut integer,
+ nb_deleted_signature integer,
+ nb_deleted_rel_cahier_acteur integer,
+ nb_deleted_rel_activite_acteur integer,
+ nb_deleted_pref_agenda integer,
+ nb_deleted_modele_appreciation integer,
+ nb_deleted_evment integer,
+ nb_deleted_dossier integer,
+ nb_deleted_commentaire integer,
+ nb_deleted_discussion integer,
+ nb_deleted_autorisation integer,
+ nb_deleted_agenda integer,
+ nb_deleted_pref_notes integer,
+ nb_deleted_notif_pref integer,
+ nb_deleted_fiche_eleve_commentaire integer,
+ nb_deleted_acces_fonctionnalite_personne integer,
+ nb_deleted_compte_utilisateur integer,
+ nb_deleted_question_tdbase integer,
+ nb_deleted_sujet_tdbase integer,
+ nb_deleted_chapitre integer,
+ nb_deleted_ressource integer,
+ nb_deleted_date_activite integer,
+ nb_deleted_activite integer,
+ nb_deleted_cahier_de_textes integer,
+ nb_deleted_personne integer,
+ nb_deleted_autorite integer
+ );
+ INSERT INTO result
+ VALUES (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+
+ -- les utilisateurs qui sont auteurs d'un visa (ils ne seront pas supprimés)
+ CREATE TEMP TABLE auteur_visa AS
+ SELECT p.id AS personneId,
+ p.autorite_id AS autoriteId
+ FROM ent.personne p
+ INNER JOIN entcdt.visa v ON v.auteur_personne_id = p.id;
+ -- récupération des autorités à supprimer
+ CREATE TEMP TABLE autorites_a_supprimer AS
+ SELECT id FROM securite.autorite
+ WHERE date_desactivation < dateDesactivation
+ AND est_active = FALSE
+ AND etat <> 'ACCES_RESTREINT'
+ AND type = 'acteur'
+ AND id NOT IN (SELECT autoriteId FROM auteur_visa)
+ ORDER BY date_desactivation ASC
+ LIMIT nbAutoritesASupprimer;
+ -- récupération des personnes à supprimer
+ CREATE TEMP TABLE personnes_a_supprimer AS
+ SELECT id FROM ent.personne
+ WHERE autorite_id IN (SELECT id FROM autorites_a_supprimer);
+ -- récupération des cahiers privés non visés à supprimer
+ CREATE TEMP TABLE cahiers_a_supprimer AS
+ SELECT cdt.id AS id FROM entcdt.cahier_de_textes cdt
+ INNER JOIN securite.autorisation aut ON aut.item_id = cdt.item_id
+ WHERE cdt.annee_scolaire_id IS NULL
+ AND cdt.service_id IS NULL
+ AND est_vise = FALSE
+ AND aut.autorite_id IN (SELECT id FROM autorites_a_supprimer)
+ AND aut.proprietaire = TRUE;
+ -- récupération des activités des cahiers à supprimer
+ CREATE TEMP TABLE activites_cahiers_a_supprimer AS
+ SELECT id FROM entcdt.activite
+ WHERE cahier_de_textes_id IN (SELECT id FROM cahiers_a_supprimer);
+ CREATE TEMP TABLE commentaires_a_supprimer AS
+ SELECT id FROM forum.commentaire
+ WHERE autorite_id IN (SELECT id FROM autorites_a_supprimer);
+ -- récupération des emplois du temps perso des enseignants à supprimer
+ CREATE TEMP TABLE edt_a_supprimer AS
+ SELECT id FROM enttemps.agenda
+ WHERE enseignant_id IN (SELECT id FROM autorites_a_supprimer);
+ -- récupération des agendas privés des autorités à supprimer
+ CREATE TEMP TABLE agendas_a_supprimer AS
+ SELECT ag.id FROM enttemps.agenda ag
+ INNER JOIN securite.autorisation aut ON aut.item_id = ag.item_id
+ WHERE ag.type_agenda_id = (SELECT id FROM enttemps.type_agenda
+ WHERE code LIKE 'STA')
+ AND aut.autorite_id IN (SELECT id FROM autorites_a_supprimer)
+ AND aut.proprietaire = TRUE;
+ -- récupération des questions/items de tdbase à supprimer
+ CREATE TEMP TABLE questions_a_supprimer AS
+ SELECT id FROM td.question
+ WHERE proprietaire_id IN (SELECT id FROM personnes_a_supprimer)
+ AND publie = false;
+ -- récupération des questions/items de tdbase à modifier
+ CREATE TEMP TABLE questions_a_modifier AS
+ SELECT id FROM td.question
+ WHERE proprietaire_id IN (SELECT id FROM personnes_a_supprimer)
+ AND publie = true;
+ -- récupération des sujet tdbase à supprimer
+ CREATE TEMP TABLE sujets_a_supprimer AS
+ SELECT id FROM td.sujet
+ WHERE proprietaire_id IN (SELECT id FROM personnes_a_supprimer)
+ AND publie = false;
+ -- récupération des sujet tdbase à modifier
+ CREATE TEMP TABLE sujets_a_modifier AS
+ SELECT id FROM td.sujet
+ WHERE proprietaire_id IN (SELECT id FROM personnes_a_supprimer)
+ AND publie = true;
+ -- récupération de l'autorité 'système' du module textes
+ CREATE TEMP TABLE autorite_systeme_textes AS
+ SELECT id FROM securite.autorite
+ WHERE type LIKE 'eliot'
+ AND id_externe LIKE 'ELIOT-TEXTES';
+ -- récupération de l'autorité 'système' du module scolarite
+ CREATE TEMP TABLE autorite_systeme_scolarite AS
+ SELECT id FROM securite.autorite
+ WHERE type LIKE 'eliot'
+ AND id_externe LIKE 'ELIOT-SCOLARITE';
+
+ -- supprimer les PPS
+ DELETE FROM ent.personne_propriete_scolarite
+ WHERE personne_id IN (SELECT id FROM personnes_a_supprimer);
+
+ -- suppression des préférences textes des utilisateurs à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM entcdt.textes_preferences_utilisateur
+ WHERE utilisateur_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_textes_preferences_ut = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des signatures
+ WITH deleted_rows AS (
+ DELETE FROM ent.signature
+ WHERE proprietaire_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_signature = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des relations entre les autorités à supprimer et les cahiers
+ WITH deleted_rows AS (
+ DELETE FROM entcdt.rel_cahier_acteur
+ WHERE acteur_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_rel_cahier_acteur = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des relations entre les autorités à supprimer et les activités
+ WITH deleted_rows AS (
+ DELETE FROM entcdt.rel_activite_acteur
+ WHERE acteur_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_rel_activite_acteur = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des préférences agenda liées aux autorités à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM enttemps.preference_utilisateur_agenda
+ WHERE utilisateur_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_pref_agenda = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des modèles d'appréciation des professeurs
+ WITH deleted_rows AS (
+ DELETE FROM entnotes.modele_appreciation_professeur
+ WHERE autorite_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_modele_appreciation = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des événements des agendas persos créés par les autorités à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM enttemps.evenement
+ WHERE auteur_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_evment = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des dossiers créés par les autorités à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM entcdt.dossier
+ WHERE acteur_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_dossier = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des informations de lecture des commentaires
+ DELETE FROM forum.commentaire_lu
+ WHERE autorite_id IN (SELECT id FROM autorites_a_supprimer);
+ DELETE FROM forum.commentaire_lu
+ WHERE commentaire_id IN (SELECT id FROM commentaires_a_supprimer);
+
+ -- suppression des commentaires
+ WITH deleted_rows AS (
+ DELETE FROM forum.commentaire
+ WHERE autorite_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_commentaire = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des discussions
+ WITH deleted_rows AS (
+ DELETE FROM forum.discussion
+ WHERE autorite_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_discussion = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des autorisations
+ WITH deleted_rows AS (
+ DELETE FROM securite.autorisation
+ WHERE autorite_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_autorisation = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des relations entre les emplois du temps perso à supprimer perso et les événements
+ DELETE FROM enttemps.rel_agenda_evenement
+ WHERE agenda_id IN (SELECT id FROM edt_a_supprimer);
+
+ -- suppression des événements liés aux emplois du temps perso à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM enttemps.evenement
+ WHERE agenda_maitre_id IN (SELECT id FROM edt_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_evment = ((SELECT result.nb_deleted_evment FROM result) + (SELECT COUNT(*) FROM deleted_rows));
+
+ -- suppression des préférences liées aux emplois du temps perso à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM enttemps.preference_utilisateur_agenda
+ WHERE agenda_id IN (SELECT id FROM edt_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_pref_agenda = ((SELECT result.nb_deleted_pref_agenda FROM result) + (SELECT COUNT(*) FROM deleted_rows));
+
+ -- suppression des emplois du temps persos à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM enttemps.agenda
+ WHERE enseignant_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_agenda = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des préférences d'utilisation de notes des personnes à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM entnotes.preference_utilisateur_notes
+ WHERE personne_id IN (SELECT id FROM personnes_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_pref_notes = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des préférences de notification de notes des personnes à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM notification.preference_utilisateur
+ WHERE personne_id IN (SELECT id FROM personnes_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_notif_pref = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des commentaires de la fiche élève des personnes à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM ent.fiche_eleve_commentaire
+ WHERE personne_id IN (SELECT id FROM personnes_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_fiche_eleve_commentaire = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des droits d'accès aux fonctionnalités des personnes à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM securite.acces_fonctionnalite_personne
+ WHERE personne_id IN (SELECT id FROM personnes_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_acces_fonctionnalite_personne = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression du compte utilisateur des personnes à supprimer utilisé par tdbase
+ WITH deleted_rows AS (
+ DELETE FROM tice.compte_utilisateur
+ WHERE personne_id IN (SELECT id FROM personnes_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_compte_utilisateur = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des liens entre les élèves et leurs responsables
+ DELETE FROM ent.responsable_eleve
+ WHERE personne_id IN (SELECT id FROM personnes_a_supprimer)
+ OR eleve_id IN (SELECT id FROM personnes_a_supprimer);
+
+ /* TD base */
+ -- suppression des liens entre sujets et questions créés par les personnes à supprimer
+ DELETE FROM td.sujet_sequence_questions
+ WHERE question_id IN (SELECT id FROM questions_a_supprimer);
+ DELETE FROM td.sujet_sequence_questions
+ WHERE sujet_id IN (SELECT id FROM sujets_a_supprimer);
+
+ -- suppression des informations d'export des questions à supprimer
+ DELETE FROM td.question_export
+ WHERE question_id IN (SELECT id FROM questions_a_supprimer);
+
+ -- suppression des liens entre compétence et les questions à supprimer
+ DELETE FROM td.question_competence
+ WHERE question_id IN (SELECT id FROM questions_a_supprimer);
+
+ -- suppression des liens entre pièces jointes et les questions à supprimer
+ DELETE FROM td.question_attachement
+ WHERE question_id IN (SELECT id FROM questions_a_supprimer);
+
+ -- suppression des questions
+ WITH deleted_rows AS (
+ DELETE FROM td.question
+ WHERE id IN (SELECT id FROM questions_a_supprimer)
+ RETURNING *
+ )
+
+ UPDATE result
+ SET nb_deleted_question_tdbase = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des sujets
+ WITH deleted_rows AS (
+ DELETE FROM td.sujet
+ WHERE id IN (SELECT id FROM sujets_a_supprimer)
+ RETURNING *
+ )
+
+ UPDATE result
+ SET nb_deleted_sujet_tdbase = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- modification des questions
+ UPDATE td.question
+ SET proprietaire_id = (SELECT id FROM autorite_systeme_scolarite)
+ WHERE id IN (SELECT id FROM questions_a_modifier);
+
+ -- modification des sujets
+ UPDATE td.sujet
+ SET proprietaire_id = (SELECT id FROM autorite_systeme_scolarite)
+ WHERE id IN (SELECT id FROM sujets_a_modifier);
+ /* */
+
+ -- suppression des relations entre les agendas privés à supprimer et les événements
+ DELETE FROM enttemps.rel_agenda_evenement
+ WHERE agenda_id IN (SELECT id FROM agendas_a_supprimer);
+
+ -- suppression des événements liés aux agendas privés à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM enttemps.evenement
+ WHERE agenda_maitre_id IN (SELECT id FROM agendas_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_evment = ((SELECT result.nb_deleted_evment FROM result) + (SELECT COUNT(*) FROM deleted_rows));
+
+ -- suppression des préférences liées aux agendas privés
+ WITH deleted_rows AS (
+ DELETE FROM enttemps.preference_utilisateur_agenda
+ WHERE agenda_id IN (SELECT id FROM agendas_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_pref_agenda = ((SELECT result.nb_deleted_pref_agenda FROM result) + (SELECT COUNT(*) FROM deleted_rows));
+
+ -- suppression des agendas privés
+ WITH deleted_rows AS (
+ DELETE FROM enttemps.agenda
+ WHERE id IN (SELECT id FROM agendas_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_agenda = ((SELECT result.nb_deleted_agenda FROM result) + (SELECT COUNT(*) FROM deleted_rows));
+
+ -- suppression des chapitres liés aux cahiers à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM entcdt.chapitre
+ WHERE cahier_de_textes_id IN (SELECT id FROM cahiers_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_chapitre = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des ressources liées aux activités à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM entcdt.ressource
+ WHERE activite_id IN (SELECT id FROM activites_cahiers_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_ressource = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des relations entre les activités à supprimer et les utilisateurs
+ DELETE FROM entcdt.rel_activite_acteur
+ WHERE activite_id IN (SELECT id FROM activites_cahiers_a_supprimer);
+
+ -- suppression des dates des activités à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM entcdt.date_activite
+ WHERE activite_id IN (SELECT id FROM activites_cahiers_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_date_activite = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des activités des cahiers à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM entcdt.activite
+ WHERE id IN (SELECT id FROM activites_cahiers_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_activite = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des relations entre les cahiers à supprimer et les groupes
+ DELETE FROM entcdt.rel_cahier_groupe
+ WHERE cahier_de_textes_id IN (SELECT id FROM cahiers_a_supprimer);
+
+ -- suppression des relations entre les cahiers à supprimer et les utilisateurs
+ DELETE FROM entcdt.rel_cahier_acteur
+ WHERE cahier_de_textes_id IN (SELECT id FROM cahiers_a_supprimer);
+
+ -- suppression des cahiers privés non visés
+ WITH deleted_rows AS (
+ DELETE FROM entcdt.cahier_de_textes
+ WHERE id IN (SELECT id FROM cahiers_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_cahier_de_textes = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- supprimer la relation entre les demandes de traitement et l'autorité à supprimer
+ UPDATE entdemon.demande_traitement
+ SET demandeur_autorite_id = NULL
+ WHERE demandeur_autorite_id IN (SELECT id FROM autorites_a_supprimer);
+
+ -- relier les activités créées par les autorités à supprimer à l'autorité système de textes
+ UPDATE entcdt.activite
+ SET auteur_id = (SELECT id FROM autorite_systeme_textes)
+ WHERE auteur_id IN (SELECT id FROM autorites_a_supprimer);
+
+ -- relier les chapitres créées par les autorités à supprimer à l'autorité système de textes
+ UPDATE entcdt.chapitre
+ SET auteur_id = (SELECT id FROM autorite_systeme_textes)
+ WHERE auteur_id IN (SELECT id FROM autorites_a_supprimer);
+
+ -- supprimer les personnes
+ WITH deleted_rows AS (
+ DELETE FROM ent.personne
+ WHERE id IN (SELECT id FROM personnes_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_personne = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- supprimer les autorités
+ WITH deleted_rows AS (
+ DELETE FROM securite.autorite
+ WHERE id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_autorite = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des tables temporaires
+ DROP TABLE IF EXISTS auteur_visa;
+ DROP TABLE IF EXISTS autorites_a_supprimer;
+ DROP TABLE IF EXISTS personnes_a_supprimer;
+ DROP TABLE IF EXISTS cahiers_a_supprimer;
+ DROP TABLE IF EXISTS activites_cahiers_a_supprimer;
+ DROP TABLE IF EXISTS commentaires_a_supprimer;
+ DROP TABLE IF EXISTS edt_a_supprimer;
+ DROP TABLE IF EXISTS agendas_a_supprimer;
+ DROP TABLE IF EXISTS questions_a_supprimer;
+ DROP TABLE IF EXISTS questions_a_modifier;
+ DROP TABLE IF EXISTS sujets_a_supprimer;
+ DROP TABLE IF EXISTS sujets_a_modifier;
+ DROP TABLE IF EXISTS autorite_systeme_textes;
+ DROP TABLE IF EXISTS autorite_systeme_scolarite;
+
+ RETURN QUERY
+ SELECT * FROM result;
+
+ DROP TABLE result;
+
+END;
+$$ LANGUAGE plpgsql;
+ ]]>
+ </createProcedure>
+
+ </changeSet>
+
+</databaseChangeLog>
+
--- /dev/null
+%{--
+ - Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ - This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ -
+ - Lilie is free software. You can redistribute it and/or modify since
+ - you respect the terms of either (at least one of the both license) :
+ - - under the terms of the GNU Affero General Public License as
+ - published by the Free Software Foundation, either version 3 of the
+ - License, or (at your option) any later version.
+ - - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ - License, or any later version
+ -
+ - There are special exceptions to the terms and conditions of the
+ - licenses as they are applied to this software. View the full text of
+ - the exception in file LICENSE.txt in the directory of this software
+ - distribution.
+ -
+ - Lilie is distributed in the hope that it will be useful,
+ - but WITHOUT ANY WARRANTY; without even the implied warranty of
+ - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ - Licenses for more details.
+ -
+ - You should have received a copy of the GNU General Public License
+ - and the CeCILL-C along with Lilie. If not, see :
+ - <http://www.gnu.org/licenses/> and
+ - <http://www.cecill.info/licences.fr.html>.
+ --}%
+
+
+
+<%@ page contentType="text/html;charset=UTF-8" %>
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <title>Suppression physique des utilisateurs<g:meta name="app.name"/></title>
+ <g:javascript library="lib/jquery/jquery-1.3.2"/>
+ <g:javascript library="jquery"/>
+ <script type="text/javascript">
+ // La function pour afficher/cacher la liste de rapports
+ function afficherRapports(idRapport, idVariable) {
+ if (document.getElementById) {
+ var objRapport = document.getElementById(idRapport);
+ var objVariable = document.getElementById(idVariable);
+ if (objRapport.style.display == "none") {
+ objRapport.style.display = "";
+ objVariable.textContent = "Masquer les rapports";
+ } else {
+ objRapport.style.display = "none";
+ objVariable.textContent = "Consulter les rapports"
+ }
+ }
+ }
+ </script>
+ %{--datepicker--}%
+ <link rel="stylesheet" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css">
+ <script src="//code.jquery.com/jquery-1.10.2.js"></script>
+ <script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
+ <script>
+ $(function() {
+ $( "#datepicker" ).datepicker({
+ dateFormat: "dd/mm/yy",
+ altField: "#datepicker",
+ closeText: 'Fermer',
+ prevText: 'Précédent',
+ nextText: 'Suivant',
+ currentText: 'Aujourd\'hui',
+ monthNames: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],
+ monthNamesShort: ['Janv.', 'Févr.', 'Mars', 'Avril', 'Mai', 'Juin', 'Juil.', 'Août', 'Sept.', 'Oct.', 'Nov.', 'Déc.'],
+ dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],
+ dayNamesShort: ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'],
+ dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],
+ weekHeader: 'Sem.'});
+ $( "#datepicker" ).datepicker();
+ });
+ </script>
+ %{----}%
+</head>
+<body>
+<p>
+ <g:link action="index"><g:message code="maintenance.accueil.maintenance"/></g:link>
+</p>
+
+<hr/>
+<h2><g:message code="maintenance.suppression.accueil.titre"/></h2>
+<br/>
+
+<g:if test="${suppressionEnCours}">
+ <g:message code="maintenance.suppression.enCours"/><br/>
+ <g:message code="maintenance.suppression.generationFichier"/><br/>
+ <g:message code="maintenance.suppression.reconsulterPage"/><br/>
+</g:if>
+
+<g:else>
+
+%{--<g:if test="${importTerminee}">--}%
+%{--<g:message code="maintenance.import.accueil.rapportSucces"/>--}%
+%{--</g:if>--}%
+
+%{--<g:if test="${!dossiers}">--}%
+%{--<g:message code="maintenance.import.accueil.aucunFichier" args="[urlRacine.subSequence(0, urlRacine.size() - 1)]"/>--}%
+%{--</g:if>--}%
+
+%{--<g:else>--}%
+%{--<p><g:message code="maintenance.import.accueil.empFichier" args="[urlRacine.subSequence(0, urlRacine.size() - 1)]"/></p>--}%
+%{--<br/>--}%
+%{--<g:message code="maintenance.import.accueil.cliqueBouton"/><br/>--}%
+%{--<g:message code="maintenance.bascule.accueil.generationFichier"/><br/>--}%
+%{--<g:message code="maintenance.bascule.accueil.reconsulterPage"/><br/>--}%
+%{--<br/>--}%
+%{--<g:each in="${dossiers}" var="dossier">--}%
+ <TABLE style="height:100%; width:100%; border:1px">
+ %{--<TD bgcolor="#CCCCCC" width="400">--}%
+ %{--<g:message code="maintenance.import.accueil.importfichier" args="[dossier]"/>--}%
+ %{--<g:if test="${(listeRapportsParDossier[dossier].size() > 0)}">--}%
+ %{--<TD bgcolor="#CCCCCC" width="100">--}%
+ %{--<g:message code="maintenance.import.accueil.importe" args="[listeRapportsParDossier[dossier].size()]"/>--}%
+ %{--</TD>--}%
+ %{--</g:if>--}%
+ %{--<g:else>--}%
+ %{--<TD bgcolor="#CCCCCC" width="100">--}%
+ %{-- --}%
+ %{--</TD>--}%
+ %{--</g:else>--}%
+ %{--</TD>--}%
+ <TD>
+ <g:form enctype='multipart/form-data' method="post">
+ <g:message code="maintenance.suppression.date"/>
+ <g:textField name="dateSelectionnee" id="datepicker"/>
+ <script>
+ </script>
+ </TD>
+ <TD>
+ <g:actionSubmit controller="maintenance" action="lancerSuppression" value="Lancer la suppression"/>
+ %{--<g:actionSubmit--}%
+ %{--action=""--}%
+ %{--class="save"--}%
+ %{--value="Lancer la suppression"--}%
+ %{--style="width: auto; background-color: #0099FF"--}%
+ %{--onclick="${remoteFunction(--}%
+ %{--action:'lancerSuppression',--}%
+ %{--params:[date : 'date'],--}%
+ %{--onFailure:'window.location.reload();',--}%
+ %{--onSuccess:'window.location.reload();')}"/>--}%
+ </g:form>
+ </TD>
+ </TABLE>
+%{--<g:if test="${(listeRapportsParDossier[dossier].size() > 0)}">--}%
+ <p><a href="#" id="${dossier}_variable" onclick="afficherRapports('${dossier}_rapport', '${dossier}_variable')">Consulter les rapports</a></p>
+%{--<div id="${dossier}_rapport" style="display: none;">--}%
+%{--<ul>--}%
+%{--<g:each in="${listeRapportsParDossier[dossier]}" var="rapport">--}%
+%{--<li>--}%
+%{--<g:set var="urlRapport" value="${createLink(action: 'visualiseFichier', params:[rapport:rapport])}" />--}%
+%{--<a href="#" onclick="window.open('${urlRapport}', 'blank', 'height=600, width=800, toolbar=no,menubar=no,scrollbars=yes');">--}%
+%{--${rapport.name}--}%
+%{--</a>--}%
+
+%{--</li>--}%
+%{--</g:each>--}%
+%{--</ul>--}%
+%{--</div>--}%
+%{--</g:if>--}%
+%{--<br>--}%
+%{--</g:each>--}%
+%{--</g:else>--}%
+</g:else>
+
+</body>
+</html>