Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion admin/src/main/ts/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,4 @@
"typescript": "~4.6.4",
"webpack": "^5.70.0"
}
}
}
4 changes: 3 additions & 1 deletion conversation/backend/src/main/resources/i18n/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,8 @@
"onboarding.modal.screen4.text": "La refonte de la Messagerie ne fait que commencer ! D'autres améliorations vous attendent dans quelques mois : l'envoi différé, la demande d'accusé de lecture, l'amélioration du signalement... Restez connectés !",
"onboarding.modal.screen4.title": "Les nouveautés à venir",
"onboarding.modal.title": "La Messagerie fait peau neuve !",
"onboarding.modal.clean.title": "Du tri dans vos messages",
"onboarding.modal.clean.text": "<strong>L’application Messagerie intégrera bientôt une automatisation de suppression des anciens messages.</strong><br />Afin de limiter l'utilisation d'espace de stockage, les messages de plus de 2 ans seront supprimés s’ils ne sont classés dans aucun dossier.Cette action se fera automatiquement et régulièrement tout au long de l'année. <br />Cela libérera de l'espace sur votre quota de stockage. Cette mesure permettra de libérer jusqu’à 8 tonnes d’équivalent CO2 par an sur toutes nos plateformes. Un bon geste pour la planète ! <br />Cette automatisation sera appliquée à partir du xxx 2026. Pensez à faire du tri dès que possible !",
Copy link

Copilot AI Mar 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The text contains "xxx 2026" which appears to be a placeholder for an actual date. This should be replaced with the actual planned date before merging, otherwise users will see "xxx 2026" in the modal.

Suggested change
"onboarding.modal.clean.text": "<strong>L’application Messagerie intégrera bientôt une automatisation de suppression des anciens messages.</strong><br />Afin de limiter l'utilisation d'espace de stockage, les messages de plus de 2 ans seront supprimés s’ils ne sont classés dans aucun dossier.Cette action se fera automatiquement et régulièrement tout au long de l'année. <br />Cela libérera de l'espace sur votre quota de stockage. Cette mesure permettra de libérer jusqu’à 8 tonnes d’équivalent CO2 par an sur toutes nos plateformes. Un bon geste pour la planète ! <br />Cette automatisation sera appliquée à partir du xxx 2026. Pensez à faire du tri dès que possible !",
"onboarding.modal.clean.text": "<strong>L’application Messagerie intégrera bientôt une automatisation de suppression des anciens messages.</strong><br />Afin de limiter l'utilisation d'espace de stockage, les messages de plus de 2 ans seront supprimés s’ils ne sont classés dans aucun dossier.Cette action se fera automatiquement et régulièrement tout au long de l'année. <br />Cela libérera de l'espace sur votre quota de stockage. Cette mesure permettra de libérer jusqu’à 8 tonnes d’équivalent CO2 par an sur toutes nos plateformes. Un bon geste pour la planète ! <br />Cette automatisation sera appliquée à partir de 2026. Pensez à faire du tri dès que possible !",

Copilot uses AI. Check for mistakes.
Copy link

Copilot AI Mar 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a missing space between "dossier." and "Cette" — the text reads dossier.Cette but should be dossier. Cette.

Suggested change
"onboarding.modal.clean.text": "<strong>L’application Messagerie intégrera bientôt une automatisation de suppression des anciens messages.</strong><br />Afin de limiter l'utilisation d'espace de stockage, les messages de plus de 2 ans seront supprimés s’ils ne sont classés dans aucun dossier.Cette action se fera automatiquement et régulièrement tout au long de l'année. <br />Cela libérera de l'espace sur votre quota de stockage. Cette mesure permettra de libérer jusqu’à 8 tonnes d’équivalent CO2 par an sur toutes nos plateformes. Un bon geste pour la planète ! <br />Cette automatisation sera appliquée à partir du xxx 2026. Pensez à faire du tri dès que possible !",
"onboarding.modal.clean.text": "<strong>L’application Messagerie intégrera bientôt une automatisation de suppression des anciens messages.</strong><br />Afin de limiter l'utilisation d'espace de stockage, les messages de plus de 2 ans seront supprimés s’ils ne sont classés dans aucun dossier. Cette action se fera automatiquement et régulièrement tout au long de l'année. <br />Cela libérera de l'espace sur votre quota de stockage. Cette mesure permettra de libérer jusqu’à 8 tonnes d’équivalent CO2 par an sur toutes nos plateformes. Un bon geste pour la planète ! <br />Cette automatisation sera appliquée à partir du xxx 2026. Pensez à faire du tri dès que possible !",

Copilot uses AI. Check for mistakes.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

on peut faire commencer la clé de trad par conversation.onboarding...

