Skip to content

Commit 52afec0

Browse files
authored
Merge pull request #5763 from AngelFQC/BT21930
Plugin: Azure: Improvements for existing user verification and scripts to sync users
2 parents d30adc7 + df28327 commit 52afec0

File tree

15 files changed

+772
-88
lines changed

15 files changed

+772
-88
lines changed

main/auth/external_login/login.azure.php

+10
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@
1212
api_not_allowed(true);
1313
}
1414

15+
$uidField = new ExtraFieldValue('user');
16+
$uidValue = $uidField->get_values_by_handler_and_field_variable(
17+
$uData['user_id'],
18+
AzureActiveDirectory::EXTRA_FIELD_AZURE_UID
19+
);
20+
21+
if (empty($uidValue) || empty($uidValue['value'])) {
22+
api_not_allowed(true);
23+
}
24+
1525
$azureIdField = new ExtraFieldValue('user');
1626
$azureIdValue = $azureIdField->get_values_by_handler_and_field_variable(
1727
$uData['user_id'],

main/inc/lib/usermanager.lib.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -6249,7 +6249,7 @@ public static function get_favicon_from_url($url1, $url2 = null)
62496249
return $icon_link;
62506250
}
62516251

6252-
public static function addUserAsAdmin(User $user)
6252+
public static function addUserAsAdmin(User $user, bool $andFlush = true)
62536253
{
62546254
if ($user) {
62556255
$userId = $user->getId();
@@ -6260,19 +6260,19 @@ public static function addUserAsAdmin(User $user)
62606260
}
62616261

62626262
$user->addRole('ROLE_SUPER_ADMIN');
6263-
self::getManager()->updateUser($user, true);
6263+
self::getManager()->updateUser($user, $andFlush);
62646264
}
62656265
}
62666266

6267-
public static function removeUserAdmin(User $user)
6267+
public static function removeUserAdmin(User $user, bool $andFlush = true)
62686268
{
62696269
$userId = (int) $user->getId();
62706270
if (self::is_admin($userId)) {
62716271
$table = Database::get_main_table(TABLE_MAIN_ADMIN);
62726272
$sql = "DELETE FROM $table WHERE user_id = $userId";
62736273
Database::query($sql);
62746274
$user->removeRole('ROLE_SUPER_ADMIN');
6275-
self::getManager()->updateUser($user, true);
6275+
self::getManager()->updateUser($user, $andFlush);
62766276
}
62776277
}
62786278

plugin/azure_active_directory/CHANGELOG.md

+21
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,26 @@
11
# Azure Active Directory Changelog
22

3+
## 2.4 - 2024-08-28
4+
5+
* Added a new user extra field to save the unique Azure ID (internal UID).
6+
This requires manually doing the following changes to your database if you are upgrading from v2.3
7+
```sql
8+
INSERT INTO extra_field (extra_field_type, field_type, variable, display_text, default_value, field_order, visible_to_self, visible_to_others, changeable, filter, created_at) VALUES (1, 1, 'azure_uid', 'Azure UID (internal ID)', '', 1, null, null, null, null, '2024-08-28 00:00:00');
9+
```
10+
* Added a new option to set the order to verify the existing user in Chamilo
11+
```sql
12+
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url, access_url_changeable, access_url_locked) VALUES ('azure_active_directory_existing_user_verification_order', 'azure_active_directory', 'setting', 'Plugins', '', 'azure_active_directory', '', '', '', 1, 1, 0);
13+
```
14+
* Added a new option to update user info during the login proccess.
15+
```sql
16+
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url, access_url_changeable, access_url_locked) VALUES ('azure_active_directory_update_users', 'azure_active_directory', 'setting', 'Plugins', '', 'azure_active_directory', '', '', '', 1, 1, 0);
17+
```
18+
* Added new scripts to syncronize users and groups with users and usergroups (classes). And an option to deactivate accounts in Chamilo that do not exist in Azure.
19+
```sql
20+
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url, access_url_changeable, access_url_locked) VALUES ('azure_active_directory_tenant_id', 'azure_active_directory', 'setting', 'Plugins', '', 'azure_active_directory', '', '', '', 1, 1, 0);
21+
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url, access_url_changeable, access_url_locked) VALUES ('azure_active_directory_deactivate_nonexisting_users', 'azure_active_directory', 'setting', 'Plugins', '', 'azure_active_directory', '', '', '', 1, 1, 0);
22+
```
23+
324
## 2.3 - 2021-03-30
425

