🛠️ Refactor migrations, models, configs, and Blade files to apply consistent formatting, remove unnecessary lines, and improve readability.

This commit is contained in:
HolgerHatGarKeineNode
2026-01-18 19:50:04 +01:00
parent a4aad6ebb6
commit b090336c4f
59 changed files with 246 additions and 199 deletions

View File

@@ -7,6 +7,7 @@ use Illuminate\Contracts\Auth\Authenticatable;
class NostrUser implements Authenticatable
{
protected string $pubkey;
protected ?object $pleb;
public function __construct(string $pubkey)

View File

@@ -36,7 +36,7 @@ class SyncPlebs extends Command
$npub = str($pleb)->trim();
EinundzwanzigPleb::updateOrCreate(
['npub' => $npub],
['pubkey' => (new Key())->convertToHex($npub)]
['pubkey' => (new Key)->convertToHex($npub)]
);
}
}

View File

@@ -38,10 +38,10 @@ class FetchEvents extends Command
$plebs = \App\Models\EinundzwanzigPleb::query()
->get();
$subscription = new Subscription();
$subscription = new Subscription;
$subscriptionId = $subscription->setId();
$filter1 = new Filter();
$filter1 = new Filter;
$filter1->setKinds([1]); // You can add multiple kind numbers
$filter1->setAuthors($plebs->pluck('pubkey')->toArray()); // You can add multiple authors
$filter1->setLimit(25); // Limit to fetch only a maximum of 25 events
@@ -54,7 +54,7 @@ class FetchEvents extends Command
new Relay('wss://nostr.wine'),
new Relay('wss://nos.lol'),
];
$relaySet = new RelaySet();
$relaySet = new RelaySet;
$relaySet->setRelays($relays);
$request = new Request($relaySet, $requestMessage);
@@ -64,7 +64,7 @@ class FetchEvents extends Command
foreach ($response as $relay => $events) {
foreach ($events as $event) {
if (!isset($uniqueEvents[$event->event->id])) {
if (! isset($uniqueEvents[$event->event->id])) {
$uniqueEvents[$event->event->id] = $event;
}
}
@@ -97,6 +97,7 @@ class FetchEvents extends Command
}
}
}
return null;
}
@@ -104,11 +105,12 @@ class FetchEvents extends Command
{
foreach ($event->tags as $tag) {
if ($tag[0] === 'e') {
if ((isset($tag[3]) && $tag[3] === 'reply') || (!isset($tag[3]) && isset($tag[2]) && $tag[2] === '')) {
if ((isset($tag[3]) && $tag[3] === 'reply') || (! isset($tag[3]) && isset($tag[2]) && $tag[2] === '')) {
return 'reply';
}
}
}
return 'root';
}
}

View File

@@ -31,6 +31,7 @@ class FetchProfile extends Command
$pubkey = $this->option('pubkey');
if (empty($pubkey)) {
$this->error('Please provide a pubkey');
return;
}

View File

@@ -31,7 +31,7 @@ class SyncProfiles extends Command
{
$query = EinundzwanzigPleb::query();
if (!$this->option('all')) {
if (! $this->option('all')) {
$query->whereDoesntHave('profile');
}
@@ -48,7 +48,7 @@ class SyncProfiles extends Command
$bar->finish();
$this->info("\n✅ Successfully synced $count profiles!");
} else {
$this->info("⚡ No profiles to sync!");
$this->info('⚡ No profiles to sync!');
}
}
}

View File

