diff --git a/app/controllers/academic/users_controller.rb b/app/controllers/academic/users_controller.rb new file mode 100644 index 000000000..7c94598f3 --- /dev/null +++ b/app/controllers/academic/users_controller.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module Academic + class UsersController < ApplicationController + before_action :infer_page_title + + def select_academy + @academic_user = current_user + end + end +end diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 3e0b0f676..824567611 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -47,7 +47,7 @@ def oidc choose_redirect_page! end - def academic + def academic # rubocop:disable Metrics/AbcSize parse_identity @academic_login = true @@ -55,11 +55,19 @@ def academic add_auth_breadcrumb(data: { user_id: @academic_user.id }, message: "Successfully parsed academic user") - raise IdentityMappers::Errors::NoLimitedAccessError if @mapper.attributes["AplyproAcademieResp"].nil? + academies = @mapper.aplypro_academies + + raise IdentityMappers::Errors::NoLimitedAccessError if academies.empty? sign_in(:academic_user, @academic_user) - redirect_to academic_home_path + if academies.many? + render action: :select_academy + else + @academic_user.update!(selected_academy: academies.first) + + redirect_to academic_home_path, notice: t("auth.success") + end end def asp diff --git a/app/models/concerns/identity_mappers/fim.rb b/app/models/concerns/identity_mappers/fim.rb index 96412be27..ce3cd0f60 100644 --- a/app/models/concerns/identity_mappers/fim.rb +++ b/app/models/concerns/identity_mappers/fim.rb @@ -17,5 +17,9 @@ def responsibility_uais def aplypro_responsibilities Array(attributes["AplyproResp"]).compact end + + def aplypro_academies + Array(attributes["AplyproAcademieResp"]).compact + end end end diff --git a/app/views/academic/users/select_academy.html.haml b/app/views/academic/users/select_academy.html.haml new file mode 100644 index 000000000..79e04d7cf --- /dev/null +++ b/app/views/academic/users/select_academy.html.haml @@ -0,0 +1,12 @@ +.fr-grid-row + .fr-col-md-7 + %p + Veuillez sélectionner l'académie que vous désirez piloter dans la liste ci-dessous. + + .fr-select-group.fr-col-md-7 + = form_with model: @academic_user, builder: DsfrFormBuilder do |form| + .fr-input-group + = form.label :selected_academy, "Académie", class: 'fr-label' + = form.select :selected_academy, @academic_user.establishments.map { |e| [e.academy_code, e.academy_code] }, {}, { class: 'fr-select' } + + = form.submit "Continuez avec cette académie", class: 'fr-btn' diff --git a/db/migrate/20250214124041_add_selected_academy_to_users.rb b/db/migrate/20250214124041_add_selected_academy_to_users.rb new file mode 100644 index 000000000..65659525a --- /dev/null +++ b/db/migrate/20250214124041_add_selected_academy_to_users.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddSelectedAcademyToUsers < ActiveRecord::Migration[8.0] + def change + add_column :users, :selected_academy, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 1acede148..38f61d224 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.0].define(version: 2025_01_27_092313) do +ActiveRecord::Schema[8.0].define(version: 2025_02_14_124041) do # These are extensions that must be enabled in order to support this database enable_extension "pg_catalog.plpgsql" enable_extension "unaccent" @@ -292,6 +292,7 @@ t.bigint "selected_establishment_id" t.boolean "welcomed", default: false, null: false t.jsonb "oidc_attributes" + t.string "selected_academy" t.index ["email", "provider"], name: "index_users_on_email_and_provider", unique: true t.index ["selected_establishment_id"], name: "index_users_on_selected_establishment_id" t.index ["uid", "provider"], name: "index_users_on_uid_and_provider", unique: true