api_get_path(WEB_CODE_PATH).'ticket/tickets.php', 'name' => get_lang('My tickets'), ]; $interbreadcrumb[] = ['url' => '#', 'name' => get_lang('Ticket details')]; $disableReponseButtons = ''; $htmlHeadXtra[] = ''; $htmlHeadXtra[] = ''; $ticket_id = (int) $_REQUEST['ticket_id']; $ticket = TicketManager::get_ticket_detail_by_id($ticket_id); if (!isset($ticket['ticket']) || // make sure it's either a user assigned to this ticket, or the reporter, or and admin !($ticket['ticket']['assigned_last_user'] == $user_id || $ticket['ticket']['sys_insert_user_id'] == $user_id || $isAdmin) ) { api_not_allowed(true); } if (!isset($_REQUEST['ticket_id'])) { header('Location: '.api_get_path(WEB_CODE_PATH).'ticket/tickets.php'); exit; } /*if (isset($_POST['response'])) { if ($user_id == $ticket['ticket']['assigned_last_user'] || api_is_platform_admin()) { $response = $_POST['response'] === '1' ? true : false; $newStatus = TicketManager::STATUS_PENDING; if ($response) { $newStatus = TicketManager::STATUS_CLOSE; } TicketManager::update_ticket_status( TicketManager::getStatusIdFromCode($newStatus), $ticket_id, $user_id ); Display::addFlash(Display::return_message(get_lang('Update successful'))); header("Location:".api_get_self()."?ticket_id=".$ticket_id); exit; } }*/ $title = 'Ticket #'.$ticket['ticket']['code']; if (isset($_REQUEST['close'])) { TicketManager::close_ticket($ticket_id, $user_id); $ticket['ticket']['status_id'] = TicketManager::STATUS_CLOSE; $ticket['ticket']['status'] = get_lang('Closed'); } $projectId = $ticket['ticket']['project_id']; $messages = $ticket['messages']; $counter = 1; $messageToShow = ''; $formToShow = ''; foreach ($messages as $message) { $date = Display::url( date_to_str_ago($message['sys_insert_datetime']), '#', ['title' => api_get_local_time($message['sys_insert_datetime']), 'class' => 'boot-tooltip'] ); $receivedMessage = ''; if (!empty($message['subject'])) { $receivedMessage = ''.get_lang('Subject').': '.Security::remove_XSS($message['subject']).'
'; } if (!empty($message['message'])) { $receivedMessage = ''.get_lang('Message').':
'.Security::remove_XSS($message['message']).'
'; } $attachmentLinks = ''; if (isset($message['attachments'])) { $attributeClass = [ 'class' => 'attachment-link', ]; foreach ($message['attachments'] as $attach) { $attachmentLinks .= Display::tag('div', $attach['attachment_link'], $attributeClass); } } $entireMessage = $receivedMessage.$attachmentLinks; $counterLink = Display::url('#'.$counter, api_get_self().'?ticket_id='.$ticket_id.'#note-'.$counter); $messageToShow .= '

'.sprintf( get_lang('Update successfulByX'), $message['user_info']['complete_name_with_message_link'] ); $messageToShow .= ' '.$date.' '.$counterLink.'

'; $messageToShow .= '
'; if (!empty($entireMessage)) { $messageToShow .= Display::div( $entireMessage, ['class' => 'well'] ); } $counter++; } $subject = get_lang('Re:').': '.Security::remove_XSS($ticket['ticket']['subject']); if ($ticket['ticket']['status_id'] != TicketManager::STATUS_FORWARDED && $ticket['ticket']['status_id'] != TicketManager::STATUS_CLOSE ) { if ($ticket['ticket']['assigned_last_user'] == $user_id || $ticket['ticket']['sys_insert_user_id'] == $user_id || $isAdmin ) { $form = getForm($ticket['ticket']); $formToShow = $form->returnForm(); if ($form->validate()) { $ticket_id = (int) $_POST['ticket_id']; $messageToSend = ''; $message = isset($_POST['confirmation']) ? true : false; $file_attachments = $_FILES; if ($isAdmin) { $oldUserId = $ticket['ticket']['assigned_last_user']; if (isset($_POST['assigned_last_user']) && !empty($_POST['assigned_last_user']) && $_POST['assigned_last_user'] != $oldUserId ) { TicketManager::assignTicketToUser( $ticket_id, $_POST['assigned_last_user'] ); $oldUserName = '-'; if (!empty($oldUserId)) { $oldUserInfo = api_get_user_info($oldUserId); $oldUserName = $oldUserInfo['complete_name_with_message_link']; } $userCompleteName = '-'; if (!empty($_POST['assigned_last_user'])) { $userInfo = api_get_user_info( $_POST['assigned_last_user'] ); $userCompleteName = $userInfo['complete_name_with_message_link']; } $messageToSend .= sprintf( get_lang('Assignee changed from %s to %s'), $oldUserName, $userCompleteName ).'
'; } TicketManager::updateTicket( [ 'priority_id' => (int) $_POST['priority_id'], 'status_id' => (int) $_POST['status_id'], ], $ticket_id, api_get_user_id() ); if ($_POST['priority_id'] != $ticket['ticket']['priority_id']) { $newPriority = TicketManager::getPriority( $_POST['priority_id'] ); $newPriorityTitle = '-'; if ($newPriority) { $newPriorityTitle = $newPriority->getName(); } $oldPriority = TicketManager::getPriority( $ticket['ticket']['priority_id'] ); $oldPriorityTitle = '-'; if ($oldPriority) { $oldPriorityTitle = $oldPriority->getName(); } $messageToSend .= sprintf( get_lang('Priority changed from %s to %s'), $oldPriorityTitle, $newPriorityTitle ).'
'; } if ($_POST['status_id'] != $ticket['ticket']['status_id']) { $newStatus = TicketManager::getStatus( $_POST['status_id'] ); $newTitle = '-'; if ($newStatus) { $newTitle = $newStatus->getName(); } $oldStatus = TicketManager::getStatus( $ticket['ticket']['status_id'] ); $oldStatusTitle = '-'; if ($oldStatus) { $oldStatusTitle = $oldStatus->getName(); } $messageToSend .= sprintf( get_lang('Status changed from %s to %s'), $oldStatusTitle, $newTitle ).'
'; } } $messageToSend .= $_POST['content']; TicketManager::insertMessage( $ticket_id, $_POST['subject'], $messageToSend, $file_attachments, $user_id, 'NOL', $message ); TicketManager::sendNotification( $ticket_id, get_lang('TicketUpdate successful'), $messageToSend ); Display::addFlash(Display::return_message(get_lang('Saved.'))); header("Location:".api_get_self()."?ticket_id=".$ticket_id); exit; } } } Display::display_header(); echo '
'; echo Display::url( Display::return_icon('back.png', get_lang('Tickets'), [], ICON_SIZE_MEDIUM), api_get_path(WEB_CODE_PATH).'ticket/tickets.php?project_id='.$projectId ); echo '
'; $bold = ''; if ($ticket['ticket']['status_id'] == TicketManager::STATUS_CLOSE) { $bold = 'style = "font-weight: bold;"'; } $senderData = get_lang('added by').' '.$ticket['usuario']['complete_name_with_message_link']; echo ''; if (!empty($ticket['ticket']['assigned_last_user'])) { $assignedUser = api_get_user_info($ticket['ticket']['assigned_last_user']); echo ''; } else { echo ''; } if ($ticket['ticket']['course_url'] != null) { if (!empty($ticket['ticket']['session_id'])) { $sessionInfo = api_get_session_info($ticket['ticket']['session_id']); echo ''; } echo ''; } echo ' '; echo '

'.$title.'

'.Security::remove_XSS($ticket['ticket']['subject']).'

'.$senderData.' '. get_lang('Created').' '. Display::url( date_to_str_ago($ticket['ticket']['start_date_from_db']), '#', ['title' => $ticket['ticket']['start_date'], 'class' => 'boot-tooltip'] ).'. '. get_lang('TicketUpdate successful').' '. Display::url( date_to_str_ago($ticket['ticket']['sys_lastedit_datetime_from_db']), '#', ['title' => $ticket['ticket']['sys_lastedit_datetime'], 'class' => 'boot-tooltip'] ).'

'.get_lang('Category').': '.$ticket['ticket']['name'].'

'.get_lang('Status').': '.$ticket['ticket']['status'].'

'.get_lang('Priority').': '.$ticket['ticket']['priority'].'

'.get_lang('Assigned to').': '.$assignedUser['complete_name_with_message_link'].'

'.get_lang('Assigned to').': -

'.get_lang('Session').': '.$sessionInfo['name'].'
'.get_lang('Course').': '.$ticket['ticket']['course_url'].'

'.get_lang('Description').':
'.Security::remove_XSS($ticket['ticket']['message']).'
'; echo $messageToShow; echo $formToShow; Display::display_footer(); /** * @param array $ticket * * @return FormValidator */ function getForm($ticket) { $isAdmin = api_is_platform_admin(); global $subject; $form = new FormValidator( 'send_ticket', 'POST', api_get_self().'?ticket_id='.$ticket['id'], '', [ 'enctype' => 'multipart/form-data', 'class' => 'form-horizontal', ] ); if ($isAdmin) { $statusList = TicketManager::getStatusList(); $form->addElement( 'select', 'status_id', get_lang('Status'), $statusList ); $priorityList = TicketManager::getPriorityList(); $form->addElement( 'select', 'priority_id', get_lang('Priority'), $priorityList, [ 'id' => 'priority_id', 'for' => 'priority_id', ] ); $form->addSelectAjax( 'assigned_last_user', get_lang('Assign'), null, ['url' => api_get_path(WEB_AJAX_PATH).'user_manager.ajax.php?a=get_user_like'] ); $form->setDefaults( [ 'priority_id' => $ticket['priority_id'], 'status_id' => $ticket['status_id'], 'assigned_last_user' => $ticket['assigned_last_user'], ] ); } $form->addElement( 'text', 'subject', get_lang('Subject'), [ 'for' => 'subject', 'value' => $subject, 'style' => 'width: 540px;', ] ); $form->addElement('hidden', 'ticket_id', $ticket['id']); $form->addHtmlEditor( 'content', get_lang('Message'), false, false, [ 'ToolbarSet' => 'Profile', 'Width' => '550', 'Height' => '250', ] ); if ($isAdmin) { $form->addElement( 'checkbox', 'confirmation', null, get_lang('Request confirmation') ); } $form->addElement('file', 'attach_1', get_lang('Files attachments')); $form->addLabel( '', '
' ); $form->addLabel( '', ' '.get_lang('Add one more file').' ('.sprintf(get_lang('Maximun file size: %s'), format_file_size(api_get_setting('message_max_upload_filesize'))).')' ); $form->addElement('html', '
'); $form->addButtonSend(get_lang('Send message')); return $form; }