"outbox.folder": "Messages envoyés",
"pagination.on": "[[current]] sur [[total]]",
"print": "Imprimer",
Expand Down Expand Up @@ -301,4 +303,4 @@
"widget.title": "Messages",
"yesterday": "Hier",
"you.answered": "Vous avez répondu à ce message"
}
}
9 changes: 9 additions & 0 deletions conversation/frontend/src/assets/illu-onboarding-clean.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 0 additions & 10 deletions conversation/frontend/src/assets/illu-onboarding-incoming.svg

This file was deleted.

1 change: 0 additions & 1 deletion conversation/frontend/src/assets/illu-onboarding-new.svg

This file was deleted.

7 changes: 0 additions & 7 deletions conversation/frontend/src/assets/illu-onboarding-recall.svg

This file was deleted.

10 changes: 0 additions & 10 deletions conversation/frontend/src/assets/illu-onboarding-search.svg

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import {
DisplayRuleCheckResult,
OnboardingModal,
} from '@edifice.io/react/modals';
import illuOnboardingClean from '~/assets/illu-onboarding-clean.svg';
import { useI18n } from '~/hooks/useI18n';

type OnboardingModalCustomState = { type: 'Date'; value: string };

export default function MessageOnboardingCleanModal() {
const { t } = useI18n();

function onDisplayRuleCheck(
previousState?: OnboardingModalCustomState,
): DisplayRuleCheckResult<OnboardingModalCustomState> {
const nowUTC = new Date();

const lastDisplayDate = previousState
? new Date(previousState.value)
: undefined;
const dateToCompare = new Date();
dateToCompare.setMonth(5, 1); // June 1st, of the year
let shouldDisplay = false;
if (nowUTC.getTime() > dateToCompare.getTime()) {
// If we're after the 1st of June of the year, we want to show the modal if it has never been shown or if it was last shown last year.
shouldDisplay =
!lastDisplayDate ||
lastDisplayDate.getFullYear() < dateToCompare.getFullYear();
}

return {
display: shouldDisplay,
nextState: {
type: 'Date',
value: nowUTC.toISOString(),
},
Comment on lines +31 to +36
Copy link

Copilot AI Mar 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Potential logic issue: nextState is returned unconditionally, even when display is false. If the OnboardingModal component persists nextState regardless of whether the modal is actually shown, then a user who visits before June 1st would have their state saved with the current date. When June 1st arrives, lastDisplayDate.getFullYear() would equal dateToCompare.getFullYear(), so shouldDisplay would remain false and the modal would never be shown to that user. Consider returning nextState only when display is true, or returning undefined for nextState when the modal shouldn't be displayed.

Suggested change
return {
display: shouldDisplay,
nextState: {
type: 'Date',
value: nowUTC.toISOString(),
},
if (shouldDisplay) {
return {
display: true,
nextState: {
type: 'Date',
value: nowUTC.toISOString(),
},
};
}
return {
display: false,
nextState: previousState,

Copilot uses AI. Check for mistakes.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Le nextState est persisté uniquement si toutes les étapes de l'onboarding sont validés.
La proposition de copilot est une sécurité supplémentaire, mais n'apparait pas indispensable.

};
}

return (
<OnboardingModal
id="showOnboardingConversation"
items={[
{
src: illuOnboardingClean,
title: t('onboarding.modal.clean.title'),
alt: t('onboarding.modal.clean.title'),
text: t('onboarding.modal.clean.text'),
Copy link

Copilot AI Mar 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The text property is hardcoded in French directly in the component instead of using the i18n translation function t('onboarding.modal.clean.text'). The i18n key onboarding.modal.clean.text is already defined in fr.json, so this should use t('onboarding.modal.clean.text') for consistency and to support potential future localization.

Suggested change
text: t('onboarding.modal.clean.text'),
text: t('onboarding.modal.clean.text'),

Copilot uses AI. Check for mistakes.
},
]}
onDisplayRuleCheck={onDisplayRuleCheck}
/>
);
}

This file was deleted.

4 changes: 2 additions & 2 deletions conversation/frontend/src/routes/root/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import {
folderQueryOptions,
} from '~/services/queries';
import { useActionsStore } from '~/store/actions';
import MessageOnboardingModal from './components/MessageOnboardingModal';
import MessageOnboardingCleanModal from './components/MessageOnboardingCleanModal';
import { ScrollableOutlet } from './components/ScrollableOutlet';
import './index.css';

Expand Down Expand Up @@ -94,7 +94,7 @@ export function Component() {
</div>

<Suspense fallback={<LoadingScreen />}>
<MessageOnboardingModal />
<MessageOnboardingCleanModal />
</Suspense>

{!lg && (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@

import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collector;
Expand Down Expand Up @@ -484,7 +485,7 @@
}

@Override
public void searchCriteria(List<String> structures, boolean getClassesForMonoEtabOnly, Handler<Either<String, JsonObject>> handler) {

Check failure on line 488 in directory/src/main/java/org/entcore/directory/services/impl/DefaultSchoolService.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Refactor this method to reduce its Cognitive Complexity from 40 to the 15 allowed.

See more on https://sonarcloud.io/project/issues?id=edificeio_entcore&issues=AZ0gdeIWvfs54vKfgtee&open=AZ0gdeIWvfs54vKfgtee&pullRequest=971
final StringBuilder query = new StringBuilder();
query.append("MATCH (s:Structure) WHERE s.id IN {structures} ");

Expand Down Expand Up @@ -517,7 +518,43 @@
query.append("['ManualGroup','FunctionalGroup','CommunityGroup'] as groupTypes");

JsonObject params = new JsonObject().put("structures", new JsonArray(structures)).put("1d", firstLevel).put("defLoe", defaultStructureLevelsOfEducation);
neo.execute(query.toString(), params, validUniqueResultHandler(handler));
neo.execute(query.toString(), params, validUniqueResultHandler(result -> {
if (result.isRight()) {
JsonObject data = result.right().getValue();
JsonArray functions = data.getJsonArray("functions");

// Deduplicate functions by function name only, ignoring establishment code
// Format: "ESTABLISHMENT_CODE$FUNCTION_CODE$FUNCTION_NAME$JOB_CODE$DISCIPLINE"
if (functions != null && functions.size() > 0) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tout ce code modifié ne fait pas partie de ta PR, je suppose ?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mince, verifier si le code n'a pas été changé en rebasant

java.util.Map<String, String> functionMap = new java.util.TreeMap<>();
List<String> malformedFunctions = new java.util.ArrayList<>();

for (int i = 0; i < functions.size(); i++) {
String functionStr = functions.getString(i);
if (functionStr != null && !functionStr.isEmpty()) {
// Extract function name (3rd part after 2nd $)
String[] parts = functionStr.split("\\$", 4);
if (parts.length >= 3) {
String functionName = parts[2];
// TreeMap keeps alphabetical order and prevents duplicates
if (!functionMap.containsKey(functionName)) {
functionMap.put(functionName, functionStr);
}
} else {
// Keep malformed entries as-is
malformedFunctions.add(functionStr);
}
}
}

// Build final list: sorted functions + malformed entries
List<Object> sortedFunctions = new java.util.ArrayList<>(functionMap.values());
sortedFunctions.addAll(malformedFunctions);
data.put("functions", new JsonArray(sortedFunctions));
}
}
handler.handle(result);
}));
}

@Override
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,8 @@
"karma-jasmine": "~1.1.0",
"karma-jasmine-html-reporter": "^0.2.2",
"merge2": "^1.0.3",
"ode-ngjs-front": "dev",
"ode-ts-client": "dev",
"ode-ngjs-front": "develop-b2school",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

idem, aucune raison de modifier les versions dans une PR de feature

"ode-ts-client": "develop-b2school",
"rxjs": "5.4.2",
"sass-loader": "^13.0.2",
"source-map-loader": "^0.1.5",
Expand Down
8 changes: 4 additions & 4 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -60,17 +60,17 @@
<revision>6.14-develop-b2school-SNAPSHOT</revision>
<junitVersion>4.13.2</junitVersion>
<testContainerVersion>1.19.3</testContainerVersion>
<modPostgresVersion>2.1-SNAPSHOT</modPostgresVersion>
<modPostgresVersion>2.1-develop-b2school-SNAPSHOT</modPostgresVersion>
<modMongoVersion>4.1-SNAPSHOT</modMongoVersion>
<webUtilsVersion>3.3-SNAPSHOT</webUtilsVersion>
<mongodbHelperVersion>3.1-SNAPSHOT</mongodbHelperVersion>
<webUtilsVersion>3.3-develop-b2school-SNAPSHOT</webUtilsVersion>
<mongodbHelperVersion>3.1-develop-b2school-SNAPSHOT</mongodbHelperVersion>
<jodaTimeVersion>2.9.4</jodaTimeVersion>
<scramVersion>2.1</scramVersion>
<micrometerPrometheusVersion>1.11.4</micrometerPrometheusVersion>
<owaspVersion>20220608.1</owaspVersion>
<jacksonVersion>2.15.2</jacksonVersion>
<casVersion>0.3-SNAPSHOT</casVersion>
<vertxCronTimerVersion>3.0-SNAPSHOT</vertxCronTimerVersion>
<vertxCronTimerVersion>3.0-develop-b2school-SNAPSHOT</vertxCronTimerVersion>
<jnaVersion>3.0.2</jnaVersion>
<lamejbVersion>0.2.0</lamejbVersion>
<opencsvVersion>3.9</opencsvVersion>
Expand Down