Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

HandlesResourceRecordCreation.php 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <?php
  2. namespace App\Concerns;
  3. use App\Models\User;
  4. use Illuminate\Database\Eloquent\Builder;
  5. use Illuminate\Database\Eloquent\Model;
  6. trait HandlesResourceRecordCreation
  7. {
  8. protected function handleRecordCreationWithUniqueField(array $data, Model $model, User $user, ?string $uniqueField = null, ?array $evaluatedTypes = null): Model
  9. {
  10. // If evaluatedTypes is provided, ensure the unique field value is within the allowed types
  11. if ($uniqueField && $evaluatedTypes && ! in_array($data[$uniqueField] ?? '', $evaluatedTypes, true)) {
  12. $data['enabled'] = false;
  13. $instance = $model->newInstance($data);
  14. $instance->save();
  15. return $instance;
  16. }
  17. $companyId = $user->currentCompany->id;
  18. $shouldBeEnabled = (bool) ($data['enabled'] ?? false);
  19. $query = $model::query()
  20. ->where('company_id', $companyId)
  21. ->where('enabled', true);
  22. if ($uniqueField && array_key_exists($uniqueField, $data)) {
  23. $query->where($uniqueField, $data[$uniqueField]);
  24. }
  25. $this->toggleRecords($query, $shouldBeEnabled);
  26. $data['enabled'] = $shouldBeEnabled;
  27. $instance = $model->newInstance($data);
  28. $instance->save();
  29. return $instance;
  30. }
  31. private function toggleRecords(Builder $query, bool &$shouldBeEnabled): void
  32. {
  33. if ($shouldBeEnabled) {
  34. $existingEnabledRecord = $query->first();
  35. $existingEnabledRecord?->update(['enabled' => false]);
  36. } elseif ($query->doesntExist()) {
  37. $shouldBeEnabled = true;
  38. }
  39. }
  40. }