Skip to content

Commit 493489f

Browse files
authored
Merge pull request #8678 from ProcessMaker/story/FOUR-28723
FOUR-28723 | Store Logs For Deleting Cases via API
2 parents 82d37ad + 0e8b89f commit 493489f

File tree

5 files changed

+313
-190
lines changed

5 files changed

+313
-190
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<?php
2+
3+
namespace ProcessMaker\Events;
4+
5+
use Carbon\Carbon;
6+
use Illuminate\Foundation\Events\Dispatchable;
7+
use ProcessMaker\Contracts\SecurityLogEventInterface;
8+
use ProcessMaker\Traits\FormatSecurityLogChanges;
9+
10+
class CaseDeleted implements SecurityLogEventInterface
11+
{
12+
use Dispatchable;
13+
use FormatSecurityLogChanges;
14+
15+
private string $caseNumber;
16+
17+
private string $caseTitle;
18+
19+
/**
20+
* Create a new event instance.
21+
*
22+
* @return void
23+
*/
24+
public function __construct(string $caseNumber, string $caseTitle)
25+
{
26+
$this->caseNumber = $caseNumber;
27+
$this->caseTitle = $caseTitle;
28+
}
29+
30+
/**
31+
* Get specific data related to the event
32+
*
33+
* @return array
34+
*/
35+
public function getData(): array
36+
{
37+
return [
38+
'name' => $this->caseTitle,
39+
'case_number' => $this->caseNumber,
40+
'deleted_at' => Carbon::now(),
41+
];
42+
}
43+
44+
/**
45+
* Get specific data related to the event
46+
*
47+
* @return array
48+
*/
49+
public function getChanges(): array
50+
{
51+
return [
52+
'case_number' => $this->caseNumber,
53+
];
54+
}
55+
56+
/**
57+
* Get the Event name
58+
*
59+
* @return string
60+
*/
61+
public function getEventName(): string
62+
{
63+
return 'CaseDeleted';
64+
}
65+
}

ProcessMaker/Http/Controllers/Api/Actions/Cases/DeleteCase.php

Lines changed: 25 additions & 190 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,16 @@
33
namespace ProcessMaker\Http\Controllers\Api\Actions\Cases;
44

55
use Illuminate\Support\Facades\DB;
6-
use Illuminate\Support\Facades\Schema;
7-
use ProcessMaker\Models\CaseNumber;
8-
use ProcessMaker\Models\CaseParticipated;
6+
use ProcessMaker\Events\CaseDeleted;
97
use ProcessMaker\Models\CaseStarted;
10-
use ProcessMaker\Models\Comment;
11-
use ProcessMaker\Models\InboxRule;
12-
use ProcessMaker\Models\InboxRuleLog;
13-
use ProcessMaker\Models\Media;
14-
use ProcessMaker\Models\ProcessAbeRequestToken;
158
use ProcessMaker\Models\ProcessRequest;
16-
use ProcessMaker\Models\ProcessRequestLock;
179
use ProcessMaker\Models\ProcessRequestToken;
18-
use ProcessMaker\Models\ScheduledTask;
1910
use ProcessMaker\Models\TaskDraft;
2011

2112
class DeleteCase
2213
{
14+
use DeletesCaseRecords;
15+
2316
public function __invoke(string $caseNumber): void
2417
{
2518
$requestIds = $this->getRequestIds($caseNumber);
@@ -28,6 +21,7 @@ public function __invoke(string $caseNumber): void
2821
abort(404);
2922
}
3023

24+
$caseTitle = $this->getCaseTitle($caseNumber);
3125
$tokenIds = $this->getRequestTokenIds($requestIds);
3226

3327
DB::transaction(function () use ($caseNumber, $requestIds, $tokenIds) {
@@ -49,6 +43,8 @@ public function __invoke(string $caseNumber): void
4943
$this->deleteProcessRequests($requestIds);
5044
});
5145

46+
CaseDeleted::dispatch($caseNumber, $caseTitle);
47+
5248
$this->dispatchSavedSearchRecount();
5349
}
5450

@@ -60,6 +56,25 @@ private function getRequestIds(string $caseNumber): array
6056
->all();
6157
}
6258

