Migrates the ticket detail view (communication feed + ticket metadata aside)
into the core detail drawer pattern. Click a ticket number in the customer's
support tab → drawer slides in with the full ticket thread; arrow icons step
through the current filter page; ↗ opens the full page.
- `modules/helpdesk/templates/helpdesk-ticket-detail.phtml` extracts the
body (communication feed container + metadata aside + i18n JSON) so the
full page and the fragment render from the same source.
- `ticket-fragment($id).php` / `(none).phtml` reuse BcODataGateway::getTicket
and enforce the same ABILITY_ACCESS guard as the full page. Connection
errors render inline without aborting the fragment.
- Route `helpdesk/ticket-fragment/{id}` declared in module.php.
- `helpdesk-detail.js` wires the tickets grid: ticket-no formatter emits
`data-drawer-trigger`, `linkColumn` disabled, `initDetailDrawer` called
with `onContentLoaded → initHelpdeskTicket(contentEl)` so the async
communication feed loads inside the drawer just like on the full page.
- `fetchUrl`/`fullUrl` written as single-expression arrows so the
DetailDrawerFragmentContractTest can discover the consumer and validate
the fragment endpoint files exist — the test now covers all three drawer
consumers (address book, admin users, helpdesk tickets).
The full-page ticket view is unchanged for users who deep-link directly;
only the router-to-body wiring moved through the partial.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
39 lines
1.2 KiB
PHTML
39 lines
1.2 KiB
PHTML
<?php
|
|
|
|
/**
|
|
* @var string $ticketNo
|
|
* @var string $fromCustomerNo
|
|
* @var array|null $ticket
|
|
* @var bool $connectionError
|
|
* @var string $ticketCustomerNo
|
|
* @var string $ticketDescription
|
|
* @var string $ticketCommunicationUrl
|
|
*/
|
|
|
|
$ticketNo = $ticketNo ?? '';
|
|
$fromCustomerNo = $fromCustomerNo ?? '';
|
|
$ticket = is_array($ticket ?? null) ? $ticket : null;
|
|
$connectionError = $connectionError ?? false;
|
|
$ticketCustomerNo = $ticketCustomerNo ?? '';
|
|
$ticketDescription = $ticketDescription ?? '';
|
|
$ticketCommunicationUrl = $ticketCommunicationUrl ?? '';
|
|
|
|
$backUrl = $ticketCustomerNo !== '' ? lurl('helpdesk/debitor/' . rawurlencode($ticketCustomerNo)) : lurl('helpdesk');
|
|
|
|
$titlebar = [
|
|
'title' => t('Ticket') . ' ' . $ticketNo,
|
|
'backHref' => $backUrl,
|
|
'backTitle' => t('Back'),
|
|
'actions' => $ticket !== null ? [
|
|
[
|
|
'label' => t('Refresh data'),
|
|
'type' => 'button',
|
|
'name' => 'ticket-refresh',
|
|
'class' => 'secondary outline',
|
|
],
|
|
] : [],
|
|
];
|
|
require templatePath('partials/app-details-titlebar.phtml');
|
|
require templatePath('partials/app-flash.phtml');
|
|
require __DIR__ . '/../../templates/helpdesk-ticket-detail.phtml';
|