diff --git a/main/admin/index.php b/main/admin/index.php index 80dc38ffd0..6c198cbd46 100644 --- a/main/admin/index.php +++ b/main/admin/index.php @@ -194,6 +194,15 @@ if (api_is_platform_admin()) { return !in_array($item['url'], $urls); }); } + + $allowJustification = ((api_get_plugin_setting('justification', 'tool_enable') === 'true') && (api_get_plugin_setting('justification', 'access_for_session_admin') === 'true')); + if ($allowJustification) { + $items[] = [ + 'class' => 'item-justification-list', + 'url' => api_get_path(WEB_PLUGIN_PATH).'justification/list.php', + 'label' => get_lang('Justification'), + ]; + } } if (api_get_configuration_value('allow_session_admin_extra_access')) { diff --git a/main/inc/ajax/user_manager.ajax.php b/main/inc/ajax/user_manager.ajax.php index 7ab4fd18de..66cac7a251 100755 --- a/main/inc/ajax/user_manager.ajax.php +++ b/main/inc/ajax/user_manager.ajax.php @@ -96,7 +96,7 @@ switch ($action) { echo json_encode($dates); break; case 'get_user_like': - if (api_is_platform_admin() || api_is_drh()) { + if (api_is_platform_admin() || api_is_drh() || api_is_session_admin()) { $query = $_REQUEST['q']; $conditions = [ 'username' => $query, diff --git a/main/inc/lib/usermanager.lib.php b/main/inc/lib/usermanager.lib.php index 1121eeda63..489a0bf354 100755 --- a/main/inc/lib/usermanager.lib.php +++ b/main/inc/lib/usermanager.lib.php @@ -2438,6 +2438,10 @@ class UserManager } } + if (api_is_session_admin() && (api_get_setting('prevent_session_admins_to_manage_all_users') === 'true')) { + $sql_query .= ' AND user.creator_id = '.api_get_user_id(); + } + if (!empty($onlyThisUserList)) { $onlyThisUserListToString = implode("','", $onlyThisUserList); $sql_query .= " AND user.id IN ('$onlyThisUserListToString') "; diff --git a/plugin/justification/Justification.php b/plugin/justification/Justification.php index 95a5c26ef0..722e2c1653 100644 --- a/plugin/justification/Justification.php +++ b/plugin/justification/Justification.php @@ -6,11 +6,12 @@ class Justification extends Plugin protected function __construct() { parent::__construct( - '1.1', - 'Julio Montoya', + '1.2', + 'Julio Montoya, Nicolas Ducoulombier', [ 'tool_enable' => 'boolean', 'notification_to_creator_only' => 'boolean', + 'access_for_session_admin' => 'boolean', 'default_course_id' => 'text', ] ); diff --git a/plugin/justification/justification_by_user.php b/plugin/justification/justification_by_user.php index ac900fec7c..e663db4046 100644 --- a/plugin/justification/justification_by_user.php +++ b/plugin/justification/justification_by_user.php @@ -3,7 +3,8 @@ require_once __DIR__.'/../../main/inc/global.inc.php'; -api_protect_admin_script(); +$allowSessionAdmins = api_get_plugin_setting('justification', 'access_for_session_admin') === 'true'; +api_protect_admin_script($allowSessionAdmins); $tool = 'justification'; $plugin = Justification::create(); diff --git a/plugin/justification/lang/english.php b/plugin/justification/lang/english.php index e035b7fc70..6d7a7a3add 100644 --- a/plugin/justification/lang/english.php +++ b/plugin/justification/lang/english.php @@ -23,3 +23,5 @@ $strings['JustificationsCompleted'] = "Justifications completed"; $strings['SendNotificationToAllAdmins'] = "Send a notification to the administrator"; $strings['notification_to_creator_only'] = "Send notification to user's creator only"; $strings['notification_to_creator_only_help'] = "If activated then the notification will be sent only to the user who created the user who send the justifications and not to all admins"; +$strings['access_for_session_admin'] = "Enable session admins to manage users in plugin"; +$strings['access_for_session_admin_help'] = "If activated it enables session admins to access the plugin and the user's list and justification management."; diff --git a/plugin/justification/lang/french.php b/plugin/justification/lang/french.php index ad162c2462..7471da0344 100644 --- a/plugin/justification/lang/french.php +++ b/plugin/justification/lang/french.php @@ -23,3 +23,5 @@ $strings['JustificationsCompleted'] = "Dossier complété"; $strings['SendNotificationToAllAdmins'] = "Envoyer une notification à l'administrateur"; $strings['notification_to_creator_only'] = "Envoyer la notification uniquement au créateur"; $strings['notification_to_creator_only_help'] = "Si cette option est activée alors la notification est envoyée uniquement à l'utilisateur qui a créé l'utilisateur qui envoie les justificatifs et non à tous les admins de la plateforme"; +$strings['access_for_session_admin'] = "Permettre aux administrateurs de session de gérer les utilisateurs dans le plugin"; +$strings['access_for_session_admin_help'] = "Si activé alors les administrateurs de session peuvent accéder au plugin et à la liste des utilisateurs et la gestion de leurs justificatifs."; diff --git a/plugin/justification/lang/spanish.php b/plugin/justification/lang/spanish.php index e7d62adfe1..1ad35224d9 100644 --- a/plugin/justification/lang/spanish.php +++ b/plugin/justification/lang/spanish.php @@ -23,3 +23,5 @@ $strings['JustificationsCompleted'] = "justificativos completados"; $strings['SendNotificationToAllAdmins'] = "Enviar una notificación al administrador"; $strings['notification_to_creator_only'] = "Enviar la notificación solo al creador del usuario"; $strings['notification_to_creator_only_help'] = "Si esta opción esta activada entonces la notificación sera enviada solo al usuario que ha creado el usuario quien envia sus justificativo"; +$strings['access_for_session_admin'] = "Permitir a los administradores de sesión gestionar los usuarios en el plugin"; +$strings['access_for_session_admin_help'] = "Si activado entonces los administradores de sesión pueden acceder al plugin y a la lista de usuarios y gestionar sus justificativos."; diff --git a/plugin/justification/list.php b/plugin/justification/list.php index 1db0b3d5a9..9e65eb3e1c 100644 --- a/plugin/justification/list.php +++ b/plugin/justification/list.php @@ -3,7 +3,8 @@ require_once __DIR__.'/../../main/inc/global.inc.php'; -api_protect_admin_script(); +$allowSessionAdmins = api_get_plugin_setting('justification', 'access_for_session_admin') === 'true'; +api_protect_admin_script($allowSessionAdmins); $tool = 'justification'; $plugin = Justification::create(); @@ -31,12 +32,15 @@ switch ($action) { break; } -$actionLinks .= Display::toolbarButton( - $plugin->get_lang('Add'), - api_get_path(WEB_PLUGIN_PATH).'justification/add.php', - 'plus', - 'primary' -); +if (api_is_platform_admin()) { + $actionLinks .= Display::toolbarButton( + $plugin->get_lang('Add'), + api_get_path(WEB_PLUGIN_PATH).'justification/add.php', + 'plus', + 'primary' + ); +} + $actionLinks .= Display::toolbarButton( $plugin->get_lang('Users'), api_get_path(WEB_PLUGIN_PATH).'justification/justification_by_user.php', @@ -44,12 +48,14 @@ $actionLinks .= Display::toolbarButton( 'primary' ); -$actionLinks .= Display::toolbarButton( - $plugin->get_lang('SetNewCourse'), - api_get_path(WEB_PLUGIN_PATH).'justification/set_course.php', - 'book', - 'primary' -); +if (api_is_platform_admin()) { + $actionLinks .= Display::toolbarButton( + $plugin->get_lang('SetNewCourse'), + api_get_path(WEB_PLUGIN_PATH).'justification/set_course.php', + 'book', + 'primary' + ); +} $tpl->assign( 'actions',