59+
private function getCaseTitle(string $caseNumber): string
60+
{
61+
$caseStarted = CaseStarted::query()
62+
->where('case_number', $caseNumber)
63+
->first();
64+
65+
if ($caseStarted) {
66+
return $caseStarted->case_title ?? "Case #{$caseNumber}";
67+
} else {
68+
// If CaseStarted doesn't exist, get case title from the first ProcessRequest
69+
$firstRequest = ProcessRequest::query()
70+
->where('case_number', $caseNumber)
71+
->whereNull('parent_request_id')
72+
->first();
73+
74+
return $firstRequest?->case_title ?? "Case #{$caseNumber}";
75+
}
76+
}
77+
6378
private function getRequestTokenIds(array $requestIds): array
6479
{
6580
if ($requestIds === []) {
@@ -84,186 +99,6 @@ private function getTaskDraftIds(array $tokenIds): array
8499
->all();
85100
}
86101

87-
private function deleteCasesStarted(string $caseNumber): void
88-
{
89-
CaseStarted::query()
90-
->where('case_number', $caseNumber)
91-
->delete();
92-
}
93-
94-
private function deleteCasesParticipated(string $caseNumber): void
95-
{
96-
CaseParticipated::query()
97-
->where('case_number', $caseNumber)
98-
->delete();
99-
}
100-
101-
private function deleteCaseNumbers(array $requestIds): void
102-
{
103-
if ($requestIds === []) {
104-
return;
105-
}
106-
107-
CaseNumber::query()
108-
->whereIn('process_request_id', $requestIds)
109-
->delete();
110-
}
111-
112-
private function deleteProcessRequests(array $requestIds): void
113-
{
114-
if ($requestIds === []) {
115-
return;
116-
}
117-
118-
ProcessRequest::query()
119-
->whereIn('id', $requestIds)
120-
->get()
121-
->each
122-
->delete();
123-
}
124-
125-
private function deleteProcessRequestTokens(array $requestIds): void
126-
{
127-
if ($requestIds === []) {
128-
return;
129-
}
130-
131-
ProcessRequestToken::query()
132-
->whereIn('process_request_id', $requestIds)
133-
->delete();
134-
}
135-
136-
private function deleteProcessRequestLocks(array $requestIds, array $tokenIds): void
137-
{
138-
ProcessRequestLock::query()
139-
->whereIn('process_request_id', $requestIds)
140-
->delete();
141-
142-
if ($tokenIds !== []) {
143-
ProcessRequestLock::query()
144-
->whereIn('process_request_token_id', $tokenIds)
145-
->delete();
146-
}
147-
}
148-
149-
private function deleteProcessAbeRequestTokens(array $requestIds, array $tokenIds): void
150-
{
151-
ProcessAbeRequestToken::query()
152-
->whereIn('process_request_id', $requestIds)
153-
->delete();
154-
155-
if ($tokenIds !== []) {
156-
ProcessAbeRequestToken::query()
157-
->whereIn('process_request_token_id', $tokenIds)
158-
->delete();
159-
}
160-
}
161-
162-
private function deleteScheduledTasks(array $requestIds, array $tokenIds): void
163-
{
164-
ScheduledTask::query()
165-
->whereIn('process_request_id', $requestIds)
166-
->delete();
167-
168-
if ($tokenIds !== []) {
169-
ScheduledTask::query()
170-
->whereIn('process_request_token_id', $tokenIds)
171-
->delete();
172-
}
173-
}
174-
175-
private function deleteInboxRules(array $tokenIds): void
176-
{
177-
if ($tokenIds === []) {
178-
return;
179-
}
180-
181-
InboxRule::query()
182-
->whereIn('process_request_token_id', $tokenIds)
183-
->get()
184-
->each
185-
->delete();
186-
}
187-
188-
private function deleteInboxRuleLogs(array $tokenIds): void
189-
{
190-
if ($tokenIds === []) {
191-
return;
192-
}
193-
194-
InboxRuleLog::query()
195-
->whereIn('process_request_token_id', $tokenIds)
196-
->delete();
197-
}
198-
199-
private function deleteEllucianEthosSyncTasks(array $tokenIds): void
200-
{
201-
if ($tokenIds === [] || !Schema::hasTable('ellucian_ethos_sync_global_task_list')) {
202-
return;
203-
}
204-
205-
DB::table('ellucian_ethos_sync_global_task_list')
206-
->whereIn('process_request_token_id', $tokenIds)
207-
->delete();
208-
}
209-
210-
private function deleteTaskDrafts(array $tokenIds): void
211-
{
212-
if ($tokenIds === []) {
213-
return;
214-
}
215-
216-
TaskDraft::query()
217-
->whereIn('task_id', $tokenIds)
218-
->delete();
219-
}
220-
221-
private function deleteTaskDraftMedia(array $draftIds): void
222-
{
223-
if ($draftIds === []) {
224-
return;
225-
}
226-
227-
Media::query()
228-
->where('model_type', TaskDraft::class)
229-
->whereIn('model_id', $draftIds)
230-
->get()
231-
->each
232-
->delete();
233-
}
234-
235-
private function deleteRequestMedia(array $requestIds): void
236-
{
237-
if ($requestIds === []) {
238-
return;
239-
}
240-
241-
Media::query()
242-
->where('model_type', ProcessRequest::class)
243-
->whereIn('model_id', $requestIds)
244-
->get()
245-
->each
246-
->delete();
247-
}
248-
249-
private function deleteComments(string $caseNumber, array $requestIds, array $tokenIds): void
250-
{
251-
Comment::query()
252-
->where('case_number', $caseNumber)
253-
->orWhere(function ($query) use ($requestIds, $tokenIds) {
254-
$query->where('commentable_type', ProcessRequest::class)
255-
->whereIn('commentable_id', $requestIds);
256-
257-
if ($tokenIds !== []) {
258-
$query->orWhere(function ($nestedQuery) use ($tokenIds) {
259-
$nestedQuery->where('commentable_type', ProcessRequestToken::class)
260-
->whereIn('commentable_id', $tokenIds);
261-
});
262-
}
263-
})
264-
->delete();
265-
}
266-
267102
private function dispatchSavedSearchRecount(): void
268103
{
269104
if (!config('savedsearch.count', false)) {

0 commit comments

Comments
 (0)