@@ -13,12 +13,12 @@ use ArchTech\Enums\Values;
#[Meta(Label::class, Color::class)]
enum AssociationStatus: int
{
use InvokableCases;
use Names;
use Values;
use Options;
use Metadata;
use From;
use InvokableCases;
use Metadata;
use Names;
use Options;
use Values;
#[Label('kein Mitglied')] #[Color('cyan')]
case DEFAULT = 1;
@@ -33,7 +33,7 @@ enum AssociationStatus: int
{
return collect(self::options())
->map(
fn(
fn (
$option,
$name
) => [

View File

@@ -6,6 +6,4 @@ use ArchTech\Enums\Meta\MetaProperty;
use Attribute;
#[Attribute]
class Color extends MetaProperty
{
}
class Color extends MetaProperty {}

View File

@@ -6,6 +6,4 @@ use ArchTech\Enums\Meta\MetaProperty;
use Attribute;
#[Attribute]
class Icon extends MetaProperty
{
}
class Icon extends MetaProperty {}

View File

@@ -6,6 +6,4 @@ use ArchTech\Enums\Meta\MetaProperty;
use Attribute;
#[Attribute]
class Label extends MetaProperty
{
}
class Label extends MetaProperty {}

View File

@@ -13,12 +13,12 @@ use ArchTech\Enums\Values;
#[Meta(Label::class, Color::class, Icon::class)]
enum NewsCategory: int
{
use InvokableCases;
use Names;
use Values;
use Options;
use Metadata;
use From;
use InvokableCases;
use Metadata;
use Names;
use Options;
use Values;
#[Label('Organisation')] #[Color('cyan')] #[Icon('file-lines')]
case ORGANISATION = 1;
@@ -27,7 +27,7 @@ enum NewsCategory: int
{
return collect(self::options())
->map(
fn(
fn (
$option,
$name
) => [

View File

@@ -15,7 +15,7 @@ class GetProfile extends Controller
public function __invoke($key, Request $request)
{
if (!Profile::query()->where('pubkey', $key)->exists()) {
if (! Profile::query()->where('pubkey', $key)->exists()) {
$this->fetchProfile([$key]);
}
@@ -28,7 +28,7 @@ class GetProfile extends Controller
->where('pubkey', $key)
->first();
if (!$profile) {
if (! $profile) {
return response()->json(['message' => 'Profile not found'], 200);
}

View File

@@ -9,6 +9,7 @@ class ApplicationForm extends Form
{
#[Validate('nullable|string')]
public $reason = '';
#[Validate('boolean')]
public $check = false;
}

View File

@@ -11,11 +11,9 @@ use PowerComponents\LivewirePowerGrid\Exportable;
use PowerComponents\LivewirePowerGrid\Facades\Filter;
use PowerComponents\LivewirePowerGrid\Facades\Rule;
use PowerComponents\LivewirePowerGrid\Footer;
use PowerComponents\LivewirePowerGrid\Header;
use PowerComponents\LivewirePowerGrid\Lazy;
use PowerComponents\LivewirePowerGrid\PowerGrid;
use PowerComponents\LivewirePowerGrid\PowerGridFields;
use PowerComponents\LivewirePowerGrid\PowerGridComponent;
use PowerComponents\LivewirePowerGrid\PowerGridFields;
final class MeetupTable extends PowerGridComponent
{
@@ -54,7 +52,7 @@ final class MeetupTable extends PowerGridComponent
->searchable()
->sortable(),
Column::action('Action')
Column::action('Action'),
];
}
@@ -79,7 +77,7 @@ final class MeetupTable extends PowerGridComponent
->slot('Edit: '.$row->id)
->id()
->class('pg-btn-white dark:ring-pg-primary-600 dark:border-pg-primary-600 dark:hover:bg-pg-primary-700 dark:ring-offset-pg-primary-800 dark:text-pg-primary-300 dark:bg-pg-primary-700')
->dispatch('edit', ['rowId' => $row->id])
->dispatch('edit', ['rowId' => $row->id]),
];
}

View File

@@ -8,8 +8,11 @@ use Livewire\Attributes\On;
trait WithNostrAuth
{
public ?string $currentPubkey = null;
public ?object $currentPleb = null;
public bool $isAllowed = false;
public bool $canEdit = false;
#[On('nostrLoggedIn')]

View File

@@ -12,8 +12,8 @@ use Spatie\Sluggable\SlugOptions;
class City extends Model
{
use HasSlug;
use Geoly;
use HasSlug;
protected $connection = 'einundzwanzig';
@@ -51,9 +51,9 @@ class City extends Model
public function getSlugOptions(): SlugOptions
{
return SlugOptions::create()
->generateSlugsFrom(['country.code', 'name'])
->saveSlugsTo('slug')
->usingLanguage(Cookie::get('lang', config('app.locale')));
->generateSlugsFrom(['country.code', 'name'])
->saveSlugsTo('slug')
->usingLanguage(Cookie::get('lang', config('app.locale')));
}
public function createdBy(): BelongsTo

View File

@@ -7,7 +7,6 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Spatie\Image\Enums\Fit;
use Spatie\Image\Manipulations;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
@@ -15,8 +14,8 @@ use Spatie\Tags\HasTags;
class Course extends Model implements HasMedia
{
use InteractsWithMedia;
use HasTags;
use InteractsWithMedia;
protected $connection = 'einundzwanzig';
@@ -46,25 +45,25 @@ class Course extends Model implements HasMedia
});
}
public function registerMediaConversions(Media $media = null): void
public function registerMediaConversions(?Media $media = null): void
{
$this
->addMediaConversion('preview')
->fit(Fit::Crop, 300, 300)
->nonQueued();
$this->addMediaConversion('thumb')
->fit(Fit::Crop, 130, 130)
->width(130)
->height(130);
->fit(Fit::Crop, 130, 130)
->width(130)
->height(130);
}
public function registerMediaCollections(): void
{
$this->addMediaCollection('logo')
->singleFile()
->useFallbackUrl(asset('img/einundzwanzig.png'));
->singleFile()
->useFallbackUrl(asset('img/einundzwanzig.png'));
$this->addMediaCollection('images')
->useFallbackUrl(asset('img/einundzwanzig.png'));
->useFallbackUrl(asset('img/einundzwanzig.png'));
}
public function createdBy(): BelongsTo

View File

@@ -4,7 +4,6 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class CourseEvent extends Model
{

View File

@@ -38,5 +38,4 @@ class EinundzwanzigPleb extends Model implements CipherSweetEncrypted
{
return $this->hasMany(PaymentEvent::class);
}
}

View File

@@ -6,12 +6,10 @@ use Illuminate\Database\Eloquent\Model;
class Event extends Model
{
protected $guarded = [];
public function renderedEvent()
{
return $this->hasOne(RenderedEvent::class, 'event_id', 'event_id');
}
}

View File

@@ -23,47 +23,49 @@ class Lecturer extends Model implements HasMedia
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'id' => 'integer',
'active' => 'boolean',
'id' => 'integer',
'active' => 'boolean',
];
protected static function booted()
{
static::creating(function ($model) {
if (!$model->created_by) {
if (! $model->created_by) {
$model->created_by = auth()->id();
}
});
}
public function registerMediaConversions(Media $media = null): void
public function registerMediaConversions(?Media $media = null): void
{
$this
->addMediaConversion('preview')
->fit(Fit::Crop, 300, 300)
->nonQueued();
$this->addMediaConversion('thumb')
->fit(Fit::Crop, 130, 130)
->width(130)
->height(130);
->fit(Fit::Crop, 130, 130)
->width(130)
->height(130);
}
public function registerMediaCollections(): void
{
$this->addMediaCollection('avatar')
->singleFile()
->useFallbackUrl(asset('img/einundzwanzig.png'));
->singleFile()
->useFallbackUrl(asset('img/einundzwanzig.png'));
$this->addMediaCollection('images')
->useFallbackUrl(asset('img/einundzwanzig.png'));
->useFallbackUrl(asset('img/einundzwanzig.png'));
}
/**
@@ -72,9 +74,9 @@ class Lecturer extends Model implements HasMedia
public function getSlugOptions(): SlugOptions
{
return SlugOptions::create()
->generateSlugsFrom(['name'])
->saveSlugsTo('slug')
->usingLanguage(Cookie::get('lang', config('app.locale')));
->generateSlugsFrom(['name'])
->saveSlugsTo('slug')
->usingLanguage(Cookie::get('lang', config('app.locale')));
}
public function createdBy(): BelongsTo

View File

@@ -16,8 +16,8 @@ use Spatie\Sluggable\SlugOptions;
class Meetup extends Model implements HasMedia
{
use InteractsWithMedia;
use HasSlug;
use InteractsWithMedia;
protected $connection = 'einundzwanzig';
@@ -43,7 +43,7 @@ class Meetup extends Model implements HasMedia
protected static function booted()
{
static::creating(function ($model) {
if (!$model->created_by) {
if (! $model->created_by) {
$model->created_by = auth()->id();
}
});
@@ -57,7 +57,7 @@ class Meetup extends Model implements HasMedia
->usingLanguage(Cookie::get('lang', config('app.locale')));
}
public function registerMediaConversions(Media $media = null): void
public function registerMediaConversions(?Media $media = null): void
{
$this
->addMediaConversion('preview')
@@ -101,7 +101,7 @@ class Meetup extends Model implements HasMedia
}
return Attribute::make(
get: fn() => url()->route('img',
get: fn () => url()->route('img',
[
'path' => $path,
'w' => 900,
@@ -117,7 +117,7 @@ class Meetup extends Model implements HasMedia
$nextEvent = $this->meetupEvents()->where('start', '>=', now())->orderBy('start')->first();
return Attribute::make(
get: fn() => $nextEvent ? [
get: fn () => $nextEvent ? [
'start' => $nextEvent->start->toDateTimeString(),
'portalLink' => url()->route('meetup.event.landing', ['country' => $this->city->country, 'meetupEvent' => $nextEvent]),
'location' => $nextEvent->location,

View File

@@ -6,7 +6,5 @@ use Illuminate\Database\Eloquent\Model;
class Profile extends Model
{
protected $guarded = [];
}

View File

@@ -15,17 +15,19 @@ use Spatie\Sluggable\SlugOptions;
class ProjectProposal extends Model implements HasMedia
{
use InteractsWithMedia;
use HasSlug;
use InteractsWithMedia;
/**
* The attributes that aren't mass assignable.
*
* @var array
*/
protected $guarded = [];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
@@ -33,10 +35,7 @@ class ProjectProposal extends Model implements HasMedia
'einundzwanzig_pleb_id' => 'integer',
];
protected static function booted()
{
}
protected static function booted() {}
public function getSlugOptions(): SlugOptions
{
@@ -46,7 +45,7 @@ class ProjectProposal extends Model implements HasMedia
->usingLanguage(Cookie::get('lang', config('app.locale')));
}
public function registerMediaConversions(Media $media = null): void
public function registerMediaConversions(?Media $media = null): void
{
$this
->addMediaConversion('preview')

View File

@@ -16,8 +16,8 @@ use Staudenmeir\EloquentHasManyDeep\HasRelationships;
class Venue extends Model implements HasMedia
{
use HasSlug;
use HasRelationships;
use HasSlug;
use InteractsWithMedia;
protected $connection = 'einundzwanzig';
@@ -48,22 +48,22 @@ class Venue extends Model implements HasMedia
});
}
public function registerMediaConversions(Media $media = null): void
public function registerMediaConversions(?Media $media = null): void
{
$this
->addMediaConversion('preview')
->fit(Fit::Crop, 300, 300)
->nonQueued();
$this->addMediaConversion('thumb')
->fit(Fit::Crop, 130, 130)
->width(130)
->height(130);
->fit(Fit::Crop, 130, 130)
->width(130)
->height(130);
}
public function registerMediaCollections(): void
{
$this->addMediaCollection('images')
->useFallbackUrl(asset('img/einundzwanzig.png'));
->useFallbackUrl(asset('img/einundzwanzig.png'));
}
/**
@@ -72,9 +72,9 @@ class Venue extends Model implements HasMedia
public function getSlugOptions(): SlugOptions
{
return SlugOptions::create()
->generateSlugsFrom(['city.slug', 'name'])
->saveSlugsTo('slug')
->usingLanguage(Cookie::get('lang', config('app.locale')));
->generateSlugsFrom(['city.slug', 'name'])
->saveSlugsTo('slug')
->usingLanguage(Cookie::get('lang', config('app.locale')));
}
public function createdBy(): BelongsTo
@@ -89,12 +89,12 @@ class Venue extends Model implements HasMedia
public function lecturers()
{
return $this->hasManyDeepFromRelations($this->courses(), (new Course())->lecturer());
return $this->hasManyDeepFromRelations($this->courses(), (new Course)->lecturer());
}
public function courses()
{
return $this->hasManyDeepFromRelations($this->events(), (new CourseEvent())->course());
return $this->hasManyDeepFromRelations($this->events(), (new CourseEvent)->course());
}
public function courseEvents(): HasMany

View File

@@ -7,7 +7,6 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Vote extends Model
{
/**
* The attributes that aren't mass assignable.
*

View File

@@ -13,7 +13,7 @@ class NostrAuthServiceProvider extends ServiceProvider
public function boot(): void
{
Auth::provider('nostr', function (Application $app, array $config) {
return new NostrUserProvider();
return new NostrUserProvider;
});
Auth::extend('nostr-session', function (Application $app, string $name, array $config) {

View File

@@ -3,8 +3,8 @@
namespace App\Support;
use App\Auth\NostrUser;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
class NostrAuth
{

View File

@@ -15,7 +15,7 @@ trait NostrEventRendererTrait
$profile = Profile::query()->where('pubkey', $event->pubkey)->first();
if ($profile && $profile->name) {
$name = $profile->name;
} elseif ($profile && !empty($profile->display_name)) {
} elseif ($profile && ! empty($profile->display_name)) {
$name = $profile->display_name;
} else {
$name = 'Anonymous';
@@ -30,7 +30,7 @@ trait NostrEventRendererTrait
'event_id' => $event->event_id,
], [
'html' => $content,
'profile_image' => $profile && $profile->picture !== '' ? $profile->picture : 'https://robohash.org/' . $profile->pubkey,
'profile_image' => $profile && $profile->picture !== '' ? $profile->picture : 'https://robohash.org/'.$profile->pubkey,
'profile_name' => $name,
]);
}
@@ -57,7 +57,7 @@ trait NostrEventRendererTrait
$profile = Profile::query()->where('pubkey', $pubkey)->first();
if ($profile && $profile->name) {
$name = $profile->name;
} elseif ($profile && !empty($profile->display_name)) {
} elseif ($profile && ! empty($profile->display_name)) {
$name = $profile->display_name;
} else {
$name = 'Anonymous';

View File

@@ -22,6 +22,7 @@ trait NostrFetcherTrait
'hex' => $item,
'npub' => (new Key)->convertPublicKeyToBech32($item),
]);
continue;
}
$hex->push([
@@ -30,10 +31,10 @@ trait NostrFetcherTrait
]);
}
$subscription = new Subscription();
$subscription = new Subscription;
$subscriptionId = $subscription->setId();
$filter1 = new Filter();
$filter1 = new Filter;
$filter1->setKinds([0]); // You can add multiple kind numbers
$filter1->setAuthors($hex->pluck('hex')->toArray()); // You can add multiple author ids
$filters = [$filter1];
@@ -54,7 +55,7 @@ trait NostrFetcherTrait
try {
$response = $request->send();
$data = $response[$relayUrl];
if (!empty($data)) {
if (! empty($data)) {
\Log::info('Successfully fetched data from relay: '.$relayUrl);
break; // Exit the loop if data is not empty
}
@@ -65,6 +66,7 @@ trait NostrFetcherTrait
if (empty($data)) {
\Log::warning('No data found from any relay');
return;
}
foreach ($data as $item) {
@@ -94,5 +96,4 @@ trait NostrFetcherTrait
}
}
}
}

View File

@@ -50,5 +50,5 @@ return [
* the field to have a value and alerts the user if it is empty or undefined.
* Supported: "true", "false"
*/
'permit_empty' => env('CIPHERSWEET_PERMIT_EMPTY', FALSE)
'permit_empty' => env('CIPHERSWEET_PERMIT_EMPTY', false),
];

View File

@@ -51,7 +51,7 @@ return [
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL') . '/storage',
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
'throw' => false,
],

View File

@@ -12,7 +12,7 @@ return [
*/
'theme' => \PowerComponents\LivewirePowerGrid\Themes\Tailwind::class,
//'theme' => \PowerComponents\LivewirePowerGrid\Themes\Bootstrap5::class,
// 'theme' => \PowerComponents\LivewirePowerGrid\Themes\Bootstrap5::class,
/*
|--------------------------------------------------------------------------
@@ -30,10 +30,10 @@ return [
'flatpickr' => [
'locales' => [
'de_DE' => [
'locale' => 'de',
'locale' => 'de',
'dateFormat' => 'd.m.Y H:i',
'enableTime' => true,
'time_24hr' => true,
'time_24hr' => true,
],
],
],
@@ -128,14 +128,14 @@ return [
*/
'exportable' => [
'default' => 'openspout_v4',
'default' => 'openspout_v4',
'openspout_v4' => [
'xlsx' => \PowerComponents\LivewirePowerGrid\Components\Exports\OpenSpout\v4\ExportToXLS::class,
'csv' => \PowerComponents\LivewirePowerGrid\Components\Exports\OpenSpout\v4\ExportToCsv::class,
'csv' => \PowerComponents\LivewirePowerGrid\Components\Exports\OpenSpout\v4\ExportToCsv::class,
],
'openspout_v3' => [
'xlsx' => \PowerComponents\LivewirePowerGrid\Components\Exports\OpenSpout\v3\ExportToXLS::class,
'csv' => \PowerComponents\LivewirePowerGrid\Components\Exports\OpenSpout\v3\ExportToCsv::class,
'csv' => \PowerComponents\LivewirePowerGrid\Components\Exports\OpenSpout\v3\ExportToCsv::class,
],
],

View File

@@ -45,7 +45,6 @@ return [
*/
'cache_store' => null,
/*
* When cache_store is enabled, this value will be used to determine
* how long the cache will be valid. If you set this to `null` the

View File

@@ -141,7 +141,7 @@ return [
'-m 6', // for the slowest compression method in order to get the best compression.
'-pass 10', // for maximizing the amount of analysis pass.
'-mt', // multithreading for some speed improvements.
'-q 90', //quality factor that brings the least noticeable changes.
'-q 90', // quality factor that brings the least noticeable changes.
],
Spatie\ImageOptimizer\Optimizers\Avifenc::class => [
'-a cq-level=23', // constant quality level, lower values mean better quality and greater file size (0-63).

View File

@@ -42,6 +42,6 @@ return [
'btc_pay' => [
'api_key' => env('BTC_PAY_API_KEY'),
]
],
];

View File

@@ -4,7 +4,8 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
return new class extends Migration
{
/**
* Run the migrations.
*/

View File

@@ -4,7 +4,8 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
return new class extends Migration
{
/**
* Run the migrations.
*/

View File

@@ -4,7 +4,8 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
return new class extends Migration
{
/**
* Run the migrations.
*/

View File

@@ -4,7 +4,8 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
return new class extends Migration
{
/**
* Run the migrations.
*/

View File

@@ -4,7 +4,8 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
return new class extends Migration
{
/**
* Run the migrations.
*/

View File

@@ -4,7 +4,8 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
return new class extends Migration
{
/**
* Run the migrations.
*/

View File

@@ -4,7 +4,8 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
return new class extends Migration
{
/**
* Run the migrations.
*/

View File

@@ -4,7 +4,8 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
return new class extends Migration
{
/**
* Run the migrations.
*/
@@ -21,7 +22,6 @@ return new class extends Migration {
*/
public function down(): void
{
Schema::table('einundzwanzig_plebs', function (Blueprint $table) {
});
Schema::table('einundzwanzig_plebs', function (Blueprint $table) {});
}
};

View File

@@ -4,7 +4,8 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
return new class extends Migration
{
/**
* Run the migrations.
*/

View File

@@ -4,7 +4,8 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
return new class extends Migration
{
/**
* Run the migrations.
*/

View File

@@ -4,7 +4,8 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
return new class extends Migration
{
/**
* Run the migrations.
*/

View File

@@ -4,7 +4,8 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
return new class extends Migration
{
/**
* Run the migrations.
*/

View File

@@ -4,7 +4,8 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
return new class extends Migration
{
/**
* Run the migrations.
*/

View File

@@ -4,7 +4,8 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
return new class extends Migration
{
/**
* Run the migrations.
*/

View File

@@ -4,7 +4,8 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
return new class extends Migration
{
/**
* Run the migrations.
*/

View File

@@ -4,7 +4,8 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
return new class extends Migration
{
/**
* Run the migrations.
*/

View File

@@ -4,7 +4,8 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
return new class extends Migration
{
/**
* Run the migrations.
*/

View File

@@ -21,8 +21,8 @@
<article
wire:key="project_{{ $project->id }}"
class="flex bg-white dark:bg-gray-800 shadow-sm rounded-xl overflow-hidden">
<!-- Image -->
wire:key="project_{{ $project->id }}"
<flux:card class="flex overflow-hidden">
@if(!$project->sats_paid)
<a class="relative block w-24 sm:w-56 xl:sidebar-expanded:w-40 2xl:sidebar-expanded:w-56 shrink-0"
href="{{ route('association.projectSupport.item', ['projectProposal' => $project]) }}">
@@ -124,5 +124,5 @@
@endif
</div>
</div>
</article>
</flux:card>
@endif

View File

@@ -1,3 +1,9 @@
@php
$currentRoute = request()->route()->getName();
$isCurrentRouteClass = 'bg-gray-200 dark:bg-gray-700 text-gray-800 dark:text-gray-100';
$isNotCurrentRouteClass = 'text-gray-600 dark:text-gray-400';
@endphp
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" class="dark">
<head>
@@ -32,6 +38,14 @@
<flux:navbar.item icon="rss" :href="route('association.news')" :current="request()->routeIs('association.news')">News</flux:navbar.item>
<flux:navbar.item icon="identification" :href="route('association.profile')" :current="request()->routeIs('association.profile')">Profil</flux:navbar.item>
<flux:navbar.item icon="heart" :href="route('association.projectSupport')" :current="request()->routeIs('association.projectSupport')">Projekt-Unterstützungen</flux:navbar.item>
<flux:dropdown position="bottom">
<flux:navbar.item icon:trailing="chevron-down">Admin</flux:navbar.item>
<flux:navmenu>
<flux:navmenu.item :href="route('association.members.admin')" :current="request()->routeIs('association.members.admin')">Mitglieder</flux:navmenu.item>
</flux:navmenu>
</flux:dropdown>
@endif
</flux:navbar>
@@ -60,7 +74,7 @@
</flux:navbar>
</flux:header>
<flux:sidebar sticky collapsible="mobile" class="bg-zinc-50 dark:bg-zinc-900 border-r border-zinc-200 dark:border-zinc-700">
<flux:sidebar sticky collapsible="mobile" class="lg:hidden bg-zinc-50 dark:bg-zinc-900 border-r border-zinc-200 dark:border-zinc-700">
<flux:sidebar.header>
<flux:sidebar.brand
href="/"
@@ -77,9 +91,28 @@
<flux:sidebar.item icon="rss" :href="route('association.news')" :current="request()->routeIs('association.news')">News</flux:sidebar.item>
<flux:sidebar.item icon="identification" :href="route('association.profile')" :current="request()->routeIs('association.profile')">Meine Mitgliedschaft</flux:sidebar.item>
<flux:sidebar.item icon="heart" :href="route('association.projectSupport')" :current="request()->routeIs('association.projectSupport')">Projekt-Unterstützungen</flux:sidebar.item>
<flux:sidebar.group heading="Admin" class="grid">
<flux:sidebar.item icon="users" :href="route('association.members.admin')" :current="request()->routeIs('association.members.admin')">Mitglieder</flux:sidebar.item>
</flux:sidebar.group>
<flux:sidebar.group heading="Info" class="grid">
<flux:sidebar.item href="https://gitworkshop.dev/r/naddr1qvzqqqrhnypzqzklvar4enzu53t06vpzu3h465nwkzhk9p9ls4y5crwhs3lnu5pnqy88wumn8ghj7mn0wvhxcmmv9uqpxetfde6kuer6wasku7nfvukkummnw3eqdgsn8w/issues" target="_blank">Issues/Feedback</flux:sidebar.item>
<flux:sidebar.item :href="route('changelog')">Changelog</flux:sidebar.item>
<flux:sidebar.item href="https://github.com/HolgerHatGarkeineNode/einundzwanzig-nostr" target="_blank">Github</flux:sidebar.item>
<flux:sidebar.item href="https://einundzwanzig.space/kontakt/" target="_blank">Impressum</flux:sidebar.item>
</flux:sidebar.group>
@endif
<x-layouts.navigation.admin :currentRoute="request()->route()->getName()"/>
@if(\App\Support\NostrAuth::check())
<flux:sidebar.spacer />
<form method="post" action="{{ route('logout') }}" @submit="$dispatch('nostrLoggedOut')">
@csrf
<flux:sidebar.item icon="arrow-right-start-on-rectangle" type="submit">Logout</flux:sidebar.item>
</form>
@else
<flux:sidebar.item icon="user" @click="openNostrLogin">Mit Nostr verbinden</flux:sidebar.item>
@endif
</flux:sidebar.nav>
</flux:sidebar>

View File

@@ -518,9 +518,9 @@ new class extends Component {
</h1>
<div class="grid sm:grid-cols-2 gap-6">
<div
class="bg-white dark:bg-gray-800 shadow-sm rounded-xl">
<div class="flex flex-col h-full p-5">
<header>
<div class="grid sm:grid-cols-2 gap-6">
<flux:card>
<header>
<div class="flex items-center justify-between">
<i class="fa-sharp-duotone fa-solid {{ $positions['presidency']['icon'] }} w-9 h-9 fill-current text-white"></i>
</div>
@@ -562,7 +562,7 @@ new class extends Component {
</div>
</footer>
</div>
</div>
</flux:card>
</div>
<h1 class="mt-6 text-xl leading-snug text-gray-800 dark:text-gray-100 font-bold mb-1 sm:mb-0 ml-2">
@@ -571,8 +571,8 @@ new class extends Component {
<div class="grid gap-6">
<div
class="bg-white dark:bg-gray-800 shadow-sm rounded-xl">
<div class="flex flex-col h-full p-5">
<flux:card>
<div class="flex flex-col h-full p-5">
<div class="grow mt-2">
<div class="text-sm">
<span>Klicke auf den Kandidaten, um seine Position als Vorstandsmitglied zu bestätigen.</span>
@@ -597,7 +597,7 @@ new class extends Component {
@endforeach
</div>
</footer>
</div>
</flux:card>
</div>
</div>
@@ -607,7 +607,7 @@ new class extends Component {
<!-- Log events -->
<div x-cloak x-show="showLog" class="mt-6 hidden sm:block">
<div class="bg-white dark:bg-gray-800 shadow-sm rounded-xl mb-8">
<flux:card mb-8>
<header class="px-5 py-4">
<h2 class="font-semibold text-gray-800 dark:text-gray-100">Präsidium Log <span
class="text-gray-400 dark:text-gray-500 font-medium">{{ count($this->loadedEvents) }}</span>
@@ -671,10 +671,10 @@ new class extends Component {
</table>
</div>
</div>
</div>
</flux:card>
</div>
<div x-cloak x-show="showLog" class="mt-6 hidden sm:block">
<div class="bg-white dark:bg-gray-800 shadow-sm rounded-xl mb-8">
<flux:card mb-8>
<header class="px-5 py-4">
<h2 class="font-semibold text-gray-800 dark:text-gray-100">Board Log <span
class="text-gray-400 dark:text-gray-500 font-medium">{{ count($this->loadedBoardEvents) }}</span>
@@ -738,7 +738,7 @@ new class extends Component {
</table>
</div>
</div>
</div>
</flux:card>
</div>
</div>
@@ -749,13 +749,13 @@ new class extends Component {
</div>
@else
<div class="px-4 sm:px-6 lg:px-8 py-8 w-full max-w-9xl mx-auto">
<div class="bg-white dark:bg-[#1B1B1B] shadow overflow-hidden sm:rounded-lg">
<flux:card>
<div class="px-4 py-5 sm:px-6">
<h3 class="text-lg font-medium leading-6 text-gray-900 dark:text-gray-200">Wahlen</h3>
<p class="mt-1 max-w">
Du bist nicht berechtigt, die Wahlen einzusehen.
</p>
</div>
</flux:card>
</div>
</div>
@endif

View File

@@ -4,9 +4,9 @@ use App\Enums\NewsCategory;
use App\Models\Notification;
use App\Support\NostrAuth;
use Illuminate\Support\Collection;
use Livewire\Component;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Component;
use Livewire\WithFileUploads;
new
@@ -35,8 +35,11 @@ class extends Component {
$currentPubkey = NostrAuth::pubkey();
$currentPleb = \App\Models\EinundzwanzigPleb::query()->where('pubkey', $currentPubkey)->first();
if ($currentPleb && $currentPleb->association_status->value > 1 && $currentPleb->paymentEvents()->where('year',
date('Y'))->where('paid', true)->exists()) {
if (
$currentPleb
&& $currentPleb->association_status->value > 1
&& $currentPleb->paymentEvents()->where('year', date('Y'))->where('paid', true)->exists()
) {
$this->isAllowed = true;
}
@@ -158,8 +161,8 @@ class extends Component {
<div class="space-y-2">
@forelse($news as $post)
<article wire:key="post_{{ $post->id }}"
class="bg-white dark:bg-gray-800 shadow-sm rounded-xl p-5">
<div class="flex flex-start space-x-4">
<article wire:key="post_{{ $post->id }}"
<flux:card>
<!-- Avatar -->
<div class="shrink-0 mt-1.5">
<img class="w-8 h-8 rounded-full"
@@ -220,11 +223,11 @@ class extends Component {
</flux:button>
@endif
</div>
</article>
</flux:card>
@empty
<article class="bg-white dark:bg-gray-800 shadow-sm rounded-xl p-5">
<flux:card>
<p>Keine News vorhanden.</p>
</article>
</flux:card>
@endforelse
</div>
@@ -243,7 +246,7 @@ class extends Component {
<div class="space-y-4">
@if($canEdit)
<div class="bg-white dark:bg-gray-800 p-4 rounded-xl">
<flux:card>
<div
class="text-xs font-semibold text-gray-400 dark:text-gray-500 uppercase mb-4">
News anlegen
@@ -269,29 +272,30 @@ class extends Component {
/>
@endforeach
</flux:select>
<flux:error name="form.category" />
<flux:error name="form.category"/>
</flux:field>
</div>
<div wire:dirty>
<flux:field>
<flux:label>Titel</flux:label>
<flux:input wire:model="form.name" placeholder="News-Titel" />
<flux:error name="form.name" />
<flux:input wire:model="form.name" placeholder="News-Titel"/>
<flux:error name="form.name"/>
</flux:field>
</div>
<div wire:dirty>
<flux:field>
<flux:label>Beschreibung</flux:label>
<flux:description>optional</flux:description>
<flux:textarea wire:model="form.description" rows="4" placeholder="Beschreibung..." />
<flux:error name="form.description" />
<flux:textarea wire:model="form.description" rows="4"
placeholder="Beschreibung..."/>
<flux:error name="form.description"/>
</flux:field>
</div>
<flux:button wire:click="save" class="w-full">
Hinzufügen
</flux:button>
</div>
</div>
</flux:card>
@endif
</div>
@@ -304,7 +308,7 @@ class extends Component {
</div>
@else
<div class="px-4 sm:px-6 lg:px-8 py-8 w-full max-w-9xl mx-auto">
<div class="bg-white dark:bg-[#1B1B1B] shadow overflow-hidden sm:rounded-lg">
<flux:card>
<div class="px-4 py-5 sm:px-6">
<h3 class="text-lg font-medium leading-6 text-gray-900 dark:text-gray-200">
News
@@ -312,7 +316,7 @@ class extends Component {
<p class="mt-1 max-w">
Du bist nicht berechtigt, die News einzusehen.
</p>
</div>
</flux:card>
</div>
</div>
@endif

View File

@@ -319,7 +319,7 @@ new class extends Component {
</div>
<div class="bg-white dark:bg-[#1B1B1B] shadow-sm rounded-xl mb-8">
<flux:card mb-8>
<div class="flex flex-col md:flex-row md:-mr-px">
<!-- Sidebar -->
@@ -340,8 +340,7 @@ new class extends Component {
</a>
</li>
</ul>
</div>
</div>
</flux:card>
<!-- Panel -->
<div class="grow">
@@ -359,7 +358,7 @@ new class extends Component {
Login und Signer-Apps
</div>
</div>
<div class="bg-white dark:bg-gray-800 shadow-sm rounded-xl px-5 py-4">
<flux:card>
<div
class="md:flex justify-between items-center space-y-4 md:space-y-0 space-x-2">
<!-- Left side -->
@@ -382,8 +381,8 @@ new class extends Component {
</div>
</div>
</div>
</div>
<div class="bg-white dark:bg-gray-800 shadow-sm rounded-xl px-5 py-4">
</flux:card>
<flux:card>
<div
class="md:flex justify-between items-center space-y-4 md:space-y-0 space-x-2">
<!-- Left side -->
@@ -407,8 +406,8 @@ new class extends Component {
</div>
</div>
</div>
</div>
<div class="bg-white dark:bg-gray-800 shadow-sm rounded-xl px-5 py-4">
</flux:card>
<flux:card>
<div
class="md:flex justify-between items-center space-y-4 md:space-y-0 space-x-2">
<!-- Left side -->
@@ -431,8 +430,8 @@ new class extends Component {
</div>
</div>
</div>
</div>
<div class="bg-white dark:bg-gray-800 shadow-sm rounded-xl px-5 py-4">
</flux:card>
<flux:card>
<div
class="md:flex justify-between items-center space-y-4 md:space-y-0 space-x-2">
<!-- Left side -->
@@ -454,7 +453,7 @@ new class extends Component {
Browser Firefox
</div>
</div>
</div>
</flux:card>
</div>
</div>
@endif
@@ -476,8 +475,8 @@ new class extends Component {
</template>
@if($currentPubkey && $currentPleb->association_status->value < 2)
<div
class="inline-flex min-w-80 px-4 py-2 rounded-lg text-sm bg-white dark:bg-gray-800 shadow-sm border border-gray-200 dark:border-gray-700/60 text-gray-600 dark:text-gray-100">
<div class="flex w-full justify-between items-start">
<flux:card>
<div class="flex w-full justify-between items-start">
<div class="flex">
<svg class="shrink-0 fill-current text-green-500 mt-[3px] mr-3"
width="16" height="16" viewBox="0 0 16 16">
@@ -486,7 +485,7 @@ new class extends Component {
</svg>
<div>Profil in der Datenbank vorhanden.</div>
</div>
</div>
</flux:card>
</div>
@endif
</div>
@@ -524,8 +523,8 @@ new class extends Component {
@endif
@if($currentPubkey)
<div
class="mt-6 inline-flex flex-col w-full px-4 py-2 rounded-lg text-sm bg-white dark:bg-gray-800 shadow-sm border border-gray-200 dark:border-gray-700/60 text-gray-600 dark:text-gray-400">
<div class="flex w-full justify-between items-start">
<flux:card class="mt-6">
<div class="flex w-full justify-between items-start">
<div class="flex w-full">
<svg class="shrink-0 fill-current text-yellow-500 mt-[3px] mr-3"
width="16"
@@ -578,7 +577,7 @@ new class extends Component {
</div>
@endif
</div>
</div>
</flux:card>
</div>
</div>
@endif
@@ -588,8 +587,8 @@ new class extends Component {
@if($currentPleb && $currentPleb->association_status->value > 1)
<div class="flex flex-col space-y-4">
<div
class="inline-flex flex-col w-full max-w-lg px-4 py-2 rounded-lg text-sm bg-white dark:bg-gray-800 shadow-sm border border-gray-200 dark:border-gray-700/60 text-gray-600 dark:text-gray-400">
<div class="flex w-full justify-between items-start">
<flux:card class="max-w-lg">
<div class="flex w-full justify-between items-start">
<div class="flex">
<svg class="shrink-0 fill-current text-green-500 mt-[3px] mr-3"
width="16"
@@ -604,7 +603,7 @@ new class extends Component {
</div>
</div>
</div>
</div>
</flux:card>
</div>
@endif
</section>
@@ -612,8 +611,8 @@ new class extends Component {
<section>
@if($currentPleb && $currentPleb->association_status->value > 1)
<div
class="inline-flex flex-col w-full px-4 py-2 rounded-lg text-sm bg-white dark:bg-gray-800 shadow-sm border border-gray-200 dark:border-gray-700/60 text-gray-600 dark:text-gray-400">
<div class="flex w-full justify-between items-start">
<flux:card>
<div class="flex w-full justify-between items-start">
<div class="flex">
<svg class="shrink-0 fill-current text-yellow-500 mt-[3px] mr-3" width="16"
height="16" viewBox="0 0 16 16">
@@ -717,9 +716,12 @@ new class extends Component {
</td>
<td class="w-full block md:w-auto md:table-cell py-0.5 md:py-2">
@if($payment->btc_pay_invoice)
<x-button target="_blank" xs
label="Quittung"
href="https://pay.einundzwanzig.space/i/{{ $payment->btc_pay_invoice }}/receipt"/>
<flux:button href="https://pay.einundzwanzig.space/i/{{ $payment->btc_pay_invoice }}/receipt"
target="_blank"
size="xs"
variant="subtle">
Quittung
</flux:button>
@endif
</td>
</tr>
@@ -731,7 +733,7 @@ new class extends Component {
</div>
</div>
</div>
</div>
</flux:card>
@endif
</section>

View File

@@ -48,8 +48,7 @@ class extends Component {
<div class="md:flex">
<!-- Left column -->
<div class="w-full md:w-60 mb-4 md:mb-0">
<div
class="bg-white dark:bg-gray-800 shadow-sm rounded-xl p-5">
<flux:card>
<h2 class="text-lg font-semibold text-gray-800 dark:text-gray-100 mb-4">
Details
</h2>
@@ -73,26 +72,25 @@ class extends Component {
</dd>
</div>
</dl>
</div>
</flux:card>
</div>
<!-- Right column -->
<div class="flex-1 md:ml-8">
<div
class="bg-white dark:bg-gray-800 shadow-sm rounded-xl p-5">
<flux:card>
<h2 class="text-lg font-semibold text-gray-800 dark:text-gray-100 mb-4">
Beschreibung
</h2>
<p class="text-sm text-gray-800 dark:text-gray-100">
{{ $project->description ?? 'Keine Beschreibung' }}
</p>
</div>
</flux:card>
</div>
</div>
</div>
@else
<div class="px-4 sm:px-6 lg:px-8 py-8 w-full max-w-9xl mx-auto">
<div class="bg-white dark:bg-[#1B1B1B] shadow overflow-hidden sm:rounded-lg">
<flux:card>
<div class="px-4 py-5 sm:px-6">
<h3 class="text-lg font-medium leading-6 text-gray-900 dark:text-gray-200">
Projektförderung
@@ -100,7 +98,7 @@ class extends Component {
<p class="mt-1 max-w">
Du bist nicht berechtigt, die Projektförderung einzusehen.
</p>
</div>
</flux:card>
</div>
</div>
@endif

View File

@@ -1,4 +1,5 @@
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Session;