mirror of
https://github.com/HolgerHatGarKeineNode/einundzwanzig-nostr.git
synced 2026-01-25 04:13:17 +00:00
105 lines
3.5 KiB
PHP
105 lines
3.5 KiB
PHP
<?php
|
|
|
|
use App\Models\EinundzwanzigPleb;
|
|
use App\Models\Election;
|
|
use App\Support\NostrAuth;
|
|
use Livewire\Component;
|
|
|
|
new class extends Component {
|
|
public $layout = 'layouts.app';
|
|
public $title = __('Wahlen');
|
|
|
|
public bool $isAllowed = false;
|
|
|
|
public ?string $currentPubkey = null;
|
|
|
|
public ?EinundzwanzigPleb $currentPleb = null;
|
|
|
|
public array $elections = [];
|
|
|
|
protected $listeners = [
|
|
'nostrLoggedOut' => 'handleNostrLoggedOut',
|
|
'nostrLoggedIn' => 'handleNostrLoggedIn',
|
|
];
|
|
|
|
public function mount(): void
|
|
{
|
|
$this->elections = Election::query()
|
|
->get()
|
|
->toArray();
|
|
if (NostrAuth::check()) {
|
|
$this->currentPubkey = NostrAuth::pubkey();
|
|
$logPubkeys = [
|
|
'0adf67475ccc5ca456fd3022e46f5d526eb0af6284bf85494c0dd7847f3e5033',
|
|
'430169631f2f0682c60cebb4f902d68f0c71c498fd1711fd982f052cf1fd4279',
|
|
];
|
|
if (in_array($this->currentPubkey, $logPubkeys, true)) {
|
|
$this->isAllowed = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
public function handleNostrLoggedOut(): void
|
|
{
|
|
$this->isAllowed = false;
|
|
$this->currentPubkey = null;
|
|
$this->currentPleb = null;
|
|
}
|
|
|
|
public function handleNostrLoggedIn($pubkey): void
|
|
{
|
|
NostrAuth::login($pubkey);
|
|
$this->currentPubkey = $pubkey;
|
|
$this->currentPleb = \App\Models\EinundzwanzigPleb::query()
|
|
->where('pubkey', $pubkey)->first();
|
|
$logPubkeys = [
|
|
'0adf67475ccc5ca456fd3022e46f5d526eb0af6284bf85494c0dd7847f3e5033',
|
|
'430169631f2f0682c60cebb4f902d68f0c71c498fd1711fd982f052cf1fd4279',
|
|
];
|
|
if (in_array($this->currentPubkey, $logPubkeys, true)) {
|
|
$this->isAllowed = true;
|
|
}
|
|
}
|
|
|
|
public function saveElection($index): void
|
|
{
|
|
$election = $this->elections[$index];
|
|
$electionModel = Election::find($election['id']);
|
|
$electionModel->candidates = $election['candidates'];
|
|
$electionModel->save();
|
|
}
|
|
};
|
|
?>
|
|
|
|
<div>
|
|
@if($isAllowed)
|
|
<div class="relative flex h-full">
|
|
@foreach($elections as $election)
|
|
<div class="w-full sm:w-1/3 p-4" wire:key="election-{{ $loop->index }}">
|
|
<div class="shadow-lg rounded-lg overflow-hidden">
|
|
{{ $election['year'] }}
|
|
</div>
|
|
<div class="shadow-lg rounded-lg overflow-hidden">
|
|
<x-textarea wire:model="elections.{{ $loop->index }}.candidates" rows="25"
|
|
label="candidates" placeholder=""/>
|
|
</div>
|
|
<div class="py-2">
|
|
<x-button label="Speichern" wire:click="saveElection({{ $loop->index }})" wire:loading.attr="disabled"/>
|
|
</div>
|
|
</div>
|
|
@endforeach
|
|
</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">
|
|
<div class="px-4 py-5 sm:px-6">
|
|
<h3 class="text-lg font-medium leading-6 text-gray-900 dark:text-gray-200">Einstellungen</h3>
|
|
<p class="mt-1 max-w">
|
|
Du bist nicht berechtigt, die Einstellungen zu bearbeiten.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endif
|
|
</div>
|