526
* Added admin, session admin and teacher groups. This requires adding the following fields to your database if

plugin/azure_active_directory/lang/dutch.php

+11
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,18 @@
2222
.'U zult moeten kopiëren de <code>/plugin/azure_active_directory/layout/login_form.tpl</code> bestand in het <code>/main/template/overrides/layout/</code> dossier.';
2323
$strings['management_login_name'] = 'Naam voor de beheeraanmelding';
2424
$strings['management_login_name_help'] = 'De standaardinstelling is "Beheer login".';
25+
$strings['existing_user_verification_order'] = 'Existing user verification order';
26+
$strings['existing_user_verification_order_help'] = 'This value indicates the order in which the user will be searched in Chamilo to verify its existence. '
27+
.'By default is <code>1, 2, 3</code>.'
28+
.'<ol><li>EXTRA_FIELD_ORGANISATION_EMAIL (<code>mail</code>)</li><li>EXTRA_FIELD_AZURE_ID (<code>mailNickname</code>)</li><li>EXTRA_FIELD_AZURE_UID (<code>id</code> of <code>objectId</code>)</li></ol>';
2529
$strings['OrganisationEmail'] = 'Organisatie e-mail';
2630
$strings['AzureId'] = 'Azure ID (mailNickname)';
31+
$strings['AzureUid'] = 'Azure UID (internal ID)';
2732
$strings['ManagementLogin'] = 'Beheer Login';
2833
$strings['InvalidId'] = 'Deze identificatie is niet geldig (verkeerde log-in of wachtwoord). Errocode: AZMNF';
2934
$strings['provisioning'] = 'Geautomatiseerde inrichting';
35+
$strings['update_users'] = 'Update users';
36+
$strings['update_users_help'] = 'Allow user data to be updated at the start of the session.';
3037
$strings['provisioning_help'] = 'Maak automatisch nieuwe gebruikers (als studenten) vanuit Azure wanneer ze niet in Chamilo zijn.';
3138
$strings['group_id_admin'] = 'Groeps-ID voor platformbeheerders';
3239
$strings['group_id_admin_help'] = 'De groeps-ID is te vinden in de details van de gebruikersgroep en ziet er ongeveer zo uit: ae134eef-cbd4-4a32-ba99-49898a1314b6. Indien leeg, wordt er automatisch geen gebruiker aangemaakt als admin.';
@@ -35,3 +42,7 @@
3542
$strings['group_id_teacher'] = 'Groeps-ID voor docenten';
3643
$strings['group_id_teacher_help'] = 'De groeps-ID voor docenten. Indien leeg, wordt er automatisch geen gebruiker aangemaakt als docent.';
3744
$strings['additional_interaction_required'] = 'Er is aanvullende interactie vereist om u te authenticeren. Log rechtstreeks in via <a href="https://login.microsoftonline.com" target="_blank">uw authenticatiesysteem</a> en kom dan terug naar deze pagina om in te loggen.';
45+
$strings['tenant_id'] = 'Mandanten-ID';
46+
$strings['tenant_id_help'] = 'Required to run scripts.';
47+
$strings['deactivate_nonexisting_users'] = 'Deactivate non-existing users';
48+
$strings['deactivate_nonexisting_users_help'] = 'Compare registered users in Chamilo with those in Azure and deactivate accounts in Chamilo that do not exist in Azure.';

plugin/azure_active_directory/lang/english.php

