From 05c68ebfaa0ff30a70ca9c42bcb306261c0fbb85 Mon Sep 17 00:00:00 2001 From: N3WT DE COMPET Date: Sun, 15 Feb 2026 18:40:14 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20Page=20Structure=20:=20suppression=20de?= =?UTF-8?q?=20la=20possibilit=C3=A9=20de=20faire=20des=20actions=20d'admin?= =?UTF-8?q?=20[N3WTS-8]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/app/[locale]/admin/structure/page.js | 65 +++++----- .../Competencies/CompetenciesList.js | 27 +++-- .../Structure/Competencies/TreeView.js | 13 +- .../Structure/Configuration/ClassesSection.js | 25 +++- .../Configuration/SpecialitiesSection.js | 6 +- .../Configuration/TeachersSection.js | 10 +- .../Structure/Files/FilesGroupsManagement.js | 111 +++++++++--------- 7 files changed, 145 insertions(+), 112 deletions(-) diff --git a/Front-End/src/app/[locale]/admin/structure/page.js b/Front-End/src/app/[locale]/admin/structure/page.js index df127f4..92e1049 100644 --- a/Front-End/src/app/[locale]/admin/structure/page.js +++ b/Front-End/src/app/[locale]/admin/structure/page.js @@ -52,7 +52,7 @@ export default function Page() { ); const csrfToken = useCsrfToken(); - const { selectedEstablishmentId } = useEstablishment(); + const { selectedEstablishmentId, profileRole } = useEstablishment(); useEffect(() => { if (selectedEstablishmentId) { @@ -316,35 +316,39 @@ export default function Page() { ), }, - { - id: 'Fees', - label: 'Tarifs', - content: ( -
- -
- ), - }, + ...(profileRole !== 0 + ? [ + { + id: 'Fees', + label: 'Tarifs', + content: ( +
+ +
+ ), + }, + ] + : []), { id: 'Files', label: 'Documents', @@ -353,6 +357,7 @@ export default function Page() { ), diff --git a/Front-End/src/components/Structure/Competencies/CompetenciesList.js b/Front-End/src/components/Structure/Competencies/CompetenciesList.js index 63a339a..836f294 100644 --- a/Front-End/src/components/Structure/Competencies/CompetenciesList.js +++ b/Front-End/src/components/Structure/Competencies/CompetenciesList.js @@ -7,7 +7,6 @@ import CheckBox from '@/components/Form/CheckBox'; import Button from '@/components/Form/Button'; import { useEstablishment } from '@/context/EstablishmentContext'; import { - fetchEstablishmentCompetencies, createEstablishmentCompetencies, deleteEstablishmentCompetencies, } from '@/app/actions/schoolAction'; @@ -44,7 +43,7 @@ export default function CompetenciesList({ 3: false, 4: false, }); - const { selectedEstablishmentId } = useEstablishment(); + const { selectedEstablishmentId, profileRole } = useEstablishment(); const csrfToken = useCsrfToken(); const { showNotification } = useNotification(); @@ -280,17 +279,19 @@ export default function CompetenciesList({ {/* Bouton submit centré en bas */}
-
{/* Légende en dessous du bouton, alignée à gauche */}
diff --git a/Front-End/src/components/Structure/Competencies/TreeView.js b/Front-End/src/components/Structure/Competencies/TreeView.js index eac0268..f22939d 100644 --- a/Front-End/src/components/Structure/Competencies/TreeView.js +++ b/Front-End/src/components/Structure/Competencies/TreeView.js @@ -5,6 +5,7 @@ import React, { useImperativeHandle, } from 'react'; import { CheckCircle, Circle } from 'lucide-react'; +import { useEstablishment } from '@/context/EstablishmentContext'; const TreeView = forwardRef(function TreeView( { data, expandAll, onSelectionChange }, @@ -72,6 +73,8 @@ const TreeView = forwardRef(function TreeView( clearSelection: () => setSelectedCompetencies({}), })); + const { profileRole } = useEstablishment(); + return (
{data.map((domaine) => ( @@ -112,12 +115,18 @@ const TreeView = forwardRef(function TreeView( ? 'text-emerald-600 font-semibold cursor-pointer' : 'text-gray-500 cursor-pointer hover:text-emerald-600' }`} - onClick={() => handleCompetenceClick(competence)} + onClick={ + profileRole !== 0 + ? () => handleCompetenceClick(competence) + : undefined + } style={{ cursor: competence.state === 'required' ? 'default' - : 'pointer', + : profileRole !== 0 + ? 'pointer' + : 'default', userSelect: 'none', }} > diff --git a/Front-End/src/components/Structure/Configuration/ClassesSection.js b/Front-End/src/components/Structure/Configuration/ClassesSection.js index 86d65b7..80d1688 100644 --- a/Front-End/src/components/Structure/Configuration/ClassesSection.js +++ b/Front-End/src/components/Structure/Configuration/ClassesSection.js @@ -130,9 +130,7 @@ const ClassesSection = ({ const [removePopupVisible, setRemovePopupVisible] = useState(false); const [removePopupMessage, setRemovePopupMessage] = useState(''); const [removePopupOnConfirm, setRemovePopupOnConfirm] = useState(() => {}); - const [detailsModalVisible, setDetailsModalVisible] = useState(false); - const [selectedClass, setSelectedClass] = useState(null); - const { selectedEstablishmentId } = useEstablishment(); + const { selectedEstablishmentId, profileRole } = useEstablishment(); const { addSchedule, reloadPlanning, reloadEvents } = usePlanning(); const { getNiveauxLabels, allNiveaux } = useClasses(); const router = useRouter(); @@ -449,6 +447,25 @@ const ClassesSection = ({ case 'MISE A JOUR': return classe.updated_date_formatted; case 'ACTIONS': + // Affichage des actions en mode affichage (hors édition/création) + if (profileRole === 0) { + // Si professeur, uniquement le bouton ZoomIn + return ( +
+ +
+ ); + } + // Sinon, toutes les actions (admin) return (