esup-multi

Arborescence des pages

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.
Remarque

Documentation en cours de rédaction

Sommaire
maxLevel3
minLevel2

Modifications Client

Passage à Ionic 8

Pour le passage à Ionic 8 de nouvelles dépendances ont été installées. Pensez donc à mettre à jour vos paquets :

Bloc de code
$> cd dev/user-frontend-ionic
$> npm ci

Modifications à prendre en compte dans

...

le fichier angular.json

Vérification des mises à jour du client

Il est désormais possible d'activer un module qui permet de récupérer les informations de mises Pour activer le module de vérification de la mise à jour du client auprès du backend, et de proposer (ou imposer) la mise à jour à l'utilisateur.

...

Image Removed

...

Pour activer le module, ajouter simplement AppUpdateModule dans la liste des enabledModules (en n'oubliant pas l'import du module en haut du fichier)

Bloc de code
languagejs
firstline83
enabledModules: [
  AppUpdateModule,
  AuthModule,
  ...
]

Personnaliser l'affichage de la widget Calendar

Il est désormais possible de choisir entre 2 modes d'affichage pour la widget Calendar en page d'accueil

...

Image Removed

Vue 'slider'

...

Image Removed

Vue 'list'

, il est nécessaire d'ajouter sa configuration dans le fichier angular.json

Bloc de code
firstline216
titledev/user-frontend-ionic/angular.json
  },
  "app-update": {
    "projectType": "library",
    "root": "projects/app-update",
    "sourceRoot": "projects/app-update/src",
    "prefix": "lib",
    "architect": {
      "build": {
        "builder": "@angular-devkit/build-angular:ng-packagr",
        "options": {
          "project": "projects/app-update/ng-package.json"
        },
        "configurations": {
          "production": {
            "tsConfig": "projects/app-update/tsconfig.lib.prod.json"
          },
          "development": {
            "tsConfig": "projects/app-update/tsconfig.lib.json"
          }
        },
        "defaultConfiguration": "production"
      },
      "test": {
        "builder": "@angular-devkit/build-angular:karma",
        "options

Pour prendre en compte cette nouvelle fonctionnalité, il est nécessaire d'ajouter la variable de configuration display au module CalendarModule :

Bloc de code
firstline84
titledev/user-frontend-ionic/src/environments/environment.ts
linenumberstrue
CalendarModule.forRoot({
  numberOfEventsLimit: 3,
  display: 'list',
}),

Personnaliser l'affichage de la widget Schedule

Il est désormais possible de choisir entre 2 modes d'affichage pour la widget Schedule en page d'accueil

...

Image Removed

Vue 'slider'

...

Image Removed

Vue 'list'

Pour prendre en compte cette nouvelle fonctionnalité, il est nécessaire d'ajouter la variable de configuration display au module ScheduleModule :

Bloc de code
firstline114
titledev/user-frontend-ionic/src/environments/environment.ts
linenumberstrue
ScheduleModule.forRoot({
  nextEventsWidget: {
    numberOfEventsLimit: 2,
    numberOfDaysLimit: 7,
    display: 'slider|list'
  },
  previousWeeksInCache: 1,
  nextWeeksInCache: 2,
  managerRoles: ['schedule-manager', 'multi-admin']
}),

Modifications à prendre en compte dans le fichier angular.json

Vérification des mises à jour du client

Pour activer le module de vérification de la mise à jour du client, il est nécessaire d'ajouter sa configuration dans le fichier angular.json

Bloc de code
firstline216
titledev/user-frontend-ionic/angular.json
  },
  "app-update": {
    "projectType": "library",
    "root": "projects/app-update",
    "sourceRoot": "projects/app-update/src",
    "prefix": "lib",
    "architect": {
      "build": {
          "buildermain": "@angular-devkit/build-angular:ng-packagrprojects/app-update/src/test.ts",
          "optionstsConfig": {"projects/app-update/tsconfig.spec.json",
          "projectkarmaConfig": "projects/app-update/ng-package.jsonkarma.conf.js"
        },
      },
      "configurationslint": {
          "productionbuilder": {
  "@angular-eslint/builder:lint",
          "tsConfigoptions": "projects/app-update/tsconfig.lib.prod.json"
{
          "lintFilePatterns": [
  },
          "development": {projects/auth/**/*.ts",
            "tsConfig": "projects/app-update/tsconfig.lib.jsonauth/**/*.html"
          }]
        },
        "defaultConfiguration": "production"}
    }
  },
      "test": {
        "builder": "@angular-devkit/build-angular:karma",
        "options": {
          "main": "projects/app-update/src/test.ts",
          "tsConfig": "projects/app-update/tsconfig.spec.json",
          "karmaConfig": "projects/app-update/karma.conf.js"
        }
      },
      "lint": {
        "builder": "@angular-eslint/builder:lint",
        "options": {
          "lintFilePatterns": [
            "projects/auth/**/*.ts",
            "projects/auth/**/*.html"
          ]
        }
      }
    }
  },