+11
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,27 @@
2222
.'You will need to copy the <code>/plugin/azure_active_directory/layout/login_form.tpl</code> file to <code>/main/template/overrides/layout/</code> directory.';
2323
$strings['management_login_name'] = 'Name for the management login';
2424
$strings['management_login_name_help'] = 'The default is "Management Login".';
25+
$strings['existing_user_verification_order'] = 'Existing user verification order';
26+
$strings['existing_user_verification_order_help'] = 'This value indicates the order in which the user will be searched in Chamilo to verify its existence. '
27+
.'By default is <code>1, 2, 3</code>.'
28+
.'<ol><li>EXTRA_FIELD_ORGANISATION_EMAIL (<code>mail</code>)</li><li>EXTRA_FIELD_AZURE_ID (<code>mailNickname</code>)</li><li>EXTRA_FIELD_AZURE_UID (<code>id</code> or <code>objectId</code>)</li></ol>';
2529
$strings['OrganisationEmail'] = 'Organisation e-mail';
2630
$strings['AzureId'] = 'Azure ID (mailNickname)';
31+
$strings['AzureUid'] = 'Azure UID (internal ID)';
2732
$strings['ManagementLogin'] = 'Management Login';
2833
$strings['InvalidId'] = 'Login failed - incorrect login or password. Errocode: AZMNF';
2934
$strings['provisioning'] = 'Automated provisioning';
3035
$strings['provisioning_help'] = 'Automatically create new users (as students) from Azure when they are not in Chamilo.';
36+
$strings['update_users'] = 'Update users';
37+
$strings['update_users_help'] = 'Allow user data to be updated at the start of the session.';
3138
$strings['group_id_admin'] = 'Group ID for platform admins';
3239
$strings['group_id_admin_help'] = 'The group ID can be found in the user group details, looking similar to this: ae134eef-cbd4-4a32-ba99-49898a1314b6. If empty, no user will be automatically created as admin.';
3340
$strings['group_id_session_admin'] = 'Group ID for session admins';
3441
$strings['group_id_session_admin_help'] = 'The group ID for session admins. If empty, no user will be automatically created as session admin.';
3542
$strings['group_id_teacher'] = 'Group ID for teachers';
3643
$strings['group_id_teacher_help'] = 'The group ID for teachers. If empty, no user will be automatically created as teacher.';
3744
$strings['additional_interaction_required'] = 'Some additional interaction is required to authenticate you. Please login directly through <a href="https://login.microsoftonline.com" target="_blank">your authentication system</a>, then come back to this page to login.';
45+
$strings['tenant_id'] = 'Tenant ID';
46+
$strings['tenant_id_help'] = 'Required to run scripts.';
47+
$strings['deactivate_nonexisting_users'] = 'Deactivate non-existing users';
48+
$strings['deactivate_nonexisting_users_help'] = 'Compare registered users in Chamilo with those in Azure and deactivate accounts in Chamilo that do not exist in Azure.';

plugin/azure_active_directory/lang/french.php

+11
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,27 @@
2222
.'Vous devez, pour cela, copier le fichier <code>/plugin/azure_active_directory/layout/login_form.tpl</code> dans le répertoire <code>/main/template/overrides/layout/</code>.';
2323
$strings['management_login_name'] = 'Nom du login de gestion';
2424
$strings['management_login_name_help'] = 'Le nom par défaut est "Login de gestion".';
25+
$strings['existing_user_verification_order'] = 'Existing user verification order';
26+
$strings['existing_user_verification_order_help'] = 'This value indicates the order in which the user will be searched in Chamilo to verify its existence. '
27+
.'By default is <code>1, 2, 3</code>.'
28+
.'<ol><li>EXTRA_FIELD_ORGANISATION_EMAIL (<code>mail</code>)</li><li>EXTRA_FIELD_AZURE_ID (<code>mailNickname</code>)</li><li>EXTRA_FIELD_AZURE_UID (<code>id</code> ou <code>objectId</code>)</li></ol>';
2529
$strings['OrganisationEmail'] = 'E-mail professionnel';
2630
$strings['AzureId'] = 'ID Azure (mailNickname)';
31+
$strings['AzureUid'] = 'Azure UID (internal ID)';
2732
$strings['ManagementLogin'] = 'Login de gestion';
2833
$strings['InvalidId'] = 'Échec du login - nom d\'utilisateur ou mot de passe incorrect. Errocode: AZMNF';
2934
$strings['provisioning'] = 'Création automatisée';
3035
$strings['provisioning_help'] = 'Créer les utilisateurs automatiquement (en tant qu\'apprenants) depuis Azure s\'ils n\'existent pas encore dans Chamilo.';
36+
$strings['update_users'] = 'Actualiser les utilisateurs';
37+
$strings['update_users_help'] = 'Permettre d\'actualiser les données de l\'utilisateur lors du démarrage de la session.';
3138
$strings['group_id_admin'] = 'ID du groupe administrateur';
3239
$strings['group_id_admin_help'] = 'L\'id du groupe peut être trouvé dans les détails du groupe, et ressemble à ceci : ae134eef-cbd4-4a32-ba99-49898a1314b6. Si ce champ est laissé vide, aucun utilisateur ne sera créé en tant qu\'administrateur.';
3340
$strings['group_id_session_admin'] = 'ID du groupe administrateur de sessions';
3441
$strings['group_id_session_admin_help'] = 'The group ID for session admins. Si ce champ est laissé vide, aucun utilisateur ne sera créé en tant qu\'administrateur de sessions.';
3542
$strings['group_id_teacher'] = 'ID du groupe enseignant';
3643
$strings['group_id_teacher_help'] = 'The group ID for teachers. Si ce champ est laissé vide, aucun utilisateur ne sera créé en tant qu\'enseignant.';
3744
$strings['additional_interaction_required'] = 'Une interaction supplémentaire est nécessaire pour vous authentifier. Veuillez vous connecter directement auprès de <a href="https://login.microsoftonline.com" target="_blank">votre système d\'authentification</a>, puis revenir ici pour vous connecter.';
45+
$strings['tenant_id'] = 'ID du client';
46+
$strings['tenant_id_help'] = 'Nécessaire pour exécuter des scripts.';
47+
$strings['deactivate_nonexisting_users'] = 'Deactivate non-existing users';
48+
$strings['deactivate_nonexisting_users_help'] = 'Compare registered users in Chamilo with those in Azure and deactivate accounts in Chamilo that do not exist in Azure.';

