CreateProject.php 2.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace App\Filament\Resources\ProjectResource\Pages;
  3. use App\Filament\Resources\ProjectResource;
  4. use App\Models\Project;
  5. use Filament\Resources\Pages\CreateRecord;
  6. class CreateProject extends CreateRecord
  7. {
  8. protected static string $resource = ProjectResource::class;
  9. protected array $badgesTargetData = [];
  10. protected array $badgesAwardData = [];
  11. protected function getRedirectUrl(): string
  12. {
  13. return $this->getResource()::getUrl('index');
  14. }
  15. protected function mutateFormDataBeforeCreate(array $data): array
  16. {
  17. // 暫存標籤資料
  18. if (isset($data['badgesTarget'])) {
  19. $this->badgesTargetData = $data['badgesTarget'];
  20. unset($data['badgesTarget']);
  21. }
  22. // 暫存標籤資料
  23. if (isset($data['badgesAward'])) {
  24. $this->badgesAwardData = $data['badgesAward'];
  25. unset($data['badgesAward']);
  26. }
  27. return $data;
  28. }
  29. protected function afterCreate(): void
  30. {
  31. $syncData = [];
  32. if (! empty($this->badgesTargetData)) {
  33. foreach ($this->badgesTargetData as $index => $item) {
  34. $syncData[$item['badge_id'].'_1'] = [
  35. 'badge_id' => $item['badge_id'],
  36. 'award_type' => 1,
  37. 'award_date' => null,
  38. 'sort_order' => $index,
  39. ];
  40. }
  41. }
  42. if (! empty($this->badgesAwardData)) {
  43. foreach ($this->badgesAwardData as $index => $item) {
  44. $syncData[$item['badge_id'].'_2'] = [
  45. 'badge_id' => $item['badge_id'],
  46. 'award_type' => 2,
  47. 'award_date' => $item['award_date'].'-01',
  48. 'sort_order' => $index,
  49. ];
  50. }
  51. }
  52. foreach ($syncData as $data) {
  53. \DB::table('badgeables')->insert([
  54. 'badge_id' => $data['badge_id'],
  55. 'badgeable_id' => $this->record->id,
  56. 'badgeable_type' => Project::class,
  57. 'award_type' => $data['award_type'],
  58. 'award_date' => $data['award_date'],
  59. 'sort_order' => $data['sort_order'],
  60. 'created_at' => now(),
  61. 'updated_at' => now(),
  62. ]);
  63. }
  64. }
  65. }