Reconstruction des modules Angular

Pour prendre en compte le nouveau module app-update, mais également les options d'affichage dans les widgets calendar et schedule, il est nécessaire de relancer le build des modules concernés :

Bloc de code
$> npm run module:build-all

Modifications à prendre en compte dans les fichiers environment*.ts

Vérification des mises à jour du client

Il est désormais possible d'activer un module qui permet de récupérer les informations de mises à jour du client auprès du backend, et de proposer (ou imposer) la mise à jour à l'utilisateur.

Image Added

Image Added


Pour activer le module, ajouter simplement AppUpdateModule dans la liste des enabledModules (en n'oubliant pas l'import du module en haut du fichier)

Bloc de code
languagejs
firstline83
enabledModules: [
  AppUpdateModule,
  AuthModule,
  ...
]

Personnaliser l'affichage de la widget Calendar

Il est désormais possible de choisir entre 2 modes d'affichage pour la widget Calendar en page d'accueil

Image Added

Vue 'slider'

Image Added

Vue 'list'

Pour prendre en compte cette nouvelle fonctionnalité, il est nécessaire d'ajouter la variable de configuration display au module CalendarModule :

Bloc de code
firstline84
titledev/user-frontend-ionic/src/environments/environment.ts
linenumberstrue
CalendarModule.forRoot({
  numberOfEventsLimit: 3,
  display: 'list',
}),

Personnaliser l'affichage de la widget Schedule

Il est désormais possible de choisir entre 2 modes d'affichage pour la widget Schedule en page d'accueil

Image Added

Vue 'slider'

Image Added

Vue 'list'

Pour prendre en compte cette nouvelle fonctionnalité, il est nécessaire d'ajouter la variable de configuration display au module ScheduleModule :

Bloc de code
firstline114
titledev/user-frontend-ionic/src/environments/environment.ts
linenumberstrue
ScheduleModule.forRoot({
  nextEventsWidget: {
    numberOfEventsLimit: 2,
    numberOfDaysLimit: 7,
    display: 'slider|list'
  },
  previousWeeksInCache: 1,
  nextWeeksInCache: 2,
  managerRoles: ['schedule-manager', 'multi-admin']
}),

Modifications à prendre en compte dans les fichiers de theming

Prise en compte des images SVG dans les Widgets

Il est désormais possible d'ajouter une image au format SVG à un widget au travers de l'interface de saisie de Directus.

...

Dans le fichier widget-external-feature.component.scss, ajoutez le bloc suivant au sein du bloc .feature-title :

Bloc de code
firstline63
titledev/user-frontend-ionic/src/theme/app-theme/styles/features/widget-external-feature.component.scss
linenumberstrue
app-custom-icon {
  vertical-align: text-top;
}

...

Bloc de code
firstline57
titledev/user-frontend-ionic/src/theme/app-theme/styles/features/widget-internal-feature.component.scss
linenumberstrue
.feature-title {
  padding: 1rem 1rem 0.2rem;

  app-custom-icon {
    vertical-align: text-top;
  }
}

Personnaliser l'affichage de la widget Calendar

Le fichier dev/user-frontend-ionic/src/theme/app-theme-dist/styles/calendar/calendar.component.scss a été revu complètement pour gérer 2 blocs .calendar-list-style ou .calendar-slider-style pour pouvoir prendre en compte les 2 types d'affichage possible pour la widget

