Skip to content

Commit 6a71ff0

Browse files
committed
Issue #2307 has been fixed.
1 parent d61fb43 commit 6a71ff0

File tree

4 files changed

+131
-58
lines changed

4 files changed

+131
-58
lines changed

packages/Webkul/Admin/src/Http/Controllers/Settings/Marketing/EventController.php

Lines changed: 69 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Webkul\Admin\Http\Controllers\Settings\Marketing;
44

5+
use Exception;
56
use Illuminate\Http\JsonResponse;
67
use Illuminate\Support\Facades\Event;
78
use Illuminate\View\View;
@@ -80,11 +81,19 @@ public function update(int $id): JsonResponse
8081
*/
8182
public function destroy(int $id): JsonResponse
8283
{
83-
Event::dispatch('settings.marketing.events.delete.before', $id);
84+
$event = $this->eventRepository->findOrFail($id);
8485

85-
$this->eventRepository->delete($id);
86+
if ($event->campaigns->isNotEmpty()) {
87+
return response()->json([
88+
'message' => trans('admin::app.settings.marketing.events.index.delete-failed-associated-campaigns'),
89+
], 422);
90+
}
91+
92+
Event::dispatch('settings.marketing.events.delete.before', $event);
93+
94+
$this->eventRepository->delete($event->id);
8695

87-
Event::dispatch('settings.marketing.events.delete.after', $id);
96+
Event::dispatch('settings.marketing.events.delete.after', $event);
8897

8998
return response()->json([
9099
'message' => trans('admin::app.settings.marketing.events.index.delete-success'),
@@ -94,20 +103,67 @@ public function destroy(int $id): JsonResponse
94103
/**
95104
* Remove the specified marketing events from storage.
96105
*/
97-
public function massDestroy(MassDestroyRequest $massDestroyRequest): JsonResponse
106+
public function massDestroy(MassDestroyRequest $request): JsonResponse
98107
{
99-
$marketingEvents = $this->eventRepository->findWhereIn('id', $massDestroyRequest->input('indices'));
108+
try {
109+
$events = $this->eventRepository->findWhereIn('id', $request->input('indices', []));
100110

101-
foreach ($marketingEvents as $marketingEvent) {
102-
Event::dispatch('settings.marketing.events.delete.before', $marketingEvent);
111+
$deletedCount = 0;
103112

104-
$this->eventRepository->delete($marketingEvent->id);
113+
$blockedCount = 0;
105114

106-
Event::dispatch('settings.marketing.events.delete.after', $marketingEvent);
107-
}
115+
foreach ($events as $event) {
116+
if (
117+
$event->campaigns
118+
&& $event->campaigns->isNotEmpty()
119+
) {
120+
$blockedCount++;
108121

109-
return response()->json([
110-
'message' => trans('admin::app.settings.marketing.events.index.mass-delete-success'),
111-
]);
122+
continue;
123+
}
124+
125+
Event::dispatch('settings.marketing.events.delete.before', $event);
126+
127+
$this->eventRepository->delete($event->id);
128+
129+
Event::dispatch('settings.marketing.events.delete.after', $event);
130+
131+
$deletedCount++;
132+
}
133+
134+
$statusCode = 200;
135+
136+
switch (true) {
137+
case $deletedCount > 0 && $blockedCount === 0:
138+
$message = trans('admin::app.settings.marketing.events.index.mass-delete-success');
139+
140+
break;
141+
142+
case $deletedCount > 0 && $blockedCount > 0:
143+
$message = trans('admin::app.settings.marketing.events.index.partial-delete-warning');
144+
145+
break;
146+
147+
case $deletedCount === 0 && $blockedCount > 0:
148+
$message = trans('admin::app.settings.marketing.events.index.none-delete-warning');
149+
150+
$statusCode = 400;
151+
152+
break;
153+
154+
default:
155+
$message = trans('admin::app.settings.marketing.events.index.no-selection');
156+
157+
$statusCode = 400;
158+
159+
break;
160+
}
161+
162+
return response()->json(['message' => $message], $statusCode);
163+
} catch (Exception $e) {
164+
return response()->json([
165+
'message' => trans('admin::app.settings.marketing.events.index.mass-delete-failed'),
166+
], 400);
167+
}
112168
}
113169
}

packages/Webkul/Admin/src/Resources/lang/en/app.php

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,13 +1116,17 @@
11161116
'marketing' => [
11171117
'events' => [
11181118
'index' => [
1119-
'create-btn' => 'Create Event',
1120-
'title' => 'Events',
1121-
'create-success' => 'Event created successfully.',
1122-
'update-success' => 'Event updated successfully.',
1123-
'delete-success' => 'Event deleted successfully.',
1124-
'delete-failed' => 'Event can not be deleted.',
1125-
'mass-delete-success' => 'Events deleted successfully',
1119+
'create-btn' => 'Create Event',
1120+
'title' => 'Events',
1121+
'create-success' => 'Event created successfully.',
1122+
'update-success' => 'Event updated successfully.',
1123+
'delete-success' => 'Event deleted successfully.',
1124+
'delete-failed' => 'Event can not be deleted.',
1125+
'delete-failed-associated-campaigns' => 'Event can not be deleted, as it is associated with campaigns.',
1126+
'mass-delete-success' => 'Events deleted successfully.',
1127+
'partial-delete-warning' => 'Some events could not be deleted, as they are associated with campaigns.',
1128+
'none-delete-warning' => 'None of the selected events could be deleted, as they are associated with campaigns.',
1129+
'no-selection' => 'No events were selected for deletion.',
11261130

11271131
'datagrid' => [
11281132
'delete' => 'Delete',

0 commit comments

Comments
 (0)