manage cities added, edit venue images

This commit is contained in:
HolgerHatGarKeineNode
2023-02-27 13:09:46 +01:00
parent 03fcb375bf
commit 1dda151060
26 changed files with 189 additions and 56 deletions

View File

@@ -11,7 +11,6 @@ class CountryController extends Controller
{ {
/** /**
* Display a listing of the resource. * Display a listing of the resource.
*
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function index(Request $request) public function index(Request $request)
@@ -27,7 +26,10 @@ class CountryController extends Controller
) )
->when( ->when(
$request->exists('selected'), $request->exists('selected'),
fn (Builder $query) => $query->whereIn('code', $request->input('selected', [])), fn(Builder $query) => $query
->whereIn('code', $request->input('selected', []))
->orWhereIn('id',
$request->input('selected', [])),
fn(Builder $query) => $query->limit(10) fn(Builder $query) => $query->limit(10)
) )
->get() ->get()
@@ -40,7 +42,6 @@ class CountryController extends Controller
/** /**
* Store a newly created resource in storage. * Store a newly created resource in storage.
*
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function store(Request $request) public function store(Request $request)
@@ -50,7 +51,6 @@ class CountryController extends Controller
/** /**
* Display the specified resource. * Display the specified resource.
*
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function show(Country $country) public function show(Country $country)
@@ -60,7 +60,6 @@ class CountryController extends Controller
/** /**
* Update the specified resource in storage. * Update the specified resource in storage.
*
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function update(Request $request, Country $country) public function update(Request $request, Country $country)
@@ -70,7 +69,6 @@ class CountryController extends Controller
/** /**
* Remove the specified resource from storage. * Remove the specified resource from storage.
*
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function destroy(Country $country) public function destroy(Country $country)

View File

@@ -10,6 +10,14 @@ class CityTable extends Component
{ {
public Country $country; public Country $country;
public bool $manage = false;
protected $queryString = [
'manage' => [
'except' => false,
],
];
public function render() public function render()
{ {
return view('livewire.book-case.city-table')->layout('layouts.app', [ return view('livewire.book-case.city-table')->layout('layouts.app', [

View File

@@ -10,6 +10,10 @@ class VenueTable extends Component
{ {
public Country $country; public Country $country;
public bool $manage = false;
protected $queryString = ['manage' => ['except' => false]];
public function render() public function render()
{ {
return view('livewire.school.venue-table')->layout('layouts.app', [ return view('livewire.school.venue-table')->layout('layouts.app', [

View File

@@ -17,12 +17,14 @@ class CityTable extends DataTableComponent
public string $type; public string $type;
public bool $manage = false;
public string $tableName = 'cities'; public string $tableName = 'cities';
public function configure(): void public function configure(): void
{ {
$this->setPrimaryKey('id') $this->setPrimaryKey('id')
->setAdditionalSelects(['id']) ->setAdditionalSelects(['cities.id', 'cities.created_by'])
->setThAttributes(function (Column $column) { ->setThAttributes(function (Column $column) {
return [ return [
'class' => 'px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider dark:bg-gray-800 dark:text-gray-400', 'class' => 'px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider dark:bg-gray-800 dark:text-gray-400',
@@ -74,6 +76,7 @@ class CityTable extends DataTableComponent
fn ($row, Column $column) => view('columns.cities.action') fn ($row, Column $column) => view('columns.cities.action')
->withRow($row) ->withRow($row)
->withType($this->type) ->withType($this->type)
->withManage($this->manage)
), ),
]) ])
->toArray(); ->toArray();

View File

@@ -12,6 +12,8 @@ class VenueTable extends DataTableComponent
{ {
public string $country; public string $country;
public bool $manage = false;
public string $tableName = 'venues'; public string $tableName = 'venues';
public function configure(): void public function configure(): void
@@ -66,7 +68,7 @@ class VenueTable extends DataTableComponent
->collapseOnMobile(), ->collapseOnMobile(),
Column::make('') Column::make('')
->label( ->label(
fn ($row, Column $column) => view('columns.venues.action')->withRow($row) fn ($row, Column $column) => view('columns.venues.action')->withRow($row)->withManage($this->manage)
), ),
]; ];
} }

View File

@@ -6,6 +6,7 @@ use App\Models\Venue;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Livewire\Component; use Livewire\Component;
use Livewire\WithFileUploads; use Livewire\WithFileUploads;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use WireUi\Traits\Actions; use WireUi\Traits\Actions;
class VenueForm extends Component class VenueForm extends Component
@@ -23,6 +24,8 @@ class VenueForm extends Component
protected $queryString = ['fromUrl' => ['except' => '']]; protected $queryString = ['fromUrl' => ['except' => '']];
protected $listeners = ['refresh' => '$refresh'];
public function rules() public function rules()
{ {
return [ return [
@@ -49,6 +52,16 @@ class VenueForm extends Component
} }
} }
public function deleteMedia($id)
{
Media::query()
->find($id)
->delete();
$this->notification()
->success(__('Image deleted!'));
$this->emit('refresh');
}
public function submit() public function submit()
{ {
$this->validate(); $this->validate();

View File

@@ -787,5 +787,10 @@
"Manage content creators": "Verwalte Content Creators", "Manage content creators": "Verwalte Content Creators",
"Lecturers\/Content Creators": "Dozenten\/Content Creators", "Lecturers\/Content Creators": "Dozenten\/Content Creators",
"Manage lecturers": "Verwalte Dozenten", "Manage lecturers": "Verwalte Dozenten",
"Settings": "Einstellungen" "Settings": "Einstellungen",
"Are you sure you want to delete this Bitcoin event?": "Bitte bestätige, dass du dieses Bitcoin Event löschen möchtest.",
"Manage cities\/areas": "Verwalte Städte\/Gebiete",
"Manage venues": "Verwalte Veranstaltungsorte",
"Image deleted!": "Bild gelöscht!",
"Current pictures": "Derzeitige Bilder"
} }

View File

@@ -784,5 +784,10 @@
"Participants": "", "Participants": "",
"Lecturers\/Content Creators": "", "Lecturers\/Content Creators": "",
"Manage lecturers": "", "Manage lecturers": "",
"Settings": "" "Settings": "",
"Are you sure you want to delete this Bitcoin event?": "",
"Manage cities\/areas": "",
"Manage venues": "",
"Image deleted!": "",
"Current pictures": ""
} }

View File

@@ -784,5 +784,10 @@
"Participants": "", "Participants": "",
"Lecturers\/Content Creators": "", "Lecturers\/Content Creators": "",
"Manage lecturers": "", "Manage lecturers": "",
"Settings": "" "Settings": "",
"Are you sure you want to delete this Bitcoin event?": "",
"Manage cities\/areas": "",
"Manage venues": "",
"Image deleted!": "",
"Current pictures": ""
} }

View File

@@ -785,5 +785,10 @@
"Participants": "", "Participants": "",
"Lecturers\/Content Creators": "", "Lecturers\/Content Creators": "",
"Manage lecturers": "", "Manage lecturers": "",
"Settings": "" "Settings": "",
"Are you sure you want to delete this Bitcoin event?": "",
"Manage cities\/areas": "",
"Manage venues": "",
"Image deleted!": "",
"Current pictures": ""
} }

View File

@@ -785,5 +785,10 @@
"Participants": "", "Participants": "",
"Lecturers\/Content Creators": "", "Lecturers\/Content Creators": "",
"Manage lecturers": "", "Manage lecturers": "",
"Settings": "" "Settings": "",
"Are you sure you want to delete this Bitcoin event?": "",
"Manage cities\/areas": "",
"Manage venues": "",
"Image deleted!": "",
"Current pictures": ""
} }

View File

@@ -785,5 +785,10 @@
"Participants": "", "Participants": "",
"Lecturers\/Content Creators": "", "Lecturers\/Content Creators": "",
"Manage lecturers": "", "Manage lecturers": "",
"Settings": "" "Settings": "",
"Are you sure you want to delete this Bitcoin event?": "",
"Manage cities\/areas": "",
"Manage venues": "",
"Image deleted!": "",
"Current pictures": ""
} }

View File

@@ -785,5 +785,10 @@
"Participants": "", "Participants": "",
"Lecturers\/Content Creators": "", "Lecturers\/Content Creators": "",
"Manage lecturers": "", "Manage lecturers": "",
"Settings": "" "Settings": "",
"Are you sure you want to delete this Bitcoin event?": "",
"Manage cities\/areas": "",
"Manage venues": "",
"Image deleted!": "",
"Current pictures": ""
} }

View File

@@ -785,5 +785,10 @@
"Participants": "", "Participants": "",
"Lecturers\/Content Creators": "", "Lecturers\/Content Creators": "",
"Manage lecturers": "", "Manage lecturers": "",
"Settings": "" "Settings": "",
"Are you sure you want to delete this Bitcoin event?": "",
"Manage cities\/areas": "",
"Manage venues": "",
"Image deleted!": "",
"Current pictures": ""
} }

View File

@@ -785,5 +785,10 @@
"Participants": "", "Participants": "",
"Lecturers\/Content Creators": "", "Lecturers\/Content Creators": "",
"Manage lecturers": "", "Manage lecturers": "",
"Settings": "" "Settings": "",
"Are you sure you want to delete this Bitcoin event?": "",
"Manage cities\/areas": "",
"Manage venues": "",
"Image deleted!": "",
"Current pictures": ""
} }

View File

@@ -747,5 +747,10 @@
"Participants": "", "Participants": "",
"Lecturers\/Content Creators": "", "Lecturers\/Content Creators": "",
"Manage lecturers": "", "Manage lecturers": "",
"Settings": "" "Settings": "",
"Are you sure you want to delete this Bitcoin event?": "",
"Manage cities\/areas": "",
"Manage venues": "",
"Image deleted!": "",
"Current pictures": ""
} }

View File

@@ -759,5 +759,10 @@
"Participants": "", "Participants": "",
"Lecturers\/Content Creators": "", "Lecturers\/Content Creators": "",
"Manage lecturers": "", "Manage lecturers": "",
"Settings": "" "Settings": "",
"Are you sure you want to delete this Bitcoin event?": "",
"Manage cities\/areas": "",
"Manage venues": "",
"Image deleted!": "",
"Current pictures": ""
} }

View File

@@ -1,9 +1,9 @@
<div class="flex flex-col space-y-1"> <div class="flex flex-col space-y-1">
@if($type === 'school') @if($type === 'school' && !$manage)
<div> <div>
<div> <div>
@if($row->course_events_count > 0) @if($row->course_events_count > 0)
<x-button amber wire:click="proximitySearch({{ $row->id }})" class="text-21gray"> <x-button xs amber wire:click="proximitySearch({{ $row->id }})" class="text-21gray">
<i class="fa fa-thin fa-person-chalkboard mr-2"></i> <i class="fa fa-thin fa-person-chalkboard mr-2"></i>
{{ __('Perimeter search course date :name (100km)', ['name' => $row->name]) }} {{ __('Perimeter search course date :name (100km)', ['name' => $row->name]) }}
</x-button> </x-button>
@@ -11,7 +11,7 @@
</div> </div>
<div> <div>
@if($row->course_events_count < 1) @if($row->course_events_count < 1)
<x-button outlined wire:click="proximitySearch({{ $row->id }})" class="text-21gray"> <x-button xs outlined wire:click="proximitySearch({{ $row->id }})" class="text-21gray">
<i class="fa fa-thin fa-person-chalkboard mr-2"></i> <i class="fa fa-thin fa-person-chalkboard mr-2"></i>
{{ __('Perimeter search course date :name (100km)', ['name' => $row->name]) }} {{ __('Perimeter search course date :name (100km)', ['name' => $row->name]) }}
</x-button> </x-button>
@@ -20,13 +20,21 @@
</div> </div>
@endif @endif
<div> <div>
@if($type === 'bookCase') @if($type === 'bookCase' && !$manage)
<div> <div>
<x-button amber wire:click="proximitySearchForBookCases({{ $row->id }})" class="text-21gray"> <x-button xs amber wire:click="proximitySearchForBookCases({{ $row->id }})" class="text-21gray">
<i class="fa fa-thin fa-book mr-2"></i> <i class="fa fa-thin fa-book mr-2"></i>
{{ __('Perimeter search bookcase :name (25km)', ['name' => $row->name]) }} {{ __('Perimeter search bookcase :name (25km)', ['name' => $row->name]) }}
</x-button> </x-button>
</div> </div>
@endif @endif
</div> </div>
<div>
@can('update', $row)
<x-button xs :href="route('city.form', ['city' => $row])">
<i class="fa fa-thin fa-edit"></i>
{{ __('Edit') }}
</x-button>
@endcan
</div>
</div> </div>

View File

@@ -1,8 +1,6 @@
<div class="w-full mb-4 md:w-auto md:mb-0" x-data="{currentUrl: window.location.href}"> <div class="w-full mb-4 md:w-auto md:mb-0">
<a x-bind:href="'/city/form/?fromUrl='+currentUrl"> <x-button :href="route('city.form')">
<x-button>
<i class="fa fa-thin fa-plus"></i> <i class="fa fa-thin fa-plus"></i>
{{ __('New City') }} {{ __('New City') }}
</x-button> </x-button>
</a>
</div> </div>

View File

@@ -1,13 +1,13 @@
<div class="flex flex-col space-y-1"> <div class="flex flex-col space-y-1">
<div> <div>
@if($row->course_events_count > 0) @if($row->course_events_count > 0 && !$manage)
<x-button xs amber wire:click="venueSearch({{ $row->id }})"> <x-button xs amber wire:click="venueSearch({{ $row->id }})">
{{ __('Show dates') }} ({{ $row->course_events_count }}) {{ __('Show dates') }} ({{ $row->course_events_count }})
</x-button> </x-button>
@endif @endif
</div> </div>
<div> <div>
@if($row->course_events_count < 1) @if($row->course_events_count < 1 && !$manage)
<x-button xs outlined wire:click="venueSearch({{ $row->id }})"> <x-button xs outlined wire:click="venueSearch({{ $row->id }})">
{{ __('Show dates') }} ({{ $row->course_events_count }}) {{ __('Show dates') }} ({{ $row->course_events_count }})
</x-button> </x-button>

View File

@@ -15,7 +15,7 @@
</div> </div>
</div> </div>
<livewire:tables.city-table :country="$country->code" type="bookCase"/> <livewire:tables.city-table :country="$country->code" type="bookCase" :manage="$manage"/>
</div> </div>
</section> </section>
{{-- FOOTER --}} {{-- FOOTER --}}

View File

@@ -95,6 +95,18 @@
{{ __('Manage lecturers') }} {{ __('Manage lecturers') }}
</a> </a>
<a href="{{ route('bookCases.table.city', ['country' => $country, 'manage' => true]) }}"
class="flex gap-x-4 py-2 text-sm font-semibold leading-6 text-gray-900">
<i class="fa-thin fa-list flex-none text-gray-400"></i>
{{ __('Manage cities/areas') }}
</a>
<a href="{{ route('school.table.venue', ['country' => $country, 'manage' => true]) }}"
class="flex gap-x-4 py-2 text-sm font-semibold leading-6 text-gray-900">
<i class="fa-thin fa-list flex-none text-gray-400"></i>
{{ __('Manage venues') }}
</a>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -53,6 +53,18 @@
{{ __('Register event') }} {{ __('Register event') }}
</a> </a>
<a href="{{ route('bookCases.table.city', ['country' => $country, 'manage' => true]) }}"
class="flex gap-x-4 py-2 text-sm font-semibold leading-6 text-gray-900">
<i class="fa-thin fa-list flex-none text-gray-400"></i>
{{ __('Manage cities/areas') }}
</a>
<a href="{{ route('school.table.venue', ['country' => $country, 'manage' => true]) }}"
class="flex gap-x-4 py-2 text-sm font-semibold leading-6 text-gray-900">
<i class="fa-thin fa-list flex-none text-gray-400"></i>
{{ __('Manage venues') }}
</a>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -65,6 +65,12 @@
{{ __('Register Meetup date') }} {{ __('Register Meetup date') }}
</a> </a>
<a href="{{ route('bookCases.table.city', ['country' => $country, 'manage' => true]) }}"
class="flex gap-x-4 py-2 text-sm font-semibold leading-6 text-gray-900">
<i class="fa-thin fa-list flex-none text-gray-400"></i>
{{ __('Manage cities/areas') }}
</a>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -14,7 +14,7 @@
{{----}} {{----}}
</div> </div>
</div> </div>
<livewire:tables.venue-table :country="$country->code"/> <livewire:tables.venue-table :country="$country->code" :manage="$manage"/>
</div> </div>
</section> </section>
{{-- FOOTER --}} {{-- FOOTER --}}

View File

@@ -39,10 +39,24 @@
@endforeach @endforeach
</div> </div>
@endif @endif
{{--@if ($venue->getFirstMediaUrl('images')) @if ($venue->getMedia('images'))
<div class="text-gray-200">{{ __('Current picture') }}:</div> <div class="text-gray-200">{{ __('Current pictures') }}:</div>
<img class="h-48 object-contain" src="{{ $venue->getFirstMediaUrl('logo') }}"> <div class="grid grid-cols-4 gap-1">
@endif--}} @foreach($venue->getMedia('images') as $image)
<div class="space-y-2" wire:key="image_{{ $image->id }}" wire:click="deleteMedia({{ $image->id }})">
<div class="flex justify-center">
<img class="h-48 object-contain" src="{{ $image->getUrl() }}">
</div>
<div class="flex justify-center">
<x-button xs>
<i class="fa-thin fa-trash"></i>
{{ __('Delete') }}
</x-button>
</div>
</div>
@endforeach
</div>
@endif
</div> </div>
<input class="text-gray-200" type="file" multiple wire:model="images"> <input class="text-gray-200" type="file" multiple wire:model="images">
</x-input.group> </x-input.group>