Bloc de code
languagecss
titledev/user-frontend-ionic/src/theme/app-theme/styles/calendar/calendar.component.scss
linenumberstrue
ndar.calendar-list-style {

  display: block;

  .ion-padding {
    padding-top: 5px !important;
  }

  .events-container {
    padding: 0;
  }

  .event {
    align-items: center;
    padding: 0.5rem 0;
  }

  hr {
    border-top: 2px dashed var(--ion-color-primary-contrast);
    margin: 0;
  }

  .event-part ion-text {
    display: block
  }

  .event-part-date {
    flex-grow: 1;
    text-align: center;
    border-right: 5px solid var(--ion-color-primary-contrast);
    margin-right: 5px;
  }

  .event-part-info {
    flex-grow: 3;
  }

  .light-font-color{
    color: var(--app-font-color-for-dark-background-from-cms) !important;

    hr {
      border-top: 2px dashed var(--app-font-color-for-dark-background-from-cms);
      margin: 0;
    }

    .event-part-date {
      border-right: 5px solid var(--app-font-color-for-dark-background-from-cms);
    }
  }

  .dark-font-color{
    color: var(--app-font-color-for-light-background-from-cms) !important;

    hr {
      border-top: 2px dashed var(--app-font-color-for-light-background-from-cms);
    }

    .event-part-date {
      border-right: 5px solid var(--app-font-color-for-light-background-from-cms);
    }
  }

}

