From bbd23ce030e0223ed31533cc8dd349ce28c34a4d Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Tue, 25 Feb 2025 13:59:05 +0100
Subject: [PATCH 01/27] correction grammaire

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 278519f..8aad2df 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ la connexion est prevue pour se connecter au site "https://gitlab-forge.din.deve
 
 ## But du projet :
 
-le but principal est de d'obtenire un tableau de bord des projets des différent dépots disponible afin d'en extraire des données afin de réaliser un tableau de bord des suivie des différent projet mener par la DREAL Pays De Le Loire Datalab.
+le but principal est de d'obtenir un tableau de bord des projets des différent dépots disponible afin d'en extraire des données afin de réaliser un tableau de bord des suivie des différent projet mener par la DREAL Pays De Le Loire Datalab.
 
 
 
-- 
GitLab


From 35a33ef81033e6da2310ca0a2f46fa47b7c52809 Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Tue, 25 Feb 2025 14:00:51 +0100
Subject: [PATCH 02/27] =?UTF-8?q?fix:=20les=20MergeRequest=20sont=20mainte?=
 =?UTF-8?q?nant=20pris=20en=20compte=20uniquement=20si=20l'action=20est=20?=
 =?UTF-8?q?accept=C3=A9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 dev/gitlab_classique.R | 22 ++++++++++++++++++----
 dev/gitlab_forge.R     | 24 +++++++++++++++++++-----
 2 files changed, 37 insertions(+), 9 deletions(-)

diff --git a/dev/gitlab_classique.R b/dev/gitlab_classique.R
index bfb98f4..023964f 100644
--- a/dev/gitlab_classique.R
+++ b/dev/gitlab_classique.R
@@ -129,10 +129,24 @@ get_gitlab_events <- function(base_url, project_id, private_token) {
   data <- data %>%
     mutate(
       project_name = as.character(project_id),
-      type = if_else((is.null(target_type) | target_type == "") | as.character(target_type) == "Issue" | as.character(action_name) == "joined", # remplecer par  |  as.ch(target-type)=="Issue"
-                     as.character(action_name),
-                     as.character(target_type)),
-      message = note.body,
+
+      type = case_when(
+        is.null(target_type) | target_type == "" ~ as.character(action_name),
+        as.character(action_name) == "joined" ~ as.character(action_name),
+        TRUE ~ as.character(target_type)
+      ),
+
+      message = case_when(
+        # Cas spécifique : MergeRequest avec action_name == "accepted"
+        as.character(target_type) == "MergeRequest" & as.character(action_name) == "accepted" ~ as.character(target_title),
+
+        # Cas général : autres MergeRequest ou WikiPage::Meta
+        as.character(target_type) %in% c("WikiPage::Meta") ~ as.character(target_title),
+
+        # Si ce n'est pas un cas spécial, garder note.body
+        TRUE ~ as.character(note.body)
+      ),
+
       updated_at = created_at,
       author = author.username
     ) %>%
diff --git a/dev/gitlab_forge.R b/dev/gitlab_forge.R
index 87158a1..6955bc6 100644
--- a/dev/gitlab_forge.R
+++ b/dev/gitlab_forge.R
@@ -170,13 +170,27 @@ get_gitlab_events <- function(base_url, project_id, private_token) {
   data <- data %>%
     mutate(
       project_name = as.character(project_id),
-      type = if_else((is.null(target_type) | target_type == "") | as.character(target_type) == "Issue" | as.character(action_name) == "joined", # remplecer par  |  as.ch(target-type)=="Issue"
-                     as.character(action_name),
-                     as.character(target_type)),
-      message = ifelse(as.character(target_type) == "WikiPage::Meta",as.character(target_title),as.character(note.body)),
+
+      type = case_when(
+        is.null(target_type) | target_type == "" ~ as.character(action_name),
+        as.character(action_name) == "joined" ~ as.character(action_name),
+        TRUE ~ as.character(target_type)
+      ),
+
+      message = case_when(
+        # Cas spécifique : MergeRequest avec action_name == "accepted"
+        as.character(target_type) == "MergeRequest" & as.character(action_name) == "accepted" ~ as.character(target_title),
+
+        # Cas général : autres MergeRequest ou WikiPage::Meta
+        as.character(target_type) %in% c("WikiPage::Meta") ~ as.character(target_title),
+
+        # Si ce n'est pas un cas spécial, garder note.body
+        TRUE ~ as.character(note.body)
+      ),
+
       updated_at = created_at,
       author = author.username
-    ) %>%
+    )%>%
     left_join(name_gitlab, by = c("project_name" = "id")) %>%
     mutate(project_name = name) %>%
     select(-name)
-- 
GitLab


From 4883457e9bd76cd44513747419c725e8ec47392f Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Thu, 6 Mar 2025 16:30:01 +0100
Subject: [PATCH 03/27] ajout des groupes

---
 dev/github_extraire.R  |  7 ++++++-
 dev/gitlab_classique.R | 10 ++++++----
 dev/gitlab_forge.R     | 22 +++++++++++++++++-----
 3 files changed, 29 insertions(+), 10 deletions(-)

diff --git a/dev/github_extraire.R b/dev/github_extraire.R
index e8763ce..167a81e 100644
--- a/dev/github_extraire.R
+++ b/dev/github_extraire.R
@@ -152,7 +152,12 @@ get_github_topics <- function(repo) {
                             )
  combined_data <- combined_data %>%
    left_join(topics_list, by = "project_name") %>%
-   mutate(origine = "Github") %>%
+   mutate(origine = "Github",
+          groupe = case_when(
+            str_detect(project_name, "parcours_r") ~ "r-formation",
+            str_detect(project_name, "spyrales") ~ "spyrales",
+            TRUE ~ "autre"
+          )) %>%
    unique()
 
 # Afficher les premières lignes du tableau combiné
diff --git a/dev/gitlab_classique.R b/dev/gitlab_classique.R
index 023964f..cd71b90 100644
--- a/dev/gitlab_classique.R
+++ b/dev/gitlab_classique.R
@@ -7,7 +7,7 @@ library(gitlabr)
 
 set_gitlab_connection(
   gitlab_url = "https://gitlab.com" ,
-  private_token = Sys.getenv("GITLAB_PAT")
+  private_token = Sys.getenv("GITLAB_COM_TOKEN")
 )
 project_ids <- c(41600697, 19859695, 49118792, 21138017, 44145525, 18441361, 17610613,18439010)
 
@@ -27,12 +27,12 @@ get_project_name <- function(base_url, project_id, private_token) {
 # Boucle pour récupérer tous les noms de projets
 name_gitlab <- bind_rows(lapply(project_ids, get_project_name,
                                 base_url = "https://gitlab.com",
-                                private_token = Sys.getenv("GITLAB_PAT")))
+                                private_token = Sys.getenv("GITLAB_COM_TOKEN")))
 name_gitlab$id <- as.character(name_gitlab$id)
 
 # Variables pour l'API GitLab
 base_url <- "https://gitlab.com"
-private_token <- Sys.getenv("GITLAB_PAT")  # Récupération du token depuis Renviron
+private_token <- Sys.getenv("GITLAB_COM_TOKEN")  # Récupération du token depuis Renviron
 
 
 # Fonction pour gérer la pagination de l'API GitLab avec une limite stricte à 160 pages, en vérifiant la présence de pages suivantes
@@ -242,7 +242,9 @@ all_data_gitlab <- all_data_gitlab %>%
   filter(!(is.na(all_data_gitlab$type) | is.na(all_data_gitlab$message)) | all_data_gitlab$type == "joined" | all_data_gitlab$type == "WikiPage::Meta")
 all_data_gitlab <- bind_rows(fg,all_data_gitlab)
 all_data_gitlab <- all_data_gitlab %>%
-  mutate(origine ="Gitlab")
+  mutate(origine ="Gitlab",
+         groupe = "RDES_DREAL")
 all_data_gitlab <- left_join(all_data_gitlab, projects_topics, by = c("project_name" = "id"))
+
 # save.image("gitlab.RData")
 save(all_data_gitlab, file = "gitlab.RData")
diff --git a/dev/gitlab_forge.R b/dev/gitlab_forge.R
index 6955bc6..ff2f641 100644
--- a/dev/gitlab_forge.R
+++ b/dev/gitlab_forge.R
@@ -7,7 +7,7 @@ library(gitlabr)
 
 set_gitlab_connection(
   gitlab_url = "https://gitlab-forge.din.developpement-durable.gouv.fr" ,
-  private_token = Sys.getenv("GITLAB_COM_TOKEN")
+  private_token = Sys.getenv("GITLAB_PAT")
 )
 
 response <- data.frame()
