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 @@
-