plugin/azure_active_directory/lang/spanish.php

+11
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,27 @@
2222
.'Para ello, tendrá que copiar el archivo <code>/plugin/azure_active_directory/layout/login_form.tpl</code> en la carpeta <code>/main/template/overrides/layout/</code>.';
2323
$strings['management_login_name'] = 'Nombre del bloque de login de gestión';
2424
$strings['management_login_name_help'] = 'El nombre por defecto es "Login de gestión".';
25+
$strings['existing_user_verification_order'] = 'Orden de verificación de usuario existente';
26+
$strings['existing_user_verification_order_help'] = 'Este valor indica el orden en que el usuario serña buscado en Chamilo para verificar su existencia. '
27+
.'Por defecto es <code>1, 2, 3</code>.'
28+
.'<ol><li>EXTRA_FIELD_ORGANISATION_EMAIL (<code>mail</code>)</li><li>EXTRA_FIELD_AZURE_ID (<code>mailNickname</code>)</li><li>EXTRA_FIELD_AZURE_UID (<code>id</code> o <code>objectId</code>)</li></ol>';
2529
$strings['OrganisationEmail'] = 'E-mail profesional';
2630
$strings['AzureId'] = 'ID Azure (mailNickname)';
31+
$strings['AzureUid'] = 'UID Azure (ID interno)';
2732
$strings['ManagementLogin'] = 'Login de gestión';
2833
$strings['InvalidId'] = 'Problema en el login - nombre de usuario o contraseña incorrecto. Errocode: AZMNF';
2934
$strings['provisioning'] = 'Creación automatizada';
3035
$strings['provisioning_help'] = 'Crear usuarios automáticamente (como alumnos) desde Azure si no existen en Chamilo todavía.';
36+
$strings['update_users'] = 'Actualizar los usuarios';
37+
$strings['update_users_help'] = 'Permite actualizar los datos del usuario al iniciar sesión.';
3138
$strings['group_id_admin'] = 'ID de grupo administrador';
3239
$strings['group_id_admin_help'] = 'El ID de grupo se encuentra en los detalles del grupo en Azure, y parece a: ae134eef-cbd4-4a32-ba99-49898a1314b6. Si deja este campo vacío, ningún usuario será creado como administrador.';
3340
$strings['group_id_session_admin'] = 'ID de grupo admin de sesiones';
3441
$strings['group_id_session_admin_help'] = 'El ID de grupo para administradores de sesiones. Si deja este campo vacío, ningún usuario será creado como administrador de sesiones.';
3542
$strings['group_id_teacher'] = 'ID de grupo profesor';
3643
$strings['group_id_teacher_help'] = 'El ID de grupo para profesores. Si deja este campo vacío, ningún usuario será creado como profesor.';
3744
$strings['additional_interaction_required'] = 'Alguna interacción adicional es necesaria para identificarlo/a. Por favor conéctese primero a través de su <a href="https://login.microsoftonline.com" target="_blank">sistema de autenticación</a>, luego regrese aquí para logearse.';
45+
$strings['tenant_id'] = 'Id. del inquilino';
46+
$strings['tenant_id_help'] = 'Necesario para ejecutar scripts.';
47+
$strings['deactivate_nonexisting_users'] = 'Desactivar usuarios no existentes';
48+
$strings['deactivate_nonexisting_users_help'] = 'Compara los usuarios registrados en Chamilo con los de Azure y desactiva las cuentas en Chamilo que no existan en Azure.';

0 commit comments

Comments
 (0)