mirror of
https://github.com/Einundzwanzig-Podcast/einundzwanzig-portal.git
synced 2025-12-11 06:46:47 +00:00
nova book cases
This commit is contained in:
@@ -68,6 +68,22 @@ class BookCaseTable extends DataTableComponent
|
|||||||
Column::make("Adresse", "address")
|
Column::make("Adresse", "address")
|
||||||
->sortable()
|
->sortable()
|
||||||
->searchable(),
|
->searchable(),
|
||||||
|
Column::make("Bitcoin-Bücher")
|
||||||
|
->label(
|
||||||
|
fn(
|
||||||
|
$row,
|
||||||
|
Column $column
|
||||||
|
) => $row->orangePills->sum('amount')
|
||||||
|
),
|
||||||
|
Column::make("Letzter Input")
|
||||||
|
->label(
|
||||||
|
fn(
|
||||||
|
$row,
|
||||||
|
Column $column
|
||||||
|
) => $row->orangePills()
|
||||||
|
->latest()
|
||||||
|
->first()?->date->asDate()
|
||||||
|
),
|
||||||
Column::make("Link")
|
Column::make("Link")
|
||||||
->label(
|
->label(
|
||||||
fn(
|
fn(
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ class BookCase extends Model implements HasMedia
|
|||||||
*/
|
*/
|
||||||
public function commentableName(): string
|
public function commentableName(): string
|
||||||
{
|
{
|
||||||
//
|
return __('Bookcase');
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -74,6 +74,6 @@ class BookCase extends Model implements HasMedia
|
|||||||
*/
|
*/
|
||||||
public function commentUrl(): string
|
public function commentUrl(): string
|
||||||
{
|
{
|
||||||
|
return url()->route('comment.bookcase', ['bookCase' => $this->id]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,58 +2,63 @@
|
|||||||
|
|
||||||
namespace App\Nova;
|
namespace App\Nova;
|
||||||
|
|
||||||
use Laravel\Nova\Fields\ID;
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Laravel\Nova\Fields\Code;
|
|
||||||
use Laravel\Nova\Fields\Text;
|
|
||||||
use Laravel\Nova\Fields\Number;
|
|
||||||
use Laravel\Nova\Fields\Boolean;
|
use Laravel\Nova\Fields\Boolean;
|
||||||
|
use Laravel\Nova\Fields\Code;
|
||||||
|
use Laravel\Nova\Fields\HasMany;
|
||||||
|
use Laravel\Nova\Fields\ID;
|
||||||
|
use Laravel\Nova\Fields\MorphMany;
|
||||||
|
use Laravel\Nova\Fields\Number;
|
||||||
|
use Laravel\Nova\Fields\Text;
|
||||||
|
|
||||||
class BookCase extends Resource
|
class BookCase extends Resource
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* The model the resource corresponds to.
|
* The model the resource corresponds to.
|
||||||
*
|
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
public static $model = \App\Models\BookCase::class;
|
public static $model = \App\Models\BookCase::class;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The single value that should be used to represent the resource when being displayed.
|
* The single value that should be used to represent the resource when being displayed.
|
||||||
*
|
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
public static $title = 'id';
|
public static $title = 'title';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The columns that should be searched.
|
* The columns that should be searched.
|
||||||
*
|
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
public static $search = [
|
public static $search = [
|
||||||
'id',
|
'id',
|
||||||
|
'title',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the fields displayed by the resource.
|
* Get the fields displayed by the resource.
|
||||||
*
|
*
|
||||||
* @param \Illuminate\Http\Request $request
|
* @param \Illuminate\Http\Request $request
|
||||||
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function fields(Request $request)
|
public function fields(Request $request)
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
ID::make()->sortable(),
|
ID::make()
|
||||||
|
->sortable(),
|
||||||
|
|
||||||
Text::make('Title')
|
Text::make('Title')
|
||||||
->rules('required', 'string'),
|
->rules('required', 'string'),
|
||||||
|
|
||||||
Number::make('Lat')
|
Number::make('Latitude')
|
||||||
->rules('required', 'numeric'),
|
->rules('required', 'numeric')
|
||||||
|
->step(0.000001)
|
||||||
|
->hideFromIndex(),
|
||||||
|
|
||||||
Code::make('Lon')
|
Number::make('Longitude')
|
||||||
->rules('required', 'json')
|
->rules('required', 'numeric')
|
||||||
->json(),
|
->step(0.000001)
|
||||||
|
->hideFromIndex(),
|
||||||
|
|
||||||
Text::make('Address')
|
Text::make('Address')
|
||||||
->rules('required', 'string'),
|
->rules('required', 'string'),
|
||||||
@@ -62,35 +67,47 @@ class BookCase extends Resource
|
|||||||
->rules('required', 'string'),
|
->rules('required', 'string'),
|
||||||
|
|
||||||
Text::make('Open')
|
Text::make('Open')
|
||||||
->rules('required', 'string'),
|
->rules('required', 'string')
|
||||||
|
->hideFromIndex(),
|
||||||
|
|
||||||
Text::make('Comment')
|
Text::make('Comment')
|
||||||
->rules('required', 'string'),
|
->rules('required', 'string')
|
||||||
|
->hideFromIndex(),
|
||||||
|
|
||||||
Text::make('Contact')
|
Text::make('Contact')
|
||||||
->rules('required', 'string'),
|
->rules('required', 'string')
|
||||||
|
->hideFromIndex(),
|
||||||
|
|
||||||
Text::make('Bcz')
|
Text::make('Bcz')
|
||||||
->rules('required', 'string'),
|
->rules('required', 'string')
|
||||||
|
->hideFromIndex(),
|
||||||
|
|
||||||
Boolean::make('Digital')
|
Boolean::make('Digital')
|
||||||
->rules('required'),
|
->rules('required')
|
||||||
|
->hideFromIndex(),
|
||||||
|
|
||||||
Text::make('Icontype')
|
Text::make('Icontype')
|
||||||
->rules('required', 'string'),
|
->rules('required', 'string')
|
||||||
|
->hideFromIndex(),
|
||||||
|
|
||||||
Boolean::make('Deactivated')
|
Boolean::make('Deactivated')
|
||||||
->rules('required'),
|
->rules('required'),
|
||||||
|
|
||||||
Text::make('Deactreason')
|
Text::make('Deactreason')
|
||||||
->rules('required', 'string'),
|
->rules('required', 'string')
|
||||||
|
->hideFromIndex(),
|
||||||
|
|
||||||
Text::make('Entrytype')
|
Text::make('Entrytype')
|
||||||
->rules('required', 'string'),
|
->rules('required', 'string')
|
||||||
|
->hideFromIndex(),
|
||||||
|
|
||||||
Text::make('Homepage')
|
Text::make('Homepage')
|
||||||
->rules('required', 'string'),
|
->rules('required', 'string')
|
||||||
|
->hideFromIndex(),
|
||||||
|
|
||||||
|
HasMany::make('OrangePills'),
|
||||||
|
|
||||||
|
MorphMany::make('Comments'),
|
||||||
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -99,6 +116,7 @@ class BookCase extends Resource
|
|||||||
* Get the cards available for the request.
|
* Get the cards available for the request.
|
||||||
*
|
*
|
||||||
* @param \Illuminate\Http\Request $request
|
* @param \Illuminate\Http\Request $request
|
||||||
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function cards(Request $request)
|
public function cards(Request $request)
|
||||||
@@ -110,6 +128,7 @@ class BookCase extends Resource
|
|||||||
* Get the filters available for the resource.
|
* Get the filters available for the resource.
|
||||||
*
|
*
|
||||||
* @param \Illuminate\Http\Request $request
|
* @param \Illuminate\Http\Request $request
|
||||||
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function filters(Request $request)
|
public function filters(Request $request)
|
||||||
@@ -121,6 +140,7 @@ class BookCase extends Resource
|
|||||||
* Get the lenses available for the resource.
|
* Get the lenses available for the resource.
|
||||||
*
|
*
|
||||||
* @param \Illuminate\Http\Request $request
|
* @param \Illuminate\Http\Request $request
|
||||||
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function lenses(Request $request)
|
public function lenses(Request $request)
|
||||||
@@ -132,6 +152,7 @@ class BookCase extends Resource
|
|||||||
* Get the actions available for the resource.
|
* Get the actions available for the resource.
|
||||||
*
|
*
|
||||||
* @param \Illuminate\Http\Request $request
|
* @param \Illuminate\Http\Request $request
|
||||||
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function actions(Request $request)
|
public function actions(Request $request)
|
||||||
|
|||||||
53
app/Nova/Comment.php
Normal file
53
app/Nova/Comment.php
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Nova;
|
||||||
|
|
||||||
|
use Laravel\Nova\Fields\DateTime;
|
||||||
|
use Laravel\Nova\Fields\Markdown;
|
||||||
|
use Laravel\Nova\Fields\MorphTo;
|
||||||
|
use Laravel\Nova\Fields\Text;
|
||||||
|
use Laravel\Nova\Http\Requests\NovaRequest;
|
||||||
|
use Spatie\Comments\Models\Comment as CommentModel;
|
||||||
|
|
||||||
|
class Comment extends Resource
|
||||||
|
{
|
||||||
|
public static $model = CommentModel::class;
|
||||||
|
|
||||||
|
public static $search = [
|
||||||
|
'id', 'text',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function fields(NovaRequest $request)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
Text::make('title', function (CommentModel $comment) {
|
||||||
|
return $comment->topLevel()->commentable?->commentableName() ?? 'Deleted...';
|
||||||
|
})->readonly(),
|
||||||
|
|
||||||
|
MorphTo::make('Commentator')->types([
|
||||||
|
User::class,
|
||||||
|
]),
|
||||||
|
|
||||||
|
Markdown::make('Original text'),
|
||||||
|
|
||||||
|
Text::make('', function (CommentModel $comment) {
|
||||||
|
if (! $url = $comment?->commentUrl()) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return "<a target=\"show_comment\" href=\"{$url}\">Show</a>";
|
||||||
|
|
||||||
|
})->asHtml(),
|
||||||
|
|
||||||
|
Text::make('status', function(CommentModel $comment) {
|
||||||
|
if ($comment->isApproved()) {
|
||||||
|
return "<div class='inline-flex items-center px-3 py-0.5 rounded-full text-sm font-medium bg-green-100 text-green-800'>Approved</div>";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "<div class='inline-flex items-center px-3 py-0.5 rounded-full text-sm font-medium bg-yellow-100 text-yellow-800'>Pending</div>";
|
||||||
|
})->asHtml(),
|
||||||
|
|
||||||
|
DateTime::make('Created at'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,6 +17,11 @@ class OrangePill extends Resource
|
|||||||
*/
|
*/
|
||||||
public static $model = \App\Models\OrangePill::class;
|
public static $model = \App\Models\OrangePill::class;
|
||||||
|
|
||||||
|
public static function label()
|
||||||
|
{
|
||||||
|
return 'Inputs';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The single value that should be used to represent the resource when being displayed.
|
* The single value that should be used to represent the resource when being displayed.
|
||||||
*
|
*
|
||||||
|
|||||||
101
app/Policies/BookCasePolicy.php
Normal file
101
app/Policies/BookCasePolicy.php
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Policies;
|
||||||
|
|
||||||
|
use App\Models\BookCase;
|
||||||
|
use App\Models\User;
|
||||||
|
use Illuminate\Auth\Access\HandlesAuthorization;
|
||||||
|
|
||||||
|
class BookCasePolicy extends BasePolicy
|
||||||
|
{
|
||||||
|
use HandlesAuthorization;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the user can view any models.
|
||||||
|
*
|
||||||
|
* @param \App\Models\User $user
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Auth\Access\Response|bool
|
||||||
|
*/
|
||||||
|
public function viewAny(User $user)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the user can view the model.
|
||||||
|
*
|
||||||
|
* @param \App\Models\User $user
|
||||||
|
* @param \App\Models\BookCase $bookCase
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Auth\Access\Response|bool
|
||||||
|
*/
|
||||||
|
public function view(User $user, BookCase $bookCase)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the user can create models.
|
||||||
|
*
|
||||||
|
* @param \App\Models\User $user
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Auth\Access\Response|bool
|
||||||
|
*/
|
||||||
|
public function create(User $user)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the user can update the model.
|
||||||
|
*
|
||||||
|
* @param \App\Models\User $user
|
||||||
|
* @param \App\Models\BookCase $bookCase
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Auth\Access\Response|bool
|
||||||
|
*/
|
||||||
|
public function update(User $user, BookCase $bookCase)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the user can delete the model.
|
||||||
|
*
|
||||||
|
* @param \App\Models\User $user
|
||||||
|
* @param \App\Models\BookCase $bookCase
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Auth\Access\Response|bool
|
||||||
|
*/
|
||||||
|
public function delete(User $user, BookCase $bookCase)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the user can restore the model.
|
||||||
|
*
|
||||||
|
* @param \App\Models\User $user
|
||||||
|
* @param \App\Models\BookCase $bookCase
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Auth\Access\Response|bool
|
||||||
|
*/
|
||||||
|
public function restore(User $user, BookCase $bookCase)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine whether the user can permanently delete the model.
|
||||||
|
*
|
||||||
|
* @param \App\Models\User $user
|
||||||
|
* @param \App\Models\BookCase $bookCase
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Auth\Access\Response|bool
|
||||||
|
*/
|
||||||
|
public function forceDelete(User $user, BookCase $bookCase)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,8 +2,10 @@
|
|||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
|
use App\Nova\BookCase;
|
||||||
use App\Nova\Category;
|
use App\Nova\Category;
|
||||||
use App\Nova\City;
|
use App\Nova\City;
|
||||||
|
use App\Nova\Comment;
|
||||||
use App\Nova\Country;
|
use App\Nova\Country;
|
||||||
use App\Nova\Course;
|
use App\Nova\Course;
|
||||||
use App\Nova\Dashboards\Main;
|
use App\Nova\Dashboards\Main;
|
||||||
@@ -12,6 +14,7 @@ use App\Nova\Event;
|
|||||||
use App\Nova\Lecturer;
|
use App\Nova\Lecturer;
|
||||||
use App\Nova\Library;
|
use App\Nova\Library;
|
||||||
use App\Nova\LibraryItem;
|
use App\Nova\LibraryItem;
|
||||||
|
use App\Nova\OrangePill;
|
||||||
use App\Nova\Participant;
|
use App\Nova\Participant;
|
||||||
use App\Nova\Podcast;
|
use App\Nova\Podcast;
|
||||||
use App\Nova\Registration;
|
use App\Nova\Registration;
|
||||||
@@ -68,6 +71,19 @@ class NovaServiceProvider extends NovaApplicationServiceProvider
|
|||||||
->icon('microphone')
|
->icon('microphone')
|
||||||
->collapsable(),
|
->collapsable(),
|
||||||
|
|
||||||
|
MenuSection::make('Books', [
|
||||||
|
MenuItem::resource(BookCase::class),
|
||||||
|
MenuItem::resource(OrangePill::class),
|
||||||
|
])
|
||||||
|
->icon('book-open')
|
||||||
|
->collapsable(),
|
||||||
|
|
||||||
|
MenuSection::make('Comments', [
|
||||||
|
MenuItem::resource(Comment::class),
|
||||||
|
])
|
||||||
|
->icon('chat')
|
||||||
|
->collapsable(),
|
||||||
|
|
||||||
MenuSection::make('Admin', [
|
MenuSection::make('Admin', [
|
||||||
MenuItem::resource(Category::class),
|
MenuItem::resource(Category::class),
|
||||||
MenuItem::resource(Country::class),
|
MenuItem::resource(Country::class),
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"Orange Pill Book Case": "Wie viele Bitcoin-Bücher hast du hinzu gefügt?",
|
"Orange Pill Book Case": "Wie viele Bitcoin-Bücher hast du hinzu gefügt?",
|
||||||
"Book": "Buch",
|
"Book": "Buch",
|
||||||
|
"Bookcase": "Bücher-Schrank",
|
||||||
"Article": "Artikel",
|
"Article": "Artikel",
|
||||||
"Markdown Article": "Interner Artikel",
|
"Markdown Article": "Interner Artikel",
|
||||||
"Youtube Video": "Youtube Video",
|
"Youtube Video": "Youtube Video",
|
||||||
|
|||||||
@@ -24,6 +24,9 @@
|
|||||||
<x-jet-nav-link href="/nova/resources/library-items" target="_blank">
|
<x-jet-nav-link href="/nova/resources/library-items" target="_blank">
|
||||||
{{ __('Inhalte eintragen') }}
|
{{ __('Inhalte eintragen') }}
|
||||||
</x-jet-nav-link>
|
</x-jet-nav-link>
|
||||||
|
<x-jet-nav-link href="/nova/resources/library-items" target="_blank">
|
||||||
|
{{ __('Bücher-Schränke verwalten') }}
|
||||||
|
</x-jet-nav-link>
|
||||||
<x-jet-nav-link href="{{ route('profile.show') }}" :active="request()->routeIs('profile.show')">
|
<x-jet-nav-link href="{{ route('profile.show') }}" :active="request()->routeIs('profile.show')">
|
||||||
{{ __('Mein Profil') }}
|
{{ __('Mein Profil') }}
|
||||||
</x-jet-nav-link>
|
</x-jet-nav-link>
|
||||||
|
|||||||
Reference in New Issue
Block a user