Skip to content

Commit c9a375f

Browse files
committed
wip
1 parent 3aba5b4 commit c9a375f

File tree

3 files changed

+54
-1
lines changed

3 files changed

+54
-1
lines changed

src/app/Library/CrudPanel/Traits/FieldsProtectedMethods.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,13 +296,32 @@ protected function makeSureSubfieldsHaveNecessaryAttributes($field)
296296
case 'MorphToMany':
297297
case 'BelongsToMany':
298298
$pivotSelectorField = static::getPivotFieldStructure($field);
299+
300+
$pivot = Arr::where($field['subfields'], function($item) use ($pivotSelectorField) {
301+
return $item['name'] === $pivotSelectorField['name'];
302+
});
303+
304+
if(!empty($pivot)) {
305+
break;
306+
}
307+
299308
$this->setupFieldValidation($pivotSelectorField, $field['name']);
300309
$field['subfields'] = Arr::prepend($field['subfields'], $pivotSelectorField);
310+
301311
break;
302312
case 'MorphMany':
303313
case 'HasMany':
304314
$entity = isset($field['baseEntity']) ? $field['baseEntity'].'.'.$field['entity'] : $field['entity'];
305315
$relationInstance = $this->getRelationInstance(['entity' => $entity]);
316+
317+
$localKeyField = Arr::where($field['subfields'], function($item) use ($relationInstance) {
318+
return $item['name'] === $relationInstance->getRelated()->getKeyName();
319+
});
320+
321+
if(!empty($localKeyField)) {
322+
break;
323+
}
324+
306325
$field['subfields'] = Arr::prepend($field['subfields'], [
307326
'name' => $relationInstance->getRelated()->getKeyName(),
308327
'type' => 'hidden',

src/app/Library/Uploaders/Support/RegisterUploadEvents.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,8 @@ private function getSubfieldModel(array $subfield, UploaderInterface $uploader)
189189
case 'BelongsToMany':
190190
return app('crud')->getModel()->{$subfield['baseEntity']}()->getPivotClass();
191191
}
192+
193+
return $subfield['baseModel'];
192194
}
193195

194196
private function getRetrieveModel(string $model, UploaderInterface $uploader)

src/app/Library/Uploaders/Support/Traits/HandleRepeatableUploads.php

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ private function retrieveRepeatableRelationFiles(Model $entry)
119119
$entry->{$pivotFieldName} = $this->retrieveFiles($connectedEntry)->{$this->getName()};
120120

121121
break;
122+
default:
123+
$entry = $this->retrieveFiles($entry);
122124
}
123125

124126
return $entry;
@@ -149,7 +151,37 @@ private function deleteRepeatableFiles(Model $entry): void
149151
if ($this->isRelationship) {
150152
switch($this->getRepeatableRelationType()) {
151153
case 'BelongsToMany':
152-
// handle belongs to many deletion
154+
$pivotAttributes = $entry->getAttributes();
155+
$connectedPivot = $entry->pivotParent->{$this->getRepeatableContainerName()}->where(function($item) use ($pivotAttributes) {
156+
157+
$itemPivotAttributes = $item->pivot->only(array_keys($pivotAttributes));
158+
159+
return $itemPivotAttributes === $pivotAttributes;
160+
161+
})->first();
162+
163+
if(!$connectedPivot) {
164+
return;
165+
}
166+
167+
$files = $connectedPivot->getOriginal()['pivot_'.$this->getName()];
168+
169+
if(!$files) {
170+
return;
171+
}
172+
173+
if (is_array($files)) {
174+
foreach ($files as $value) {
175+
$value = Str::start($value, $this->getPath());
176+
Storage::disk($this->getDisk())->delete($value);
177+
}
178+
179+
return;
180+
}
181+
182+
$value = Str::start($files, $this->getPath());
183+
Storage::disk($this->getDisk())->delete($value);
184+
153185
return;
154186
}
155187

0 commit comments

Comments
 (0)