From 9cb8c2774aa4bd5a8bd9379a6dc054b8b3640b53 Mon Sep 17 00:00:00 2001 From: Olajide Date: Thu, 21 May 2026 20:22:30 +0100 Subject: [PATCH 1/3] warning if running in production --- src/Controllers/Issues.php | 6 +++++- src/Views/dex/issues_dialog_shell.php | 1 - src/Views/dex/issues_list.php | 8 +++++++- src/Views/dex/layout.php | 4 ---- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/Controllers/Issues.php b/src/Controllers/Issues.php index 6be6492..679f9fa 100644 --- a/src/Controllers/Issues.php +++ b/src/Controllers/Issues.php @@ -35,6 +35,8 @@ public function index(): string $q = trim((string)$this->request->getGet('q')); $page = max(1, (int) ($this->request->getGet('page') ?? 1)); $perPage = max(1, min(100, (int) ($this->request->getGet('per_page') ?? 25))); + $ciEnvironment = strtolower(trim((string) getenv('CI_ENVIRONMENT'))); + $isDexRunningInProduction = $ciEnvironment === 'production'; try { $data = $this->orchestrator->getIssuesData($status, $q, $page, $perPage); @@ -43,6 +45,8 @@ public function index(): string 'title' => 'Issues', 'dataUrl' => site_url(dex_route_prefix() . '/issues/data'), 'detailBaseUrl' => site_url(dex_route_prefix() . '/issues'), + 'isDexRunningInProduction' => $isDexRunningInProduction, + 'ciEnvironment' => $ciEnvironment, ])); } catch (DexException $e) { return view('Dex\\dex/error', [ @@ -81,7 +85,7 @@ public function dialog(int $id): ResponseInterface|string return view('Dex\\dex/issues_dialog_shell', array_merge($data, [ 'dialogUrl' => site_url(dex_route_prefix() . '/issues/' . $id . '/dialog'), 'resolveUrl' => site_url(dex_route_prefix() . '/issues/' . $id . '/resolve'), - 'ignoreUrl' => site_url(dex_route_prefix() . '/issues/' . $id . '/ignore'), + 'ignoreUrl' => site_url(dex_route_prefix() . '/issues/' . $id . '/ignore') ])); } catch (IssueNotFoundException) { return $this->response->setStatusCode(404)->setBody('Issue not found'); diff --git a/src/Views/dex/issues_dialog_shell.php b/src/Views/dex/issues_dialog_shell.php index 24101b4..a37c3a8 100644 --- a/src/Views/dex/issues_dialog_shell.php +++ b/src/Views/dex/issues_dialog_shell.php @@ -88,7 +88,6 @@ class="dex-action-menu__item" -
diff --git a/src/Views/dex/issues_list.php b/src/Views/dex/issues_list.php index 6729862..20c0af2 100644 --- a/src/Views/dex/issues_list.php +++ b/src/Views/dex/issues_list.php @@ -6,7 +6,13 @@

Issues

-

Unique exceptions grouped by fingerprint. Each issue aggregates all matching events.

+

+ + Production mode - Secure DEX + + mode + +

diff --git a/src/Views/dex/layout.php b/src/Views/dex/layout.php index cb3f387..285b4ba 100644 --- a/src/Views/dex/layout.php +++ b/src/Views/dex/layout.php @@ -111,9 +111,6 @@
- - -
renderSection('content') ?> @@ -127,7 +124,6 @@  ยท  Open-source issue tracking for CodeIgniter 4 - Website GitHub
From ecc4b93764cc1a9f113cb061efe0334f2eb96ab3 Mon Sep 17 00:00:00 2001 From: Olajide Date: Thu, 21 May 2026 20:24:27 +0100 Subject: [PATCH 2/3] link the demo in the readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a5dc603..a0e381d 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@

Get Started  |  - Demo + Demo  |  Contributing

From 6436ff3ae39761fb2af928ab6819c38a8ae803a8 Mon Sep 17 00:00:00 2001 From: Olajide Date: Thu, 21 May 2026 20:49:40 +0100 Subject: [PATCH 3/3] jump to issue when id is in URL --- src/Views/dex/_js.php | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/Views/dex/_js.php b/src/Views/dex/_js.php index a1b1e61..025076b 100644 --- a/src/Views/dex/_js.php +++ b/src/Views/dex/_js.php @@ -19,6 +19,15 @@ searchTimer: null, }; + const dexIssuesDeepLinkState = (() => { + const params = new URLSearchParams(window.location.search || ''); + const issueId = Number(params.get('issue_id') || 0); + return { + issueId: Number.isFinite(issueId) && issueId > 0 ? issueId : null, + opened: false, + }; + })(); + const dexIssueDialogState = { issueId: null, occurrenceId: null, @@ -207,6 +216,8 @@ function dexIssuesRenderRows() { return; } + dexIssuesTryOpenDeepLinkedIssue(); + if (!issues.length) { tbody.innerHTML = 'No issues match your filters.'; return; @@ -215,6 +226,22 @@ function dexIssuesRenderRows() { tbody.innerHTML = issues.map(dexIssuesBuildRow).join(''); } + function dexIssuesTryOpenDeepLinkedIssue() { + if (dexIssuesState.loading || dexIssuesDeepLinkState.opened || !dexIssuesDeepLinkState.issueId) { + return; + } + + if (dexIssueDialogState.issueId) { + dexIssuesDeepLinkState.opened = true; + return; + } + + const tbody = document.getElementById('issuesTbody'); + const row = tbody?.querySelector(`tr[data-id="${dexIssuesDeepLinkState.issueId}"]`) || null; + dexIssuesDeepLinkState.opened = true; + dexIssuesOpenDialog(dexIssuesDeepLinkState.issueId, null, row); + } + function dexIssuesDialogOverlay() { return document.getElementById('dexIssueOverlay'); }