.calendar-slider-style {
  display: block;

  ion-card {
    scroll-snap-align: center;
  }

  ion-card.slider-theme-color {
    box-shadow: var(--app-border-no-box-shadow);
    //border: var(--app-border-width-7) solid var(--app-border-color-primary);
    background-color: var(--ion-color-tertiary);
  }

  ion-card-content {
    padding: 0.7rem 0;
    height: 100%;
    display: flex;
    flex-direction: column;
  }

  .events-container {
    padding: .5rem 0 0;
    display: grid;
    gap: 1rem;
    grid-auto-flow: column;
    grid-template-columns: 10px;
    grid-auto-columns: 85%;
    overflow-x: auto;
    scrollbar-width: none;
    scroll-snap-type: x mandatory;
    overscroll-behavior-x: contain;

    &::-webkit-scrollbar {
      display: none;
    }

    &::before,
    &::after {
      content: '';
      width: 10px;
    }

    .event-day-hour {
      display: flex;
      flex-direction: row;
      border-left-width: 4px;
      border-left-style: solid;
      align-items: center;
      flex-wrap: nowrap;
      border-color: var(--ion-color-secondary);

      .hour {
        padding-left: 1rem;
        display: block;
      }

      .day {
        padding-left: 1rem;
        display: block;

        ion-text {
          display: block;
        }
      }
    }
  }

  .card-labels {
    margin-right: 0.6rem;
  }

  .card-labels-icons {
    margin-right: 0.3rem;
  }

  .event-label {
    padding: 1rem 1rem 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  .event-additional {
    display: flex;
    padding: 0.7rem 0.5rem 0;
    justify-content: space-evenly;
    flex-wrap: wrap;
    flex-grow: 2;
    align-items: center;

    ion-row:last-child {
      margin-right: 0;
    }
  }

  .slider-font-color{
    color: var(--app-font-fix-light-color) !important;
  }

  .light-font-color{
    color: var(--app-font-color-for-dark-background-from-cms) !important;
  }

  .dark-font-color{
    color: var(--app-font-color-for-light-background-from-cms) !important;
  }

}

Personnaliser l'affichage de la widget Schedule

Le fichier dev/user-frontend-ionic/src/theme/app-theme-dist/styles/schedule/next-events.component.scss a été revu complètement pour gérer 2 blocs .next-events-list-style ou .next-events-slider-style pour pouvoir prendre en compte les 2 types d'affichage possible pour la widget

Bloc de code
languagecss
titledev/user-frontend-ionic/src/theme/app-theme-dist/styles/schedule/next-events.component.scss
linenumberstrue
collapsetrue
.next-events-list-style {

  ion-card {
    overflow: visible;
    box-shadow: var(--app-border-no-box-shadow);
    border-radius: var(--app-border-no-radius);
    margin-top: 0 !important;
    margin-bottom: 0 !important;
    background: transparent;
  }

  .last-card {
    padding-bottom: 0.8rem !important;
  }

  .events-container {
    padding-left: 1rem !important;
    padding-bottom: 0 !important;
  }

  .dashed-line{
    position: absolute;
    top: 0.77rem;
    left: 0;
    width: 2rem;
    height: 100%;
    background-image: linear-gradient(rgb(255, 255, 255) 43%, rgba(255, 255, 255, 0) 0%);
    background-position: left;
    background-size: 0.13rem 0.9rem;
    background-repeat: repeat-y;
    overflow: visible;
    z-index: 10 !important;
  }

  .event-day {
    position: relative;
    padding-bottom: 0.5rem !important;
    padding-top: 0.5rem !important;
    padding-left: 0 !important;
    z-index: 12;
  }

  ion-card-header {
    padding-top: 0;
    padding-left: 1.2rem;
    padding-bottom: 0;
  }

  ion-card-content {
    padding-left: 2.3rem;
  }

  .circle-top-left {
    position: absolute;
    top: 0.30rem;
    left: -0.18rem;
    width: 0.5rem;
    height: 0.5rem;
    background-color: var(--ion-color-dark-contrast);
    border-radius: 50%;
  }

  .card-labels {
    margin-right: 0.6rem;
  }
  .card-labels-icons {
    margin-right: 0.3rem;
  }

  .light-font-color {
    color: var(--app-font-color-for-dark-background-from-cms) !important;
  }

  .dark-font-color {
    color: var(--app-font-color-for-light-background-from-cms) !important;
  }

}

.next-events-slider-style {
  display: block;

  ion-card {
    scroll-snap-align: center;
  }

  ion-card.slider-theme-color {
    box-shadow: var(--app-border-no-box-shadow);
    //border: var(--app-border-width-7) solid var(--app-border-color-primary);
    background-color: var(--ion-color-tertiary);
  }

  ion-card-content {
    padding: 0.7rem 0;
    height: 100%;
    display: flex;
    flex-direction: column;
  }

  .empty-container {
    padding-left: 1rem !important;
    padding-bottom: 0 !important;
  }

  .events-container {
    padding: .5rem 0 0;
    display: grid;
    gap: 1rem;
    grid-auto-flow: column;
    grid-template-columns: 10px;
    grid-auto-columns: 85%;
    overflow-x: auto;
    scrollbar-width: none;
    scroll-snap-type: x mandatory;
    overscroll-behavior-x: contain;

    &::-webkit-scrollbar {
      display: none;
    }

    &::before,
    &::after {
      content: '';
      width: 10px;
    }

    .event-day-hour {
      display: flex;
      flex-direction: row;
      border-left-width: 4px;
      border-left-style: solid;
      align-items: center;
      flex-wrap: nowrap;

      .hour {
        padding-left: 1rem;
        display: block;
      }

      .day {
        padding-left: 1rem;
        display: block;

        ion-text {
          display: block;
        }
      }
    }
  }

  .card-labels {
    margin-right: 0.6rem;
  }

  .card-labels-icons {
    margin-right: 0.3rem;
  }

  .event-label {
    padding: 1rem 1rem 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;

  }

  .event-additional {
    display: flex;
    padding: 0.2rem 0.5rem 0.2rem 2rem;
    justify-content: flex-start;
    flex-wrap: wrap;
    flex-grow: 2;
    align-items: center;

    ion-row:last-child {
      margin-right: 0;
    }
  }

  .slider-font-color{
    color: var(--app-font-fix-light-color) !important;
  }

  .light-font-color {
    color: var(--app-font-color-for-dark-background-from-cms) !important;
  }

  .dark-font-color {
    color: var(--app-font-color-for-light-background-from-cms) !important;
  }

}

Décalage du bouton 'Lire plus' sur iOS

Il existait un décalage sur le bouton 'Lire plus' sur les flux d'actualités sur iOS. Pour corriger ce décalage le CSS a été revu.

...

Bloc de code
languagecss
firstline80
titledev/user-frontend-ionic/src/theme/app-theme/styles/rss/rss.page.scss
linenumberstrue
.link-button {
  min-height: auto;
  margin: 0 0 0.5rem;
}

Migration vers Ionic 8

Certains composants ont évolué avec la nouvelle version 8 d'Ionic. Les styles ont donc dû être adaptés pour que l'affichage reste inchangé au niveau de l'interface.

...

Bloc de code
languagecss
firstline40
titledev/user-frontend-ionic/src/theme/app-theme/styles/schedule/select-user.component.scss
linenumberstrue
ion-input {
  --highlight-color: var(--app-font-color-primary);
}

dev/user-frontend-ionic/src/theme/app-theme-dist/styles/static-pages/static-pages-widget.component.scss

Un nouveau bloc app-custom-icon a été ajouté

Bloc de code
languagecss
firstline40
titledev/user-frontend-ionic/src/theme/app-theme/styles/static-pages/static-pages-widget.component.scss
linenumberstrue
ion-item {
  padding-left: 0.7rem;
}

app-custom-icon {
  // apply the same style as ion-icon
  margin-inline-end: 32px;
}

Modifications à prendre en compte dans les fichiers de traduction

Personnaliser l'affichage de la widget Schedule

Bloc de code
firstline44
titledev/user-frontend-ionic/src/theme/app-theme-dist/i18n/schedule/en.json
"NEXT_EVENTS": {
  "NO_EVENTS": "No courses soon",
  "LIMIT_TEACHERS": "others"
}
Bloc de code
firstline44
titledev/user-frontend-ionic/src/theme/app-theme-dist/i18n/schedule/en.json
"NEXT_EVENTS": {
  "NO_EVENTS": "Pas de cours prochainement"
  "LIMIT_TEACHERS": "autres"
}

Utiliser la nouvelle fonctionnalité de détection des mises à jour du client

Le module qui vérifie les mises à jour du client disponibles affiche des alertes. Il est possible de traduire le texte de ces alertes.

...

Bloc de code
titledev/user-frontend-ionic/src/theme/app-theme/i18n/app-update/fr.jsonupdate/fr.json
{
  "MANDATORY_UPDATE_ALERT": {
    "HEADER": "Mise à jour requise",
    "MESSAGE": "Une nouvelle version de l’application est disponible et doit être installée pour continuer.",
    "UPDATE_NOW": "Mettre à jour"
  },{
  "MANDATORYOPTIONAL_UPDATE_ALERT": {
    "HEADER": "Mise à jour requisedisponible",
    "MESSAGE": "Une nouvelle version de l’application est disponible. et doit être installée pour continuer.Souhaitez-vous la mettre à jour maintenant ?",
    "UPDATE_NOW": "Mettre à jour",
  },
  "OPTIONAL_UPDATE_ALERTLATER": "Plus {
    "HEADER": "Mise à jour disponible",
    "MESSAGE": "Une nouvelle version de l’application est disponible. Souhaitez-vous la mettre à jour maintenant ?",
    "UPDATE_NOW": "Mettre à jour",
    "UPDATE_LATER": "Plus tard"
  }
}

Modifications Backend

main

=> Ajout du fichier client-infos.json à reprendre à partir du fichier .dist

µservice Map

tard"
  }
}


