From eb053f46625feab45224bb6a8671dcaef0bf8a0a Mon Sep 17 00:00:00 2001 From: Nicolas Ducoulombier Date: Tue, 24 Jun 2025 22:59:41 +0200 Subject: [PATCH 1/2] Ticket: Add option to give session admin the same right as admin, an option to show on my ticket page the tickets created by the user and add the possibility to search on created by field - refs BT#22722 --- main/inc/lib/TicketManager.php | 4 ++- main/install/configuration.dist.php | 5 ++++ main/ticket/new_ticket.php | 2 +- main/ticket/tickets.php | 42 ++++++++++++++++++++++++----- 4 files changed, 44 insertions(+), 9 deletions(-) diff --git a/main/inc/lib/TicketManager.php b/main/inc/lib/TicketManager.php index c839670b8ce..879544a3d35 100644 --- a/main/inc/lib/TicketManager.php +++ b/main/inc/lib/TicketManager.php @@ -801,7 +801,7 @@ public static function getTicketsByCurrentUser( if (empty($userInfo)) { return []; } - $isAdmin = UserManager::is_admin($userId); + $isAdmin = UserManager::is_admin($userId) || (api_get_configuration_value('allow_session_admin_manage_tickets_and_export_ticket_report') && api_is_session_admin($userId)); if (!isset($_GET['project_id'])) { return []; @@ -893,6 +893,7 @@ public static function getTicketsByCurrentUser( 'keyword_source' => 'ticket.source ', 'keyword_status' => 'ticket.status_id', 'keyword_priority' => 'ticket.priority_id', + 'keyword_created_by' => 'ticket.sys_insert_user_id', ]; foreach ($keywords as $keyword => $label) { @@ -1079,6 +1080,7 @@ public static function getTotalTicketsCurrentUser() 'keyword_source' => 'ticket.source', 'keyword_status' => 'ticket.status_id', 'keyword_priority' => 'ticket.priority_id', + 'keyword_created_by' => 'ticket.sys_insert_user_id', ]; foreach ($keywords as $keyword => $sqlLabel) { diff --git a/main/install/configuration.dist.php b/main/install/configuration.dist.php index d82a3da6d3e..40e5123c4f0 100644 --- a/main/install/configuration.dist.php +++ b/main/install/configuration.dist.php @@ -729,6 +729,11 @@ // ALTER TABLE ticket_ticket ADD CONSTRAINT FK_EB5B2A0D6285C231 FOREIGN KEY (lp_id) REFERENCES c_lp (iid); // $_configuration['ticket_lp_quiz_info_add'] = false; +// Allow session admins to manage tickets settings and report like global admins +//$_configuration['allow_session_admin_manage_tickets_and_export_ticket_report'] = false; +// Show ticket created by the user insted of ticket assigned to the user on MyTicket page. +//$_configuration['ticket_show_ticket_created_by_user_on_my_ticket_page'] = false; + // Exercises configuration settings // Send only quiz answer notifications to course coaches and not general coach //$_configuration['block_quiz_mail_notification_general_coach'] = false; diff --git a/main/ticket/new_ticket.php b/main/ticket/new_ticket.php index 79555d3b3f5..132c1dc4ec1 100644 --- a/main/ticket/new_ticket.php +++ b/main/ticket/new_ticket.php @@ -373,7 +373,7 @@ function save_ticket() ] ); -if (api_is_platform_admin()) { +if (api_is_platform_admin() || (api_get_configuration_value('allow_session_admin_manage_tickets_and_export_ticket_report') && api_is_session_admin())) { $form->addSelectAjax( 'user_id', get_lang('Assign'), diff --git a/main/ticket/tickets.php b/main/ticket/tickets.php index 56c9a8845d8..9b6fc366237 100644 --- a/main/ticket/tickets.php +++ b/main/ticket/tickets.php @@ -81,13 +81,13 @@ function display_advanced_search_form () { $data = [ [ '#', + get_lang('Status'), get_lang('Date'), get_lang('LastUpdate'), get_lang('Category'), - get_lang('User'), - get_lang('Program'), + get_lang('CreatedBy'), get_lang('AssignedTo'), - get_lang('Status'), + get_lang('Message'), get_lang('Description'), ], ]; @@ -128,7 +128,8 @@ function display_advanced_search_form () { $currentUrl = api_get_self().'?project_id='.$projectId; $user_id = api_get_user_id(); $isAllow = TicketManager::userIsAllowInProject(api_get_user_info(), $projectId); -$isAdmin = api_is_platform_admin(); +$allowSessionAdmin = api_get_configuration_value('allow_session_admin_manage_tickets_and_export_ticket_report') && api_is_session_admin(); +$isAdmin = api_is_platform_admin() || $allowSessionAdmin; $actionRight = ''; Display::display_header(get_lang('MyTickets')); @@ -145,6 +146,7 @@ function display_advanced_search_form () { 'keyword_unread', 'Tickets_per_page', 'Tickets_column', + 'keyword_created_by', ]; } $get_parameter = ''; @@ -190,6 +192,18 @@ function display_advanced_search_form () { foreach ($admins as $admin) { $selectAdmins[$admin['user_id']] = $admin['complete_name_with_username']; } + + $Createdby = UserManager::getUserListLike( + [], + ['username'], + true + ); + $selectcreated = [ + 0 => get_lang('Unassigned'), + ]; + foreach ($Createdby as $creator) { + $selectcreated[$creator['user_id']] = $creator['complete_name_with_username']; + } $status = TicketManager::get_all_tickets_status(); $selectStatus = []; foreach ($status as $stat) { @@ -227,7 +241,7 @@ function display_advanced_search_form () { ); // Add link - if (api_get_setting('ticket_allow_student_add') == 'true' || api_is_platform_admin()) { + if (api_get_setting('ticket_allow_student_add') == 'true' || api_is_platform_admin() || $allowSessionAdmin) { $extraParams = ''; if (isset($_GET['exerciseId']) && !empty($_GET['exerciseId'])) { @@ -250,7 +264,7 @@ function display_advanced_search_form () { ); } - if (api_is_platform_admin()) { + if (api_is_platform_admin() || $allowSessionAdmin) { $actionRight .= Display::url( Display::return_icon( 'export_excel.png', @@ -261,7 +275,9 @@ function display_advanced_search_form () { api_get_self().'?action=export'.$get_parameter.$get_parameter2.'&project_id='.$projectId, ['title' => get_lang('Export')] ); + } + if (api_is_platform_admin()) { $actionRight .= Display::url( Display::return_icon( 'settings.png', @@ -291,6 +307,11 @@ function display_advanced_search_form () { $url = api_get_path(WEB_CODE_PATH).'ticket/tickets.php?project_id='.$projectId.'&keyword_assigned_to='.api_get_user_id(); } + if (api_get_configuration_value('ticket_show_ticket_created_by_user_on_my_ticket_page') && !isset($_GET['keyword_created_by'])) { + $ticketLabel = get_lang('MyTickets'); + $url = api_get_path(WEB_CODE_PATH).'ticket/tickets.php?project_id='.$projectId.'&keyword_created_by='.api_get_user_id(); + } + $options = ''; $iconProject = Display::return_icon( 'project.png', @@ -342,6 +363,12 @@ function display_advanced_search_form () { ); $advancedSearchForm->addDateTimePicker('keyword_start_date_start', get_lang('Created')); $advancedSearchForm->addDateTimePicker('keyword_start_date_end', get_lang('Until')); + $advancedSearchForm->addSelect( + 'keyword_created_by', + get_lang('CreatedBy'), + $selectcreated, + ['placeholder' => get_lang('All')] + ); $advancedSearchForm->addSelect( 'keyword_assigned_to', get_lang('AssignedTo'), @@ -391,7 +418,8 @@ function display_advanced_search_form () { $table->set_header(1, get_lang('Status'), false); $table->set_header(2, get_lang('Date'), true); $table->set_header(3, get_lang('LastUpdate'), true); - $table->set_header(4, get_lang('Category')); + $table->set_header(4, get_lang('Category'), true); + $table->set_header(5, get_lang('CreatedBy'), true); } $table->display(); From ed419ed2c14ae440c72b589c819f1ff1aeaa459f Mon Sep 17 00:00:00 2001 From: Nicolas Ducoulombier Date: Tue, 24 Jun 2025 23:12:34 +0200 Subject: [PATCH 2/2] Ticket: #fix my tickets page show ticket created by user and come back to all tickets - refs BT#22722 --- main/ticket/tickets.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/ticket/tickets.php b/main/ticket/tickets.php index 9b6fc366237..c797d1fcca0 100644 --- a/main/ticket/tickets.php +++ b/main/ticket/tickets.php @@ -302,7 +302,7 @@ function display_advanced_search_form () { $ticketLabel = get_lang('AllTickets'); $url = api_get_path(WEB_CODE_PATH).'ticket/tickets.php?project_id='.$projectId; - if (!isset($_GET['keyword_assigned_to'])) { + if (!isset($_GET['keyword_assigned_to']) && !api_get_configuration_value('ticket_show_ticket_created_by_user_on_my_ticket_page')) { $ticketLabel = get_lang('MyTickets'); $url = api_get_path(WEB_CODE_PATH).'ticket/tickets.php?project_id='.$projectId.'&keyword_assigned_to='.api_get_user_id(); }