From a8fa8ecc5bd2706895d6de13d859ebc1f8cf5bf3 Mon Sep 17 00:00:00 2001 From: Benjamin Takats Date: Sat, 3 Dec 2022 19:44:41 +0100 Subject: [PATCH] add media stuff --- .blueprint | 6 +- app/Http/Livewire/Tables/EventTable.php | 24 ++++++++ app/Models/Course.php | 28 +++++++++- app/Nova/Course.php | 13 +++++ app/Nova/Event.php | 10 +++- composer.lock | 22 ++++---- ...d_description_field_to_lecturers_table.php | 1 + ...add_description_field_to_courses_table.php | 31 ++++++++++ ..._183452_add_link_field_to_events_table.php | 29 ++++++++++ database/seeders/DatabaseSeeder.php | 1 + lang/de.json | 2 + .../views/columns/events/action.blade.php | 2 +- .../views/columns/events/categories.blade.php | 5 ++ .../views/modals/events/register.blade.php | 56 +++++++++++++++++++ .../components/dialog-modal.blade.php | 6 +- .../jetstream/components/modal.blade.php | 7 ++- 16 files changed, 219 insertions(+), 24 deletions(-) create mode 100644 database/migrations/2022_12_03_180232_add_description_field_to_courses_table.php create mode 100644 database/migrations/2022_12_03_183452_add_link_field_to_events_table.php create mode 100644 resources/views/columns/events/categories.blade.php create mode 100644 resources/views/modals/events/register.blade.php diff --git a/.blueprint b/.blueprint index efb1be90..0d4d2fdf 100644 --- a/.blueprint +++ b/.blueprint @@ -2,9 +2,9 @@ models: Category: { name: string, slug: string } City: { country_id: biginteger, name: string, slug: string, longitude: 'float:10', latitude: 'float:10' } Country: { name: string, code: string } - Course: { lecturer_id: biginteger, name: string } - Event: { course_id: biginteger, venue_id: biginteger, '"from"': datetime, '"to"': datetime } - Lecturer: { team_id: biginteger, name: string, slug: string, active: 'boolean default:1' } + Course: { lecturer_id: biginteger, name: string, description: 'text nullable' } + Event: { course_id: biginteger, venue_id: biginteger, '"from"': datetime, '"to"': datetime, link: string } + Lecturer: { team_id: biginteger, name: string, slug: string, active: 'boolean default:1', description: 'text nullable' } LoginKey: { k1: string, user_id: biginteger } Membership: { team_id: biginteger, user_id: biginteger, role: 'string nullable' } Participant: { first_name: string, last_name: string } diff --git a/app/Http/Livewire/Tables/EventTable.php b/app/Http/Livewire/Tables/EventTable.php index a35ea5a7..4268c5ef 100644 --- a/app/Http/Livewire/Tables/EventTable.php +++ b/app/Http/Livewire/Tables/EventTable.php @@ -13,6 +13,10 @@ class EventTable extends DataTableComponent protected $model = Event::class; + public bool $viewingModal = false; + + public $currentModal; + public function configure(): void { $this @@ -51,6 +55,10 @@ class EventTable extends DataTableComponent ->sortable(), Column::make("Kurs", "course.name") ->sortable(), + Column::make("Art") + ->label( + fn($row, Column $column) => view('columns.events.categories')->withRow($row) + ), Column::make("Von", "from") ->format( fn($value, $row, Column $column) => $value->asDateTime() @@ -83,4 +91,20 @@ class EventTable extends DataTableComponent ->whereHas('venue.city.country', fn($query) => $query->where('countries.code', $this->country)); } + + public function viewHistoryModal($modelId): void + { + $this->viewingModal = true; + $this->currentModal = Event::findOrFail($modelId); + } + + public function resetModal(): void + { + $this->reset('viewingModal', 'currentModal'); + } + + public function customView(): string + { + return 'modals.events.register'; + } } diff --git a/app/Models/Course.php b/app/Models/Course.php index 7925597e..8bbbfc50 100644 --- a/app/Models/Course.php +++ b/app/Models/Course.php @@ -4,10 +4,15 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Spatie\Image\Manipulations; +use Spatie\MediaLibrary\HasMedia; +use Spatie\MediaLibrary\InteractsWithMedia; +use Spatie\MediaLibrary\MediaCollections\Models\Media; -class Course extends Model +class Course extends Model implements HasMedia { use HasFactory; + use InteractsWithMedia; /** * The attributes that aren't mass assignable. @@ -26,6 +31,27 @@ class Course extends Model 'lecturer_id' => 'integer', ]; + public function registerMediaConversions(Media $media = null): void + { + $this + ->addMediaConversion('preview') + ->fit(Manipulations::FIT_CROP, 300, 300) + ->nonQueued(); + $this->addMediaConversion('thumb') + ->fit(Manipulations::FIT_CROP, 130, 130) + ->width(130) + ->height(130); + } + + public function registerMediaCollections(): void + { + $this->addMediaCollection('logo') + ->singleFile() + ->useFallbackUrl(asset('img/einundzwanzig-cover-lesestunde.png')); + $this->addMediaCollection('images') + ->useFallbackUrl(asset('img/einundzwanzig-cover-lesestunde.png')); + } + public function categories(): \Illuminate\Database\Eloquent\Relations\BelongsToMany { return $this->belongsToMany(Category::class); diff --git a/app/Nova/Course.php b/app/Nova/Course.php index 87afba26..dcdf99e1 100644 --- a/app/Nova/Course.php +++ b/app/Nova/Course.php @@ -2,11 +2,13 @@ namespace App\Nova; +use Ebess\AdvancedNovaMediaLibrary\Fields\Images; use Illuminate\Http\Request; use Laravel\Nova\Fields\BelongsTo; use Laravel\Nova\Fields\BelongsToMany; use Laravel\Nova\Fields\Field; use Laravel\Nova\Fields\ID; +use Laravel\Nova\Fields\Markdown; use Laravel\Nova\Fields\Text; use Laravel\Nova\Http\Requests\NovaRequest; use ZiffMedia\NovaSelectPlus\SelectPlus; @@ -56,9 +58,20 @@ class Course extends Resource ID::make() ->sortable(), + Images::make('Main picture', 'logo') + ->conversionOnIndexView('thumb'), + + Images::make('Images', 'images') + ->conversionOnIndexView('thumb') + ->help('Lade hier Bilder hoch, um sie eventuell später in der Markdown Description einzufügen. Du musst vorher aber Speichern.'), + Text::make('Name') ->rules('required', 'string'), + Markdown::make('Description') + ->alwaysShow() + ->help('Markdown ist erlaubt. Du kannst Bilder aus dem Feld "Images" hier einfügen. Benutze das Link Symbol der Bilder für die Urls, nach dem du auf "Aktualisieren und Weiterarbeiten" geklickt hast.'), + BelongsTo::make('Lecturer'), SelectPlus::make('Categories', 'categories', Category::class) diff --git a/app/Nova/Event.php b/app/Nova/Event.php index fb94a3ea..803e601b 100644 --- a/app/Nova/Event.php +++ b/app/Nova/Event.php @@ -8,6 +8,7 @@ use Laravel\Nova\Fields\BelongsTo; use Laravel\Nova\Fields\DateTime; use Laravel\Nova\Fields\Field; use Laravel\Nova\Fields\ID; +use Laravel\Nova\Fields\URL; use Laravel\Nova\Http\Requests\NovaRequest; class Event extends Resource @@ -55,13 +56,18 @@ class Event extends Resource ID::make() ->sortable(), + URL::make('Link') + ->rules('required', 'url'), + DateTime::make('From') ->rules('required') - ->step(CarbonInterval::minutes(30))->displayUsing(fn ($value) => $value->asDateTime()), + ->step(CarbonInterval::minutes(30)) + ->displayUsing(fn($value) => $value->asDateTime()), DateTime::make('To') ->rules('required') - ->step(CarbonInterval::minutes(30))->displayUsing(fn ($value) => $value->asDateTime()), + ->step(CarbonInterval::minutes(30)) + ->displayUsing(fn($value) => $value->asDateTime()), BelongsTo::make('Course'), BelongsTo::make('Venue') diff --git a/composer.lock b/composer.lock index 0c2f4f21..1ad94e51 100644 --- a/composer.lock +++ b/composer.lock @@ -3132,16 +3132,16 @@ }, { "name": "league/flysystem", - "version": "3.10.4", + "version": "3.11.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "a7790f3dd1b27af81d380e6b2afa77c16ab7e181" + "reference": "7e423e5dd240a60adfab9bde058d7668863b7731" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a7790f3dd1b27af81d380e6b2afa77c16ab7e181", - "reference": "a7790f3dd1b27af81d380e6b2afa77c16ab7e181", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/7e423e5dd240a60adfab9bde058d7668863b7731", + "reference": "7e423e5dd240a60adfab9bde058d7668863b7731", "shasum": "" }, "require": { @@ -3203,7 +3203,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.10.4" + "source": "https://github.com/thephpleague/flysystem/tree/3.11.0" }, "funding": [ { @@ -3219,7 +3219,7 @@ "type": "tidelift" } ], - "time": "2022-11-26T19:48:01+00:00" + "time": "2022-12-02T14:39:57+00:00" }, { "name": "league/glide", @@ -11254,16 +11254,16 @@ }, { "name": "laravel-lang/lang", - "version": "12.5.5", + "version": "12.5.6", "source": { "type": "git", "url": "https://github.com/Laravel-Lang/lang.git", - "reference": "6d4f8ccd4694530f0c4c424eded37d5b1308c062" + "reference": "f0503d6bb897070c906847858eab9b4d6e40a85c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/lang/zipball/6d4f8ccd4694530f0c4c424eded37d5b1308c062", - "reference": "6d4f8ccd4694530f0c4c424eded37d5b1308c062", + "url": "https://api.github.com/repos/Laravel-Lang/lang/zipball/f0503d6bb897070c906847858eab9b4d6e40a85c", + "reference": "f0503d6bb897070c906847858eab9b4d6e40a85c", "shasum": "" }, "require": { @@ -11325,7 +11325,7 @@ "type": "open_collective" } ], - "time": "2022-12-01T13:15:55+00:00" + "time": "2022-12-03T12:40:40+00:00" }, { "name": "laravel-lang/publisher", diff --git a/database/migrations/2022_12_02_162124_add_description_field_to_lecturers_table.php b/database/migrations/2022_12_02_162124_add_description_field_to_lecturers_table.php index 08c08eae..951ea35b 100644 --- a/database/migrations/2022_12_02_162124_add_description_field_to_lecturers_table.php +++ b/database/migrations/2022_12_02_162124_add_description_field_to_lecturers_table.php @@ -13,6 +13,7 @@ return new class extends Migration { { Schema::table('lecturers', function (Blueprint $table) { $table->longText('description') + ->fulltext() ->nullable(); }); } diff --git a/database/migrations/2022_12_03_180232_add_description_field_to_courses_table.php b/database/migrations/2022_12_03_180232_add_description_field_to_courses_table.php new file mode 100644 index 00000000..72ca29d0 --- /dev/null +++ b/database/migrations/2022_12_03_180232_add_description_field_to_courses_table.php @@ -0,0 +1,31 @@ +longText('description') + ->fulltext() + ->nullable(); + }); + } + + /** + * Reverse the migrations. + * @return void + */ + public function down() + { + Schema::table('courses', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2022_12_03_183452_add_link_field_to_events_table.php b/database/migrations/2022_12_03_183452_add_link_field_to_events_table.php new file mode 100644 index 00000000..1618bba0 --- /dev/null +++ b/database/migrations/2022_12_03_183452_add_link_field_to_events_table.php @@ -0,0 +1,29 @@ +string('link'); + }); + } + + /** + * Reverse the migrations. + * @return void + */ + public function down() + { + Schema::table('events', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index b4fe3216..c1e6ffac 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -107,6 +107,7 @@ class DatabaseSeeder extends Seeder Event::create([ 'course_id' => 1, 'venue_id' => 1, + 'link' => 'https://einundzwanzig.space', 'from' => now()->startOfDay(), 'to' => now() ->startOfDay() diff --git a/lang/de.json b/lang/de.json index 0a3d11ca..cad0c2d5 100644 --- a/lang/de.json +++ b/lang/de.json @@ -1,4 +1,6 @@ { + "Done": "Fertig", + "Registration": "Anmeldung", "Lecturers": "Dozenten", "Cities": "Städte", "Venues": "Veranstaltungs-Orte", diff --git a/resources/views/columns/events/action.blade.php b/resources/views/columns/events/action.blade.php index fee3b944..a14f4e11 100644 --- a/resources/views/columns/events/action.blade.php +++ b/resources/views/columns/events/action.blade.php @@ -1 +1 @@ -Anmelden +Anmelden diff --git a/resources/views/columns/events/categories.blade.php b/resources/views/columns/events/categories.blade.php new file mode 100644 index 00000000..f3fd1142 --- /dev/null +++ b/resources/views/columns/events/categories.blade.php @@ -0,0 +1,5 @@ +
+ @foreach($row->course->categories as $category) + {{ $category->name }} + @endforeach +
diff --git a/resources/views/modals/events/register.blade.php b/resources/views/modals/events/register.blade.php new file mode 100644 index 00000000..ee6608f9 --- /dev/null +++ b/resources/views/modals/events/register.blade.php @@ -0,0 +1,56 @@ + + +
+ {{ __('Registration') }} +
+
+ + +
+ +
+
+
+ +
+
+ {{ $currentModal?->course->name }} +
+ @foreach($currentModal?->course->getMedia('images') ?? [] as $image) +
+ {{ $currentModal?->course->name }} +
+ @endforeach +
+
+ +
+
+

{{ $currentModal?->course->name }}

+ Link zur Anmeldung + + {{ $currentModal?->course->description }} + + Link zur Anmeldung +
+
+
+
+
+
+ + + + @lang('Done') + + +
diff --git a/resources/views/vendor/jetstream/components/dialog-modal.blade.php b/resources/views/vendor/jetstream/components/dialog-modal.blade.php index 0935941a..4c283a1d 100644 --- a/resources/views/vendor/jetstream/components/dialog-modal.blade.php +++ b/resources/views/vendor/jetstream/components/dialog-modal.blade.php @@ -1,6 +1,6 @@ -@props(['id' => null, 'maxWidth' => null]) +@props(['id' => null, 'maxWidth' => null, 'bg' => 'bg-white']) - +
{{ $title }} @@ -11,7 +11,7 @@
-
+
{{ $footer }}
diff --git a/resources/views/vendor/jetstream/components/modal.blade.php b/resources/views/vendor/jetstream/components/modal.blade.php index 4acdbf0d..93936225 100644 --- a/resources/views/vendor/jetstream/components/modal.blade.php +++ b/resources/views/vendor/jetstream/components/modal.blade.php @@ -1,4 +1,4 @@ -@props(['id', 'maxWidth']) +@props(['id', 'maxWidth', 'bg']) @php $id = $id ?? md5($attributes->wire('model')); @@ -9,6 +9,7 @@ $maxWidth = [ 'lg' => 'sm:max-w-lg', 'xl' => 'sm:max-w-xl', '2xl' => 'sm:max-w-2xl', + 'screen' => 'sm:max-w-screen-lg', ][$maxWidth ?? '2xl']; @endphp @@ -53,10 +54,10 @@ $maxWidth = [ x-transition:leave="ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0"> -
+
-