diff --git a/.gitea/workflows/build-image.yaml b/.gitea/workflows/build-image.yaml index 7f0997f..04f7e29 100644 --- a/.gitea/workflows/build-image.yaml +++ b/.gitea/workflows/build-image.yaml @@ -7,7 +7,7 @@ jobs: env: IMAGE_NAME: tladle REGISTRY_NAME: gitea.sc0tt.org - GIT_TAG: 1.2 + GIT_TAG: 1.3 runs-on: ubuntu-latest steps: - name: Checkout diff --git a/app/Filament/Resources/TlaSuggestions/Pages/ManageTlaSuggestions.php b/app/Filament/Resources/TlaSuggestions/Pages/ManageTlaSuggestions.php new file mode 100644 index 0000000..f834575 --- /dev/null +++ b/app/Filament/Resources/TlaSuggestions/Pages/ManageTlaSuggestions.php @@ -0,0 +1,19 @@ +components([ + TextInput::make('acronym') + ->required(), + TextInput::make('hint') + ->default(null), + Select::make('language') + ->options(['hu' => 'Hu', 'en' => 'En']) + ->required(), + Textarea::make('context') + ->default(null) + ->columnSpanFull(), + TextInput::make('submitter') + ->default(null), + ]); + } + + public static function table(Table $table): Table + { + return $table + ->recordTitleAttribute('Suggestions') + ->columns([ + TextColumn::make('acronym') + ->searchable(), + TextColumn::make('hint') + ->searchable(), + TextColumn::make('language') + ->badge(), + TextColumn::make('submitter') + ->searchable(), + TextColumn::make('created_at') + ->dateTime() + ->sortable() + ->toggleable(isToggledHiddenByDefault: true), + TextColumn::make('updated_at') + ->dateTime() + ->sortable() + ->toggleable(isToggledHiddenByDefault: true), + ]) + ->filters([ + // + ]) + ->recordActions([ + EditAction::make(), + DeleteAction::make(), + Action::make('Approve') + ->action(fn (TlaSuggestion $record) => $record->ApproveTla($record)) + ->requiresConfirmation() + ->modalHeading('Approve TLA') + ->modalDescription('Are you sure you want to approve this TLA?') + ]) + ->toolbarActions([ + BulkActionGroup::make([ + DeleteBulkAction::make(), + ]), + ]); + } + + public static function getPages(): array + { + return [ + 'index' => ManageTlaSuggestions::route('/'), + ]; + } +} diff --git a/app/Filament/Resources/Tlas/TlaResource.php b/app/Filament/Resources/Tlas/TlaResource.php index 1636213..4b84973 100644 --- a/app/Filament/Resources/Tlas/TlaResource.php +++ b/app/Filament/Resources/Tlas/TlaResource.php @@ -25,7 +25,7 @@ class TlaResource extends Resource protected static string|BackedEnum|null $navigationIcon = Heroicon::OutlinedRectangleStack; - protected static ?string $recordTitleAttribute = 'tla'; + protected static ?string $recordTitleAttribute = 'Tla'; public static function form(Schema $schema): Schema { @@ -42,13 +42,23 @@ class TlaResource extends Resource Textarea::make('context') ->default(null) ->columnSpanFull(), + TextInput::make('submitter') + ->default(null), + TextInput::make('likes') + ->required() + ->numeric() + ->default(0), + TextInput::make('dislikes') + ->required() + ->numeric() + ->default(0), ]); } public static function table(Table $table): Table { return $table - ->recordTitleAttribute('tla') + ->recordTitleAttribute('Tla') ->columns([ TextColumn::make('acronym') ->searchable(), @@ -59,6 +69,14 @@ class TlaResource extends Resource TextColumn::make('used') ->date() ->sortable(), + TextColumn::make('submitter') + ->searchable(), + TextColumn::make('likes') + ->numeric() + ->sortable(), + TextColumn::make('dislikes') + ->numeric() + ->sortable(), TextColumn::make('created_at') ->dateTime() ->sortable() diff --git a/app/Http/Controllers/TlaController.php b/app/Http/Controllers/TlaController.php index e9e657f..d3ec374 100644 --- a/app/Http/Controllers/TlaController.php +++ b/app/Http/Controllers/TlaController.php @@ -3,37 +3,17 @@ namespace App\Http\Controllers; use App\Models\Tla; +use App\Models\TlaSuggestion; use Illuminate\Http\Request; class TlaController extends Controller { - public function store(Request $request): RedirectResponse - { - $request->validate([ - 'title' => 'required', - 'body' => 'required', - ]); - - $tla = new Tla($requestData); - - $tla->save(); - - return redirect()->route('admin')->with('success', 'Record added!'); - } // - - public function destroy(Tla $tla): RedirectResponse - { - $tla->delete(); - - return redirect()->route('admin')->with('success', 'Record deleted'); - } - public function session_flush(Request $request, string $language) { $session = $request->session(); if ($session->get('date-'.$language, NULL) != date('Y-m-d')) { - $session->forget('guesses--'.$language); + $session->forget('guesses-'.$language); $session->forget('tla-'.$language); $session->forget('correct-'.$language); $session->forget('review-'.$language); @@ -53,10 +33,11 @@ class TlaController extends Controller return response()->json([ 'hint' => $tla->hint, - 'guesses' => $session->get('guesses--'.$language, []), - 'date' => $session->get('date--'.$language), + 'guesses' => $session->get('guesses-'.$language, []), + 'date' => $session->get('date-'.$language), 'tla' => $session->get('tla-'.$language) == $tla->acronym ? $tla->acronym : NULL, 'context' => $session->get('tla-'.$language) == $tla->acronym ? $tla->context : NULL, + 'submitter' => $tla->submitter, 'correct' => $session->get('correct-'.$language), ]); } @@ -107,8 +88,8 @@ class TlaController extends Controller $score += $guess_array[$i + 3]; } - $session->push('guesses--'.$language, $guess_array); - $guesses = $session->get('guesses--'.$language, NULL); + $session->push('guesses-'.$language, $guess_array); + $guesses = $session->get('guesses-'.$language, NULL); if ($score == 12 || count($guesses) == env('MAX_GUESSES', 10)) { $session->put('tla-'.$language, $tla_object->acronym); @@ -125,8 +106,19 @@ class TlaController extends Controller ]); } - public function suggestion(?String $language = "en") { - + public function suggestion(Request $request, ?String $language = "en") { + $request->validate([ + 'acronym' => 'required', + 'hint' => 'required', + 'context' => 'required', + ]); + + $requestData = $request->input(); + $tla = new TlaSuggestion($requestData); + + $tla->save(); + + return response($tla); } public function review(Request $request, String $language, int $type) { @@ -161,20 +153,4 @@ class TlaController extends Controller else return response(null, 403); } - - public function update(Request $request, Tla $tla): RedirectResponse - { - $request->validate([ - 'title' => 'required', - 'body' => 'required', - ]); - - $requestData = $request->all(); - - $tla->update($requestData); - - $tla->save(); - - return redirect()->route('admin')->with('success', 'Record updated!'); - } } diff --git a/app/Models/Tla.php b/app/Models/Tla.php index 0b26bcc..366c5f4 100644 --- a/app/Models/Tla.php +++ b/app/Models/Tla.php @@ -11,7 +11,7 @@ class Tla extends Model use HasFactory; - protected $fillable = ['acronym', 'hint', 'language', 'used', 'context', 'likes', 'dislikes']; + protected $fillable = ['acronym', 'hint', 'language', 'used', 'context', 'submitter', 'likes', 'dislikes']; public static function GetCurrentTla( string $language ) : Tla { $tla = Tla::where('used', date("Y-m-d")) diff --git a/app/Models/TlaSuggestion.php b/app/Models/TlaSuggestion.php index f455d2d..deddc94 100644 --- a/app/Models/TlaSuggestion.php +++ b/app/Models/TlaSuggestion.php @@ -3,10 +3,18 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Factories\HasFactory; class TlaSuggestion extends Model { + use HasFactory; protected $table = 'tla_suggestion'; - protected $fillable = ['acronym', 'hint', 'language', 'context']; + protected $fillable = ['acronym', 'hint', 'language', 'context', 'submitter']; + + public static function ApproveTla(TlaSuggestion $record) { + $tla = new Tla($record->toArray()); + $record->delete(); + $tla->save(); + } } diff --git a/database/migrations/2026_08_21_065241_add_suggestion_submitter.php b/database/migrations/2026_08_21_065241_add_suggestion_submitter.php new file mode 100644 index 0000000..80cf944 --- /dev/null +++ b/database/migrations/2026_08_21_065241_add_suggestion_submitter.php @@ -0,0 +1,29 @@ +string('submitter')->nullable()->after('context'); + }); + Schema::table('tla', function (Blueprint $table){ + $table->string('submitter')->nullable()->after('context'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + // + } +}; diff --git a/resources/js/pages/HomeView.vue b/resources/js/pages/HomeView.vue index f2c3739..cc566f1 100644 --- a/resources/js/pages/HomeView.vue +++ b/resources/js/pages/HomeView.vue @@ -2,7 +2,7 @@ import axios from 'axios'; import GuessWord from '../components/GuessWord.vue'; import Modal from '../components/Modal.vue'; -import Review from '../components/Review.vue'; + import Review from '../components/Review.vue'; + @@ -32,5 +49,38 @@ \ No newline at end of file diff --git a/resources/views/vue.blade.php b/resources/views/vue.blade.php index bec8587..7f26f39 100644 --- a/resources/views/vue.blade.php +++ b/resources/views/vue.blade.php @@ -12,7 +12,7 @@ - TLAdle + {{ config('app.name') }} @vite(['resources/js/app.js']) diff --git a/routes/api.php b/routes/api.php index e4c6734..b82fa11 100644 --- a/routes/api.php +++ b/routes/api.php @@ -7,7 +7,7 @@ Route::middleware('web')->group(function () { Route::resource('people', \App\Http\Controllers\TlaController::class); Route::get('fetch_tla/{language?}', [\App\Http\Controllers\TlaController::class, 'fetch_tla']); Route::post('check_tla/{language?}', [\App\Http\Controllers\TlaController::class, 'check_tla']); - Route::post('suggestion /{language?}', [\App\Http\Controllers\TlaController::class, 'suggestion']); + Route::post('suggestion/{language?}', [\App\Http\Controllers\TlaController::class, 'suggestion']); Route::get('fetch_dev', function() { return response()->json(['dev' => env('DEV_MESSAGE', false)]); }); diff --git a/routes/web.php b/routes/web.php index effa042..c1d137a 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,6 +2,6 @@ use Illuminate\Support\Facades\Route; -Route::any('{all}',function(){ +Route::get('{all}',function(){ return view('vue'); })->where(['all' => '.*'])->name("vue");