Modifications Backend

main

Si vous avez choisi d'activer le module qui permet de récupérer les informations de mises à jour du client auprès du backend, il vous faudra alors ajouter un fichier client-infos.json à la racine du microservice.

Bloc de code
titleclient-infos.json
{
  "storeVersion": "1.0.1",
  "minVersionRequired": "1.0.0",
  "playStoreUrl": "https://play.google.com/store/apps/details?id=org.monUniversite.monApplication",
  "appStoreUrl": "https://apps.apple.com/fr/app/monUniversite/idxxxxxxxxx"
}
  • storeVersion : la version actuellement disponible sur les stores
  • minVersionRequired : la version minimum du client requise par les utilisateurs garante du bon fonctionnement avec le backend actuellement déployé
  • playStoreUrl : l'url de l'application cliente sur le Play Store de Google
  • appStoreUrl : l'url de l'application cliente sur l'App Store d'Apple

µservice Map

Le fichier => Suppression du fichier dev/user-backend-nest/microservices/map/src/map/map-data.json du repository et ajout de ce dernier au fichier .gitignore

Ajout d'un fichier .dist avec des données épurées

 contenait les informations sur les POI de l'Université de Lorraine.
Le fichier a donc été ajouté au .gitignore et un nouveau fichier générique map-data.json.dist a été ajouté à la place.

Avertissement

Du fait de l'ajout du fichier dans le .gitignore, ce dernier se retrouve supprimé au moment du pull GIT. Pensez donc bien à sauvegarder votre fichier map-data.json avant de faire une pull request sur votre branche

Avertissement

Entraine une suppression du fichier en local au moment de la pull request => Bien enregistrer les données au préalable

Modifications Serveur Mocks

Dans le cadre d'une installation hors localhost (ex: serveur de demo), une variable d'environnement PUBLIC_URL a été ajoutée au fichier .env, pour permettre de préciser l'url vers les sources statiques du serveur

...