@@ -15,7 +15,7 @@ response <- data.frame()
 buildres <- function(i){
   res_proj100 <- GET(
     "https://gitlab-forge.din.developpement-durable.gouv.fr/api/v4/groups/1013/projects",
-    add_headers(`PRIVATE-TOKEN` = Sys.getenv("GITLAB_COM_TOKEN")),
+    add_headers(`PRIVATE-TOKEN` = Sys.getenv("GITLAB_PAT")),
     query = list(
       include_subgroups = "true",
       per_page = 100,
@@ -38,7 +38,7 @@ repeat {
 }
 # response <- GET(
 #   "https://gitlab-forge.din.developpement-durable.gouv.fr/api/v4/groups/1013/projects",
-#   add_headers(`PRIVATE-TOKEN` = Sys.getenv("GITLAB_COM_TOKEN")),
+#   add_headers(`PRIVATE-TOKEN` = Sys.getenv("GITLAB_PAT")),
 #   query = list(
 #     include_subgroups = "true",
 #     per_page = 1000
@@ -68,12 +68,12 @@ get_project_name <- function(base_url, project_id, private_token) {
 # Boucle pour récupérer tous les noms de projets
 name_gitlab <- bind_rows(lapply(project_ids, get_project_name,
                                 base_url = "https://gitlab-forge.din.developpement-durable.gouv.fr",
-                                private_token = Sys.getenv("GITLAB_COM_TOKEN")))
+                                private_token = Sys.getenv("GITLAB_PAT")))
 name_gitlab$id <- as.character(name_gitlab$id)
 
 # Variables pour l'API GitLab
 base_url <- "https://gitlab-forge.din.developpement-durable.gouv.fr"
-private_token <- Sys.getenv("GITLAB_COM_TOKEN")  # Récupération du token depuis Renviron
+private_token <- Sys.getenv("GITLAB_PAT")  # Récupération du token depuis Renviron
 
 
 # Fonction pour gérer la pagination de l'API GitLab avec une limite stricte à 160 pages, en vérifiant la présence de pages suivantes
@@ -278,10 +278,22 @@ projects_topics <- bind_rows(lapply(project_ids, get_project_topics, base_url =
 
 # Récupérer les données pour tous les projets
 all_data_forge <- get_data_from_multiple_projects(base_url, project_ids, private_token)
+
 all_data_forge <- all_data_forge %>%
   filter(!(is.na(all_data_forge$type) | is.na(all_data_forge$message)) | all_data_forge$type == "joined"|all_data_forge$type == "WikiPage::Meta")
 all_data_forge <- bind_rows(ff,all_data_forge)
 all_data_forge <- all_data_forge %>%
   mutate(origine ="Gitlab_Forge")
 all_data_forge <- left_join(all_data_forge, projects_topics, by = c("project_name" = "id"))
+
+#data.frame avec les groupes et le nom pour left join -----
+response_df <- data.frame(
+  name = response$name,
+  groupe = response$namespace$path
+)
+# Joindre les deux jeux de données
+all_data_forge <- all_data_forge %>%
+  left_join(response_df, by = c("project_name" = "name"))
+
+# sauvegarde du jeu de donnée -----
 save(all_data_forge, file = "gitlab_forge.RData")
-- 
GitLab


From 4774c2023c846b424735eb7641eb880ab58b9993 Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Fri, 7 Mar 2025 15:18:09 +0100
Subject: [PATCH 04/27] ajout du package qui permet de faire la recherche de
 mot

---
 dev/github_extraire.R | 1 +
 1 file changed, 1 insertion(+)

diff --git a/dev/github_extraire.R b/dev/github_extraire.R
index 167a81e..45ac033 100644
--- a/dev/github_extraire.R
+++ b/dev/github_extraire.R
@@ -3,6 +3,7 @@ library(httr)
 library(jsonlite)
 library(dplyr)
 library(DT)
+library(stringr)
 # Récupérer le token GitHub depuis l'environnement
 
 extract_before_at <- function(email) {
-- 
GitLab


From f7a261f70f907a987934826013d146e09d606bde Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Fri, 7 Mar 2025 15:19:08 +0100
Subject: [PATCH 05/27] =?UTF-8?q?certain=20projet=20on=20=C3=A9t=C3=A9=20r?=
 =?UTF-8?q?enomme=20et=20dans=20certain=20evenement=20git=20il=20garde=20l?=
 =?UTF-8?q?'ancien=20donc=20si=20il=20ne=20trouve=20pas=20le=20projet=20il?=
 =?UTF-8?q?=20test=20avec=20le=20nom=20d'origine?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 dev/gitlab_forge.R | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/dev/gitlab_forge.R b/dev/gitlab_forge.R
index ff2f641..3ac686a 100644
--- a/dev/gitlab_forge.R
+++ b/dev/gitlab_forge.R
@@ -286,14 +286,24 @@ all_data_forge <- all_data_forge %>%
   mutate(origine ="Gitlab_Forge")
 all_data_forge <- left_join(all_data_forge, projects_topics, by = c("project_name" = "id"))
 
-#data.frame avec les groupes et le nom pour left join -----
+#data.frame avec les groupes et le nom pour left join-----
 response_df <- data.frame(
   name = response$name,
+  name2 = response$path, #name2 car si le projet à changé de nom alors la jointure ne se fait plus par le nom mais par le passage d'origine ce qui corrige grandement le manque d'information
   groupe = response$namespace$path
 )
 # Joindre les deux jeux de données
 all_data_forge <- all_data_forge %>%
-  left_join(response_df, by = c("project_name" = "name"))
-
-# sauvegarde du jeu de donnée -----
+  left_join(response_df, by = c("project_name" = "name")) # Faire un premier left_join() sur la colonne name
+all_data_forge <- all_data_forge %>% # Compléter les lignes non appariées avec un second left_join() sur la colonne name2
+  left_join(
+    response_df %>%
+      select(name2, groupe),  # On ne conserve que les colonnes utiles
+    by = c("project_name" = "name2"),
+    na_matches = "never" # Empêche l'association des NA
+  ) %>%
+  mutate(groupe = coalesce(groupe.x, groupe.y)) %>%  # Priorité au 1er join
+  select(-groupe.x, -groupe.y)  # Nettoyage des colonnes temporaires
+
+# sauvegarde du jeu de donnée-----
 save(all_data_forge, file = "gitlab_forge.RData")
-- 
GitLab


From 0613c724a35700654b419890b409c4b2dad30657 Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Thu, 13 Mar 2025 10:12:25 +0100
Subject: [PATCH 06/27] les groupes sont dans les fichiers d'extraction
 maintenants

---
 global.R | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/global.R b/global.R
index d35e2cb..a852564 100644
--- a/global.R
+++ b/global.R
@@ -28,12 +28,7 @@ load("date_MAJ.RData")
 
 all_data <- bind_rows(all_data_gitlab, all_data_forge, combined_data)
 all_data$updated_at <- as.POSIXct(all_data$updated_at, format = ("%Y-%m-%dT%H:%M:%S"))
-all_data <- all_data %>% mutate(message = paste0(type,sep = "  : ",message),
-                                categorie = case_when(
-                                  str_detect(project_name, "parcours_r") ~ "r-formation",
-                                  str_detect(project_name, "spyrales") ~ "spyrales",
-                                  TRUE ~ "autre"
-                                ))
+all_data <- all_data %>% mutate(message = paste0(type,sep = "  : ",message))
 # transformation author ----
 all_data$author <- all_data$author %>%
   tolower() %>%
@@ -51,7 +46,7 @@ traduction <- c(
   "WikiPage::Meta" = "Documentation",
   "joined" = "Gestion de projet" ,
   "WorkItem" = "Gestion de projet" ,
-  "MergeRequest" = "Code" ,
+  "MergeRequest" = "Code" , # ajouter un "item" merge ?
   "Milestone" = "Gestion de projet"
 )
 all_data <- all_data %>% dplyr::mutate(re_code = dplyr::recode(type , !!!traduction))
-- 
GitLab


From 0266e07ff454b2b37150094165168eaaa16d2aa9 Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Thu, 13 Mar 2025 10:13:29 +0100
Subject: [PATCH 07/27] =?UTF-8?q?changement=20de=20r=C3=A9cup=C3=A9ration,?=
 =?UTF-8?q?=20maintenant=20on=20gader=20que=20les=20id=20en=20nombre=20et?=
 =?UTF-8?q?=20ensuite=20on=20join=20grace=20=C3=A0=20response=20qui=20?=
 =?UTF-8?q?=C3=A0=20beaucoup=20d'info=20comme=20le=20nom,=20le=20groupe=20?=
 =?UTF-8?q?et=20le=20topics?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 dev/gitlab_forge.R | 59 ++++++++++------------------------------------
 1 file changed, 13 insertions(+), 46 deletions(-)

diff --git a/dev/gitlab_forge.R b/dev/gitlab_forge.R
index 3ac686a..bafacb2 100644
--- a/dev/gitlab_forge.R
+++ b/dev/gitlab_forge.R
@@ -155,7 +155,7 @@ get_gitlab_issues <- function(base_url, project_id, private_token) {
   data <- get_all_pages(api_url, private_token)
   data <- data %>%
     mutate(
-      project_name = extract_project_name(web_url),
+      project_name = as.character(project_id),
       type = "issue",
       message = as.character(title),
       author = author.username
@@ -191,7 +191,7 @@ get_gitlab_events <- function(base_url, project_id, private_token) {
       updated_at = created_at,
       author = author.username
     )%>%
-    left_join(name_gitlab, by = c("project_name" = "id")) %>%
+    # left_join(name_gitlab, by = c("project_name" = "id")) %>%
     mutate(project_name = name) %>%
     select(-name)
   return(data %>% select(project_name, type, message, updated_at, author))
@@ -212,29 +212,6 @@ get_data_from_multiple_projects <- function(base_url, project_ids, private_token
   return(bind_rows(all_data))
 }
 
-get_project_topics <- function(base_url, project_id, private_token) {
-  api_url <- paste0(base_url, "/api/v4/projects/", project_id)
-  response <- GET(api_url, add_headers("PRIVATE-TOKEN" = private_token))
-
-  if (status_code(response) == 200) {
-    project_info <- fromJSON(content(response, "text", encoding = "UTF-8"), flatten = TRUE)
-    return(data.frame(
-      id = as.character(project_info$name),
-      topics = paste(project_info$topics, collapse = ", "),  # Combine les topics en une chaîne de caractères
-      stringsAsFactors = FALSE
-    ))
-  } else {
-    warning("Impossible de récupérer les topics pour le projet ID: ", project_id, " - Code: ", status_code(response))
-    return(data.frame(
-      id = project_id,
-      topics = NA,
-      stringsAsFactors = FALSE
-    ))
-  }
-}
-extract_before_at <- function(email) {
-  sub("@.*", "", email)
-}
 ###########################################################
 process_projects <- function(project_ids) {
   result_list <- lapply(project_ids, function(project_id) {
@@ -265,17 +242,14 @@ process_projects <- function(project_ids) {
 
 final_result <- process_projects(project_ids)
 final_result$project_id <- as.character(final_result$project_id)
-final_result <- final_result %>% left_join(name_gitlab, by = c("project_id" = "id")) %>%
-  mutate(project_name = name, type = "commit") %>%
-  select(-name)
-final_result <- final_result %>% mutate(author = extract_before_at(committer_email))
-final_result <- final_result %>% rename( "updated_at" = 'committed_date'  )
+# final_result <- final_result %>% left_join(name_gitlab, by = c("project_id" = "id")) %>%
+#   mutate(project_name = name, type = "commit") %>%
+#   select(-name)
+final_result <- final_result %>% mutate(author = committer_email,type = "commit")
+final_result <- final_result %>% rename( "updated_at" = 'committed_date', "project_name" = 'project_id'  )
 ff <- final_result %>% filter(is_duplicate == FALSE) %>% select(project_name,type , message ,updated_at,author)
 ###########################################################
 
-# Récupérer les topics pour tous les projets
-projects_topics <- bind_rows(lapply(project_ids, get_project_topics, base_url = base_url, private_token = private_token))
-
 # Récupérer les données pour tous les projets
 all_data_forge <- get_data_from_multiple_projects(base_url, project_ids, private_token)
 
@@ -284,26 +258,19 @@ all_data_forge <- all_data_forge %>%
 all_data_forge <- bind_rows(ff,all_data_forge)
 all_data_forge <- all_data_forge %>%
   mutate(origine ="Gitlab_Forge")
-all_data_forge <- left_join(all_data_forge, projects_topics, by = c("project_name" = "id"))
 
 #data.frame avec les groupes et le nom pour left join-----
 response_df <- data.frame(
+  id = as.character(response$id),
   name = response$name,
-  name2 = response$path, #name2 car si le projet à changé de nom alors la jointure ne se fait plus par le nom mais par le passage d'origine ce qui corrige grandement le manque d'information
-  groupe = response$namespace$path
+  groupe = response$namespace$name,
+  topics = sapply(response$topics, function(x) paste(x, collapse = ", ")) # on degroupe et regroupe ?? mais ca fonctionne
 )
 # Joindre les deux jeux de données
 all_data_forge <- all_data_forge %>%
-  left_join(response_df, by = c("project_name" = "name")) # Faire un premier left_join() sur la colonne name
-all_data_forge <- all_data_forge %>% # Compléter les lignes non appariées avec un second left_join() sur la colonne name2
-  left_join(
-    response_df %>%
-      select(name2, groupe),  # On ne conserve que les colonnes utiles
-    by = c("project_name" = "name2"),
-    na_matches = "never" # Empêche l'association des NA
-  ) %>%
-  mutate(groupe = coalesce(groupe.x, groupe.y)) %>%  # Priorité au 1er join
-  select(-groupe.x, -groupe.y)  # Nettoyage des colonnes temporaires
+  left_join(response_df, by = c("project_name" = "id")) # Faire un premier left_join() sur la colonne name
+
 
 # sauvegarde du jeu de donnée-----
+all_data_forge <- all_data_forge %>% select(name , type, message , updated_at , author , topics, origine,groupe)
 save(all_data_forge, file = "gitlab_forge.RData")
-- 
GitLab


From a905a4522cec012721b27cda27cc9b254269596d Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Fri, 14 Mar 2025 16:18:28 +0100
Subject: [PATCH 08/27] les groupes, les topics sont automatiques et le noms
 des projets aussi , attention les auteurs sont encore sous formes de mail

---
 dev/gitlab_classique.R | 95 ++++++++++++++++++++++--------------------
 1 file changed, 50 insertions(+), 45 deletions(-)

diff --git a/dev/gitlab_classique.R b/dev/gitlab_classique.R
index cd71b90..780fde6 100644
--- a/dev/gitlab_classique.R
+++ b/dev/gitlab_classique.R
@@ -9,6 +9,32 @@ set_gitlab_connection(
   gitlab_url = "https://gitlab.com" ,
   private_token = Sys.getenv("GITLAB_COM_TOKEN")
 )
+response <- data.frame()
+# on charge les projets du groupe CSD
+buildres <- function(i){
+  res_proj100 <- GET(
+    "https://gitlab.com/api/v4/groups/6567080/projects",
+    add_headers(`PRIVATE-TOKEN` = Sys.getenv("GITLAB_COM_TOKEN")),
+    query = list(
+      include_subgroups = "true",
+      per_page = 100,
+      page = i
+    ),
+    timeout(120)  # Timeout augmenté pour les projets
+  )
+  res <- content(res_proj100, as = "text", encoding = "UTF-8") %>% fromJSON()
+  return(res)
+}
+#on réalise une boucle si plus de 100 projets
+x <- 1
+repeat {
+  res <- buildres(x)
+  if (length(res) == 0) {
+    break
+  }
+  response <- bind_rows(response, res)
+  x <- x + 1
+}
 project_ids <- c(41600697, 19859695, 49118792, 21138017, 44145525, 18441361, 17610613,18439010)
 
 get_project_name <- function(base_url, project_id, private_token) {
@@ -103,10 +129,7 @@ get_all_pages <- function(url, private_token, max_retries = 3, max_pages = 159)
 
 
 
-# Fonction pour extraire le nom du projet à partir de l'URL
-extract_project_name <- function(web_url) {
-  str_extract(web_url, "(?<=/)[^/]+(?=/-/)")
-}
+
 
 # Fonction pour récupérer les issues d'un projet GitLab
 get_gitlab_issues <- function(base_url, project_id, private_token) {
@@ -114,10 +137,10 @@ get_gitlab_issues <- function(base_url, project_id, private_token) {
   data <- get_all_pages(api_url, private_token)
   data <- data %>%
     mutate(
-      project_name = extract_project_name(web_url),
+      project_name = as.character(project_id),
       type = "issue",
       message = title,
-      author = author.username
+      author = paste0(author.username,"@developpement-durable.gouv.fr")
     )
   return(data %>% select(project_name, type, message, updated_at, author))
 }
@@ -148,11 +171,9 @@ get_gitlab_events <- function(base_url, project_id, private_token) {
       ),
 
       updated_at = created_at,
-      author = author.username
-    ) %>%
-    left_join(name_gitlab, by = c("project_name" = "id")) %>%
-    mutate(project_name = name) %>%
-    select(-name)
+      author = paste0(author.username,"@developpement-durable.gouv.fr")
+    )
+
   return(data %>% select(project_name, type, message, updated_at, author))
 }
 
@@ -171,30 +192,6 @@ get_data_from_multiple_projects <- function(base_url, project_ids, private_token
   return(bind_rows(all_data))
 }
 
-# Topics
-get_project_topics <- function(base_url, project_id, private_token) {
-  api_url <- paste0(base_url, "/api/v4/projects/", project_id)
-  response <- GET(api_url, add_headers("PRIVATE-TOKEN" = private_token))
-
-  if (status_code(response) == 200) {
-    project_info <- fromJSON(content(response, "text", encoding = "UTF-8"), flatten = TRUE)
-    return(data.frame(
-      id = as.character(project_info$name),
-      topics = paste(project_info$topics, collapse = ", "),  # Combine les topics en une chaîne de caractères
-      stringsAsFactors = FALSE
-    ))
-  } else {
-    warning("Impossible de récupérer les topics pour le projet ID: ", project_id, " - Code: ", status_code(response))
-    return(data.frame(
-      id = project_id,
-      topics = NA,
-      stringsAsFactors = FALSE
-    ))
-  }
-}
-extract_before_at <- function(email) {
-  sub("@.*", "", email)
-}
 ############################################################### -----
 # Fonction générique
 process_projects <- function(project_ids) {
@@ -225,16 +222,12 @@ process_projects <- function(project_ids) {
 
 final_result <- process_projects(project_ids)
 final_result$project_id <- as.character(final_result$project_id)
-final_result <- final_result %>% left_join(name_gitlab, by = c("project_id" = "id")) %>%
-  mutate(project_name = name, type = "commit") %>%
-  select(-name)
-final_result <- final_result %>% mutate(author = extract_before_at(committer_email))
-final_result <- final_result %>% rename( "updated_at" = 'committed_date' )
+
+final_result <- final_result %>% mutate(author = committer_email, type = "commit")
+final_result <- final_result %>% rename( "updated_at" = 'committed_date',"project_name" = 'project_id' )
 fg <- final_result %>% filter(is_duplicate == FALSE) %>% select(project_name,type , message ,updated_at,author)
 ###############################################################
 
-# Récupérer les topics pour tous les projets
-projects_topics <- bind_rows(lapply(project_ids, get_project_topics, base_url = base_url, private_token = private_token))
 
 # Récupérer les données pour tous les projets
 all_data_gitlab <- get_data_from_multiple_projects(base_url, project_ids, private_token)
@@ -242,9 +235,21 @@ all_data_gitlab <- all_data_gitlab %>%
   filter(!(is.na(all_data_gitlab$type) | is.na(all_data_gitlab$message)) | all_data_gitlab$type == "joined" | all_data_gitlab$type == "WikiPage::Meta")
 all_data_gitlab <- bind_rows(fg,all_data_gitlab)
 all_data_gitlab <- all_data_gitlab %>%
-  mutate(origine ="Gitlab",
-         groupe = "RDES_DREAL")
-all_data_gitlab <- left_join(all_data_gitlab, projects_topics, by = c("project_name" = "id"))
+  mutate(origine ="Gitlab")
+
+#data.frame avec les groupes et le nom pour left join-----
+response_df <- data.frame(
+  id = as.character(response$id),
+  name = response$name,
+  groupe = response$namespace$name,
+  topics = sapply(response$topics, function(x) paste(x, collapse = ", ")) # on degroupe et regroupe ?? mais ca fonctionne
+)
+# Joindre les deux jeux de données
+all_data_gitlab <- all_data_gitlab %>%
+  left_join(response_df, by = c("project_name" = "id")) # Faire un premier left_join() sur la colonne name
+all_data_gitlab$author <-  tolower(all_data_gitlab$author)
 
+# sauvegarde du jeu de donnée-----
+all_data_gitlab <- all_data_gitlab %>% select(name , type, message , updated_at , author , topics, origine,groupe)
 # save.image("gitlab.RData")
 save(all_data_gitlab, file = "gitlab.RData")
-- 
GitLab


From 20916ff772750c93abf5bd56f58b7ceac93a88f0 Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Fri, 14 Mar 2025 16:19:00 +0100
Subject: [PATCH 09/27] les auteurs sont en mail pour plus tard avec l'annuaire
 les memttre en propre

---
 dev/gitlab_forge.R | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/dev/gitlab_forge.R b/dev/gitlab_forge.R
index bafacb2..bb3396e 100644
--- a/dev/gitlab_forge.R
+++ b/dev/gitlab_forge.R
@@ -158,7 +158,7 @@ get_gitlab_issues <- function(base_url, project_id, private_token) {
       project_name = as.character(project_id),
       type = "issue",
       message = as.character(title),
-      author = author.username
+      author = paste0(author.username,"@developpement-durable.gouv.fr")
     )
   return(data %>% select(project_name, type, message, updated_at, author))
 }
@@ -189,7 +189,7 @@ get_gitlab_events <- function(base_url, project_id, private_token) {
       ),
 
       updated_at = created_at,
-      author = author.username
+      author = paste0(author.username,"@developpement-durable.gouv.fr")
     )%>%
     # left_join(name_gitlab, by = c("project_name" = "id")) %>%
     mutate(project_name = name) %>%
@@ -242,9 +242,7 @@ process_projects <- function(project_ids) {
 
 final_result <- process_projects(project_ids)
 final_result$project_id <- as.character(final_result$project_id)
-# final_result <- final_result %>% left_join(name_gitlab, by = c("project_id" = "id")) %>%
-#   mutate(project_name = name, type = "commit") %>%
-#   select(-name)
+
 final_result <- final_result %>% mutate(author = committer_email,type = "commit")
 final_result <- final_result %>% rename( "updated_at" = 'committed_date', "project_name" = 'project_id'  )
 ff <- final_result %>% filter(is_duplicate == FALSE) %>% select(project_name,type , message ,updated_at,author)
@@ -269,7 +267,7 @@ response_df <- data.frame(
 # Joindre les deux jeux de données
 all_data_forge <- all_data_forge %>%
   left_join(response_df, by = c("project_name" = "id")) # Faire un premier left_join() sur la colonne name
-
+all_data_forge$author <-  tolower(all_data_forge$author)
 
 # sauvegarde du jeu de donnée-----
 all_data_forge <- all_data_forge %>% select(name , type, message , updated_at , author , topics, origine,groupe)
-- 
GitLab


From 111ef8691ad298863f731e9015eb7c75622ee4e6 Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Fri, 14 Mar 2025 16:20:06 +0100
Subject: [PATCH 10/27] =?UTF-8?q?ajout=20de=20l'annuaire=20qui=20sera=20re?=
 =?UTF-8?q?noubl=C3=A9=20prochainement=20grace=20au=20script=20puis=20emai?=
 =?UTF-8?q?l=20total=20qui=20permet=20de=20corriger=20certaine=20addresse?=
 =?UTF-8?q?=20qui=20ont=20eu=20des=20bugs(fait=20=C3=A0=20la=20main)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 annuaire/annuaire.csv    | 33 +++++++++++++++++++++++++
 annuaire/email_total.csv | 52 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 85 insertions(+)
 create mode 100644 annuaire/annuaire.csv
 create mode 100644 annuaire/email_total.csv

diff --git a/annuaire/annuaire.csv b/annuaire/annuaire.csv
new file mode 100644
index 0000000..baa1715
--- /dev/null
+++ b/annuaire/annuaire.csv
@@ -0,0 +1,33 @@
+"Civilité","Prénom","Nom","Observation","Unité","Adresse","Code postal","Ville","Messagerie","Téléphone","Mobile","Fax","Pièce","Description","Fonction hiérarchique","Fonction métier","Missions"
+"Mme","Christelle","BELKACEM","Directrice de projet connaissance","DREAL Pays Loire/SCTE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","christelle.belkacem@developpement-durable.gouv.fr","02 72 74 74 50","06 20 58 46 22","","B 316","","","","",
+"Mme","Anne","CAILLAUD","","DREAL Pays Loire/SCTE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Anne.Caillaud@developpement-durable.gouv.fr","02 72 74 74 42","","","B 315","","","","",
+"Mme","Malaurie","CHANUT","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","malaurie.chanut@developpement-durable.gouv.fr","02 72 74 74 62","","","A305","","","","",
+"M.","Benoit","CORNIC","","DREAL Pays Loire/SCTE/DAP","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","benoit.cornic@developpement-durable.gouv.fr","02 72 74 74 92","07 60 71 49 56","","B 309b","","","","",
+"M.","Luc","DE ROSA","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Luc.De-rosa@developpement-durable.gouv.fr","02 72 74 74 67","","02 72 74 74 49","A 315","Chef de projet géomatique","","","",
+"M.","Denis","DOUILLARD","","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","denis.douillard@developpement-durable.gouv.fr","02 72 74 74 51","","","B 310","Chargé d'études","","","",
+"Mme","Valérie","DUBOURG-GOURTNER","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Valerie.DUBOURG-GOURTNER@developpement-durable.gouv.fr","02 72 74 74 63","","","A 302","","","","",
+"M.","Clément","DURMORT","Apprenti","DREAL Pays Loire/SCTE/DAP","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","clement.durmort@developpement-durable.gouv.fr","02 72 74 74 93","","","B 309","Apprenti, arrivée le 11/09/2023, départ prévu le 27/06/2023","","","",
+"Mme","Juliette","ENGELAERE-LEFEBVRE","Responsable du Centre de services de la donnée","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Juliette.Engelaere@developpement-durable.gouv.fr","02 72 74 74 55","","","A 309","","","","",
+"Mme","Christine","GALLAIS-JOUADET","","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","christine.gallais-jouadet@developpement-durable.gouv.fr","02 72 74 74 78","","","A311","Cheffe de projets géomatiques, spécialité données foncières","","","",
+"M.","Franck","GASPARD","","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Franck.Gaspard@developpement-durable.gouv.fr","02 72 74 74 56","","","A 307","Analyste de données","","","",
+"Mme","Gaëtane","GERGAUD","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","gaetane.gergaud@developpement-durable.gouv.fr","02 72 74 74 69","","","A301","","","","",
+"Mme","Laurence","GUICHET","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","laurence.guichet@developpement-durable.gouv.fr","02 72 74 74 66","","","A304","","","","",
+"M.","Daniel","KALIOUDJOGLOU","","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Daniel.Kalioudjoglou@developpement-durable.gouv.fr","02 72 74 74 52","","02 74 74 74 49","A 308","Analyste de données","","","",
+"Mme","Pauline","KUPERMINC","","DREAL Pays Loire/SCTE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","pauline.kuperminc@developpement-durable.gouv.fr","02 72 74 74 43","","02 72 74 74 49","B 315","contractuelle jusqu'au 30/04/2027","","","",
+"M.","Matteo","LE DURAND","Apprenti","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","matteo.le-durand@developpement-durable.gouv.fr","02 72 74 74 57","","","A 309","","","","",
+"Mme","Annaig","LE MEUR","Cheffe de service","DREAL Pays Loire/SCTE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","annaig.le-meur@developpement-durable.gouv.fr","02 72 74 74 44","06 03 57 55 11","","B312","","","","",
+"M.","Stéphane","LE MOING","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Stephane.Le-moing@developpement-durable.gouv.fr","02 72 74 74 60","06 99 98 47 77","","A318","","","","",
+"M.","Xavier","MILARET","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","xavier.milaret@developpement-durable.gouv.fr","02 72 74 74 59","","","A306","","","","",
+"M.","Edouard","MORIN","","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","edouard.morin@developpement-durable.gouv.fr","02 72 74 74 76","","","A310","","","","",
+"Mme","Célia","PEOC'H","","DREAL Pays Loire/SCTE/DAP","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","celia.peoc-h@developpement-durable.gouv.fr","02 72 74 74 54","","","B 311","","","","",
+"M.","David","PIERRE","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","david.pierre@developpement-durable.gouv.fr","02 72 74 74 68","06 58 35 98 59","02 72 74 74 49","A 303","Chargé de mission pour la Vendée hors littoral","","","",
+"M.","Eric","RENAULT","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","eric.renault@developpement-durable.gouv.fr","02 72 74 74 65","07 64 40 70 99","","A 322","","","","",
+"Mme","Enora","ROUSSE-DANAIS","Apprentie","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","enora.rousse-danais@developpement-durable.gouv.fr","02 72 74 74 58","","","A 300","apprentie présente du 09/09/2024 au 10/09/2025","","","",
+"M.","Alexis","ROY","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","alexis.roy@developpement-durable.gouv.fr","02 72 74 76 46","","","","","","","",
+"Mme","Anne-Cécile","SIMON","","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","anne-cecile.simon@developpement-durable.gouv.fr","02 72 74 74 75","","02 72 74 74 49","A313","Géomaticienne spécialiste data","","","",
+"Mme","Lisa","SMAH","Apprentie","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","lisa.smah@developpement-durable.gouv.fr","02 72 74 74 53","07 55 98 55 40","","A 300","","","","",
+"M.","Philippe","TERME","Chef de projets et administrateur de données","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Philippe.Terme@developpement-durable.gouv.fr","02 72 74 74 83","","","A 314","Chef de projets et administrateur de données","","","",
+"Mme","Guylène","THEBAULT","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","guylene.thebault@developpement-durable.gouv.fr","02 72 74 74 64","","","A 316","Chargée de mission pour le littoral","","","",
+"Mme","Sandrine","VERHAEGHE","Chef de division","DREAL Pays Loire/SCTE/DAP","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","sandrine.verhaeghe@developpement-durable.gouv.fr","02 72 74 74 90","06 21 93 12 06","02 72 74 74 40","B 313","","","","",
+"Mme","Véronique","VEYSSEYRE-MAUPEU","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","veronique.veysseyre-maupeu@developpement-durable.gouv.fr","02 72 74 74 61","06 99 03 00 45","02 72 74 74 49","A 304","","","","",
+"M.","Ronan","VIGNARD","Adjoint à la responsable du Centre de services de la donnée","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","ronan.vignard@developpement-durable.gouv.fr","02 72 74 74 81","06 61 15 42 17","","A312","","","","",
diff --git a/annuaire/email_total.csv b/annuaire/email_total.csv
new file mode 100644
index 0000000..2f80010
--- /dev/null
+++ b/annuaire/email_total.csv
@@ -0,0 +1,52 @@
+author,email
+denis.douillard@developpement-durable.gouv.frcd,denis.douillard@developpement-durable.gouv.fr
+lisa.smah@developpemnt-durable.gouv.fr,lisa.smah@developpement-durable.gouv.fr
+alexandra.prevot@developpement-durable.gouv.fr,NA
+freddy.lemoux@developpement-durable.gouv.fr,NA
+mael.theuliere@developpement-durable.gouv.fr,NA
+dataviz@set-pdl-dataviz.dreal-pdl.ad.e2.rie.gouv.fr,NA
+anh-van.lu@developpement-durable.gouv.fr,NA
+anh-van.lu@dreal.est,NA
+sophie.glatre@developpement-durable.gouv.fr,NA
+lisa.smahlisa.smah@developpement-durable.gouv.fr,lisa.smah@developpement-durable.gouv.fr
+ndeye-coumba.diallo@imt-atlantique.net,NA
+nathalie.bourgeais@developpement-durable.gouv.fr,NA
+jeanne.da-silveira@developpement-durable.gouv.fr,NA
+Juliette.Engelaere@developpement-durable.gouv.fr,juliette.engelaere@developpement-durable.gouv.fr
+Daniel.Kalioudjoglou@developpement-durable.gouv.fr,daniel.kalioudjoglou@developpement-durable.gouv.fr
+mael.theuliere@gmail.com,NA
+philippe.birchen@developpement-durable.gouv.fr,NA
+couedel.charlotte@gmail.com,NA
+juliette.engelaere@developpement.gouv.fr,juliette.engelaere@developpement-durable.gouv.fr
+jean-baptiste.paroissien@anteagroup.fr,NA
+sebastien.gilbert@anteagroup.fr,NA
+Franck.Gaspard@developpement-durable.gouv.fr,franck.gaspard@developpement-durable.gouv.fr
+you@example.com,NA
+bruno.lenzi@developpement-durable.gouv.fr,NA
+murielle.lethrosne@developpement-durable.gouv.fr,NA
+julientaq@gmail.com,NA
+diane@thinkr.fr,NA
+âronan.vignard@developpement-durable.gouv.f,NA
+jdaniel.lomenede@gmail.com,NA
+jean-daniel.lomenede@developpement-durable.gouv.fr,NA
+JulietteEngelaere@developpement-durable.gouv.fr,juliette.engelaere@developpement-durable.gouv.fr
+aurelie.tisserand@developpement-durable.gouv.fr,NA
+Philippe.BIRCHEN@developpement-durable.gouv.fr,NA
+Philippe.Terme@developpement-durable.gouv.fr,philippe.terme@developpement-durable.gouv.fr
+camille.campeon@developpement-durable.gouv.fr,NA
+bruno.le-gonidec@developpement-durable.gouv.fr,NA
+jean-baptiste.paroissien@developpement-durable.gouv.fr,NA
+Francois-Jacques.chenais@developpement-durable.gouv.fr,NA
+denis.douillard@developpement-durable.gouv.fr,denis.douillard@developpement-durable.gouv.fr
+edouard.morin@developpement-durable.gouv.fr,edouard.morin@developpement-durable.gouv.fr
+lisa.smah@developpement-durable.gouv.fr,lisa.smah@developpement-durable.gouv.fr
+ronan.vignard@developpement-durable.gouv.fr,ronan.vignard@developpement-durable.gouv.fr
+juliette.engelaere@developpement-durable.gouv.fr,juliette.engelaere@developpement-durable.gouv.fr
+christine.gallais-jouadet@developpement-durable.gouv.fr,christine.gallais-jouadet@developpement-durable.gouv.fr
+philippe.terme@developpement-durable.gouv.fr,philippe.terme@developpement-durable.gouv.fr
+christelle.belkacem@developpement-durable.gouv.fr,christelle.belkacem@developpement-durable.gouv.fr
+franck.gaspard@developpement-durable.gouv.fr,franck.gaspard@developpement-durable.gouv.fr
+anne-cecile.simon@developpement-durable.gouv.fr,anne-cecile.simon@developpement-durable.gouv.fr
+daniel.kalioudjoglou@developpement-durable.gouv.fr,daniel.kalioudjoglou@developpement-durable.gouv.fr
+matteo.le-durand@developpement-durable.gouv.fr,matteo.le-durand@developpement-durable.gouv.fr
+celia.peoc-h@developpement-durable.gouv.fr,celia.peoc-h@developpement-durable.gouv.fr
-- 
GitLab


From daf139509e535c45b7a63c679d6fff5672624c38 Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Mon, 17 Mar 2025 16:18:29 +0100
Subject: [PATCH 11/27] ajout de la correspondance des nom avec l'annuaire et
 le filtre de l'annuaire

---
 global.R | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/global.R b/global.R
index a852564..f93b16e 100644
--- a/global.R
+++ b/global.R
@@ -20,20 +20,28 @@ library(bizdays)
 library(shinyWidgets)
 library(textclean)
 library(stringi)
+library(readr)
 # chargement des données (résultat du script "dev/script_chargement_rdata.R")
 load("github.RData")
 load("gitlab_forge.RData")
 load("gitlab.RData")
 load("date_MAJ.RData")
 
+
+email_table <- read_csv("annuaire/email_total.csv")
+
+annuaire <- read_csv("annuaire/annuaire.csv")
+annuaire$Messagerie <- tolower(annuaire$Messagerie)
+annuaire <- annuaire %>% rename( email = Messagerie)
+annuaire <- annuaire %>% mutate(auteur = paste(Prénom, Nom))%>% select(email, auteur)
+
 all_data <- bind_rows(all_data_gitlab, all_data_forge, combined_data)
 all_data$updated_at <- as.POSIXct(all_data$updated_at, format = ("%Y-%m-%dT%H:%M:%S"))
 all_data <- all_data %>% mutate(message = paste0(type,sep = "  : ",message))
-# transformation author ----
-all_data$author <- all_data$author %>%
-  tolower() %>%
-  stri_trans_general("Latin-ASCII") %>%
-  str_replace_all("[^a-z ]", "")
+
+all_data <- all_data %>% left_join(email_table) # nettoyage de certaine adresse mail invalide
+all_data <- all_data %>% left_join(annuaire) # ajout de auteur des membre du SCTE via l'annuaire
+
 
 # transformation re_code ----
 traduction <- c(
@@ -50,6 +58,7 @@ traduction <- c(
   "Milestone" = "Gestion de projet"
 )
 all_data <- all_data %>% dplyr::mutate(re_code = dplyr::recode(type , !!!traduction))
+all_data <- all_data %>% dplyr::rename(project_name = name)
 
 #transformation message
 all_data$message <- all_data$message %>% tolower()
-- 
GitLab


From 46b129a491401e274cf0108c939c8934edce964e Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Mon, 17 Mar 2025 16:18:47 +0100
Subject: [PATCH 12/27] author -> auteur

---
 server.R | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/server.R b/server.R
index 90e2c87..fe4dc3e 100644
--- a/server.R
+++ b/server.R
@@ -28,7 +28,7 @@ server <- function(input, output, session) {
     r$filteredData <- r$filteredByDate %>%
       filter(
         (if (length(input$topics)) sapply(input$topics, function(t) grepl(t, topics)) %>% rowSums() > 0 else TRUE) &
-          (if (length(input$author)) author %in% input$author else TRUE) &
+          (if (length(input$auteur)) auteur %in% input$auteur else TRUE) &
           (if (length(input$re_code)) re_code %in% input$re_code else TRUE) &
           (if (length(input$categorie)) categorie %in% input$categorie else TRUE)
       )
@@ -45,7 +45,7 @@ server <- function(input, output, session) {
                            .[. != ""] %>%             # Supprime les chaînes vides
                            trimws() %>%                # suppremie les espace avnt et apres
                            unique() , selected = input$topics)
-    updateSelectizeInput(session, "author", choices = unique(r$filteredByDate$author), selected = input$author)
+    updateSelectizeInput(session, "author", choices = unique(r$filteredByDate$auteur), selected = input$auteur)
     updateSelectizeInput(session, "categorie", choices = unique(r$filteredByDate$categorie), selected = input$categorie)
 
     # Basé uniquement sur les données globales pour éviter que project_name soit affecté
-- 
GitLab


From c3665aa7adea38e5a0045c0794e47df82e6b49ab Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Mon, 17 Mar 2025 16:19:02 +0100
Subject: [PATCH 13/27] author -> auteur

---
 ui.R | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/ui.R b/ui.R
index 5411578..d2e1e24 100644
--- a/ui.R
+++ b/ui.R
@@ -31,15 +31,6 @@ ui <- shinygouv::navbarPage_dsfr(
         extra_class = "fr-mt-6w"
       ),
       shinygouv::column_dsfr(
-        3,
-        selectizeInput(
-          inputId = "project_name",
-          label = "Projet : ",
-          choices = NULL,
-          multiple = TRUE
-        ),extra_class = "fr-mt-6w"
-      ),
-      column_dsfr(
         3,
         selectizeInput(
           inputId = "topics",
@@ -53,6 +44,15 @@ ui <- shinygouv::navbarPage_dsfr(
             unique() ,
           # Extrait les éléments uniques
           multiple = TRUE
+          ),extra_class = "fr-mt-6w"
+      ),
+      column_dsfr(
+        3,
+        selectizeInput(
+          inputId = "project_name",
+          label = "Projet : ",
+          choices = NULL,
+          multiple = TRUE
         ),extra_class = "fr-mt-6w"
       ),
       column_dsfr(
@@ -60,7 +60,7 @@ ui <- shinygouv::navbarPage_dsfr(
         selectizeInput(
           inputId = "author",
           label = "Auteur :",
-          choices = unique(str_to_title(replace_non_ascii(all_data$author))),
+          choices = unique(str_to_title(replace_non_ascii(all_data$auteur))),
           selected = NULL,
           multiple = TRUE
         ),extra_class = "fr-mt-6w"
-- 
GitLab


From e708462b79fedd4b967652577ac09ea333f377df Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Mon, 17 Mar 2025 16:19:22 +0100
Subject: [PATCH 14/27] ajout de quelque correspondance

---
 annuaire/email_total.csv | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/annuaire/email_total.csv b/annuaire/email_total.csv
index 2f80010..07dcf0a 100644
--- a/annuaire/email_total.csv
+++ b/annuaire/email_total.csv
@@ -50,3 +50,8 @@ anne-cecile.simon@developpement-durable.gouv.fr,anne-cecile.simon@developpement-
 daniel.kalioudjoglou@developpement-durable.gouv.fr,daniel.kalioudjoglou@developpement-durable.gouv.fr
 matteo.le-durand@developpement-durable.gouv.fr,matteo.le-durand@developpement-durable.gouv.fr
 celia.peoc-h@developpement-durable.gouv.fr,celia.peoc-h@developpement-durable.gouv.fr
+julietteengelaere@developpement-durable.gouv.fr,juliette.engelaere@developpement-durable.gouv.fr
+christelle_b@developpement-durable.gouv.fr,christelle.belkacem@developpement-durable.gouv.fr
+jengelaere@developpement-durable.gouv.fr,juliette.engelaere@developpement-durable.gouv.fr
+juliette.engelaere@developpement-durable.gouv.fr,juliette.engelaere@developpement-durable.gouv.fr
+juliette.engelaere@developpement.gouv.fr,juliette.engelaere@developpement-durable.gouv.fr
-- 
GitLab


From 353d22a6e7ab19938e1db23443021d622e7ae604 Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Mon, 17 Mar 2025 16:19:59 +0100
Subject: [PATCH 15/27] on remplace le pseudo avec l'email

---
 dev/github_extraire.R | 22 ++++++++++------------
 1 file changed, 10 insertions(+), 12 deletions(-)

diff --git a/dev/github_extraire.R b/dev/github_extraire.R
index 45ac033..c70d252 100644
--- a/dev/github_extraire.R
+++ b/dev/github_extraire.R
@@ -6,9 +6,7 @@ library(DT)
 library(stringr)
 # Récupérer le token GitHub depuis l'environnement
 
-extract_before_at <- function(email) {
-  sub("@.*", "", email)
-}
+
 # Fonction pour récupérer les commits d'un projet GitHub avec clé API
 get_github_commits <- function(repo) {
   url <- paste0("https://api.github.com/repos/", repo, "/commits")
@@ -18,12 +16,12 @@ get_github_commits <- function(repo) {
   }
   commits <- fromJSON(content(response, "text"), flatten = TRUE)
   commits <- commits %>%
-    mutate(project_name = repo,   # Ajouter le nom du projet
+    mutate(name = repo,   # Ajouter le nom du projet
            type = "commit",       # Spécifier le type comme "commit"
            message = commit.message,  # Utiliser le message du commit
-           author = extract_before_at(commit.committer.email) , # Ajout de l'auteur
+           author = commit.committer.email , # Ajout de l'auteur
            updated_at = commit.committer.date) %>%  # Date de la dernière mise à jour
-    select(project_name, type, message, updated_at,author)  # Conserver les colonnes pertinentes
+    select(name, type, message, updated_at,author)  # Conserver les colonnes pertinentes
   return(commits)
 }
 
@@ -36,12 +34,12 @@ get_github_issues <- function(repo) {
   }
   issues <- fromJSON(content(response, "text"), flatten = TRUE)
   issues <- issues %>%
-    mutate(project_name = repo,   # Ajouter le nom du projet
+    mutate(name = repo,   # Ajouter le nom du projet
            type = "issue",        # Spécifier le type comme "issue"
            message = title,       # Utiliser le titre de l'issue
            author = user.login , # Ajout de l'auteur
            updated_at = updated_at) %>%  # Date de la dernière mise à jour
-    select(project_name, type, message, updated_at,author)  # Conserver les colonnes pertinentes
+    select(name, type, message, updated_at,author)  # Conserver les colonnes pertinentes
   return(issues)
 }
 
@@ -52,7 +50,7 @@ get_github_topics <- function(repo) {
     stop("Failed to fetch topics from GitHub API for repo: ", repo)
   }
   topics <- fromJSON(content(response, "text"), flatten = TRUE)$names
-  return(data.frame(project_name = repo, topics = paste(topics, collapse = ", "))) # Combine topics en une chaîne unique
+  return(data.frame(name = repo, topics = paste(topics, collapse = ", "))) # Combine topics en une chaîne unique
 }
 
 
@@ -152,11 +150,11 @@ get_github_topics <- function(repo) {
                             commits_analyse_spatiale, issues_analyse_spatiale
                             )
  combined_data <- combined_data %>%
-   left_join(topics_list, by = "project_name") %>%
+   left_join(topics_list, by = "name") %>%
    mutate(origine = "Github",
           groupe = case_when(
-            str_detect(project_name, "parcours_r") ~ "r-formation",
-            str_detect(project_name, "spyrales") ~ "spyrales",
+            str_detect(name, "parcours_r") ~ "r-formation",
+            str_detect(name, "spyrales") ~ "spyrales",
             TRUE ~ "autre"
           )) %>%
    unique()
-- 
GitLab


From ba96092decc3e3f2c2f376f9a1ac14ff0330dd10 Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Tue, 18 Mar 2025 11:08:32 +0100
Subject: [PATCH 16/27] ajout du filtre CSD sur l'annuaire + etiquette qui
 rassemble topics et groupe

---
 global.R | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/global.R b/global.R
index f93b16e..3643d78 100644
--- a/global.R
+++ b/global.R
@@ -33,6 +33,7 @@ email_table <- read_csv("annuaire/email_total.csv")
 annuaire <- read_csv("annuaire/annuaire.csv")
 annuaire$Messagerie <- tolower(annuaire$Messagerie)
 annuaire <- annuaire %>% rename( email = Messagerie)
+annuaire <- annuaire %>%  filter( str_detect(Unité,"CSD" ) )
 annuaire <- annuaire %>% mutate(auteur = paste(Prénom, Nom))%>% select(email, auteur)
 
 all_data <- bind_rows(all_data_gitlab, all_data_forge, combined_data)
@@ -42,6 +43,7 @@ all_data <- all_data %>% mutate(message = paste0(type,sep = "  : ",message))
 all_data <- all_data %>% left_join(email_table) # nettoyage de certaine adresse mail invalide
 all_data <- all_data %>% left_join(annuaire) # ajout de auteur des membre du SCTE via l'annuaire
 
+all_data <- all_data %>% dplyr::mutate(etiquette = paste(groupe,topics,sep = ","))
 
 # transformation re_code ----
 traduction <- c(
-- 
GitLab


From 1ff794ec5b9d0df524307d52bb4fac9a5a0f5d02 Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Tue, 18 Mar 2025 11:09:13 +0100
Subject: [PATCH 17/27] topics remplacer par etiquette qui est = topics +
 groupe

---
 server.R | 10 +++++-----
 ui.R     |  4 ++--
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/server.R b/server.R
index fe4dc3e..7e6b438 100644
--- a/server.R
+++ b/server.R
@@ -2,7 +2,7 @@ server <- function(input, output, session) {
   r <- reactiveValues(
     filteredData = all_data,
     filteredByProject = all_data, # Étape intermédiaire filtrée par daterange et project_name
-    filteredTopics = NULL,
+    filteredetiquette = NULL,
     filteredProjects = NULL,
     filteredAuthors = NULL,
     filteredReCodes = NULL,
@@ -27,7 +27,7 @@ server <- function(input, output, session) {
     req(input$daterange)
     r$filteredData <- r$filteredByDate %>%
       filter(
-        (if (length(input$topics)) sapply(input$topics, function(t) grepl(t, topics)) %>% rowSums() > 0 else TRUE) &
+        (if (length(input$etiquette)) sapply(input$etiquette, function(t) grepl(t, etiquette)) %>% rowSums() > 0 else TRUE) &
           (if (length(input$auteur)) auteur %in% input$auteur else TRUE) &
           (if (length(input$re_code)) re_code %in% input$re_code else TRUE) &
           (if (length(input$categorie)) categorie %in% input$categorie else TRUE)
@@ -38,13 +38,13 @@ server <- function(input, output, session) {
   # Fonction de mise à jour des choix pour les filtres
   updateFilters <- reactive({
     # Basé sur les données filtrées par date et projet
-    updateSelectizeInput(session, "topics", choices = unique(r$filteredByDate$topics)%>%
+    updateSelectizeInput(session, "etiquette", choices = unique(r$filteredByDate$etiquette)%>%
                            strsplit(split = ",") %>%  # Divise les chaînes en éléments séparés
                            unlist() %>%               # Aplatit la liste obtenue
                            na.omit() %>%              # Supprime les NA (au cas où)
                            .[. != ""] %>%             # Supprime les chaînes vides
                            trimws() %>%                # suppremie les espace avnt et apres
-                           unique() , selected = input$topics)
+                           unique() , selected = input$etiquette)
     updateSelectizeInput(session, "author", choices = unique(r$filteredByDate$auteur), selected = input$auteur)
     updateSelectizeInput(session, "categorie", choices = unique(r$filteredByDate$categorie), selected = input$categorie)
 
@@ -58,7 +58,7 @@ server <- function(input, output, session) {
       filter(updated_at >= as.Date(input$daterange[[1]]) &
                updated_at <= as.Date(input$daterange[[2]]))
     r$filteredData <- r$filteredByDate
-    updateSelectizeInput(session, "topics", selected = NULL)
+    updateSelectizeInput(session, "etiquette", selected = NULL)
     updateSelectizeInput(session, "author", selected = NULL)
     updateSelectizeInput(session, "categorie", selected = NULL)
     updateFilters()
diff --git a/ui.R b/ui.R
index d2e1e24..b61cb63 100644
--- a/ui.R
+++ b/ui.R
@@ -33,9 +33,9 @@ ui <- shinygouv::navbarPage_dsfr(
       shinygouv::column_dsfr(
         3,
         selectizeInput(
-          inputId = "topics",
+          inputId = "etiquette",
           label = "Étiquette :",
-          choices = all_data$topics %>%
+          choices = all_data$etiquette %>%
             strsplit(split = ",") %>%  # Divise les chaînes en éléments séparés
             unlist() %>%               # Aplatit la liste obtenue
             na.omit() %>%              # Supprime les NA (au cas où)
-- 
GitLab


From af81c2b9d2f2b64a1d9cb644c6d6c11f14ab9801 Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Tue, 18 Mar 2025 16:17:56 +0100
Subject: [PATCH 18/27] ajout du package fuzzjoin, on retire la table de
 correspondance pour que ca soit au max automatique

---
 global.R | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/global.R b/global.R
index 3643d78..f9d2c93 100644
--- a/global.R
+++ b/global.R
@@ -21,6 +21,7 @@ library(shinyWidgets)
 library(textclean)
 library(stringi)
 library(readr)
+library(fuzzyjoin)
 # chargement des données (résultat du script "dev/script_chargement_rdata.R")
 load("github.RData")
 load("gitlab_forge.RData")
@@ -32,18 +33,21 @@ email_table <- read_csv("annuaire/email_total.csv")
 
 annuaire <- read_csv("annuaire/annuaire.csv")
 annuaire$Messagerie <- tolower(annuaire$Messagerie)
-annuaire <- annuaire %>% rename( email = Messagerie)
+annuaire <- annuaire %>% rename( mail = Messagerie)
 annuaire <- annuaire %>%  filter( str_detect(Unité,"CSD" ) )
-annuaire <- annuaire %>% mutate(auteur = paste(Prénom, Nom))%>% select(email, auteur)
+annuaire <- annuaire %>% mutate(auteur = paste(Prénom, Nom),
+                                mail_clean = str_remove(mail, "@.*") )%>% select(mail_clean, auteur)
 
 all_data <- bind_rows(all_data_gitlab, all_data_forge, combined_data)
 all_data$updated_at <- as.POSIXct(all_data$updated_at, format = ("%Y-%m-%dT%H:%M:%S"))
-all_data <- all_data %>% mutate(message = paste0(type,sep = "  : ",message))
+all_data <- all_data %>% mutate(message = paste0(type,sep = "  : ",message),
+                                email_clean = str_remove(author, "@.*"))
 
-all_data <- all_data %>% left_join(email_table) # nettoyage de certaine adresse mail invalide
-all_data <- all_data %>% left_join(annuaire) # ajout de auteur des membre du SCTE via l'annuaire
+all_data <- all_data %>% stringdist_left_join(annuaire,by = c("email_clean" = "mail_clean"), method = "jw", max_dist = 0.25) # ajout de auteur des membre du SCTE via l'annuaire
 
 all_data <- all_data %>% dplyr::mutate(etiquette = paste(groupe,topics,sep = ","))
+df <- all_data %>% filter(!is.na(auteur)) %>% select(author,auteur)
+distinct(df)%>% datatable()
 
 # transformation re_code ----
 traduction <- c(
-- 
GitLab


From 509daf4623fce8ab427f543cc0b8ae7f183dcad6 Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Tue, 18 Mar 2025 16:19:54 +0100
Subject: [PATCH 19/27] =?UTF-8?q?update=20:=20plus=20de=20table=20de=20cor?=
 =?UTF-8?q?respondance=20de=20filtrage=20=C3=A0=20la=20main?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 global.R | 2 --
 1 file changed, 2 deletions(-)

diff --git a/global.R b/global.R
index f9d2c93..915c8d7 100644
--- a/global.R
+++ b/global.R
@@ -29,8 +29,6 @@ load("gitlab.RData")
 load("date_MAJ.RData")
 
 
-email_table <- read_csv("annuaire/email_total.csv")
-
 annuaire <- read_csv("annuaire/annuaire.csv")
 annuaire$Messagerie <- tolower(annuaire$Messagerie)
 annuaire <- annuaire %>% rename( mail = Messagerie)
-- 
GitLab


From 1382e603446426e875ff6c0f31461bb07debc0ee Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Thu, 20 Mar 2025 10:12:19 +0100
Subject: [PATCH 20/27] les auteurs sont maintenant automatique , mais
 attention il se peux qu'il reste des erreurs

---
 global.R | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/global.R b/global.R
index 915c8d7..1637e9a 100644
--- a/global.R
+++ b/global.R
@@ -40,12 +40,9 @@ all_data <- bind_rows(all_data_gitlab, all_data_forge, combined_data)
 all_data$updated_at <- as.POSIXct(all_data$updated_at, format = ("%Y-%m-%dT%H:%M:%S"))
 all_data <- all_data %>% mutate(message = paste0(type,sep = "  : ",message),
                                 email_clean = str_remove(author, "@.*"))
-
-all_data <- all_data %>% stringdist_left_join(annuaire,by = c("email_clean" = "mail_clean"), method = "jw", max_dist = 0.25) # ajout de auteur des membre du SCTE via l'annuaire
+all_data <- all_data %>% stringdist_left_join(annuaire,by = c("email_clean" = "mail_clean"), method = "jw", max_dist = 0.265) # ajout de auteur des membre du SCTE via l'annuaire, 75% des auteurs sont du csd
 
 all_data <- all_data %>% dplyr::mutate(etiquette = paste(groupe,topics,sep = ","))
-df <- all_data %>% filter(!is.na(auteur)) %>% select(author,auteur)
-distinct(df)%>% datatable()
 
 # transformation re_code ----
 traduction <- c(
-- 
GitLab


From f62eeca584e20564516370c1601642635cbded30 Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Thu, 27 Mar 2025 09:29:19 +0100
Subject: [PATCH 21/27] =?UTF-8?q?update=20de=20package=20et=20ajout=20de?=
 =?UTF-8?q?=20l'auteur=20dans=20le=20message=20de=20l'=C3=A9venement?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 global.R | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/global.R b/global.R
index 1637e9a..6509e82 100644
--- a/global.R
+++ b/global.R
@@ -4,7 +4,7 @@ library(stringr)
 library(gitlabr)
 library(DT)
 library(shiny)
-library(dplyr)
+library(tidyverse)
 library(ggplot2)
 library(plotly)
 # remotes::install_github("spyrales/shinygouv")
@@ -38,11 +38,12 @@ annuaire <- annuaire %>% mutate(auteur = paste(Prénom, Nom),
 
 all_data <- bind_rows(all_data_gitlab, all_data_forge, combined_data)
 all_data$updated_at <- as.POSIXct(all_data$updated_at, format = ("%Y-%m-%dT%H:%M:%S"))
-all_data <- all_data %>% mutate(message = paste0(type,sep = "  : ",message),
-                                email_clean = str_remove(author, "@.*"))
+all_data <- all_data %>% mutate(email_clean = str_remove(author, "@.*"))
 all_data <- all_data %>% stringdist_left_join(annuaire,by = c("email_clean" = "mail_clean"), method = "jw", max_dist = 0.265) # ajout de auteur des membre du SCTE via l'annuaire, 75% des auteurs sont du csd
 
 all_data <- all_data %>% dplyr::mutate(etiquette = paste(groupe,topics,sep = ","))
+all_data <- all_data %>% mutate(message = paste(type,sep = "  : ",message,auteur),
+                                auteur = replace_na(auteur,"autre"))
 
 # transformation re_code ----
 traduction <- c(
-- 
GitLab


From 0ee4838025b84a047ec2ae8d00a876527ed83310 Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Thu, 27 Mar 2025 09:29:57 +0100
Subject: [PATCH 22/27] =?UTF-8?q?ajout=20de=20COGiter=20et=20lib=C3=A9rati?=
 =?UTF-8?q?on=20d'espace?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 dev/github_extraire.R | 28 ++++++++++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

diff --git a/dev/github_extraire.R b/dev/github_extraire.R
index c70d252..0e69eb2 100644
--- a/dev/github_extraire.R
+++ b/dev/github_extraire.R
@@ -118,6 +118,11 @@ get_github_topics <- function(repo) {
  commits_analyse_spatiale <- get_github_commits(repo_analyse_spatiale)
  issues_analyse_spatiale <- get_github_issues(repo_analyse_spatiale)
 
+ # COGiter
+ repo_cogiter <- "MaelTheuliere/COGiter"
+ commits_cogiter <- get_github_commits(repo_cogiter)
+ issues_cogiter <- get_github_issues(repo_cogiter)
+
  repos <- c(
    "spyrales/shinygouv", "spyrales/gouvdown",
    "MTES-MCT/parcours_r_module_applications_shiny",
@@ -129,7 +134,8 @@ get_github_topics <- function(repo) {
    "MTES-MCT/parcours_r_socle_preparation_des_donnees",
    "MTES-MCT/savoirfR", "MTES-MCT/parcours-r",
    "MTES-MCT/parcours_r_module_datavisualisation",
-   "MTES-MCT/parcours_r_module_analyse_spatiale"
+   "MTES-MCT/parcours_r_module_analyse_spatiale",
+   "MaelTheuliere/COGiter"
  )
 
  topics_list <- do.call(rbind, lapply(repos, get_github_topics))
@@ -147,8 +153,26 @@ get_github_topics <- function(repo) {
                             commits_savoirfR, issues_savoirfR,
                             commits_parcours_r, issues_parcours_r,
                             commits_datavisualisation, issues_datavisualisation,
-                            commits_analyse_spatiale, issues_analyse_spatiale
+                            commits_analyse_spatiale, issues_analyse_spatiale,
+                            commits_cogiter,issues_cogiter
                             )
+
+ rm(commits_shinygouv, issues_shinygouv,
+    commits_gouvdown, issues_gouvdown,
+    commits_app_shiny, issues_app_shiny,
+    commits_ateliers_rpackage, issues_ateliers_rpackage,
+    commits_multi_dim, issues_multi_dim,
+    commits_stat_desc, issues_stat_desc,
+    commits_rmarkdown, issues_rmarkdown,
+    commits_introduction, issues_introduction,
+    commits_preparation_des_donnees, issues_preparation_des_donnees,
+    commits_savoirfR, issues_savoirfR,
+    commits_parcours_r, issues_parcours_r,
+    commits_datavisualisation, issues_datavisualisation,
+    commits_analyse_spatiale, issues_analyse_spatiale,
+    commits_cogiter,issues_cogiter
+ )
+
  combined_data <- combined_data %>%
    left_join(topics_list, by = "name") %>%
    mutate(origine = "Github",
-- 
GitLab


From 05932f81bdbc7ba22343b254e8b9ae5974863e81 Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Thu, 27 Mar 2025 11:43:36 +0100
Subject: [PATCH 23/27] ajout de l'annuaire automatique en fonction de celui de
 de l'annuaire pauline, UNIQUEMENT CSD

---
 annuaire/annuaire.csv               | 33 -----------------
 annuaire/email_total.csv            | 57 -----------------------------
 annuaire/export_pauline_2025-03.csv | 13 +++++++
 3 files changed, 13 insertions(+), 90 deletions(-)
 delete mode 100644 annuaire/annuaire.csv
 delete mode 100644 annuaire/email_total.csv
 create mode 100644 annuaire/export_pauline_2025-03.csv

diff --git a/annuaire/annuaire.csv b/annuaire/annuaire.csv
deleted file mode 100644
index baa1715..0000000
--- a/annuaire/annuaire.csv
+++ /dev/null
@@ -1,33 +0,0 @@
-"Civilité","Prénom","Nom","Observation","Unité","Adresse","Code postal","Ville","Messagerie","Téléphone","Mobile","Fax","Pièce","Description","Fonction hiérarchique","Fonction métier","Missions"
-"Mme","Christelle","BELKACEM","Directrice de projet connaissance","DREAL Pays Loire/SCTE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","christelle.belkacem@developpement-durable.gouv.fr","02 72 74 74 50","06 20 58 46 22","","B 316","","","","",
-"Mme","Anne","CAILLAUD","","DREAL Pays Loire/SCTE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Anne.Caillaud@developpement-durable.gouv.fr","02 72 74 74 42","","","B 315","","","","",
-"Mme","Malaurie","CHANUT","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","malaurie.chanut@developpement-durable.gouv.fr","02 72 74 74 62","","","A305","","","","",
-"M.","Benoit","CORNIC","","DREAL Pays Loire/SCTE/DAP","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","benoit.cornic@developpement-durable.gouv.fr","02 72 74 74 92","07 60 71 49 56","","B 309b","","","","",
-"M.","Luc","DE ROSA","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Luc.De-rosa@developpement-durable.gouv.fr","02 72 74 74 67","","02 72 74 74 49","A 315","Chef de projet géomatique","","","",
-"M.","Denis","DOUILLARD","","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","denis.douillard@developpement-durable.gouv.fr","02 72 74 74 51","","","B 310","Chargé d'études","","","",
-"Mme","Valérie","DUBOURG-GOURTNER","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Valerie.DUBOURG-GOURTNER@developpement-durable.gouv.fr","02 72 74 74 63","","","A 302","","","","",
-"M.","Clément","DURMORT","Apprenti","DREAL Pays Loire/SCTE/DAP","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","clement.durmort@developpement-durable.gouv.fr","02 72 74 74 93","","","B 309","Apprenti, arrivée le 11/09/2023, départ prévu le 27/06/2023","","","",
-"Mme","Juliette","ENGELAERE-LEFEBVRE","Responsable du Centre de services de la donnée","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Juliette.Engelaere@developpement-durable.gouv.fr","02 72 74 74 55","","","A 309","","","","",
-"Mme","Christine","GALLAIS-JOUADET","","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","christine.gallais-jouadet@developpement-durable.gouv.fr","02 72 74 74 78","","","A311","Cheffe de projets géomatiques, spécialité données foncières","","","",
-"M.","Franck","GASPARD","","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Franck.Gaspard@developpement-durable.gouv.fr","02 72 74 74 56","","","A 307","Analyste de données","","","",
-"Mme","Gaëtane","GERGAUD","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","gaetane.gergaud@developpement-durable.gouv.fr","02 72 74 74 69","","","A301","","","","",
-"Mme","Laurence","GUICHET","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","laurence.guichet@developpement-durable.gouv.fr","02 72 74 74 66","","","A304","","","","",
-"M.","Daniel","KALIOUDJOGLOU","","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Daniel.Kalioudjoglou@developpement-durable.gouv.fr","02 72 74 74 52","","02 74 74 74 49","A 308","Analyste de données","","","",
-"Mme","Pauline","KUPERMINC","","DREAL Pays Loire/SCTE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","pauline.kuperminc@developpement-durable.gouv.fr","02 72 74 74 43","","02 72 74 74 49","B 315","contractuelle jusqu'au 30/04/2027","","","",
-"M.","Matteo","LE DURAND","Apprenti","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","matteo.le-durand@developpement-durable.gouv.fr","02 72 74 74 57","","","A 309","","","","",
-"Mme","Annaig","LE MEUR","Cheffe de service","DREAL Pays Loire/SCTE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","annaig.le-meur@developpement-durable.gouv.fr","02 72 74 74 44","06 03 57 55 11","","B312","","","","",
-"M.","Stéphane","LE MOING","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Stephane.Le-moing@developpement-durable.gouv.fr","02 72 74 74 60","06 99 98 47 77","","A318","","","","",
-"M.","Xavier","MILARET","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","xavier.milaret@developpement-durable.gouv.fr","02 72 74 74 59","","","A306","","","","",
-"M.","Edouard","MORIN","","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","edouard.morin@developpement-durable.gouv.fr","02 72 74 74 76","","","A310","","","","",
-"Mme","Célia","PEOC'H","","DREAL Pays Loire/SCTE/DAP","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","celia.peoc-h@developpement-durable.gouv.fr","02 72 74 74 54","","","B 311","","","","",
-"M.","David","PIERRE","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","david.pierre@developpement-durable.gouv.fr","02 72 74 74 68","06 58 35 98 59","02 72 74 74 49","A 303","Chargé de mission pour la Vendée hors littoral","","","",
-"M.","Eric","RENAULT","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","eric.renault@developpement-durable.gouv.fr","02 72 74 74 65","07 64 40 70 99","","A 322","","","","",
-"Mme","Enora","ROUSSE-DANAIS","Apprentie","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","enora.rousse-danais@developpement-durable.gouv.fr","02 72 74 74 58","","","A 300","apprentie présente du 09/09/2024 au 10/09/2025","","","",
-"M.","Alexis","ROY","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","alexis.roy@developpement-durable.gouv.fr","02 72 74 76 46","","","","","","","",
-"Mme","Anne-Cécile","SIMON","","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","anne-cecile.simon@developpement-durable.gouv.fr","02 72 74 74 75","","02 72 74 74 49","A313","Géomaticienne spécialiste data","","","",
-"Mme","Lisa","SMAH","Apprentie","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","lisa.smah@developpement-durable.gouv.fr","02 72 74 74 53","07 55 98 55 40","","A 300","","","","",
-"M.","Philippe","TERME","Chef de projets et administrateur de données","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Philippe.Terme@developpement-durable.gouv.fr","02 72 74 74 83","","","A 314","Chef de projets et administrateur de données","","","",
-"Mme","Guylène","THEBAULT","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","guylene.thebault@developpement-durable.gouv.fr","02 72 74 74 64","","","A 316","Chargée de mission pour le littoral","","","",
-"Mme","Sandrine","VERHAEGHE","Chef de division","DREAL Pays Loire/SCTE/DAP","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","sandrine.verhaeghe@developpement-durable.gouv.fr","02 72 74 74 90","06 21 93 12 06","02 72 74 74 40","B 313","","","","",
-"Mme","Véronique","VEYSSEYRE-MAUPEU","","DREAL Pays Loire/SCTE/DEE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","veronique.veysseyre-maupeu@developpement-durable.gouv.fr","02 72 74 74 61","06 99 03 00 45","02 72 74 74 49","A 304","","","","",
-"M.","Ronan","VIGNARD","Adjoint à la responsable du Centre de services de la donnée","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","ronan.vignard@developpement-durable.gouv.fr","02 72 74 74 81","06 61 15 42 17","","A312","","","","",
diff --git a/annuaire/email_total.csv b/annuaire/email_total.csv
deleted file mode 100644
index 07dcf0a..0000000
--- a/annuaire/email_total.csv
+++ /dev/null
@@ -1,57 +0,0 @@
-author,email
-denis.douillard@developpement-durable.gouv.frcd,denis.douillard@developpement-durable.gouv.fr
-lisa.smah@developpemnt-durable.gouv.fr,lisa.smah@developpement-durable.gouv.fr
-alexandra.prevot@developpement-durable.gouv.fr,NA
-freddy.lemoux@developpement-durable.gouv.fr,NA
-mael.theuliere@developpement-durable.gouv.fr,NA
-dataviz@set-pdl-dataviz.dreal-pdl.ad.e2.rie.gouv.fr,NA
-anh-van.lu@developpement-durable.gouv.fr,NA
-anh-van.lu@dreal.est,NA
-sophie.glatre@developpement-durable.gouv.fr,NA
-lisa.smahlisa.smah@developpement-durable.gouv.fr,lisa.smah@developpement-durable.gouv.fr
-ndeye-coumba.diallo@imt-atlantique.net,NA
-nathalie.bourgeais@developpement-durable.gouv.fr,NA
-jeanne.da-silveira@developpement-durable.gouv.fr,NA
-Juliette.Engelaere@developpement-durable.gouv.fr,juliette.engelaere@developpement-durable.gouv.fr
-Daniel.Kalioudjoglou@developpement-durable.gouv.fr,daniel.kalioudjoglou@developpement-durable.gouv.fr
-mael.theuliere@gmail.com,NA
-philippe.birchen@developpement-durable.gouv.fr,NA
-couedel.charlotte@gmail.com,NA
-juliette.engelaere@developpement.gouv.fr,juliette.engelaere@developpement-durable.gouv.fr
-jean-baptiste.paroissien@anteagroup.fr,NA
-sebastien.gilbert@anteagroup.fr,NA
-Franck.Gaspard@developpement-durable.gouv.fr,franck.gaspard@developpement-durable.gouv.fr
-you@example.com,NA
-bruno.lenzi@developpement-durable.gouv.fr,NA
-murielle.lethrosne@developpement-durable.gouv.fr,NA
-julientaq@gmail.com,NA
-diane@thinkr.fr,NA
-âronan.vignard@developpement-durable.gouv.f,NA
-jdaniel.lomenede@gmail.com,NA
-jean-daniel.lomenede@developpement-durable.gouv.fr,NA
-JulietteEngelaere@developpement-durable.gouv.fr,juliette.engelaere@developpement-durable.gouv.fr
-aurelie.tisserand@developpement-durable.gouv.fr,NA
-Philippe.BIRCHEN@developpement-durable.gouv.fr,NA
-Philippe.Terme@developpement-durable.gouv.fr,philippe.terme@developpement-durable.gouv.fr
-camille.campeon@developpement-durable.gouv.fr,NA
-bruno.le-gonidec@developpement-durable.gouv.fr,NA
-jean-baptiste.paroissien@developpement-durable.gouv.fr,NA
-Francois-Jacques.chenais@developpement-durable.gouv.fr,NA
-denis.douillard@developpement-durable.gouv.fr,denis.douillard@developpement-durable.gouv.fr
-edouard.morin@developpement-durable.gouv.fr,edouard.morin@developpement-durable.gouv.fr
-lisa.smah@developpement-durable.gouv.fr,lisa.smah@developpement-durable.gouv.fr
-ronan.vignard@developpement-durable.gouv.fr,ronan.vignard@developpement-durable.gouv.fr
-juliette.engelaere@developpement-durable.gouv.fr,juliette.engelaere@developpement-durable.gouv.fr
-christine.gallais-jouadet@developpement-durable.gouv.fr,christine.gallais-jouadet@developpement-durable.gouv.fr
-philippe.terme@developpement-durable.gouv.fr,philippe.terme@developpement-durable.gouv.fr
-christelle.belkacem@developpement-durable.gouv.fr,christelle.belkacem@developpement-durable.gouv.fr
-franck.gaspard@developpement-durable.gouv.fr,franck.gaspard@developpement-durable.gouv.fr
-anne-cecile.simon@developpement-durable.gouv.fr,anne-cecile.simon@developpement-durable.gouv.fr
-daniel.kalioudjoglou@developpement-durable.gouv.fr,daniel.kalioudjoglou@developpement-durable.gouv.fr
-matteo.le-durand@developpement-durable.gouv.fr,matteo.le-durand@developpement-durable.gouv.fr
-celia.peoc-h@developpement-durable.gouv.fr,celia.peoc-h@developpement-durable.gouv.fr
-julietteengelaere@developpement-durable.gouv.fr,juliette.engelaere@developpement-durable.gouv.fr
-christelle_b@developpement-durable.gouv.fr,christelle.belkacem@developpement-durable.gouv.fr
-jengelaere@developpement-durable.gouv.fr,juliette.engelaere@developpement-durable.gouv.fr
-juliette.engelaere@developpement-durable.gouv.fr,juliette.engelaere@developpement-durable.gouv.fr
-juliette.engelaere@developpement.gouv.fr,juliette.engelaere@developpement-durable.gouv.fr
diff --git a/annuaire/export_pauline_2025-03.csv b/annuaire/export_pauline_2025-03.csv
new file mode 100644
index 0000000..c106563
--- /dev/null
+++ b/annuaire/export_pauline_2025-03.csv
@@ -0,0 +1,13 @@
+"Civilité","Prénom","Nom","Observation","Unité","Adresse","Code postal","Ville","Messagerie","Téléphone","Mobile","Fax","Pièce","Description","Fonction hiérarchique","Fonction métier","Missions"

+"Mme","Christelle","BELKACEM","Directrice de projet connaissance","DREAL Pays Loire/SCTE","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","christelle.belkacem@developpement-durable.gouv.fr","02 72 74 74 50","06 20 58 46 22","","B 316","","","","",

+"M.","Denis","DOUILLARD","","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","denis.douillard@developpement-durable.gouv.fr","02 72 74 74 51","","","B 310","Chargé d'études","","","",

+"Mme","Juliette","ENGELAERE-LEFEBVRE","Responsable du Centre de services de la donnée","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Juliette.Engelaere@developpement-durable.gouv.fr","02 72 74 74 55","","","A 309","","","","",

+"Mme","Christine","GALLAIS-JOUADET","","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","christine.gallais-jouadet@developpement-durable.gouv.fr","02 72 74 74 78","","","A311","Cheffe de projets géomatiques, spécialité données foncières","","","",

+"M.","Franck","GASPARD","","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Franck.Gaspard@developpement-durable.gouv.fr","02 72 74 74 56","","","A 307","Analyste de données","","","",

+"M.","Daniel","KALIOUDJOGLOU","","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Daniel.Kalioudjoglou@developpement-durable.gouv.fr","02 72 74 74 52","","02 74 74 74 49","A 308","Analyste de données","","","",

+"M.","Matteo","LE DURAND","Apprenti","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","matteo.le-durand@developpement-durable.gouv.fr","02 72 74 74 57","","","A 309","","","","",

+"M.","Edouard","MORIN","","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","edouard.morin@developpement-durable.gouv.fr","02 72 74 74 76","","","A310","","","","",

+"Mme","Anne-Cécile","SIMON","","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","anne-cecile.simon@developpement-durable.gouv.fr","02 72 74 74 75","","02 72 74 74 49","A313","Géomaticienne spécialiste data","","","",

+"Mme","Lisa","SMAH","Apprentie","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","lisa.smah@developpement-durable.gouv.fr","02 72 74 74 53","07 55 98 55 40","","A 300","","","","",

+"M.","Philippe","TERME","Chef de projets et administrateur de données","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","Philippe.Terme@developpement-durable.gouv.fr","02 72 74 74 83","","","A 314","Chef de projets et administrateur de données","","","",

+"M.","Ronan","VIGNARD","Adjoint à la responsable du Centre de services de la donnée","DREAL Pays Loire/SCTE/CSD","5 rue Françoise Giroud CS 16326","44263","NANTES cedex 2","ronan.vignard@developpement-durable.gouv.fr","02 72 74 74 81","06 61 15 42 17","","A312","","","","",

-- 
GitLab


From 8268751154ecd9350df0acf4f60f1efb384a87b2 Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Thu, 27 Mar 2025 11:44:11 +0100
Subject: [PATCH 24/27] Import de l'annuaire

---
 dev/script_routine.R | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/dev/script_routine.R b/dev/script_routine.R
index e145d03..637455f 100644
--- a/dev/script_routine.R
+++ b/dev/script_routine.R
@@ -1,10 +1,22 @@
 Sys.setenv("HTTP_PROXY" = "http://pfrie-std.proxy.e2.rie.gouv.fr:8080")
 Sys.setenv("HTTPS_PROXY" = "http://pfrie-std.proxy.e2.rie.gouv.fr:8080")
+Sys.setenv("NO_PROXY" = "127.0.0.1,localhost,.i2,.rie.gouv.fr,192.168.,10.,172.")
+
 setwd("T:\\datalab\\SCTE_CSD\\dataviz_gitlabr")
 
+library(stringr)
+library(lubridate)
 # etape de mise à jour des données sur T-------------
 source(file = "dev/github_extraire.R")
 source(file = "dev/gitlab_classique.R")
 source(file = "dev/gitlab_forge.R")
 
 source(file = "dev/deploiment_sur_dataviz.R", verbose = TRUE)
+
+path_annuaire <- paste0("annuaire/export_pauline_", str_sub(today(), 1, 7), ".csv")
+if (!file.exists(path_annuaire)) {
+  unlink("annuaire", recursive = TRUE)
+  dir.create("annuaire")
+  download.file(url = "http://annuaire.e2.rie.gouv.fr/index.php?vue=exportcsv&dn=ou=CSD,ou=SCTE,ou=DREAL%20Pays%20Loire,ou=DR,ou=melanie",
+                destfile =  path_annuaire, method = "libcurl")
+}
-- 
GitLab


From c328ddac72438d1ff67d8668840996979146f529 Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Thu, 27 Mar 2025 11:44:36 +0100
Subject: [PATCH 25/27] =?UTF-8?q?Mise=20=C3=A0=20jour=20de=20l'UI=20en=20a?=
 =?UTF-8?q?joutant=20l'onglet=20indicateur?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ui.R | 48 ++++++++++++++++++++++++++++--------------------
 1 file changed, 28 insertions(+), 20 deletions(-)

diff --git a/ui.R b/ui.R
index b61cb63..7fc7323 100644
--- a/ui.R
+++ b/ui.R
@@ -4,7 +4,7 @@ ui <- shinygouv::navbarPage_dsfr(
   id = "nav",
   header = shinygouv::header_dsfr(
     intitule = c("DREAL", "Pays de la Loire"),
-    nom_site_service = "Tableau de bord GitLab-Forge",
+    nom_site_service = "Visualisation des projets du CSD gérés avec git",
     baseline = "Les Projets du Centre de Services de la Donnée"
   ),
   footer = footer_dsfr(
@@ -16,8 +16,7 @@ ui <- shinygouv::navbarPage_dsfr(
   ),
   # First tab Projet ---------
   shinygouv::navbarPanel_dsfr(
-    title = "Graphique des projets par durée",
-
+    title = "Graphique par période",
     htmltools::tags$head(tags$style(".fr-container { max-width: calc(100% - 2rem); }")),
     shinygouv::fluidRow_dsfr(
       shinygouv::column_dsfr(
@@ -44,21 +43,23 @@ ui <- shinygouv::navbarPage_dsfr(
             unique() ,
           # Extrait les éléments uniques
           multiple = TRUE
-          ),extra_class = "fr-mt-6w"
+        ),
+        extra_class = "fr-mt-6w"
       ),
       column_dsfr(
         3,
         selectizeInput(
           inputId = "project_name",
-          label = "Projet : ",
+          label = "Sélectionnez projet : ",
           choices = NULL,
           multiple = TRUE
-        ),extra_class = "fr-mt-6w"
+        ),
+        extra_class = "fr-mt-6w"
       ),
       column_dsfr(
         3,
         selectizeInput(
-          inputId = "author",
+          inputId = "auteur",
           label = "Auteur :",
           choices = unique(str_to_title(replace_non_ascii(all_data$auteur))),
           selected = NULL,
@@ -83,12 +84,8 @@ ui <- shinygouv::navbarPage_dsfr(
         4,
         selectizeInput(
           inputId = "categorie",
-          label = "Groupe: ",
-          choices = c(
-            "Autre" = "tous",
-            "Spyrales" = "spyrale",
-            "R Formation" = "github"
-          ),
+          label = " Évenement (précis) ",
+          choices = unique(all_data$type),
           selected = NULL,
           multiple = TRUE
         )
@@ -106,24 +103,35 @@ ui <- shinygouv::navbarPage_dsfr(
             plotly::plotlyOutput("filteredPlot2", height = "700px"),
             extra_class = "fr-my-1w"
           )
-
         )
       ),# tab graphique par choix ↑
       tabPanel_dsfr(
         id = "indicateur" ,
         title = "Indicateurs",
         shinygouv::fluidRow_dsfr(
-          shinygouv::column_dsfr(12)
+          column_dsfr(3,
+                      textOutput("nb_projet"),
+                      textOutput("nb_commit"),
+                      textOutput("nb_temps"), extra_class = "fr-my-1w"
+          ),
+          shinygouv::column_dsfr(9,
+                                 plotlyOutput("bar_chart"),
+                                 extra_class = "fr-my-1w"),
+
+          column_dsfr(12,textOutput("min_value")),
+          column_dsfr(12,textOutput("temps")),
+          column_dsfr(12,plotOutput("bar"),
+                      extra_class = "fr-my-1w")
         )
-                    ),
+      ),# tab indicateur par choix ↑
       tabPanel_dsfr(
-        id = "table" ,
-        title = "tableau",
+        id = "Table" ,
+        title = "Table",
         shinygouv::fluidRow_dsfr(
           shinygouv::column_dsfr(12,
-                                 DT::dataTableOutput("table"))
-        )
+                                 DTOutput('table'))
         )
+      )# tab table par choix ↑
     )#↑ tableau_proj
   )# ↑ Navbar
 )# ↑ UI
-- 
GitLab


From 4cc8504f1f1a72f747a3947c1f5e0f3f15b8dd95 Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Thu, 27 Mar 2025 11:45:18 +0100
Subject: [PATCH 26/27] =?UTF-8?q?fix:=20r=C3=A9solution=20des=20filtres=20?=
 =?UTF-8?q?et=20du=20clignotment?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 server.R | 278 +++++++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 209 insertions(+), 69 deletions(-)

diff --git a/server.R b/server.R
index 7e6b438..9a7b8cc 100644
--- a/server.R
+++ b/server.R
@@ -1,118 +1,258 @@
 server <- function(input, output, session) {
+  # Stocker les valeurs réactives
   r <- reactiveValues(
-    filteredData = all_data,
-    filteredByProject = all_data, # Étape intermédiaire filtrée par daterange et project_name
-    filteredetiquette = NULL,
-    filteredProjects = NULL,
-    filteredAuthors = NULL,
-    filteredReCodes = NULL,
-    filteredCategories = NULL,
-    filteredByDate = NULL,
+    filteredByDate = NULL,  # Filtrage uniquement par date
+    filteredData = NULL     # Filtrage final après application de tous les filtres
+
   )
 
-  # Filtrage par date et project_name uniquement
+  # 1️⃣ Filtrage prioritaire par date ----
   observeEvent(input$daterange, {
-    req(input$daterange)
+    req(input$daterange)  # Vérifier que la sélection est valide
+
+    # Filtrage initial sur la plage de dates
     r$filteredByDate <- all_data %>%
       filter(
         updated_at >= as.Date(input$daterange[[1]]) &
-          updated_at <= as.Date(input$daterange[[2]]) &
-          (if (length(input$project_name)) project_name %in% input$project_name else TRUE)
+          updated_at <= as.Date(input$daterange[[2]])
       )
-    updateFilters() # Mise à jour des choix basés sur le filtrage intermédiaire
+    # Mise à jour dynamique des autres filtres en fonction des données filtrées par date
+    updateFilters()
   })
 
-  # Mise à jour des autres filtres
+  # 2️⃣ Mise à jour dynamique des filtres ----
+  updateFilters <- reactive({
+    req(r$filteredByDate)  # Vérifier que les données sont disponibles
+    isolate({
+      updateSelectizeInput(session, "project_name",
+                           choices = unique(r$filteredByDate$project_name),
+                           selected = input$project_name)
+
+      updateSelectizeInput(session, "etiquette",
+                           choices = r$filteredByDate$etiquette %>%
+                             strsplit(split = ",") %>%
+                             unlist() %>%
+                             na.omit() %>%
+                             .[. != ""] %>%
+                             trimws() %>%
+                             unique(),
+                           selected = input$etiquette)
+
+      updateSelectizeInput(session, "auteur",
+                           choices = unique(r$filteredByDate$auteur),
+                           selected = input$auteur)
+
+      updateSelectizeInput(session, "categorie",
+                           choices = unique(r$filteredByDate$type),
+                           selected = input$categorie)
+
+      updateCheckboxGroupInput_dsfr( inputId = "re_code",
+                                     label = "Type d'évènement :",
+                                     choices = unique(r$filteredByDate$re_code),
+                                     selected = input$re_code,
+                                     inline = TRUE)
+    })
+  })
+  # 3️⃣ Filtrage final en fonction des autres filtres ----
   observe({
-    req(input$daterange)
+    req(r$filteredByDate)  # Vérifier que les données de base sont filtrées par date
+
     r$filteredData <- r$filteredByDate %>%
       filter(
-        (if (length(input$etiquette)) sapply(input$etiquette, function(t) grepl(t, etiquette)) %>% rowSums() > 0 else TRUE) &
+        (if (length(input$project_name)) project_name %in% input$project_name else TRUE) &
+          (if (length(input$etiquette)) sapply(input$etiquette, function(t) grepl(t, etiquette)) %>% rowSums() > 0 else TRUE) &
           (if (length(input$auteur)) auteur %in% input$auteur else TRUE) &
           (if (length(input$re_code)) re_code %in% input$re_code else TRUE) &
-          (if (length(input$categorie)) categorie %in% input$categorie else TRUE)
+          (if (length(input$categorie)) type %in% input$categorie else TRUE)
       )
-    updateFilters()
-  })
 
-  # Fonction de mise à jour des choix pour les filtres
-  updateFilters <- reactive({
-    # Basé sur les données filtrées par date et projet
-    updateSelectizeInput(session, "etiquette", choices = unique(r$filteredByDate$etiquette)%>%
-                           strsplit(split = ",") %>%  # Divise les chaînes en éléments séparés
-                           unlist() %>%               # Aplatit la liste obtenue
-                           na.omit() %>%              # Supprime les NA (au cas où)
-                           .[. != ""] %>%             # Supprime les chaînes vides
-                           trimws() %>%                # suppremie les espace avnt et apres
-                           unique() , selected = input$etiquette)
-    updateSelectizeInput(session, "author", choices = unique(r$filteredByDate$auteur), selected = input$auteur)
-    updateSelectizeInput(session, "categorie", choices = unique(r$filteredByDate$categorie), selected = input$categorie)
-
-    # Basé uniquement sur les données globales pour éviter que project_name soit affecté
-    updateSelectizeInput(session, "project_name", choices = sort(unique(r$filteredByDate$project_name)), selected = input$project_name)
+    # Mettre à jour les filtres restants
+    updateFilters()
   })
 
-  # Réinitialisation des filtres
+  # 4️⃣ Réinitialisation des filtres ----
   observeEvent(input$reset, {
     r$filteredByDate <- all_data %>%
-      filter(updated_at >= as.Date(input$daterange[[1]]) &
-               updated_at <= as.Date(input$daterange[[2]]))
-    r$filteredData <- r$filteredByDate
+      filter(
+        updated_at >= as.Date(input$daterange[[1]]) &
+          updated_at <= as.Date(input$daterange[[2]])
+      )
+    r$filteredData <- r$filteredByDate  # Reset total
+    updateSelectizeInput(session, "project_name", selected = NULL)
     updateSelectizeInput(session, "etiquette", selected = NULL)
-    updateSelectizeInput(session, "author", selected = NULL)
+    updateSelectizeInput(session, "auteur", selected = NULL)
     updateSelectizeInput(session, "categorie", selected = NULL)
+    updateCheckboxGroupInput_dsfr( "re_code", selected = NULL,inline = TRUE)
     updateFilters()
   })
-  output$lien <- renderUI({
-    projects_with_links <- r$filteredData %>%
-      filter(origine == "Gitlab_Forge" & project_name %in% input$project_name)
-
-    if (nrow(projects_with_links) == 0) {
-      return(NULL) # Aucun lien à afficher
-    }
-
-    urls <- paste0("https://gitlab-forge.din.developpement-durable.gouv.fr/dreal-pdl/csd/", projects_with_links$project_name)
-    links <- lapply(seq_along(unique(projects_with_links$project_name)), function(i) {
-      a(href = urls[i], target = "_blank", projects_with_links$project_name[i])
-    })
-    do.call(tagList, links)
-  })
 
-  # Graphique interactif
+  # 5️⃣ Graphique interactif ----
   output$filteredPlot2 <- plotly::renderPlotly({
-    req(r$filteredData)
+    req(r$filteredData)  # Vérifier qu'on a des données filtrées
     p <- ggplot2::ggplot(r$filteredData, ggplot2::aes(x = updated_at, y = as.factor(project_name))) +
       ggplot2::geom_point(ggplot2::aes(color = re_code, text = paste(updated_at, message, sep = "\n")),
                           size = 3, alpha = 0.5) +
       ggplot2::labs(shape = "Événement", color = "Événement", x = "") +
       ggplot2::scale_x_datetime(timezone = "Europe/Paris") +
-      gouvdown::theme_gouv()+
+      gouvdown::theme_gouv() +
       ggplot2::theme(
         axis.text.x = ggplot2::element_text(angle = 0, hjust = 1),
         axis.title.y = ggplot2::element_blank()
       )
 
-    plotly::ggplotly(p, tooltip = "text")
+    plotly::ggplotly(p, tooltip = "text", dynamicTicks = TRUE)    %>%
+      plotly::config(locale = "fr", displaylogo = FALSE)
   })
 
-
-  output$table <- renderDataTable({
+  # 6️⃣ Graphique des indicateurs ----
+  output$bar_chart <- renderPlotly({
     req(r$filteredData)
-    datatable(r$filteredData ,
-              options = list(
-                pageLength = 10,        # Nombre de lignes affichées par page
-                lengthMenu = c(5, 10, 25, 50),  # Choix du nombre de lignes
-                autoWidth = TRUE,        # Ajuste automatiquement la largeur des colonnes
-                scrollX = TRUE,          # Active le défilement horizontal
-                class = "display",       # Ajoute du style CSS
-                rownames = FALSE,         # Supprime les numéros de ligne,
-                searchHighlight = TRUE
-              )
+
+    percent_time <- as.numeric(max(r$filteredData$updated_at) - min(r$filteredData$updated_at)) /
+      as.numeric(max(all_data$updated_at) - min(all_data$updated_at)) * 100
+
+    # Création du dataset
+    data <- data.frame(
+      dataset = c("Commit", "Projet", "Heure"),
+      total = c(sum(r$filteredData$type == "commit"),
+                length(unique(r$filteredData$project_name)),
+                percent_time)
     )
+    plotly::ggplotly(
+      ggplot(data, aes(x = dataset, y = total, fill = dataset)) +
+        geom_bar(stat = "identity") +
+        coord_flip() +
+        scale_fill_manual(values = c("#3498db", "#e74c3c", "#2ecc71")) +
+        labs(
+          x = "Comparaison",
+          y = "Pourcentage / Nombre",
+          title = "Comparaison des Commits, Projets et Temps"
+        ) +
+        theme_minimal() +
+        theme(legend.position = "none") +
+        geom_text(
+          aes(label = paste0(round(total, 1),"%")),
+          hjust = -0.2
+        )
+    ) %>%
+      plotly::config(locale = "fr",
+                     displaylogo = FALSE)
   })
 
+  output$nb_projet <- renderText({
+    req(r$filteredData)
+    paste("Nombre de projets visualisés",length(unique(r$filteredData$project_name)),sep = " : ")
+  })
+  output$nb_commit <- renderText({
+    req(r$filteredData)
+    paste("Nombre de commits",sum(r$filteredData$type == "commit"),sep = " : ")
+  })
+  output$nb_temps <- renderText({
+    req(r$filteredData)
+    paste("Estimation du temps passé sur la période :",sep = " ",round(difftime(
+      max(r$filteredData$updated_at) , min(r$filteredData$updated_at),units = "hours")), " heures")
+  })
+
+
+  # 7️⃣ Table des résultats ----
+  output$table <- renderDT({
+    req(r$filteredData)
+    datatable(r$filteredData, options = list(
+      pageLength = 10,
+      lengthMenu = c(5, 10, 25, 50),
+      autoWidth = TRUE,
+      scrollX = TRUE,
+      class = "display",
+      rownames = FALSE,
+      searchHighlight = TRUE
+    ))
+  })
+
+  # 8️⃣ Graphique des indicateurs -----
+
+  output$min_value <- renderText({
+    req(input$project_name)  # Vérifie que l'input existe
+
+    # Nombre de projets sélectionnés
+    selected_projects <- length(unique(input$project_name))
+
+    # Condition : Si 1 seul projet est sélectionné
+    if (selected_projects == 1) {
+      # Filtrer les données pour ce projet spécifique
+      projet_data <- all_data %>%
+        filter(project_name == input$project_name)
+
+      min_value <- min(projet_data$updated_at, na.rm = TRUE)
+
+      paste("Date de création du projet : ", format(min_value, "%d %B %Y, %H:%M"))
+    } else {
+      "Sélectionnez un seul projet pour voir la date de création."
+    }
+  })
+
+
+  output$temps <- renderText({
+    req(input$project_name)  # Vérifie que l'input existe
+
+    # Nombre de projets sélectionnés
+    selected_projects <- length(unique(input$project_name))
+    # Condition : Si 1 seul projet est sélectionné
+    if (selected_projects == 1) {
+      # Filtrer les données pour ce projet spécifique
+      projet_data <- all_data %>%
+        filter(project_name == input$project_name)
+
+      temps <- difftime(max(projet_data$updated_at), min(projet_data$updated_at), units = "secs")
+
+      jours <- as.numeric(temps, units = "days") %/% 1
+      heures <- (as.numeric(temps, units = "hours") %% 24) %/% 1
+      minutes <- (as.numeric(temps, units = "mins") %% 60) %/% 1
+      print(temps)
+      paste("Estimation du temps passé : ", jours, "jours,", heures, "heures,", minutes, "minutes")
+    } else {
+      "Sélectionnez un seul projet pour voir l'estimation."
+    }
+  })
+
+  output$bar <- renderPlot({
+    req(input$project_name)  # Vérifie que l'input existe
+
+    selected_projects <- length(unique(input$project_name))
 
+    if (selected_projects == 1) {
+      # Filtrer les données pour le project_name sélectionné
+      filtered_data <- all_data %>%
+        filter(project_name == input$project_name) %>%
+        mutate(month = format(as.Date(updated_at), "%Y-%m"))
 
+      # Définir la plage de mois spécifique au projet sélectionné
+      first_month <- floor_date(min(as.Date(filtered_data$updated_at)), "month")
+      last_month <- ceiling_date(max(as.Date(filtered_data$updated_at)), "month")
 
+      # Générer tous les mois entre le premier et le dernier
+      full_months <- seq(first_month, last_month, by = "month") %>%
+        tibble(month = format(., "%Y-%m"))
 
+      # Compter les entrées par mois et compléter les mois manquants
+      complete_data <- full_months %>%
+        left_join(filtered_data %>% count(month), by = "month") %>%
+        replace_na(list(n = 0))
+
+      # Créer le bar plot
+      ggplot(complete_data, aes(x = month, y = n)) +
+        geom_bar(stat = "identity", fill = "#ff7f27", width = 0.7) +
+        theme_minimal() +
+        scale_x_discrete(
+          name = "Mois",
+          labels = function(x) format(as.Date(paste0(x, "-01")), "%B %Y")
+        ) +
+        labs(y = "Nombre d'entrées") +
+        gouvdown::theme_gouv() +
+        theme(axis.text.x = element_text(angle = 45, hjust = 1))
+    }else{
+      ggplot() +
+        annotate("text", x = 1, y = 1, label = "Sélectionnez un seul projet pour voir la timeline", size = 5) +
+        theme_void()
+    }
+  })
 }
-- 
GitLab


From fca62d71fc22416f4fd17288f5ec2152d95fb863 Mon Sep 17 00:00:00 2001
From: LE DURAND Matteo <matteo.le-durand@developpement-durable.gouv.fr>
Date: Thu, 27 Mar 2025 11:45:31 +0100
Subject: [PATCH 27/27] importation de l'annuaire

---
 global.R | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/global.R b/global.R
index 6509e82..0e42336 100644
--- a/global.R
+++ b/global.R
@@ -29,7 +29,7 @@ load("gitlab.RData")
 load("date_MAJ.RData")
 
 
-annuaire <- read_csv("annuaire/annuaire.csv")
+annuaire <- read_csv(path_annuaire,col_types = "c")
 annuaire$Messagerie <- tolower(annuaire$Messagerie)
 annuaire <- annuaire %>% rename( mail = Messagerie)
 annuaire <- annuaire %>%  filter( str_detect(Unité,"CSD" ) )
-- 
GitLab